Version Description
= [5.0] =
Please see the changelog for the complete list of changes in this release. Previous versions of The Events Calendar are not cross-compatible with 5.X add-ons. Remember to always make a backup of your database and files before updating!
Download this release
Release Info
Developer | bordoni |
Plugin | The Events Calendar |
Version | 5.1.0.2 |
Comparing to | |
See all releases |
Code changes from version 5.6.0 to 5.1.0.2
- common/lang/tribe-common-af.mo +0 -0
- common/lang/tribe-common-ar.mo +0 -0
- common/lang/tribe-common-bg_BG.mo +0 -0
- common/lang/tribe-common-ca.mo +0 -0
- common/lang/tribe-common-cs_CZ.mo +0 -0
- common/lang/tribe-common-da_DK.mo +0 -0
- common/lang/tribe-common-de_DE.mo +0 -0
- common/lang/tribe-common-el.mo +0 -0
- common/lang/tribe-common-en_GB.mo +0 -0
- common/lang/tribe-common-es_ES.mo +0 -0
- common/lang/tribe-common-et.mo +0 -0
- common/lang/tribe-common-fi.mo +0 -0
- common/lang/tribe-common-fr_CA.mo +0 -0
- common/lang/tribe-common-fr_FR.mo +0 -0
- common/lang/tribe-common-hu_HU.mo +0 -0
- common/lang/tribe-common-id_ID.mo +0 -0
- common/lang/tribe-common-is_IS.mo +0 -0
- common/lang/tribe-common-it_IT.mo +0 -0
- common/lang/tribe-common-ja.mo +0 -0
- common/lang/tribe-common-lt_LT.mo +0 -0
- common/lang/tribe-common-lv.mo +0 -0
- common/lang/tribe-common-nb_NO.mo +0 -0
- common/lang/tribe-common-nl_NL.mo +0 -0
- common/lang/tribe-common-pl_PL.mo +0 -0
- common/lang/tribe-common-pt_BR.mo +0 -0
- common/lang/tribe-common-pt_PT.mo +0 -0
- common/lang/tribe-common-ro_RO.mo +0 -0
- common/lang/tribe-common-ru_RU.mo +0 -0
- common/lang/tribe-common-sk_SK.mo +0 -0
- common/lang/tribe-common-sl_SI.mo +0 -0
- common/lang/tribe-common-sr_RS.mo +0 -0
- common/lang/tribe-common-sv_SE.mo +0 -0
- common/lang/tribe-common-tr_TR.mo +0 -0
- common/lang/tribe-common-zh_CN.mo +0 -0
- common/lang/tribe-common-zh_TW.mo +0 -0
- common/lang/tribe-common.pot +541 -926
- common/node_modules/mt-a11y-dialog/a11y-dialog.min.js +0 -1
- common/src/Tribe/Admin/Activation_Page.php +16 -51
- common/src/Tribe/Admin/Help_Page.php +110 -133
- common/src/Tribe/Admin/Live_Date_Preview.php +5 -5
- common/src/Tribe/Admin/Notice/Marketing.php +116 -87
- common/src/Tribe/Admin/Notice/Php_Version.php +4 -4
- common/src/Tribe/Admin/Notice/Plugin_Download.php +8 -8
- common/src/Tribe/Admin/Notice/Plugin_Upgrade_Notice.php +1 -1
- common/src/Tribe/Admin/Notice/WP_Version.php +0 -87
- common/src/Tribe/Admin/Notices.php +72 -177
- common/src/Tribe/Ajax/Dropdown.php +41 -131
- common/src/Tribe/Ajax/Operations.php +2 -2
- common/src/Tribe/App_Shop.php +25 -175
- common/src/Tribe/Asset/Data.php +67 -67
- common/src/Tribe/Assets.php +40 -204
- common/src/Tribe/Assets_Pipeline.php +4 -29
- common/src/Tribe/Autoloader.php +6 -23
- common/src/Tribe/Cache.php +8 -48
- common/src/Tribe/Cache_Listener.php +139 -182
- common/src/Tribe/Changelog_Reader.php +2 -2
- common/src/Tribe/Context.php +18 -37
- common/src/Tribe/Context/locations.php +0 -16
- common/src/Tribe/Cost_Utils.php +22 -27
- common/src/Tribe/Credits.php +8 -8
- common/src/Tribe/Customizer.php +77 -179
- common/src/Tribe/Customizer/Control.php +0 -20
- common/src/Tribe/Customizer/Controls/Heading.php +0 -52
- common/src/Tribe/Customizer/Section.php +10 -10
- common/src/Tribe/DB_Lock.php +0 -352
- common/src/Tribe/Data.php +1 -1
- common/src/Tribe/Date_Utils.php +40 -40
- common/src/Tribe/Debug.php +1 -1
- common/src/Tribe/Debug_Bar/Panels/Context.php +2 -2
- common/src/Tribe/Debug_Bar/Panels/Json_Ld.php +2 -2
- common/src/Tribe/Dependency.php +16 -16
- common/src/Tribe/Deprecation.php +16 -16
- common/src/Tribe/Dialog/View.php +0 -12
- common/src/Tribe/Documentation/Swagger/Cost_Details_Definition_Provider.php +15 -15
- common/src/Tribe/Documentation/Swagger/Date_Details_Definition_Provider.php +22 -22
- common/src/Tribe/Documentation/Swagger/Image_Definition_Provider.php +18 -18
- common/src/Tribe/Documentation/Swagger/Image_Size_Definition_Provider.php +17 -17
- common/src/Tribe/Documentation/Swagger/Term_Definition_Provider.php +32 -32
- common/src/Tribe/Duplicate/Post.php +14 -14
- common/src/Tribe/Duplicate/Strategy/Base.php +1 -1
- common/src/Tribe/Duplicate/Strategy/Like.php +2 -2
- common/src/Tribe/Duplicate/Strategy_Factory.php +3 -3
- common/src/Tribe/Editor.php +9 -11
- common/src/Tribe/Editor/Assets.php +43 -94
- common/src/Tribe/Editor/Blocks/Abstract.php +12 -8
- common/src/Tribe/Editor/Blocks/Interface.php +1 -1
- common/src/Tribe/Editor/Configuration.php +25 -30
- common/src/Tribe/Editor/Meta.php +24 -24
- common/src/Tribe/Editor/Provider.php +2 -2
- common/src/Tribe/Editor/Utils.php +2 -2
- common/src/Tribe/Error.php +4 -4
- common/src/Tribe/Exception.php +1 -1
- common/src/Tribe/Extension.php +17 -65
- common/src/Tribe/Extension_Loader.php +7 -11
- common/src/Tribe/Field.php +52 -56
- common/src/Tribe/Image/Uploader.php +5 -8
- common/src/Tribe/JSON_LD/Abstract.php +14 -14
- common/src/Tribe/Languages/Locations.php +8 -32
- common/src/Tribe/Languages/Recaptcha_Map.php +2 -2
- common/src/Tribe/Log.php +15 -14
- common/src/Tribe/Log/Action_Logger.php +1 -1
- common/src/Tribe/Log/Admin.php +23 -23
- common/src/Tribe/Log/Canonical_Formatter.php +5 -78
- common/src/Tribe/Log/File_Logger.php +12 -6
- common/src/Tribe/Log/Logger.php +1 -1
- common/src/Tribe/Log/Null_Logger.php +4 -4
- common/src/Tribe/Log/README.md +29 -29
- common/src/Tribe/Log/Service_Provider.php +1 -29
- common/src/Tribe/Main.php +12 -20
- common/src/Tribe/Meta/Chunker.php +34 -34
- common/src/Tribe/Notices.php +1 -1
- common/src/Tribe/PUE/Checker.php +6 -14
- common/src/Tribe/PUE/Notices.php +16 -16
- common/src/Tribe/PUE/Package_Handler.php +1 -1
- common/src/Tribe/PUE/Plugin_Info.php +4 -4
- common/src/Tribe/PUE/Update_Prevention.php +5 -5
- common/src/Tribe/PUE/Utility.php +3 -3
- common/src/Tribe/Plugin_Meta_Links.php +8 -8
- common/src/Tribe/Plugins.php +0 -32
- common/src/Tribe/Plugins_API.php +112 -197
- common/src/Tribe/Post_History.php +4 -4
- common/src/Tribe/Process/Handler.php +1 -1
- common/src/Tribe/Promise.php +3 -3
- common/src/Tribe/Promoter/Auth.php +48 -46
- common/src/Tribe/Promoter/Connector.php +17 -32
- common/src/Tribe/Promoter/PUE.php +7 -5
- common/src/Tribe/Promoter/View.php +1 -1
- common/src/Tribe/REST/Main.php +3 -3
- common/src/Tribe/REST/Post_Repository.php +12 -16
- common/src/Tribe/Repository.php +172 -137
- common/src/Tribe/Repository/Core_Read_Interface.php +5 -5
- common/src/Tribe/Repository/Decorator.php +5 -5
- common/src/Tribe/Repository/Query_Filters.php +101 -101
- common/src/Tribe/Repository/Usage_Error.php +3 -19
- common/src/Tribe/Rewrite.php +18 -42
- common/src/Tribe/Service_Providers/Body_Classes.php +0 -86
- common/src/Tribe/Service_Providers/Crons.php +0 -37
- common/src/Tribe/Service_Providers/Debug_Bar.php +6 -6
- common/src/Tribe/Service_Providers/Dialog.php +1 -1
- common/src/Tribe/Service_Providers/Processes.php +11 -11
- common/src/Tribe/Service_Providers/Promoter.php +17 -21
- common/src/Tribe/Service_Providers/Shortcodes.php +2 -43
- common/src/Tribe/Service_Providers/Widgets.php +0 -77
- common/src/Tribe/Settings.php +27 -27
- common/src/Tribe/Settings_Manager.php +17 -23
- common/src/Tribe/Settings_Tab.php +13 -13
- common/src/Tribe/Shortcode/Manager.php +0 -75
- common/src/Tribe/Shortcode/Shortcode_Abstract.php +55 -85
- common/src/Tribe/Shortcode/Shortcode_Interface.php +31 -44
- common/src/Tribe/Shortcode/Utils.php +0 -45
- common/src/Tribe/Simple_Table.php +3 -3
- common/src/Tribe/Support.php +28 -33
- common/src/Tribe/Support/Obfuscator.php +2 -2
- common/src/Tribe/Support/Template_Checker.php +7 -6
- common/src/Tribe/Support/Template_Checker_Report.php +2 -2
- common/src/Tribe/Tabbed_View.php +7 -7
- common/src/Tribe/Tabbed_View/Tab.php +6 -6
- common/src/Tribe/Template.php +165 -645
- common/src/Tribe/Template_Factory.php +3 -3
- common/src/Tribe/Template_Part_Cache.php +3 -3
- common/src/Tribe/Templates.php +1 -1
- common/src/Tribe/Terms.php +1 -1
- common/src/Tribe/Timezones.php +8 -7
- common/src/Tribe/Tracker.php +18 -35
- common/src/Tribe/Traits/With_DB_Lock.php +0 -50
- common/src/Tribe/Traits/With_Meta_Updates_Handling.php +0 -66
- common/src/Tribe/Traits/With_Post_Attribute_Detection.php +0 -82
- common/src/Tribe/Updater.php +4 -4
- common/src/Tribe/Utils/Array.php +0 -225
- common/src/Tribe/Utils/Body_Classes.php +0 -350
- common/src/Tribe/Utils/Callback.php +8 -8
- common/src/Tribe/Utils/Collection.php +1 -1
- common/src/Tribe/Utils/Color.php +9 -9
- common/src/Tribe/Utils/Coordinates_Provider.php +3 -3
- common/src/Tribe/Utils/Element_Attributes.php +0 -241
- common/src/Tribe/Utils/Element_Classes.php +1 -1
- common/src/Tribe/Utils/Global_ID.php +9 -9
- common/src/Tribe/Utils/JSON.php +3 -3
- common/src/Tribe/Utils/Paths.php +0 -75
- common/src/Tribe/Utils/Plugins.php +3 -3
- common/src/Tribe/Utils/Post_Collection.php +2 -243
- common/src/Tribe/Utils/Post_Root_Pool.php +2 -2
- common/src/Tribe/Utils/Strings.php +0 -65
- common/src/Tribe/Utils/Taxonomy.php +0 -126
- common/src/Tribe/Validate.php +6 -6
- common/src/Tribe/Validator/Base.php +1 -1
- common/src/Tribe/View_Helpers.php +10 -10
- common/src/Tribe/Widget/Manager.php +0 -97
- common/src/Tribe/Widget/Widget_Abstract.php +0 -874
- common/src/Tribe/Widget/Widget_Interface.php +0 -331
- common/src/admin-views/app-shop.php +80 -191
- common/src/admin-views/notices/tribe-bf-2018-et.php +20 -0
- common/src/admin-views/notices/tribe-bf-2018-general.php +20 -0
- common/src/admin-views/notices/tribe-bf-2018-tec.php +20 -0
- common/src/admin-views/notices/tribe-bf-general.php +0 -22
- common/src/admin-views/notices/tribe-gutenberg-release.php +21 -0
- common/src/admin-views/tabbed-view/tabbed-view.php +1 -13
- common/src/admin-views/tribe-options-display.php +47 -48
- common/src/admin-views/tribe-options-general.php +5 -8
- common/src/admin-views/tribe-options-help.php +12 -42
- common/src/admin-views/tribe-options-licenses.php +17 -17
- common/src/admin-views/tribe-options-network.php +16 -16
- common/src/admin-views/widgets/components/fields.php +0 -43
- common/src/admin-views/widgets/components/fields/checkbox.php +0 -42
- common/src/admin-views/widgets/components/fields/dropdown.php +0 -53
- common/src/admin-views/widgets/components/fields/fieldset.php +0 -39
- common/src/admin-views/widgets/components/fields/number.php +0 -47
- common/src/admin-views/widgets/components/fields/radio.php +0 -43
- common/src/admin-views/widgets/components/fields/section.php +0 -40
- common/src/admin-views/widgets/components/fields/text.php +0 -41
- common/src/admin-views/widgets/components/form.php +0 -31
- common/src/functions/query.php +1 -42
- common/src/functions/template-tags/date.php +7 -7
- common/src/functions/template-tags/general.php +13 -58
- common/src/functions/template-tags/html.php +1 -125
- common/src/functions/template-tags/post.php +2 -5
- common/src/functions/utils.php +73 -247
- common/src/resources/css/app-shop.min.css +1 -1
- common/src/resources/css/app/elements.min.css +1 -1
- common/src/resources/css/common-full.min.css +1 -1
- common/src/resources/css/common-skeleton.min.css +1 -1
- common/src/resources/css/datatables.min.css +1 -1
- common/src/resources/css/dialog.min.css +1 -1
- common/src/resources/css/tribe-common-admin.min.css +1 -1
- common/src/resources/images/app-shop-banner.jpg +0 -0
- common/src/resources/images/app-shop-community-tickets.jpg +0 -0
- common/src/resources/images/app-shop-community.jpg +0 -0
- common/src/resources/images/app-shop-eventbrite.jpg +0 -0
- common/src/resources/images/app-shop-filter-bar.jpg +0 -0
- common/src/resources/images/app-shop-ical.jpg +0 -0
- common/src/resources/images/app-shop-image-widget-plus.jpg +0 -0
- common/src/resources/images/app-shop-pro.jpg +0 -0
- common/src/resources/images/app-shop-promoter.jpg +0 -0
- common/src/resources/images/app-shop-tickets-plus.jpg +0 -0
- common/src/resources/images/donate-link-screenshot.png +0 -0
- common/src/resources/images/gutenberg-admin-notice-TEC.png +0 -0
- common/src/resources/images/gutenberg-admin-notice-tickets.png +0 -0
- common/src/resources/images/header/all-solutions.jpg +0 -0
- common/src/resources/images/header/bundles.jpg +0 -0
- common/src/resources/images/header/extensions.jpg +0 -0
- common/src/resources/images/header/welcome-desktop-et.jpg +0 -0
- common/src/resources/images/header/welcome-desktop-etplus.jpg +0 -0
- common/src/resources/images/header/welcome-desktop.jpg +0 -0
- common/src/resources/images/header/welcome-mobile-et.jpg +0 -0
- common/src/resources/images/header/welcome-mobile-etplus.jpg +0 -0
- common/src/resources/images/header/welcome-mobile.jpg +0 -0
- common/src/resources/images/icons/caret-down.svg +1 -1
- common/src/resources/images/icons/caret-up.svg +1 -1
- common/src/resources/images/icons/horns-white.svg +0 -1
- common/src/resources/images/icons/horns.svg +0 -1
- common/src/resources/images/icons/list.svg +1 -1
- common/src/resources/images/icons/map.svg +1 -1
- common/src/resources/images/icons/photo.svg +1 -1
- common/src/resources/images/icons/sale-burst.svg +0 -12
- common/src/resources/images/logo/bundle-community-manager.svg +0 -1
- common/src/resources/images/logo/bundle-event-importer.svg +0 -1
- common/src/resources/images/logo/bundle-event-marketing.svg +0 -1
- common/src/resources/images/logo/bundle-ultimate.svg +0 -1
- common/src/resources/images/logo/bundle-virtual-events.svg +0 -1
- common/src/resources/images/logo/community-events.svg +0 -1
- common/src/resources/images/logo/community-tickets.svg +0 -1
- common/src/resources/images/logo/event-aggregator.svg +0 -1
- common/src/resources/images/logo/event-tickets-plus.svg +0 -1
- common/src/resources/images/logo/event-tickets.svg +0 -1
- common/src/resources/images/logo/eventbrite-tickets.svg +0 -1
- common/src/resources/images/logo/events-calendar-pro.svg +0 -1
- common/src/resources/images/logo/filterbar.svg +0 -1
- common/src/resources/images/logo/image-widget-plus.svg +0 -1
- common/src/resources/images/logo/promoter.svg +0 -1
- common/src/resources/images/logo/tec-brand.svg +0 -1
common/lang/tribe-common-af.mo
CHANGED
Binary file
|
common/lang/tribe-common-ar.mo
CHANGED
Binary file
|
common/lang/tribe-common-bg_BG.mo
CHANGED
Binary file
|
common/lang/tribe-common-ca.mo
CHANGED
Binary file
|
common/lang/tribe-common-cs_CZ.mo
CHANGED
Binary file
|
common/lang/tribe-common-da_DK.mo
CHANGED
Binary file
|
common/lang/tribe-common-de_DE.mo
CHANGED
Binary file
|
common/lang/tribe-common-el.mo
CHANGED
Binary file
|
common/lang/tribe-common-en_GB.mo
CHANGED
Binary file
|
common/lang/tribe-common-es_ES.mo
CHANGED
Binary file
|
common/lang/tribe-common-et.mo
CHANGED
Binary file
|
common/lang/tribe-common-fi.mo
CHANGED
Binary file
|
common/lang/tribe-common-fr_CA.mo
CHANGED
Binary file
|
common/lang/tribe-common-fr_FR.mo
CHANGED
Binary file
|
common/lang/tribe-common-hu_HU.mo
CHANGED
Binary file
|
common/lang/tribe-common-id_ID.mo
CHANGED
Binary file
|
common/lang/tribe-common-is_IS.mo
CHANGED
Binary file
|
common/lang/tribe-common-it_IT.mo
CHANGED
Binary file
|
common/lang/tribe-common-ja.mo
CHANGED
Binary file
|
common/lang/tribe-common-lt_LT.mo
CHANGED
Binary file
|
common/lang/tribe-common-lv.mo
CHANGED
Binary file
|
common/lang/tribe-common-nb_NO.mo
CHANGED
Binary file
|
common/lang/tribe-common-nl_NL.mo
CHANGED
Binary file
|
common/lang/tribe-common-pl_PL.mo
ADDED
Binary file
|
common/lang/tribe-common-pt_BR.mo
CHANGED
Binary file
|
common/lang/tribe-common-pt_PT.mo
CHANGED
Binary file
|
common/lang/tribe-common-ro_RO.mo
CHANGED
Binary file
|
common/lang/tribe-common-ru_RU.mo
CHANGED
Binary file
|
common/lang/tribe-common-sk_SK.mo
CHANGED
Binary file
|
common/lang/tribe-common-sl_SI.mo
CHANGED
Binary file
|
common/lang/tribe-common-sr_RS.mo
CHANGED
Binary file
|
common/lang/tribe-common-sv_SE.mo
CHANGED
Binary file
|
common/lang/tribe-common-tr_TR.mo
CHANGED
Binary file
|
common/lang/tribe-common-zh_CN.mo
CHANGED
Binary file
|
common/lang/tribe-common-zh_TW.mo
CHANGED
Binary file
|
common/lang/tribe-common.pot
CHANGED
@@ -1,34 +1,34 @@
|
|
1 |
-
# Copyright (C)
|
2 |
# This file is distributed under the same license as the Tribe Common package.
|
3 |
msgid ""
|
4 |
msgstr ""
|
5 |
-
"Project-Id-Version: Tribe Common 4.
|
6 |
"Report-Msgid-Bugs-To: http://m.tri.be/191x\n"
|
7 |
-
"POT-Creation-Date:
|
8 |
"MIME-Version: 1.0\n"
|
9 |
"Content-Type: text/plain; charset=UTF-8\n"
|
10 |
"Content-Transfer-Encoding: 8bit\n"
|
11 |
-
"PO-Revision-Date:
|
12 |
"Last-Translator: \n"
|
13 |
"Language-Team: \n"
|
14 |
|
15 |
-
#: src/Tribe/Admin/Activation_Page.php:
|
16 |
msgid "Go to plugins page"
|
17 |
msgstr ""
|
18 |
|
19 |
-
#: src/Tribe/Admin/Activation_Page.php:
|
20 |
msgid "Return to Plugins page"
|
21 |
msgstr ""
|
22 |
|
23 |
-
#: src/Tribe/Admin/Activation_Page.php:
|
24 |
msgid "Go to WordPress Updates page"
|
25 |
msgstr ""
|
26 |
|
27 |
-
#: src/Tribe/Admin/Activation_Page.php:
|
28 |
msgid "Return to WordPress Updates"
|
29 |
msgstr ""
|
30 |
|
31 |
-
#: src/Tribe/Admin/Help_Page.php:56 src/admin-views/tribe-options-help.php:
|
32 |
msgid "Copy to clipboard"
|
33 |
msgstr ""
|
34 |
|
@@ -40,9 +40,7 @@ msgstr ""
|
|
40 |
msgid "Press \"Cmd + C\" to copy"
|
41 |
msgstr ""
|
42 |
|
43 |
-
|
44 |
-
#. Author of the plugin/theme
|
45 |
-
#: src/Tribe/Admin/Help_Page.php:79 src/Tribe/Customizer.php:625
|
46 |
#: src/Tribe/Plugins_API.php:25
|
47 |
msgid "The Events Calendar"
|
48 |
msgstr ""
|
@@ -53,128 +51,124 @@ msgid ""
|
|
53 |
"easily share your events."
|
54 |
msgstr ""
|
55 |
|
56 |
-
#: src/Tribe/Admin/Help_Page.php:
|
57 |
msgid "Event Tickets"
|
58 |
msgstr ""
|
59 |
|
60 |
-
#: src/Tribe/Admin/Help_Page.php:
|
61 |
msgid ""
|
62 |
"Events Tickets is a carefully crafted, extensible plugin that lets you "
|
63 |
"easily sell tickets for your events."
|
64 |
msgstr ""
|
65 |
|
66 |
-
#: src/Tribe/Admin/Help_Page.php:
|
67 |
msgid "Advanced Post Manager"
|
68 |
msgstr ""
|
69 |
|
70 |
-
#: src/Tribe/Admin/Help_Page.php:
|
71 |
msgid ""
|
72 |
"Turbo charge your posts admin for any custom post type with sortable filters "
|
73 |
"and columns, and auto-registration of metaboxes."
|
74 |
msgstr ""
|
75 |
|
76 |
-
#: src/Tribe/Admin/Help_Page.php:
|
77 |
msgid " and "
|
78 |
msgstr ""
|
79 |
|
80 |
-
#: src/Tribe/Admin/Help_Page.php:
|
81 |
msgid "Events Calendar PRO"
|
82 |
msgstr ""
|
83 |
|
84 |
-
#: src/Tribe/Admin/Help_Page.php:
|
85 |
msgid "Eventbrite Tickets"
|
86 |
msgstr ""
|
87 |
|
88 |
-
#: src/Tribe/Admin/Help_Page.php:
|
89 |
msgid "Community Events"
|
90 |
msgstr ""
|
91 |
|
92 |
-
#: src/Tribe/Admin/Help_Page.php:
|
93 |
msgid "Event Aggregator"
|
94 |
msgstr ""
|
95 |
|
96 |
-
#: src/Tribe/Admin/Help_Page.php:
|
97 |
msgid "Filter Bar"
|
98 |
msgstr ""
|
99 |
|
100 |
-
#: src/Tribe/Admin/Help_Page.php:
|
101 |
-
msgid "Virtual Events"
|
102 |
-
msgstr ""
|
103 |
-
|
104 |
-
#: src/Tribe/Admin/Help_Page.php:274 src/Tribe/Plugins_API.php:93
|
105 |
msgid "Event Tickets Plus"
|
106 |
msgstr ""
|
107 |
|
108 |
-
#: src/Tribe/Admin/Help_Page.php:
|
109 |
msgid "Community Tickets"
|
110 |
msgstr ""
|
111 |
|
112 |
-
#: src/Tribe/Admin/Help_Page.php:
|
113 |
msgctxt "not available"
|
114 |
msgid "n/a"
|
115 |
msgstr ""
|
116 |
|
117 |
-
#: src/Tribe/Admin/Help_Page.php:
|
118 |
msgid "You need to upgrade!"
|
119 |
msgstr ""
|
120 |
|
121 |
-
#: src/Tribe/Admin/Help_Page.php:
|
122 |
msgid "You are up to date!"
|
123 |
msgstr ""
|
124 |
|
125 |
-
#: src/Tribe/Admin/Help_Page.php:
|
126 |
msgid "Activate %s"
|
127 |
msgstr ""
|
128 |
|
129 |
-
#: src/Tribe/Admin/Help_Page.php:
|
130 |
msgid "Activate Plugin"
|
131 |
msgstr ""
|
132 |
|
133 |
-
#: src/Tribe/Admin/Help_Page.php:
|
134 |
msgid "Upgrade Plugin"
|
135 |
msgstr ""
|
136 |
|
137 |
-
#: src/Tribe/Admin/Help_Page.php:
|
138 |
msgid "Install %s"
|
139 |
msgstr ""
|
140 |
|
141 |
-
#: src/Tribe/Admin/Help_Page.php:
|
142 |
msgid "Install Plugin"
|
143 |
msgstr ""
|
144 |
|
145 |
-
#: src/Tribe/Admin/Help_Page.php:
|
146 |
msgid "Latest Version:"
|
147 |
msgstr ""
|
148 |
|
149 |
-
#: src/Tribe/Admin/Help_Page.php:
|
150 |
msgid "Requires:"
|
151 |
msgstr ""
|
152 |
|
153 |
-
#: src/Tribe/Admin/Help_Page.php:
|
154 |
msgid "WordPress "
|
155 |
msgstr ""
|
156 |
|
157 |
-
#: src/Tribe/Admin/Help_Page.php:
|
158 |
msgid "Active Users:"
|
159 |
msgstr ""
|
160 |
|
161 |
-
#: src/Tribe/Admin/Help_Page.php:
|
162 |
msgid "Rating:"
|
163 |
msgstr ""
|
164 |
|
165 |
-
#: src/Tribe/Admin/Help_Page.php:
|
166 |
msgid "Premium Add-Ons"
|
167 |
msgstr ""
|
168 |
|
169 |
-
#: src/Tribe/Admin/Help_Page.php:
|
170 |
msgid "Plugin Active"
|
171 |
msgstr ""
|
172 |
|
173 |
-
#: src/Tribe/Admin/Help_Page.php:
|
174 |
msgid "Plugin Inactive"
|
175 |
msgstr ""
|
176 |
|
177 |
-
#: src/Tribe/Admin/Help_Page.php:
|
178 |
msgid "Visit the Add-on Page"
|
179 |
msgstr ""
|
180 |
|
@@ -221,175 +215,27 @@ msgid ""
|
|
221 |
"compatible version of The Events Calendar. %2$s"
|
222 |
msgstr ""
|
223 |
|
224 |
-
#: src/Tribe/Admin/Notice/WP_Version.php:79
|
225 |
-
msgid ""
|
226 |
-
"You are using WordPress 5.7 which included a major jQuery update that may "
|
227 |
-
"cause compatibility issues with past versions of The Events Calendar, Event "
|
228 |
-
"Tickets and other plugins."
|
229 |
-
msgstr ""
|
230 |
-
|
231 |
-
#: src/Tribe/Admin/Notice/WP_Version.php:81
|
232 |
-
msgid ""
|
233 |
-
"WordPress 5.7 includes a major jQuery update that may cause compatibility "
|
234 |
-
"issues with past versions of The Events Calendar, Event Tickets and other "
|
235 |
-
"plugins."
|
236 |
-
msgstr ""
|
237 |
-
|
238 |
-
#: src/Tribe/Admin/Notice/WP_Version.php:83
|
239 |
-
msgid "Read more."
|
240 |
-
msgstr ""
|
241 |
-
|
242 |
#: src/Tribe/Ajax/Dropdown.php:38
|
243 |
msgid "Cannot look for Terms without a taxonomy"
|
244 |
msgstr ""
|
245 |
|
246 |
-
#: src/Tribe/Ajax/Dropdown.php:
|
247 |
msgid "Missing data source for this dropdown"
|
248 |
msgstr ""
|
249 |
|
250 |
-
#: src/Tribe/Ajax/Dropdown.php:
|
251 |
msgid "Empty data set for this dropdown"
|
252 |
msgstr ""
|
253 |
|
254 |
-
#: src/Tribe/Ajax/Dropdown.php:
|
255 |
msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
|
256 |
msgstr ""
|
257 |
|
258 |
#: src/Tribe/App_Shop.php:50 src/Tribe/App_Shop.php:51
|
259 |
-
#: src/Tribe/App_Shop.php:
|
260 |
msgid "Event Add-Ons"
|
261 |
msgstr ""
|
262 |
|
263 |
-
#: src/Tribe/App_Shop.php:175
|
264 |
-
msgid "Events Marketing Bundle"
|
265 |
-
msgstr ""
|
266 |
-
|
267 |
-
#: src/Tribe/App_Shop.php:178 src/Tribe/App_Shop.php:202
|
268 |
-
#: src/Tribe/App_Shop.php:221 src/Tribe/App_Shop.php:234
|
269 |
-
msgid "Save over 20%"
|
270 |
-
msgstr ""
|
271 |
-
|
272 |
-
#: src/Tribe/App_Shop.php:179
|
273 |
-
msgid "Ticket sales, attendee management, and email marketing for your events"
|
274 |
-
msgstr ""
|
275 |
-
|
276 |
-
#: src/Tribe/App_Shop.php:187
|
277 |
-
msgid "Event Importer Bundle"
|
278 |
-
msgstr ""
|
279 |
-
|
280 |
-
#: src/Tribe/App_Shop.php:190
|
281 |
-
msgid "Save over 25%"
|
282 |
-
msgstr ""
|
283 |
-
|
284 |
-
#: src/Tribe/App_Shop.php:191
|
285 |
-
msgid ""
|
286 |
-
"Fill your calendar with events from across the web, including Google "
|
287 |
-
"Calendar, Meetup, and more."
|
288 |
-
msgstr ""
|
289 |
-
|
290 |
-
#: src/Tribe/App_Shop.php:199
|
291 |
-
msgid "Virtual Events Marketing Bundle"
|
292 |
-
msgstr ""
|
293 |
-
|
294 |
-
#: src/Tribe/App_Shop.php:203
|
295 |
-
msgid "Streamline your online events and increase revenue."
|
296 |
-
msgstr ""
|
297 |
-
|
298 |
-
#: src/Tribe/App_Shop.php:211
|
299 |
-
msgid "Sell tickets and earn revenue for online events"
|
300 |
-
msgstr ""
|
301 |
-
|
302 |
-
#: src/Tribe/App_Shop.php:212 src/Tribe/Plugins_API.php:218
|
303 |
-
msgid "Zoom integration"
|
304 |
-
msgstr ""
|
305 |
-
|
306 |
-
#: src/Tribe/App_Shop.php:213
|
307 |
-
msgid "Automated emails optimized for virtual events"
|
308 |
-
msgstr ""
|
309 |
-
|
310 |
-
#: src/Tribe/App_Shop.php:214
|
311 |
-
msgid "Add recurring events"
|
312 |
-
msgstr ""
|
313 |
-
|
314 |
-
#: src/Tribe/App_Shop.php:218
|
315 |
-
msgid "Community Manager Bundle"
|
316 |
-
msgstr ""
|
317 |
-
|
318 |
-
#: src/Tribe/App_Shop.php:222
|
319 |
-
msgid ""
|
320 |
-
"Handle event submissions with ticket sales and everything you need to build "
|
321 |
-
"a robust community."
|
322 |
-
msgstr ""
|
323 |
-
|
324 |
-
#: src/Tribe/App_Shop.php:231
|
325 |
-
msgid "Ultimate Bundle"
|
326 |
-
msgstr ""
|
327 |
-
|
328 |
-
#: src/Tribe/App_Shop.php:235
|
329 |
-
msgid "All of our premium events management plugins at a deep discount."
|
330 |
-
msgstr ""
|
331 |
-
|
332 |
-
#: src/Tribe/App_Shop.php:262
|
333 |
-
msgid "Website URL CTA"
|
334 |
-
msgstr ""
|
335 |
-
|
336 |
-
#: src/Tribe/App_Shop.php:265
|
337 |
-
msgid ""
|
338 |
-
"Create a strong call-to-action for attendees to \"Join Webinar\" instead of "
|
339 |
-
"only sharing a website address."
|
340 |
-
msgstr ""
|
341 |
-
|
342 |
-
#: src/Tribe/App_Shop.php:268
|
343 |
-
msgid "Link Directly to Webinar"
|
344 |
-
msgstr ""
|
345 |
-
|
346 |
-
#: src/Tribe/App_Shop.php:271
|
347 |
-
msgid ""
|
348 |
-
"When users click on the event title, they’ll be taken right to the source of "
|
349 |
-
"your event, offering a direct route to join."
|
350 |
-
msgstr ""
|
351 |
-
|
352 |
-
#: src/Tribe/App_Shop.php:274
|
353 |
-
msgid "Events Happening Now"
|
354 |
-
msgstr ""
|
355 |
-
|
356 |
-
#: src/Tribe/App_Shop.php:277
|
357 |
-
msgid ""
|
358 |
-
"Use this shortcode to display events that are currently in progress, like "
|
359 |
-
"webinars and livestreams."
|
360 |
-
msgstr ""
|
361 |
-
|
362 |
-
#: src/Tribe/App_Shop.php:280
|
363 |
-
msgid "Custom Venue Links"
|
364 |
-
msgstr ""
|
365 |
-
|
366 |
-
#: src/Tribe/App_Shop.php:283
|
367 |
-
msgid ""
|
368 |
-
"Turn the venue name for your event into a clickable URL — a great way to "
|
369 |
-
"link directly to a venue’s website or a virtual meeting."
|
370 |
-
msgstr ""
|
371 |
-
|
372 |
-
#: src/Tribe/App_Shop.php:286
|
373 |
-
msgid "Adjust Label"
|
374 |
-
msgstr ""
|
375 |
-
|
376 |
-
#: src/Tribe/App_Shop.php:289
|
377 |
-
msgid ""
|
378 |
-
"Change \"Events\" to \"Webinars,\" or \"Venues\" to \"Livestream,\" or "
|
379 |
-
"\"Organizers\" to \"Hosts.\" Tailor your calendar for virtual events and "
|
380 |
-
"meetings."
|
381 |
-
msgstr ""
|
382 |
-
|
383 |
-
#: src/Tribe/App_Shop.php:292
|
384 |
-
msgid "Reach Attendees"
|
385 |
-
msgstr ""
|
386 |
-
|
387 |
-
#: src/Tribe/App_Shop.php:295
|
388 |
-
msgid ""
|
389 |
-
"From registration to attendance history, view every step of the event "
|
390 |
-
"lifecycle with this HubSpot integration."
|
391 |
-
msgstr ""
|
392 |
-
|
393 |
#: src/Tribe/Cost_Utils.php:114
|
394 |
msgid "Free"
|
395 |
msgstr ""
|
@@ -406,7 +252,7 @@ msgstr ""
|
|
406 |
msgid "Rate %1$sEvent Tickets%2$s %3$s"
|
407 |
msgstr ""
|
408 |
|
409 |
-
#: src/Tribe/Customizer.php:
|
410 |
msgid ""
|
411 |
"Use the following panel of your customizer to change the styling of your "
|
412 |
"Calendar and Event pages."
|
@@ -414,7 +260,7 @@ msgstr ""
|
|
414 |
|
415 |
#: src/Tribe/Debug_Bar/Panels/Context.php:22
|
416 |
#: src/Tribe/Debug_Bar/Panels/Context.php:50
|
417 |
-
msgid "
|
418 |
msgstr ""
|
419 |
|
420 |
#: src/Tribe/Debug_Bar/Panels/Context.php:53
|
@@ -447,34 +293,34 @@ msgstr ""
|
|
447 |
|
448 |
#: src/Tribe/Debug_Bar/Panels/Json_Ld.php:21
|
449 |
#: src/Tribe/Debug_Bar/Panels/Json_Ld.php:40
|
450 |
-
msgid "
|
451 |
msgstr ""
|
452 |
|
453 |
-
#: src/Tribe/Dialog/View.php:
|
454 |
msgid "Open the modal window"
|
455 |
msgstr ""
|
456 |
|
457 |
-
#: src/Tribe/Dialog/View.php:
|
458 |
msgid "Close this modal window"
|
459 |
msgstr ""
|
460 |
|
461 |
-
#: src/Tribe/Dialog/View.php:
|
462 |
msgid "Cancel"
|
463 |
msgstr ""
|
464 |
|
465 |
-
#: src/Tribe/Dialog/View.php:
|
466 |
msgid "Confirm"
|
467 |
msgstr ""
|
468 |
|
469 |
-
#: src/Tribe/Dialog/View.php:
|
470 |
msgid "OK"
|
471 |
msgstr ""
|
472 |
|
473 |
-
#: src/Tribe/Dialog/View.php:
|
474 |
msgid "Open the dialog window"
|
475 |
msgstr ""
|
476 |
|
477 |
-
#: src/Tribe/Dialog/View.php:
|
478 |
msgid "Close this dialog window"
|
479 |
msgstr ""
|
480 |
|
@@ -590,31 +436,29 @@ msgstr ""
|
|
590 |
msgid "A list of links to the term own, archive and parent REST URL"
|
591 |
msgstr ""
|
592 |
|
593 |
-
#: src/Tribe/Editor/Blocks/Abstract.php:
|
594 |
msgid "Problem loading the block, please remove this block to restart."
|
595 |
msgstr ""
|
596 |
|
597 |
#. translators: %s: duration
|
598 |
-
#: src/Tribe/Editor/Configuration.php:
|
599 |
msgid "%s from now"
|
600 |
msgstr ""
|
601 |
|
602 |
#. translators: %s: duration
|
603 |
-
#: src/Tribe/Editor/Configuration.php:
|
604 |
msgid "%s ago"
|
605 |
msgstr ""
|
606 |
|
607 |
-
#: src/Tribe/Editor/Configuration.php:
|
608 |
-
#: src/Tribe/Editor/Configuration.php:103
|
609 |
msgid "g:i a"
|
610 |
msgstr ""
|
611 |
|
612 |
-
#: src/Tribe/Editor/Configuration.php:
|
613 |
-
#: src/Tribe/Editor/Configuration.php:103
|
614 |
msgid "F j, Y"
|
615 |
msgstr ""
|
616 |
|
617 |
-
#: src/Tribe/Editor/Configuration.php:
|
618 |
msgid "F j"
|
619 |
msgstr ""
|
620 |
|
@@ -634,7 +478,7 @@ msgstr ""
|
|
634 |
msgid "Tutorial"
|
635 |
msgstr ""
|
636 |
|
637 |
-
#: src/Tribe/Extension.php:
|
638 |
msgid ""
|
639 |
"Unable to run Tribe Extensions. Your website host is running PHP 5.2 or "
|
640 |
"older, and has likely disabled or misconfigured debug_backtrace(). You, or "
|
@@ -642,1206 +486,1197 @@ msgid ""
|
|
642 |
"debug_backtrace() for Tribe Extensions to work."
|
643 |
msgstr ""
|
644 |
|
645 |
-
#: src/Tribe/
|
646 |
-
msgctxt "extension disallowed"
|
647 |
-
msgid ""
|
648 |
-
"This extension has been programmatically disallowed. The most common reason "
|
649 |
-
"is due to another The Events Calendar plugin having absorbed or replaced "
|
650 |
-
"this extension's functionality. This extension plugin has been deactivated, "
|
651 |
-
"and you should likely delete it."
|
652 |
-
msgstr ""
|
653 |
-
|
654 |
-
#: src/Tribe/Field.php:234
|
655 |
msgid "Invalid field type specified"
|
656 |
msgstr ""
|
657 |
|
658 |
-
#: src/Tribe/Field.php:
|
659 |
msgid "No radio options specified"
|
660 |
msgstr ""
|
661 |
|
662 |
-
#: src/Tribe/Field.php:
|
663 |
msgid "No checkbox options specified"
|
664 |
msgstr ""
|
665 |
|
666 |
-
#: src/Tribe/Field.php:
|
667 |
msgid "No select options specified"
|
668 |
msgstr ""
|
669 |
|
670 |
-
#: src/Tribe/Languages/Locations.php:
|
671 |
msgid "United States"
|
672 |
msgstr ""
|
673 |
|
674 |
-
#: src/Tribe/Languages/Locations.php:
|
675 |
msgid "Afghanistan"
|
676 |
msgstr ""
|
677 |
|
678 |
-
#: src/Tribe/Languages/Locations.php:
|
679 |
msgid "Åland Islands"
|
680 |
msgstr ""
|
681 |
|
682 |
-
#: src/Tribe/Languages/Locations.php:
|
683 |
msgid "Albania"
|
684 |
msgstr ""
|
685 |
|
686 |
-
#: src/Tribe/Languages/Locations.php:
|
687 |
msgid "Algeria"
|
688 |
msgstr ""
|
689 |
|
690 |
-
#: src/Tribe/Languages/Locations.php:
|
691 |
msgid "American Samoa"
|
692 |
msgstr ""
|
693 |
|
694 |
-
#: src/Tribe/Languages/Locations.php:
|
695 |
msgid "Andorra"
|
696 |
msgstr ""
|
697 |
|
698 |
-
#: src/Tribe/Languages/Locations.php:
|
699 |
msgid "Angola"
|
700 |
msgstr ""
|
701 |
|
702 |
-
#: src/Tribe/Languages/Locations.php:
|
703 |
msgid "Anguilla"
|
704 |
msgstr ""
|
705 |
|
706 |
-
#: src/Tribe/Languages/Locations.php:
|
707 |
msgid "Antarctica"
|
708 |
msgstr ""
|
709 |
|
710 |
-
#: src/Tribe/Languages/Locations.php:
|
711 |
msgid "Antigua and Barbuda"
|
712 |
msgstr ""
|
713 |
|
714 |
-
#: src/Tribe/Languages/Locations.php:
|
715 |
msgid "Argentina"
|
716 |
msgstr ""
|
717 |
|
718 |
-
#: src/Tribe/Languages/Locations.php:
|
719 |
msgid "Armenia"
|
720 |
msgstr ""
|
721 |
|
722 |
-
#: src/Tribe/Languages/Locations.php:
|
723 |
msgid "Aruba"
|
724 |
msgstr ""
|
725 |
|
726 |
-
#: src/Tribe/Languages/Locations.php:
|
727 |
msgid "Australia"
|
728 |
msgstr ""
|
729 |
|
730 |
-
#: src/Tribe/Languages/Locations.php:
|
731 |
msgid "Austria"
|
732 |
msgstr ""
|
733 |
|
734 |
-
#: src/Tribe/Languages/Locations.php:
|
735 |
msgid "Azerbaijan"
|
736 |
msgstr ""
|
737 |
|
738 |
-
#: src/Tribe/Languages/Locations.php:
|
739 |
msgid "Bahamas"
|
740 |
msgstr ""
|
741 |
|
742 |
-
#: src/Tribe/Languages/Locations.php:
|
743 |
msgid "Bahrain"
|
744 |
msgstr ""
|
745 |
|
746 |
-
#: src/Tribe/Languages/Locations.php:
|
747 |
msgid "Bangladesh"
|
748 |
msgstr ""
|
749 |
|
750 |
-
#: src/Tribe/Languages/Locations.php:
|
751 |
msgid "Barbados"
|
752 |
msgstr ""
|
753 |
|
754 |
-
#: src/Tribe/Languages/Locations.php:
|
755 |
msgid "Belarus"
|
756 |
msgstr ""
|
757 |
|
758 |
-
#: src/Tribe/Languages/Locations.php:
|
759 |
msgid "Belgium"
|
760 |
msgstr ""
|
761 |
|
762 |
-
#: src/Tribe/Languages/Locations.php:
|
763 |
msgid "Belize"
|
764 |
msgstr ""
|
765 |
|
766 |
-
#: src/Tribe/Languages/Locations.php:
|
767 |
msgid "Benin"
|
768 |
msgstr ""
|
769 |
|
770 |
-
#: src/Tribe/Languages/Locations.php:
|
771 |
msgid "Bermuda"
|
772 |
msgstr ""
|
773 |
|
774 |
-
#: src/Tribe/Languages/Locations.php:
|
775 |
msgid "Bhutan"
|
776 |
msgstr ""
|
777 |
|
778 |
-
#: src/Tribe/Languages/Locations.php:
|
779 |
msgid "Bolivia"
|
780 |
msgstr ""
|
781 |
|
782 |
-
#: src/Tribe/Languages/Locations.php:
|
783 |
msgid "Bosnia and Herzegovina"
|
784 |
msgstr ""
|
785 |
|
786 |
-
#: src/Tribe/Languages/Locations.php:
|
787 |
msgid "Botswana"
|
788 |
msgstr ""
|
789 |
|
790 |
-
#: src/Tribe/Languages/Locations.php:
|
791 |
msgid "Bouvet Island"
|
792 |
msgstr ""
|
793 |
|
794 |
-
#: src/Tribe/Languages/Locations.php:
|
795 |
msgid "Brazil"
|
796 |
msgstr ""
|
797 |
|
798 |
-
#: src/Tribe/Languages/Locations.php:
|
799 |
msgid "British Indian Ocean Territory"
|
800 |
msgstr ""
|
801 |
|
802 |
-
#: src/Tribe/Languages/Locations.php:
|
803 |
msgid "Brunei Darussalam"
|
804 |
msgstr ""
|
805 |
|
806 |
-
#: src/Tribe/Languages/Locations.php:
|
807 |
msgid "Bulgaria"
|
808 |
msgstr ""
|
809 |
|
810 |
-
#: src/Tribe/Languages/Locations.php:
|
811 |
msgid "Burkina Faso"
|
812 |
msgstr ""
|
813 |
|
814 |
-
#: src/Tribe/Languages/Locations.php:
|
815 |
msgid "Burundi"
|
816 |
msgstr ""
|
817 |
|
818 |
-
#: src/Tribe/Languages/Locations.php:
|
819 |
msgid "Cambodia"
|
820 |
msgstr ""
|
821 |
|
822 |
-
#: src/Tribe/Languages/Locations.php:
|
823 |
msgid "Cameroon"
|
824 |
msgstr ""
|
825 |
|
826 |
-
#: src/Tribe/Languages/Locations.php:
|
827 |
msgid "Canada"
|
828 |
msgstr ""
|
829 |
|
830 |
-
#: src/Tribe/Languages/Locations.php:
|
831 |
msgid "Cape Verde"
|
832 |
msgstr ""
|
833 |
|
834 |
-
#: src/Tribe/Languages/Locations.php:
|
835 |
msgid "Cayman Islands"
|
836 |
msgstr ""
|
837 |
|
838 |
-
#: src/Tribe/Languages/Locations.php:
|
839 |
msgid "Central African Republic"
|
840 |
msgstr ""
|
841 |
|
842 |
-
#: src/Tribe/Languages/Locations.php:
|
843 |
msgid "Chad"
|
844 |
msgstr ""
|
845 |
|
846 |
-
#: src/Tribe/Languages/Locations.php:
|
847 |
msgid "Chile"
|
848 |
msgstr ""
|
849 |
|
850 |
-
#: src/Tribe/Languages/Locations.php:
|
851 |
msgid "China"
|
852 |
msgstr ""
|
853 |
|
854 |
-
#: src/Tribe/Languages/Locations.php:
|
855 |
msgid "Christmas Island"
|
856 |
msgstr ""
|
857 |
|
858 |
-
#: src/Tribe/Languages/Locations.php:
|
859 |
msgid "Cocos (Keeling) Islands"
|
860 |
msgstr ""
|
861 |
|
862 |
-
#: src/Tribe/Languages/Locations.php:
|
863 |
msgid "Collectivity of Saint Martin"
|
864 |
msgstr ""
|
865 |
|
866 |
-
#: src/Tribe/Languages/Locations.php:
|
867 |
msgid "Colombia"
|
868 |
msgstr ""
|
869 |
|
870 |
-
#: src/Tribe/Languages/Locations.php:
|
871 |
msgid "Comoros"
|
872 |
msgstr ""
|
873 |
|
874 |
-
#: src/Tribe/Languages/Locations.php:
|
875 |
msgid "Congo"
|
876 |
msgstr ""
|
877 |
|
878 |
-
#: src/Tribe/Languages/Locations.php:
|
879 |
msgid "Congo, Democratic Republic of the"
|
880 |
msgstr ""
|
881 |
|
882 |
-
#: src/Tribe/Languages/Locations.php:
|
883 |
msgid "Cook Islands"
|
884 |
msgstr ""
|
885 |
|
886 |
-
#: src/Tribe/Languages/Locations.php:
|
887 |
msgid "Costa Rica"
|
888 |
msgstr ""
|
889 |
|
890 |
-
#: src/Tribe/Languages/Locations.php:
|
891 |
msgid "Côte d'Ivoire"
|
892 |
msgstr ""
|
893 |
|
894 |
-
#: src/Tribe/Languages/Locations.php:
|
895 |
msgid "Croatia (Local Name: Hrvatska)"
|
896 |
msgstr ""
|
897 |
|
898 |
-
#: src/Tribe/Languages/Locations.php:
|
899 |
msgid "Cuba"
|
900 |
msgstr ""
|
901 |
|
902 |
-
#: src/Tribe/Languages/Locations.php:
|
903 |
msgid "Curaçao"
|
904 |
msgstr ""
|
905 |
|
906 |
-
#: src/Tribe/Languages/Locations.php:
|
907 |
msgid "Cyprus"
|
908 |
msgstr ""
|
909 |
|
910 |
-
#: src/Tribe/Languages/Locations.php:
|
911 |
msgid "Czech Republic"
|
912 |
msgstr ""
|
913 |
|
914 |
-
#: src/Tribe/Languages/Locations.php:
|
915 |
msgid "Denmark"
|
916 |
msgstr ""
|
917 |
|
918 |
-
#: src/Tribe/Languages/Locations.php:
|
919 |
msgid "Djibouti"
|
920 |
msgstr ""
|
921 |
|
922 |
-
#: src/Tribe/Languages/Locations.php:
|
923 |
msgid "Dominica"
|
924 |
msgstr ""
|
925 |
|
926 |
-
#: src/Tribe/Languages/Locations.php:
|
927 |
msgid "Dominican Republic"
|
928 |
msgstr ""
|
929 |
|
930 |
-
#: src/Tribe/Languages/Locations.php:
|
931 |
msgid "East Timor"
|
932 |
msgstr ""
|
933 |
|
934 |
-
#: src/Tribe/Languages/Locations.php:
|
935 |
msgid "Ecuador"
|
936 |
msgstr ""
|
937 |
|
938 |
-
#: src/Tribe/Languages/Locations.php:
|
939 |
msgid "Egypt"
|
940 |
msgstr ""
|
941 |
|
942 |
-
#: src/Tribe/Languages/Locations.php:
|
943 |
msgid "El Salvador"
|
944 |
msgstr ""
|
945 |
|
946 |
-
#: src/Tribe/Languages/Locations.php:
|
947 |
msgid "Equatorial Guinea"
|
948 |
msgstr ""
|
949 |
|
950 |
-
#: src/Tribe/Languages/Locations.php:
|
951 |
msgid "Eritrea"
|
952 |
msgstr ""
|
953 |
|
954 |
-
#: src/Tribe/Languages/Locations.php:
|
955 |
msgid "Estonia"
|
956 |
msgstr ""
|
957 |
|
958 |
-
#: src/Tribe/Languages/Locations.php:
|
959 |
msgid "Ethiopia"
|
960 |
msgstr ""
|
961 |
|
962 |
-
#: src/Tribe/Languages/Locations.php:
|
963 |
msgid "Falkland Islands (Malvinas)"
|
964 |
msgstr ""
|
965 |
|
966 |
-
#: src/Tribe/Languages/Locations.php:
|
967 |
msgid "Faroe Islands"
|
968 |
msgstr ""
|
969 |
|
970 |
-
#: src/Tribe/Languages/Locations.php:
|
971 |
msgid "Fiji"
|
972 |
msgstr ""
|
973 |
|
974 |
-
#: src/Tribe/Languages/Locations.php:
|
975 |
msgid "Finland"
|
976 |
msgstr ""
|
977 |
|
978 |
-
#: src/Tribe/Languages/Locations.php:
|
979 |
msgid "France"
|
980 |
msgstr ""
|
981 |
|
982 |
-
#: src/Tribe/Languages/Locations.php:
|
983 |
msgid "French Guiana"
|
984 |
msgstr ""
|
985 |
|
986 |
-
#: src/Tribe/Languages/Locations.php:
|
987 |
msgid "French Polynesia"
|
988 |
msgstr ""
|
989 |
|
990 |
-
#: src/Tribe/Languages/Locations.php:
|
991 |
msgid "French Southern Territories"
|
992 |
msgstr ""
|
993 |
|
994 |
-
#: src/Tribe/Languages/Locations.php:
|
995 |
msgid "Gabon"
|
996 |
msgstr ""
|
997 |
|
998 |
-
#: src/Tribe/Languages/Locations.php:
|
999 |
msgid "Gambia"
|
1000 |
msgstr ""
|
1001 |
|
1002 |
-
#: src/Tribe/Languages/Locations.php:
|
1003 |
msgctxt "The country"
|
1004 |
msgid "Georgia"
|
1005 |
msgstr ""
|
1006 |
|
1007 |
-
#: src/Tribe/Languages/Locations.php:
|
1008 |
msgid "Germany"
|
1009 |
msgstr ""
|
1010 |
|
1011 |
-
#: src/Tribe/Languages/Locations.php:
|
1012 |
msgid "Ghana"
|
1013 |
msgstr ""
|
1014 |
|
1015 |
-
#: src/Tribe/Languages/Locations.php:
|
1016 |
msgid "Gibraltar"
|
1017 |
msgstr ""
|
1018 |
|
1019 |
-
#: src/Tribe/Languages/Locations.php:
|
1020 |
msgid "Greece"
|
1021 |
msgstr ""
|
1022 |
|
1023 |
-
#: src/Tribe/Languages/Locations.php:
|
1024 |
msgid "Greenland"
|
1025 |
msgstr ""
|
1026 |
|
1027 |
-
#: src/Tribe/Languages/Locations.php:
|
1028 |
msgid "Grenada"
|
1029 |
msgstr ""
|
1030 |
|
1031 |
-
#: src/Tribe/Languages/Locations.php:
|
1032 |
msgid "Guadeloupe"
|
1033 |
msgstr ""
|
1034 |
|
1035 |
-
#: src/Tribe/Languages/Locations.php:
|
1036 |
msgid "Guam"
|
1037 |
msgstr ""
|
1038 |
|
1039 |
-
#: src/Tribe/Languages/Locations.php:
|
1040 |
msgid "Guatemala"
|
1041 |
msgstr ""
|
1042 |
|
1043 |
-
#: src/Tribe/Languages/Locations.php:
|
1044 |
msgid "Guinea"
|
1045 |
msgstr ""
|
1046 |
|
1047 |
-
#: src/Tribe/Languages/Locations.php:
|
1048 |
msgid "Guinea-Bissau"
|
1049 |
msgstr ""
|
1050 |
|
1051 |
-
#: src/Tribe/Languages/Locations.php:
|
1052 |
msgid "Guyana"
|
1053 |
msgstr ""
|
1054 |
|
1055 |
-
#: src/Tribe/Languages/Locations.php:
|
1056 |
msgid "Haiti"
|
1057 |
msgstr ""
|
1058 |
|
1059 |
-
#: src/Tribe/Languages/Locations.php:
|
1060 |
msgid "Heard and McDonald Islands"
|
1061 |
msgstr ""
|
1062 |
|
1063 |
-
#: src/Tribe/Languages/Locations.php:
|
1064 |
msgid "Holy See (Vatican City State)"
|
1065 |
msgstr ""
|
1066 |
|
1067 |
-
#: src/Tribe/Languages/Locations.php:
|
1068 |
msgid "Honduras"
|
1069 |
msgstr ""
|
1070 |
|
1071 |
-
#: src/Tribe/Languages/Locations.php:
|
1072 |
msgid "Hong Kong"
|
1073 |
msgstr ""
|
1074 |
|
1075 |
-
#: src/Tribe/Languages/Locations.php:
|
1076 |
msgid "Hungary"
|
1077 |
msgstr ""
|
1078 |
|
1079 |
-
#: src/Tribe/Languages/Locations.php:
|
1080 |
msgid "Iceland"
|
1081 |
msgstr ""
|
1082 |
|
1083 |
-
#: src/Tribe/Languages/Locations.php:
|
1084 |
msgid "India"
|
1085 |
msgstr ""
|
1086 |
|
1087 |
-
#: src/Tribe/Languages/Locations.php:
|
1088 |
msgid "Indonesia"
|
1089 |
msgstr ""
|
1090 |
|
1091 |
-
#: src/Tribe/Languages/Locations.php:
|
1092 |
msgid "Iran, Islamic Republic of"
|
1093 |
msgstr ""
|
1094 |
|
1095 |
-
#: src/Tribe/Languages/Locations.php:
|
1096 |
msgid "Iraq"
|
1097 |
msgstr ""
|
1098 |
|
1099 |
-
#: src/Tribe/Languages/Locations.php:
|
1100 |
msgid "Ireland"
|
1101 |
msgstr ""
|
1102 |
|
1103 |
-
#: src/Tribe/Languages/Locations.php:
|
1104 |
msgid "Israel"
|
1105 |
msgstr ""
|
1106 |
|
1107 |
-
#: src/Tribe/Languages/Locations.php:
|
1108 |
msgid "Italy"
|
1109 |
msgstr ""
|
1110 |
|
1111 |
-
#: src/Tribe/Languages/Locations.php:
|
1112 |
msgid "Jamaica"
|
1113 |
msgstr ""
|
1114 |
|
1115 |
-
#: src/Tribe/Languages/Locations.php:
|
1116 |
msgid "Japan"
|
1117 |
msgstr ""
|
1118 |
|
1119 |
-
#: src/Tribe/Languages/Locations.php:
|
1120 |
msgid "Jordan"
|
1121 |
msgstr ""
|
1122 |
|
1123 |
-
#: src/Tribe/Languages/Locations.php:
|
1124 |
msgid "Kazakhstan"
|
1125 |
msgstr ""
|
1126 |
|
1127 |
-
#: src/Tribe/Languages/Locations.php:
|
1128 |
msgid "Kenya"
|
1129 |
msgstr ""
|
1130 |
|
1131 |
-
#: src/Tribe/Languages/Locations.php:
|
1132 |
msgid "Kiribati"
|
1133 |
msgstr ""
|
1134 |
|
1135 |
-
#: src/Tribe/Languages/Locations.php:
|
1136 |
msgid "Korea, Democratic People's Republic of"
|
1137 |
msgstr ""
|
1138 |
|
1139 |
-
#: src/Tribe/Languages/Locations.php:
|
1140 |
msgid "Korea, Republic of"
|
1141 |
msgstr ""
|
1142 |
|
1143 |
-
#: src/Tribe/Languages/Locations.php:
|
1144 |
msgid "Kuwait"
|
1145 |
msgstr ""
|
1146 |
|
1147 |
-
#: src/Tribe/Languages/Locations.php:
|
1148 |
msgid "Kyrgyzstan"
|
1149 |
msgstr ""
|
1150 |
|
1151 |
-
#: src/Tribe/Languages/Locations.php:
|
1152 |
msgid "Lao People's Democratic Republic"
|
1153 |
msgstr ""
|
1154 |
|
1155 |
-
#: src/Tribe/Languages/Locations.php:
|
1156 |
msgid "Latvia"
|
1157 |
msgstr ""
|
1158 |
|
1159 |
-
#: src/Tribe/Languages/Locations.php:
|
1160 |
msgid "Lebanon"
|
1161 |
msgstr ""
|
1162 |
|
1163 |
-
#: src/Tribe/Languages/Locations.php:
|
1164 |
msgid "Lesotho"
|
1165 |
msgstr ""
|
1166 |
|
1167 |
-
#: src/Tribe/Languages/Locations.php:
|
1168 |
msgid "Liberia"
|
1169 |
msgstr ""
|
1170 |
|
1171 |
-
#: src/Tribe/Languages/Locations.php:
|
1172 |
msgid "Libya"
|
1173 |
msgstr ""
|
1174 |
|
1175 |
-
#: src/Tribe/Languages/Locations.php:
|
1176 |
msgid "Liechtenstein"
|
1177 |
msgstr ""
|
1178 |
|
1179 |
-
#: src/Tribe/Languages/Locations.php:
|
1180 |
msgid "Lithuania"
|
1181 |
msgstr ""
|
1182 |
|
1183 |
-
#: src/Tribe/Languages/Locations.php:
|
1184 |
msgid "Luxembourg"
|
1185 |
msgstr ""
|
1186 |
|
1187 |
-
#: src/Tribe/Languages/Locations.php:
|
1188 |
msgid "Macau"
|
1189 |
msgstr ""
|
1190 |
|
1191 |
-
#: src/Tribe/Languages/Locations.php:
|
1192 |
msgid "Madagascar"
|
1193 |
msgstr ""
|
1194 |
|
1195 |
-
#: src/Tribe/Languages/Locations.php:
|
1196 |
msgid "Malawi"
|
1197 |
msgstr ""
|
1198 |
|
1199 |
-
#: src/Tribe/Languages/Locations.php:
|
1200 |
msgid "Malaysia"
|
1201 |
msgstr ""
|
1202 |
|
1203 |
-
#: src/Tribe/Languages/Locations.php:
|
1204 |
msgid "Maldives"
|
1205 |
msgstr ""
|
1206 |
|
1207 |
-
#: src/Tribe/Languages/Locations.php:
|
1208 |
msgid "Mali"
|
1209 |
msgstr ""
|
1210 |
|
1211 |
-
#: src/Tribe/Languages/Locations.php:
|
1212 |
msgid "Malta"
|
1213 |
msgstr ""
|
1214 |
|
1215 |
-
#: src/Tribe/Languages/Locations.php:
|
1216 |
msgid "Marshall Islands"
|
1217 |
msgstr ""
|
1218 |
|
1219 |
-
#: src/Tribe/Languages/Locations.php:
|
1220 |
msgid "Martinique"
|
1221 |
msgstr ""
|
1222 |
|
1223 |
-
#: src/Tribe/Languages/Locations.php:
|
1224 |
msgid "Mauritania"
|
1225 |
msgstr ""
|
1226 |
|
1227 |
-
#: src/Tribe/Languages/Locations.php:
|
1228 |
msgid "Mauritius"
|
1229 |
msgstr ""
|
1230 |
|
1231 |
-
#: src/Tribe/Languages/Locations.php:
|
1232 |
msgid "Mayotte"
|
1233 |
msgstr ""
|
1234 |
|
1235 |
-
#: src/Tribe/Languages/Locations.php:
|
1236 |
msgid "Mexico"
|
1237 |
msgstr ""
|
1238 |
|
1239 |
-
#: src/Tribe/Languages/Locations.php:
|
1240 |
msgid "Micronesia, Federated States of"
|
1241 |
msgstr ""
|
1242 |
|
1243 |
-
#: src/Tribe/Languages/Locations.php:
|
1244 |
msgid "Moldova, Republic of"
|
1245 |
msgstr ""
|
1246 |
|
1247 |
-
#: src/Tribe/Languages/Locations.php:
|
1248 |
msgid "Monaco"
|
1249 |
msgstr ""
|
1250 |
|
1251 |
-
#: src/Tribe/Languages/Locations.php:
|
1252 |
msgid "Mongolia"
|
1253 |
msgstr ""
|
1254 |
|
1255 |
-
#: src/Tribe/Languages/Locations.php:
|
1256 |
msgid "Montenegro"
|
1257 |
msgstr ""
|
1258 |
|
1259 |
-
#: src/Tribe/Languages/Locations.php:
|
1260 |
msgid "Montserrat"
|
1261 |
msgstr ""
|
1262 |
|
1263 |
-
#: src/Tribe/Languages/Locations.php:
|
1264 |
msgid "Morocco"
|
1265 |
msgstr ""
|
1266 |
|
1267 |
-
#: src/Tribe/Languages/Locations.php:
|
1268 |
msgid "Mozambique"
|
1269 |
msgstr ""
|
1270 |
|
1271 |
-
#: src/Tribe/Languages/Locations.php:
|
1272 |
msgid "Myanmar"
|
1273 |
msgstr ""
|
1274 |
|
1275 |
-
#: src/Tribe/Languages/Locations.php:
|
1276 |
msgid "Namibia"
|
1277 |
msgstr ""
|
1278 |
|
1279 |
-
#: src/Tribe/Languages/Locations.php:
|
1280 |
msgid "Nauru"
|
1281 |
msgstr ""
|
1282 |
|
1283 |
-
#: src/Tribe/Languages/Locations.php:
|
1284 |
msgid "Nepal"
|
1285 |
msgstr ""
|
1286 |
|
1287 |
-
#: src/Tribe/Languages/Locations.php:
|
1288 |
msgid "Netherlands"
|
1289 |
msgstr ""
|
1290 |
|
1291 |
-
#: src/Tribe/Languages/Locations.php:
|
1292 |
msgid "New Caledonia"
|
1293 |
msgstr ""
|
1294 |
|
1295 |
-
#: src/Tribe/Languages/Locations.php:
|
1296 |
msgid "New Zealand"
|
1297 |
msgstr ""
|
1298 |
|
1299 |
-
#: src/Tribe/Languages/Locations.php:
|
1300 |
msgid "Nicaragua"
|
1301 |
msgstr ""
|
1302 |
|
1303 |
-
#: src/Tribe/Languages/Locations.php:
|
1304 |
msgid "Niger"
|
1305 |
msgstr ""
|
1306 |
|
1307 |
-
#: src/Tribe/Languages/Locations.php:
|
1308 |
msgid "Nigeria"
|
1309 |
msgstr ""
|
1310 |
|
1311 |
-
#: src/Tribe/Languages/Locations.php:
|
1312 |
msgid "Niue"
|
1313 |
msgstr ""
|
1314 |
|
1315 |
-
#: src/Tribe/Languages/Locations.php:
|
1316 |
msgid "Norfolk Island"
|
1317 |
msgstr ""
|
1318 |
|
1319 |
-
#: src/Tribe/Languages/Locations.php:
|
1320 |
msgid "North Macedonia"
|
1321 |
msgstr ""
|
1322 |
|
1323 |
-
#: src/Tribe/Languages/Locations.php:
|
1324 |
msgid "Northern Mariana Islands"
|
1325 |
msgstr ""
|
1326 |
|
1327 |
-
#: src/Tribe/Languages/Locations.php:
|
1328 |
msgid "Norway"
|
1329 |
msgstr ""
|
1330 |
|
1331 |
-
#: src/Tribe/Languages/Locations.php:
|
1332 |
msgid "Oman"
|
1333 |
msgstr ""
|
1334 |
|
1335 |
-
#: src/Tribe/Languages/Locations.php:
|
1336 |
msgid "Pakistan"
|
1337 |
msgstr ""
|
1338 |
|
1339 |
-
#: src/Tribe/Languages/Locations.php:
|
1340 |
msgid "Palau"
|
1341 |
msgstr ""
|
1342 |
|
1343 |
-
#: src/Tribe/Languages/Locations.php:
|
1344 |
msgid "Panama"
|
1345 |
msgstr ""
|
1346 |
|
1347 |
-
#: src/Tribe/Languages/Locations.php:
|
1348 |
msgid "Papua New Guinea"
|
1349 |
msgstr ""
|
1350 |
|
1351 |
-
#: src/Tribe/Languages/Locations.php:
|
1352 |
msgid "Paraguay"
|
1353 |
msgstr ""
|
1354 |
|
1355 |
-
#: src/Tribe/Languages/Locations.php:
|
1356 |
msgid "Peru"
|
1357 |
msgstr ""
|
1358 |
|
1359 |
-
#: src/Tribe/Languages/Locations.php:
|
1360 |
msgid "Philippines"
|
1361 |
msgstr ""
|
1362 |
|
1363 |
-
#: src/Tribe/Languages/Locations.php:
|
1364 |
msgid "Pitcairn"
|
1365 |
msgstr ""
|
1366 |
|
1367 |
-
#: src/Tribe/Languages/Locations.php:
|
1368 |
msgid "Poland"
|
1369 |
msgstr ""
|
1370 |
|
1371 |
-
#: src/Tribe/Languages/Locations.php:
|
1372 |
msgid "Portugal"
|
1373 |
msgstr ""
|
1374 |
|
1375 |
-
#: src/Tribe/Languages/Locations.php:
|
1376 |
msgid "Puerto Rico"
|
1377 |
msgstr ""
|
1378 |
|
1379 |
-
#: src/Tribe/Languages/Locations.php:
|
1380 |
msgid "Qatar"
|
1381 |
msgstr ""
|
1382 |
|
1383 |
-
#: src/Tribe/Languages/Locations.php:
|
1384 |
msgid "Reunion"
|
1385 |
msgstr ""
|
1386 |
|
1387 |
-
#: src/Tribe/Languages/Locations.php:
|
1388 |
msgid "Romania"
|
1389 |
msgstr ""
|
1390 |
|
1391 |
-
#: src/Tribe/Languages/Locations.php:
|
1392 |
msgid "Russian Federation"
|
1393 |
msgstr ""
|
1394 |
|
1395 |
-
#: src/Tribe/Languages/Locations.php:
|
1396 |
msgid "Rwanda"
|
1397 |
msgstr ""
|
1398 |
|
1399 |
-
#: src/Tribe/Languages/Locations.php:
|
1400 |
msgid "Saint Barthélemy"
|
1401 |
msgstr ""
|
1402 |
|
1403 |
-
#: src/Tribe/Languages/Locations.php:
|
1404 |
msgid "Saint Helena"
|
1405 |
msgstr ""
|
1406 |
|
1407 |
-
#: src/Tribe/Languages/Locations.php:
|
1408 |
msgid "Saint Kitts and Nevis"
|
1409 |
msgstr ""
|
1410 |
|
1411 |
-
#: src/Tribe/Languages/Locations.php:
|
1412 |
msgid "Saint Lucia"
|
1413 |
msgstr ""
|
1414 |
|
1415 |
-
#: src/Tribe/Languages/Locations.php:
|
1416 |
msgid "Saint Pierre and Miquelon"
|
1417 |
msgstr ""
|
1418 |
|
1419 |
-
#: src/Tribe/Languages/Locations.php:
|
1420 |
msgid "Saint Vincent and The Grenadines"
|
1421 |
msgstr ""
|
1422 |
|
1423 |
-
#: src/Tribe/Languages/Locations.php:
|
1424 |
msgid "Samoa"
|
1425 |
msgstr ""
|
1426 |
|
1427 |
-
#: src/Tribe/Languages/Locations.php:
|
1428 |
msgid "San Marino"
|
1429 |
msgstr ""
|
1430 |
|
1431 |
-
#: src/Tribe/Languages/Locations.php:
|
1432 |
msgid "São Tomé and Príncipe"
|
1433 |
msgstr ""
|
1434 |
|
1435 |
-
#: src/Tribe/Languages/Locations.php:
|
1436 |
msgid "Saudi Arabia"
|
1437 |
msgstr ""
|
1438 |
|
1439 |
-
#: src/Tribe/Languages/Locations.php:
|
1440 |
msgid "Senegal"
|
1441 |
msgstr ""
|
1442 |
|
1443 |
-
#: src/Tribe/Languages/Locations.php:
|
1444 |
msgid "Serbia"
|
1445 |
msgstr ""
|
1446 |
|
1447 |
-
#: src/Tribe/Languages/Locations.php:
|
1448 |
msgid "Seychelles"
|
1449 |
msgstr ""
|
1450 |
|
1451 |
-
#: src/Tribe/Languages/Locations.php:
|
1452 |
msgid "Sierra Leone"
|
1453 |
msgstr ""
|
1454 |
|
1455 |
-
#: src/Tribe/Languages/Locations.php:
|
1456 |
msgid "Singapore"
|
1457 |
msgstr ""
|
1458 |
|
1459 |
-
#: src/Tribe/Languages/Locations.php:
|
1460 |
msgid "Sint Maarten"
|
1461 |
msgstr ""
|
1462 |
|
1463 |
-
#: src/Tribe/Languages/Locations.php:
|
1464 |
msgid "Slovakia (Slovak Republic)"
|
1465 |
msgstr ""
|
1466 |
|
1467 |
-
#: src/Tribe/Languages/Locations.php:
|
1468 |
msgid "Slovenia"
|
1469 |
msgstr ""
|
1470 |
|
1471 |
-
#: src/Tribe/Languages/Locations.php:
|
1472 |
msgid "Solomon Islands"
|
1473 |
msgstr ""
|
1474 |
|
1475 |
-
#: src/Tribe/Languages/Locations.php:
|
1476 |
msgid "Somalia"
|
1477 |
msgstr ""
|
1478 |
|
1479 |
-
#: src/Tribe/Languages/Locations.php:
|
1480 |
msgid "South Africa"
|
1481 |
msgstr ""
|
1482 |
|
1483 |
-
#: src/Tribe/Languages/Locations.php:
|
1484 |
msgid "South Georgia, South Sandwich Islands"
|
1485 |
msgstr ""
|
1486 |
|
1487 |
-
#: src/Tribe/Languages/Locations.php:
|
1488 |
msgid "Spain"
|
1489 |
msgstr ""
|
1490 |
|
1491 |
-
#: src/Tribe/Languages/Locations.php:
|
1492 |
msgid "Sri Lanka"
|
1493 |
msgstr ""
|
1494 |
|
1495 |
-
#: src/Tribe/Languages/Locations.php:
|
1496 |
msgid "Sudan"
|
1497 |
msgstr ""
|
1498 |
|
1499 |
-
#: src/Tribe/Languages/Locations.php:
|
1500 |
msgid "Suriname"
|
1501 |
msgstr ""
|
1502 |
|
1503 |
-
#: src/Tribe/Languages/Locations.php:
|
1504 |
msgid "Svalbard and Jan Mayen Islands"
|
1505 |
msgstr ""
|
1506 |
|
1507 |
-
#: src/Tribe/Languages/Locations.php:
|
1508 |
msgid "Swaziland"
|
1509 |
msgstr ""
|
1510 |
|
1511 |
-
#: src/Tribe/Languages/Locations.php:
|
1512 |
msgid "Sweden"
|
1513 |
msgstr ""
|
1514 |
|
1515 |
-
#: src/Tribe/Languages/Locations.php:
|
1516 |
msgid "Switzerland"
|
1517 |
msgstr ""
|
1518 |
|
1519 |
-
#: src/Tribe/Languages/Locations.php:
|
1520 |
msgid "Syrian Arab Republic"
|
1521 |
msgstr ""
|
1522 |
|
1523 |
-
#: src/Tribe/Languages/Locations.php:
|
1524 |
msgid "Taiwan"
|
1525 |
msgstr ""
|
1526 |
|
1527 |
-
#: src/Tribe/Languages/Locations.php:
|
1528 |
msgid "Tajikistan"
|
1529 |
msgstr ""
|
1530 |
|
1531 |
-
#: src/Tribe/Languages/Locations.php:
|
1532 |
msgid "Tanzania, United Republic of"
|
1533 |
msgstr ""
|
1534 |
|
1535 |
-
#: src/Tribe/Languages/Locations.php:
|
1536 |
msgid "Thailand"
|
1537 |
msgstr ""
|
1538 |
|
1539 |
-
#: src/Tribe/Languages/Locations.php:
|
1540 |
msgid "Togo"
|
1541 |
msgstr ""
|
1542 |
|
1543 |
-
#: src/Tribe/Languages/Locations.php:
|
1544 |
msgid "Tokelau"
|
1545 |
msgstr ""
|
1546 |
|
1547 |
-
#: src/Tribe/Languages/Locations.php:
|
1548 |
msgid "Tonga"
|
1549 |
msgstr ""
|
1550 |
|
1551 |
-
#: src/Tribe/Languages/Locations.php:
|
1552 |
msgid "Trinidad and Tobago"
|
1553 |
msgstr ""
|
1554 |
|
1555 |
-
#: src/Tribe/Languages/Locations.php:
|
1556 |
msgid "Tunisia"
|
1557 |
msgstr ""
|
1558 |
|
1559 |
-
#: src/Tribe/Languages/Locations.php:
|
1560 |
msgid "Turkey"
|
1561 |
msgstr ""
|
1562 |
|
1563 |
-
#: src/Tribe/Languages/Locations.php:
|
1564 |
msgid "Turkmenistan"
|
1565 |
msgstr ""
|
1566 |
|
1567 |
-
#: src/Tribe/Languages/Locations.php:
|
1568 |
msgid "Turks and Caicos Islands"
|
1569 |
msgstr ""
|
1570 |
|
1571 |
-
#: src/Tribe/Languages/Locations.php:
|
1572 |
msgid "Tuvalu"
|
1573 |
msgstr ""
|
1574 |
|
1575 |
-
#: src/Tribe/Languages/Locations.php:
|
1576 |
msgid "Uganda"
|
1577 |
msgstr ""
|
1578 |
|
1579 |
-
#: src/Tribe/Languages/Locations.php:
|
1580 |
msgid "Ukraine"
|
1581 |
msgstr ""
|
1582 |
|
1583 |
-
#: src/Tribe/Languages/Locations.php:
|
1584 |
msgid "United Arab Emirates"
|
1585 |
msgstr ""
|
1586 |
|
1587 |
-
#: src/Tribe/Languages/Locations.php:
|
1588 |
msgid "United Kingdom"
|
1589 |
msgstr ""
|
1590 |
|
1591 |
-
#: src/Tribe/Languages/Locations.php:
|
1592 |
msgid "United States Minor Outlying Islands"
|
1593 |
msgstr ""
|
1594 |
|
1595 |
-
#: src/Tribe/Languages/Locations.php:
|
1596 |
msgid "Uruguay"
|
1597 |
msgstr ""
|
1598 |
|
1599 |
-
#: src/Tribe/Languages/Locations.php:
|
1600 |
msgid "Uzbekistan"
|
1601 |
msgstr ""
|
1602 |
|
1603 |
-
#: src/Tribe/Languages/Locations.php:
|
1604 |
msgid "Vanuatu"
|
1605 |
msgstr ""
|
1606 |
|
1607 |
-
#: src/Tribe/Languages/Locations.php:
|
1608 |
msgid "Venezuela"
|
1609 |
msgstr ""
|
1610 |
|
1611 |
-
#: src/Tribe/Languages/Locations.php:
|
1612 |
msgid "Viet Nam"
|
1613 |
msgstr ""
|
1614 |
|
1615 |
-
#: src/Tribe/Languages/Locations.php:
|
1616 |
msgid "Virgin Islands (British)"
|
1617 |
msgstr ""
|
1618 |
|
1619 |
-
#: src/Tribe/Languages/Locations.php:
|
1620 |
msgid "Virgin Islands (U.S.)"
|
1621 |
msgstr ""
|
1622 |
|
1623 |
-
#: src/Tribe/Languages/Locations.php:
|
1624 |
msgid "Wallis and Futuna Islands"
|
1625 |
msgstr ""
|
1626 |
|
1627 |
-
#: src/Tribe/Languages/Locations.php:
|
1628 |
msgid "Western Sahara"
|
1629 |
msgstr ""
|
1630 |
|
1631 |
-
#: src/Tribe/Languages/Locations.php:
|
1632 |
msgid "Yemen"
|
1633 |
msgstr ""
|
1634 |
|
1635 |
-
#: src/Tribe/Languages/Locations.php:
|
1636 |
msgid "Zambia"
|
1637 |
msgstr ""
|
1638 |
|
1639 |
-
#: src/Tribe/Languages/Locations.php:
|
1640 |
msgid "Zimbabwe"
|
1641 |
msgstr ""
|
1642 |
|
1643 |
-
#: src/Tribe/Languages/Locations.php:
|
1644 |
msgid "Alabama"
|
1645 |
msgstr ""
|
1646 |
|
1647 |
-
#: src/Tribe/Languages/Locations.php:
|
1648 |
msgid "Alaska"
|
1649 |
msgstr ""
|
1650 |
|
1651 |
-
#: src/Tribe/Languages/Locations.php:
|
1652 |
msgid "Arizona"
|
1653 |
msgstr ""
|
1654 |
|
1655 |
-
#: src/Tribe/Languages/Locations.php:
|
1656 |
msgid "Arkansas"
|
1657 |
msgstr ""
|
1658 |
|
1659 |
-
#: src/Tribe/Languages/Locations.php:
|
1660 |
msgid "California"
|
1661 |
msgstr ""
|
1662 |
|
1663 |
-
#: src/Tribe/Languages/Locations.php:
|
1664 |
msgid "Colorado"
|
1665 |
msgstr ""
|
1666 |
|
1667 |
-
#: src/Tribe/Languages/Locations.php:
|
1668 |
msgid "Connecticut"
|
1669 |
msgstr ""
|
1670 |
|
1671 |
-
#: src/Tribe/Languages/Locations.php:
|
1672 |
msgid "Delaware"
|
1673 |
msgstr ""
|
1674 |
|
1675 |
-
#: src/Tribe/Languages/Locations.php:
|
1676 |
msgid "District of Columbia"
|
1677 |
msgstr ""
|
1678 |
|
1679 |
-
#: src/Tribe/Languages/Locations.php:
|
1680 |
msgid "Florida"
|
1681 |
msgstr ""
|
1682 |
|
1683 |
-
#: src/Tribe/Languages/Locations.php:
|
1684 |
msgctxt "The US state Georgia"
|
1685 |
msgid "Georgia"
|
1686 |
msgstr ""
|
1687 |
|
1688 |
-
#: src/Tribe/Languages/Locations.php:
|
1689 |
msgid "Hawaii"
|
1690 |
msgstr ""
|
1691 |
|
1692 |
-
#: src/Tribe/Languages/Locations.php:
|
1693 |
msgid "Idaho"
|
1694 |
msgstr ""
|
1695 |
|
1696 |
-
#: src/Tribe/Languages/Locations.php:
|
1697 |
msgid "Illinois"
|
1698 |
msgstr ""
|
1699 |
|
1700 |
-
#: src/Tribe/Languages/Locations.php:
|
1701 |
msgid "Indiana"
|
1702 |
msgstr ""
|
1703 |
|
1704 |
-
#: src/Tribe/Languages/Locations.php:
|
1705 |
msgid "Iowa"
|
1706 |
msgstr ""
|
1707 |
|
1708 |
-
#: src/Tribe/Languages/Locations.php:
|
1709 |
msgid "Kansas"
|
1710 |
msgstr ""
|
1711 |
|
1712 |
-
#: src/Tribe/Languages/Locations.php:
|
1713 |
msgid "Kentucky"
|
1714 |
msgstr ""
|
1715 |
|
1716 |
-
#: src/Tribe/Languages/Locations.php:
|
1717 |
msgid "Louisiana"
|
1718 |
msgstr ""
|
1719 |
|
1720 |
-
#: src/Tribe/Languages/Locations.php:
|
1721 |
msgid "Maine"
|
1722 |
msgstr ""
|
1723 |
|
1724 |
-
#: src/Tribe/Languages/Locations.php:
|
1725 |
msgid "Maryland"
|
1726 |
msgstr ""
|
1727 |
|
1728 |
-
#: src/Tribe/Languages/Locations.php:
|
1729 |
msgid "Massachusetts"
|
1730 |
msgstr ""
|
1731 |
|
1732 |
-
#: src/Tribe/Languages/Locations.php:
|
1733 |
msgid "Michigan"
|
1734 |
msgstr ""
|
1735 |
|
1736 |
-
#: src/Tribe/Languages/Locations.php:
|
1737 |
msgid "Minnesota"
|
1738 |
msgstr ""
|
1739 |
|
1740 |
-
#: src/Tribe/Languages/Locations.php:
|
1741 |
msgid "Mississippi"
|
1742 |
msgstr ""
|
1743 |
|
1744 |
-
#: src/Tribe/Languages/Locations.php:
|
1745 |
msgid "Missouri"
|
1746 |
msgstr ""
|
1747 |
|
1748 |
-
#: src/Tribe/Languages/Locations.php:
|
1749 |
msgid "Montana"
|
1750 |
msgstr ""
|
1751 |
|
1752 |
-
#: src/Tribe/Languages/Locations.php:
|
1753 |
msgid "Nebraska"
|
1754 |
msgstr ""
|
1755 |
|
1756 |
-
#: src/Tribe/Languages/Locations.php:
|
1757 |
msgid "Nevada"
|
1758 |
msgstr ""
|
1759 |
|
1760 |
-
#: src/Tribe/Languages/Locations.php:
|
1761 |
msgid "New Hampshire"
|
1762 |
msgstr ""
|
1763 |
|
1764 |
-
#: src/Tribe/Languages/Locations.php:
|
1765 |
msgid "New Jersey"
|
1766 |
msgstr ""
|
1767 |
|
1768 |
-
#: src/Tribe/Languages/Locations.php:
|
1769 |
msgid "New Mexico"
|
1770 |
msgstr ""
|
1771 |
|
1772 |
-
#: src/Tribe/Languages/Locations.php:
|
1773 |
msgid "New York"
|
1774 |
msgstr ""
|
1775 |
|
1776 |
-
#: src/Tribe/Languages/Locations.php:
|
1777 |
msgid "North Carolina"
|
1778 |
msgstr ""
|
1779 |
|
1780 |
-
#: src/Tribe/Languages/Locations.php:
|
1781 |
msgid "North Dakota"
|
1782 |
msgstr ""
|
1783 |
|
1784 |
-
#: src/Tribe/Languages/Locations.php:
|
1785 |
msgid "Ohio"
|
1786 |
msgstr ""
|
1787 |
|
1788 |
-
#: src/Tribe/Languages/Locations.php:
|
1789 |
msgid "Oklahoma"
|
1790 |
msgstr ""
|
1791 |
|
1792 |
-
#: src/Tribe/Languages/Locations.php:
|
1793 |
msgid "Oregon"
|
1794 |
msgstr ""
|
1795 |
|
1796 |
-
#: src/Tribe/Languages/Locations.php:
|
1797 |
msgid "Pennsylvania"
|
1798 |
msgstr ""
|
1799 |
|
1800 |
-
#: src/Tribe/Languages/Locations.php:
|
1801 |
msgid "Rhode Island"
|
1802 |
msgstr ""
|
1803 |
|
1804 |
-
#: src/Tribe/Languages/Locations.php:
|
1805 |
msgid "South Carolina"
|
1806 |
msgstr ""
|
1807 |
|
1808 |
-
#: src/Tribe/Languages/Locations.php:
|
1809 |
msgid "South Dakota"
|
1810 |
msgstr ""
|
1811 |
|
1812 |
-
#: src/Tribe/Languages/Locations.php:
|
1813 |
msgid "Tennessee"
|
1814 |
msgstr ""
|
1815 |
|
1816 |
-
#: src/Tribe/Languages/Locations.php:
|
1817 |
msgid "Texas"
|
1818 |
msgstr ""
|
1819 |
|
1820 |
-
#: src/Tribe/Languages/Locations.php:
|
1821 |
msgid "Utah"
|
1822 |
msgstr ""
|
1823 |
|
1824 |
-
#: src/Tribe/Languages/Locations.php:
|
1825 |
msgid "Vermont"
|
1826 |
msgstr ""
|
1827 |
|
1828 |
-
#: src/Tribe/Languages/Locations.php:
|
1829 |
msgid "Virginia"
|
1830 |
msgstr ""
|
1831 |
|
1832 |
-
#: src/Tribe/Languages/Locations.php:
|
1833 |
msgid "Washington"
|
1834 |
msgstr ""
|
1835 |
|
1836 |
-
#: src/Tribe/Languages/Locations.php:
|
1837 |
msgid "West Virginia"
|
1838 |
msgstr ""
|
1839 |
|
1840 |
-
#: src/Tribe/Languages/Locations.php:
|
1841 |
msgid "Wisconsin"
|
1842 |
msgstr ""
|
1843 |
|
1844 |
-
#: src/Tribe/Languages/Locations.php:
|
1845 |
msgid "Wyoming"
|
1846 |
msgstr ""
|
1847 |
|
@@ -1867,107 +1702,107 @@ msgstr ""
|
|
1867 |
msgid "Null logger (will log nothing)"
|
1868 |
msgstr ""
|
1869 |
|
1870 |
-
#: src/Tribe/Log.php:
|
1871 |
msgid "Cannot set %s as the current logging engine"
|
1872 |
msgstr ""
|
1873 |
|
1874 |
-
#: src/Tribe/Log.php:
|
1875 |
msgid "Disabled"
|
1876 |
msgstr ""
|
1877 |
|
1878 |
-
#: src/Tribe/Log.php:
|
1879 |
msgid "Only errors"
|
1880 |
msgstr ""
|
1881 |
|
1882 |
-
#: src/Tribe/Log.php:
|
1883 |
msgid "Warnings and errors"
|
1884 |
msgstr ""
|
1885 |
|
1886 |
-
#: src/Tribe/Log.php:
|
1887 |
msgid "Full debug (all events)"
|
1888 |
msgstr ""
|
1889 |
|
1890 |
-
#: src/Tribe/Main.php:
|
1891 |
msgid ": activate to sort column ascending"
|
1892 |
msgstr ""
|
1893 |
|
1894 |
-
#: src/Tribe/Main.php:
|
1895 |
msgid ": activate to sort column descending"
|
1896 |
msgstr ""
|
1897 |
|
1898 |
-
#: src/Tribe/Main.php:
|
1899 |
msgid "Show _MENU_ entries"
|
1900 |
msgstr ""
|
1901 |
|
1902 |
-
#: src/Tribe/Main.php:
|
1903 |
msgid "No data available in table"
|
1904 |
msgstr ""
|
1905 |
|
1906 |
-
#: src/Tribe/Main.php:
|
1907 |
msgid "Showing _START_ to _END_ of _TOTAL_ entries"
|
1908 |
msgstr ""
|
1909 |
|
1910 |
-
#: src/Tribe/Main.php:
|
1911 |
msgid "Showing 0 to 0 of 0 entries"
|
1912 |
msgstr ""
|
1913 |
|
1914 |
-
#: src/Tribe/Main.php:
|
1915 |
msgid "(filtered from _MAX_ total entries)"
|
1916 |
msgstr ""
|
1917 |
|
1918 |
-
#: src/Tribe/Main.php:
|
1919 |
msgid "No matching records found"
|
1920 |
msgstr ""
|
1921 |
|
1922 |
-
#: src/Tribe/Main.php:
|
1923 |
msgid "Search:"
|
1924 |
msgstr ""
|
1925 |
|
1926 |
-
#: src/Tribe/Main.php:
|
1927 |
msgid "All items on this page were selected. "
|
1928 |
msgstr ""
|
1929 |
|
1930 |
-
#: src/Tribe/Main.php:
|
1931 |
msgid "Select all pages"
|
1932 |
msgstr ""
|
1933 |
|
1934 |
-
#: src/Tribe/Main.php:
|
1935 |
msgid "Clear Selection."
|
1936 |
msgstr ""
|
1937 |
|
1938 |
-
#: src/Tribe/Main.php:
|
1939 |
msgid "All"
|
1940 |
msgstr ""
|
1941 |
|
1942 |
-
#: src/Tribe/Main.php:
|
1943 |
msgid "Next"
|
1944 |
msgstr ""
|
1945 |
|
1946 |
-
#: src/Tribe/Main.php:
|
1947 |
msgid "Previous"
|
1948 |
msgstr ""
|
1949 |
|
1950 |
-
#: src/Tribe/Main.php:
|
1951 |
msgid ": Selected %d rows"
|
1952 |
msgstr ""
|
1953 |
|
1954 |
-
#: src/Tribe/Main.php:
|
1955 |
msgid ": Selected 1 row"
|
1956 |
msgstr ""
|
1957 |
|
1958 |
-
#: src/Tribe/Main.php:
|
1959 |
msgid "Prev"
|
1960 |
msgstr ""
|
1961 |
|
1962 |
-
#: src/Tribe/Main.php:
|
1963 |
msgid "Today"
|
1964 |
msgstr ""
|
1965 |
|
1966 |
-
#: src/Tribe/Main.php:
|
1967 |
msgid "Done"
|
1968 |
msgstr ""
|
1969 |
|
1970 |
-
#: src/Tribe/Main.php:
|
1971 |
msgid "Clear"
|
1972 |
msgstr ""
|
1973 |
|
@@ -2006,68 +1841,68 @@ msgstr ""
|
|
2006 |
msgid "License key(s) updated."
|
2007 |
msgstr ""
|
2008 |
|
2009 |
-
#: src/Tribe/PUE/Checker.php:
|
2010 |
msgid ""
|
2011 |
"Hmmm... something's wrong with this validator. Please contact %ssupport%s."
|
2012 |
msgstr ""
|
2013 |
|
2014 |
-
#: src/Tribe/PUE/Checker.php:
|
2015 |
msgid "unknown date"
|
2016 |
msgstr ""
|
2017 |
|
2018 |
-
#: src/Tribe/PUE/Checker.php:
|
2019 |
msgid "Sorry, key validation server is not available."
|
2020 |
msgstr ""
|
2021 |
|
2022 |
-
#: src/Tribe/PUE/Checker.php:
|
2023 |
msgid "Valid Key! Expires on %s"
|
2024 |
msgstr ""
|
2025 |
|
2026 |
-
#: src/Tribe/PUE/Checker.php:
|
2027 |
msgid "Thanks for setting up a valid key. It will expire on %s"
|
2028 |
msgstr ""
|
2029 |
|
2030 |
-
#: src/Tribe/PUE/Checker.php:
|
2031 |
msgid "Renew Your License Now"
|
2032 |
msgstr ""
|
2033 |
|
2034 |
-
#: src/Tribe/PUE/Checker.php:
|
2035 |
msgid " (opens in a new window)"
|
2036 |
msgstr ""
|
2037 |
|
2038 |
-
#: src/Tribe/PUE/Checker.php:
|
2039 |
msgid "Please refresh the page and try your request again."
|
2040 |
msgstr ""
|
2041 |
|
2042 |
-
#: src/Tribe/PUE/Checker.php:
|
2043 |
msgid ""
|
2044 |
"There is an update for %s. You'll need to %scheck your license%s to have "
|
2045 |
"access to updates, downloads, and support."
|
2046 |
msgstr ""
|
2047 |
|
2048 |
-
#: src/Tribe/PUE/Checker.php:
|
2049 |
msgid ""
|
2050 |
"There is an update for %s. %sRenew your license%s to get access to bug "
|
2051 |
"fixes, security updates, and new features."
|
2052 |
msgstr ""
|
2053 |
|
2054 |
-
#: src/Tribe/PUE/Checker.php:
|
2055 |
msgid "Update now to version %s."
|
2056 |
msgstr ""
|
2057 |
|
2058 |
-
#: src/Tribe/PUE/Checker.php:
|
2059 |
msgid "There is a new version of %1$s available. %2$s"
|
2060 |
msgstr ""
|
2061 |
|
2062 |
-
#: src/Tribe/PUE/Checker.php:
|
2063 |
msgid "A valid license has been entered by your network administrator."
|
2064 |
msgstr ""
|
2065 |
|
2066 |
-
#: src/Tribe/PUE/Checker.php:
|
2067 |
msgid "No license entered. Consult your network administrator."
|
2068 |
msgstr ""
|
2069 |
|
2070 |
-
#: src/Tribe/PUE/Checker.php:
|
2071 |
msgid "Expired license. Consult your network administrator."
|
2072 |
msgstr ""
|
2073 |
|
@@ -2121,270 +1956,120 @@ msgid ""
|
|
2121 |
"%4$s"
|
2122 |
msgstr ""
|
2123 |
|
2124 |
-
#: src/Tribe/Plugins.php:147
|
2125 |
-
msgid ""
|
2126 |
-
"Using this function before \"plugins_loaded\" action has fired can return "
|
2127 |
-
"unreliable results."
|
2128 |
-
msgstr ""
|
2129 |
-
|
2130 |
#: src/Tribe/Plugins_API.php:28
|
2131 |
-
msgid "
|
2132 |
-
|
2133 |
-
|
2134 |
-
|
2135 |
-
msgid "Customizable"
|
2136 |
-
msgstr ""
|
2137 |
-
|
2138 |
-
#: src/Tribe/Plugins_API.php:31
|
2139 |
-
msgid "Import & export events"
|
2140 |
-
msgstr ""
|
2141 |
-
|
2142 |
-
#: src/Tribe/Plugins_API.php:32
|
2143 |
-
msgid "Timezone support"
|
2144 |
-
msgstr ""
|
2145 |
-
|
2146 |
-
#: src/Tribe/Plugins_API.php:33
|
2147 |
-
msgid "Multiple views"
|
2148 |
-
msgstr ""
|
2149 |
-
|
2150 |
-
#: src/Tribe/Plugins_API.php:45
|
2151 |
-
msgid "Automated imports for your calendar"
|
2152 |
-
msgstr ""
|
2153 |
-
|
2154 |
-
#: src/Tribe/Plugins_API.php:47
|
2155 |
-
msgid "Schedule automated imports"
|
2156 |
-
msgstr ""
|
2157 |
-
|
2158 |
-
#: src/Tribe/Plugins_API.php:49
|
2159 |
-
msgid "Works with Google Calendar, Meetup, and more"
|
2160 |
-
msgstr ""
|
2161 |
-
|
2162 |
-
#: src/Tribe/Plugins_API.php:50
|
2163 |
-
msgid "Refine by date, location, or keyword"
|
2164 |
-
msgstr ""
|
2165 |
-
|
2166 |
-
#: src/Tribe/Plugins_API.php:59
|
2167 |
-
msgid "Events Calendar Pro"
|
2168 |
-
msgstr ""
|
2169 |
-
|
2170 |
-
#: src/Tribe/Plugins_API.php:62
|
2171 |
-
msgid "Power up your calendar with Pro"
|
2172 |
-
msgstr ""
|
2173 |
-
|
2174 |
-
#: src/Tribe/Plugins_API.php:64
|
2175 |
-
msgid "Premium support"
|
2176 |
-
msgstr ""
|
2177 |
-
|
2178 |
-
#: src/Tribe/Plugins_API.php:65
|
2179 |
-
msgid "Recurring events"
|
2180 |
-
msgstr ""
|
2181 |
-
|
2182 |
-
#: src/Tribe/Plugins_API.php:66
|
2183 |
-
msgid "Additional views"
|
2184 |
-
msgstr ""
|
2185 |
-
|
2186 |
-
#: src/Tribe/Plugins_API.php:67
|
2187 |
-
msgid "Shortcodes"
|
2188 |
-
msgstr ""
|
2189 |
-
|
2190 |
-
#: src/Tribe/Plugins_API.php:79
|
2191 |
-
msgid "Manage ticketing and RSVPs"
|
2192 |
-
msgstr ""
|
2193 |
-
|
2194 |
-
#: src/Tribe/Plugins_API.php:81
|
2195 |
-
msgid "Add tickets and RSVP to any post"
|
2196 |
-
msgstr ""
|
2197 |
-
|
2198 |
-
#: src/Tribe/Plugins_API.php:82
|
2199 |
-
msgid "Paypal integration"
|
2200 |
-
msgstr ""
|
2201 |
-
|
2202 |
-
#: src/Tribe/Plugins_API.php:83
|
2203 |
-
msgid "Attendee reports"
|
2204 |
-
msgstr ""
|
2205 |
-
|
2206 |
-
#: src/Tribe/Plugins_API.php:84
|
2207 |
-
msgid "Customizable ticket template"
|
2208 |
-
msgstr ""
|
2209 |
-
|
2210 |
-
#: src/Tribe/Plugins_API.php:96
|
2211 |
-
msgid "Monetize your events"
|
2212 |
msgstr ""
|
2213 |
|
2214 |
-
#: src/Tribe/Plugins_API.php:
|
2215 |
-
msgid "
|
|
|
|
|
|
|
|
|
|
|
|
|
2216 |
msgstr ""
|
2217 |
|
2218 |
-
#: src/Tribe/Plugins_API.php:
|
2219 |
-
msgid "
|
|
|
|
|
|
|
|
|
2220 |
msgstr ""
|
2221 |
|
2222 |
-
#: src/Tribe/Plugins_API.php:
|
2223 |
-
msgid "
|
|
|
|
|
|
|
|
|
2224 |
msgstr ""
|
2225 |
|
2226 |
-
#: src/Tribe/Plugins_API.php:
|
2227 |
-
msgid "
|
|
|
|
|
|
|
|
|
|
|
|
|
2228 |
msgstr ""
|
2229 |
|
2230 |
-
#: src/Tribe/Plugins_API.php:
|
2231 |
#: src/views/promoter/auth.php:30 src/views/promoter/auth.php:74
|
2232 |
msgid "Promoter"
|
2233 |
msgstr ""
|
2234 |
|
2235 |
-
#: src/Tribe/Plugins_API.php:
|
2236 |
-
msgid "
|
2237 |
-
|
2238 |
-
|
2239 |
-
|
2240 |
-
|
2241 |
-
msgstr ""
|
2242 |
-
|
2243 |
-
#: src/Tribe/Plugins_API.php:116
|
2244 |
-
msgid "Customize email templates"
|
2245 |
-
msgstr ""
|
2246 |
-
|
2247 |
-
#: src/Tribe/Plugins_API.php:117
|
2248 |
-
msgid "Streamline your email process"
|
2249 |
-
msgstr ""
|
2250 |
-
|
2251 |
-
#: src/Tribe/Plugins_API.php:118
|
2252 |
-
msgid "Segment your attendee lists"
|
2253 |
-
msgstr ""
|
2254 |
-
|
2255 |
-
#: src/Tribe/Plugins_API.php:130
|
2256 |
-
msgid "Help users find exactly the right event"
|
2257 |
-
msgstr ""
|
2258 |
-
|
2259 |
-
#: src/Tribe/Plugins_API.php:132
|
2260 |
-
msgid "Configurable set of filters"
|
2261 |
-
msgstr ""
|
2262 |
-
|
2263 |
-
#: src/Tribe/Plugins_API.php:133
|
2264 |
-
msgid "Horizontal or vertical"
|
2265 |
-
msgstr ""
|
2266 |
-
|
2267 |
-
#: src/Tribe/Plugins_API.php:134
|
2268 |
-
msgid "Filter category, price, and more"
|
2269 |
-
msgstr ""
|
2270 |
-
|
2271 |
-
#: src/Tribe/Plugins_API.php:135
|
2272 |
-
msgid "Filter distance (for Events Calendar Pro)"
|
2273 |
-
msgstr ""
|
2274 |
-
|
2275 |
-
#: src/Tribe/Plugins_API.php:147
|
2276 |
-
msgid "Users submit events to your calendar"
|
2277 |
-
msgstr ""
|
2278 |
-
|
2279 |
-
#: src/Tribe/Plugins_API.php:149
|
2280 |
-
msgid "Publishing Control"
|
2281 |
-
msgstr ""
|
2282 |
-
|
2283 |
-
#: src/Tribe/Plugins_API.php:150
|
2284 |
-
msgid "Event Submission Form"
|
2285 |
-
msgstr ""
|
2286 |
-
|
2287 |
-
#: src/Tribe/Plugins_API.php:151
|
2288 |
-
msgid "Registered User Settings"
|
2289 |
-
msgstr ""
|
2290 |
-
|
2291 |
-
#: src/Tribe/Plugins_API.php:152
|
2292 |
-
msgid "Email notifications"
|
2293 |
-
msgstr ""
|
2294 |
-
|
2295 |
-
#: src/Tribe/Plugins_API.php:164
|
2296 |
-
msgid "Run your own events marketplace"
|
2297 |
-
msgstr ""
|
2298 |
-
|
2299 |
-
#: src/Tribe/Plugins_API.php:166
|
2300 |
-
msgid "Users submit events and sell tickets"
|
2301 |
msgstr ""
|
2302 |
|
2303 |
-
#: src/Tribe/Plugins_API.php:
|
2304 |
-
msgid "
|
|
|
|
|
|
|
|
|
|
|
|
|
2305 |
msgstr ""
|
2306 |
|
2307 |
-
#: src/Tribe/Plugins_API.php:
|
2308 |
-
msgid "
|
|
|
|
|
|
|
|
|
|
|
|
|
2309 |
msgstr ""
|
2310 |
|
2311 |
-
#: src/Tribe/Plugins_API.php:
|
2312 |
-
msgid "
|
|
|
|
|
|
|
|
|
2313 |
msgstr ""
|
2314 |
|
2315 |
-
#: src/Tribe/Plugins_API.php:
|
2316 |
msgctxt "Names of required plugins for Community Tickets"
|
2317 |
msgid "Event Tickets Plus and Community Events"
|
2318 |
msgstr ""
|
2319 |
|
2320 |
-
#: src/Tribe/Plugins_API.php:
|
2321 |
-
msgid "
|
2322 |
-
|
2323 |
-
|
2324 |
-
|
2325 |
-
|
2326 |
-
|
2327 |
-
|
2328 |
-
#: src/Tribe/Plugins_API.php:185
|
2329 |
-
msgid "Ticket availability automatically updates"
|
2330 |
-
msgstr ""
|
2331 |
-
|
2332 |
-
#: src/Tribe/Plugins_API.php:186
|
2333 |
-
msgid "Integrated with your events on Eventbrite"
|
2334 |
-
msgstr ""
|
2335 |
-
|
2336 |
-
#: src/Tribe/Plugins_API.php:187
|
2337 |
-
msgid "Automatically import your events"
|
2338 |
msgstr ""
|
2339 |
|
2340 |
-
#: src/Tribe/Plugins_API.php:
|
2341 |
msgid "Image Widget Plus"
|
2342 |
msgstr ""
|
2343 |
|
2344 |
-
#: src/Tribe/Plugins_API.php:
|
2345 |
-
msgid "
|
2346 |
-
|
2347 |
-
|
2348 |
-
|
2349 |
-
|
2350 |
-
msgstr ""
|
2351 |
-
|
2352 |
-
#: src/Tribe/Plugins_API.php:202
|
2353 |
-
msgid "Lightbox"
|
2354 |
-
msgstr ""
|
2355 |
-
|
2356 |
-
#: src/Tribe/Plugins_API.php:203
|
2357 |
-
msgid "Slideshow"
|
2358 |
-
msgstr ""
|
2359 |
-
|
2360 |
-
#: src/Tribe/Plugins_API.php:204
|
2361 |
-
msgid "Random Images"
|
2362 |
-
msgstr ""
|
2363 |
-
|
2364 |
-
#: src/Tribe/Plugins_API.php:216
|
2365 |
-
msgid "Features to optimize your calendar for virtual events."
|
2366 |
-
msgstr ""
|
2367 |
-
|
2368 |
-
#: src/Tribe/Plugins_API.php:219
|
2369 |
-
msgid "Virtual event labels"
|
2370 |
-
msgstr ""
|
2371 |
-
|
2372 |
-
#: src/Tribe/Plugins_API.php:220
|
2373 |
-
msgid "Status control for canceled or postponed events"
|
2374 |
-
msgstr ""
|
2375 |
-
|
2376 |
-
#: src/Tribe/Plugins_API.php:221
|
2377 |
-
msgid "Embed livestreams and videos"
|
2378 |
msgstr ""
|
2379 |
|
2380 |
#: src/Tribe/Process/Queue.php:1024
|
2381 |
msgid "Every %d Minutes"
|
2382 |
msgstr ""
|
2383 |
|
2384 |
-
#: src/Tribe/Promoter/Auth.php:41
|
2385 |
-
msgid "Promoter Key"
|
2386 |
-
msgstr ""
|
2387 |
-
|
2388 |
#: src/Tribe/Settings.php:177 src/Tribe/Settings.php:241
|
2389 |
#: src/Tribe/Settings.php:242
|
2390 |
msgid "Events"
|
@@ -2454,16 +2139,16 @@ msgstr ""
|
|
2454 |
msgid "Display"
|
2455 |
msgstr ""
|
2456 |
|
2457 |
-
#: src/Tribe/Settings_Manager.php:
|
2458 |
msgid "Network"
|
2459 |
msgstr ""
|
2460 |
|
2461 |
-
#: src/Tribe/Settings_Manager.php:
|
2462 |
#: src/admin-views/tribe-options-licenses.php:57
|
2463 |
msgid "Licenses"
|
2464 |
msgstr ""
|
2465 |
|
2466 |
-
#: src/Tribe/Settings_Manager.php:
|
2467 |
msgid "Help"
|
2468 |
msgstr ""
|
2469 |
|
@@ -2517,26 +2202,26 @@ msgstr ""
|
|
2517 |
|
2518 |
#: src/Tribe/Support.php:318
|
2519 |
msgid ""
|
2520 |
-
"Yes, automatically share my system information with
|
2521 |
-
"
|
2522 |
msgstr ""
|
2523 |
|
2524 |
#: src/Tribe/Support.php:319
|
2525 |
msgid ""
|
2526 |
-
"Your system information will only be used by
|
2527 |
-
"
|
2528 |
-
"
|
2529 |
msgstr ""
|
2530 |
|
2531 |
#: src/Tribe/Support.php:338 src/Tribe/Support.php:343
|
2532 |
msgid "Invalid Key"
|
2533 |
msgstr ""
|
2534 |
|
2535 |
-
#: src/Tribe/Support.php:
|
2536 |
msgid "Permission Error"
|
2537 |
msgstr ""
|
2538 |
|
2539 |
-
#: src/Tribe/Support.php:
|
2540 |
msgid "Unique System Info Key Generated"
|
2541 |
msgstr ""
|
2542 |
|
@@ -2652,99 +2337,24 @@ msgstr ""
|
|
2652 |
msgid "Select a Country:"
|
2653 |
msgstr ""
|
2654 |
|
2655 |
-
#: src/
|
2656 |
-
msgid "
|
2657 |
msgstr ""
|
2658 |
|
2659 |
-
#: src/admin-views/app-shop.php:
|
2660 |
-
msgid "
|
2661 |
msgstr ""
|
2662 |
|
2663 |
-
#: src/admin-views/app-shop.php:
|
2664 |
-
msgid "
|
2665 |
msgstr ""
|
2666 |
|
2667 |
-
#: src/admin-views/app-shop.php:
|
2668 |
-
msgid "
|
2669 |
msgstr ""
|
2670 |
|
2671 |
#: src/admin-views/app-shop.php:31
|
2672 |
-
msgid "
|
2673 |
-
msgstr ""
|
2674 |
-
|
2675 |
-
#: src/admin-views/app-shop.php:40 src/admin-views/app-shop.php:102
|
2676 |
-
#: src/admin-views/app-shop.php:160
|
2677 |
-
msgid "Shapes and lines for visual interest"
|
2678 |
-
msgstr ""
|
2679 |
-
|
2680 |
-
#: src/admin-views/app-shop.php:46
|
2681 |
-
msgid "One calendar. Countless ways to make it your own."
|
2682 |
-
msgstr ""
|
2683 |
-
|
2684 |
-
#: src/admin-views/app-shop.php:47
|
2685 |
-
msgid ""
|
2686 |
-
"Calendars, ticketing, and powerful WordPress tools to manage your events "
|
2687 |
-
"from start to finish."
|
2688 |
-
msgstr ""
|
2689 |
-
|
2690 |
-
#: src/admin-views/app-shop.php:49
|
2691 |
-
msgid "Already Installed"
|
2692 |
-
msgstr ""
|
2693 |
-
|
2694 |
-
#: src/admin-views/app-shop.php:55 src/admin-views/app-shop.php:112
|
2695 |
-
#: src/admin-views/app-shop.php:134
|
2696 |
-
msgid "TEC Logo"
|
2697 |
-
msgstr ""
|
2698 |
-
|
2699 |
-
#: src/admin-views/app-shop.php:59
|
2700 |
-
msgid "Active"
|
2701 |
-
msgstr ""
|
2702 |
-
|
2703 |
-
#: src/admin-views/app-shop.php:61 src/admin-views/app-shop.php:170
|
2704 |
-
msgid "FREE"
|
2705 |
-
msgstr ""
|
2706 |
-
|
2707 |
-
#: src/admin-views/app-shop.php:86
|
2708 |
-
msgid "Manage"
|
2709 |
-
msgstr ""
|
2710 |
-
|
2711 |
-
#: src/admin-views/app-shop.php:88
|
2712 |
-
msgid "Learn More"
|
2713 |
-
msgstr ""
|
2714 |
-
|
2715 |
-
#: src/admin-views/app-shop.php:106
|
2716 |
-
msgid "The plugins you need at one discounted price"
|
2717 |
-
msgstr ""
|
2718 |
-
|
2719 |
-
#: src/admin-views/app-shop.php:107
|
2720 |
-
msgid ""
|
2721 |
-
"We've packaged our most popular plugins into bundles jam-packed with value."
|
2722 |
-
msgstr ""
|
2723 |
-
|
2724 |
-
#: src/admin-views/app-shop.php:119 src/admin-views/app-shop.php:146
|
2725 |
-
msgid "Save With A Bundle"
|
2726 |
-
msgstr ""
|
2727 |
-
|
2728 |
-
#: src/admin-views/app-shop.php:125
|
2729 |
-
msgid "Includes"
|
2730 |
-
msgstr ""
|
2731 |
-
|
2732 |
-
#: src/admin-views/app-shop.php:164
|
2733 |
-
msgid "Free extensions to power up your plugins"
|
2734 |
-
msgstr ""
|
2735 |
-
|
2736 |
-
#: src/admin-views/app-shop.php:165
|
2737 |
-
msgid ""
|
2738 |
-
"Extensions are quick solutions our team came up with to solve specific "
|
2739 |
-
"issues you may need. (Note - extensions are not covered by our support team.)"
|
2740 |
-
msgstr ""
|
2741 |
-
|
2742 |
-
#: src/admin-views/app-shop.php:179
|
2743 |
-
msgid "Download"
|
2744 |
-
msgstr ""
|
2745 |
-
|
2746 |
-
#: src/admin-views/app-shop.php:183
|
2747 |
-
msgid "Browse Extensions"
|
2748 |
msgstr ""
|
2749 |
|
2750 |
#: src/admin-views/event-log.php:21
|
@@ -2767,35 +2377,35 @@ msgstr ""
|
|
2767 |
msgid "Download log"
|
2768 |
msgstr ""
|
2769 |
|
2770 |
-
#: src/admin-views/tribe-options-display.php:
|
2771 |
msgid "Date Format Settings"
|
2772 |
msgstr ""
|
2773 |
|
2774 |
-
#: src/admin-views/tribe-options-display.php:
|
2775 |
msgid ""
|
2776 |
"The following three fields accept the date format options available to the "
|
2777 |
"PHP %1$s function. <a href=\"%2$s\" target=\"_blank\">Learn how to make your "
|
2778 |
"own date format here</a>."
|
2779 |
msgstr ""
|
2780 |
|
2781 |
-
#: src/admin-views/tribe-options-display.php:
|
2782 |
msgid "Compact Date Format"
|
2783 |
msgstr ""
|
2784 |
|
2785 |
-
#: src/admin-views/tribe-options-display.php:
|
2786 |
msgid ""
|
2787 |
"Select the date format used for elements with minimal space, such as in "
|
2788 |
"datepickers."
|
2789 |
msgstr ""
|
2790 |
|
2791 |
-
#: src/admin-views/tribe-options-general.php:
|
2792 |
msgid ""
|
2793 |
-
"Thank you for using Event Tickets! All of us at
|
2794 |
-
"
|
2795 |
-
"
|
2796 |
msgstr ""
|
2797 |
|
2798 |
-
#: src/admin-views/tribe-options-general.php:
|
2799 |
msgid ""
|
2800 |
"Optimize your site's event listings with %1$sThe Events Calendar%2$s, our "
|
2801 |
"free calendar plugin. Looking for additional functionality including "
|
@@ -2803,41 +2413,41 @@ msgid ""
|
|
2803 |
"our %3$spremium add-ons%4$s."
|
2804 |
msgstr ""
|
2805 |
|
2806 |
-
#: src/admin-views/tribe-options-general.php:
|
2807 |
msgid ""
|
2808 |
"Looking for additional functionality including recurring events, custom "
|
2809 |
"meta, community events, ticket sales and more?"
|
2810 |
msgstr ""
|
2811 |
|
2812 |
-
#: src/admin-views/tribe-options-general.php:
|
2813 |
msgid "Check out the available add-ons"
|
2814 |
msgstr ""
|
2815 |
|
2816 |
-
#: src/admin-views/tribe-options-general.php:
|
2817 |
msgid "We hope our plugin is helping you out."
|
2818 |
msgstr ""
|
2819 |
|
2820 |
-
#: src/admin-views/tribe-options-general.php:
|
2821 |
msgid ""
|
2822 |
-
"Are you thinking \"Wow, this plugin is amazing! I should say thanks to
|
2823 |
-
"
|
2824 |
-
"
|
2825 |
-
"
|
2826 |
msgstr ""
|
2827 |
|
2828 |
-
#: src/admin-views/tribe-options-general.php:
|
2829 |
msgid "See an example of the link"
|
2830 |
msgstr ""
|
2831 |
|
2832 |
-
#: src/admin-views/tribe-options-general.php:
|
2833 |
msgid "Show The Events Calendar link"
|
2834 |
msgstr ""
|
2835 |
|
2836 |
-
#: src/admin-views/tribe-options-general.php:
|
2837 |
msgid "Debug mode"
|
2838 |
msgstr ""
|
2839 |
|
2840 |
-
#: src/admin-views/tribe-options-general.php:
|
2841 |
msgid ""
|
2842 |
"Enable this option to log debug information. By default this will log to "
|
2843 |
"your server PHP error log. If you'd like to see the log messages in your "
|
@@ -2845,14 +2455,14 @@ msgid ""
|
|
2845 |
"\" tab in the debug output."
|
2846 |
msgstr ""
|
2847 |
|
2848 |
-
#: src/admin-views/tribe-options-general.php:
|
2849 |
msgid "Debug Bar Plugin"
|
2850 |
msgstr ""
|
2851 |
|
2852 |
#: src/admin-views/tribe-options-help.php:11
|
2853 |
msgid ""
|
2854 |
-
"Thank you for using %s! All of us at
|
2855 |
-
"
|
2856 |
msgstr ""
|
2857 |
|
2858 |
#: src/admin-views/tribe-options-help.php:14
|
@@ -2893,28 +2503,28 @@ msgid ""
|
|
2893 |
"steps:"
|
2894 |
msgstr ""
|
2895 |
|
2896 |
-
#: src/admin-views/tribe-options-help.php:
|
2897 |
msgid ""
|
2898 |
"%s. All of the common (and not-so-common) answers to questions we see are "
|
2899 |
"here. It’s often the fastest path to finding an answer!"
|
2900 |
msgstr ""
|
2901 |
|
2902 |
-
#: src/admin-views/tribe-options-help.php:
|
2903 |
msgid "Check our Knowledgebase"
|
2904 |
msgstr ""
|
2905 |
|
2906 |
-
#: src/admin-views/tribe-options-help.php:
|
2907 |
msgid ""
|
2908 |
"%s. Testing for an existing conflict is the best start for in-depth "
|
2909 |
"troubleshooting. We will often ask you to follow these steps when opening a "
|
2910 |
"new thread, so doing this ahead of time will be super helpful."
|
2911 |
msgstr ""
|
2912 |
|
2913 |
-
#: src/admin-views/tribe-options-help.php:
|
2914 |
msgid "Test for a theme or plugin conflict"
|
2915 |
msgstr ""
|
2916 |
|
2917 |
-
#: src/admin-views/tribe-options-help.php:
|
2918 |
msgid ""
|
2919 |
"%s. There are very few issues we haven’t seen and it’s likely another user "
|
2920 |
"has already asked your question and gotten an answer from our support staff. "
|
@@ -2922,25 +2532,25 @@ msgid ""
|
|
2922 |
"for anyone to search and review."
|
2923 |
msgstr ""
|
2924 |
|
2925 |
-
#: src/admin-views/tribe-options-help.php:
|
2926 |
msgid "Search our support help desk"
|
2927 |
msgstr ""
|
2928 |
|
2929 |
-
#: src/admin-views/tribe-options-help.php:
|
2930 |
msgid ""
|
2931 |
"Please note that all hands-on support is provided via the help desk. You can "
|
2932 |
"email or tweet at us… but we will probably point you back to the help desk 😄"
|
2933 |
msgstr ""
|
2934 |
|
2935 |
-
#: src/admin-views/tribe-options-help.php:
|
2936 |
msgid "Read more about our support policy"
|
2937 |
msgstr ""
|
2938 |
|
2939 |
-
#: src/admin-views/tribe-options-help.php:
|
2940 |
msgid "System Information"
|
2941 |
msgstr ""
|
2942 |
|
2943 |
-
#: src/admin-views/tribe-options-help.php:
|
2944 |
msgid ""
|
2945 |
"The details of your calendar plugin and settings is often needed for you or "
|
2946 |
"our staff to help troubleshoot an issue. Please opt-in below to "
|
@@ -2948,19 +2558,19 @@ msgid ""
|
|
2948 |
"allow us to assist you faster if you post in our help desk."
|
2949 |
msgstr ""
|
2950 |
|
2951 |
-
#: src/admin-views/tribe-options-help.php:
|
2952 |
msgid "Recent Template Changes"
|
2953 |
msgstr ""
|
2954 |
|
2955 |
-
#: src/admin-views/tribe-options-help.php:
|
2956 |
msgid "Event Log"
|
2957 |
msgstr ""
|
2958 |
|
2959 |
-
#: src/admin-views/tribe-options-help.php:
|
2960 |
msgid "News and Tutorials"
|
2961 |
msgstr ""
|
2962 |
|
2963 |
-
#: src/admin-views/tribe-options-help.php:
|
2964 |
msgid "More..."
|
2965 |
msgstr ""
|
2966 |
|
@@ -3018,15 +2628,15 @@ msgstr ""
|
|
3018 |
|
3019 |
#: src/admin-views/tribe-options-network.php:19
|
3020 |
msgid ""
|
3021 |
-
"This is where all of the global network settings for
|
3022 |
-
"be modified."
|
3023 |
msgstr ""
|
3024 |
|
3025 |
#: src/admin-views/tribe-options-network.php:27
|
3026 |
msgid "Hide the following settings tabs on every site:"
|
3027 |
msgstr ""
|
3028 |
|
3029 |
-
#: src/functions/template-tags/html.php:
|
3030 |
msgctxt "The associated field is required."
|
3031 |
msgid "(required)"
|
3032 |
msgstr ""
|
@@ -3084,6 +2694,11 @@ msgstr ""
|
|
3084 |
msgid "An event settings framework for managing shared options"
|
3085 |
msgstr ""
|
3086 |
|
|
|
|
|
|
|
|
|
3087 |
#. Author URI of the plugin/theme
|
3088 |
-
msgid "http://
|
3089 |
msgstr ""
|
|
1 |
+
# Copyright (C) 2020 Modern Tribe
|
2 |
# This file is distributed under the same license as the Tribe Common package.
|
3 |
msgid ""
|
4 |
msgstr ""
|
5 |
+
"Project-Id-Version: Tribe Common 4.12.0\n"
|
6 |
"Report-Msgid-Bugs-To: http://m.tri.be/191x\n"
|
7 |
+
"POT-Creation-Date: 2020-04-24 02:58:48+00:00\n"
|
8 |
"MIME-Version: 1.0\n"
|
9 |
"Content-Type: text/plain; charset=UTF-8\n"
|
10 |
"Content-Transfer-Encoding: 8bit\n"
|
11 |
+
"PO-Revision-Date: 2020-04-24 02:58\n"
|
12 |
"Last-Translator: \n"
|
13 |
"Language-Team: \n"
|
14 |
|
15 |
+
#: src/Tribe/Admin/Activation_Page.php:84
|
16 |
msgid "Go to plugins page"
|
17 |
msgstr ""
|
18 |
|
19 |
+
#: src/Tribe/Admin/Activation_Page.php:84
|
20 |
msgid "Return to Plugins page"
|
21 |
msgstr ""
|
22 |
|
23 |
+
#: src/Tribe/Admin/Activation_Page.php:92
|
24 |
msgid "Go to WordPress Updates page"
|
25 |
msgstr ""
|
26 |
|
27 |
+
#: src/Tribe/Admin/Activation_Page.php:92
|
28 |
msgid "Return to WordPress Updates"
|
29 |
msgstr ""
|
30 |
|
31 |
+
#: src/Tribe/Admin/Help_Page.php:56 src/admin-views/tribe-options-help.php:50
|
32 |
msgid "Copy to clipboard"
|
33 |
msgstr ""
|
34 |
|
40 |
msgid "Press \"Cmd + C\" to copy"
|
41 |
msgstr ""
|
42 |
|
43 |
+
#: src/Tribe/Admin/Help_Page.php:79 src/Tribe/Customizer.php:563
|
|
|
|
|
44 |
#: src/Tribe/Plugins_API.php:25
|
45 |
msgid "The Events Calendar"
|
46 |
msgstr ""
|
51 |
"easily share your events."
|
52 |
msgstr ""
|
53 |
|
54 |
+
#: src/Tribe/Admin/Help_Page.php:95 src/Tribe/Plugins_API.php:57
|
55 |
msgid "Event Tickets"
|
56 |
msgstr ""
|
57 |
|
58 |
+
#: src/Tribe/Admin/Help_Page.php:99
|
59 |
msgid ""
|
60 |
"Events Tickets is a carefully crafted, extensible plugin that lets you "
|
61 |
"easily sell tickets for your events."
|
62 |
msgstr ""
|
63 |
|
64 |
+
#: src/Tribe/Admin/Help_Page.php:111
|
65 |
msgid "Advanced Post Manager"
|
66 |
msgstr ""
|
67 |
|
68 |
+
#: src/Tribe/Admin/Help_Page.php:115
|
69 |
msgid ""
|
70 |
"Turbo charge your posts admin for any custom post type with sortable filters "
|
71 |
"and columns, and auto-registration of metaboxes."
|
72 |
msgstr ""
|
73 |
|
74 |
+
#: src/Tribe/Admin/Help_Page.php:190
|
75 |
msgid " and "
|
76 |
msgstr ""
|
77 |
|
78 |
+
#: src/Tribe/Admin/Help_Page.php:214 src/Tribe/Plugins_API.php:43
|
79 |
msgid "Events Calendar PRO"
|
80 |
msgstr ""
|
81 |
|
82 |
+
#: src/Tribe/Admin/Help_Page.php:223 src/Tribe/Plugins_API.php:121
|
83 |
msgid "Eventbrite Tickets"
|
84 |
msgstr ""
|
85 |
|
86 |
+
#: src/Tribe/Admin/Help_Page.php:231 src/Tribe/Plugins_API.php:100
|
87 |
msgid "Community Events"
|
88 |
msgstr ""
|
89 |
|
90 |
+
#: src/Tribe/Admin/Help_Page.php:239 src/Tribe/Plugins_API.php:34
|
91 |
msgid "Event Aggregator"
|
92 |
msgstr ""
|
93 |
|
94 |
+
#: src/Tribe/Admin/Help_Page.php:247 src/Tribe/Plugins_API.php:90
|
95 |
msgid "Filter Bar"
|
96 |
msgstr ""
|
97 |
|
98 |
+
#: src/Tribe/Admin/Help_Page.php:255 src/Tribe/Plugins_API.php:66
|
|
|
|
|
|
|
|
|
99 |
msgid "Event Tickets Plus"
|
100 |
msgstr ""
|
101 |
|
102 |
+
#: src/Tribe/Admin/Help_Page.php:264 src/Tribe/Plugins_API.php:110
|
103 |
msgid "Community Tickets"
|
104 |
msgstr ""
|
105 |
|
106 |
+
#: src/Tribe/Admin/Help_Page.php:425
|
107 |
msgctxt "not available"
|
108 |
msgid "n/a"
|
109 |
msgstr ""
|
110 |
|
111 |
+
#: src/Tribe/Admin/Help_Page.php:433
|
112 |
msgid "You need to upgrade!"
|
113 |
msgstr ""
|
114 |
|
115 |
+
#: src/Tribe/Admin/Help_Page.php:433 src/Tribe/Admin/Help_Page.php:808
|
116 |
msgid "You are up to date!"
|
117 |
msgstr ""
|
118 |
|
119 |
+
#: src/Tribe/Admin/Help_Page.php:798
|
120 |
msgid "Activate %s"
|
121 |
msgstr ""
|
122 |
|
123 |
+
#: src/Tribe/Admin/Help_Page.php:798
|
124 |
msgid "Activate Plugin"
|
125 |
msgstr ""
|
126 |
|
127 |
+
#: src/Tribe/Admin/Help_Page.php:806
|
128 |
msgid "Upgrade Plugin"
|
129 |
msgstr ""
|
130 |
|
131 |
+
#: src/Tribe/Admin/Help_Page.php:822
|
132 |
msgid "Install %s"
|
133 |
msgstr ""
|
134 |
|
135 |
+
#: src/Tribe/Admin/Help_Page.php:822
|
136 |
msgid "Install Plugin"
|
137 |
msgstr ""
|
138 |
|
139 |
+
#: src/Tribe/Admin/Help_Page.php:839
|
140 |
msgid "Latest Version:"
|
141 |
msgstr ""
|
142 |
|
143 |
+
#: src/Tribe/Admin/Help_Page.php:842 src/admin-views/app-shop.php:77
|
144 |
msgid "Requires:"
|
145 |
msgstr ""
|
146 |
|
147 |
+
#: src/Tribe/Admin/Help_Page.php:843
|
148 |
msgid "WordPress "
|
149 |
msgstr ""
|
150 |
|
151 |
+
#: src/Tribe/Admin/Help_Page.php:845
|
152 |
msgid "Active Users:"
|
153 |
msgstr ""
|
154 |
|
155 |
+
#: src/Tribe/Admin/Help_Page.php:848
|
156 |
msgid "Rating:"
|
157 |
msgstr ""
|
158 |
|
159 |
+
#: src/Tribe/Admin/Help_Page.php:867
|
160 |
msgid "Premium Add-Ons"
|
161 |
msgstr ""
|
162 |
|
163 |
+
#: src/Tribe/Admin/Help_Page.php:873
|
164 |
msgid "Plugin Active"
|
165 |
msgstr ""
|
166 |
|
167 |
+
#: src/Tribe/Admin/Help_Page.php:875
|
168 |
msgid "Plugin Inactive"
|
169 |
msgstr ""
|
170 |
|
171 |
+
#: src/Tribe/Admin/Help_Page.php:880
|
172 |
msgid "Visit the Add-on Page"
|
173 |
msgstr ""
|
174 |
|
215 |
"compatible version of The Events Calendar. %2$s"
|
216 |
msgstr ""
|
217 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
218 |
#: src/Tribe/Ajax/Dropdown.php:38
|
219 |
msgid "Cannot look for Terms without a taxonomy"
|
220 |
msgstr ""
|
221 |
|
222 |
+
#: src/Tribe/Ajax/Dropdown.php:180
|
223 |
msgid "Missing data source for this dropdown"
|
224 |
msgstr ""
|
225 |
|
226 |
+
#: src/Tribe/Ajax/Dropdown.php:193
|
227 |
msgid "Empty data set for this dropdown"
|
228 |
msgstr ""
|
229 |
|
230 |
+
#: src/Tribe/Ajax/Dropdown.php:243
|
231 |
msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
|
232 |
msgstr ""
|
233 |
|
234 |
#: src/Tribe/App_Shop.php:50 src/Tribe/App_Shop.php:51
|
235 |
+
#: src/Tribe/App_Shop.php:72
|
236 |
msgid "Event Add-Ons"
|
237 |
msgstr ""
|
238 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
239 |
#: src/Tribe/Cost_Utils.php:114
|
240 |
msgid "Free"
|
241 |
msgstr ""
|
252 |
msgid "Rate %1$sEvent Tickets%2$s %3$s"
|
253 |
msgstr ""
|
254 |
|
255 |
+
#: src/Tribe/Customizer.php:564
|
256 |
msgid ""
|
257 |
"Use the following panel of your customizer to change the styling of your "
|
258 |
"Calendar and Event pages."
|
260 |
|
261 |
#: src/Tribe/Debug_Bar/Panels/Context.php:22
|
262 |
#: src/Tribe/Debug_Bar/Panels/Context.php:50
|
263 |
+
msgid "Modern Tribe Context"
|
264 |
msgstr ""
|
265 |
|
266 |
#: src/Tribe/Debug_Bar/Panels/Context.php:53
|
293 |
|
294 |
#: src/Tribe/Debug_Bar/Panels/Json_Ld.php:21
|
295 |
#: src/Tribe/Debug_Bar/Panels/Json_Ld.php:40
|
296 |
+
msgid "Modern Tribe JSON-LD Data"
|
297 |
msgstr ""
|
298 |
|
299 |
+
#: src/Tribe/Dialog/View.php:153
|
300 |
msgid "Open the modal window"
|
301 |
msgstr ""
|
302 |
|
303 |
+
#: src/Tribe/Dialog/View.php:154
|
304 |
msgid "Close this modal window"
|
305 |
msgstr ""
|
306 |
|
307 |
+
#: src/Tribe/Dialog/View.php:222
|
308 |
msgid "Cancel"
|
309 |
msgstr ""
|
310 |
|
311 |
+
#: src/Tribe/Dialog/View.php:223
|
312 |
msgid "Confirm"
|
313 |
msgstr ""
|
314 |
|
315 |
+
#: src/Tribe/Dialog/View.php:288
|
316 |
msgid "OK"
|
317 |
msgstr ""
|
318 |
|
319 |
+
#: src/Tribe/Dialog/View.php:355
|
320 |
msgid "Open the dialog window"
|
321 |
msgstr ""
|
322 |
|
323 |
+
#: src/Tribe/Dialog/View.php:369
|
324 |
msgid "Close this dialog window"
|
325 |
msgstr ""
|
326 |
|
436 |
msgid "A list of links to the term own, archive and parent REST URL"
|
437 |
msgstr ""
|
438 |
|
439 |
+
#: src/Tribe/Editor/Blocks/Abstract.php:127
|
440 |
msgid "Problem loading the block, please remove this block to restart."
|
441 |
msgstr ""
|
442 |
|
443 |
#. translators: %s: duration
|
444 |
+
#: src/Tribe/Editor/Configuration.php:89
|
445 |
msgid "%s from now"
|
446 |
msgstr ""
|
447 |
|
448 |
#. translators: %s: duration
|
449 |
+
#: src/Tribe/Editor/Configuration.php:91
|
450 |
msgid "%s ago"
|
451 |
msgstr ""
|
452 |
|
453 |
+
#: src/Tribe/Editor/Configuration.php:95 src/Tribe/Editor/Configuration.php:98
|
|
|
454 |
msgid "g:i a"
|
455 |
msgstr ""
|
456 |
|
457 |
+
#: src/Tribe/Editor/Configuration.php:96 src/Tribe/Editor/Configuration.php:98
|
|
|
458 |
msgid "F j, Y"
|
459 |
msgstr ""
|
460 |
|
461 |
+
#: src/Tribe/Editor/Configuration.php:97
|
462 |
msgid "F j"
|
463 |
msgstr ""
|
464 |
|
478 |
msgid "Tutorial"
|
479 |
msgstr ""
|
480 |
|
481 |
+
#: src/Tribe/Extension.php:377
|
482 |
msgid ""
|
483 |
"Unable to run Tribe Extensions. Your website host is running PHP 5.2 or "
|
484 |
"older, and has likely disabled or misconfigured debug_backtrace(). You, or "
|
486 |
"debug_backtrace() for Tribe Extensions to work."
|
487 |
msgstr ""
|
488 |
|
489 |
+
#: src/Tribe/Field.php:233
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
490 |
msgid "Invalid field type specified"
|
491 |
msgstr ""
|
492 |
|
493 |
+
#: src/Tribe/Field.php:541
|
494 |
msgid "No radio options specified"
|
495 |
msgstr ""
|
496 |
|
497 |
+
#: src/Tribe/Field.php:577
|
498 |
msgid "No checkbox options specified"
|
499 |
msgstr ""
|
500 |
|
501 |
+
#: src/Tribe/Field.php:638
|
502 |
msgid "No select options specified"
|
503 |
msgstr ""
|
504 |
|
505 |
+
#: src/Tribe/Languages/Locations.php:55
|
506 |
msgid "United States"
|
507 |
msgstr ""
|
508 |
|
509 |
+
#: src/Tribe/Languages/Locations.php:56
|
510 |
msgid "Afghanistan"
|
511 |
msgstr ""
|
512 |
|
513 |
+
#: src/Tribe/Languages/Locations.php:57
|
514 |
msgid "Åland Islands"
|
515 |
msgstr ""
|
516 |
|
517 |
+
#: src/Tribe/Languages/Locations.php:58
|
518 |
msgid "Albania"
|
519 |
msgstr ""
|
520 |
|
521 |
+
#: src/Tribe/Languages/Locations.php:59
|
522 |
msgid "Algeria"
|
523 |
msgstr ""
|
524 |
|
525 |
+
#: src/Tribe/Languages/Locations.php:60
|
526 |
msgid "American Samoa"
|
527 |
msgstr ""
|
528 |
|
529 |
+
#: src/Tribe/Languages/Locations.php:61
|
530 |
msgid "Andorra"
|
531 |
msgstr ""
|
532 |
|
533 |
+
#: src/Tribe/Languages/Locations.php:62
|
534 |
msgid "Angola"
|
535 |
msgstr ""
|
536 |
|
537 |
+
#: src/Tribe/Languages/Locations.php:63
|
538 |
msgid "Anguilla"
|
539 |
msgstr ""
|
540 |
|
541 |
+
#: src/Tribe/Languages/Locations.php:64
|
542 |
msgid "Antarctica"
|
543 |
msgstr ""
|
544 |
|
545 |
+
#: src/Tribe/Languages/Locations.php:65
|
546 |
msgid "Antigua and Barbuda"
|
547 |
msgstr ""
|
548 |
|
549 |
+
#: src/Tribe/Languages/Locations.php:66
|
550 |
msgid "Argentina"
|
551 |
msgstr ""
|
552 |
|
553 |
+
#: src/Tribe/Languages/Locations.php:67
|
554 |
msgid "Armenia"
|
555 |
msgstr ""
|
556 |
|
557 |
+
#: src/Tribe/Languages/Locations.php:68
|
558 |
msgid "Aruba"
|
559 |
msgstr ""
|
560 |
|
561 |
+
#: src/Tribe/Languages/Locations.php:69
|
562 |
msgid "Australia"
|
563 |
msgstr ""
|
564 |
|
565 |
+
#: src/Tribe/Languages/Locations.php:70
|
566 |
msgid "Austria"
|
567 |
msgstr ""
|
568 |
|
569 |
+
#: src/Tribe/Languages/Locations.php:71
|
570 |
msgid "Azerbaijan"
|
571 |
msgstr ""
|
572 |
|
573 |
+
#: src/Tribe/Languages/Locations.php:72
|
574 |
msgid "Bahamas"
|
575 |
msgstr ""
|
576 |
|
577 |
+
#: src/Tribe/Languages/Locations.php:73
|
578 |
msgid "Bahrain"
|
579 |
msgstr ""
|
580 |
|
581 |
+
#: src/Tribe/Languages/Locations.php:74
|
582 |
msgid "Bangladesh"
|
583 |
msgstr ""
|
584 |
|
585 |
+
#: src/Tribe/Languages/Locations.php:75
|
586 |
msgid "Barbados"
|
587 |
msgstr ""
|
588 |
|
589 |
+
#: src/Tribe/Languages/Locations.php:76
|
590 |
msgid "Belarus"
|
591 |
msgstr ""
|
592 |
|
593 |
+
#: src/Tribe/Languages/Locations.php:77
|
594 |
msgid "Belgium"
|
595 |
msgstr ""
|
596 |
|
597 |
+
#: src/Tribe/Languages/Locations.php:78
|
598 |
msgid "Belize"
|
599 |
msgstr ""
|
600 |
|
601 |
+
#: src/Tribe/Languages/Locations.php:79
|
602 |
msgid "Benin"
|
603 |
msgstr ""
|
604 |
|
605 |
+
#: src/Tribe/Languages/Locations.php:80
|
606 |
msgid "Bermuda"
|
607 |
msgstr ""
|
608 |
|
609 |
+
#: src/Tribe/Languages/Locations.php:81
|
610 |
msgid "Bhutan"
|
611 |
msgstr ""
|
612 |
|
613 |
+
#: src/Tribe/Languages/Locations.php:82
|
614 |
msgid "Bolivia"
|
615 |
msgstr ""
|
616 |
|
617 |
+
#: src/Tribe/Languages/Locations.php:83
|
618 |
msgid "Bosnia and Herzegovina"
|
619 |
msgstr ""
|
620 |
|
621 |
+
#: src/Tribe/Languages/Locations.php:84
|
622 |
msgid "Botswana"
|
623 |
msgstr ""
|
624 |
|
625 |
+
#: src/Tribe/Languages/Locations.php:85
|
626 |
msgid "Bouvet Island"
|
627 |
msgstr ""
|
628 |
|
629 |
+
#: src/Tribe/Languages/Locations.php:86
|
630 |
msgid "Brazil"
|
631 |
msgstr ""
|
632 |
|
633 |
+
#: src/Tribe/Languages/Locations.php:87
|
634 |
msgid "British Indian Ocean Territory"
|
635 |
msgstr ""
|
636 |
|
637 |
+
#: src/Tribe/Languages/Locations.php:88
|
638 |
msgid "Brunei Darussalam"
|
639 |
msgstr ""
|
640 |
|
641 |
+
#: src/Tribe/Languages/Locations.php:89
|
642 |
msgid "Bulgaria"
|
643 |
msgstr ""
|
644 |
|
645 |
+
#: src/Tribe/Languages/Locations.php:90
|
646 |
msgid "Burkina Faso"
|
647 |
msgstr ""
|
648 |
|
649 |
+
#: src/Tribe/Languages/Locations.php:91
|
650 |
msgid "Burundi"
|
651 |
msgstr ""
|
652 |
|
653 |
+
#: src/Tribe/Languages/Locations.php:92
|
654 |
msgid "Cambodia"
|
655 |
msgstr ""
|
656 |
|
657 |
+
#: src/Tribe/Languages/Locations.php:93
|
658 |
msgid "Cameroon"
|
659 |
msgstr ""
|
660 |
|
661 |
+
#: src/Tribe/Languages/Locations.php:94
|
662 |
msgid "Canada"
|
663 |
msgstr ""
|
664 |
|
665 |
+
#: src/Tribe/Languages/Locations.php:95
|
666 |
msgid "Cape Verde"
|
667 |
msgstr ""
|
668 |
|
669 |
+
#: src/Tribe/Languages/Locations.php:96
|
670 |
msgid "Cayman Islands"
|
671 |
msgstr ""
|
672 |
|
673 |
+
#: src/Tribe/Languages/Locations.php:97
|
674 |
msgid "Central African Republic"
|
675 |
msgstr ""
|
676 |
|
677 |
+
#: src/Tribe/Languages/Locations.php:98
|
678 |
msgid "Chad"
|
679 |
msgstr ""
|
680 |
|
681 |
+
#: src/Tribe/Languages/Locations.php:99
|
682 |
msgid "Chile"
|
683 |
msgstr ""
|
684 |
|
685 |
+
#: src/Tribe/Languages/Locations.php:100
|
686 |
msgid "China"
|
687 |
msgstr ""
|
688 |
|
689 |
+
#: src/Tribe/Languages/Locations.php:101
|
690 |
msgid "Christmas Island"
|
691 |
msgstr ""
|
692 |
|
693 |
+
#: src/Tribe/Languages/Locations.php:102
|
694 |
msgid "Cocos (Keeling) Islands"
|
695 |
msgstr ""
|
696 |
|
697 |
+
#: src/Tribe/Languages/Locations.php:103
|
698 |
msgid "Collectivity of Saint Martin"
|
699 |
msgstr ""
|
700 |
|
701 |
+
#: src/Tribe/Languages/Locations.php:104
|
702 |
msgid "Colombia"
|
703 |
msgstr ""
|
704 |
|
705 |
+
#: src/Tribe/Languages/Locations.php:105
|
706 |
msgid "Comoros"
|
707 |
msgstr ""
|
708 |
|
709 |
+
#: src/Tribe/Languages/Locations.php:106
|
710 |
msgid "Congo"
|
711 |
msgstr ""
|
712 |
|
713 |
+
#: src/Tribe/Languages/Locations.php:107
|
714 |
msgid "Congo, Democratic Republic of the"
|
715 |
msgstr ""
|
716 |
|
717 |
+
#: src/Tribe/Languages/Locations.php:108
|
718 |
msgid "Cook Islands"
|
719 |
msgstr ""
|
720 |
|
721 |
+
#: src/Tribe/Languages/Locations.php:109
|
722 |
msgid "Costa Rica"
|
723 |
msgstr ""
|
724 |
|
725 |
+
#: src/Tribe/Languages/Locations.php:110
|
726 |
msgid "Côte d'Ivoire"
|
727 |
msgstr ""
|
728 |
|
729 |
+
#: src/Tribe/Languages/Locations.php:111
|
730 |
msgid "Croatia (Local Name: Hrvatska)"
|
731 |
msgstr ""
|
732 |
|
733 |
+
#: src/Tribe/Languages/Locations.php:112
|
734 |
msgid "Cuba"
|
735 |
msgstr ""
|
736 |
|
737 |
+
#: src/Tribe/Languages/Locations.php:113
|
738 |
msgid "Curaçao"
|
739 |
msgstr ""
|
740 |
|
741 |
+
#: src/Tribe/Languages/Locations.php:114
|
742 |
msgid "Cyprus"
|
743 |
msgstr ""
|
744 |
|
745 |
+
#: src/Tribe/Languages/Locations.php:115
|
746 |
msgid "Czech Republic"
|
747 |
msgstr ""
|
748 |
|
749 |
+
#: src/Tribe/Languages/Locations.php:116
|
750 |
msgid "Denmark"
|
751 |
msgstr ""
|
752 |
|
753 |
+
#: src/Tribe/Languages/Locations.php:117
|
754 |
msgid "Djibouti"
|
755 |
msgstr ""
|
756 |
|
757 |
+
#: src/Tribe/Languages/Locations.php:118
|
758 |
msgid "Dominica"
|
759 |
msgstr ""
|
760 |
|
761 |
+
#: src/Tribe/Languages/Locations.php:119
|
762 |
msgid "Dominican Republic"
|
763 |
msgstr ""
|
764 |
|
765 |
+
#: src/Tribe/Languages/Locations.php:120
|
766 |
msgid "East Timor"
|
767 |
msgstr ""
|
768 |
|
769 |
+
#: src/Tribe/Languages/Locations.php:121
|
770 |
msgid "Ecuador"
|
771 |
msgstr ""
|
772 |
|
773 |
+
#: src/Tribe/Languages/Locations.php:122
|
774 |
msgid "Egypt"
|
775 |
msgstr ""
|
776 |
|
777 |
+
#: src/Tribe/Languages/Locations.php:123
|
778 |
msgid "El Salvador"
|
779 |
msgstr ""
|
780 |
|
781 |
+
#: src/Tribe/Languages/Locations.php:124
|
782 |
msgid "Equatorial Guinea"
|
783 |
msgstr ""
|
784 |
|
785 |
+
#: src/Tribe/Languages/Locations.php:125
|
786 |
msgid "Eritrea"
|
787 |
msgstr ""
|
788 |
|
789 |
+
#: src/Tribe/Languages/Locations.php:126
|
790 |
msgid "Estonia"
|
791 |
msgstr ""
|
792 |
|
793 |
+
#: src/Tribe/Languages/Locations.php:127
|
794 |
msgid "Ethiopia"
|
795 |
msgstr ""
|
796 |
|
797 |
+
#: src/Tribe/Languages/Locations.php:128
|
798 |
msgid "Falkland Islands (Malvinas)"
|
799 |
msgstr ""
|
800 |
|
801 |
+
#: src/Tribe/Languages/Locations.php:129
|
802 |
msgid "Faroe Islands"
|
803 |
msgstr ""
|
804 |
|
805 |
+
#: src/Tribe/Languages/Locations.php:130
|
806 |
msgid "Fiji"
|
807 |
msgstr ""
|
808 |
|
809 |
+
#: src/Tribe/Languages/Locations.php:131
|
810 |
msgid "Finland"
|
811 |
msgstr ""
|
812 |
|
813 |
+
#: src/Tribe/Languages/Locations.php:132
|
814 |
msgid "France"
|
815 |
msgstr ""
|
816 |
|
817 |
+
#: src/Tribe/Languages/Locations.php:133
|
818 |
msgid "French Guiana"
|
819 |
msgstr ""
|
820 |
|
821 |
+
#: src/Tribe/Languages/Locations.php:134
|
822 |
msgid "French Polynesia"
|
823 |
msgstr ""
|
824 |
|
825 |
+
#: src/Tribe/Languages/Locations.php:135
|
826 |
msgid "French Southern Territories"
|
827 |
msgstr ""
|
828 |
|
829 |
+
#: src/Tribe/Languages/Locations.php:136
|
830 |
msgid "Gabon"
|
831 |
msgstr ""
|
832 |
|
833 |
+
#: src/Tribe/Languages/Locations.php:137
|
834 |
msgid "Gambia"
|
835 |
msgstr ""
|
836 |
|
837 |
+
#: src/Tribe/Languages/Locations.php:138
|
838 |
msgctxt "The country"
|
839 |
msgid "Georgia"
|
840 |
msgstr ""
|
841 |
|
842 |
+
#: src/Tribe/Languages/Locations.php:139
|
843 |
msgid "Germany"
|
844 |
msgstr ""
|
845 |
|
846 |
+
#: src/Tribe/Languages/Locations.php:140
|
847 |
msgid "Ghana"
|
848 |
msgstr ""
|
849 |
|
850 |
+
#: src/Tribe/Languages/Locations.php:141
|
851 |
msgid "Gibraltar"
|
852 |
msgstr ""
|
853 |
|
854 |
+
#: src/Tribe/Languages/Locations.php:142
|
855 |
msgid "Greece"
|
856 |
msgstr ""
|
857 |
|
858 |
+
#: src/Tribe/Languages/Locations.php:143
|
859 |
msgid "Greenland"
|
860 |
msgstr ""
|
861 |
|
862 |
+
#: src/Tribe/Languages/Locations.php:144
|
863 |
msgid "Grenada"
|
864 |
msgstr ""
|
865 |
|
866 |
+
#: src/Tribe/Languages/Locations.php:145
|
867 |
msgid "Guadeloupe"
|
868 |
msgstr ""
|
869 |
|
870 |
+
#: src/Tribe/Languages/Locations.php:146
|
871 |
msgid "Guam"
|
872 |
msgstr ""
|
873 |
|
874 |
+
#: src/Tribe/Languages/Locations.php:147
|
875 |
msgid "Guatemala"
|
876 |
msgstr ""
|
877 |
|
878 |
+
#: src/Tribe/Languages/Locations.php:148
|
879 |
msgid "Guinea"
|
880 |
msgstr ""
|
881 |
|
882 |
+
#: src/Tribe/Languages/Locations.php:149
|
883 |
msgid "Guinea-Bissau"
|
884 |
msgstr ""
|
885 |
|
886 |
+
#: src/Tribe/Languages/Locations.php:150
|
887 |
msgid "Guyana"
|
888 |
msgstr ""
|
889 |
|
890 |
+
#: src/Tribe/Languages/Locations.php:151
|
891 |
msgid "Haiti"
|
892 |
msgstr ""
|
893 |
|
894 |
+
#: src/Tribe/Languages/Locations.php:152
|
895 |
msgid "Heard and McDonald Islands"
|
896 |
msgstr ""
|
897 |
|
898 |
+
#: src/Tribe/Languages/Locations.php:153
|
899 |
msgid "Holy See (Vatican City State)"
|
900 |
msgstr ""
|
901 |
|
902 |
+
#: src/Tribe/Languages/Locations.php:154
|
903 |
msgid "Honduras"
|
904 |
msgstr ""
|
905 |
|
906 |
+
#: src/Tribe/Languages/Locations.php:155
|
907 |
msgid "Hong Kong"
|
908 |
msgstr ""
|
909 |
|
910 |
+
#: src/Tribe/Languages/Locations.php:156
|
911 |
msgid "Hungary"
|
912 |
msgstr ""
|
913 |
|
914 |
+
#: src/Tribe/Languages/Locations.php:157
|
915 |
msgid "Iceland"
|
916 |
msgstr ""
|
917 |
|
918 |
+
#: src/Tribe/Languages/Locations.php:158
|
919 |
msgid "India"
|
920 |
msgstr ""
|
921 |
|
922 |
+
#: src/Tribe/Languages/Locations.php:159
|
923 |
msgid "Indonesia"
|
924 |
msgstr ""
|
925 |
|
926 |
+
#: src/Tribe/Languages/Locations.php:160
|
927 |
msgid "Iran, Islamic Republic of"
|
928 |
msgstr ""
|
929 |
|
930 |
+
#: src/Tribe/Languages/Locations.php:161
|
931 |
msgid "Iraq"
|
932 |
msgstr ""
|
933 |
|
934 |
+
#: src/Tribe/Languages/Locations.php:162
|
935 |
msgid "Ireland"
|
936 |
msgstr ""
|
937 |
|
938 |
+
#: src/Tribe/Languages/Locations.php:163
|
939 |
msgid "Israel"
|
940 |
msgstr ""
|
941 |
|
942 |
+
#: src/Tribe/Languages/Locations.php:164
|
943 |
msgid "Italy"
|
944 |
msgstr ""
|
945 |
|
946 |
+
#: src/Tribe/Languages/Locations.php:165
|
947 |
msgid "Jamaica"
|
948 |
msgstr ""
|
949 |
|
950 |
+
#: src/Tribe/Languages/Locations.php:166
|
951 |
msgid "Japan"
|
952 |
msgstr ""
|
953 |
|
954 |
+
#: src/Tribe/Languages/Locations.php:167
|
955 |
msgid "Jordan"
|
956 |
msgstr ""
|
957 |
|
958 |
+
#: src/Tribe/Languages/Locations.php:168
|
959 |
msgid "Kazakhstan"
|
960 |
msgstr ""
|
961 |
|
962 |
+
#: src/Tribe/Languages/Locations.php:169
|
963 |
msgid "Kenya"
|
964 |
msgstr ""
|
965 |
|
966 |
+
#: src/Tribe/Languages/Locations.php:170
|
967 |
msgid "Kiribati"
|
968 |
msgstr ""
|
969 |
|
970 |
+
#: src/Tribe/Languages/Locations.php:171
|
971 |
msgid "Korea, Democratic People's Republic of"
|
972 |
msgstr ""
|
973 |
|
974 |
+
#: src/Tribe/Languages/Locations.php:172
|
975 |
msgid "Korea, Republic of"
|
976 |
msgstr ""
|
977 |
|
978 |
+
#: src/Tribe/Languages/Locations.php:173
|
979 |
msgid "Kuwait"
|
980 |
msgstr ""
|
981 |
|
982 |
+
#: src/Tribe/Languages/Locations.php:174
|
983 |
msgid "Kyrgyzstan"
|
984 |
msgstr ""
|
985 |
|
986 |
+
#: src/Tribe/Languages/Locations.php:175
|
987 |
msgid "Lao People's Democratic Republic"
|
988 |
msgstr ""
|
989 |
|
990 |
+
#: src/Tribe/Languages/Locations.php:176
|
991 |
msgid "Latvia"
|
992 |
msgstr ""
|
993 |
|
994 |
+
#: src/Tribe/Languages/Locations.php:177
|
995 |
msgid "Lebanon"
|
996 |
msgstr ""
|
997 |
|
998 |
+
#: src/Tribe/Languages/Locations.php:178
|
999 |
msgid "Lesotho"
|
1000 |
msgstr ""
|
1001 |
|
1002 |
+
#: src/Tribe/Languages/Locations.php:179
|
1003 |
msgid "Liberia"
|
1004 |
msgstr ""
|
1005 |
|
1006 |
+
#: src/Tribe/Languages/Locations.php:180
|
1007 |
msgid "Libya"
|
1008 |
msgstr ""
|
1009 |
|
1010 |
+
#: src/Tribe/Languages/Locations.php:181
|
1011 |
msgid "Liechtenstein"
|
1012 |
msgstr ""
|
1013 |
|
1014 |
+
#: src/Tribe/Languages/Locations.php:182
|
1015 |
msgid "Lithuania"
|
1016 |
msgstr ""
|
1017 |
|
1018 |
+
#: src/Tribe/Languages/Locations.php:183
|
1019 |
msgid "Luxembourg"
|
1020 |
msgstr ""
|
1021 |
|
1022 |
+
#: src/Tribe/Languages/Locations.php:184
|
1023 |
msgid "Macau"
|
1024 |
msgstr ""
|
1025 |
|
1026 |
+
#: src/Tribe/Languages/Locations.php:185
|
1027 |
msgid "Madagascar"
|
1028 |
msgstr ""
|
1029 |
|
1030 |
+
#: src/Tribe/Languages/Locations.php:186
|
1031 |
msgid "Malawi"
|
1032 |
msgstr ""
|
1033 |
|
1034 |
+
#: src/Tribe/Languages/Locations.php:187
|
1035 |
msgid "Malaysia"
|
1036 |
msgstr ""
|
1037 |
|
1038 |
+
#: src/Tribe/Languages/Locations.php:188
|
1039 |
msgid "Maldives"
|
1040 |
msgstr ""
|
1041 |
|
1042 |
+
#: src/Tribe/Languages/Locations.php:189
|
1043 |
msgid "Mali"
|
1044 |
msgstr ""
|
1045 |
|
1046 |
+
#: src/Tribe/Languages/Locations.php:190
|
1047 |
msgid "Malta"
|
1048 |
msgstr ""
|
1049 |
|
1050 |
+
#: src/Tribe/Languages/Locations.php:191
|
1051 |
msgid "Marshall Islands"
|
1052 |
msgstr ""
|
1053 |
|
1054 |
+
#: src/Tribe/Languages/Locations.php:192
|
1055 |
msgid "Martinique"
|
1056 |
msgstr ""
|
1057 |
|
1058 |
+
#: src/Tribe/Languages/Locations.php:193
|
1059 |
msgid "Mauritania"
|
1060 |
msgstr ""
|
1061 |
|
1062 |
+
#: src/Tribe/Languages/Locations.php:194
|
1063 |
msgid "Mauritius"
|
1064 |
msgstr ""
|
1065 |
|
1066 |
+
#: src/Tribe/Languages/Locations.php:195
|
1067 |
msgid "Mayotte"
|
1068 |
msgstr ""
|
1069 |
|
1070 |
+
#: src/Tribe/Languages/Locations.php:196
|
1071 |
msgid "Mexico"
|
1072 |
msgstr ""
|
1073 |
|
1074 |
+
#: src/Tribe/Languages/Locations.php:197
|
1075 |
msgid "Micronesia, Federated States of"
|
1076 |
msgstr ""
|
1077 |
|
1078 |
+
#: src/Tribe/Languages/Locations.php:198
|
1079 |
msgid "Moldova, Republic of"
|
1080 |
msgstr ""
|
1081 |
|
1082 |
+
#: src/Tribe/Languages/Locations.php:199
|
1083 |
msgid "Monaco"
|
1084 |
msgstr ""
|
1085 |
|
1086 |
+
#: src/Tribe/Languages/Locations.php:200
|
1087 |
msgid "Mongolia"
|
1088 |
msgstr ""
|
1089 |
|
1090 |
+
#: src/Tribe/Languages/Locations.php:201
|
1091 |
msgid "Montenegro"
|
1092 |
msgstr ""
|
1093 |
|
1094 |
+
#: src/Tribe/Languages/Locations.php:202
|
1095 |
msgid "Montserrat"
|
1096 |
msgstr ""
|
1097 |
|
1098 |
+
#: src/Tribe/Languages/Locations.php:203
|
1099 |
msgid "Morocco"
|
1100 |
msgstr ""
|
1101 |
|
1102 |
+
#: src/Tribe/Languages/Locations.php:204
|
1103 |
msgid "Mozambique"
|
1104 |
msgstr ""
|
1105 |
|
1106 |
+
#: src/Tribe/Languages/Locations.php:205
|
1107 |
msgid "Myanmar"
|
1108 |
msgstr ""
|
1109 |
|
1110 |
+
#: src/Tribe/Languages/Locations.php:206
|
1111 |
msgid "Namibia"
|
1112 |
msgstr ""
|
1113 |
|
1114 |
+
#: src/Tribe/Languages/Locations.php:207
|
1115 |
msgid "Nauru"
|
1116 |
msgstr ""
|
1117 |
|
1118 |
+
#: src/Tribe/Languages/Locations.php:208
|
1119 |
msgid "Nepal"
|
1120 |
msgstr ""
|
1121 |
|
1122 |
+
#: src/Tribe/Languages/Locations.php:209
|
1123 |
msgid "Netherlands"
|
1124 |
msgstr ""
|
1125 |
|
1126 |
+
#: src/Tribe/Languages/Locations.php:210
|
1127 |
msgid "New Caledonia"
|
1128 |
msgstr ""
|
1129 |
|
1130 |
+
#: src/Tribe/Languages/Locations.php:211
|
1131 |
msgid "New Zealand"
|
1132 |
msgstr ""
|
1133 |
|
1134 |
+
#: src/Tribe/Languages/Locations.php:212
|
1135 |
msgid "Nicaragua"
|
1136 |
msgstr ""
|
1137 |
|
1138 |
+
#: src/Tribe/Languages/Locations.php:213
|
1139 |
msgid "Niger"
|
1140 |
msgstr ""
|
1141 |
|
1142 |
+
#: src/Tribe/Languages/Locations.php:214
|
1143 |
msgid "Nigeria"
|
1144 |
msgstr ""
|
1145 |
|
1146 |
+
#: src/Tribe/Languages/Locations.php:215
|
1147 |
msgid "Niue"
|
1148 |
msgstr ""
|
1149 |
|
1150 |
+
#: src/Tribe/Languages/Locations.php:216
|
1151 |
msgid "Norfolk Island"
|
1152 |
msgstr ""
|
1153 |
|
1154 |
+
#: src/Tribe/Languages/Locations.php:217
|
1155 |
msgid "North Macedonia"
|
1156 |
msgstr ""
|
1157 |
|
1158 |
+
#: src/Tribe/Languages/Locations.php:218
|
1159 |
msgid "Northern Mariana Islands"
|
1160 |
msgstr ""
|
1161 |
|
1162 |
+
#: src/Tribe/Languages/Locations.php:219
|
1163 |
msgid "Norway"
|
1164 |
msgstr ""
|
1165 |
|
1166 |
+
#: src/Tribe/Languages/Locations.php:220
|
1167 |
msgid "Oman"
|
1168 |
msgstr ""
|
1169 |
|
1170 |
+
#: src/Tribe/Languages/Locations.php:221
|
1171 |
msgid "Pakistan"
|
1172 |
msgstr ""
|
1173 |
|
1174 |
+
#: src/Tribe/Languages/Locations.php:222
|
1175 |
msgid "Palau"
|
1176 |
msgstr ""
|
1177 |
|
1178 |
+
#: src/Tribe/Languages/Locations.php:223
|
1179 |
msgid "Panama"
|
1180 |
msgstr ""
|
1181 |
|
1182 |
+
#: src/Tribe/Languages/Locations.php:224
|
1183 |
msgid "Papua New Guinea"
|
1184 |
msgstr ""
|
1185 |
|
1186 |
+
#: src/Tribe/Languages/Locations.php:225
|
1187 |
msgid "Paraguay"
|
1188 |
msgstr ""
|
1189 |
|
1190 |
+
#: src/Tribe/Languages/Locations.php:226
|
1191 |
msgid "Peru"
|
1192 |
msgstr ""
|
1193 |
|
1194 |
+
#: src/Tribe/Languages/Locations.php:227
|
1195 |
msgid "Philippines"
|
1196 |
msgstr ""
|
1197 |
|
1198 |
+
#: src/Tribe/Languages/Locations.php:228
|
1199 |
msgid "Pitcairn"
|
1200 |
msgstr ""
|
1201 |
|
1202 |
+
#: src/Tribe/Languages/Locations.php:229
|
1203 |
msgid "Poland"
|
1204 |
msgstr ""
|
1205 |
|
1206 |
+
#: src/Tribe/Languages/Locations.php:230
|
1207 |
msgid "Portugal"
|
1208 |
msgstr ""
|
1209 |
|
1210 |
+
#: src/Tribe/Languages/Locations.php:231
|
1211 |
msgid "Puerto Rico"
|
1212 |
msgstr ""
|
1213 |
|
1214 |
+
#: src/Tribe/Languages/Locations.php:232
|
1215 |
msgid "Qatar"
|
1216 |
msgstr ""
|
1217 |
|
1218 |
+
#: src/Tribe/Languages/Locations.php:233
|
1219 |
msgid "Reunion"
|
1220 |
msgstr ""
|
1221 |
|
1222 |
+
#: src/Tribe/Languages/Locations.php:234
|
1223 |
msgid "Romania"
|
1224 |
msgstr ""
|
1225 |
|
1226 |
+
#: src/Tribe/Languages/Locations.php:235
|
1227 |
msgid "Russian Federation"
|
1228 |
msgstr ""
|
1229 |
|
1230 |
+
#: src/Tribe/Languages/Locations.php:236
|
1231 |
msgid "Rwanda"
|
1232 |
msgstr ""
|
1233 |
|
1234 |
+
#: src/Tribe/Languages/Locations.php:237
|
1235 |
msgid "Saint Barthélemy"
|
1236 |
msgstr ""
|
1237 |
|
1238 |
+
#: src/Tribe/Languages/Locations.php:238
|
1239 |
msgid "Saint Helena"
|
1240 |
msgstr ""
|
1241 |
|
1242 |
+
#: src/Tribe/Languages/Locations.php:239
|
1243 |
msgid "Saint Kitts and Nevis"
|
1244 |
msgstr ""
|
1245 |
|
1246 |
+
#: src/Tribe/Languages/Locations.php:240
|
1247 |
msgid "Saint Lucia"
|
1248 |
msgstr ""
|
1249 |
|
1250 |
+
#: src/Tribe/Languages/Locations.php:241
|
1251 |
msgid "Saint Pierre and Miquelon"
|
1252 |
msgstr ""
|
1253 |
|
1254 |
+
#: src/Tribe/Languages/Locations.php:242
|
1255 |
msgid "Saint Vincent and The Grenadines"
|
1256 |
msgstr ""
|
1257 |
|
1258 |
+
#: src/Tribe/Languages/Locations.php:243
|
1259 |
msgid "Samoa"
|
1260 |
msgstr ""
|
1261 |
|
1262 |
+
#: src/Tribe/Languages/Locations.php:244
|
1263 |
msgid "San Marino"
|
1264 |
msgstr ""
|
1265 |
|
1266 |
+
#: src/Tribe/Languages/Locations.php:245
|
1267 |
msgid "São Tomé and Príncipe"
|
1268 |
msgstr ""
|
1269 |
|
1270 |
+
#: src/Tribe/Languages/Locations.php:246
|
1271 |
msgid "Saudi Arabia"
|
1272 |
msgstr ""
|
1273 |
|
1274 |
+
#: src/Tribe/Languages/Locations.php:247
|
1275 |
msgid "Senegal"
|
1276 |
msgstr ""
|
1277 |
|
1278 |
+
#: src/Tribe/Languages/Locations.php:248
|
1279 |
msgid "Serbia"
|
1280 |
msgstr ""
|
1281 |
|
1282 |
+
#: src/Tribe/Languages/Locations.php:249
|
1283 |
msgid "Seychelles"
|
1284 |
msgstr ""
|
1285 |
|
1286 |
+
#: src/Tribe/Languages/Locations.php:250
|
1287 |
msgid "Sierra Leone"
|
1288 |
msgstr ""
|
1289 |
|
1290 |
+
#: src/Tribe/Languages/Locations.php:251
|
1291 |
msgid "Singapore"
|
1292 |
msgstr ""
|
1293 |
|
1294 |
+
#: src/Tribe/Languages/Locations.php:252
|
1295 |
msgid "Sint Maarten"
|
1296 |
msgstr ""
|
1297 |
|
1298 |
+
#: src/Tribe/Languages/Locations.php:253
|
1299 |
msgid "Slovakia (Slovak Republic)"
|
1300 |
msgstr ""
|
1301 |
|
1302 |
+
#: src/Tribe/Languages/Locations.php:254
|
1303 |
msgid "Slovenia"
|
1304 |
msgstr ""
|
1305 |
|
1306 |
+
#: src/Tribe/Languages/Locations.php:255
|
1307 |
msgid "Solomon Islands"
|
1308 |
msgstr ""
|
1309 |
|
1310 |
+
#: src/Tribe/Languages/Locations.php:256
|
1311 |
msgid "Somalia"
|
1312 |
msgstr ""
|
1313 |
|
1314 |
+
#: src/Tribe/Languages/Locations.php:257
|
1315 |
msgid "South Africa"
|
1316 |
msgstr ""
|
1317 |
|
1318 |
+
#: src/Tribe/Languages/Locations.php:258
|
1319 |
msgid "South Georgia, South Sandwich Islands"
|
1320 |
msgstr ""
|
1321 |
|
1322 |
+
#: src/Tribe/Languages/Locations.php:259
|
1323 |
msgid "Spain"
|
1324 |
msgstr ""
|
1325 |
|
1326 |
+
#: src/Tribe/Languages/Locations.php:260
|
1327 |
msgid "Sri Lanka"
|
1328 |
msgstr ""
|
1329 |
|
1330 |
+
#: src/Tribe/Languages/Locations.php:261
|
1331 |
msgid "Sudan"
|
1332 |
msgstr ""
|
1333 |
|
1334 |
+
#: src/Tribe/Languages/Locations.php:262
|
1335 |
msgid "Suriname"
|
1336 |
msgstr ""
|
1337 |
|
1338 |
+
#: src/Tribe/Languages/Locations.php:263
|
1339 |
msgid "Svalbard and Jan Mayen Islands"
|
1340 |
msgstr ""
|
1341 |
|
1342 |
+
#: src/Tribe/Languages/Locations.php:264
|
1343 |
msgid "Swaziland"
|
1344 |
msgstr ""
|
1345 |
|
1346 |
+
#: src/Tribe/Languages/Locations.php:265
|
1347 |
msgid "Sweden"
|
1348 |
msgstr ""
|
1349 |
|
1350 |
+
#: src/Tribe/Languages/Locations.php:266
|
1351 |
msgid "Switzerland"
|
1352 |
msgstr ""
|
1353 |
|
1354 |
+
#: src/Tribe/Languages/Locations.php:267
|
1355 |
msgid "Syrian Arab Republic"
|
1356 |
msgstr ""
|
1357 |
|
1358 |
+
#: src/Tribe/Languages/Locations.php:268
|
1359 |
msgid "Taiwan"
|
1360 |
msgstr ""
|
1361 |
|
1362 |
+
#: src/Tribe/Languages/Locations.php:269
|
1363 |
msgid "Tajikistan"
|
1364 |
msgstr ""
|
1365 |
|
1366 |
+
#: src/Tribe/Languages/Locations.php:270
|
1367 |
msgid "Tanzania, United Republic of"
|
1368 |
msgstr ""
|
1369 |
|
1370 |
+
#: src/Tribe/Languages/Locations.php:271
|
1371 |
msgid "Thailand"
|
1372 |
msgstr ""
|
1373 |
|
1374 |
+
#: src/Tribe/Languages/Locations.php:272
|
1375 |
msgid "Togo"
|
1376 |
msgstr ""
|
1377 |
|
1378 |
+
#: src/Tribe/Languages/Locations.php:273
|
1379 |
msgid "Tokelau"
|
1380 |
msgstr ""
|
1381 |
|
1382 |
+
#: src/Tribe/Languages/Locations.php:274
|
1383 |
msgid "Tonga"
|
1384 |
msgstr ""
|
1385 |
|
1386 |
+
#: src/Tribe/Languages/Locations.php:275
|
1387 |
msgid "Trinidad and Tobago"
|
1388 |
msgstr ""
|
1389 |
|
1390 |
+
#: src/Tribe/Languages/Locations.php:276
|
1391 |
msgid "Tunisia"
|
1392 |
msgstr ""
|
1393 |
|
1394 |
+
#: src/Tribe/Languages/Locations.php:277
|
1395 |
msgid "Turkey"
|
1396 |
msgstr ""
|
1397 |
|
1398 |
+
#: src/Tribe/Languages/Locations.php:278
|
1399 |
msgid "Turkmenistan"
|
1400 |
msgstr ""
|
1401 |
|
1402 |
+
#: src/Tribe/Languages/Locations.php:279
|
1403 |
msgid "Turks and Caicos Islands"
|
1404 |
msgstr ""
|
1405 |
|
1406 |
+
#: src/Tribe/Languages/Locations.php:280
|
1407 |
msgid "Tuvalu"
|
1408 |
msgstr ""
|
1409 |
|
1410 |
+
#: src/Tribe/Languages/Locations.php:281
|
1411 |
msgid "Uganda"
|
1412 |
msgstr ""
|
1413 |
|
1414 |
+
#: src/Tribe/Languages/Locations.php:282
|
1415 |
msgid "Ukraine"
|
1416 |
msgstr ""
|
1417 |
|
1418 |
+
#: src/Tribe/Languages/Locations.php:283
|
1419 |
msgid "United Arab Emirates"
|
1420 |
msgstr ""
|
1421 |
|
1422 |
+
#: src/Tribe/Languages/Locations.php:284
|
1423 |
msgid "United Kingdom"
|
1424 |
msgstr ""
|
1425 |
|
1426 |
+
#: src/Tribe/Languages/Locations.php:285
|
1427 |
msgid "United States Minor Outlying Islands"
|
1428 |
msgstr ""
|
1429 |
|
1430 |
+
#: src/Tribe/Languages/Locations.php:286
|
1431 |
msgid "Uruguay"
|
1432 |
msgstr ""
|
1433 |
|
1434 |
+
#: src/Tribe/Languages/Locations.php:287
|
1435 |
msgid "Uzbekistan"
|
1436 |
msgstr ""
|
1437 |
|
1438 |
+
#: src/Tribe/Languages/Locations.php:288
|
1439 |
msgid "Vanuatu"
|
1440 |
msgstr ""
|
1441 |
|
1442 |
+
#: src/Tribe/Languages/Locations.php:289
|
1443 |
msgid "Venezuela"
|
1444 |
msgstr ""
|
1445 |
|
1446 |
+
#: src/Tribe/Languages/Locations.php:290
|
1447 |
msgid "Viet Nam"
|
1448 |
msgstr ""
|
1449 |
|
1450 |
+
#: src/Tribe/Languages/Locations.php:291
|
1451 |
msgid "Virgin Islands (British)"
|
1452 |
msgstr ""
|
1453 |
|
1454 |
+
#: src/Tribe/Languages/Locations.php:292
|
1455 |
msgid "Virgin Islands (U.S.)"
|
1456 |
msgstr ""
|
1457 |
|
1458 |
+
#: src/Tribe/Languages/Locations.php:293
|
1459 |
msgid "Wallis and Futuna Islands"
|
1460 |
msgstr ""
|
1461 |
|
1462 |
+
#: src/Tribe/Languages/Locations.php:294
|
1463 |
msgid "Western Sahara"
|
1464 |
msgstr ""
|
1465 |
|
1466 |
+
#: src/Tribe/Languages/Locations.php:295
|
1467 |
msgid "Yemen"
|
1468 |
msgstr ""
|
1469 |
|
1470 |
+
#: src/Tribe/Languages/Locations.php:296
|
1471 |
msgid "Zambia"
|
1472 |
msgstr ""
|
1473 |
|
1474 |
+
#: src/Tribe/Languages/Locations.php:297
|
1475 |
msgid "Zimbabwe"
|
1476 |
msgstr ""
|
1477 |
|
1478 |
+
#: src/Tribe/Languages/Locations.php:324
|
1479 |
msgid "Alabama"
|
1480 |
msgstr ""
|
1481 |
|
1482 |
+
#: src/Tribe/Languages/Locations.php:325
|
1483 |
msgid "Alaska"
|
1484 |
msgstr ""
|
1485 |
|
1486 |
+
#: src/Tribe/Languages/Locations.php:326
|
1487 |
msgid "Arizona"
|
1488 |
msgstr ""
|
1489 |
|
1490 |
+
#: src/Tribe/Languages/Locations.php:327
|
1491 |
msgid "Arkansas"
|
1492 |
msgstr ""
|
1493 |
|
1494 |
+
#: src/Tribe/Languages/Locations.php:328
|
1495 |
msgid "California"
|
1496 |
msgstr ""
|
1497 |
|
1498 |
+
#: src/Tribe/Languages/Locations.php:329
|
1499 |
msgid "Colorado"
|
1500 |
msgstr ""
|
1501 |
|
1502 |
+
#: src/Tribe/Languages/Locations.php:330
|
1503 |
msgid "Connecticut"
|
1504 |
msgstr ""
|
1505 |
|
1506 |
+
#: src/Tribe/Languages/Locations.php:331
|
1507 |
msgid "Delaware"
|
1508 |
msgstr ""
|
1509 |
|
1510 |
+
#: src/Tribe/Languages/Locations.php:332
|
1511 |
msgid "District of Columbia"
|
1512 |
msgstr ""
|
1513 |
|
1514 |
+
#: src/Tribe/Languages/Locations.php:333
|
1515 |
msgid "Florida"
|
1516 |
msgstr ""
|
1517 |
|
1518 |
+
#: src/Tribe/Languages/Locations.php:334
|
1519 |
msgctxt "The US state Georgia"
|
1520 |
msgid "Georgia"
|
1521 |
msgstr ""
|
1522 |
|
1523 |
+
#: src/Tribe/Languages/Locations.php:335
|
1524 |
msgid "Hawaii"
|
1525 |
msgstr ""
|
1526 |
|
1527 |
+
#: src/Tribe/Languages/Locations.php:336
|
1528 |
msgid "Idaho"
|
1529 |
msgstr ""
|
1530 |
|
1531 |
+
#: src/Tribe/Languages/Locations.php:337
|
1532 |
msgid "Illinois"
|
1533 |
msgstr ""
|
1534 |
|
1535 |
+
#: src/Tribe/Languages/Locations.php:338
|
1536 |
msgid "Indiana"
|
1537 |
msgstr ""
|
1538 |
|
1539 |
+
#: src/Tribe/Languages/Locations.php:339
|
1540 |
msgid "Iowa"
|
1541 |
msgstr ""
|
1542 |
|
1543 |
+
#: src/Tribe/Languages/Locations.php:340
|
1544 |
msgid "Kansas"
|
1545 |
msgstr ""
|
1546 |
|
1547 |
+
#: src/Tribe/Languages/Locations.php:341
|
1548 |
msgid "Kentucky"
|
1549 |
msgstr ""
|
1550 |
|
1551 |
+
#: src/Tribe/Languages/Locations.php:342
|
1552 |
msgid "Louisiana"
|
1553 |
msgstr ""
|
1554 |
|
1555 |
+
#: src/Tribe/Languages/Locations.php:343
|
1556 |
msgid "Maine"
|
1557 |
msgstr ""
|
1558 |
|
1559 |
+
#: src/Tribe/Languages/Locations.php:344
|
1560 |
msgid "Maryland"
|
1561 |
msgstr ""
|
1562 |
|
1563 |
+
#: src/Tribe/Languages/Locations.php:345
|
1564 |
msgid "Massachusetts"
|
1565 |
msgstr ""
|
1566 |
|
1567 |
+
#: src/Tribe/Languages/Locations.php:346
|
1568 |
msgid "Michigan"
|
1569 |
msgstr ""
|
1570 |
|
1571 |
+
#: src/Tribe/Languages/Locations.php:347
|
1572 |
msgid "Minnesota"
|
1573 |
msgstr ""
|
1574 |
|
1575 |
+
#: src/Tribe/Languages/Locations.php:348
|
1576 |
msgid "Mississippi"
|
1577 |
msgstr ""
|
1578 |
|
1579 |
+
#: src/Tribe/Languages/Locations.php:349
|
1580 |
msgid "Missouri"
|
1581 |
msgstr ""
|
1582 |
|
1583 |
+
#: src/Tribe/Languages/Locations.php:350
|
1584 |
msgid "Montana"
|
1585 |
msgstr ""
|
1586 |
|
1587 |
+
#: src/Tribe/Languages/Locations.php:351
|
1588 |
msgid "Nebraska"
|
1589 |
msgstr ""
|
1590 |
|
1591 |
+
#: src/Tribe/Languages/Locations.php:352
|
1592 |
msgid "Nevada"
|
1593 |
msgstr ""
|
1594 |
|
1595 |
+
#: src/Tribe/Languages/Locations.php:353
|
1596 |
msgid "New Hampshire"
|
1597 |
msgstr ""
|
1598 |
|
1599 |
+
#: src/Tribe/Languages/Locations.php:354
|
1600 |
msgid "New Jersey"
|
1601 |
msgstr ""
|
1602 |
|
1603 |
+
#: src/Tribe/Languages/Locations.php:355
|
1604 |
msgid "New Mexico"
|
1605 |
msgstr ""
|
1606 |
|
1607 |
+
#: src/Tribe/Languages/Locations.php:356
|
1608 |
msgid "New York"
|
1609 |
msgstr ""
|
1610 |
|
1611 |
+
#: src/Tribe/Languages/Locations.php:357
|
1612 |
msgid "North Carolina"
|
1613 |
msgstr ""
|
1614 |
|
1615 |
+
#: src/Tribe/Languages/Locations.php:358
|
1616 |
msgid "North Dakota"
|
1617 |
msgstr ""
|
1618 |
|
1619 |
+
#: src/Tribe/Languages/Locations.php:359
|
1620 |
msgid "Ohio"
|
1621 |
msgstr ""
|
1622 |
|
1623 |
+
#: src/Tribe/Languages/Locations.php:360
|
1624 |
msgid "Oklahoma"
|
1625 |
msgstr ""
|
1626 |
|
1627 |
+
#: src/Tribe/Languages/Locations.php:361
|
1628 |
msgid "Oregon"
|
1629 |
msgstr ""
|
1630 |
|
1631 |
+
#: src/Tribe/Languages/Locations.php:362
|
1632 |
msgid "Pennsylvania"
|
1633 |
msgstr ""
|
1634 |
|
1635 |
+
#: src/Tribe/Languages/Locations.php:363
|
1636 |
msgid "Rhode Island"
|
1637 |
msgstr ""
|
1638 |
|
1639 |
+
#: src/Tribe/Languages/Locations.php:364
|
1640 |
msgid "South Carolina"
|
1641 |
msgstr ""
|
1642 |
|
1643 |
+
#: src/Tribe/Languages/Locations.php:365
|
1644 |
msgid "South Dakota"
|
1645 |
msgstr ""
|
1646 |
|
1647 |
+
#: src/Tribe/Languages/Locations.php:366
|
1648 |
msgid "Tennessee"
|
1649 |
msgstr ""
|
1650 |
|
1651 |
+
#: src/Tribe/Languages/Locations.php:367
|
1652 |
msgid "Texas"
|
1653 |
msgstr ""
|
1654 |
|
1655 |
+
#: src/Tribe/Languages/Locations.php:368
|
1656 |
msgid "Utah"
|
1657 |
msgstr ""
|
1658 |
|
1659 |
+
#: src/Tribe/Languages/Locations.php:369
|
1660 |
msgid "Vermont"
|
1661 |
msgstr ""
|
1662 |
|
1663 |
+
#: src/Tribe/Languages/Locations.php:370
|
1664 |
msgid "Virginia"
|
1665 |
msgstr ""
|
1666 |
|
1667 |
+
#: src/Tribe/Languages/Locations.php:371
|
1668 |
msgid "Washington"
|
1669 |
msgstr ""
|
1670 |
|
1671 |
+
#: src/Tribe/Languages/Locations.php:372
|
1672 |
msgid "West Virginia"
|
1673 |
msgstr ""
|
1674 |
|
1675 |
+
#: src/Tribe/Languages/Locations.php:373
|
1676 |
msgid "Wisconsin"
|
1677 |
msgstr ""
|
1678 |
|
1679 |
+
#: src/Tribe/Languages/Locations.php:374
|
1680 |
msgid "Wyoming"
|
1681 |
msgstr ""
|
1682 |
|
1702 |
msgid "Null logger (will log nothing)"
|
1703 |
msgstr ""
|
1704 |
|
1705 |
+
#: src/Tribe/Log.php:289
|
1706 |
msgid "Cannot set %s as the current logging engine"
|
1707 |
msgstr ""
|
1708 |
|
1709 |
+
#: src/Tribe/Log.php:388
|
1710 |
msgid "Disabled"
|
1711 |
msgstr ""
|
1712 |
|
1713 |
+
#: src/Tribe/Log.php:389
|
1714 |
msgid "Only errors"
|
1715 |
msgstr ""
|
1716 |
|
1717 |
+
#: src/Tribe/Log.php:390
|
1718 |
msgid "Warnings and errors"
|
1719 |
msgstr ""
|
1720 |
|
1721 |
+
#: src/Tribe/Log.php:391
|
1722 |
msgid "Full debug (all events)"
|
1723 |
msgstr ""
|
1724 |
|
1725 |
+
#: src/Tribe/Main.php:313
|
1726 |
msgid ": activate to sort column ascending"
|
1727 |
msgstr ""
|
1728 |
|
1729 |
+
#: src/Tribe/Main.php:314
|
1730 |
msgid ": activate to sort column descending"
|
1731 |
msgstr ""
|
1732 |
|
1733 |
+
#: src/Tribe/Main.php:316
|
1734 |
msgid "Show _MENU_ entries"
|
1735 |
msgstr ""
|
1736 |
|
1737 |
+
#: src/Tribe/Main.php:317
|
1738 |
msgid "No data available in table"
|
1739 |
msgstr ""
|
1740 |
|
1741 |
+
#: src/Tribe/Main.php:318
|
1742 |
msgid "Showing _START_ to _END_ of _TOTAL_ entries"
|
1743 |
msgstr ""
|
1744 |
|
1745 |
+
#: src/Tribe/Main.php:319
|
1746 |
msgid "Showing 0 to 0 of 0 entries"
|
1747 |
msgstr ""
|
1748 |
|
1749 |
+
#: src/Tribe/Main.php:320
|
1750 |
msgid "(filtered from _MAX_ total entries)"
|
1751 |
msgstr ""
|
1752 |
|
1753 |
+
#: src/Tribe/Main.php:321
|
1754 |
msgid "No matching records found"
|
1755 |
msgstr ""
|
1756 |
|
1757 |
+
#: src/Tribe/Main.php:322
|
1758 |
msgid "Search:"
|
1759 |
msgstr ""
|
1760 |
|
1761 |
+
#: src/Tribe/Main.php:323
|
1762 |
msgid "All items on this page were selected. "
|
1763 |
msgstr ""
|
1764 |
|
1765 |
+
#: src/Tribe/Main.php:324
|
1766 |
msgid "Select all pages"
|
1767 |
msgstr ""
|
1768 |
|
1769 |
+
#: src/Tribe/Main.php:325
|
1770 |
msgid "Clear Selection."
|
1771 |
msgstr ""
|
1772 |
|
1773 |
+
#: src/Tribe/Main.php:327
|
1774 |
msgid "All"
|
1775 |
msgstr ""
|
1776 |
|
1777 |
+
#: src/Tribe/Main.php:328 src/Tribe/Main.php:345
|
1778 |
msgid "Next"
|
1779 |
msgstr ""
|
1780 |
|
1781 |
+
#: src/Tribe/Main.php:329
|
1782 |
msgid "Previous"
|
1783 |
msgstr ""
|
1784 |
|
1785 |
+
#: src/Tribe/Main.php:334
|
1786 |
msgid ": Selected %d rows"
|
1787 |
msgstr ""
|
1788 |
|
1789 |
+
#: src/Tribe/Main.php:335
|
1790 |
msgid ": Selected 1 row"
|
1791 |
msgstr ""
|
1792 |
|
1793 |
+
#: src/Tribe/Main.php:346
|
1794 |
msgid "Prev"
|
1795 |
msgstr ""
|
1796 |
|
1797 |
+
#: src/Tribe/Main.php:347 src/Tribe/Main.php:349
|
1798 |
msgid "Today"
|
1799 |
msgstr ""
|
1800 |
|
1801 |
+
#: src/Tribe/Main.php:348
|
1802 |
msgid "Done"
|
1803 |
msgstr ""
|
1804 |
|
1805 |
+
#: src/Tribe/Main.php:350
|
1806 |
msgid "Clear"
|
1807 |
msgstr ""
|
1808 |
|
1841 |
msgid "License key(s) updated."
|
1842 |
msgstr ""
|
1843 |
|
1844 |
+
#: src/Tribe/PUE/Checker.php:899
|
1845 |
msgid ""
|
1846 |
"Hmmm... something's wrong with this validator. Please contact %ssupport%s."
|
1847 |
msgstr ""
|
1848 |
|
1849 |
+
#: src/Tribe/PUE/Checker.php:912
|
1850 |
msgid "unknown date"
|
1851 |
msgstr ""
|
1852 |
|
1853 |
+
#: src/Tribe/PUE/Checker.php:918
|
1854 |
msgid "Sorry, key validation server is not available."
|
1855 |
msgstr ""
|
1856 |
|
1857 |
+
#: src/Tribe/PUE/Checker.php:938
|
1858 |
msgid "Valid Key! Expires on %s"
|
1859 |
msgstr ""
|
1860 |
|
1861 |
+
#: src/Tribe/PUE/Checker.php:943
|
1862 |
msgid "Thanks for setting up a valid key. It will expire on %s"
|
1863 |
msgstr ""
|
1864 |
|
1865 |
+
#: src/Tribe/PUE/Checker.php:970 src/Tribe/PUE/Notices.php:342
|
1866 |
msgid "Renew Your License Now"
|
1867 |
msgstr ""
|
1868 |
|
1869 |
+
#: src/Tribe/PUE/Checker.php:972 src/Tribe/PUE/Notices.php:344
|
1870 |
msgid " (opens in a new window)"
|
1871 |
msgstr ""
|
1872 |
|
1873 |
+
#: src/Tribe/PUE/Checker.php:989
|
1874 |
msgid "Please refresh the page and try your request again."
|
1875 |
msgstr ""
|
1876 |
|
1877 |
+
#: src/Tribe/PUE/Checker.php:1009
|
1878 |
msgid ""
|
1879 |
"There is an update for %s. You'll need to %scheck your license%s to have "
|
1880 |
"access to updates, downloads, and support."
|
1881 |
msgstr ""
|
1882 |
|
1883 |
+
#: src/Tribe/PUE/Checker.php:1066
|
1884 |
msgid ""
|
1885 |
"There is an update for %s. %sRenew your license%s to get access to bug "
|
1886 |
"fixes, security updates, and new features."
|
1887 |
msgstr ""
|
1888 |
|
1889 |
+
#: src/Tribe/PUE/Checker.php:1096
|
1890 |
msgid "Update now to version %s."
|
1891 |
msgstr ""
|
1892 |
|
1893 |
+
#: src/Tribe/PUE/Checker.php:1107
|
1894 |
msgid "There is a new version of %1$s available. %2$s"
|
1895 |
msgstr ""
|
1896 |
|
1897 |
+
#: src/Tribe/PUE/Checker.php:1688
|
1898 |
msgid "A valid license has been entered by your network administrator."
|
1899 |
msgstr ""
|
1900 |
|
1901 |
+
#: src/Tribe/PUE/Checker.php:1689
|
1902 |
msgid "No license entered. Consult your network administrator."
|
1903 |
msgstr ""
|
1904 |
|
1905 |
+
#: src/Tribe/PUE/Checker.php:1690
|
1906 |
msgid "Expired license. Consult your network administrator."
|
1907 |
msgstr ""
|
1908 |
|
1956 |
"%4$s"
|
1957 |
msgstr ""
|
1958 |
|
|
|
|
|
|
|
|
|
|
|
|
|
1959 |
#: src/Tribe/Plugins_API.php:28
|
1960 |
+
msgid ""
|
1961 |
+
"Create an events calendar and manage it with ease. The Events Calendar "
|
1962 |
+
"plugin provides professional-level quality and features backed by a team you "
|
1963 |
+
"can trust."
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1964 |
msgstr ""
|
1965 |
|
1966 |
+
#: src/Tribe/Plugins_API.php:37
|
1967 |
+
msgid ""
|
1968 |
+
"Event Aggregator adds massive import functionality to your calendar. Before "
|
1969 |
+
"you know it, you’ll be importing events from Meetup, Eventbrite, Google "
|
1970 |
+
"Calendar, iCalendar, and other URLs with ease. Schedule imports to run "
|
1971 |
+
"automatically behind-the-scenes or run them manually when you’re ready. Go "
|
1972 |
+
"ahead and import to your heart’s content—Event Aggregator hooks you up with "
|
1973 |
+
"a central dashboard in the admin to make managing your imports a breeze."
|
1974 |
msgstr ""
|
1975 |
|
1976 |
+
#: src/Tribe/Plugins_API.php:48
|
1977 |
+
msgid ""
|
1978 |
+
"The Events Calendar PRO is a paid Add-On to our open source WordPress plugin "
|
1979 |
+
"%1$sThe Events Calendar%2$s. PRO offers a whole host of calendar features "
|
1980 |
+
"including recurring events, custom event attributes, saved venues and "
|
1981 |
+
"organizers, venue pages, advanced event admin and lots more."
|
1982 |
msgstr ""
|
1983 |
|
1984 |
+
#: src/Tribe/Plugins_API.php:60
|
1985 |
+
msgid ""
|
1986 |
+
"Event Tickets provides a simple way for visitors to RSVP to your events. As "
|
1987 |
+
"a standalone plugin, it enables you to add RSVP functionality to posts or "
|
1988 |
+
"pages. When paired with The Events Calendar, you can add that same RSVP "
|
1989 |
+
"functionality directly to your event listings."
|
1990 |
msgstr ""
|
1991 |
|
1992 |
+
#: src/Tribe/Plugins_API.php:71
|
1993 |
+
msgid ""
|
1994 |
+
"Event Tickets Plus allows you to sell tickets to your events using "
|
1995 |
+
"WooCommerce, Easy Digital Downloads, or our built in Tribe Commerce tool. "
|
1996 |
+
"Add tickets to your posts and pages, or add %1$sThe Events Calendar%2$s and "
|
1997 |
+
"sell tickets from your event listings. Create custom registration forms, "
|
1998 |
+
"manage attendees, use custom capacity options, and more. Guest check in is "
|
1999 |
+
"easy with QR codes and our custom scanning app."
|
2000 |
msgstr ""
|
2001 |
|
2002 |
+
#: src/Tribe/Plugins_API.php:80 src/Tribe/Promoter/PUE.php:28
|
2003 |
#: src/views/promoter/auth.php:30 src/views/promoter/auth.php:74
|
2004 |
msgid "Promoter"
|
2005 |
msgstr ""
|
2006 |
|
2007 |
+
#: src/Tribe/Plugins_API.php:84
|
2008 |
+
msgid ""
|
2009 |
+
"With Promoter, you’ll connect with your community via email through every "
|
2010 |
+
"stage of your event, bolster event attendance, and manage notifications more "
|
2011 |
+
"efficiently than ever. Increase event attendance and engagement by "
|
2012 |
+
"automatically sending reminders for on-sale dates, event times and more."
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2013 |
msgstr ""
|
2014 |
|
2015 |
+
#: src/Tribe/Plugins_API.php:94
|
2016 |
+
msgid ""
|
2017 |
+
"It is awesome that your calendar is <em>THE PLACE</em> to get hooked up with "
|
2018 |
+
"prime choice ways to spend time. You have more events than Jabba the Hutt "
|
2019 |
+
"has rolls. Too bad visitors are hiring a personal assistant to go through "
|
2020 |
+
"all the choices. Ever wish you could just filter the calendar to only show "
|
2021 |
+
"events in walking distance, on a weekend, that are free? BOOM. Now you can. "
|
2022 |
+
"Introducing… the Filter Bar."
|
2023 |
msgstr ""
|
2024 |
|
2025 |
+
#: src/Tribe/Plugins_API.php:104
|
2026 |
+
msgid ""
|
2027 |
+
"Accept user-submitted events on your site! With Community Events, you can "
|
2028 |
+
"accept public submissions or require account sign-on. Settings give you the "
|
2029 |
+
"options to save as a draft or publish automatically, enable categories and "
|
2030 |
+
"tags, and choose whether users can edit/manage their own events or simply "
|
2031 |
+
"submit. Best of all - setup is easy! Just activate, configure the options, "
|
2032 |
+
"and off you go."
|
2033 |
msgstr ""
|
2034 |
|
2035 |
+
#: src/Tribe/Plugins_API.php:114
|
2036 |
+
msgid ""
|
2037 |
+
"Enable Community Events organizers to offer tickets to their events. You can "
|
2038 |
+
"set flexible payment and fee options. They can even check-in attendees to "
|
2039 |
+
"their events! All of this managed from the front-end of your site without "
|
2040 |
+
"ever needing to grant access to your admin"
|
2041 |
msgstr ""
|
2042 |
|
2043 |
+
#: src/Tribe/Plugins_API.php:115
|
2044 |
msgctxt "Names of required plugins for Community Tickets"
|
2045 |
msgid "Event Tickets Plus and Community Events"
|
2046 |
msgstr ""
|
2047 |
|
2048 |
+
#: src/Tribe/Plugins_API.php:126
|
2049 |
+
msgid ""
|
2050 |
+
"The Eventbrite Tickets add-on allows you to create & sell tickets through "
|
2051 |
+
"The Events Calendar using the power of %1$sEventbrite%2$s. Whether you’re "
|
2052 |
+
"creating your ticket on the WordPress dashboard or importing the details of "
|
2053 |
+
"an already-existing event from %1$sEventbrite.com%2$s, this add-on brings "
|
2054 |
+
"the power of the Eventbrite API to your calendar."
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2055 |
msgstr ""
|
2056 |
|
2057 |
+
#: src/Tribe/Plugins_API.php:135
|
2058 |
msgid "Image Widget Plus"
|
2059 |
msgstr ""
|
2060 |
|
2061 |
+
#: src/Tribe/Plugins_API.php:139
|
2062 |
+
msgid ""
|
2063 |
+
"Take your image widgets to the next level with Image Widget Plus! We've "
|
2064 |
+
"taken the simple functionality of our basic Image Widget and amped it up "
|
2065 |
+
"with several popular feature requests - multiple image support, slideshow, "
|
2066 |
+
"lightbox, and random image - all backed by a full year of premium support."
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2067 |
msgstr ""
|
2068 |
|
2069 |
#: src/Tribe/Process/Queue.php:1024
|
2070 |
msgid "Every %d Minutes"
|
2071 |
msgstr ""
|
2072 |
|
|
|
|
|
|
|
|
|
2073 |
#: src/Tribe/Settings.php:177 src/Tribe/Settings.php:241
|
2074 |
#: src/Tribe/Settings.php:242
|
2075 |
msgid "Events"
|
2139 |
msgid "Display"
|
2140 |
msgstr ""
|
2141 |
|
2142 |
+
#: src/Tribe/Settings_Manager.php:254
|
2143 |
msgid "Network"
|
2144 |
msgstr ""
|
2145 |
|
2146 |
+
#: src/Tribe/Settings_Manager.php:288
|
2147 |
#: src/admin-views/tribe-options-licenses.php:57
|
2148 |
msgid "Licenses"
|
2149 |
msgstr ""
|
2150 |
|
2151 |
+
#: src/Tribe/Settings_Manager.php:318
|
2152 |
msgid "Help"
|
2153 |
msgstr ""
|
2154 |
|
2202 |
|
2203 |
#: src/Tribe/Support.php:318
|
2204 |
msgid ""
|
2205 |
+
"Yes, automatically share my system information with the Modern Tribe support "
|
2206 |
+
"team"
|
2207 |
msgstr ""
|
2208 |
|
2209 |
#: src/Tribe/Support.php:319
|
2210 |
msgid ""
|
2211 |
+
"Your system information will only be used by the Modern Tribe support team. "
|
2212 |
+
"All information is stored securely. We do not share this information with "
|
2213 |
+
"any third parties."
|
2214 |
msgstr ""
|
2215 |
|
2216 |
#: src/Tribe/Support.php:338 src/Tribe/Support.php:343
|
2217 |
msgid "Invalid Key"
|
2218 |
msgstr ""
|
2219 |
|
2220 |
+
#: src/Tribe/Support.php:371 src/Tribe/Support.php:397
|
2221 |
msgid "Permission Error"
|
2222 |
msgstr ""
|
2223 |
|
2224 |
+
#: src/Tribe/Support.php:385
|
2225 |
msgid "Unique System Info Key Generated"
|
2226 |
msgstr ""
|
2227 |
|
2337 |
msgid "Select a Country:"
|
2338 |
msgstr ""
|
2339 |
|
2340 |
+
#: src/admin-views/app-shop.php:4
|
2341 |
+
msgid "Events Add-Ons"
|
2342 |
msgstr ""
|
2343 |
|
2344 |
+
#: src/admin-views/app-shop.php:5
|
2345 |
+
msgid "Browse All Add-Ons"
|
2346 |
msgstr ""
|
2347 |
|
2348 |
+
#: src/admin-views/app-shop.php:26
|
2349 |
+
msgid "Buy This Add-On"
|
2350 |
msgstr ""
|
2351 |
|
2352 |
+
#: src/admin-views/app-shop.php:29
|
2353 |
+
msgid "Installed Add-Ons"
|
2354 |
msgstr ""
|
2355 |
|
2356 |
#: src/admin-views/app-shop.php:31
|
2357 |
+
msgid "Installed"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2358 |
msgstr ""
|
2359 |
|
2360 |
#: src/admin-views/event-log.php:21
|
2377 |
msgid "Download log"
|
2378 |
msgstr ""
|
2379 |
|
2380 |
+
#: src/admin-views/tribe-options-display.php:22
|
2381 |
msgid "Date Format Settings"
|
2382 |
msgstr ""
|
2383 |
|
2384 |
+
#: src/admin-views/tribe-options-display.php:28
|
2385 |
msgid ""
|
2386 |
"The following three fields accept the date format options available to the "
|
2387 |
"PHP %1$s function. <a href=\"%2$s\" target=\"_blank\">Learn how to make your "
|
2388 |
"own date format here</a>."
|
2389 |
msgstr ""
|
2390 |
|
2391 |
+
#: src/admin-views/tribe-options-display.php:36
|
2392 |
msgid "Compact Date Format"
|
2393 |
msgstr ""
|
2394 |
|
2395 |
+
#: src/admin-views/tribe-options-display.php:37
|
2396 |
msgid ""
|
2397 |
"Select the date format used for elements with minimal space, such as in "
|
2398 |
"datepickers."
|
2399 |
msgstr ""
|
2400 |
|
2401 |
+
#: src/admin-views/tribe-options-general.php:10
|
2402 |
msgid ""
|
2403 |
+
"Thank you for using Event Tickets! All of us at Modern Tribe sincerely "
|
2404 |
+
"appreciate your support and we're excited to see you using our plugins. "
|
2405 |
+
"Check out our handy %1$sNew User Primer%2$s to get started."
|
2406 |
msgstr ""
|
2407 |
|
2408 |
+
#: src/admin-views/tribe-options-general.php:15
|
2409 |
msgid ""
|
2410 |
"Optimize your site's event listings with %1$sThe Events Calendar%2$s, our "
|
2411 |
"free calendar plugin. Looking for additional functionality including "
|
2413 |
"our %3$spremium add-ons%4$s."
|
2414 |
msgstr ""
|
2415 |
|
2416 |
+
#: src/admin-views/tribe-options-general.php:20
|
2417 |
msgid ""
|
2418 |
"Looking for additional functionality including recurring events, custom "
|
2419 |
"meta, community events, ticket sales and more?"
|
2420 |
msgstr ""
|
2421 |
|
2422 |
+
#: src/admin-views/tribe-options-general.php:20
|
2423 |
msgid "Check out the available add-ons"
|
2424 |
msgstr ""
|
2425 |
|
2426 |
+
#: src/admin-views/tribe-options-general.php:25
|
2427 |
msgid "We hope our plugin is helping you out."
|
2428 |
msgstr ""
|
2429 |
|
2430 |
+
#: src/admin-views/tribe-options-general.php:30
|
2431 |
msgid ""
|
2432 |
+
"Are you thinking \"Wow, this plugin is amazing! I should say thanks to "
|
2433 |
+
"Modern Tribe for all their hard work.\" The greatest thanks we could ask for "
|
2434 |
+
"is recognition. Add a small text-only link at the bottom of your calendar "
|
2435 |
+
"pointing to The Events Calendar project."
|
2436 |
msgstr ""
|
2437 |
|
2438 |
+
#: src/admin-views/tribe-options-general.php:30
|
2439 |
msgid "See an example of the link"
|
2440 |
msgstr ""
|
2441 |
|
2442 |
+
#: src/admin-views/tribe-options-general.php:35
|
2443 |
msgid "Show The Events Calendar link"
|
2444 |
msgstr ""
|
2445 |
|
2446 |
+
#: src/admin-views/tribe-options-general.php:53
|
2447 |
msgid "Debug mode"
|
2448 |
msgstr ""
|
2449 |
|
2450 |
+
#: src/admin-views/tribe-options-general.php:55
|
2451 |
msgid ""
|
2452 |
"Enable this option to log debug information. By default this will log to "
|
2453 |
"your server PHP error log. If you'd like to see the log messages in your "
|
2455 |
"\" tab in the debug output."
|
2456 |
msgstr ""
|
2457 |
|
2458 |
+
#: src/admin-views/tribe-options-general.php:59
|
2459 |
msgid "Debug Bar Plugin"
|
2460 |
msgstr ""
|
2461 |
|
2462 |
#: src/admin-views/tribe-options-help.php:11
|
2463 |
msgid ""
|
2464 |
+
"Thank you for using %s! All of us at Modern Tribe sincerely appreciate your "
|
2465 |
+
"support and we’re excited to see you using our plugins."
|
2466 |
msgstr ""
|
2467 |
|
2468 |
#: src/admin-views/tribe-options-help.php:14
|
2503 |
"steps:"
|
2504 |
msgstr ""
|
2505 |
|
2506 |
+
#: src/admin-views/tribe-options-help.php:31
|
2507 |
msgid ""
|
2508 |
"%s. All of the common (and not-so-common) answers to questions we see are "
|
2509 |
"here. It’s often the fastest path to finding an answer!"
|
2510 |
msgstr ""
|
2511 |
|
2512 |
+
#: src/admin-views/tribe-options-help.php:31
|
2513 |
msgid "Check our Knowledgebase"
|
2514 |
msgstr ""
|
2515 |
|
2516 |
+
#: src/admin-views/tribe-options-help.php:32
|
2517 |
msgid ""
|
2518 |
"%s. Testing for an existing conflict is the best start for in-depth "
|
2519 |
"troubleshooting. We will often ask you to follow these steps when opening a "
|
2520 |
"new thread, so doing this ahead of time will be super helpful."
|
2521 |
msgstr ""
|
2522 |
|
2523 |
+
#: src/admin-views/tribe-options-help.php:32
|
2524 |
msgid "Test for a theme or plugin conflict"
|
2525 |
msgstr ""
|
2526 |
|
2527 |
+
#: src/admin-views/tribe-options-help.php:33
|
2528 |
msgid ""
|
2529 |
"%s. There are very few issues we haven’t seen and it’s likely another user "
|
2530 |
"has already asked your question and gotten an answer from our support staff. "
|
2532 |
"for anyone to search and review."
|
2533 |
msgstr ""
|
2534 |
|
2535 |
+
#: src/admin-views/tribe-options-help.php:33
|
2536 |
msgid "Search our support help desk"
|
2537 |
msgstr ""
|
2538 |
|
2539 |
+
#: src/admin-views/tribe-options-help.php:37
|
2540 |
msgid ""
|
2541 |
"Please note that all hands-on support is provided via the help desk. You can "
|
2542 |
"email or tweet at us… but we will probably point you back to the help desk 😄"
|
2543 |
msgstr ""
|
2544 |
|
2545 |
+
#: src/admin-views/tribe-options-help.php:38
|
2546 |
msgid "Read more about our support policy"
|
2547 |
msgstr ""
|
2548 |
|
2549 |
+
#: src/admin-views/tribe-options-help.php:41
|
2550 |
msgid "System Information"
|
2551 |
msgstr ""
|
2552 |
|
2553 |
+
#: src/admin-views/tribe-options-help.php:42
|
2554 |
msgid ""
|
2555 |
"The details of your calendar plugin and settings is often needed for you or "
|
2556 |
"our staff to help troubleshoot an issue. Please opt-in below to "
|
2558 |
"allow us to assist you faster if you post in our help desk."
|
2559 |
msgstr ""
|
2560 |
|
2561 |
+
#: src/admin-views/tribe-options-help.php:52
|
2562 |
msgid "Recent Template Changes"
|
2563 |
msgstr ""
|
2564 |
|
2565 |
+
#: src/admin-views/tribe-options-help.php:55
|
2566 |
msgid "Event Log"
|
2567 |
msgstr ""
|
2568 |
|
2569 |
+
#: src/admin-views/tribe-options-help.php:74
|
2570 |
msgid "News and Tutorials"
|
2571 |
msgstr ""
|
2572 |
|
2573 |
+
#: src/admin-views/tribe-options-help.php:80
|
2574 |
msgid "More..."
|
2575 |
msgstr ""
|
2576 |
|
2628 |
|
2629 |
#: src/admin-views/tribe-options-network.php:19
|
2630 |
msgid ""
|
2631 |
+
"This is where all of the global network settings for Modern Tribe's The "
|
2632 |
+
"Events Calendar can be modified."
|
2633 |
msgstr ""
|
2634 |
|
2635 |
#: src/admin-views/tribe-options-network.php:27
|
2636 |
msgid "Hide the following settings tabs on every site:"
|
2637 |
msgstr ""
|
2638 |
|
2639 |
+
#: src/functions/template-tags/html.php:70
|
2640 |
msgctxt "The associated field is required."
|
2641 |
msgid "(required)"
|
2642 |
msgstr ""
|
2694 |
msgid "An event settings framework for managing shared options"
|
2695 |
msgstr ""
|
2696 |
|
2697 |
+
#. Author of the plugin/theme
|
2698 |
+
msgid "Modern Tribe, Inc."
|
2699 |
+
msgstr ""
|
2700 |
+
|
2701 |
#. Author URI of the plugin/theme
|
2702 |
+
msgid "http://m.tri.be/1x"
|
2703 |
msgstr ""
|
2704 |
+
|
common/node_modules/mt-a11y-dialog/a11y-dialog.min.js
DELETED
@@ -1 +0,0 @@
|
|
1 |
-
!function(t){"use strict";function e(t){if(this.options=h({appendTarget:"",bodyLock:!0,closeButtonAriaLabel:"Close this dialog window",closeButtonClasses:"a11y-dialog__close-button",contentClasses:"a11y-dialog__content",effect:"none",effectSpeed:300,effectEasing:"ease-in-out",overlayClasses:"a11y-dialog__overlay",overlayClickCloses:!0,trigger:null,wrapperClasses:"a11y-dialog"},t),this._rendered=!1,this._show=this.show.bind(this),this._hide=this.hide.bind(this),this._maintainFocus=this._maintainFocus.bind(this),this._bindKeypress=this._bindKeypress.bind(this),this.trigger=a(this.options.trigger)?o(this.options.trigger,!0,document,!0):this.options.trigger,this.node=null,!this.trigger)return void console.warn("Lookup for a11y target node failed.");this._listeners={},this.create()}function i(t){var e=[],i=t.length;for(i;i--;e.unshift(t[i]));return e}function o(t,e,o,n){o||(o=document);var s=n?t:'[data-js="'+t+'"]',r=o.querySelectorAll(s);return e&&(r=i(r)),r}function n(t,e){return i((e||document).querySelectorAll(t))}function s(t){var e=d(t);e.length&&e[0].focus()}function r(t,e){e.parentNode.insertBefore(t,e.nextElementSibling)}function d(t){return n(p.join(","),t).filter(function(t){return!!(t.offsetWidth||t.offsetHeight||t.getClientRects().length)})}function a(t){return"[object String]"===Object.prototype.toString.call(t)}function h(t,e){return Object.keys(e).forEach(function(i){t[i]=e[i]}),t}function c(t,e){var i=d(t),o=i.indexOf(document.activeElement);e.shiftKey&&0===o?(i[i.length-1].focus(),e.preventDefault()):e.shiftKey||o!==i.length-1||(i[0].focus(),e.preventDefault())}function l(){g=b.scrollTop,document.body.classList.add("a11y-dialog__body-locked"),document.body.style.position="fixed",document.body.style.width="100%",document.body.style.marginTop="-"+g+"px"}function u(){document.body.style.marginTop="",document.body.style.position="",document.body.style.width="",b.scrollTop=g,document.body.classList.remove("a11y-dialog__body-locked")}var f,p=["a[href]","area[href]","input:not([disabled])","select:not([disabled])","textarea:not([disabled])","button:not([disabled])","iframe","object","embed","[contenteditable]",'[tabindex]:not([tabindex^="-"])'],y=function(){var t=/(android)/i.test(navigator.userAgent),e=!!window.chrome,i="undefined"!=typeof InstallTrigger,o=document.documentMode,n=!o&&!!window.StyleMedia,s=!!navigator.userAgent.match(/(iPod|iPhone|iPad)/i),r=!!navigator.userAgent.match(/(iPod|iPhone)/i),d=!!window.opera||navigator.userAgent.indexOf(" OPR/")>=0;return{android:t,chrome:e,edge:n,firefox:i,ie:o,ios:s,iosMobile:r,opera:d,safari:Object.prototype.toString.call(window.HTMLElement).indexOf("Constructor")>0||!e&&!d&&"undefined"!==window.webkitAudioContext,os:navigator.platform}}(),g=0,b=y.ie||y.firefox||y.chrome&&!y.edge?document.documentElement:document.body;e.prototype.create=function(){return this.shown=!1,this.trigger.forEach(function(t){t.addEventListener("click",this._show)}.bind(this)),this._fire("create"),this},e.prototype.render=function(t){var e=o(this.trigger[0].dataset.content)[0];if(!e)return this;var i=document.createElement("div");i.setAttribute("aria-hidden","true"),i.classList.add(this.options.wrapperClasses),i.innerHTML='<div data-js="a11y-overlay" tabindex="-1" class="'+this.options.overlayClasses+'"></div>\n <div class="'+this.options.contentClasses+'" role="dialog">\n <div role="document">\n <button data-js="a11y-close-button" class="'+this.options.closeButtonClasses+'" type="button" aria-label="'+this.options.closeButtonAriaLabel+'" ></button>\n '+e.innerHTML+" </div>\n </div>";var n=this.trigger;return this.options.appendTarget.length&&(n=document.querySelectorAll(this.options.appendTarget)[0]||this.trigger),r(i,n),this.node=i,this.overlay=o("a11y-overlay",!1,this.node)[0],this.closeButton=o("a11y-close-button",!1,this.node)[0],this.options.overlayClickCloses&&this.overlay.addEventListener("click",this._hide),this.closeButton.addEventListener("click",this._hide),this._rendered=!0,this._fire("render",t),this},e.prototype.show=function(t){return this.shown?this:(this._rendered||this.render(t),this._rendered?(this.shown=!0,this._applyOpenEffect(),this.node.setAttribute("aria-hidden","false"),this.options.bodyLock&&l(),f=document.activeElement,s(this.node),document.body.addEventListener("focus",this._maintainFocus,!0),document.addEventListener("keydown",this._bindKeypress),this._fire("show",t),this):this)},e.prototype.hide=function(t){return this.shown?(this.shown=!1,"none"===this.options.effect&&this.node.setAttribute("aria-hidden","true"),this._applyCloseEffect(),this.options.bodyLock&&u(),f&&f.focus(),document.body.removeEventListener("focus",this._maintainFocus,!0),document.removeEventListener("keydown",this._bindKeypress),this._fire("hide",t),this):this},e.prototype.destroy=function(){return this.hide(),this.trigger.forEach(function(t){t.removeEventListener("click",this._show)}.bind(this)),this._rendered&&(this.options.overlayClickCloses&&this.overlay.removeEventListener("click",this._hide),this.closeButton.removeEventListener("click",this._hide)),this._fire("destroy"),this._listeners={},this},e.prototype.on=function(t,e){return void 0===this._listeners[t]&&(this._listeners[t]=[]),this._listeners[t].push(e),this},e.prototype.off=function(t,e){var i=this._listeners[t].indexOf(e);return i>-1&&this._listeners[t].splice(i,1),this},e.prototype._fire=function(t,e){(this._listeners[t]||[]).forEach(function(t){t(this.node,e)}.bind(this))},e.prototype._bindKeypress=function(t){this.shown&&27===t.which&&(t.preventDefault(),this.hide()),this.shown&&9===t.which&&c(this.node,t)},e.prototype._maintainFocus=function(t){this.shown&&!this.node.contains(t.target)&&s(this.node)},e.prototype._applyOpenEffect=function(){var t=this;setTimeout(function(){t.node.classList.add("a11y-dialog--open")},50),"fade"===this.options.effect&&(this.node.style.opacity="0",this.node.style.transition="opacity "+this.options.effectSpeed+"ms "+this.options.effectEasing,setTimeout(function(){t.node.style.opacity="1"},50))},e.prototype._applyCloseEffect=function(){var t=this;this.node.classList.remove("a11y-dialog--open"),"fade"===this.options.effect?(this.node.style.opacity="0",setTimeout(function(){t.node.style.transition="",t.node.setAttribute("aria-hidden","true")},this.options.effectSpeed)):"css"===this.options.effect&&setTimeout(function(){t.node.setAttribute("aria-hidden","true")},this.options.effectSpeed)},"undefined"!=typeof module&&void 0!==module.exports?module.exports=e:"function"==typeof define&&define.amd?define("A11yDialog",[],function(){return e}):"object"==typeof t&&(t.A11yDialog=e)}("undefined"!=typeof global?global:window);
|
|
common/src/Tribe/Admin/Activation_Page.php
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
* Shows a welcome or update message after the plugin is installed/updated.
|
4 |
*/
|
5 |
class Tribe__Admin__Activation_Page {
|
6 |
-
protected $args =
|
7 |
public $update_slug = 'update-message-';
|
8 |
public $welcome_slug = 'welcome-message-';
|
9 |
protected $current_context = '';
|
@@ -24,8 +24,8 @@ class Tribe__Admin__Activation_Page {
|
|
24 |
* @type string $welcome_page_template
|
25 |
* }
|
26 |
*/
|
27 |
-
public function __construct( array $args =
|
28 |
-
$this->args = wp_parse_args( $args,
|
29 |
'slug' => '',
|
30 |
'activation_transient' => '',
|
31 |
'version' => '',
|
@@ -35,36 +35,14 @@ class Tribe__Admin__Activation_Page {
|
|
35 |
'update_page_template' => '',
|
36 |
'welcome_page_title' => '',
|
37 |
'welcome_page_template' => '',
|
38 |
-
|
39 |
|
40 |
-
$this->update_slug
|
41 |
$this->welcome_slug .= $this->args['slug'];
|
42 |
|
43 |
$this->hooks();
|
44 |
}
|
45 |
|
46 |
-
/**
|
47 |
-
* Determines if we are currently on the Welcome page.
|
48 |
-
*
|
49 |
-
* @since 4.12.11
|
50 |
-
*
|
51 |
-
* @return bool
|
52 |
-
*/
|
53 |
-
public function is_welcome_page() {
|
54 |
-
return isset( $_GET[ $this->welcome_slug ] );
|
55 |
-
}
|
56 |
-
|
57 |
-
/**
|
58 |
-
* Determines if we are currently on the update page.
|
59 |
-
*
|
60 |
-
* @since 4.12.11
|
61 |
-
*
|
62 |
-
* @return bool
|
63 |
-
*/
|
64 |
-
public function is_update_page() {
|
65 |
-
return isset( $_GET[ $this->update_slug ] );
|
66 |
-
}
|
67 |
-
|
68 |
/**
|
69 |
* Listen for opportunities to show update and welcome splash pages.
|
70 |
*/
|
@@ -76,11 +54,11 @@ class Tribe__Admin__Activation_Page {
|
|
76 |
return;
|
77 |
}
|
78 |
|
79 |
-
add_action( 'admin_init',
|
80 |
-
add_action( 'admin_menu',
|
81 |
|
82 |
-
add_action( 'update_plugin_complete_actions',
|
83 |
-
add_action( 'update_bulk_plugins_complete_actions',
|
84 |
}
|
85 |
|
86 |
/**
|
@@ -92,7 +70,7 @@ class Tribe__Admin__Activation_Page {
|
|
92 |
* @return array The filtered Links
|
93 |
*/
|
94 |
public function update_complete_actions( $actions, $plugin ) {
|
95 |
-
$plugins =
|
96 |
|
97 |
if ( ! empty( $_GET['plugins'] ) ) {
|
98 |
$plugins = explode( ',', esc_attr( $_GET['plugins'] ) );
|
@@ -221,7 +199,7 @@ class Tribe__Admin__Activation_Page {
|
|
221 |
* Disused since TEC PR 88 (targeting Tribe__Events__Activation_Page,
|
222 |
* which this class was derived from).
|
223 |
*
|
224 |
-
* @see https://github.com/
|
225 |
*
|
226 |
* @todo decide whether to reinstate or remove
|
227 |
*/
|
@@ -257,25 +235,12 @@ class Tribe__Admin__Activation_Page {
|
|
257 |
$this->current_context = 'welcome';
|
258 |
} elseif ( isset( $_GET[ $this->update_slug ] ) ) {
|
259 |
$this->current_context = 'update';
|
260 |
-
} else {
|
261 |
-
return;
|
262 |
}
|
263 |
|
264 |
-
$this->
|
265 |
-
|
266 |
-
|
267 |
-
|
268 |
-
|
269 |
-
/**
|
270 |
-
* Hooked to admin_body_class to add a class for the update or welcome page
|
271 |
-
*
|
272 |
-
* @param string $classes a space separated string of classes to be added to body
|
273 |
-
*
|
274 |
-
* @return string
|
275 |
-
*/
|
276 |
-
public function admin_body_class( $classes ) {
|
277 |
-
$classes .= ' tribe-' . $this->current_context;
|
278 |
-
return $classes;
|
279 |
}
|
280 |
|
281 |
/**
|
@@ -283,7 +248,7 @@ class Tribe__Admin__Activation_Page {
|
|
283 |
* in the Events > Settings slot instead, for this request only).
|
284 |
*/
|
285 |
protected function disable_default_settings_page() {
|
286 |
-
remove_action( Tribe__Settings::instance()->admin_page,
|
287 |
}
|
288 |
|
289 |
/**
|
3 |
* Shows a welcome or update message after the plugin is installed/updated.
|
4 |
*/
|
5 |
class Tribe__Admin__Activation_Page {
|
6 |
+
protected $args = array();
|
7 |
public $update_slug = 'update-message-';
|
8 |
public $welcome_slug = 'welcome-message-';
|
9 |
protected $current_context = '';
|
24 |
* @type string $welcome_page_template
|
25 |
* }
|
26 |
*/
|
27 |
+
public function __construct( array $args = array() ) {
|
28 |
+
$this->args = wp_parse_args( $args, array(
|
29 |
'slug' => '',
|
30 |
'activation_transient' => '',
|
31 |
'version' => '',
|
35 |
'update_page_template' => '',
|
36 |
'welcome_page_title' => '',
|
37 |
'welcome_page_template' => '',
|
38 |
+
) );
|
39 |
|
40 |
+
$this->update_slug .= $this->args['slug'];
|
41 |
$this->welcome_slug .= $this->args['slug'];
|
42 |
|
43 |
$this->hooks();
|
44 |
}
|
45 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
46 |
/**
|
47 |
* Listen for opportunities to show update and welcome splash pages.
|
48 |
*/
|
54 |
return;
|
55 |
}
|
56 |
|
57 |
+
add_action( 'admin_init', array( $this, 'maybe_redirect' ), 10, 0 );
|
58 |
+
add_action( 'admin_menu', array( $this, 'register_page' ), 100, 0 ); // come in after the default page is registered
|
59 |
|
60 |
+
add_action( 'update_plugin_complete_actions', array( $this, 'update_complete_actions' ), 15, 2 );
|
61 |
+
add_action( 'update_bulk_plugins_complete_actions', array( $this, 'update_complete_actions' ), 15, 2 );
|
62 |
}
|
63 |
|
64 |
/**
|
70 |
* @return array The filtered Links
|
71 |
*/
|
72 |
public function update_complete_actions( $actions, $plugin ) {
|
73 |
+
$plugins = array();
|
74 |
|
75 |
if ( ! empty( $_GET['plugins'] ) ) {
|
76 |
$plugins = explode( ',', esc_attr( $_GET['plugins'] ) );
|
199 |
* Disused since TEC PR 88 (targeting Tribe__Events__Activation_Page,
|
200 |
* which this class was derived from).
|
201 |
*
|
202 |
+
* @see https://github.com/moderntribe/the-events-calendar/pull/88
|
203 |
*
|
204 |
* @todo decide whether to reinstate or remove
|
205 |
*/
|
235 |
$this->current_context = 'welcome';
|
236 |
} elseif ( isset( $_GET[ $this->update_slug ] ) ) {
|
237 |
$this->current_context = 'update';
|
|
|
|
|
238 |
}
|
239 |
|
240 |
+
if ( ! empty( $this->current_context ) ) {
|
241 |
+
$this->disable_default_settings_page();
|
242 |
+
add_action( Tribe__Settings::instance()->admin_page, array( $this, 'display_page' ) );
|
243 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
244 |
}
|
245 |
|
246 |
/**
|
248 |
* in the Events > Settings slot instead, for this request only).
|
249 |
*/
|
250 |
protected function disable_default_settings_page() {
|
251 |
+
remove_action( Tribe__Settings::instance()->admin_page, array( Tribe__Settings::instance(), 'generatePage' ) );
|
252 |
}
|
253 |
|
254 |
/**
|
common/src/Tribe/Admin/Help_Page.php
CHANGED
@@ -72,59 +72,50 @@ class Tribe__Admin__Help_Page {
|
|
72 |
* @return array
|
73 |
*/
|
74 |
public function get_plugins( $plugin_name = null, $is_active = true ) {
|
75 |
-
$plugins =
|
76 |
|
77 |
-
$plugins['the-events-calendar'] =
|
78 |
'name' => 'the-events-calendar',
|
79 |
'title' => esc_html__( 'The Events Calendar', 'tribe-common' ),
|
80 |
'repo' => 'https://wordpress.org/plugins/the-events-calendar/',
|
81 |
'forum' => 'https://wordpress.org/support/plugin/the-events-calendar/',
|
82 |
'stars_url' => 'https://wordpress.org/support/plugin/the-events-calendar/reviews/?filter=5',
|
83 |
-
'description' => esc_html__(
|
84 |
-
'The Events Calendar is a carefully crafted, extensible plugin that lets you easily share your events.',
|
85 |
-
'tribe-common'
|
86 |
-
),
|
87 |
'is_active' => false,
|
88 |
'version' => null,
|
89 |
-
|
90 |
|
91 |
if ( class_exists( 'Tribe__Events__Main' ) ) {
|
92 |
$plugins['the-events-calendar']['version'] = Tribe__Events__Main::VERSION;
|
93 |
$plugins['the-events-calendar']['is_active'] = true;
|
94 |
}
|
95 |
|
96 |
-
$plugins['event-tickets'] =
|
97 |
'name' => 'event-tickets',
|
98 |
'title' => esc_html__( 'Event Tickets', 'tribe-common' ),
|
99 |
'repo' => 'https://wordpress.org/plugins/event-tickets/',
|
100 |
'forum' => 'https://wordpress.org/support/plugin/event-tickets',
|
101 |
'stars_url' => 'https://wordpress.org/support/plugin/event-tickets/reviews/?filter=5',
|
102 |
-
'description' => esc_html__(
|
103 |
-
'Events Tickets is a carefully crafted, extensible plugin that lets you easily sell tickets for your events.',
|
104 |
-
'tribe-common'
|
105 |
-
),
|
106 |
'is_active' => false,
|
107 |
'version' => null,
|
108 |
-
|
109 |
|
110 |
if ( class_exists( 'Tribe__Tickets__Main' ) ) {
|
111 |
$plugins['event-tickets']['version'] = Tribe__Tickets__Main::VERSION;
|
112 |
$plugins['event-tickets']['is_active'] = true;
|
113 |
}
|
114 |
|
115 |
-
$plugins['advanced-post-manager'] =
|
116 |
'name' => 'advanced-post-manager',
|
117 |
'title' => esc_html__( 'Advanced Post Manager', 'tribe-common' ),
|
118 |
'repo' => 'https://wordpress.org/plugins/advanced-post-manager/',
|
119 |
'forum' => 'https://wordpress.org/support/plugin/advanced-post-manager/',
|
120 |
'stars_url' => 'https://wordpress.org/support/plugin/advanced-post-manager/reviews/?filter=5',
|
121 |
-
'description' => esc_html__(
|
122 |
-
'Turbo charge your posts admin for any custom post type with sortable filters and columns, and auto-registration of metaboxes.',
|
123 |
-
'tribe-common'
|
124 |
-
),
|
125 |
'is_active' => false,
|
126 |
'version' => null,
|
127 |
-
|
128 |
|
129 |
if ( class_exists( 'Tribe_APM' ) ) {
|
130 |
$plugins['advanced-post-manager']['version'] = 1;
|
@@ -165,7 +156,7 @@ class Tribe__Admin__Help_Page {
|
|
165 |
public function get_plugin_forum_links( $is_active = true ) {
|
166 |
$plugins = $this->get_plugins( null, $is_active );
|
167 |
|
168 |
-
$list =
|
169 |
foreach ( $plugins as $plugin ) {
|
170 |
$list[] = '<a href="' . esc_url( $plugin['forum'] ) . '" target="_blank">' . $plugin['title'] . '</a>';
|
171 |
}
|
@@ -216,75 +207,65 @@ class Tribe__Admin__Help_Page {
|
|
216 |
* @return array
|
217 |
*/
|
218 |
public function get_addons( $plugin = null, $is_active = null, $is_important = null ) {
|
219 |
-
$addons =
|
220 |
-
|
221 |
-
$addons['events-calendar-pro'] =
|
222 |
-
'id'
|
223 |
-
'title'
|
224 |
-
'link'
|
225 |
-
'plugin'
|
226 |
-
'is_active'
|
227 |
'is_important' => true,
|
228 |
-
|
229 |
|
230 |
-
$addons['eventbrite-tickets'] =
|
231 |
'id' => 'eventbrite-tickets',
|
232 |
'title' => esc_html__( 'Eventbrite Tickets', 'tribe-common' ),
|
233 |
-
'link' => 'http://
|
234 |
-
'plugin' =>
|
235 |
'is_active' => class_exists( 'Tribe__Events__Tickets__Eventbrite__Main' ),
|
236 |
-
|
237 |
|
238 |
-
$addons['community-events'] =
|
239 |
'id' => 'community-events',
|
240 |
'title' => esc_html__( 'Community Events', 'tribe-common' ),
|
241 |
-
'link' => 'http://
|
242 |
-
'plugin' =>
|
243 |
'is_active' => class_exists( 'Tribe__Events__Community__Main' ),
|
244 |
-
|
245 |
|
246 |
-
$addons['event-aggregator'] =
|
247 |
'id' => 'event-aggregator',
|
248 |
'title' => esc_html__( 'Event Aggregator', 'tribe-common' ),
|
249 |
-
'link' => 'http://
|
250 |
-
'plugin' =>
|
251 |
-
'is_active' => class_exists( 'Tribe__Events__Aggregator' ) && tribe(
|
252 |
-
|
253 |
-
|
254 |
-
]
|
255 |
-
|
256 |
-
$addons['events-filter-bar'] = [
|
257 |
'id' => 'events-filter-bar',
|
258 |
'title' => esc_html__( 'Filter Bar', 'tribe-common' ),
|
259 |
-
'link' => 'http://
|
260 |
-
'plugin' =>
|
261 |
'is_active' => class_exists( 'Tribe__Events__Filterbar__View' ),
|
262 |
-
|
263 |
-
|
264 |
-
$addons['
|
265 |
-
'id' => '
|
266 |
-
'title' => esc_html__( '
|
267 |
-
'link' => 'http://
|
268 |
-
'plugin' =>
|
269 |
-
'is_active' => class_exists( '
|
270 |
-
];
|
271 |
-
|
272 |
-
$addons['event-tickets-plus'] = [
|
273 |
-
'id' => 'event-tickets-plus',
|
274 |
-
'title' => esc_html__( 'Event Tickets Plus', 'tribe-common' ),
|
275 |
-
'link' => 'http://evnt.is/18wa',
|
276 |
-
'plugin' => [ 'event-tickets' ],
|
277 |
-
'is_active' => class_exists( 'Tribe__Tickets_Plus__Main' ),
|
278 |
'is_important' => true,
|
279 |
-
|
280 |
|
281 |
-
$addons['event-community-tickets'] =
|
282 |
'id' => 'event-community-tickets',
|
283 |
'title' => esc_html__( 'Community Tickets', 'tribe-common' ),
|
284 |
-
'link' => 'http://
|
285 |
-
'plugin' =>
|
286 |
'is_active' => class_exists( 'Tribe__Events__Community__Tickets__Main' ),
|
287 |
-
|
288 |
|
289 |
/**
|
290 |
* Filter the array of premium addons upsold on the sidebar of the Settings > Help tab
|
@@ -299,7 +280,7 @@ class Tribe__Admin__Help_Page {
|
|
299 |
}
|
300 |
|
301 |
// Allow for easily grab the addons for a plugin
|
302 |
-
$filtered =
|
303 |
foreach ( $addons as $id => $addon ) {
|
304 |
if ( ! is_null( $plugin ) && ! in_array( $plugin, (array) $addon['plugin'] ) ) {
|
305 |
continue;
|
@@ -329,10 +310,10 @@ class Tribe__Admin__Help_Page {
|
|
329 |
|
330 |
public function is_active( $should_be_active ) {
|
331 |
$plugins = $this->get_plugins( null, true );
|
332 |
-
$addons
|
333 |
|
334 |
-
$actives
|
335 |
-
$is_active =
|
336 |
|
337 |
foreach ( $actives as $id => $active ) {
|
338 |
if ( in_array( $id, (array) $should_be_active ) ) {
|
@@ -353,11 +334,11 @@ class Tribe__Admin__Help_Page {
|
|
353 |
* @return string Link with the GA arguments
|
354 |
*/
|
355 |
public function get_ga_link( $link = null, $relative = true ) {
|
356 |
-
$query_args =
|
357 |
'utm_source' => 'helptab',
|
358 |
'utm_medium' => 'plugin-tec',
|
359 |
'utm_campaign' => 'in-app',
|
360 |
-
|
361 |
|
362 |
if ( true === $relative ) {
|
363 |
$link = trailingslashit( Tribe__Main::$tec_url . $link );
|
@@ -367,15 +348,15 @@ class Tribe__Admin__Help_Page {
|
|
367 |
}
|
368 |
|
369 |
/**
|
370 |
-
* Gets the Feed items from The Events Calendar
|
371 |
*
|
372 |
* @since 4.0
|
373 |
*
|
374 |
* @return array Feed Title and Link
|
375 |
*/
|
376 |
public function get_feed_items() {
|
377 |
-
$news_rss
|
378 |
-
$news_feed =
|
379 |
|
380 |
if ( ! is_wp_error( $news_rss ) ) {
|
381 |
/**
|
@@ -387,10 +368,10 @@ class Tribe__Admin__Help_Page {
|
|
387 |
$rss_items = $news_rss->get_items( 0, $maxitems );
|
388 |
if ( $maxitems > 0 ) {
|
389 |
foreach ( $rss_items as $item ) {
|
390 |
-
$item
|
391 |
'title' => esc_html( $item->get_title() ),
|
392 |
'link' => esc_url( $item->get_permalink() ),
|
393 |
-
|
394 |
$news_feed[] = $item;
|
395 |
}
|
396 |
}
|
@@ -428,16 +409,16 @@ class Tribe__Admin__Help_Page {
|
|
428 |
}
|
429 |
|
430 |
// Fetch the data
|
431 |
-
$data = plugins_api( 'plugin_information',
|
432 |
-
|
433 |
-
|
434 |
-
|
435 |
-
|
436 |
-
|
437 |
-
|
438 |
-
|
439 |
-
|
440 |
-
|
441 |
|
442 |
if ( ! is_wp_error( $data ) ) {
|
443 |
// Format Downloaded Infomation
|
@@ -498,13 +479,13 @@ class Tribe__Admin__Help_Page {
|
|
498 |
}
|
499 |
|
500 |
// Only add List Item if is a UL or OL
|
501 |
-
if ( in_array( $line['type'],
|
502 |
$text .= '<li>' . "\n";
|
503 |
}
|
504 |
|
505 |
$text .= $this->get_content_html( $item );
|
506 |
|
507 |
-
if ( in_array( $line['type'],
|
508 |
$text .= '</li>' . "\n";
|
509 |
}
|
510 |
}
|
@@ -526,7 +507,7 @@ class Tribe__Admin__Help_Page {
|
|
526 |
* @access private
|
527 |
* @var array
|
528 |
*/
|
529 |
-
private $sections =
|
530 |
|
531 |
/**
|
532 |
* Incremented with each method call, then stored in $section->uid.
|
@@ -584,7 +565,7 @@ class Tribe__Admin__Help_Page {
|
|
584 |
// Everytime you call this we will add this up
|
585 |
self::$section_count++;
|
586 |
|
587 |
-
$possible_types = (array) apply_filters( 'tribe_help_available_section_types',
|
588 |
|
589 |
// Set a Default type
|
590 |
if ( empty( $type ) || ! in_array( $type, $possible_types ) ) {
|
@@ -592,21 +573,21 @@ class Tribe__Admin__Help_Page {
|
|
592 |
}
|
593 |
|
594 |
// Create the section and Sanitize the values to avoid having to do it later
|
595 |
-
$section = (object)
|
596 |
-
|
597 |
-
|
598 |
-
|
599 |
-
|
600 |
|
601 |
-
|
602 |
-
|
603 |
|
604 |
-
|
605 |
-
|
606 |
|
607 |
-
|
608 |
-
|
609 |
-
|
610 |
|
611 |
$this->sections[ $section->id ] = $section;
|
612 |
|
@@ -625,7 +606,7 @@ class Tribe__Admin__Help_Page {
|
|
625 |
*
|
626 |
* @return object The content item added
|
627 |
*/
|
628 |
-
public function add_section_content( $section_id, $content, $priority = 10, $arguments =
|
629 |
$section_id = sanitize_html_class( $section_id );
|
630 |
|
631 |
// Check if the section exists
|
@@ -670,13 +651,13 @@ class Tribe__Admin__Help_Page {
|
|
670 |
public function remove_section( $section_id ) {
|
671 |
if (
|
672 |
! isset( $this->sections[ $section_id ] ) &&
|
673 |
-
! in_array( (object)
|
674 |
) {
|
675 |
// There are no sections to remove, so false
|
676 |
return false;
|
677 |
}
|
678 |
|
679 |
-
$removed =
|
680 |
foreach ( $this->sections as $id => $section ) {
|
681 |
if ( ! is_numeric( $id ) && ! is_numeric( $section_id ) && ! empty( $section->id ) ) {
|
682 |
if ( $section->id === $section_id ) {
|
@@ -730,9 +711,9 @@ class Tribe__Admin__Help_Page {
|
|
730 |
}
|
731 |
|
732 |
// Sort by Priority
|
733 |
-
uasort( $sections,
|
734 |
|
735 |
-
$html =
|
736 |
|
737 |
foreach ( $sections as $index => $section ) {
|
738 |
$section = (object) $section;
|
@@ -755,7 +736,7 @@ class Tribe__Admin__Help_Page {
|
|
755 |
$section = apply_filters( 'tribe_help_section_' . $section->id, $section, $this );
|
756 |
|
757 |
// Sort by Priority
|
758 |
-
uasort( $section->content,
|
759 |
|
760 |
$html[ $section->id . '-start' ] = '<div id="tribe-' . sanitize_html_class( $section->id ) . '" class="tribe-help-section clearfix tribe-section-type-' . sanitize_html_class( $section->type ) . '">';
|
761 |
|
@@ -806,20 +787,20 @@ class Tribe__Admin__Help_Page {
|
|
806 |
$plugin_exists = isset( $plugins[ $status['file'] ] );
|
807 |
|
808 |
if ( 'install' !== $status['status'] && ! $plugin_active ) {
|
809 |
-
$args =
|
810 |
-
'action'
|
811 |
-
'plugin'
|
812 |
'plugin_status' => 'all',
|
813 |
-
'paged'
|
814 |
-
's'
|
815 |
-
|
816 |
$activate_url = wp_nonce_url( add_query_arg( $args, 'plugins.php' ), 'activate-plugin_' . $status['file'] );
|
817 |
$link = '<a class="button" href="' . $activate_url . '" aria-label="' . esc_attr( sprintf( esc_attr__( 'Activate %s', 'tribe-common' ), $plugin->name ) ) . '">' . esc_html__( 'Activate Plugin', 'tribe-common' ) . '</a>';
|
818 |
} elseif ( 'update_available' === $status['status'] ) {
|
819 |
-
$args =
|
820 |
'action' => 'upgrade-plugin',
|
821 |
'plugin' => $status['file'],
|
822 |
-
|
823 |
$update_url = wp_nonce_url( add_query_arg( $args, 'update.php' ), 'upgrade-plugin_' . $status['file'] );
|
824 |
|
825 |
$link = '<a class="button" href="' . $update_url . '">' . esc_html__( 'Upgrade Plugin', 'tribe-common' ) . '</a>';
|
@@ -830,13 +811,13 @@ class Tribe__Admin__Help_Page {
|
|
830 |
|
831 |
if ( ! isset( $link ) ) {
|
832 |
if ( $api_data ) {
|
833 |
-
$args =
|
834 |
'tab' => 'plugin-information',
|
835 |
'plugin' => $plugin->name,
|
836 |
'TB_iframe' => true,
|
837 |
'width' => 772,
|
838 |
'height' => 600,
|
839 |
-
|
840 |
$iframe_url = add_query_arg( $args, admin_url( '/plugin-install.php' ) );
|
841 |
$link = '<a class="button thickbox" href="' . $iframe_url . '" aria-label="' . esc_attr( sprintf( esc_attr__( 'Install %s', 'tribe-common' ), $plugin->name ) ) . '">' . esc_html__( 'Install Plugin', 'tribe-common' ) . '</a>';
|
842 |
} else {
|
@@ -865,17 +846,13 @@ class Tribe__Admin__Help_Page {
|
|
865 |
<dd><?php echo esc_html( number_format( $api_data->active_installs ) ); ?>+</dd>
|
866 |
|
867 |
<dt><?php esc_html_e( 'Rating:', 'tribe-common' ); ?></dt>
|
868 |
-
<dd>
|
869 |
-
|
870 |
-
|
871 |
-
|
872 |
-
|
873 |
-
|
874 |
-
|
875 |
-
] );
|
876 |
-
?>
|
877 |
-
</a>
|
878 |
-
</dd>
|
879 |
</dl>
|
880 |
<?php } ?>
|
881 |
|
72 |
* @return array
|
73 |
*/
|
74 |
public function get_plugins( $plugin_name = null, $is_active = true ) {
|
75 |
+
$plugins = array();
|
76 |
|
77 |
+
$plugins['the-events-calendar'] = array(
|
78 |
'name' => 'the-events-calendar',
|
79 |
'title' => esc_html__( 'The Events Calendar', 'tribe-common' ),
|
80 |
'repo' => 'https://wordpress.org/plugins/the-events-calendar/',
|
81 |
'forum' => 'https://wordpress.org/support/plugin/the-events-calendar/',
|
82 |
'stars_url' => 'https://wordpress.org/support/plugin/the-events-calendar/reviews/?filter=5',
|
83 |
+
'description' => esc_html__( 'The Events Calendar is a carefully crafted, extensible plugin that lets you easily share your events.', 'tribe-common' ),
|
|
|
|
|
|
|
84 |
'is_active' => false,
|
85 |
'version' => null,
|
86 |
+
);
|
87 |
|
88 |
if ( class_exists( 'Tribe__Events__Main' ) ) {
|
89 |
$plugins['the-events-calendar']['version'] = Tribe__Events__Main::VERSION;
|
90 |
$plugins['the-events-calendar']['is_active'] = true;
|
91 |
}
|
92 |
|
93 |
+
$plugins['event-tickets'] = array(
|
94 |
'name' => 'event-tickets',
|
95 |
'title' => esc_html__( 'Event Tickets', 'tribe-common' ),
|
96 |
'repo' => 'https://wordpress.org/plugins/event-tickets/',
|
97 |
'forum' => 'https://wordpress.org/support/plugin/event-tickets',
|
98 |
'stars_url' => 'https://wordpress.org/support/plugin/event-tickets/reviews/?filter=5',
|
99 |
+
'description' => esc_html__( 'Events Tickets is a carefully crafted, extensible plugin that lets you easily sell tickets for your events.', 'tribe-common' ),
|
|
|
|
|
|
|
100 |
'is_active' => false,
|
101 |
'version' => null,
|
102 |
+
);
|
103 |
|
104 |
if ( class_exists( 'Tribe__Tickets__Main' ) ) {
|
105 |
$plugins['event-tickets']['version'] = Tribe__Tickets__Main::VERSION;
|
106 |
$plugins['event-tickets']['is_active'] = true;
|
107 |
}
|
108 |
|
109 |
+
$plugins['advanced-post-manager'] = array(
|
110 |
'name' => 'advanced-post-manager',
|
111 |
'title' => esc_html__( 'Advanced Post Manager', 'tribe-common' ),
|
112 |
'repo' => 'https://wordpress.org/plugins/advanced-post-manager/',
|
113 |
'forum' => 'https://wordpress.org/support/plugin/advanced-post-manager/',
|
114 |
'stars_url' => 'https://wordpress.org/support/plugin/advanced-post-manager/reviews/?filter=5',
|
115 |
+
'description' => esc_html__( 'Turbo charge your posts admin for any custom post type with sortable filters and columns, and auto-registration of metaboxes.', 'tribe-common' ),
|
|
|
|
|
|
|
116 |
'is_active' => false,
|
117 |
'version' => null,
|
118 |
+
);
|
119 |
|
120 |
if ( class_exists( 'Tribe_APM' ) ) {
|
121 |
$plugins['advanced-post-manager']['version'] = 1;
|
156 |
public function get_plugin_forum_links( $is_active = true ) {
|
157 |
$plugins = $this->get_plugins( null, $is_active );
|
158 |
|
159 |
+
$list = array();
|
160 |
foreach ( $plugins as $plugin ) {
|
161 |
$list[] = '<a href="' . esc_url( $plugin['forum'] ) . '" target="_blank">' . $plugin['title'] . '</a>';
|
162 |
}
|
207 |
* @return array
|
208 |
*/
|
209 |
public function get_addons( $plugin = null, $is_active = null, $is_important = null ) {
|
210 |
+
$addons = array();
|
211 |
+
|
212 |
+
$addons['events-calendar-pro'] = array(
|
213 |
+
'id' => 'events-calendar-pro',
|
214 |
+
'title' => esc_html__( 'Events Calendar PRO', 'tribe-common' ),
|
215 |
+
'link' => 'http://m.tri.be/dr',
|
216 |
+
'plugin' => array( 'the-events-calendar' ),
|
217 |
+
'is_active' => class_exists( 'Tribe__Events__Pro__Main' ),
|
218 |
'is_important' => true,
|
219 |
+
);
|
220 |
|
221 |
+
$addons['eventbrite-tickets'] = array(
|
222 |
'id' => 'eventbrite-tickets',
|
223 |
'title' => esc_html__( 'Eventbrite Tickets', 'tribe-common' ),
|
224 |
+
'link' => 'http://m.tri.be/ds',
|
225 |
+
'plugin' => array( 'the-events-calendar' ),
|
226 |
'is_active' => class_exists( 'Tribe__Events__Tickets__Eventbrite__Main' ),
|
227 |
+
);
|
228 |
|
229 |
+
$addons['community-events'] = array(
|
230 |
'id' => 'community-events',
|
231 |
'title' => esc_html__( 'Community Events', 'tribe-common' ),
|
232 |
+
'link' => 'http://m.tri.be/dt',
|
233 |
+
'plugin' => array( 'the-events-calendar' ),
|
234 |
'is_active' => class_exists( 'Tribe__Events__Community__Main' ),
|
235 |
+
);
|
236 |
|
237 |
+
$addons['event-aggregator'] = array(
|
238 |
'id' => 'event-aggregator',
|
239 |
'title' => esc_html__( 'Event Aggregator', 'tribe-common' ),
|
240 |
+
'link' => 'http://m.tri.be/19mk',
|
241 |
+
'plugin' => array( 'the-events-calendar' ),
|
242 |
+
'is_active' => class_exists( 'Tribe__Events__Aggregator' ) && tribe( 'events-aggregator.main' )->is_service_active(),
|
243 |
+
);
|
244 |
+
|
245 |
+
$addons['events-filter-bar'] = array(
|
|
|
|
|
246 |
'id' => 'events-filter-bar',
|
247 |
'title' => esc_html__( 'Filter Bar', 'tribe-common' ),
|
248 |
+
'link' => 'http://m.tri.be/hu',
|
249 |
+
'plugin' => array( 'the-events-calendar' ),
|
250 |
'is_active' => class_exists( 'Tribe__Events__Filterbar__View' ),
|
251 |
+
);
|
252 |
+
|
253 |
+
$addons['event-tickets-plus'] = array(
|
254 |
+
'id' => 'event-tickets-plus',
|
255 |
+
'title' => esc_html__( 'Event Tickets Plus', 'tribe-common' ),
|
256 |
+
'link' => 'http://m.tri.be/18wa',
|
257 |
+
'plugin' => array( 'event-tickets' ),
|
258 |
+
'is_active' => class_exists( 'Tribe__Tickets_Plus__Main' ),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
259 |
'is_important' => true,
|
260 |
+
);
|
261 |
|
262 |
+
$addons['event-community-tickets'] = array(
|
263 |
'id' => 'event-community-tickets',
|
264 |
'title' => esc_html__( 'Community Tickets', 'tribe-common' ),
|
265 |
+
'link' => 'http://m.tri.be/18m2',
|
266 |
+
'plugin' => array( 'event-tickets' ),
|
267 |
'is_active' => class_exists( 'Tribe__Events__Community__Tickets__Main' ),
|
268 |
+
);
|
269 |
|
270 |
/**
|
271 |
* Filter the array of premium addons upsold on the sidebar of the Settings > Help tab
|
280 |
}
|
281 |
|
282 |
// Allow for easily grab the addons for a plugin
|
283 |
+
$filtered = array();
|
284 |
foreach ( $addons as $id => $addon ) {
|
285 |
if ( ! is_null( $plugin ) && ! in_array( $plugin, (array) $addon['plugin'] ) ) {
|
286 |
continue;
|
310 |
|
311 |
public function is_active( $should_be_active ) {
|
312 |
$plugins = $this->get_plugins( null, true );
|
313 |
+
$addons = $this->get_addons( null, true );
|
314 |
|
315 |
+
$actives = array_merge( $plugins, $addons );
|
316 |
+
$is_active = array();
|
317 |
|
318 |
foreach ( $actives as $id => $active ) {
|
319 |
if ( in_array( $id, (array) $should_be_active ) ) {
|
334 |
* @return string Link with the GA arguments
|
335 |
*/
|
336 |
public function get_ga_link( $link = null, $relative = true ) {
|
337 |
+
$query_args = array(
|
338 |
'utm_source' => 'helptab',
|
339 |
'utm_medium' => 'plugin-tec',
|
340 |
'utm_campaign' => 'in-app',
|
341 |
+
);
|
342 |
|
343 |
if ( true === $relative ) {
|
344 |
$link = trailingslashit( Tribe__Main::$tec_url . $link );
|
348 |
}
|
349 |
|
350 |
/**
|
351 |
+
* Gets the Feed items from the The Events Calendar Blog
|
352 |
*
|
353 |
* @since 4.0
|
354 |
*
|
355 |
* @return array Feed Title and Link
|
356 |
*/
|
357 |
public function get_feed_items() {
|
358 |
+
$news_rss = fetch_feed( Tribe__Main::FEED_URL );
|
359 |
+
$news_feed = array();
|
360 |
|
361 |
if ( ! is_wp_error( $news_rss ) ) {
|
362 |
/**
|
368 |
$rss_items = $news_rss->get_items( 0, $maxitems );
|
369 |
if ( $maxitems > 0 ) {
|
370 |
foreach ( $rss_items as $item ) {
|
371 |
+
$item = array(
|
372 |
'title' => esc_html( $item->get_title() ),
|
373 |
'link' => esc_url( $item->get_permalink() ),
|
374 |
+
);
|
375 |
$news_feed[] = $item;
|
376 |
}
|
377 |
}
|
409 |
}
|
410 |
|
411 |
// Fetch the data
|
412 |
+
$data = plugins_api( 'plugin_information', array(
|
413 |
+
'slug' => $plugin->name,
|
414 |
+
'is_ssl' => is_ssl(),
|
415 |
+
'fields' => array(
|
416 |
+
'banners' => true,
|
417 |
+
'reviews' => true,
|
418 |
+
'downloaded' => true,
|
419 |
+
'active_installs' => true,
|
420 |
+
),
|
421 |
+
) );
|
422 |
|
423 |
if ( ! is_wp_error( $data ) ) {
|
424 |
// Format Downloaded Infomation
|
479 |
}
|
480 |
|
481 |
// Only add List Item if is a UL or OL
|
482 |
+
if ( in_array( $line['type'], array( 'ul', 'ol' ) ) ) {
|
483 |
$text .= '<li>' . "\n";
|
484 |
}
|
485 |
|
486 |
$text .= $this->get_content_html( $item );
|
487 |
|
488 |
+
if ( in_array( $line['type'], array( 'ul', 'ol' ) ) ) {
|
489 |
$text .= '</li>' . "\n";
|
490 |
}
|
491 |
}
|
507 |
* @access private
|
508 |
* @var array
|
509 |
*/
|
510 |
+
private $sections = array();
|
511 |
|
512 |
/**
|
513 |
* Incremented with each method call, then stored in $section->uid.
|
565 |
// Everytime you call this we will add this up
|
566 |
self::$section_count++;
|
567 |
|
568 |
+
$possible_types = (array) apply_filters( 'tribe_help_available_section_types', array( 'default', 'box' ) );
|
569 |
|
570 |
// Set a Default type
|
571 |
if ( empty( $type ) || ! in_array( $type, $possible_types ) ) {
|
573 |
}
|
574 |
|
575 |
// Create the section and Sanitize the values to avoid having to do it later
|
576 |
+
$section = (object) array(
|
577 |
+
'id' => sanitize_html_class( $id ),
|
578 |
+
'title' => esc_html( $title ),
|
579 |
+
'priority' => absint( $priority ),
|
580 |
+
'type' => sanitize_html_class( $type ),
|
581 |
|
582 |
+
// This Method Unique count integer used for ordering with priority
|
583 |
+
'unique_call_order' => self::$section_count,
|
584 |
|
585 |
+
// Counter for ordering Content
|
586 |
+
'content_count' => 0,
|
587 |
|
588 |
+
// Setup the Base for the content to come
|
589 |
+
'content' => array(),
|
590 |
+
);
|
591 |
|
592 |
$this->sections[ $section->id ] = $section;
|
593 |
|
606 |
*
|
607 |
* @return object The content item added
|
608 |
*/
|
609 |
+
public function add_section_content( $section_id, $content, $priority = 10, $arguments = array() ) {
|
610 |
$section_id = sanitize_html_class( $section_id );
|
611 |
|
612 |
// Check if the section exists
|
651 |
public function remove_section( $section_id ) {
|
652 |
if (
|
653 |
! isset( $this->sections[ $section_id ] ) &&
|
654 |
+
! in_array( (object) array( 'id' => $section_id ), $this->sections, true )
|
655 |
) {
|
656 |
// There are no sections to remove, so false
|
657 |
return false;
|
658 |
}
|
659 |
|
660 |
+
$removed = array();
|
661 |
foreach ( $this->sections as $id => $section ) {
|
662 |
if ( ! is_numeric( $id ) && ! is_numeric( $section_id ) && ! empty( $section->id ) ) {
|
663 |
if ( $section->id === $section_id ) {
|
711 |
}
|
712 |
|
713 |
// Sort by Priority
|
714 |
+
uasort( $sections, array( $this, 'by_priority' ) );
|
715 |
|
716 |
+
$html = array();
|
717 |
|
718 |
foreach ( $sections as $index => $section ) {
|
719 |
$section = (object) $section;
|
736 |
$section = apply_filters( 'tribe_help_section_' . $section->id, $section, $this );
|
737 |
|
738 |
// Sort by Priority
|
739 |
+
uasort( $section->content, array( $this, 'by_priority' ) );
|
740 |
|
741 |
$html[ $section->id . '-start' ] = '<div id="tribe-' . sanitize_html_class( $section->id ) . '" class="tribe-help-section clearfix tribe-section-type-' . sanitize_html_class( $section->type ) . '">';
|
742 |
|
787 |
$plugin_exists = isset( $plugins[ $status['file'] ] );
|
788 |
|
789 |
if ( 'install' !== $status['status'] && ! $plugin_active ) {
|
790 |
+
$args = array(
|
791 |
+
'action' => 'activate',
|
792 |
+
'plugin' => $status['file'],
|
793 |
'plugin_status' => 'all',
|
794 |
+
'paged' => 1,
|
795 |
+
's' => '',
|
796 |
+
);
|
797 |
$activate_url = wp_nonce_url( add_query_arg( $args, 'plugins.php' ), 'activate-plugin_' . $status['file'] );
|
798 |
$link = '<a class="button" href="' . $activate_url . '" aria-label="' . esc_attr( sprintf( esc_attr__( 'Activate %s', 'tribe-common' ), $plugin->name ) ) . '">' . esc_html__( 'Activate Plugin', 'tribe-common' ) . '</a>';
|
799 |
} elseif ( 'update_available' === $status['status'] ) {
|
800 |
+
$args = array(
|
801 |
'action' => 'upgrade-plugin',
|
802 |
'plugin' => $status['file'],
|
803 |
+
);
|
804 |
$update_url = wp_nonce_url( add_query_arg( $args, 'update.php' ), 'upgrade-plugin_' . $status['file'] );
|
805 |
|
806 |
$link = '<a class="button" href="' . $update_url . '">' . esc_html__( 'Upgrade Plugin', 'tribe-common' ) . '</a>';
|
811 |
|
812 |
if ( ! isset( $link ) ) {
|
813 |
if ( $api_data ) {
|
814 |
+
$args = array(
|
815 |
'tab' => 'plugin-information',
|
816 |
'plugin' => $plugin->name,
|
817 |
'TB_iframe' => true,
|
818 |
'width' => 772,
|
819 |
'height' => 600,
|
820 |
+
);
|
821 |
$iframe_url = add_query_arg( $args, admin_url( '/plugin-install.php' ) );
|
822 |
$link = '<a class="button thickbox" href="' . $iframe_url . '" aria-label="' . esc_attr( sprintf( esc_attr__( 'Install %s', 'tribe-common' ), $plugin->name ) ) . '">' . esc_html__( 'Install Plugin', 'tribe-common' ) . '</a>';
|
823 |
} else {
|
846 |
<dd><?php echo esc_html( number_format( $api_data->active_installs ) ); ?>+</dd>
|
847 |
|
848 |
<dt><?php esc_html_e( 'Rating:', 'tribe-common' ); ?></dt>
|
849 |
+
<dd><a href="<?php echo esc_url( $plugin->stars_url ); ?>" target="_blank">
|
850 |
+
<?php wp_star_rating( array(
|
851 |
+
'rating' => $api_data->rating,
|
852 |
+
'type' => 'percent',
|
853 |
+
'number' => $api_data->num_ratings,
|
854 |
+
) );?>
|
855 |
+
</a></dd>
|
|
|
|
|
|
|
|
|
856 |
</dl>
|
857 |
<?php } ?>
|
858 |
|
common/src/Tribe/Admin/Live_Date_Preview.php
CHANGED
@@ -3,12 +3,12 @@
|
|
3 |
* Facilitiates live date previews in the Events > Settings > Display admin screen.
|
4 |
*/
|
5 |
class Tribe__Admin__Live_Date_Preview {
|
6 |
-
protected $target_fields =
|
7 |
'dateWithYearFormat',
|
8 |
'dateWithoutYearFormat',
|
9 |
'monthAndYearFormat',
|
10 |
'weekDayFormat',
|
11 |
-
|
12 |
|
13 |
/**
|
14 |
* Static Singleton Holder
|
@@ -31,7 +31,7 @@ class Tribe__Admin__Live_Date_Preview {
|
|
31 |
* the user is actually on that tab).
|
32 |
*/
|
33 |
public function __construct() {
|
34 |
-
add_action( 'tribe_settings_after_do_tabs',
|
35 |
}
|
36 |
|
37 |
/**
|
@@ -50,10 +50,10 @@ class Tribe__Admin__Live_Date_Preview {
|
|
50 |
*/
|
51 |
$this->target_fields = (array) apply_filters( 'tribe_settings_date_preview_fields', $this->target_fields );
|
52 |
|
53 |
-
add_filter( 'tribe_field_div_end',
|
54 |
|
55 |
// We are still before `admin_enqueue_scripts` making it safe to use `tribe_asset`
|
56 |
-
tribe_asset( Tribe__Main::instance(), 'tribe-date-live-refresh', 'admin-date-preview.js',
|
57 |
}
|
58 |
|
59 |
public function setup_date_previews( $html, $field ) {
|
3 |
* Facilitiates live date previews in the Events > Settings > Display admin screen.
|
4 |
*/
|
5 |
class Tribe__Admin__Live_Date_Preview {
|
6 |
+
protected $target_fields = array(
|
7 |
'dateWithYearFormat',
|
8 |
'dateWithoutYearFormat',
|
9 |
'monthAndYearFormat',
|
10 |
'weekDayFormat',
|
11 |
+
);
|
12 |
|
13 |
/**
|
14 |
* Static Singleton Holder
|
31 |
* the user is actually on that tab).
|
32 |
*/
|
33 |
public function __construct() {
|
34 |
+
add_action( 'tribe_settings_after_do_tabs', array( $this, 'listen' ) );
|
35 |
}
|
36 |
|
37 |
/**
|
50 |
*/
|
51 |
$this->target_fields = (array) apply_filters( 'tribe_settings_date_preview_fields', $this->target_fields );
|
52 |
|
53 |
+
add_filter( 'tribe_field_div_end', array( $this, 'setup_date_previews' ), 10, 2 );
|
54 |
|
55 |
// We are still before `admin_enqueue_scripts` making it safe to use `tribe_asset`
|
56 |
+
tribe_asset( Tribe__Main::instance(), 'tribe-date-live-refresh', 'admin-date-preview.js', array( 'jquery' ), 'admin_enqueue_scripts' );
|
57 |
}
|
58 |
|
59 |
public function setup_date_previews( $html, $field ) {
|
common/src/Tribe/Admin/Notice/Marketing.php
CHANGED
@@ -4,9 +4,6 @@
|
|
4 |
*
|
5 |
* @since 4.7.23
|
6 |
*/
|
7 |
-
|
8 |
-
use Tribe__Date_Utils as Dates;
|
9 |
-
|
10 |
class Tribe__Admin__Notice__Marketing {
|
11 |
|
12 |
/**
|
@@ -39,147 +36,179 @@ class Tribe__Admin__Notice__Marketing {
|
|
39 |
* @since 4.7.23
|
40 |
*/
|
41 |
public function hook() {
|
42 |
-
$this->
|
|
|
43 |
}
|
44 |
|
45 |
/**
|
46 |
-
* Register the Black Friday notice.
|
47 |
*
|
48 |
-
* @since 4.
|
49 |
*/
|
50 |
-
public function
|
51 |
|
52 |
tribe_notice(
|
53 |
-
'black-friday',
|
54 |
-
|
55 |
-
|
56 |
-
'type'
|
57 |
-
'dismiss'
|
58 |
-
'
|
59 |
-
|
60 |
-
|
61 |
-
[ $this, 'black_friday_should_display' ]
|
62 |
);
|
63 |
}
|
64 |
|
65 |
/**
|
66 |
-
* Unix time for
|
67 |
*
|
68 |
-
* @since 4.
|
69 |
*
|
70 |
* @return int
|
71 |
*/
|
72 |
-
public function
|
73 |
-
$date = Dates::build_date_object( 'fourth Thursday of November ' . date( 'Y' ), 'UTC' );
|
74 |
-
$date = $date->modify( '-3 days' );
|
75 |
-
$date = $date->setTime( 11, 0 );
|
76 |
-
|
77 |
-
$start_time = $date->format( 'U' );
|
78 |
-
|
79 |
/**
|
80 |
* Allow filtering of the Black Friday sale start date, mainly for testing purposes.
|
81 |
*
|
82 |
-
* @since 4.
|
83 |
*
|
84 |
-
* @param int $bf_start_date Unix time for
|
85 |
*/
|
86 |
-
return apply_filters( '
|
87 |
}
|
88 |
|
89 |
/**
|
90 |
-
* Unix time for
|
91 |
*
|
92 |
-
* @since 4.
|
93 |
*
|
94 |
* @return int
|
95 |
*/
|
96 |
-
public function
|
97 |
-
$date = Dates::build_date_object( 'December 1st', 'UTC' );
|
98 |
-
$date = $date->setTime( 5, 0 );
|
99 |
-
|
100 |
-
$end_time = $date->format( 'U' );
|
101 |
-
|
102 |
/**
|
103 |
* Allow filtering of the Black Friday sale end date, mainly for testing purposes.
|
104 |
*
|
105 |
-
* @since 4.
|
106 |
*
|
107 |
-
* @param int $bf_end_date Unix time for
|
108 |
*/
|
109 |
-
return apply_filters( '
|
110 |
}
|
111 |
/**
|
112 |
-
* Whether the Black Friday notice should display.
|
113 |
*
|
114 |
-
* Unix times for
|
115 |
* 6am UTC is midnight for TheEventsCalendar.com, which uses the America/Los_Angeles time zone.
|
116 |
*
|
117 |
-
* @since 4.
|
118 |
*
|
119 |
* @return boolean
|
120 |
*/
|
121 |
-
public function
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
126 |
|
127 |
-
|
128 |
-
$bf_sale_start = $this->get_black_friday_start_time();
|
129 |
-
$bf_sale_end = $this->get_black_friday_end_time();
|
130 |
|
131 |
-
$
|
|
|
132 |
|
133 |
-
|
134 |
-
'tribe_events_page_tribe-app-shop', // App shop.
|
135 |
-
'events_page_tribe-app-shop', // App shop.
|
136 |
-
'tribe_events_page_tribe-common', // Settings & Welcome.
|
137 |
-
'events_page_tribe-common', // Settings & Welcome.
|
138 |
-
'toplevel_page_tribe-common', // Settings & Welcome.
|
139 |
-
];
|
140 |
|
141 |
-
|
142 |
-
|
143 |
-
|
|
|
|
|
|
|
144 |
}
|
145 |
|
146 |
-
return
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
147 |
}
|
148 |
|
149 |
/**
|
150 |
-
* HTML for the
|
151 |
*
|
152 |
-
* @since 4.
|
153 |
*
|
154 |
* @return string
|
155 |
*/
|
156 |
-
public function
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
$
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
! empty( $current_screen->id )
|
167 |
-
&& (
|
168 |
-
'tribe_events_page_tribe-common' === $current_screen->id
|
169 |
-
|| 'events_page_tribe-common' === $current_screen->id
|
170 |
-
|| 'toplevel_page_tribe-common' === $current_screen->id
|
171 |
-
)
|
172 |
-
) {
|
173 |
-
if ( isset( $_GET['welcome-message-the-events-calendar'] ) || isset( $_GET['welcome-message-event-tickets' ] ) ) {
|
174 |
-
$cta_url .= 'welcome';
|
175 |
-
} else {
|
176 |
-
$cta_url .= 'settings';
|
177 |
-
}
|
178 |
}
|
179 |
|
180 |
ob_start();
|
181 |
|
182 |
-
include Tribe__Main::instance()->plugin_path . 'src/admin-views/notices/tribe-
|
183 |
|
184 |
return ob_get_clean();
|
185 |
}
|
4 |
*
|
5 |
* @since 4.7.23
|
6 |
*/
|
|
|
|
|
|
|
7 |
class Tribe__Admin__Notice__Marketing {
|
8 |
|
9 |
/**
|
36 |
* @since 4.7.23
|
37 |
*/
|
38 |
public function hook() {
|
39 |
+
$this->bf_2018_hook_notice();
|
40 |
+
$this->gutenberg_release_notice();
|
41 |
}
|
42 |
|
43 |
/**
|
44 |
+
* Register the Black Friday 2018 notice.
|
45 |
*
|
46 |
+
* @since 4.7.23
|
47 |
*/
|
48 |
+
public function bf_2018_hook_notice() {
|
49 |
|
50 |
tribe_notice(
|
51 |
+
'black-friday-2018',
|
52 |
+
array( $this, 'bf_2018_display_notice' ),
|
53 |
+
array(
|
54 |
+
'type' => 'warning',
|
55 |
+
'dismiss' => 1,
|
56 |
+
'wrap' => false,
|
57 |
+
),
|
58 |
+
array( $this, 'bf_2018_should_display' )
|
|
|
59 |
);
|
60 |
}
|
61 |
|
62 |
/**
|
63 |
+
* Unix time for Nov 20 2018 @ 6am UTC. (6am UTC is midnight for TheEventsCalendar.com, which uses the America/Los_Angeles time zone).
|
64 |
*
|
65 |
+
* @since 4.7.23
|
66 |
*
|
67 |
* @return int
|
68 |
*/
|
69 |
+
public function get_bf_2018_start_time() {
|
|
|
|
|
|
|
|
|
|
|
|
|
70 |
/**
|
71 |
* Allow filtering of the Black Friday sale start date, mainly for testing purposes.
|
72 |
*
|
73 |
+
* @since 4.7.23
|
74 |
*
|
75 |
+
* @param int $bf_start_date Unix time for Nov 20 2018 @ 6am UTC.
|
76 |
*/
|
77 |
+
return apply_filters( 'tribe_bf_2018_start_time', 1542693600 );
|
78 |
}
|
79 |
|
80 |
/**
|
81 |
+
* Unix time for Nov 26 2018 @ 6am UTC. (6am UTC is midnight for TheEventsCalendar.com, which uses the America/Los_Angeles time zone).
|
82 |
*
|
83 |
+
* @since 4.7.23
|
84 |
*
|
85 |
* @return int
|
86 |
*/
|
87 |
+
public function get_bf_2018_end_time() {
|
|
|
|
|
|
|
|
|
|
|
88 |
/**
|
89 |
* Allow filtering of the Black Friday sale end date, mainly for testing purposes.
|
90 |
*
|
91 |
+
* @since 4.7.23
|
92 |
*
|
93 |
+
* @param int $bf_end_date Unix time for Nov 20 2018 @ 6am UTC.
|
94 |
*/
|
95 |
+
return apply_filters( 'tribe_bf_2018_end_time', 1543212000 );
|
96 |
}
|
97 |
/**
|
98 |
+
* Whether the Black Friday 2018 notice should display.
|
99 |
*
|
100 |
+
* Unix times for Nov 20 2018 @ 6am UTC and Nov 26 2018 @ 6am UTC.
|
101 |
* 6am UTC is midnight for TheEventsCalendar.com, which uses the America/Los_Angeles time zone.
|
102 |
*
|
103 |
+
* @since 4.7.23
|
104 |
*
|
105 |
* @return boolean
|
106 |
*/
|
107 |
+
public function bf_2018_should_display() {
|
108 |
+
$bf_sale_start = $this->get_bf_2018_start_time();
|
109 |
+
$bf_sale_end = $this->get_bf_2018_end_time();
|
110 |
+
|
111 |
+
return $bf_sale_start <= time() && time() < $bf_sale_end;
|
112 |
+
}
|
113 |
+
|
114 |
+
/**
|
115 |
+
* HTML for the Black Friday 2018 notice.
|
116 |
+
*
|
117 |
+
* @since 4.7.23
|
118 |
+
*
|
119 |
+
* @return string
|
120 |
+
*/
|
121 |
+
public function bf_2018_display_notice() {
|
122 |
|
123 |
+
Tribe__Assets::instance()->enqueue( array( 'tribe-common-admin' ) );
|
|
|
|
|
124 |
|
125 |
+
$mascot_url = Tribe__Main::instance()->plugin_url . 'src/resources/images/mascot.png';
|
126 |
+
$end_time = $this->get_bf_2018_end_time();
|
127 |
|
128 |
+
ob_start();
|
|
|
|
|
|
|
|
|
|
|
|
|
129 |
|
130 |
+
if ( $this->tec_is_active && ! $this->et_is_active ) {
|
131 |
+
include Tribe__Main::instance()->plugin_path . 'src/admin-views/notices/tribe-bf-2018-tec.php';
|
132 |
+
} elseif ( $this->et_is_active && ! $this->tec_is_active ) {
|
133 |
+
include Tribe__Main::instance()->plugin_path . 'src/admin-views/notices/tribe-bf-2018-et.php';
|
134 |
+
} else {
|
135 |
+
include Tribe__Main::instance()->plugin_path . 'src/admin-views/notices/tribe-bf-2018-general.php';
|
136 |
}
|
137 |
|
138 |
+
return ob_get_clean();
|
139 |
+
}
|
140 |
+
|
141 |
+
/**
|
142 |
+
* Register the Gutenberg Release notice (November 2018).
|
143 |
+
*
|
144 |
+
* @since 4.7.23
|
145 |
+
*/
|
146 |
+
public function gutenberg_release_notice() {
|
147 |
+
|
148 |
+
tribe_notice(
|
149 |
+
'gutenberg-release-2018',
|
150 |
+
array( $this, 'gutenberg_release_display_notice' ),
|
151 |
+
array(
|
152 |
+
'type' => 'warning',
|
153 |
+
'dismiss' => 1,
|
154 |
+
'wrap' => false,
|
155 |
+
),
|
156 |
+
array( $this, 'gutenberg_release_should_display' )
|
157 |
+
);
|
158 |
+
}
|
159 |
+
|
160 |
+
/**
|
161 |
+
* Gets the end time for the Gutenberg release notice.
|
162 |
+
*
|
163 |
+
* @since 4.7.23
|
164 |
+
*
|
165 |
+
* @return int
|
166 |
+
*/
|
167 |
+
public function get_gutenberg_release_end_time() {
|
168 |
+
|
169 |
+
/**
|
170 |
+
* Allows filtering of the default Gutenberg Release Notice's end time, mainly for testing purposes.
|
171 |
+
*
|
172 |
+
* @since 4.7.23
|
173 |
+
*
|
174 |
+
* @param int $gutenberg_release_end_time Defaults to Nov 17 2018 @ midnight, California time.
|
175 |
+
*/
|
176 |
+
return apply_filters( 'tribe_gutenberg_release_notice_end_time', 1542434400 );
|
177 |
+
}
|
178 |
+
|
179 |
+
/**
|
180 |
+
* Whether the Gutenberg Release notice should display.
|
181 |
+
*
|
182 |
+
* @since 4.7.23
|
183 |
+
*
|
184 |
+
* @return boolean
|
185 |
+
*/
|
186 |
+
public function gutenberg_release_should_display() {
|
187 |
+
return time() < $this->get_gutenberg_release_end_time();
|
188 |
}
|
189 |
|
190 |
/**
|
191 |
+
* HTML for the Gutenberg Release notice (November 2018).
|
192 |
*
|
193 |
+
* @since 4.7.23
|
194 |
*
|
195 |
* @return string
|
196 |
*/
|
197 |
+
public function gutenberg_release_display_notice() {
|
198 |
+
|
199 |
+
Tribe__Assets::instance()->enqueue( array( 'tribe-common-admin' ) );
|
200 |
+
|
201 |
+
$end_time = $this->get_gutenberg_release_end_time();
|
202 |
+
|
203 |
+
if ( $this->et_is_active && ! $this->tec_is_active ) {
|
204 |
+
$icon_url = Tribe__Main::instance()->plugin_url . 'src/resources/images/gutenberg-admin-notice-tickets.png';
|
205 |
+
} else {
|
206 |
+
$icon_url = Tribe__Main::instance()->plugin_url . 'src/resources/images/gutenberg-admin-notice-TEC.png';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
207 |
}
|
208 |
|
209 |
ob_start();
|
210 |
|
211 |
+
include Tribe__Main::instance()->plugin_path . 'src/admin-views/notices/tribe-gutenberg-release.php';
|
212 |
|
213 |
return ob_get_clean();
|
214 |
}
|
common/src/Tribe/Admin/Notice/Php_Version.php
CHANGED
@@ -9,13 +9,13 @@ class Tribe__Admin__Notice__Php_Version {
|
|
9 |
// display the PHP version notice
|
10 |
tribe_notice(
|
11 |
'php-deprecated',
|
12 |
-
|
13 |
-
|
14 |
'type' => 'warning',
|
15 |
'dismiss' => 1,
|
16 |
'wrap' => 'p',
|
17 |
-
|
18 |
-
|
19 |
);
|
20 |
|
21 |
}
|
9 |
// display the PHP version notice
|
10 |
tribe_notice(
|
11 |
'php-deprecated',
|
12 |
+
array( $this, 'display_notice' ),
|
13 |
+
array(
|
14 |
'type' => 'warning',
|
15 |
'dismiss' => 1,
|
16 |
'wrap' => 'p',
|
17 |
+
),
|
18 |
+
array( $this, 'should_display' )
|
19 |
);
|
20 |
|
21 |
}
|
common/src/Tribe/Admin/Notice/Plugin_Download.php
CHANGED
@@ -7,7 +7,7 @@ class Tribe__Admin__Notice__Plugin_Download {
|
|
7 |
|
8 |
private $plugin_path;
|
9 |
|
10 |
-
private $plugins_required =
|
11 |
|
12 |
/**
|
13 |
* @param string $plugin_path Path to the plugin file we're showing a notice for
|
@@ -17,7 +17,7 @@ class Tribe__Admin__Notice__Plugin_Download {
|
|
17 |
|
18 |
tribe_notice(
|
19 |
plugin_basename( $plugin_path ),
|
20 |
-
|
21 |
);
|
22 |
}
|
23 |
|
@@ -60,7 +60,7 @@ class Tribe__Admin__Notice__Plugin_Download {
|
|
60 |
}
|
61 |
|
62 |
$plugin_data = get_plugin_data( $this->plugin_path );
|
63 |
-
$req_plugins =
|
64 |
|
65 |
if ( empty( $this->plugins_required ) ) {
|
66 |
return;
|
@@ -111,17 +111,17 @@ class Tribe__Admin__Notice__Plugin_Download {
|
|
111 |
$plugin_name[] = $plugin_data['Name'];
|
112 |
}
|
113 |
|
114 |
-
$allowed_html =
|
115 |
-
'strong' =>
|
116 |
-
'a' =>
|
117 |
-
|
118 |
|
119 |
$plugin_names_clean_text = wp_kses( $this->implode_with_grammar( $plugin_name ), $allowed_html );
|
120 |
$req_plugin_names_clean_text = wp_kses( $this->implode_with_grammar( $req_plugins ), $allowed_html );
|
121 |
|
122 |
$notice_html_content = '<p>' . esc_html__( 'To begin using %2$s, please install and activate %3$s.', 'tribe-common' ) . '</p>';
|
123 |
|
124 |
-
$read_more_link = '<a href="http://
|
125 |
$pue_notice_text = esc_html__( 'There’s a new version of %1$s available, but your license is expired. You’ll need to renew your license to get access to the latest version. If you plan to continue using your current version of the plugin(s), be sure to use a compatible version of The Events Calendar. %2$s', 'tribe-common' );
|
126 |
$pue_notice_html = '<p>' . sprintf( $pue_notice_text, $plugin_names_clean_text, $read_more_link ) . '</p>';
|
127 |
|
7 |
|
8 |
private $plugin_path;
|
9 |
|
10 |
+
private $plugins_required = array();
|
11 |
|
12 |
/**
|
13 |
* @param string $plugin_path Path to the plugin file we're showing a notice for
|
17 |
|
18 |
tribe_notice(
|
19 |
plugin_basename( $plugin_path ),
|
20 |
+
array( $this, 'show_inactive_plugins_alert' )
|
21 |
);
|
22 |
}
|
23 |
|
60 |
}
|
61 |
|
62 |
$plugin_data = get_plugin_data( $this->plugin_path );
|
63 |
+
$req_plugins = array();
|
64 |
|
65 |
if ( empty( $this->plugins_required ) ) {
|
66 |
return;
|
111 |
$plugin_name[] = $plugin_data['Name'];
|
112 |
}
|
113 |
|
114 |
+
$allowed_html = array(
|
115 |
+
'strong' => array(),
|
116 |
+
'a' => array( 'href' => array() ),
|
117 |
+
);
|
118 |
|
119 |
$plugin_names_clean_text = wp_kses( $this->implode_with_grammar( $plugin_name ), $allowed_html );
|
120 |
$req_plugin_names_clean_text = wp_kses( $this->implode_with_grammar( $req_plugins ), $allowed_html );
|
121 |
|
122 |
$notice_html_content = '<p>' . esc_html__( 'To begin using %2$s, please install and activate %3$s.', 'tribe-common' ) . '</p>';
|
123 |
|
124 |
+
$read_more_link = '<a href="http://m.tri.be/1aev" target="_blank">' . esc_html__( 'Read more', 'tribe-common' ) . '.</a>';
|
125 |
$pue_notice_text = esc_html__( 'There’s a new version of %1$s available, but your license is expired. You’ll need to renew your license to get access to the latest version. If you plan to continue using your current version of the plugin(s), be sure to use a compatible version of The Events Calendar. %2$s', 'tribe-common' );
|
126 |
$pue_notice_html = '<p>' . sprintf( $pue_notice_text, $plugin_names_clean_text, $read_more_link ) . '</p>';
|
127 |
|
common/src/Tribe/Admin/Notice/Plugin_Upgrade_Notice.php
CHANGED
@@ -46,7 +46,7 @@ class Tribe__Admin__Notice__Plugin_Upgrade_Notice {
|
|
46 |
$this->current_version = $current_version;
|
47 |
$this->plugin_path = $plugin_path;
|
48 |
|
49 |
-
add_action( "in_plugin_update_message-$plugin_path",
|
50 |
}
|
51 |
|
52 |
/**
|
46 |
$this->current_version = $current_version;
|
47 |
$this->plugin_path = $plugin_path;
|
48 |
|
49 |
+
add_action( "in_plugin_update_message-$plugin_path", array( $this, 'maybe_run' ) );
|
50 |
}
|
51 |
|
52 |
/**
|
common/src/Tribe/Admin/Notice/WP_Version.php
DELETED
@@ -1,87 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
namespace Tribe\Admin\Notice;
|
3 |
-
|
4 |
-
use \Tribe__Date_Utils as Dates;
|
5 |
-
use Tribe__Main as Common;
|
6 |
-
|
7 |
-
|
8 |
-
/**
|
9 |
-
* Various WordPress version notices.
|
10 |
-
*
|
11 |
-
* @since 4.12.17
|
12 |
-
*/
|
13 |
-
class WP_Version {
|
14 |
-
/**
|
15 |
-
* Register the various WordPress version notices.
|
16 |
-
*
|
17 |
-
* @since 4.12.17
|
18 |
-
*/
|
19 |
-
public function hook() {
|
20 |
-
tribe_notice(
|
21 |
-
'wp_version_57',
|
22 |
-
[ $this, 'wp_version_57_display_notice' ],
|
23 |
-
[
|
24 |
-
'type' => 'warning',
|
25 |
-
'dismiss' => 1,
|
26 |
-
'priority' => -1,
|
27 |
-
'wrap' => 'p',
|
28 |
-
],
|
29 |
-
[ $this, 'wp_version_57_should_display' ]
|
30 |
-
);
|
31 |
-
}
|
32 |
-
|
33 |
-
/**
|
34 |
-
* Whether the WordPress 5.7 notice should display.
|
35 |
-
*
|
36 |
-
* @since 4.12.17
|
37 |
-
*
|
38 |
-
* @return boolean
|
39 |
-
*/
|
40 |
-
public function wp_version_57_should_display() {
|
41 |
-
global $wp_version;
|
42 |
-
|
43 |
-
$screens = [
|
44 |
-
'tribe_events_page_tribe-app-shop', // App shop.
|
45 |
-
'events_page_tribe-app-shop', // App shop.
|
46 |
-
'tribe_events_page_tribe-common', // Settings & Welcome.
|
47 |
-
'events_page_tribe-common', // Settings & Welcome.
|
48 |
-
'toplevel_page_tribe-common', // Settings & Welcome.
|
49 |
-
];
|
50 |
-
|
51 |
-
// If not a valid screen, don't display.
|
52 |
-
if ( empty( $current_screen->id ) || ! in_array( $current_screen->id, $screens, true ) ) {
|
53 |
-
return false;
|
54 |
-
}
|
55 |
-
|
56 |
-
$wp_version_min_version_required = '5.8';
|
57 |
-
$common_version_required = '4.12.18-dev';
|
58 |
-
|
59 |
-
return
|
60 |
-
version_compare( Common::VERSION, $common_version_required, '<' )
|
61 |
-
&& version_compare( $wp_version, $wp_version_min_version_required, '<' );
|
62 |
-
}
|
63 |
-
|
64 |
-
/**
|
65 |
-
* HTML for the WordPress 5.7 notice.
|
66 |
-
*
|
67 |
-
* @since 4.12.17
|
68 |
-
*
|
69 |
-
* @see https://evnt.is/wp5-7
|
70 |
-
*
|
71 |
-
* @return string
|
72 |
-
*/
|
73 |
-
public function wp_version_57_display_notice() {
|
74 |
-
global $wp_version;
|
75 |
-
$is_wp_57 = version_compare( $wp_version, '5.7-beta', '>=' );
|
76 |
-
$html = '';
|
77 |
-
|
78 |
-
if ( $is_wp_57 ) {
|
79 |
-
$html .= esc_html__( 'You are using WordPress 5.7 which included a major jQuery update that may cause compatibility issues with past versions of The Events Calendar, Event Tickets and other plugins.', 'tribe-common' );
|
80 |
-
} else {
|
81 |
-
$html .= esc_html__( 'WordPress 5.7 includes a major jQuery update that may cause compatibility issues with past versions of The Events Calendar, Event Tickets and other plugins.', 'tribe-common' );
|
82 |
-
}
|
83 |
-
$html .= ' <a target="_blank" href="https://evnt.is/wp5-7">' . esc_html__( 'Read more.', 'tribe-common' ) . '</a>';
|
84 |
-
|
85 |
-
return $html;
|
86 |
-
}
|
87 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
common/src/Tribe/Admin/Notices.php
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
<?php
|
2 |
-
|
3 |
-
|
4 |
|
5 |
/**
|
6 |
* @since 4.3
|
@@ -50,7 +50,7 @@ class Tribe__Admin__Notices {
|
|
50 |
}
|
51 |
|
52 |
/**
|
53 |
-
* User Meta Key that stores which notices have been
|
54 |
*
|
55 |
* @since 4.3
|
56 |
*
|
@@ -58,15 +58,6 @@ class Tribe__Admin__Notices {
|
|
58 |
*/
|
59 |
public static $meta_key = 'tribe-dismiss-notice';
|
60 |
|
61 |
-
/**
|
62 |
-
* User Meta Key prefix that stores when notices have been dismissed.
|
63 |
-
*
|
64 |
-
* @since 4.13.0
|
65 |
-
*
|
66 |
-
* @var string
|
67 |
-
*/
|
68 |
-
public static $meta_key_time_prefix = 'tribe-dismiss-notice-time-';
|
69 |
-
|
70 |
/**
|
71 |
* Stores all the Notices and it's configurations
|
72 |
*
|
@@ -74,7 +65,7 @@ class Tribe__Admin__Notices {
|
|
74 |
*
|
75 |
* @var array
|
76 |
*/
|
77 |
-
protected $notices =
|
78 |
|
79 |
/**
|
80 |
* Register the Methods in the correct places
|
@@ -89,7 +80,7 @@ class Tribe__Admin__Notices {
|
|
89 |
}
|
90 |
|
91 |
// Before we bail on the
|
92 |
-
add_action( 'wp_ajax_tribe_notice_dismiss',
|
93 |
|
94 |
// Doing AJAX? bail.
|
95 |
if ( tribe( 'context' )->doing_ajax() ) {
|
@@ -97,14 +88,14 @@ class Tribe__Admin__Notices {
|
|
97 |
}
|
98 |
|
99 |
// Hook the actual rendering of notices
|
100 |
-
add_action( 'current_screen',
|
101 |
|
102 |
// Add our notice dismissal script
|
103 |
tribe_asset(
|
104 |
Tribe__Main::instance(),
|
105 |
'tribe-notice-dismiss',
|
106 |
'notice-dismiss.js',
|
107 |
-
|
108 |
'admin_enqueue_scripts'
|
109 |
);
|
110 |
}
|
@@ -163,8 +154,8 @@ class Tribe__Admin__Notices {
|
|
163 |
*
|
164 |
* @since 4.3
|
165 |
*
|
166 |
-
* @param
|
167 |
-
* @param
|
168 |
*
|
169 |
* @return string
|
170 |
*/
|
@@ -183,13 +174,13 @@ class Tribe__Admin__Notices {
|
|
183 |
|| (
|
184 |
is_callable( $notice->active_callback )
|
185 |
&& true == call_user_func( $notice->active_callback )
|
186 |
-
|
187 |
) {
|
188 |
$content = $notice->content;
|
189 |
-
$wrap
|
190 |
|
191 |
if ( is_callable( $content ) ) {
|
192 |
-
$content = call_user_func_array( $content,
|
193 |
}
|
194 |
|
195 |
// Return the rendered HTML
|
@@ -204,10 +195,10 @@ class Tribe__Admin__Notices {
|
|
204 |
*
|
205 |
* @since 4.3
|
206 |
*
|
207 |
-
* @param
|
208 |
-
* @param
|
209 |
-
* @param
|
210 |
-
* @param
|
211 |
*
|
212 |
* @return bool|string
|
213 |
*/
|
@@ -225,10 +216,10 @@ class Tribe__Admin__Notices {
|
|
225 |
return false;
|
226 |
}
|
227 |
|
228 |
-
$notice
|
229 |
$this->notices[ $slug ]->is_rendered = true;
|
230 |
|
231 |
-
$classes
|
232 |
$classes[] = sanitize_html_class( 'notice-' . $notice->type );
|
233 |
$classes[] = sanitize_html_class( 'tribe-notice-' . $notice->slug );
|
234 |
|
@@ -259,9 +250,9 @@ class Tribe__Admin__Notices {
|
|
259 |
*
|
260 |
* @since 4.3
|
261 |
*
|
262 |
-
* @param
|
263 |
-
* @param
|
264 |
-
* @param
|
265 |
*
|
266 |
* @return boolean|string
|
267 |
*/
|
@@ -274,7 +265,7 @@ class Tribe__Admin__Notices {
|
|
274 |
*
|
275 |
* @since 4.7.10
|
276 |
*
|
277 |
-
* @param
|
278 |
*
|
279 |
* @return boolean
|
280 |
*/
|
@@ -293,8 +284,8 @@ class Tribe__Admin__Notices {
|
|
293 |
*
|
294 |
* @since 4.7.10
|
295 |
*
|
296 |
-
* @param
|
297 |
-
* @param
|
298 |
*
|
299 |
* @return boolean
|
300 |
*/
|
@@ -309,16 +300,16 @@ class Tribe__Admin__Notices {
|
|
309 |
}
|
310 |
|
311 |
/**
|
312 |
-
* Checks if a given user has
|
313 |
*
|
314 |
-
* @since 4.
|
315 |
*
|
316 |
-
* @param
|
317 |
-
* @param
|
318 |
*
|
319 |
* @return boolean
|
320 |
*/
|
321 |
-
public function
|
322 |
|
323 |
if ( is_null( $user_id ) ) {
|
324 |
$user_id = get_current_user_id();
|
@@ -334,106 +325,16 @@ class Tribe__Admin__Notices {
|
|
334 |
return false;
|
335 |
}
|
336 |
|
337 |
-
$notice = $this->get( $slug );
|
338 |
-
if (
|
339 |
-
is_object( $notice )
|
340 |
-
&& $notice->recurring
|
341 |
-
&& $this->should_recurring_notice_show( $slug, $user_id )
|
342 |
-
) {
|
343 |
-
return false;
|
344 |
-
}
|
345 |
-
|
346 |
return true;
|
347 |
}
|
348 |
|
349 |
-
/**
|
350 |
-
* Checks if a given user has dismissed a given notice.
|
351 |
-
*
|
352 |
-
* @since 4.3
|
353 |
-
* @deprecated 4.13.0 Deprecated in favor of correcting the typo.
|
354 |
-
*
|
355 |
-
* @param string $slug The Name of the Notice
|
356 |
-
* @param int|null $user_id The user ID
|
357 |
-
*
|
358 |
-
* @return boolean
|
359 |
-
*/
|
360 |
-
public function has_user_dimissed( $slug, $user_id = null ) {
|
361 |
-
return $this->has_user_dismissed( $slug, $user_id );
|
362 |
-
}
|
363 |
-
|
364 |
-
/**
|
365 |
-
* Gets the last Dismissal for a given notice slug and user.
|
366 |
-
*
|
367 |
-
* @since 4.13.0
|
368 |
-
*
|
369 |
-
* @param string $slug Slug of the notice to look for.
|
370 |
-
* @param int|null $user_id Which user? If null will default to current user.
|
371 |
-
*
|
372 |
-
* @return false|\Tribe\Utils\Date_I18n
|
373 |
-
*/
|
374 |
-
public function get_last_dismissal( $slug, $user_id = null ) {
|
375 |
-
if ( is_null( $user_id ) ) {
|
376 |
-
$user_id = get_current_user_id();
|
377 |
-
}
|
378 |
-
|
379 |
-
$dismissed_time = get_user_meta( $user_id, static::$meta_key_time_prefix . $slug, true );
|
380 |
-
|
381 |
-
if ( ! is_numeric( $dismissed_time ) ) {
|
382 |
-
return false;
|
383 |
-
}
|
384 |
-
|
385 |
-
return Dates::build_date_object( $dismissed_time );
|
386 |
-
}
|
387 |
-
|
388 |
-
/**
|
389 |
-
* Determines if a given notice needs to be re-displayed in case of recurring notice.
|
390 |
-
*
|
391 |
-
* @since 4.13.0
|
392 |
-
*
|
393 |
-
* @param string $slug Slug of the notice to look for.
|
394 |
-
* @param int|null $user_id Which user? If null will default to current user.
|
395 |
-
*
|
396 |
-
* @return false|\Tribe\Utils\Date_I18n
|
397 |
-
*/
|
398 |
-
public function should_recurring_notice_show( $slug, $user_id = null ) {
|
399 |
-
$notice = $this->get( $slug );
|
400 |
-
if ( ! is_object( $notice ) ) {
|
401 |
-
return false;
|
402 |
-
}
|
403 |
-
|
404 |
-
if ( ! $notice->recurring || ! $notice->recurring_interval ) {
|
405 |
-
return false;
|
406 |
-
}
|
407 |
-
|
408 |
-
if ( is_null( $user_id ) ) {
|
409 |
-
$user_id = get_current_user_id();
|
410 |
-
}
|
411 |
-
|
412 |
-
$interval = Dates::interval( $notice->recurring_interval );
|
413 |
-
$last_dismissal = $this->get_last_dismissal( $slug, $user_id );
|
414 |
-
if ( ! $last_dismissal ) {
|
415 |
-
return false;
|
416 |
-
}
|
417 |
-
|
418 |
-
$next_dismissal = $last_dismissal->add( $interval );
|
419 |
-
$now = Dates::build_date_object( 'now' );
|
420 |
-
|
421 |
-
if ( $now >= $next_dismissal ) {
|
422 |
-
delete_user_meta( $user_id, self::$meta_key, $slug );
|
423 |
-
|
424 |
-
return true;
|
425 |
-
}
|
426 |
-
|
427 |
-
return false;
|
428 |
-
}
|
429 |
-
|
430 |
/**
|
431 |
* A Method to actually add the Meta value telling that this notice has been dismissed
|
432 |
*
|
433 |
* @since 4.3
|
434 |
*
|
435 |
-
* @param
|
436 |
-
* @param
|
437 |
*
|
438 |
* @return boolean
|
439 |
*/
|
@@ -442,21 +343,19 @@ class Tribe__Admin__Notices {
|
|
442 |
$user_id = get_current_user_id();
|
443 |
}
|
444 |
|
445 |
-
// If this user has
|
446 |
-
if ( $this->
|
447 |
return true;
|
448 |
}
|
449 |
|
450 |
-
update_user_meta( $user_id, static::$meta_key_time_prefix . $slug, time() );
|
451 |
-
|
452 |
return add_user_meta( $user_id, self::$meta_key, $slug, false );
|
453 |
}
|
454 |
|
455 |
/**
|
456 |
-
* Removes the User meta holding if a notice was
|
457 |
*
|
458 |
-
* @param
|
459 |
-
* @param
|
460 |
*
|
461 |
* @return boolean
|
462 |
*/
|
@@ -465,8 +364,8 @@ class Tribe__Admin__Notices {
|
|
465 |
$user_id = get_current_user_id();
|
466 |
}
|
467 |
|
468 |
-
// If this user has
|
469 |
-
if ( ! $this->
|
470 |
return false;
|
471 |
}
|
472 |
|
@@ -483,16 +382,16 @@ class Tribe__Admin__Notices {
|
|
483 |
* @return int
|
484 |
*/
|
485 |
public function undismiss_for_all( $slug ) {
|
486 |
-
$user_query = new WP_User_Query(
|
487 |
'meta_key' => self::$meta_key,
|
488 |
'meta_value' => $slug,
|
489 |
-
|
490 |
|
491 |
$affected = 0;
|
492 |
|
493 |
foreach ( $user_query->get_results() as $user ) {
|
494 |
if ( $this->undismiss( $slug, $user->ID ) ) {
|
495 |
-
$affected
|
496 |
}
|
497 |
}
|
498 |
|
@@ -504,34 +403,32 @@ class Tribe__Admin__Notices {
|
|
504 |
*
|
505 |
* @since 4.3
|
506 |
*
|
507 |
-
* @param
|
508 |
-
* @param
|
509 |
-
* @param
|
510 |
-
* @param callable|null
|
511 |
* to indicate whether the notice should display or not.
|
512 |
*
|
513 |
* @return stdClass
|
514 |
*/
|
515 |
-
public function register( $slug, $callback, $arguments =
|
516 |
// Prevent weird stuff here
|
517 |
$slug = sanitize_title_with_dashes( $slug );
|
518 |
|
519 |
-
$defaults =
|
520 |
-
'callback'
|
521 |
-
'content'
|
522 |
-
'action'
|
523 |
-
'priority'
|
524 |
-
'expire'
|
525 |
-
'dismiss'
|
526 |
-
'
|
527 |
-
'
|
528 |
-
'
|
529 |
-
|
530 |
-
|
531 |
-
];
|
532 |
-
|
533 |
-
$defaults['callback'] = [ $this, 'render_' . $slug ];
|
534 |
-
$defaults['content'] = $callback;
|
535 |
|
536 |
if ( is_callable( $active_callback ) ) {
|
537 |
$defaults['active_callback'] = $active_callback;
|
@@ -544,10 +441,9 @@ class Tribe__Admin__Notices {
|
|
544 |
$notice->slug = $slug;
|
545 |
|
546 |
// Clean these
|
547 |
-
$notice->priority
|
548 |
-
$notice->expire
|
549 |
-
$notice->dismiss
|
550 |
-
$notice->recurring = (bool) $notice->recurring;
|
551 |
|
552 |
// Set the Notice on the array of notices
|
553 |
$this->notices[ $slug ] = $notice;
|
@@ -564,16 +460,16 @@ class Tribe__Admin__Notices {
|
|
564 |
*
|
565 |
* @since 4.7.7
|
566 |
*
|
567 |
-
* @param
|
568 |
-
* @param
|
569 |
-
* @param
|
570 |
-
* @param
|
571 |
*
|
572 |
* @return stdClass Which notice was registered
|
573 |
*/
|
574 |
-
public function register_transient( $slug, $html, $arguments =
|
575 |
$notices = $this->get_transients();
|
576 |
-
$notices[ $slug ] =
|
577 |
$this->set_transients( $notices );
|
578 |
}
|
579 |
|
@@ -605,7 +501,6 @@ class Tribe__Admin__Notices {
|
|
605 |
}
|
606 |
|
607 |
unset( $this->notices[ $slug ] );
|
608 |
-
|
609 |
return true;
|
610 |
}
|
611 |
|
@@ -662,7 +557,7 @@ class Tribe__Admin__Notices {
|
|
662 |
|
663 |
$transient = self::$transient_notices_name;
|
664 |
$notices = get_transient( $transient );
|
665 |
-
$notices = is_array( $notices ) ? $notices :
|
666 |
|
667 |
if ( $this->did_prune_transients ) {
|
668 |
$this->did_prune_transients = true;
|
@@ -709,7 +604,7 @@ class Tribe__Admin__Notices {
|
|
709 |
$transient_notices = (array) $this->get_transients();
|
710 |
|
711 |
return isset( $transient_notices[ $slug ] )
|
712 |
-
&& ! $this->
|
713 |
&& ! $this->transient_notice_expired( $slug );
|
714 |
}
|
715 |
|
@@ -757,7 +652,7 @@ class Tribe__Admin__Notices {
|
|
757 |
}
|
758 |
|
759 |
$notice = $this->notices[ $slug ];
|
760 |
-
if ( $notice->dismiss && $this->
|
761 |
return false;
|
762 |
}
|
763 |
|
1 |
<?php
|
2 |
+
// Don't load directly
|
3 |
+
defined( 'WPINC' ) or die;
|
4 |
|
5 |
/**
|
6 |
* @since 4.3
|
50 |
}
|
51 |
|
52 |
/**
|
53 |
+
* User Meta Key that stores which notices have been dimissed
|
54 |
*
|
55 |
* @since 4.3
|
56 |
*
|
58 |
*/
|
59 |
public static $meta_key = 'tribe-dismiss-notice';
|
60 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
61 |
/**
|
62 |
* Stores all the Notices and it's configurations
|
63 |
*
|
65 |
*
|
66 |
* @var array
|
67 |
*/
|
68 |
+
protected $notices = array();
|
69 |
|
70 |
/**
|
71 |
* Register the Methods in the correct places
|
80 |
}
|
81 |
|
82 |
// Before we bail on the
|
83 |
+
add_action( 'wp_ajax_tribe_notice_dismiss', array( $this, 'maybe_dismiss' ) );
|
84 |
|
85 |
// Doing AJAX? bail.
|
86 |
if ( tribe( 'context' )->doing_ajax() ) {
|
88 |
}
|
89 |
|
90 |
// Hook the actual rendering of notices
|
91 |
+
add_action( 'current_screen', array( $this, 'hook' ), 20 );
|
92 |
|
93 |
// Add our notice dismissal script
|
94 |
tribe_asset(
|
95 |
Tribe__Main::instance(),
|
96 |
'tribe-notice-dismiss',
|
97 |
'notice-dismiss.js',
|
98 |
+
array( 'jquery' ),
|
99 |
'admin_enqueue_scripts'
|
100 |
);
|
101 |
}
|
154 |
*
|
155 |
* @since 4.3
|
156 |
*
|
157 |
+
* @param string $name Name of the Method used to create the Slug of the Notice
|
158 |
+
* @param array $arguments Which arguments were used, normally empty
|
159 |
*
|
160 |
* @return string
|
161 |
*/
|
174 |
|| (
|
175 |
is_callable( $notice->active_callback )
|
176 |
&& true == call_user_func( $notice->active_callback )
|
177 |
+
)
|
178 |
) {
|
179 |
$content = $notice->content;
|
180 |
+
$wrap = isset( $notice->wrap ) ? $notice->wrap : false;
|
181 |
|
182 |
if ( is_callable( $content ) ) {
|
183 |
+
$content = call_user_func_array( $content, array( $notice ) );
|
184 |
}
|
185 |
|
186 |
// Return the rendered HTML
|
195 |
*
|
196 |
* @since 4.3
|
197 |
*
|
198 |
+
* @param string $slug The Name of the Notice
|
199 |
+
* @param string $content The content of the notice
|
200 |
+
* @param boolean $return Echo or return the content
|
201 |
+
* @param string|bool $wrap An optional HTML tag to wrap the content.
|
202 |
*
|
203 |
* @return bool|string
|
204 |
*/
|
216 |
return false;
|
217 |
}
|
218 |
|
219 |
+
$notice = $this->get( $slug );
|
220 |
$this->notices[ $slug ]->is_rendered = true;
|
221 |
|
222 |
+
$classes = array( 'tribe-dismiss-notice', 'notice' );
|
223 |
$classes[] = sanitize_html_class( 'notice-' . $notice->type );
|
224 |
$classes[] = sanitize_html_class( 'tribe-notice-' . $notice->slug );
|
225 |
|
250 |
*
|
251 |
* @since 4.3
|
252 |
*
|
253 |
+
* @param string $slug The Name of the Notice
|
254 |
+
* @param string $content The content of the notice
|
255 |
+
* @param boolean $return Echo or return the content
|
256 |
*
|
257 |
* @return boolean|string
|
258 |
*/
|
265 |
*
|
266 |
* @since 4.7.10
|
267 |
*
|
268 |
+
* @param string $slug Which notice to check
|
269 |
*
|
270 |
* @return boolean
|
271 |
*/
|
284 |
*
|
285 |
* @since 4.7.10
|
286 |
*
|
287 |
+
* @param string $slug Which notice to check
|
288 |
+
* @param string $html Which html string we are check
|
289 |
*
|
290 |
* @return boolean
|
291 |
*/
|
300 |
}
|
301 |
|
302 |
/**
|
303 |
+
* Checks if a given user has dimissed a given notice.
|
304 |
*
|
305 |
+
* @since 4.3
|
306 |
*
|
307 |
+
* @param string $slug The Name of the Notice
|
308 |
+
* @param int|null $user_id The user ID
|
309 |
*
|
310 |
* @return boolean
|
311 |
*/
|
312 |
+
public function has_user_dimissed( $slug, $user_id = null ) {
|
313 |
|
314 |
if ( is_null( $user_id ) ) {
|
315 |
$user_id = get_current_user_id();
|
325 |
return false;
|
326 |
}
|
327 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
328 |
return true;
|
329 |
}
|
330 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
331 |
/**
|
332 |
* A Method to actually add the Meta value telling that this notice has been dismissed
|
333 |
*
|
334 |
* @since 4.3
|
335 |
*
|
336 |
+
* @param string $slug The Name of the Notice
|
337 |
+
* @param int|null $user_id The user ID
|
338 |
*
|
339 |
* @return boolean
|
340 |
*/
|
343 |
$user_id = get_current_user_id();
|
344 |
}
|
345 |
|
346 |
+
// If this user has dimissed we don't care either
|
347 |
+
if ( $this->has_user_dimissed( $slug, $user_id ) ) {
|
348 |
return true;
|
349 |
}
|
350 |
|
|
|
|
|
351 |
return add_user_meta( $user_id, self::$meta_key, $slug, false );
|
352 |
}
|
353 |
|
354 |
/**
|
355 |
+
* Removes the User meta holding if a notice was dimissed
|
356 |
*
|
357 |
+
* @param string $slug The Name of the Notice
|
358 |
+
* @param int|null $user_id The user ID
|
359 |
*
|
360 |
* @return boolean
|
361 |
*/
|
364 |
$user_id = get_current_user_id();
|
365 |
}
|
366 |
|
367 |
+
// If this user has dimissed we don't care either
|
368 |
+
if ( ! $this->has_user_dimissed( $slug, $user_id ) ) {
|
369 |
return false;
|
370 |
}
|
371 |
|
382 |
* @return int
|
383 |
*/
|
384 |
public function undismiss_for_all( $slug ) {
|
385 |
+
$user_query = new WP_User_Query( array(
|
386 |
'meta_key' => self::$meta_key,
|
387 |
'meta_value' => $slug,
|
388 |
+
) );
|
389 |
|
390 |
$affected = 0;
|
391 |
|
392 |
foreach ( $user_query->get_results() as $user ) {
|
393 |
if ( $this->undismiss( $slug, $user->ID ) ) {
|
394 |
+
$affected++;
|
395 |
}
|
396 |
}
|
397 |
|
403 |
*
|
404 |
* @since 4.3
|
405 |
*
|
406 |
+
* @param string $slug Slug to save the notice
|
407 |
+
* @param callable|string $callback A callable Method/Fuction to actually display the notice
|
408 |
+
* @param array $arguments Arguments to Setup a notice
|
409 |
+
* @param callable|null $active_callback An optional callback that should return bool values
|
410 |
* to indicate whether the notice should display or not.
|
411 |
*
|
412 |
* @return stdClass
|
413 |
*/
|
414 |
+
public function register( $slug, $callback, $arguments = array(), $active_callback = null ) {
|
415 |
// Prevent weird stuff here
|
416 |
$slug = sanitize_title_with_dashes( $slug );
|
417 |
|
418 |
+
$defaults = array(
|
419 |
+
'callback' => null,
|
420 |
+
'content' => null,
|
421 |
+
'action' => 'admin_notices',
|
422 |
+
'priority' => 10,
|
423 |
+
'expire' => false,
|
424 |
+
'dismiss' => false,
|
425 |
+
'type' => 'error',
|
426 |
+
'is_rendered' => false,
|
427 |
+
'wrap' => false,
|
428 |
+
);
|
429 |
+
|
430 |
+
$defaults['callback'] = array( $this, 'render_' . $slug );
|
431 |
+
$defaults['content'] = $callback;
|
|
|
|
|
432 |
|
433 |
if ( is_callable( $active_callback ) ) {
|
434 |
$defaults['active_callback'] = $active_callback;
|
441 |
$notice->slug = $slug;
|
442 |
|
443 |
// Clean these
|
444 |
+
$notice->priority = absint( $notice->priority );
|
445 |
+
$notice->expire = (bool) $notice->expire;
|
446 |
+
$notice->dismiss = (bool) $notice->dismiss;
|
|
|
447 |
|
448 |
// Set the Notice on the array of notices
|
449 |
$this->notices[ $slug ] = $notice;
|
460 |
*
|
461 |
* @since 4.7.7
|
462 |
*
|
463 |
+
* @param string $slug Slug to save the notice
|
464 |
+
* @param string $html The notice output HTML code
|
465 |
+
* @param array $arguments Arguments to Setup a notice
|
466 |
+
* @param int $expire After how much time (in seconds) the notice will stop showing.
|
467 |
*
|
468 |
* @return stdClass Which notice was registered
|
469 |
*/
|
470 |
+
public function register_transient( $slug, $html, $arguments = array(), $expire = null ) {
|
471 |
$notices = $this->get_transients();
|
472 |
+
$notices[ $slug ] = array( $html, $arguments, time() + $expire );
|
473 |
$this->set_transients( $notices );
|
474 |
}
|
475 |
|
501 |
}
|
502 |
|
503 |
unset( $this->notices[ $slug ] );
|
|
|
504 |
return true;
|
505 |
}
|
506 |
|
557 |
|
558 |
$transient = self::$transient_notices_name;
|
559 |
$notices = get_transient( $transient );
|
560 |
+
$notices = is_array( $notices ) ? $notices : array();
|
561 |
|
562 |
if ( $this->did_prune_transients ) {
|
563 |
$this->did_prune_transients = true;
|
604 |
$transient_notices = (array) $this->get_transients();
|
605 |
|
606 |
return isset( $transient_notices[ $slug ] )
|
607 |
+
&& ! $this->has_user_dimissed( $slug )
|
608 |
&& ! $this->transient_notice_expired( $slug );
|
609 |
}
|
610 |
|
652 |
}
|
653 |
|
654 |
$notice = $this->notices[ $slug ];
|
655 |
+
if ( $notice->dismiss && $this->has_user_dimissed( $notice->slug ) ) {
|
656 |
return false;
|
657 |
}
|
658 |
|
common/src/Tribe/Ajax/Dropdown.php
CHANGED
@@ -15,8 +15,8 @@ class Tribe__Ajax__Dropdown {
|
|
15 |
* @return void
|
16 |
*/
|
17 |
public function hook() {
|
18 |
-
add_action( 'wp_ajax_tribe_dropdown',
|
19 |
-
add_action( 'wp_ajax_nopriv_tribe_dropdown',
|
20 |
}
|
21 |
|
22 |
/**
|
@@ -24,32 +24,26 @@ class Tribe__Ajax__Dropdown {
|
|
24 |
*
|
25 |
* @since 4.6
|
26 |
*
|
27 |
-
* @param
|
28 |
-
* @param
|
29 |
-
* @param
|
30 |
-
* @param
|
31 |
*
|
32 |
-
* @return array
|
33 |
*/
|
34 |
public function search_terms( $search, $page, $args, $source ) {
|
35 |
-
$data =
|
36 |
|
37 |
if ( empty( $args['taxonomy'] ) ) {
|
38 |
$this->error( esc_attr__( 'Cannot look for Terms without a taxonomy', 'tribe-common' ) );
|
39 |
}
|
40 |
|
41 |
// We always want all the fields so we overwrite it
|
42 |
-
$args['fields']
|
43 |
$args['hide_empty'] = isset( $args['hide_empty'] ) ? $args['hide_empty'] : false;
|
44 |
|
45 |
if ( ! empty( $search ) ) {
|
46 |
-
|
47 |
-
// For older pieces that still use Select2 format.
|
48 |
-
$args['search'] = $search;
|
49 |
-
} else {
|
50 |
-
// Newer SelectWoo uses a new search format.
|
51 |
-
$args['search'] = $search['term'];
|
52 |
-
}
|
53 |
}
|
54 |
|
55 |
// On versions older than 4.5 taxonomy goes as an Param
|
@@ -59,7 +53,7 @@ class Tribe__Ajax__Dropdown {
|
|
59 |
$terms = get_terms( $args );
|
60 |
}
|
61 |
|
62 |
-
$results =
|
63 |
|
64 |
// Respect the parent/child_of argument if set
|
65 |
$parent = ! empty( $args['child_of'] ) ? (int) $args['child_of'] : 0;
|
@@ -73,7 +67,7 @@ class Tribe__Ajax__Dropdown {
|
|
73 |
// Prep for Select2
|
74 |
$term->id = $term->term_id;
|
75 |
$term->text = $term->name;
|
76 |
-
$term->breadcrumbs =
|
77 |
|
78 |
if ( 0 !== (int) $term->parent ) {
|
79 |
$ancestors = get_ancestors( $term->id, $term->taxonomy );
|
@@ -88,98 +82,22 @@ class Tribe__Ajax__Dropdown {
|
|
88 |
}
|
89 |
}
|
90 |
|
91 |
-
$data['results']
|
92 |
$data['taxonomies'] = get_taxonomies();
|
93 |
|
94 |
return $data;
|
95 |
}
|
96 |
|
97 |
/**
|
98 |
-
*
|
99 |
-
*
|
100 |
-
* @since 4.12.17
|
101 |
-
*
|
102 |
-
* @param string|array<string,mixed> $search Search string from Select2.
|
103 |
-
* @param int $page Page we want when we're dealing with pagination.
|
104 |
-
* @param array<string,mixed> $args Arguments to pass to the query.
|
105 |
-
* @param string|int $selected Selected item ID.
|
106 |
-
*
|
107 |
-
* @return array<string|mixed> An Array of results.
|
108 |
-
*/
|
109 |
-
public function search_posts( $search, $page = 1, $args = [], $selected = null ) {
|
110 |
-
if ( ! empty( $search ) ) {
|
111 |
-
if ( is_array( $search ) ) {
|
112 |
-
// Newer SelectWoo uses a new search format.
|
113 |
-
$args['s'] = $search['term']; // post?
|
114 |
-
} else {
|
115 |
-
// For older pieces that still use Select2 format.
|
116 |
-
$args['s'] = $search;
|
117 |
-
}
|
118 |
-
}
|
119 |
-
|
120 |
-
$args['paged'] = $page;
|
121 |
-
$args['update_post_meta_cache'] = false;
|
122 |
-
$args['update_post_term_cache'] = false;
|
123 |
-
|
124 |
-
$results = new WP_Query( $args );
|
125 |
-
$has_pagination = $results->post_count < $results->found_posts;
|
126 |
-
|
127 |
-
return $this->format_posts_for_dropdown( $results->posts, $selected, $has_pagination );
|
128 |
-
}
|
129 |
-
|
130 |
-
/**
|
131 |
-
* Formats a given array of posts to be displayed into the Dropdown.js module with SelectWoo.
|
132 |
-
*
|
133 |
-
* @since 4.12.17
|
134 |
-
*
|
135 |
-
* @param array<WP_Post> $posts
|
136 |
-
* @param null|int $selected
|
137 |
-
* @param boolean $pagination
|
138 |
-
*
|
139 |
-
* @return array
|
140 |
-
*/
|
141 |
-
public function format_posts_for_dropdown( array $posts, $selected = null, $pagination = false ) {
|
142 |
-
$data = [
|
143 |
-
'posts' => [],
|
144 |
-
'pagination' => $pagination,
|
145 |
-
];
|
146 |
-
|
147 |
-
// Skip when we don't have posts
|
148 |
-
if ( empty( $posts ) ) {
|
149 |
-
return $data;
|
150 |
-
}
|
151 |
-
|
152 |
-
foreach ( $posts as $post ) {
|
153 |
-
if ( ! $post instanceof \WP_Post ) {
|
154 |
-
$post = get_post( $post );
|
155 |
-
}
|
156 |
-
|
157 |
-
// Skip non WP Post Objects.
|
158 |
-
if ( ! $post instanceof \WP_Post ) {
|
159 |
-
continue;
|
160 |
-
}
|
161 |
-
|
162 |
-
// Prep for Select2.
|
163 |
-
$data['posts'][] = [
|
164 |
-
'id' => $post->ID,
|
165 |
-
'text' => ! empty( $post->post_title_formatted ) ? $post->post_title_formatted : $post->post_title,
|
166 |
-
'selected' => ! empty( $selected ) && (int) $post->ID === (int) $selected,
|
167 |
-
];
|
168 |
-
}
|
169 |
-
|
170 |
-
return $data;
|
171 |
-
}
|
172 |
-
|
173 |
-
/**
|
174 |
-
* Sorts all the Terms for Select2 hierarchically.
|
175 |
*
|
176 |
* @since 4.6
|
177 |
*
|
178 |
-
* @param
|
179 |
-
* @param
|
180 |
-
* @param
|
181 |
*
|
182 |
-
* @return array
|
183 |
*/
|
184 |
public function sort_terms_hierarchically( &$terms, &$into, $parent = 0 ) {
|
185 |
foreach ( $terms as $i => $term ) {
|
@@ -194,7 +112,7 @@ class Tribe__Ajax__Dropdown {
|
|
194 |
}
|
195 |
|
196 |
foreach ( $into as $term ) {
|
197 |
-
$term->children =
|
198 |
$this->sort_terms_hierarchically( $terms, $term->children, $term->term_id );
|
199 |
}
|
200 |
}
|
@@ -204,16 +122,13 @@ class Tribe__Ajax__Dropdown {
|
|
204 |
*
|
205 |
* @since 4.6
|
206 |
*
|
207 |
-
* @param
|
208 |
*
|
209 |
-
* @return array
|
210 |
*/
|
211 |
public function convert_children_to_array( $results ) {
|
212 |
if ( isset( $results->children ) ) {
|
213 |
$results->children = $this->convert_children_to_array( $results->children );
|
214 |
-
if ( empty( $results->children ) ) {
|
215 |
-
unset( $results->children );
|
216 |
-
}
|
217 |
} else {
|
218 |
foreach ( $results as $key => $item ) {
|
219 |
$item = $this->convert_children_to_array( $item );
|
@@ -221,7 +136,7 @@ class Tribe__Ajax__Dropdown {
|
|
221 |
}
|
222 |
|
223 |
if ( empty( $results ) ) {
|
224 |
-
return
|
225 |
}
|
226 |
|
227 |
return array_values( (array) $results );
|
@@ -232,17 +147,16 @@ class Tribe__Ajax__Dropdown {
|
|
232 |
*
|
233 |
* @since 4.6
|
234 |
*
|
235 |
-
* @param
|
236 |
-
*
|
237 |
* @return object
|
238 |
*/
|
239 |
public function parse_params( $params ) {
|
240 |
-
$defaults =
|
241 |
'search' => null,
|
242 |
'page' => 0,
|
243 |
-
'args' =>
|
244 |
'source' => null,
|
245 |
-
|
246 |
|
247 |
$arguments = wp_parse_args( $params, $defaults );
|
248 |
|
@@ -260,21 +174,21 @@ class Tribe__Ajax__Dropdown {
|
|
260 |
*/
|
261 |
public function route() {
|
262 |
// Push all POST params into a Default set of data
|
263 |
-
$args = $this->parse_params( empty( $_POST ) ?
|
264 |
|
265 |
if ( empty( $args->source ) ) {
|
266 |
$this->error( esc_attr__( 'Missing data source for this dropdown', 'tribe-common' ) );
|
267 |
}
|
268 |
|
269 |
-
// Define a Filter to allow external calls to our Select2
|
270 |
$filter = sanitize_key( 'tribe_dropdown_' . $args->source );
|
271 |
if ( has_filter( $filter ) ) {
|
272 |
-
$data = apply_filters( $filter,
|
273 |
} else {
|
274 |
-
$data = call_user_func_array(
|
275 |
}
|
276 |
|
277 |
-
//
|
278 |
if ( empty( $data ) ) {
|
279 |
$this->error( esc_attr__( 'Empty data set for this dropdown', 'tribe-common' ) );
|
280 |
} else {
|
@@ -285,36 +199,33 @@ class Tribe__Ajax__Dropdown {
|
|
285 |
/**
|
286 |
* Prints a success message and ensures that we don't hit bugs on Select2
|
287 |
*
|
288 |
-
* @since
|
289 |
-
*
|
290 |
-
* @param array $data
|
291 |
*
|
|
|
292 |
* @return void
|
293 |
*/
|
294 |
private function success( $data ) {
|
295 |
// We need a Results item for Select2 Work
|
296 |
if ( ! isset( $data['results'] ) ) {
|
297 |
-
$data['results'] =
|
298 |
}
|
299 |
|
300 |
wp_send_json_success( $data );
|
301 |
}
|
302 |
|
303 |
/**
|
304 |
-
* Prints
|
305 |
*
|
306 |
* @since 4.6
|
307 |
*
|
308 |
-
* @param
|
309 |
-
*
|
310 |
* @return void
|
311 |
*/
|
312 |
private function error( $message ) {
|
313 |
-
$data =
|
314 |
'message' => $message,
|
315 |
-
'results' =>
|
316 |
-
|
317 |
-
|
318 |
wp_send_json_error( $data );
|
319 |
}
|
320 |
|
@@ -323,14 +234,13 @@ class Tribe__Ajax__Dropdown {
|
|
323 |
*
|
324 |
* @since 4.6
|
325 |
*
|
326 |
-
* @param
|
327 |
-
* @param
|
328 |
*
|
329 |
* @return void
|
330 |
*/
|
331 |
public function __call( $name, $arguments ) {
|
332 |
$message = __( 'The "%s" source is invalid and cannot be reached on "%s" instance.', 'tribe-common' );
|
333 |
-
|
334 |
return $this->error( sprintf( $message, $name, __CLASS__ ) );
|
335 |
}
|
336 |
}
|
15 |
* @return void
|
16 |
*/
|
17 |
public function hook() {
|
18 |
+
add_action( 'wp_ajax_tribe_dropdown', array( $this, 'route' ) );
|
19 |
+
add_action( 'wp_ajax_nopriv_tribe_dropdown', array( $this, 'route' ) );
|
20 |
}
|
21 |
|
22 |
/**
|
24 |
*
|
25 |
* @since 4.6
|
26 |
*
|
27 |
+
* @param string $search Search string from Select2
|
28 |
+
* @param int $page When we deal with pagination
|
29 |
+
* @param array $args Which arguments we got from the Template
|
30 |
+
* @param string $source What source it is
|
31 |
*
|
32 |
+
* @return array
|
33 |
*/
|
34 |
public function search_terms( $search, $page, $args, $source ) {
|
35 |
+
$data = array();
|
36 |
|
37 |
if ( empty( $args['taxonomy'] ) ) {
|
38 |
$this->error( esc_attr__( 'Cannot look for Terms without a taxonomy', 'tribe-common' ) );
|
39 |
}
|
40 |
|
41 |
// We always want all the fields so we overwrite it
|
42 |
+
$args['fields'] = isset( $args['fields'] ) ? $args['fields'] : 'all';
|
43 |
$args['hide_empty'] = isset( $args['hide_empty'] ) ? $args['hide_empty'] : false;
|
44 |
|
45 |
if ( ! empty( $search ) ) {
|
46 |
+
$args['search'] = $search;
|
|
|
|
|
|
|
|
|
|
|
|
|
47 |
}
|
48 |
|
49 |
// On versions older than 4.5 taxonomy goes as an Param
|
53 |
$terms = get_terms( $args );
|
54 |
}
|
55 |
|
56 |
+
$results = array();
|
57 |
|
58 |
// Respect the parent/child_of argument if set
|
59 |
$parent = ! empty( $args['child_of'] ) ? (int) $args['child_of'] : 0;
|
67 |
// Prep for Select2
|
68 |
$term->id = $term->term_id;
|
69 |
$term->text = $term->name;
|
70 |
+
$term->breadcrumbs = array();
|
71 |
|
72 |
if ( 0 !== (int) $term->parent ) {
|
73 |
$ancestors = get_ancestors( $term->id, $term->taxonomy );
|
82 |
}
|
83 |
}
|
84 |
|
85 |
+
$data['results'] = $results;
|
86 |
$data['taxonomies'] = get_taxonomies();
|
87 |
|
88 |
return $data;
|
89 |
}
|
90 |
|
91 |
/**
|
92 |
+
* Sorts Hierarchically all the Terms for Select2
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
93 |
*
|
94 |
* @since 4.6
|
95 |
*
|
96 |
+
* @param array &$terms Array of Terms from `get_terms`
|
97 |
+
* @param array &$into Variable where we will store the
|
98 |
+
* @param integer $parent Used for the recursion
|
99 |
*
|
100 |
+
* @return array
|
101 |
*/
|
102 |
public function sort_terms_hierarchically( &$terms, &$into, $parent = 0 ) {
|
103 |
foreach ( $terms as $i => $term ) {
|
112 |
}
|
113 |
|
114 |
foreach ( $into as $term ) {
|
115 |
+
$term->children = array();
|
116 |
$this->sort_terms_hierarchically( $terms, $term->children, $term->term_id );
|
117 |
}
|
118 |
}
|
122 |
*
|
123 |
* @since 4.6
|
124 |
*
|
125 |
+
* @param array $results The Select2
|
126 |
*
|
127 |
+
* @return array
|
128 |
*/
|
129 |
public function convert_children_to_array( $results ) {
|
130 |
if ( isset( $results->children ) ) {
|
131 |
$results->children = $this->convert_children_to_array( $results->children );
|
|
|
|
|
|
|
132 |
} else {
|
133 |
foreach ( $results as $key => $item ) {
|
134 |
$item = $this->convert_children_to_array( $item );
|
136 |
}
|
137 |
|
138 |
if ( empty( $results ) ) {
|
139 |
+
return array();
|
140 |
}
|
141 |
|
142 |
return array_values( (array) $results );
|
147 |
*
|
148 |
* @since 4.6
|
149 |
*
|
150 |
+
* @param array $params Params to overwrite the defaults
|
|
|
151 |
* @return object
|
152 |
*/
|
153 |
public function parse_params( $params ) {
|
154 |
+
$defaults = array(
|
155 |
'search' => null,
|
156 |
'page' => 0,
|
157 |
+
'args' => array(),
|
158 |
'source' => null,
|
159 |
+
);
|
160 |
|
161 |
$arguments = wp_parse_args( $params, $defaults );
|
162 |
|
174 |
*/
|
175 |
public function route() {
|
176 |
// Push all POST params into a Default set of data
|
177 |
+
$args = $this->parse_params( empty( $_POST ) ? array() : $_POST );
|
178 |
|
179 |
if ( empty( $args->source ) ) {
|
180 |
$this->error( esc_attr__( 'Missing data source for this dropdown', 'tribe-common' ) );
|
181 |
}
|
182 |
|
183 |
+
// Define a Filter to allow external calls to our Select2 Dropboxes
|
184 |
$filter = sanitize_key( 'tribe_dropdown_' . $args->source );
|
185 |
if ( has_filter( $filter ) ) {
|
186 |
+
$data = apply_filters( $filter, array(), $args->search, $args->page, $args->args, $args->source );
|
187 |
} else {
|
188 |
+
$data = call_user_func_array( array( $this, $args->source ), (array) $args );
|
189 |
}
|
190 |
|
191 |
+
// if we got a empty dataset we return an error
|
192 |
if ( empty( $data ) ) {
|
193 |
$this->error( esc_attr__( 'Empty data set for this dropdown', 'tribe-common' ) );
|
194 |
} else {
|
199 |
/**
|
200 |
* Prints a success message and ensures that we don't hit bugs on Select2
|
201 |
*
|
202 |
+
* @since 4.6
|
|
|
|
|
203 |
*
|
204 |
+
* @param array $data
|
205 |
* @return void
|
206 |
*/
|
207 |
private function success( $data ) {
|
208 |
// We need a Results item for Select2 Work
|
209 |
if ( ! isset( $data['results'] ) ) {
|
210 |
+
$data['results'] = array();
|
211 |
}
|
212 |
|
213 |
wp_send_json_success( $data );
|
214 |
}
|
215 |
|
216 |
/**
|
217 |
+
* Prints a error message and ensures that we don't hit bugs on Select2
|
218 |
*
|
219 |
* @since 4.6
|
220 |
*
|
221 |
+
* @param array $data
|
|
|
222 |
* @return void
|
223 |
*/
|
224 |
private function error( $message ) {
|
225 |
+
$data = array(
|
226 |
'message' => $message,
|
227 |
+
'results' => array(),
|
228 |
+
);
|
|
|
229 |
wp_send_json_error( $data );
|
230 |
}
|
231 |
|
234 |
*
|
235 |
* @since 4.6
|
236 |
*
|
237 |
+
* @param string $name
|
238 |
+
* @param mixed $arguments
|
239 |
*
|
240 |
* @return void
|
241 |
*/
|
242 |
public function __call( $name, $arguments ) {
|
243 |
$message = __( 'The "%s" source is invalid and cannot be reached on "%s" instance.', 'tribe-common' );
|
|
|
244 |
return $this->error( sprintf( $message, $name, __CLASS__ ) );
|
245 |
}
|
246 |
}
|
common/src/Tribe/Ajax/Operations.php
CHANGED
@@ -8,7 +8,7 @@
|
|
8 |
*/
|
9 |
class Tribe__Ajax__Operations {
|
10 |
|
11 |
-
public function verify_or_exit( $nonce, $action, $exit_data =
|
12 |
if ( ! wp_verify_nonce( $nonce, $action ) ) {
|
13 |
exit( $exit_data );
|
14 |
}
|
@@ -16,7 +16,7 @@ class Tribe__Ajax__Operations {
|
|
16 |
return true;
|
17 |
}
|
18 |
|
19 |
-
public function exit_data( $data =
|
20 |
exit( $data );
|
21 |
}
|
22 |
}
|
8 |
*/
|
9 |
class Tribe__Ajax__Operations {
|
10 |
|
11 |
+
public function verify_or_exit( $nonce, $action, $exit_data = array() ) {
|
12 |
if ( ! wp_verify_nonce( $nonce, $action ) ) {
|
13 |
exit( $exit_data );
|
14 |
}
|
16 |
return true;
|
17 |
}
|
18 |
|
19 |
+
public function exit_data( $data = array() ) {
|
20 |
exit( $data );
|
21 |
}
|
22 |
}
|
common/src/Tribe/App_Shop.php
CHANGED
@@ -33,8 +33,8 @@ if ( ! class_exists( 'Tribe__App_Shop' ) ) {
|
|
33 |
* Class constructor
|
34 |
*/
|
35 |
public function __construct() {
|
36 |
-
add_action( 'admin_menu',
|
37 |
-
add_action( 'wp_before_admin_bar_render',
|
38 |
|
39 |
$this->register_assets();
|
40 |
}
|
@@ -53,17 +53,7 @@ if ( ! class_exists( 'Tribe__App_Shop' ) ) {
|
|
53 |
|
54 |
$where = Tribe__Settings::instance()->get_parent_slug();
|
55 |
|
56 |
-
$this->admin_page = add_submenu_page(
|
57 |
-
$where,
|
58 |
-
$page_title,
|
59 |
-
$menu_title,
|
60 |
-
$capability,
|
61 |
-
self::MENU_SLUG,
|
62 |
-
[
|
63 |
-
$this,
|
64 |
-
'do_menu_page',
|
65 |
-
]
|
66 |
-
);
|
67 |
}
|
68 |
|
69 |
/**
|
@@ -77,12 +67,12 @@ if ( ! class_exists( 'Tribe__App_Shop' ) ) {
|
|
77 |
if ( current_user_can( $capability ) ) {
|
78 |
global $wp_admin_bar;
|
79 |
|
80 |
-
$wp_admin_bar->add_menu(
|
81 |
'id' => 'tribe-events-app-shop',
|
82 |
'title' => esc_html__( 'Event Add-Ons', 'tribe-common' ),
|
83 |
-
'href' => Tribe__Settings::instance()->get_url(
|
84 |
'parent' => 'tribe-events-settings-group',
|
85 |
-
|
86 |
}
|
87 |
}
|
88 |
|
@@ -92,14 +82,14 @@ if ( ! class_exists( 'Tribe__App_Shop' ) ) {
|
|
92 |
protected function register_assets() {
|
93 |
tribe_assets(
|
94 |
Tribe__Main::instance(),
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
'admin_enqueue_scripts',
|
100 |
-
|
101 |
-
'conditionals' =>
|
102 |
-
|
103 |
);
|
104 |
}
|
105 |
|
@@ -133,172 +123,32 @@ if ( ! class_exists( 'Tribe__App_Shop' ) ) {
|
|
133 |
public function do_menu_page() {
|
134 |
$main = Tribe__Main::instance();
|
135 |
$products = $this->get_all_products();
|
136 |
-
$bundles = $this->get_bundles();
|
137 |
-
$extensions = $this->get_extensions();
|
138 |
include_once Tribe__Main::instance()->plugin_path . 'src/admin-views/app-shop.php';
|
139 |
}
|
140 |
|
141 |
/**
|
142 |
-
*
|
143 |
*
|
144 |
* @return array|WP_Error
|
145 |
*/
|
146 |
private function get_all_products() {
|
147 |
$all_products = tribe( 'plugins.api' )->get_products();
|
148 |
|
149 |
-
$products =
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
'tribe-eventbrite' => (object) $all_products['tribe-eventbrite'],
|
161 |
-
'image-widget-plus' => (object) $all_products['image-widget-plus'],
|
162 |
-
];
|
163 |
|
164 |
return $products;
|
165 |
}
|
166 |
|
167 |
-
/**
|
168 |
-
* Gets product bundles
|
169 |
-
*
|
170 |
-
* @return array|WP_Error
|
171 |
-
*/
|
172 |
-
private function get_bundles() {
|
173 |
-
$bundles = [
|
174 |
-
(object) [
|
175 |
-
'title' => __( 'Events Marketing Bundle', 'tribe-common' ),
|
176 |
-
'logo' => 'images/logo/bundle-event-marketing.svg',
|
177 |
-
'link' => 'https://evnt.is/1aj3',
|
178 |
-
'discount' => __( 'Save over 20%', 'tribe-common' ),
|
179 |
-
'description' => __( 'Ticket sales, attendee management, and email marketing for your events', 'tribe-common' ),
|
180 |
-
'includes' => [
|
181 |
-
'events-calendar-pro',
|
182 |
-
'event-tickets-plus',
|
183 |
-
'promoter',
|
184 |
-
],
|
185 |
-
],
|
186 |
-
(object) [
|
187 |
-
'title' => __( 'Event Importer Bundle', 'tribe-common' ),
|
188 |
-
'logo' => 'images/logo/bundle-event-importer.svg',
|
189 |
-
'link' => 'https://evnt.is/1aj2',
|
190 |
-
'discount' => __( 'Save over 25%', 'tribe-common' ),
|
191 |
-
'description' => __( 'Fill your calendar with events from across the web, including Google Calendar, Meetup, and more.', 'tribe-common' ),
|
192 |
-
'includes' => [
|
193 |
-
'events-calendar-pro',
|
194 |
-
'tribe-filterbar',
|
195 |
-
'event-aggregator'
|
196 |
-
],
|
197 |
-
],
|
198 |
-
(object) [
|
199 |
-
'title' => __( 'Virtual Events Marketing Bundle', 'tribe-common' ),
|
200 |
-
'logo' => 'images/logo/bundle-virtual-events.svg',
|
201 |
-
'link' => 'http://evnt.is/ve-bundle',
|
202 |
-
'discount' => __( 'Save over 20%', 'tribe-common' ),
|
203 |
-
'description' => __( 'Streamline your online events and increase revenue.', 'tribe-common' ),
|
204 |
-
'includes' => [
|
205 |
-
'events-calendar-pro',
|
206 |
-
'event-tickets-plus',
|
207 |
-
'events-virtual',
|
208 |
-
'promoter',
|
209 |
-
],
|
210 |
-
'features' => [
|
211 |
-
__( 'Sell tickets and earn revenue for online events', 'tribe-common' ),
|
212 |
-
__( 'Zoom integration', 'tribe-common' ),
|
213 |
-
__( 'Automated emails optimized for virtual events', 'tribe-common' ),
|
214 |
-
__( 'Add recurring events', 'tribe-common' ),
|
215 |
-
],
|
216 |
-
],
|
217 |
-
(object) [
|
218 |
-
'title' => __( 'Community Manager Bundle', 'tribe-common' ),
|
219 |
-
'logo' => 'images/logo/bundle-community-manager.svg',
|
220 |
-
'link' => 'https://evnt.is/1aj4',
|
221 |
-
'discount' => __( 'Save over 20%', 'tribe-common' ), /* code review: fix this */
|
222 |
-
'description' => __( 'Handle event submissions with ticket sales and everything you need to build a robust community.', 'tribe-common' ),
|
223 |
-
'includes' => [
|
224 |
-
'event-tickets-plus',
|
225 |
-
'events-community',
|
226 |
-
'events-community-tickets',
|
227 |
-
'tribe-filterbar',
|
228 |
-
],
|
229 |
-
],
|
230 |
-
(object) [
|
231 |
-
'title' => __( 'Ultimate Bundle', 'tribe-common' ),
|
232 |
-
'logo' => 'images/logo/bundle-ultimate.svg',
|
233 |
-
'link' => 'https://evnt.is/1aj5',
|
234 |
-
'discount' => __( 'Save over 20%', 'tribe-common' ), /* code review: fix this */
|
235 |
-
'description' => __( 'All of our premium events management plugins at a deep discount.', 'tribe-common' ),
|
236 |
-
'includes' => [
|
237 |
-
'events-calendar-pro',
|
238 |
-
'event-tickets-plus',
|
239 |
-
//'events-virtual', // not yet added to the bundle
|
240 |
-
'events-community',
|
241 |
-
'events-community-tickets',
|
242 |
-
'tribe-filterbar',
|
243 |
-
'event-aggregator',
|
244 |
-
'tribe-eventbrite',
|
245 |
-
//'promoter', // not yet added to the bundle
|
246 |
-
],
|
247 |
-
],
|
248 |
-
|
249 |
-
];
|
250 |
-
|
251 |
-
return $bundles;
|
252 |
-
}
|
253 |
-
|
254 |
-
/**
|
255 |
-
* Gets product extensions
|
256 |
-
*
|
257 |
-
* @return array|WP_Error
|
258 |
-
*/
|
259 |
-
private function get_extensions() {
|
260 |
-
$extensions = [
|
261 |
-
(object) [
|
262 |
-
'title' => __( 'Website URL CTA', 'tribe-common' ),
|
263 |
-
'link' => 'https://evnt.is/1aj6',
|
264 |
-
'image' => 'images/shop/extension-web-url-cta.jpg',
|
265 |
-
'description' => __( 'Create a strong call-to-action for attendees to "Join Webinar" instead of only sharing a website address.', 'tribe-common' ),
|
266 |
-
],
|
267 |
-
(object) [
|
268 |
-
'title' => __( 'Link Directly to Webinar', 'tribe-common' ),
|
269 |
-
'link' => 'https://evnt.is/1aj7',
|
270 |
-
'image' => 'images/shop/extension-link-to-webinar.jpg',
|
271 |
-
'description' => __( 'When users click on the event title, they’ll be taken right to the source of your event, offering a direct route to join.', 'tribe-common' ),
|
272 |
-
],
|
273 |
-
(object) [
|
274 |
-
'title' => __( 'Events Happening Now', 'tribe-common' ),
|
275 |
-
'link' => 'https://evnt.is/1aj8',
|
276 |
-
'image' => 'images/shop/extension-events-happening-now.jpg',
|
277 |
-
'description' => __( 'Use this shortcode to display events that are currently in progress, like webinars and livestreams.', 'tribe-common' ),
|
278 |
-
],
|
279 |
-
(object) [
|
280 |
-
'title' => __( 'Custom Venue Links', 'tribe-common' ),
|
281 |
-
'link' => 'https://evnt.is/1aj9',
|
282 |
-
'image' => 'images/shop/extension-custom-venue-links.jpg',
|
283 |
-
'description' => __( 'Turn the venue name for your event into a clickable URL — a great way to link directly to a venue’s website or a virtual meeting.', 'tribe-common' ),
|
284 |
-
],
|
285 |
-
(object) [
|
286 |
-
'title' => __( 'Adjust Label', 'tribe-common' ),
|
287 |
-
'link' => 'https://evnt.is/1aja',
|
288 |
-
'image' => 'images/shop/extension-change-label.jpg',
|
289 |
-
'description' => __( 'Change "Events" to "Webinars," or "Venues" to "Livestream," or "Organizers" to "Hosts." Tailor your calendar for virtual events and meetings.', 'tribe-common' ),
|
290 |
-
],
|
291 |
-
(object) [
|
292 |
-
'title' => __( 'Reach Attendees', 'tribe-common' ),
|
293 |
-
'link' => 'https://evnt.is/1ajc',
|
294 |
-
'image' => 'images/shop/extension-advanced-options.jpg',
|
295 |
-
'description' => __( 'From registration to attendance history, view every step of the event lifecycle with this HubSpot integration.', 'tribe-common' ),
|
296 |
-
],
|
297 |
-
];
|
298 |
-
|
299 |
-
return $extensions;
|
300 |
-
}
|
301 |
-
|
302 |
/**
|
303 |
* Static Singleton Factory Method
|
304 |
*
|
33 |
* Class constructor
|
34 |
*/
|
35 |
public function __construct() {
|
36 |
+
add_action( 'admin_menu', array( $this, 'add_menu_page' ), 100 );
|
37 |
+
add_action( 'wp_before_admin_bar_render', array( $this, 'add_toolbar_item' ), 20 );
|
38 |
|
39 |
$this->register_assets();
|
40 |
}
|
53 |
|
54 |
$where = Tribe__Settings::instance()->get_parent_slug();
|
55 |
|
56 |
+
$this->admin_page = add_submenu_page( $where, $page_title, $menu_title, $capability, self::MENU_SLUG, array( $this, 'do_menu_page' ) );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
57 |
}
|
58 |
|
59 |
/**
|
67 |
if ( current_user_can( $capability ) ) {
|
68 |
global $wp_admin_bar;
|
69 |
|
70 |
+
$wp_admin_bar->add_menu( array(
|
71 |
'id' => 'tribe-events-app-shop',
|
72 |
'title' => esc_html__( 'Event Add-Ons', 'tribe-common' ),
|
73 |
+
'href' => Tribe__Settings::instance()->get_url( array( 'page' => self::MENU_SLUG ) ),
|
74 |
'parent' => 'tribe-events-settings-group',
|
75 |
+
) );
|
76 |
}
|
77 |
}
|
78 |
|
82 |
protected function register_assets() {
|
83 |
tribe_assets(
|
84 |
Tribe__Main::instance(),
|
85 |
+
array(
|
86 |
+
array( 'tribe-app-shop-css', 'app-shop.css' ),
|
87 |
+
array( 'tribe-app-shop-js', 'app-shop.js', array( 'jquery' ) ),
|
88 |
+
),
|
89 |
'admin_enqueue_scripts',
|
90 |
+
array(
|
91 |
+
'conditionals' => array( $this, 'is_current_page' ),
|
92 |
+
)
|
93 |
);
|
94 |
}
|
95 |
|
123 |
public function do_menu_page() {
|
124 |
$main = Tribe__Main::instance();
|
125 |
$products = $this->get_all_products();
|
|
|
|
|
126 |
include_once Tribe__Main::instance()->plugin_path . 'src/admin-views/app-shop.php';
|
127 |
}
|
128 |
|
129 |
/**
|
130 |
+
* Get's all products from the API
|
131 |
*
|
132 |
* @return array|WP_Error
|
133 |
*/
|
134 |
private function get_all_products() {
|
135 |
$all_products = tribe( 'plugins.api' )->get_products();
|
136 |
|
137 |
+
$products = array(
|
138 |
+
(object) $all_products['event-aggregator'],
|
139 |
+
(object) $all_products['events-calendar-pro'],
|
140 |
+
(object) $all_products['event-tickets-plus'],
|
141 |
+
(object) $all_products['promoter'],
|
142 |
+
(object) $all_products['tribe-filterbar'],
|
143 |
+
(object) $all_products['events-community'],
|
144 |
+
(object) $all_products['events-community-tickets'],
|
145 |
+
(object) $all_products['tribe-eventbrite'],
|
146 |
+
(object) $all_products['image-widget-plus'],
|
147 |
+
);
|
|
|
|
|
|
|
148 |
|
149 |
return $products;
|
150 |
}
|
151 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
152 |
/**
|
153 |
* Static Singleton Factory Method
|
154 |
*
|
common/src/Tribe/Asset/Data.php
CHANGED
@@ -1,67 +1,67 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Handles adding script data to the page in cases where localizing a
|
4 |
-
* specific script is not suitable.
|
5 |
-
*
|
6 |
-
* Should generally be accessed via tribe( 'tribe.asset.script-data' )
|
7 |
-
* rather than via direct instantiation.
|
8 |
-
*/
|
9 |
-
class Tribe__Asset__Data {
|
10 |
-
/**
|
11 |
-
* Container for any JS data objects that should be added to the page.
|
12 |
-
*
|
13 |
-
* @var array
|
14 |
-
*/
|
15 |
-
protected $objects =
|
16 |
-
|
17 |
-
/**
|
18 |
-
* Hooks up the method used to actually render the JSON data.
|
19 |
-
*/
|
20 |
-
public function hook() {
|
21 |
-
if ( is_admin() ) {
|
22 |
-
add_action( 'admin_footer',
|
23 |
-
add_action( 'customize_controls_print_footer_scripts',
|
24 |
-
} else {
|
25 |
-
add_action( 'wp_footer',
|
26 |
-
}
|
27 |
-
}
|
28 |
-
|
29 |
-
/**
|
30 |
-
* Adds the provided data to the list of objects that should be available
|
31 |
-
* to other scripts.
|
32 |
-
*
|
33 |
-
* @param string $object_name Object name.
|
34 |
-
* @param array $data Object data.
|
35 |
-
*/
|
36 |
-
public function add( $object_name, $data ) {
|
37 |
-
/**
|
38 |
-
* Allow plugins to filter data for a specific object.
|
39 |
-
*
|
40 |
-
* @since 4.8.4
|
41 |
-
*
|
42 |
-
* @param array $data Object data.
|
43 |
-
* @param string $object_name Object name.
|
44 |
-
*/
|
45 |
-
$data = apply_filters( "tribe_asset_data_add_object_{$object_name}", $data, $object_name );
|
46 |
-
|
47 |
-
$this->objects[ $object_name ] = $data;
|
48 |
-
}
|
49 |
-
|
50 |
-
/**
|
51 |
-
* Outputs the
|
52 |
-
* @internal
|
53 |
-
*/
|
54 |
-
public function render_json() {
|
55 |
-
if ( empty( $this->objects ) ) {
|
56 |
-
return;
|
57 |
-
}
|
58 |
-
|
59 |
-
echo '<script> /* <![CDATA[ */';
|
60 |
-
|
61 |
-
foreach ( $this->objects as $object_name => $data ) {
|
62 |
-
echo 'var ' . esc_html( $object_name ) . ' = ' . wp_json_encode( $data ) . ';';
|
63 |
-
}
|
64 |
-
|
65 |
-
echo '/* ]]> */ </script>';
|
66 |
-
}
|
67 |
-
}
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Handles adding script data to the page in cases where localizing a
|
4 |
+
* specific script is not suitable.
|
5 |
+
*
|
6 |
+
* Should generally be accessed via tribe( 'tribe.asset.script-data' )
|
7 |
+
* rather than via direct instantiation.
|
8 |
+
*/
|
9 |
+
class Tribe__Asset__Data {
|
10 |
+
/**
|
11 |
+
* Container for any JS data objects that should be added to the page.
|
12 |
+
*
|
13 |
+
* @var array
|
14 |
+
*/
|
15 |
+
protected $objects = array();
|
16 |
+
|
17 |
+
/**
|
18 |
+
* Hooks up the method used to actually render the JSON data.
|
19 |
+
*/
|
20 |
+
public function hook() {
|
21 |
+
if ( is_admin() ) {
|
22 |
+
add_action( 'admin_footer', array( $this, 'render_json' ) );
|
23 |
+
add_action( 'customize_controls_print_footer_scripts', array( $this, 'render_json' ) );
|
24 |
+
} else {
|
25 |
+
add_action( 'wp_footer', array( $this, 'render_json' ) );
|
26 |
+
}
|
27 |
+
}
|
28 |
+
|
29 |
+
/**
|
30 |
+
* Adds the provided data to the list of objects that should be available
|
31 |
+
* to other scripts.
|
32 |
+
*
|
33 |
+
* @param string $object_name Object name.
|
34 |
+
* @param array $data Object data.
|
35 |
+
*/
|
36 |
+
public function add( $object_name, $data ) {
|
37 |
+
/**
|
38 |
+
* Allow plugins to filter data for a specific object.
|
39 |
+
*
|
40 |
+
* @since 4.8.4
|
41 |
+
*
|
42 |
+
* @param array $data Object data.
|
43 |
+
* @param string $object_name Object name.
|
44 |
+
*/
|
45 |
+
$data = apply_filters( "tribe_asset_data_add_object_{$object_name}", $data, $object_name );
|
46 |
+
|
47 |
+
$this->objects[ $object_name ] = $data;
|
48 |
+
}
|
49 |
+
|
50 |
+
/**
|
51 |
+
* Outputs the
|
52 |
+
* @internal
|
53 |
+
*/
|
54 |
+
public function render_json() {
|
55 |
+
if ( empty( $this->objects ) ) {
|
56 |
+
return;
|
57 |
+
}
|
58 |
+
|
59 |
+
echo '<script> /* <![CDATA[ */';
|
60 |
+
|
61 |
+
foreach ( $this->objects as $object_name => $data ) {
|
62 |
+
echo 'var ' . esc_html( $object_name ) . ' = ' . wp_json_encode( $data ) . ';';
|
63 |
+
}
|
64 |
+
|
65 |
+
echo '/* ]]> */ </script>';
|
66 |
+
}
|
67 |
+
}
|
common/src/Tribe/Assets.php
CHANGED
@@ -38,121 +38,6 @@ class Tribe__Assets {
|
|
38 |
public function __construct() {
|
39 |
// Hook the actual registering of.
|
40 |
add_action( 'init', [ $this, 'register_in_wp' ], 1, 0 );
|
41 |
-
add_filter( 'script_loader_tag', [ $this, 'filter_tag_async_defer' ], 50, 2 );
|
42 |
-
|
43 |
-
// Enqueue late.
|
44 |
-
add_filter( 'script_loader_tag', [ $this, 'filter_add_localization_data' ], 500, 2 );
|
45 |
-
}
|
46 |
-
|
47 |
-
/**
|
48 |
-
* Handles adding localization data, when attached to `script_loader_tag` which allows dependencies to load in their
|
49 |
-
* localization data as well.
|
50 |
-
*
|
51 |
-
* @since 4.13.0
|
52 |
-
*
|
53 |
-
* @param string $tag Tag we are filtering.
|
54 |
-
* @param string $handle Which is the ID/Handle of the tag we are about to print.
|
55 |
-
*
|
56 |
-
* @return string Script tag with the localization variable HTML attached to it.
|
57 |
-
*/
|
58 |
-
public function filter_add_localization_data( $tag, $handle ) {
|
59 |
-
// Only filter for own own filters.
|
60 |
-
if ( ! $asset = $this->get( $handle ) ) {
|
61 |
-
return $tag;
|
62 |
-
}
|
63 |
-
|
64 |
-
// Bail when not dealing with JS assets.
|
65 |
-
if ( 'js' !== $asset->type ) {
|
66 |
-
return $tag;
|
67 |
-
}
|
68 |
-
|
69 |
-
// Only localize on JS and if we have data.
|
70 |
-
if ( empty( $asset->localize ) ) {
|
71 |
-
return $tag;
|
72 |
-
}
|
73 |
-
|
74 |
-
global $wp_scripts;
|
75 |
-
|
76 |
-
// Makes sure we have an Array of Localize data.
|
77 |
-
if ( is_object( $asset->localize ) ) {
|
78 |
-
$localization = [ $asset->localize ];
|
79 |
-
} else {
|
80 |
-
$localization = (array) $asset->localize;
|
81 |
-
}
|
82 |
-
|
83 |
-
/**
|
84 |
-
* Check to ensure we haven't already localized it before.
|
85 |
-
*
|
86 |
-
* @since 4.5.8
|
87 |
-
*/
|
88 |
-
foreach ( $localization as $localize ) {
|
89 |
-
if ( in_array( $localize->name, $this->localized ) ) {
|
90 |
-
continue;
|
91 |
-
}
|
92 |
-
|
93 |
-
// If we have a Callable as the Localize data we execute it.
|
94 |
-
if ( is_callable( $localize->data ) ) {
|
95 |
-
$localize->data = call_user_func( $localize->data, $asset );
|
96 |
-
}
|
97 |
-
|
98 |
-
wp_localize_script( $asset->slug, $localize->name, $localize->data );
|
99 |
-
|
100 |
-
$this->localized[] = $localize->name;
|
101 |
-
}
|
102 |
-
|
103 |
-
// Fetch the HTML for all the localized data.
|
104 |
-
ob_start();
|
105 |
-
$wp_scripts->print_extra_script( $asset->slug, true );
|
106 |
-
$localization_html = ob_get_clean();
|
107 |
-
|
108 |
-
// After printing it remove data;|
|
109 |
-
$wp_scripts->add_data( $asset->slug, 'data', '' );
|
110 |
-
|
111 |
-
return $localization_html . $tag;
|
112 |
-
}
|
113 |
-
|
114 |
-
/**
|
115 |
-
* Filters the Script tags to attach Async and/or Defer based on the rules we set in our Asset class.
|
116 |
-
*
|
117 |
-
* @since 4.13.0
|
118 |
-
*
|
119 |
-
* @param string $tag Tag we are filtering.
|
120 |
-
* @param string $handle Which is the ID/Handle of the tag we are about to print.
|
121 |
-
*
|
122 |
-
* @return string Script tag with the defer and/or async attached.
|
123 |
-
*/
|
124 |
-
public function filter_tag_async_defer( $tag, $handle ) {
|
125 |
-
// Only filter for own own filters.
|
126 |
-
if ( ! $asset = $this->get( $handle ) ) {
|
127 |
-
return $tag;
|
128 |
-
}
|
129 |
-
|
130 |
-
// Bail when not dealing with JS assets.
|
131 |
-
if ( 'js' !== $asset->type ) {
|
132 |
-
return $tag;
|
133 |
-
}
|
134 |
-
|
135 |
-
// When async and defer are false we bail with the tag.
|
136 |
-
if ( ! $asset->defer && ! $asset->async ) {
|
137 |
-
return $tag;
|
138 |
-
}
|
139 |
-
|
140 |
-
$tag_has_async = false !== strpos( $tag, ' async ' );
|
141 |
-
$tag_has_defer = false !== strpos( $tag, ' defer ' );
|
142 |
-
$replacement = '<script ';
|
143 |
-
|
144 |
-
if ( $asset->async && ! $tag_has_async ) {
|
145 |
-
$replacement .= 'async ';
|
146 |
-
}
|
147 |
-
|
148 |
-
if ( $asset->defer && ! $tag_has_defer ) {
|
149 |
-
$replacement .= 'defer ';
|
150 |
-
}
|
151 |
-
|
152 |
-
$replacement_src = $replacement . 'src=';
|
153 |
-
$replacement_type = $replacement . 'type=';
|
154 |
-
|
155 |
-
return str_replace( [ '<script src=', '<script type=' ], [ $replacement_src, $replacement_type ], $tag );
|
156 |
}
|
157 |
|
158 |
/**
|
@@ -316,7 +201,7 @@ class Tribe__Assets {
|
|
316 |
}
|
317 |
|
318 |
/**
|
319 |
-
* Allows developers to hook-in and prevent an asset from
|
320 |
*
|
321 |
* @since 4.3
|
322 |
*
|
@@ -326,7 +211,7 @@ class Tribe__Assets {
|
|
326 |
$enqueue = apply_filters( 'tribe_asset_enqueue', $enqueue, $asset );
|
327 |
|
328 |
/**
|
329 |
-
* Allows developers to hook-in and prevent an asset from
|
330 |
*
|
331 |
* @since 4.3
|
332 |
*
|
@@ -340,30 +225,40 @@ class Tribe__Assets {
|
|
340 |
}
|
341 |
|
342 |
if ( 'js' === $asset->type ) {
|
343 |
-
if ( $asset->print && ! $asset->already_printed ) {
|
344 |
-
$asset->already_printed = true;
|
345 |
-
wp_print_scripts( [ $asset->slug ] );
|
346 |
-
}
|
347 |
-
// We print first, and tell the system it was enqueued, WP is smart not to do it twice.
|
348 |
wp_enqueue_script( $asset->slug );
|
349 |
|
350 |
-
//
|
351 |
-
if (
|
352 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
353 |
}
|
354 |
} else {
|
355 |
-
if ( $asset->print && ! $asset->already_printed ) {
|
356 |
-
$asset->already_printed = true;
|
357 |
-
wp_print_styles( [ $asset->slug ] );
|
358 |
-
}
|
359 |
-
// We print first, and tell the system it was enqueued, WP is smart not to do it twice.
|
360 |
wp_enqueue_style( $asset->slug );
|
361 |
}
|
362 |
|
363 |
-
if ( ! empty( $asset->after_enqueue ) && is_callable( $asset->after_enqueue ) ) {
|
364 |
-
call_user_func_array( $asset->after_enqueue, [ $asset ] );
|
365 |
-
}
|
366 |
-
|
367 |
$asset->already_enqueued = true;
|
368 |
}
|
369 |
}
|
@@ -539,16 +434,8 @@ class Tribe__Assets {
|
|
539 |
'groups' => [],
|
540 |
'version' => $version,
|
541 |
'media' => 'all',
|
542 |
-
|
543 |
-
'print' => false,
|
544 |
-
|
545 |
-
'async' => false,
|
546 |
-
'defer' => false,
|
547 |
-
|
548 |
'in_footer' => true,
|
549 |
'is_registered' => false,
|
550 |
-
|
551 |
-
// Origin related params
|
552 |
'origin_path' => null,
|
553 |
'origin_url' => null,
|
554 |
'origin_name' => null,
|
@@ -556,14 +443,6 @@ class Tribe__Assets {
|
|
556 |
// Bigger Variables at the end.
|
557 |
'localize' => [],
|
558 |
'conditionals' => [],
|
559 |
-
|
560 |
-
// Used to handle Translations handled in the JavaScript side of the Assets.
|
561 |
-
'translations' => [],
|
562 |
-
|
563 |
-
// Execute after the asset is enqueued.
|
564 |
-
'after_enqueue' => null,
|
565 |
-
'already_enqueued' => false,
|
566 |
-
'already_printed' => false,
|
567 |
];
|
568 |
|
569 |
// Merge Arguments.
|
@@ -598,6 +477,16 @@ class Tribe__Assets {
|
|
598 |
return false;
|
599 |
}
|
600 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
601 |
/**
|
602 |
* Filter to change version number on assets.
|
603 |
*
|
@@ -618,7 +507,7 @@ class Tribe__Assets {
|
|
618 |
$asset->priority = 1;
|
619 |
}
|
620 |
|
621 |
-
$is_vendor = strpos( $asset->file, 'vendor/' ) !== false
|
622 |
|
623 |
// Setup the actual URL.
|
624 |
if ( filter_var( $asset->file, FILTER_VALIDATE_URL ) ) {
|
@@ -642,11 +531,6 @@ class Tribe__Assets {
|
|
642 |
$asset->groups = array_unique( $asset->groups );
|
643 |
}
|
644 |
|
645 |
-
if ( isset( $arguments['translations']['domain'], $arguments['translations']['path'] ) ) {
|
646 |
-
$asset->translations['domain'] = $arguments['translations']['domain'];
|
647 |
-
$asset->translations['path'] = $arguments['translations']['path'];
|
648 |
-
}
|
649 |
-
|
650 |
/**
|
651 |
* Filter an Asset loading variables.
|
652 |
*
|
@@ -789,52 +673,4 @@ class Tribe__Assets {
|
|
789 |
public function exists( $slug ) {
|
790 |
return is_object( $this->get( $slug ) ) ? true : false;
|
791 |
}
|
792 |
-
|
793 |
-
/**
|
794 |
-
* Prints the `script` (JS) and `link` (CSS) HTML tags associated with one or more assets groups.
|
795 |
-
*
|
796 |
-
* The method will force the scripts and styles to print overriding their registration and conditional.
|
797 |
-
*
|
798 |
-
* @since 4.12.6
|
799 |
-
*
|
800 |
-
* @param string|array $group Which group(s) should be enqueued.
|
801 |
-
* @param bool $echo Whether to print the group(s) tag(s) to the page or not; default to `true` to
|
802 |
-
* print the HTML `script` (JS) and `link` (CSS) tags to the page.
|
803 |
-
*
|
804 |
-
* @return string The `script` and `link` HTML tags produced for the group(s).
|
805 |
-
*/
|
806 |
-
public function print_group( $group, $echo = true ) {
|
807 |
-
$all_assets = $this->get();
|
808 |
-
$groups = (array) $group;
|
809 |
-
$to_print = array_filter( $all_assets, static function ( $asset ) use ( $groups ) {
|
810 |
-
return isset( $asset->groups ) && array_intersect( $asset->groups, $groups );
|
811 |
-
} );
|
812 |
-
$by_type = array_reduce( $to_print, static function ( array $acc, \stdClass $asset ) {
|
813 |
-
$acc[ $asset->type ][] = $asset->slug;
|
814 |
-
|
815 |
-
return $acc;
|
816 |
-
}, [ 'css' => [], 'js' => [] ] );
|
817 |
-
|
818 |
-
|
819 |
-
// Make sure each script is registered.
|
820 |
-
foreach ( $to_print as $slug => $data ){
|
821 |
-
if ( $data->is_registered ){
|
822 |
-
continue;
|
823 |
-
}
|
824 |
-
'js' === $data->type
|
825 |
-
? wp_register_script( $slug, $data->file, $data->deps, $data->version )
|
826 |
-
: wp_register_style( $slug, $data->file, $data->deps, $data->version );
|
827 |
-
}
|
828 |
-
|
829 |
-
ob_start();
|
830 |
-
wp_scripts()->do_items( $by_type['js'] );
|
831 |
-
wp_styles()->do_items( $by_type['css'] );
|
832 |
-
$tags = ob_get_clean();
|
833 |
-
|
834 |
-
if ( $echo ) {
|
835 |
-
echo $tags;
|
836 |
-
}
|
837 |
-
|
838 |
-
return $tags;
|
839 |
-
}
|
840 |
}
|
38 |
public function __construct() {
|
39 |
// Hook the actual registering of.
|
40 |
add_action( 'init', [ $this, 'register_in_wp' ], 1, 0 );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
41 |
}
|
42 |
|
43 |
/**
|
201 |
}
|
202 |
|
203 |
/**
|
204 |
+
* Allows developers to hook-in and prevent an asset from been loaded.
|
205 |
*
|
206 |
* @since 4.3
|
207 |
*
|
211 |
$enqueue = apply_filters( 'tribe_asset_enqueue', $enqueue, $asset );
|
212 |
|
213 |
/**
|
214 |
+
* Allows developers to hook-in and prevent an asset from been loaded
|
215 |
*
|
216 |
* @since 4.3
|
217 |
*
|
225 |
}
|
226 |
|
227 |
if ( 'js' === $asset->type ) {
|
|
|
|
|
|
|
|
|
|
|
228 |
wp_enqueue_script( $asset->slug );
|
229 |
|
230 |
+
// Only localize on JS and if we have data.
|
231 |
+
if ( ! empty( $asset->localize ) ) {
|
232 |
+
// Makes sure we have an Array of Localize data.
|
233 |
+
if ( is_object( $asset->localize ) ) {
|
234 |
+
$localization = [ $asset->localize ];
|
235 |
+
} else {
|
236 |
+
$localization = (array) $asset->localize;
|
237 |
+
}
|
238 |
+
|
239 |
+
/**
|
240 |
+
* Check to ensure we haven't already localized it before.
|
241 |
+
*
|
242 |
+
* @since 4.5.8
|
243 |
+
*/
|
244 |
+
foreach ( $localization as $localize ) {
|
245 |
+
if ( in_array( $localize->name, $this->localized ) ) {
|
246 |
+
continue;
|
247 |
+
}
|
248 |
+
|
249 |
+
// If we have a Callable as the Localize data we execute it.
|
250 |
+
if ( is_callable( $localize->data ) ) {
|
251 |
+
$localize->data = call_user_func( $localize->data, $asset );
|
252 |
+
}
|
253 |
+
|
254 |
+
wp_localize_script( $asset->slug, $localize->name, $localize->data );
|
255 |
+
$this->localized[] = $localize->name;
|
256 |
+
}
|
257 |
}
|
258 |
} else {
|
|
|
|
|
|
|
|
|
|
|
259 |
wp_enqueue_style( $asset->slug );
|
260 |
}
|
261 |
|
|
|
|
|
|
|
|
|
262 |
$asset->already_enqueued = true;
|
263 |
}
|
264 |
}
|
434 |
'groups' => [],
|
435 |
'version' => $version,
|
436 |
'media' => 'all',
|
|
|
|
|
|
|
|
|
|
|
|
|
437 |
'in_footer' => true,
|
438 |
'is_registered' => false,
|
|
|
|
|
439 |
'origin_path' => null,
|
440 |
'origin_url' => null,
|
441 |
'origin_name' => null,
|
443 |
// Bigger Variables at the end.
|
444 |
'localize' => [],
|
445 |
'conditionals' => [],
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
446 |
];
|
447 |
|
448 |
// Merge Arguments.
|
477 |
return false;
|
478 |
}
|
479 |
|
480 |
+
/**
|
481 |
+
* Deprecated filter to allow changing version based on the type of Asset.
|
482 |
+
*
|
483 |
+
* @todo remove on 4.6
|
484 |
+
* @deprecated 4.3
|
485 |
+
*
|
486 |
+
* @param string $version
|
487 |
+
*/
|
488 |
+
$asset->version = apply_filters( "tribe_events_{$asset->type}_version", $asset->version );
|
489 |
+
|
490 |
/**
|
491 |
* Filter to change version number on assets.
|
492 |
*
|
507 |
$asset->priority = 1;
|
508 |
}
|
509 |
|
510 |
+
$is_vendor = strpos( $asset->file, 'vendor/' ) !== false ? true : false;
|
511 |
|
512 |
// Setup the actual URL.
|
513 |
if ( filter_var( $asset->file, FILTER_VALIDATE_URL ) ) {
|
531 |
$asset->groups = array_unique( $asset->groups );
|
532 |
}
|
533 |
|
|
|
|
|
|
|
|
|
|
|
534 |
/**
|
535 |
* Filter an Asset loading variables.
|
536 |
*
|
673 |
public function exists( $slug ) {
|
674 |
return is_object( $this->get( $slug ) ) ? true : false;
|
675 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
676 |
}
|
common/src/Tribe/Assets_Pipeline.php
CHANGED
@@ -1,5 +1,4 @@
|
|
1 |
<?php
|
2 |
-
|
3 |
/**
|
4 |
* Class used to hook into the assets being loaded
|
5 |
*
|
@@ -13,8 +12,7 @@ class Tribe__Assets_Pipeline {
|
|
13 |
* @since 4.7.7
|
14 |
*/
|
15 |
public function hook() {
|
16 |
-
add_filter( 'script_loader_tag',
|
17 |
-
add_filter( 'script_loader_tag', [ $this, 'prevent_select2_conflict' ], 10, 2 );
|
18 |
}
|
19 |
|
20 |
/**
|
@@ -23,9 +21,8 @@ class Tribe__Assets_Pipeline {
|
|
23 |
*
|
24 |
* @since 4.7.7
|
25 |
*
|
26 |
-
* @param string $tag
|
27 |
* @param string $handle The script's registered handle.
|
28 |
-
*
|
29 |
* @return string The <script> tag.
|
30 |
*/
|
31 |
public function prevent_underscore_conflict( $tag, $handle ) {
|
@@ -36,31 +33,9 @@ class Tribe__Assets_Pipeline {
|
|
36 |
if ( 'underscore' === $handle ) {
|
37 |
$dir = Tribe__Main::instance()->plugin_url . 'src/resources/js';
|
38 |
$tag = "<script src='{$dir}/underscore-before.js'></script>\n"
|
39 |
-
|
40 |
-
|
41 |
}
|
42 |
-
|
43 |
-
return $tag;
|
44 |
-
}
|
45 |
-
|
46 |
-
/**
|
47 |
-
* After select2 is loaded to the FE we add one scripts after to prevent select2 from breaking.
|
48 |
-
*
|
49 |
-
* @since TBD
|
50 |
-
*
|
51 |
-
* @param string $tag The <script> tag for the enqueued script.
|
52 |
-
* @param string $handle The script's registered handle.
|
53 |
-
*
|
54 |
-
* @return string The <script> tag.
|
55 |
-
*/
|
56 |
-
public function prevent_select2_conflict( $tag, $handle ) {
|
57 |
-
if ( 'tribe-select2' !== $handle ) {
|
58 |
-
return $tag;
|
59 |
-
}
|
60 |
-
|
61 |
-
$dir = Tribe__Main::instance()->plugin_url . 'src/resources/js';
|
62 |
-
$tag .= "<script src='{$dir}/select2-after.js'></script>\n";
|
63 |
-
|
64 |
return $tag;
|
65 |
}
|
66 |
}
|
1 |
<?php
|
|
|
2 |
/**
|
3 |
* Class used to hook into the assets being loaded
|
4 |
*
|
12 |
* @since 4.7.7
|
13 |
*/
|
14 |
public function hook() {
|
15 |
+
add_filter( 'script_loader_tag', array( $this, 'prevent_underscore_conflict' ), 10, 2 );
|
|
|
16 |
}
|
17 |
|
18 |
/**
|
21 |
*
|
22 |
* @since 4.7.7
|
23 |
*
|
24 |
+
* @param string $tag The <script> tag for the enqueued script.
|
25 |
* @param string $handle The script's registered handle.
|
|
|
26 |
* @return string The <script> tag.
|
27 |
*/
|
28 |
public function prevent_underscore_conflict( $tag, $handle ) {
|
33 |
if ( 'underscore' === $handle ) {
|
34 |
$dir = Tribe__Main::instance()->plugin_url . 'src/resources/js';
|
35 |
$tag = "<script src='{$dir}/underscore-before.js'></script>\n"
|
36 |
+
. $tag
|
37 |
+
. "<script src='{$dir}/underscore-after.js'></script>\n";
|
38 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
39 |
return $tag;
|
40 |
}
|
41 |
}
|
common/src/Tribe/Autoloader.php
CHANGED
@@ -53,7 +53,7 @@
|
|
53 |
* An arrays of arrays each containing absolute paths.
|
54 |
*
|
55 |
* Paths are stored trimming any trailing `/`.
|
56 |
-
* E.g. `/var/www/tribe-pro/wp-content/plugins/the-
|
57 |
*
|
58 |
* @var string[][]
|
59 |
*/
|
@@ -77,12 +77,12 @@
|
|
77 |
protected $dir_separator = '__';
|
78 |
|
79 |
/** @var string[] */
|
80 |
-
protected $fallback_dirs =
|
81 |
|
82 |
/**
|
83 |
* @var array
|
84 |
*/
|
85 |
-
protected $class_paths =
|
86 |
|
87 |
/**
|
88 |
* Returns the singleton instance of the class.
|
@@ -121,16 +121,8 @@
|
|
121 |
public function register_prefix( $prefix, $root_dir, $slug = '' ) {
|
122 |
$root_dir = $this->normalize_root_dir( $root_dir );
|
123 |
|
124 |
-
// Determine if we need to normalize the $prefix.
|
125 |
-
$is_namespaced = false !== strpos( $prefix, '\\' );
|
126 |
-
|
127 |
-
if ( $is_namespaced ) {
|
128 |
-
// If the prefix is a namespace, then normalize it.
|
129 |
-
$prefix = trim( $prefix, '\\' ) . '\\';
|
130 |
-
}
|
131 |
-
|
132 |
if ( ! isset( $this->prefixes[ $prefix ] ) ) {
|
133 |
-
$this->prefixes[ $prefix ] =
|
134 |
}
|
135 |
|
136 |
$this->prefixes[ $prefix ][] = $root_dir;
|
@@ -148,7 +140,7 @@
|
|
148 |
* autoload register.
|
149 |
*/
|
150 |
public function register_autoloader() {
|
151 |
-
spl_autoload_register(
|
152 |
}
|
153 |
|
154 |
/**
|
@@ -171,20 +163,11 @@
|
|
171 |
|
172 |
protected function get_prefixed_path( $class ) {
|
173 |
foreach ( $this->prefixes as $prefix => $dirs ) {
|
174 |
-
$is_namespaced = false !== strpos( $prefix, '\\' );
|
175 |
-
|
176 |
if ( strpos( $class, $prefix ) !== 0 ) {
|
177 |
continue;
|
178 |
}
|
179 |
-
|
180 |
$class_name = str_replace( $prefix, '', $class );
|
181 |
-
|
182 |
-
if ( ! $is_namespaced ) {
|
183 |
-
$class_path_frag = implode( '/', explode( $this->dir_separator, $class_name ) ) . '.php';
|
184 |
-
} else {
|
185 |
-
$class_path_frag = implode( '/', explode( '\\', $class_name ) ) . '.php';
|
186 |
-
}
|
187 |
-
|
188 |
foreach ( $dirs as $dir ) {
|
189 |
$path = $dir . '/' . $class_path_frag;
|
190 |
if ( ! file_exists( $path ) ) {
|
53 |
* An arrays of arrays each containing absolute paths.
|
54 |
*
|
55 |
* Paths are stored trimming any trailing `/`.
|
56 |
+
* E.g. `/var/www/tribe-pro/wp-content/plugins/the-event-calendar/src/Tribe`
|
57 |
*
|
58 |
* @var string[][]
|
59 |
*/
|
77 |
protected $dir_separator = '__';
|
78 |
|
79 |
/** @var string[] */
|
80 |
+
protected $fallback_dirs = array();
|
81 |
|
82 |
/**
|
83 |
* @var array
|
84 |
*/
|
85 |
+
protected $class_paths = array();
|
86 |
|
87 |
/**
|
88 |
* Returns the singleton instance of the class.
|
121 |
public function register_prefix( $prefix, $root_dir, $slug = '' ) {
|
122 |
$root_dir = $this->normalize_root_dir( $root_dir );
|
123 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
124 |
if ( ! isset( $this->prefixes[ $prefix ] ) ) {
|
125 |
+
$this->prefixes[ $prefix ] = array();
|
126 |
}
|
127 |
|
128 |
$this->prefixes[ $prefix ][] = $root_dir;
|
140 |
* autoload register.
|
141 |
*/
|
142 |
public function register_autoloader() {
|
143 |
+
spl_autoload_register( array( $this, 'autoload' ) );
|
144 |
}
|
145 |
|
146 |
/**
|
163 |
|
164 |
protected function get_prefixed_path( $class ) {
|
165 |
foreach ( $this->prefixes as $prefix => $dirs ) {
|
|
|
|
|
166 |
if ( strpos( $class, $prefix ) !== 0 ) {
|
167 |
continue;
|
168 |
}
|
|
|
169 |
$class_name = str_replace( $prefix, '', $class );
|
170 |
+
$class_path_frag = implode( '/', explode( $this->dir_separator, $class_name ) ) . '.php';
|
|
|
|
|
|
|
|
|
|
|
|
|
171 |
foreach ( $dirs as $dir ) {
|
172 |
$path = $dir . '/' . $class_path_frag;
|
173 |
if ( ! file_exists( $path ) ) {
|
common/src/Tribe/Cache.php
CHANGED
@@ -70,7 +70,7 @@ class Tribe__Cache implements ArrayAccess {
|
|
70 |
$expiration = 1;
|
71 |
|
72 |
// Add so we know what group to use in the future.
|
73 |
-
$this->non_persistent_keys[
|
74 |
} else {
|
75 |
$group = 'tribe-events';
|
76 |
}
|
@@ -87,10 +87,6 @@ class Tribe__Cache implements ArrayAccess {
|
|
87 |
* @return bool
|
88 |
*/
|
89 |
public function set_transient( $id, $value, $expiration = 0, $expiration_trigger = '' ) {
|
90 |
-
if ( $this->data_size_over_packet_size( $value ) ) {
|
91 |
-
return false;
|
92 |
-
}
|
93 |
-
|
94 |
return set_transient( $this->get_id( $id, $expiration_trigger ), $value, $expiration );
|
95 |
}
|
96 |
|
@@ -108,7 +104,8 @@ class Tribe__Cache implements ArrayAccess {
|
|
108 |
* @return mixed
|
109 |
*/
|
110 |
public function get( $id, $expiration_trigger = '', $default = false, $expiration = 0, $args = [] ) {
|
111 |
-
$
|
|
|
112 |
$value = wp_cache_get( $this->get_id( $id, $expiration_trigger ), $group );
|
113 |
|
114 |
// Value found.
|
@@ -149,14 +146,7 @@ class Tribe__Cache implements ArrayAccess {
|
|
149 |
* @return bool
|
150 |
*/
|
151 |
public function delete( $id, $expiration_trigger = '' ) {
|
152 |
-
|
153 |
-
|
154 |
-
// Delete from non-persistent keys list.
|
155 |
-
if ( 'tribe-events-non-persistent' === $group ) {
|
156 |
-
unset( $this->non_persistent_keys[ $id ] );
|
157 |
-
}
|
158 |
-
|
159 |
-
return wp_cache_delete( $this->get_id( $id, $expiration_trigger ), $group );
|
160 |
}
|
161 |
|
162 |
/**
|
@@ -381,7 +371,9 @@ class Tribe__Cache implements ArrayAccess {
|
|
381 |
* @return boolean Whether the offset exists in the cache.
|
382 |
*/
|
383 |
public function offsetExists( $offset ) {
|
384 |
-
|
|
|
|
|
385 |
}
|
386 |
|
387 |
/**
|
@@ -504,36 +496,4 @@ class Tribe__Cache implements ArrayAccess {
|
|
504 |
}
|
505 |
} while ( ! empty( $post_objects ) && is_array( $post_objects ) && count( $post_objects ) < count( $post_ids ) );
|
506 |
}
|
507 |
-
|
508 |
-
/**
|
509 |
-
* If NOT using an external object caching system, then check if the size, in bytes, of the data
|
510 |
-
* to write to the database would fit into the `max_allowed_packet` setting or not.
|
511 |
-
*
|
512 |
-
* @since 4.12.14
|
513 |
-
*
|
514 |
-
* @param string|array|object $value The value to check.
|
515 |
-
*
|
516 |
-
* @return bool Whether the data, in its serialized form, would fit into the current database `max_allowed_packet`
|
517 |
-
* setting or not.
|
518 |
-
*/
|
519 |
-
public function data_size_over_packet_size( $value ) {
|
520 |
-
if ( wp_using_ext_object_cache() ) {
|
521 |
-
// We cannot know and that is a concern of the external caching system.
|
522 |
-
return false;
|
523 |
-
}
|
524 |
-
|
525 |
-
try {
|
526 |
-
$serialized_value = maybe_serialize( $value );
|
527 |
-
$size = strlen( $serialized_value );
|
528 |
-
} catch ( Exception $e ) {
|
529 |
-
// The underlying function would run into the same issue, bail and do not set the transient.
|
530 |
-
return true;
|
531 |
-
}
|
532 |
-
|
533 |
-
/** @var Tribe__Feature_Detection $feature_detection */
|
534 |
-
$feature_detection = tribe( 'feature-detection' );
|
535 |
-
|
536 |
-
// If the size of the string is above 90% of the database `max_allowed_packet` setting, then it should not be written to the db.
|
537 |
-
return $size > ( $feature_detection->get_mysql_max_packet_size() * .9 );
|
538 |
-
}
|
539 |
-
}
|
70 |
$expiration = 1;
|
71 |
|
72 |
// Add so we know what group to use in the future.
|
73 |
+
$this->non_persistent_keys[] = $key;
|
74 |
} else {
|
75 |
$group = 'tribe-events';
|
76 |
}
|
87 |
* @return bool
|
88 |
*/
|
89 |
public function set_transient( $id, $value, $expiration = 0, $expiration_trigger = '' ) {
|
|
|
|
|
|
|
|
|
90 |
return set_transient( $this->get_id( $id, $expiration_trigger ), $value, $expiration );
|
91 |
}
|
92 |
|
104 |
* @return mixed
|
105 |
*/
|
106 |
public function get( $id, $expiration_trigger = '', $default = false, $expiration = 0, $args = [] ) {
|
107 |
+
$flipped = array_flip( $this->non_persistent_keys );
|
108 |
+
$group = isset( $flipped[ $id ] ) ? 'tribe-events-non-persistent' : 'tribe-events';
|
109 |
$value = wp_cache_get( $this->get_id( $id, $expiration_trigger ), $group );
|
110 |
|
111 |
// Value found.
|
146 |
* @return bool
|
147 |
*/
|
148 |
public function delete( $id, $expiration_trigger = '' ) {
|
149 |
+
return wp_cache_delete( $this->get_id( $id, $expiration_trigger ), 'tribe-events' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
150 |
}
|
151 |
|
152 |
/**
|
371 |
* @return boolean Whether the offset exists in the cache.
|
372 |
*/
|
373 |
public function offsetExists( $offset ) {
|
374 |
+
$flipped = array_flip( $this->non_persistent_keys );
|
375 |
+
|
376 |
+
return isset( $flipped[ $offset ] );
|
377 |
}
|
378 |
|
379 |
/**
|
496 |
}
|
497 |
} while ( ! empty( $post_objects ) && is_array( $post_objects ) && count( $post_objects ) < count( $post_ids ) );
|
498 |
}
|
499 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
common/src/Tribe/Cache_Listener.php
CHANGED
@@ -1,214 +1,171 @@
|
|
1 |
<?php
|
2 |
-
|
3 |
-
/**
|
4 |
-
* Listen for events and update their timestamps
|
5 |
-
*/
|
6 |
-
class Tribe__Cache_Listener {
|
7 |
-
|
8 |
-
/**
|
9 |
-
* The name of the trigger that will be fired when rewrite rules are generated.
|
10 |
-
*/
|
11 |
-
const TRIGGER_GENERATE_REWRITE_RULES = 'generate_rewrite_rules';
|
12 |
-
|
13 |
-
/**
|
14 |
-
* The name of the trigger that will be fired when a post is saved.
|
15 |
-
*/
|
16 |
-
const TRIGGER_SAVE_POST = 'save_post';
|
17 |
-
|
18 |
/**
|
19 |
-
*
|
20 |
*/
|
21 |
-
|
22 |
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
*/
|
28 |
-
private static $instance;
|
29 |
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
*/
|
35 |
-
private $cache;
|
36 |
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
*/
|
42 |
-
public function __construct() {
|
43 |
-
$this->cache = new Tribe__Cache();
|
44 |
-
}
|
45 |
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
$this->add_hooks();
|
53 |
-
}
|
54 |
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
add_action( 'save_post', [ $this, 'save_post' ], 0, 2 );
|
62 |
-
add_action( 'updated_option', [ $this, 'update_last_updated_option' ], 10, 3 );
|
63 |
-
add_action( 'updated_option', [ $this, 'update_last_save_post' ], 10, 3 );
|
64 |
-
add_action( 'generate_rewrite_rules', [ $this, 'generate_rewrite_rules' ] );
|
65 |
-
}
|
66 |
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
if ( in_array( $post->post_type, Tribe__Main::get_post_types() ) ) {
|
75 |
-
$this->cache->set_last_occurrence( self::TRIGGER_SAVE_POST );
|
76 |
}
|
77 |
-
}
|
78 |
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
* @param mixed $value The new option value.
|
87 |
-
*/
|
88 |
-
public function update_last_save_post( $option_name, $old_value, $value ) {
|
89 |
-
$triggers = [
|
90 |
-
'tribe_events_calendar_options' => true,
|
91 |
-
'permalink_structure' => true,
|
92 |
-
'rewrite_rules' => true,
|
93 |
-
'start_of_week' => true,
|
94 |
-
];
|
95 |
-
|
96 |
-
$triggers = $this->filter_action_last_occurrence_triggers( $triggers, static::TRIGGER_SAVE_POST, func_get_args() );
|
97 |
-
|
98 |
-
if ( ! empty( $triggers[ $option_name ] ) ) {
|
99 |
-
$this->cache->set_last_occurrence( self::TRIGGER_SAVE_POST );
|
100 |
}
|
101 |
-
}
|
102 |
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
*/
|
114 |
-
public function update_last_updated_option( $option_name, $old_value, $value ) {
|
115 |
-
$triggers = [
|
116 |
-
'active_plugins' => true,
|
117 |
-
'tribe_events_calendar_options' => true,
|
118 |
-
'permalink_structure' => true,
|
119 |
-
'rewrite_rules' => true,
|
120 |
-
'start_of_week' => true,
|
121 |
-
'sidebars_widgets' => true,
|
122 |
-
'stylesheet' => true,
|
123 |
-
'template' => true,
|
124 |
-
'WPLANG' => true,
|
125 |
-
];
|
126 |
-
|
127 |
-
$triggers = $this->filter_action_last_occurrence_triggers( $triggers, static::TRIGGER_UPDATED_OPTION, func_get_args() );
|
128 |
-
|
129 |
-
if ( ! empty( $triggers[ $option_name ] ) ) {
|
130 |
-
$this->cache->set_last_occurrence( self::TRIGGER_UPDATED_OPTION );
|
131 |
}
|
132 |
-
}
|
133 |
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
public function filter_action_last_occurrence_triggers( array $triggers = [], $action = '', array $args = [] ) {
|
146 |
|
147 |
/**
|
148 |
-
*
|
149 |
*
|
150 |
-
* @
|
151 |
*
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
*/
|
156 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
157 |
|
158 |
/**
|
159 |
-
*
|
160 |
-
*
|
|
|
161 |
*
|
162 |
-
* @since
|
163 |
*
|
164 |
-
* @param
|
165 |
-
* @param
|
166 |
-
* @param
|
167 |
*/
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
|
|
|
|
|
|
|
|
|
|
180 |
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
}
|
190 |
|
191 |
-
|
192 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
193 |
|
194 |
-
|
195 |
-
|
196 |
-
*
|
197 |
-
* @return Tribe__Cache_Listener
|
198 |
-
*/
|
199 |
-
private static function create_listener() {
|
200 |
-
$listener = new self();
|
201 |
-
$listener->init();
|
202 |
|
203 |
-
|
204 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
205 |
|
206 |
-
|
207 |
-
|
208 |
-
|
209 |
-
|
210 |
-
|
211 |
-
|
212 |
-
|
|
|
|
|
|
|
|
|
213 |
}
|
214 |
-
}
|
1 |
<?php
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
/**
|
3 |
+
* Listen for events and update their timestamps
|
4 |
*/
|
5 |
+
class Tribe__Cache_Listener {
|
6 |
|
7 |
+
/**
|
8 |
+
* The name of the trigger that will be fired when rewrite rules are generated.
|
9 |
+
*/
|
10 |
+
const TRIGGER_GENERATE_REWRITE_RULES = 'generate_rewrite_rules';
|
|
|
|
|
11 |
|
12 |
+
/**
|
13 |
+
* The name of the trigger that will be fired when a post is saved.
|
14 |
+
*/
|
15 |
+
const TRIGGER_SAVE_POST = 'save_post';
|
|
|
|
|
16 |
|
17 |
+
/**
|
18 |
+
* The name of the trigger that will be fired when an option is updated
|
19 |
+
*/
|
20 |
+
const TRIGGER_UPDATED_OPTION = 'updated_option';
|
|
|
|
|
|
|
|
|
21 |
|
22 |
+
/**
|
23 |
+
* The singleton instance of the class.
|
24 |
+
*
|
25 |
+
* @var Tribe__Cache_Listener|null
|
26 |
+
*/
|
27 |
+
private static $instance;
|
|
|
|
|
28 |
|
29 |
+
/**
|
30 |
+
* An instance of the cache object.
|
31 |
+
*
|
32 |
+
* @var Tribe__Cache|null
|
33 |
+
*/
|
34 |
+
private $cache;
|
|
|
|
|
|
|
|
|
|
|
35 |
|
36 |
+
/**
|
37 |
+
* Class constructor.
|
38 |
+
*
|
39 |
+
* @return void
|
40 |
+
*/
|
41 |
+
public function __construct() {
|
42 |
+
$this->cache = new Tribe__Cache();
|
|
|
|
|
43 |
}
|
|
|
44 |
|
45 |
+
/**
|
46 |
+
* Run the init functionality (like add_hooks).
|
47 |
+
*
|
48 |
+
* @return void
|
49 |
+
*/
|
50 |
+
public function init() {
|
51 |
+
$this->add_hooks();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
52 |
}
|
|
|
53 |
|
54 |
+
/**
|
55 |
+
* Add the hooks necessary.
|
56 |
+
*
|
57 |
+
* @return void
|
58 |
+
*/
|
59 |
+
private function add_hooks() {
|
60 |
+
add_action( 'save_post', [ $this, 'save_post' ], 0, 2 );
|
61 |
+
add_action( 'updated_option', [ $this, 'update_last_updated_option' ], 10, 3 );
|
62 |
+
add_action( 'updated_option', [ $this, 'update_last_save_post' ], 10, 3 );
|
63 |
+
add_action( 'generate_rewrite_rules', [ $this, 'generate_rewrite_rules' ] );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
64 |
}
|
|
|
65 |
|
66 |
+
/**
|
67 |
+
* Run the caching functionality that is executed on save post.
|
68 |
+
*
|
69 |
+
* @param int $post_id The post_id.
|
70 |
+
* @param WP_Post $post The current post object being saved.
|
71 |
+
*/
|
72 |
+
public function save_post( $post_id, $post ) {
|
73 |
+
if ( in_array( $post->post_type, Tribe__Main::get_post_types() ) ) {
|
74 |
+
$this->cache->set_last_occurrence( self::TRIGGER_SAVE_POST );
|
75 |
+
}
|
76 |
+
}
|
|
|
77 |
|
78 |
/**
|
79 |
+
* Run the caching functionality that is executed on saving tribe calendar options.
|
80 |
*
|
81 |
+
* @see 'updated_option'
|
82 |
*
|
83 |
+
* @param string $option_name Name of the updated option.
|
84 |
+
* @param mixed $old_value The old option value.
|
85 |
+
* @param mixed $value The new option value.
|
86 |
*/
|
87 |
+
public function update_last_save_post( $option_name, $old_value, $value ) {
|
88 |
+
$triggers = [
|
89 |
+
'tribe_events_calendar_options' => true,
|
90 |
+
'permalink_structure' => true,
|
91 |
+
'rewrite_rules' => true,
|
92 |
+
'start_of_week' => true,
|
93 |
+
];
|
94 |
+
if ( ! empty( $triggers[ $option_name ] ) ) {
|
95 |
+
$this->cache->set_last_occurrence( self::TRIGGER_SAVE_POST );
|
96 |
+
}
|
97 |
+
}
|
98 |
|
99 |
/**
|
100 |
+
* Run the caching functionality that is executed on saving tribe calendar options.
|
101 |
+
*
|
102 |
+
* @see 'updated_option'
|
103 |
*
|
104 |
+
* @since 4.11.0
|
105 |
*
|
106 |
+
* @param string $option_name Name of the updated option.
|
107 |
+
* @param mixed $old_value The old option value.
|
108 |
+
* @param mixed $value The new option value.
|
109 |
*/
|
110 |
+
public function update_last_updated_option( $option_name, $old_value, $value ) {
|
111 |
+
$triggers = [
|
112 |
+
'active_plugins' => true,
|
113 |
+
'tribe_events_calendar_options' => true,
|
114 |
+
'permalink_structure' => true,
|
115 |
+
'rewrite_rules' => true,
|
116 |
+
'start_of_week' => true,
|
117 |
+
'sidebars_widgets' => true,
|
118 |
+
'stylesheet' => true,
|
119 |
+
'template' => true,
|
120 |
+
'WPLANG' => true,
|
121 |
+
];
|
122 |
+
|
123 |
+
if ( ! empty( $triggers[ $option_name ] ) ) {
|
124 |
+
$this->cache->set_last_occurrence( self::TRIGGER_UPDATED_OPTION );
|
125 |
+
}
|
126 |
+
}
|
127 |
|
128 |
+
/**
|
129 |
+
* For any hook that doesn't need any additional filtering
|
130 |
+
*
|
131 |
+
* @param $method
|
132 |
+
* @param $args
|
133 |
+
*/
|
134 |
+
public function __call( $method, $args ) {
|
135 |
+
$this->cache->set_last_occurrence( $method );
|
136 |
}
|
137 |
|
138 |
+
/**
|
139 |
+
* Instance method of the cache listener.
|
140 |
+
*
|
141 |
+
* @return Tribe__Cache_Listener
|
142 |
+
*/
|
143 |
+
public static function instance() {
|
144 |
+
if ( empty( self::$instance ) ) {
|
145 |
+
self::$instance = self::create_listener();
|
146 |
+
}
|
147 |
|
148 |
+
return self::$instance;
|
149 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
150 |
|
151 |
+
/**
|
152 |
+
* Create a cache listener.
|
153 |
+
*
|
154 |
+
* @return Tribe__Cache_Listener
|
155 |
+
*/
|
156 |
+
private static function create_listener() {
|
157 |
+
$listener = new self();
|
158 |
+
$listener->init();
|
159 |
|
160 |
+
return $listener;
|
161 |
+
}
|
162 |
+
|
163 |
+
/**
|
164 |
+
* Run the caching functionality that is executed when rewrite rules are generated.
|
165 |
+
*
|
166 |
+
* @since 4.9.11
|
167 |
+
*/
|
168 |
+
public function generate_rewrite_rules() {
|
169 |
+
$this->cache->set_last_occurrence( self::TRIGGER_GENERATE_REWRITE_RULES );
|
170 |
+
}
|
171 |
}
|
|
common/src/Tribe/Changelog_Reader.php
CHANGED
@@ -17,7 +17,7 @@ class Tribe__Changelog_Reader {
|
|
17 |
$contents = $this->extract_changelog_section();
|
18 |
$lines = explode( "\n", $contents );
|
19 |
|
20 |
-
$sections
|
21 |
$current_section = '';
|
22 |
foreach ( $lines as $line ) {
|
23 |
$line = trim( $line );
|
@@ -27,7 +27,7 @@ class Tribe__Changelog_Reader {
|
|
27 |
}
|
28 |
$header = trim( $line, '= ' );
|
29 |
$current_section = esc_html( $header );
|
30 |
-
$sections[ $current_section ] =
|
31 |
} elseif ( strlen( $line ) > 0 ) {
|
32 |
$message = trim( $line, '* ' );
|
33 |
$sections[ $current_section ][] = esc_html( $message );
|
17 |
$contents = $this->extract_changelog_section();
|
18 |
$lines = explode( "\n", $contents );
|
19 |
|
20 |
+
$sections = array();
|
21 |
$current_section = '';
|
22 |
foreach ( $lines as $line ) {
|
23 |
$line = trim( $line );
|
27 |
}
|
28 |
$header = trim( $line, '= ' );
|
29 |
$current_section = esc_html( $header );
|
30 |
+
$sections[ $current_section ] = array();
|
31 |
} elseif ( strlen( $line ) > 0 ) {
|
32 |
$message = trim( $line, '* ' );
|
33 |
$sections[ $current_section ][] = esc_html( $message );
|
common/src/Tribe/Context.php
CHANGED
@@ -190,13 +190,13 @@ class Tribe__Context {
|
|
190 |
*
|
191 |
* @var array
|
192 |
*/
|
193 |
-
protected static $associative_locations =
|
194 |
self::TRANSIENT,
|
195 |
self::METHOD,
|
196 |
self::STATIC_METHOD,
|
197 |
self::PROP,
|
198 |
self::STATIC_PROP,
|
199 |
-
|
200 |
|
201 |
/**
|
202 |
* Whether the static dynamic locations were set or not.
|
@@ -213,7 +213,7 @@ class Tribe__Context {
|
|
213 |
*
|
214 |
* @var array
|
215 |
*/
|
216 |
-
protected $override_locations =
|
217 |
|
218 |
/**
|
219 |
* Whether the context of the current HTTP request is an AJAX one or not.
|
@@ -234,8 +234,7 @@ class Tribe__Context {
|
|
234 |
*
|
235 |
* @var array
|
236 |
*/
|
237 |
-
protected $request_cache =
|
238 |
-
|
239 |
/**
|
240 |
* Whether this context should use the default locations or not.
|
241 |
* This flag property is set to `false` when a context is obtained using
|
@@ -282,7 +281,7 @@ class Tribe__Context {
|
|
282 |
}
|
283 |
|
284 |
if ( ! empty( $post_or_type ) ) {
|
285 |
-
$lookup =
|
286 |
|
287 |
$current_post = Tribe__Utils__Array::get_in_any( $lookup, 'post', get_post() );
|
288 |
|
@@ -293,7 +292,7 @@ class Tribe__Context {
|
|
293 |
return ! empty( $post ) && $post == $current_post;
|
294 |
}
|
295 |
|
296 |
-
$post_types = is_array( $post_or_type ) ? $post_or_type :
|
297 |
|
298 |
$post = $is_post ? get_post( $current_post ) : null;
|
299 |
|
@@ -307,7 +306,7 @@ class Tribe__Context {
|
|
307 |
$post_type = Tribe__Utils__Array::get_in_any( $lookup, 'post_type', 'post' );
|
308 |
}
|
309 |
|
310 |
-
return (bool) count( array_intersect( $post_types,
|
311 |
}
|
312 |
|
313 |
return $is_new || $is_post;
|
@@ -447,7 +446,7 @@ class Tribe__Context {
|
|
447 |
if ( null !== $key ) {
|
448 |
unset( $this->request_cache[ $key ] );
|
449 |
} else {
|
450 |
-
$this->request_cache =
|
451 |
}
|
452 |
}
|
453 |
|
@@ -472,9 +471,7 @@ class Tribe__Context {
|
|
472 |
*
|
473 |
* @since 4.10.2
|
474 |
*
|
475 |
-
* @param
|
476 |
-
* `[ <location> => [ 'read' => <read_locations>, 'write' => <write_locations> ] ]`.
|
477 |
-
* @param $context Tribe__Context Current instance of the context.
|
478 |
*/
|
479 |
$locations = apply_filters( 'tribe_context_locations', $locations, $this );
|
480 |
}
|
@@ -756,7 +753,7 @@ class Tribe__Context {
|
|
756 |
|
757 |
foreach ( $classes_and_methods as $class => $method ) {
|
758 |
$the_value = class_exists( $class ) && method_exists( $class, $method )
|
759 |
-
? call_user_func(
|
760 |
: self::NOT_FOUND;
|
761 |
|
762 |
if ( $the_value !== self::NOT_FOUND ) {
|
@@ -870,16 +867,16 @@ class Tribe__Context {
|
|
870 |
foreach ( $targets as $arg_1 => $arg_2 ) {
|
871 |
if ( self::FUNC === $location && is_array( $arg_2 ) && is_callable( $arg_2 ) ) {
|
872 |
// Handles write functions specified as an array.
|
873 |
-
$location_args =
|
874 |
} else {
|
875 |
$location_args = in_array( $location, self::$associative_locations, true )
|
876 |
-
?
|
877 |
: (array) $arg_2;
|
878 |
}
|
879 |
|
880 |
-
$args = array_merge( $location_args,
|
881 |
|
882 |
-
call_user_func_array(
|
883 |
}
|
884 |
}
|
885 |
}
|
@@ -1058,7 +1055,7 @@ class Tribe__Context {
|
|
1058 |
if ( ! class_exists( $class ) ) {
|
1059 |
return;
|
1060 |
}
|
1061 |
-
call_user_func(
|
1062 |
}
|
1063 |
|
1064 |
/**
|
@@ -1074,7 +1071,7 @@ class Tribe__Context {
|
|
1074 |
if ( ! tribe()->offsetExists( $binding ) ) {
|
1075 |
return;
|
1076 |
}
|
1077 |
-
call_user_func(
|
1078 |
}
|
1079 |
|
1080 |
/**
|
@@ -1145,7 +1142,7 @@ class Tribe__Context {
|
|
1145 |
*/
|
1146 |
public function to_array( ) {
|
1147 |
$locations = array_keys( array_merge( $this->get_locations(), $this->request_cache ) );
|
1148 |
-
$dump =
|
1149 |
|
1150 |
foreach ( $locations as $location ) {
|
1151 |
$the_value = $this->get( $location, self::NOT_FOUND );
|
@@ -1235,7 +1232,7 @@ class Tribe__Context {
|
|
1235 |
public function get_orm_args( array $fields = null, $whitelist = true ) {
|
1236 |
$locations = $this->get_locations();
|
1237 |
$dump = $this->to_array();
|
1238 |
-
$orm_args =
|
1239 |
$is_global_context = tribe_context() === $this;
|
1240 |
|
1241 |
foreach ( $dump as $key => $value ) {
|
@@ -1322,22 +1319,6 @@ class Tribe__Context {
|
|
1322 |
static::$did_populate_locations = true;
|
1323 |
}
|
1324 |
|
1325 |
-
/**
|
1326 |
-
* Just dont...
|
1327 |
-
* Unless you very specifically know what you are doing **DO NOT USE THIS METHOD**!
|
1328 |
-
*
|
1329 |
-
* Please keep in mind this will set force the context to repopulate all locations for the whole request, expensive
|
1330 |
-
* and very dangerous overall since it could affect all this things we hold dear in the request.
|
1331 |
-
*
|
1332 |
-
* With great power comes great responsibility: think a lot before using this.
|
1333 |
-
*
|
1334 |
-
* @since 4.13.0
|
1335 |
-
*/
|
1336 |
-
public function dangerously_repopulate_locations() {
|
1337 |
-
static::$did_populate_locations = false;
|
1338 |
-
$this->populate_locations();
|
1339 |
-
}
|
1340 |
-
|
1341 |
/**
|
1342 |
* Reads (gets) the value applying one or more filters.
|
1343 |
*
|
190 |
*
|
191 |
* @var array
|
192 |
*/
|
193 |
+
protected static $associative_locations = array(
|
194 |
self::TRANSIENT,
|
195 |
self::METHOD,
|
196 |
self::STATIC_METHOD,
|
197 |
self::PROP,
|
198 |
self::STATIC_PROP,
|
199 |
+
);
|
200 |
|
201 |
/**
|
202 |
* Whether the static dynamic locations were set or not.
|
213 |
*
|
214 |
* @var array
|
215 |
*/
|
216 |
+
protected $override_locations = array();
|
217 |
|
218 |
/**
|
219 |
* Whether the context of the current HTTP request is an AJAX one or not.
|
234 |
*
|
235 |
* @var array
|
236 |
*/
|
237 |
+
protected $request_cache = array();
|
|
|
238 |
/**
|
239 |
* Whether this context should use the default locations or not.
|
240 |
* This flag property is set to `false` when a context is obtained using
|
281 |
}
|
282 |
|
283 |
if ( ! empty( $post_or_type ) ) {
|
284 |
+
$lookup = array( $_GET, $_POST, $_REQUEST );
|
285 |
|
286 |
$current_post = Tribe__Utils__Array::get_in_any( $lookup, 'post', get_post() );
|
287 |
|
292 |
return ! empty( $post ) && $post == $current_post;
|
293 |
}
|
294 |
|
295 |
+
$post_types = is_array( $post_or_type ) ? $post_or_type : array( $post_or_type );
|
296 |
|
297 |
$post = $is_post ? get_post( $current_post ) : null;
|
298 |
|
306 |
$post_type = Tribe__Utils__Array::get_in_any( $lookup, 'post_type', 'post' );
|
307 |
}
|
308 |
|
309 |
+
return (bool) count( array_intersect( $post_types, array( $post_type ) ) );
|
310 |
}
|
311 |
|
312 |
return $is_new || $is_post;
|
446 |
if ( null !== $key ) {
|
447 |
unset( $this->request_cache[ $key ] );
|
448 |
} else {
|
449 |
+
$this->request_cache = array();
|
450 |
}
|
451 |
}
|
452 |
|
471 |
*
|
472 |
* @since 4.10.2
|
473 |
*
|
474 |
+
* @param array $locations An array of locations registered on the Context object.
|
|
|
|
|
475 |
*/
|
476 |
$locations = apply_filters( 'tribe_context_locations', $locations, $this );
|
477 |
}
|
753 |
|
754 |
foreach ( $classes_and_methods as $class => $method ) {
|
755 |
$the_value = class_exists( $class ) && method_exists( $class, $method )
|
756 |
+
? call_user_func( array( $class, $method ) )
|
757 |
: self::NOT_FOUND;
|
758 |
|
759 |
if ( $the_value !== self::NOT_FOUND ) {
|
867 |
foreach ( $targets as $arg_1 => $arg_2 ) {
|
868 |
if ( self::FUNC === $location && is_array( $arg_2 ) && is_callable( $arg_2 ) ) {
|
869 |
// Handles write functions specified as an array.
|
870 |
+
$location_args = array( $arg_2 );
|
871 |
} else {
|
872 |
$location_args = in_array( $location, self::$associative_locations, true )
|
873 |
+
? array( $arg_1, $arg_2 )
|
874 |
: (array) $arg_2;
|
875 |
}
|
876 |
|
877 |
+
$args = array_merge( $location_args, array( $value ) );
|
878 |
|
879 |
+
call_user_func_array( array( $this, $write_func ), $args );
|
880 |
}
|
881 |
}
|
882 |
}
|
1055 |
if ( ! class_exists( $class ) ) {
|
1056 |
return;
|
1057 |
}
|
1058 |
+
call_user_func( array( $class, $method ), $value );
|
1059 |
}
|
1060 |
|
1061 |
/**
|
1071 |
if ( ! tribe()->offsetExists( $binding ) ) {
|
1072 |
return;
|
1073 |
}
|
1074 |
+
call_user_func( array( tribe( $binding ), $method ), $value );
|
1075 |
}
|
1076 |
|
1077 |
/**
|
1142 |
*/
|
1143 |
public function to_array( ) {
|
1144 |
$locations = array_keys( array_merge( $this->get_locations(), $this->request_cache ) );
|
1145 |
+
$dump = array();
|
1146 |
|
1147 |
foreach ( $locations as $location ) {
|
1148 |
$the_value = $this->get( $location, self::NOT_FOUND );
|
1232 |
public function get_orm_args( array $fields = null, $whitelist = true ) {
|
1233 |
$locations = $this->get_locations();
|
1234 |
$dump = $this->to_array();
|
1235 |
+
$orm_args = array();
|
1236 |
$is_global_context = tribe_context() === $this;
|
1237 |
|
1238 |
foreach ( $dump as $key => $value ) {
|
1319 |
static::$did_populate_locations = true;
|
1320 |
}
|
1321 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1322 |
/**
|
1323 |
* Reads (gets) the value applying one or more filters.
|
1324 |
*
|
common/src/Tribe/Context/locations.php
CHANGED
@@ -136,20 +136,4 @@ return [
|
|
136 |
Tribe__Context::REQUEST_VAR => [ 'post_tag', 'tag' ],
|
137 |
],
|
138 |
],
|
139 |
-
'bulk_edit' => [
|
140 |
-
'read' => [
|
141 |
-
Tribe__Context::REQUEST_VAR => [ 'bulk_edit' ],
|
142 |
-
],
|
143 |
-
],
|
144 |
-
'inline_save' => [
|
145 |
-
'read' => [
|
146 |
-
Tribe__Context::FUNC => [
|
147 |
-
static function () {
|
148 |
-
return tribe_get_request_var( 'action', false ) === 'inline-save'
|
149 |
-
? true
|
150 |
-
: Tribe__Context::NOT_FOUND;
|
151 |
-
}
|
152 |
-
],
|
153 |
-
],
|
154 |
-
],
|
155 |
];
|
136 |
Tribe__Context::REQUEST_VAR => [ 'post_tag', 'tag' ],
|
137 |
],
|
138 |
],
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
139 |
];
|
common/src/Tribe/Cost_Utils.php
CHANGED
@@ -86,7 +86,7 @@ class Tribe__Cost_Utils {
|
|
86 |
* @return array
|
87 |
*/
|
88 |
public function get_separators() {
|
89 |
-
$separators =
|
90 |
|
91 |
/**
|
92 |
* Filters the cost string possible separators, those must be only 1 char.
|
@@ -161,33 +161,29 @@ class Tribe__Cost_Utils {
|
|
161 |
*
|
162 |
* @return string|array The merged cost range.
|
163 |
*/
|
164 |
-
public function merge_cost_ranges( $original_string_cost, $merging_cost, $with_currency_symbol, $sorted_mins =
|
165 |
if ( empty( $merging_cost ) || $original_string_cost === $merging_cost ) {
|
166 |
return $original_string_cost;
|
167 |
}
|
168 |
|
169 |
$_merging_cost = array_map(
|
170 |
-
|
171 |
);
|
172 |
-
$_merging_cost = array_map(
|
173 |
$numeric_merging_cost_costs = array_filter( $_merging_cost, 'is_numeric' );
|
174 |
|
175 |
-
$matches =
|
176 |
preg_match_all(
|
177 |
'!\d+(?:([' . preg_quote( $this->_supported_decimal_separators ) . '])\d+)?!', $original_string_cost,
|
178 |
$matches
|
179 |
);
|
180 |
$this->_current_original_cost_separator = empty( $matches[1][0] ) ? '.' : $matches[1][0];
|
181 |
-
$matches[0] = empty( $matches[0] )
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
],
|
188 |
-
$matches[0]
|
189 |
-
);
|
190 |
-
|
191 |
$numeric_orignal_costs = empty( $matches[0] ) ? $matches[0] : array_map(
|
192 |
'floatval', $matches[0]
|
193 |
);
|
@@ -219,10 +215,10 @@ class Tribe__Cost_Utils {
|
|
219 |
$cost_max = empty( $all_numeric_costs ) ? '' : max( $all_numeric_costs );
|
220 |
}
|
221 |
|
222 |
-
$cost = array_filter(
|
223 |
|
224 |
if ( $with_currency_symbol ) {
|
225 |
-
$formatted_cost =
|
226 |
foreach ( $cost as $c ) {
|
227 |
$formatted_cost[] = is_numeric( $c ) ? tribe_format_currency( $c ) : $c;
|
228 |
}
|
@@ -230,8 +226,7 @@ class Tribe__Cost_Utils {
|
|
230 |
}
|
231 |
|
232 |
return empty( $cost ) ? $original_string_cost : array_map(
|
233 |
-
|
234 |
-
$cost
|
235 |
);
|
236 |
}
|
237 |
|
@@ -309,7 +304,7 @@ class Tribe__Cost_Utils {
|
|
309 |
*/
|
310 |
public function parse_cost_range( $costs, $max_decimals = null, $sort = true ) {
|
311 |
if ( ! is_array( $costs ) && ! is_string( $costs ) ) {
|
312 |
-
return
|
313 |
}
|
314 |
|
315 |
// make sure costs is an array
|
@@ -317,7 +312,7 @@ class Tribe__Cost_Utils {
|
|
317 |
|
318 |
// If there aren't any costs, return a blank array
|
319 |
if ( 0 === count( $costs ) ) {
|
320 |
-
return
|
321 |
}
|
322 |
|
323 |
// Build the regular expression
|
@@ -329,7 +324,7 @@ class Tribe__Cost_Utils {
|
|
329 |
if ( preg_match_all( '/' . $price_regex . '/', $cost, $matches ) ) {
|
330 |
$cost = reset( $matches );
|
331 |
} else {
|
332 |
-
$cost =
|
333 |
continue;
|
334 |
}
|
335 |
|
@@ -345,7 +340,7 @@ class Tribe__Cost_Utils {
|
|
345 |
$max = max( $max_decimals, $max );
|
346 |
}
|
347 |
|
348 |
-
$output_costs =
|
349 |
$costs = call_user_func_array( 'array_merge', $costs );
|
350 |
|
351 |
foreach ( $costs as $cost ) {
|
@@ -353,7 +348,7 @@ class Tribe__Cost_Utils {
|
|
353 |
|
354 |
if ( is_numeric( $numeric_cost ) ) {
|
355 |
// Creates a Well Balanced Index that will perform good on a Key Sorting method
|
356 |
-
$index = str_replace(
|
357 |
} else {
|
358 |
// Makes sure that we have "index-safe" string
|
359 |
$index = sanitize_title( $numeric_cost );
|
@@ -415,7 +410,7 @@ class Tribe__Cost_Utils {
|
|
415 |
* @return int|float
|
416 |
*/
|
417 |
protected function numerize_numbers( $value ) {
|
418 |
-
$matches =
|
419 |
|
420 |
$pattern = '/(\\d{1,}([' . $this->_supported_decimal_separators . ']\\d{1,}))/';
|
421 |
|
@@ -441,7 +436,7 @@ class Tribe__Cost_Utils {
|
|
441 |
return false;
|
442 |
}
|
443 |
|
444 |
-
$currency_symbols =
|
445 |
$i = 0;
|
446 |
foreach ( $costs as $string => $value ) {
|
447 |
if ( is_numeric( $string ) ) {
|
@@ -476,7 +471,7 @@ class Tribe__Cost_Utils {
|
|
476 |
return false;
|
477 |
}
|
478 |
|
479 |
-
$currency_positions =
|
480 |
foreach ( $original_costs as $original_cost ) {
|
481 |
$currency_symbol_position = strpos( trim( $original_cost ), $currency_symbol );
|
482 |
if ( false === $currency_symbol_position ) {
|
86 |
* @return array
|
87 |
*/
|
88 |
public function get_separators() {
|
89 |
+
$separators = array( ',', '.' );
|
90 |
|
91 |
/**
|
92 |
* Filters the cost string possible separators, those must be only 1 char.
|
161 |
*
|
162 |
* @return string|array The merged cost range.
|
163 |
*/
|
164 |
+
public function merge_cost_ranges( $original_string_cost, $merging_cost, $with_currency_symbol, $sorted_mins = array(), $sorted_maxs = array() ) {
|
165 |
if ( empty( $merging_cost ) || $original_string_cost === $merging_cost ) {
|
166 |
return $original_string_cost;
|
167 |
}
|
168 |
|
169 |
$_merging_cost = array_map(
|
170 |
+
array( $this, 'convert_decimal_separator' ), (array) $merging_cost
|
171 |
);
|
172 |
+
$_merging_cost = array_map( array( $this, 'numerize_numbers' ), $_merging_cost );
|
173 |
$numeric_merging_cost_costs = array_filter( $_merging_cost, 'is_numeric' );
|
174 |
|
175 |
+
$matches = array();
|
176 |
preg_match_all(
|
177 |
'!\d+(?:([' . preg_quote( $this->_supported_decimal_separators ) . '])\d+)?!', $original_string_cost,
|
178 |
$matches
|
179 |
);
|
180 |
$this->_current_original_cost_separator = empty( $matches[1][0] ) ? '.' : $matches[1][0];
|
181 |
+
$matches[0] = empty( $matches[0] ) ? $matches[0] : array_map(
|
182 |
+
array(
|
183 |
+
$this,
|
184 |
+
'convert_decimal_separator',
|
185 |
+
), $matches[0]
|
186 |
+
);
|
|
|
|
|
|
|
|
|
187 |
$numeric_orignal_costs = empty( $matches[0] ) ? $matches[0] : array_map(
|
188 |
'floatval', $matches[0]
|
189 |
);
|
215 |
$cost_max = empty( $all_numeric_costs ) ? '' : max( $all_numeric_costs );
|
216 |
}
|
217 |
|
218 |
+
$cost = array_filter( array( $cost_min, $cost_max ) );
|
219 |
|
220 |
if ( $with_currency_symbol ) {
|
221 |
+
$formatted_cost = array();
|
222 |
foreach ( $cost as $c ) {
|
223 |
$formatted_cost[] = is_numeric( $c ) ? tribe_format_currency( $c ) : $c;
|
224 |
}
|
226 |
}
|
227 |
|
228 |
return empty( $cost ) ? $original_string_cost : array_map(
|
229 |
+
array( $this, 'restore_original_decimal_separator' ), $cost
|
|
|
230 |
);
|
231 |
}
|
232 |
|
304 |
*/
|
305 |
public function parse_cost_range( $costs, $max_decimals = null, $sort = true ) {
|
306 |
if ( ! is_array( $costs ) && ! is_string( $costs ) ) {
|
307 |
+
return array();
|
308 |
}
|
309 |
|
310 |
// make sure costs is an array
|
312 |
|
313 |
// If there aren't any costs, return a blank array
|
314 |
if ( 0 === count( $costs ) ) {
|
315 |
+
return array();
|
316 |
}
|
317 |
|
318 |
// Build the regular expression
|
324 |
if ( preg_match_all( '/' . $price_regex . '/', $cost, $matches ) ) {
|
325 |
$cost = reset( $matches );
|
326 |
} else {
|
327 |
+
$cost = array( $cost );
|
328 |
continue;
|
329 |
}
|
330 |
|
340 |
$max = max( $max_decimals, $max );
|
341 |
}
|
342 |
|
343 |
+
$output_costs = array();
|
344 |
$costs = call_user_func_array( 'array_merge', $costs );
|
345 |
|
346 |
foreach ( $costs as $cost ) {
|
348 |
|
349 |
if ( is_numeric( $numeric_cost ) ) {
|
350 |
// Creates a Well Balanced Index that will perform good on a Key Sorting method
|
351 |
+
$index = str_replace( array( '.', ',' ), '', number_format( $numeric_cost, $max ) );
|
352 |
} else {
|
353 |
// Makes sure that we have "index-safe" string
|
354 |
$index = sanitize_title( $numeric_cost );
|
410 |
* @return int|float
|
411 |
*/
|
412 |
protected function numerize_numbers( $value ) {
|
413 |
+
$matches = array();
|
414 |
|
415 |
$pattern = '/(\\d{1,}([' . $this->_supported_decimal_separators . ']\\d{1,}))/';
|
416 |
|
436 |
return false;
|
437 |
}
|
438 |
|
439 |
+
$currency_symbols = array();
|
440 |
$i = 0;
|
441 |
foreach ( $costs as $string => $value ) {
|
442 |
if ( is_numeric( $string ) ) {
|
471 |
return false;
|
472 |
}
|
473 |
|
474 |
+
$currency_positions = array();
|
475 |
foreach ( $original_costs as $original_cost ) {
|
476 |
$currency_symbol_position = strpos( trim( $original_cost ), $currency_symbol );
|
477 |
if ( false === $currency_symbol_position ) {
|
common/src/Tribe/Credits.php
CHANGED
@@ -13,8 +13,8 @@ class Tribe__Credits {
|
|
13 |
* Hook the functionality of this class into the world
|
14 |
*/
|
15 |
public function hook() {
|
16 |
-
add_filter( 'tribe_events_after_html',
|
17 |
-
add_filter( 'admin_footer_text',
|
18 |
}
|
19 |
|
20 |
/**
|
@@ -28,7 +28,7 @@ class Tribe__Credits {
|
|
28 |
return $after_html;
|
29 |
}
|
30 |
|
31 |
-
$html_credit = "\n<!--\n" . esc_html__( 'This calendar is powered by The Events Calendar.', 'tribe-common' ) . "\nhttp://
|
32 |
$after_html .= apply_filters( 'tribe_html_credit', $html_credit );
|
33 |
return $after_html;
|
34 |
}
|
@@ -43,7 +43,7 @@ class Tribe__Credits {
|
|
43 |
public function rating_nudge( $footer_text ) {
|
44 |
$admin_helpers = Tribe__Admin__Helpers::instance();
|
45 |
|
46 |
-
add_filter( 'tribe_tickets_post_types',
|
47 |
|
48 |
// only display custom text on Tribe Admin Pages
|
49 |
if ( $admin_helpers->is_screen() || $admin_helpers->is_post_type_screen() ) {
|
@@ -55,7 +55,7 @@ class Tribe__Credits {
|
|
55 |
esc_html__( 'Rate %1$sThe Events Calendar%2$s %3$s', 'tribe-common' ),
|
56 |
'<strong>',
|
57 |
'</strong>',
|
58 |
-
'<a href="' . $review_url . '" target="_blank"
|
59 |
);
|
60 |
} else {
|
61 |
$review_url = 'https://wordpress.org/support/plugin/event-tickets/reviews/?filter=5';
|
@@ -64,12 +64,12 @@ class Tribe__Credits {
|
|
64 |
esc_html__( 'Rate %1$sEvent Tickets%2$s %3$s', 'tribe-common' ),
|
65 |
'<strong>',
|
66 |
'</strong>',
|
67 |
-
'<a href="' . $review_url . '" target="_blank"
|
68 |
);
|
69 |
}
|
70 |
}
|
71 |
|
72 |
-
remove_filter( 'tribe_tickets_post_types',
|
73 |
|
74 |
return $footer_text;
|
75 |
}
|
@@ -80,7 +80,7 @@ class Tribe__Credits {
|
|
80 |
* This will limit the request for ratings to only those post type pages
|
81 |
*/
|
82 |
public function tmp_return_tribe_events( $unused_post_types ) {
|
83 |
-
return
|
84 |
}
|
85 |
|
86 |
/**
|
13 |
* Hook the functionality of this class into the world
|
14 |
*/
|
15 |
public function hook() {
|
16 |
+
add_filter( 'tribe_events_after_html', array( $this, 'html_comment_credit' ) );
|
17 |
+
add_filter( 'admin_footer_text', array( $this, 'rating_nudge' ), 1, 2 );
|
18 |
}
|
19 |
|
20 |
/**
|
28 |
return $after_html;
|
29 |
}
|
30 |
|
31 |
+
$html_credit = "\n<!--\n" . esc_html__( 'This calendar is powered by The Events Calendar.', 'tribe-common' ) . "\nhttp://m.tri.be/18wn\n-->\n";
|
32 |
$after_html .= apply_filters( 'tribe_html_credit', $html_credit );
|
33 |
return $after_html;
|
34 |
}
|
43 |
public function rating_nudge( $footer_text ) {
|
44 |
$admin_helpers = Tribe__Admin__Helpers::instance();
|
45 |
|
46 |
+
add_filter( 'tribe_tickets_post_types', array( $this, 'tmp_return_tribe_events' ), 99 );
|
47 |
|
48 |
// only display custom text on Tribe Admin Pages
|
49 |
if ( $admin_helpers->is_screen() || $admin_helpers->is_post_type_screen() ) {
|
55 |
esc_html__( 'Rate %1$sThe Events Calendar%2$s %3$s', 'tribe-common' ),
|
56 |
'<strong>',
|
57 |
'</strong>',
|
58 |
+
'<a href="' . $review_url . '" target="_blank">★★★★★</a>'
|
59 |
);
|
60 |
} else {
|
61 |
$review_url = 'https://wordpress.org/support/plugin/event-tickets/reviews/?filter=5';
|
64 |
esc_html__( 'Rate %1$sEvent Tickets%2$s %3$s', 'tribe-common' ),
|
65 |
'<strong>',
|
66 |
'</strong>',
|
67 |
+
'<a href="' . $review_url . '" target="_blank">★★★★★</a>'
|
68 |
);
|
69 |
}
|
70 |
}
|
71 |
|
72 |
+
remove_filter( 'tribe_tickets_post_types', array( $this, 'tmp_return_tribe_events' ), 99 );
|
73 |
|
74 |
return $footer_text;
|
75 |
}
|
80 |
* This will limit the request for ratings to only those post type pages
|
81 |
*/
|
82 |
public function tmp_return_tribe_events( $unused_post_types ) {
|
83 |
+
return array( 'tribe_events' );
|
84 |
}
|
85 |
|
86 |
/**
|
common/src/Tribe/Customizer.php
CHANGED
@@ -10,15 +10,20 @@ defined( 'WPINC' ) or die;
|
|
10 |
* @since 4.0
|
11 |
*/
|
12 |
final class Tribe__Customizer {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
13 |
/**
|
14 |
* Static Singleton Factory Method
|
15 |
*
|
16 |
* @return self
|
17 |
-
*
|
18 |
-
* @deprecated since 4.12.6, use `tribe( 'customizer' )` instead.
|
19 |
*/
|
20 |
public static function instance() {
|
21 |
-
return
|
22 |
}
|
23 |
|
24 |
/**
|
@@ -64,7 +69,7 @@ final class Tribe__Customizer {
|
|
64 |
* @access private
|
65 |
* @var array
|
66 |
*/
|
67 |
-
private $sections_class =
|
68 |
|
69 |
/**
|
70 |
* Array of Sections Classes, for non-panel pages
|
@@ -73,7 +78,7 @@ final class Tribe__Customizer {
|
|
73 |
* @access private
|
74 |
* @var array
|
75 |
*/
|
76 |
-
private $settings =
|
77 |
|
78 |
/**
|
79 |
* Inline Style has been added
|
@@ -94,7 +99,7 @@ final class Tribe__Customizer {
|
|
94 |
*
|
95 |
* @return void
|
96 |
*/
|
97 |
-
|
98 |
if ( ! $this->is_active() ) {
|
99 |
return;
|
100 |
}
|
@@ -110,31 +115,15 @@ final class Tribe__Customizer {
|
|
110 |
$this->ID = apply_filters( 'tribe_customizer_panel_id', 'tribe_customizer', $this );
|
111 |
|
112 |
// Hook the Registering methods
|
113 |
-
add_action( 'customize_register',
|
114 |
|
115 |
-
add_action( 'wp_print_footer_scripts',
|
116 |
|
117 |
// front end styles from customizer
|
118 |
-
add_action( '
|
119 |
-
add_action( '
|
120 |
-
add_action( 'wp_print_footer_scripts', [ $this, 'widget_inline_style' ], 10 );
|
121 |
-
|
122 |
-
/**
|
123 |
-
* Allows filtering the action that will be used to trigger the printing of inline scripts.
|
124 |
-
*
|
125 |
-
* By default inline scripts will be printed on the `wp_enqueue_scripts` action, but other
|
126 |
-
* plugins or later iterations might require inline styles to be printed on other actions.
|
127 |
-
*
|
128 |
-
* @since 4.12.15
|
129 |
-
*
|
130 |
-
* @param string $inline_script_action_handle The handle of the action that will be used to try
|
131 |
-
* and attempt to print inline scripts.
|
132 |
-
*/
|
133 |
-
$print_styles_action = apply_filters( 'tribe_customizer_print_styles_action', 'wp_enqueue_scripts' );
|
134 |
-
|
135 |
-
add_action( $print_styles_action, [ $this, 'inline_style' ], 15 );
|
136 |
|
137 |
-
add_filter( "default_option_{$this->ID}",
|
138 |
}
|
139 |
|
140 |
/**
|
@@ -152,11 +141,11 @@ final class Tribe__Customizer {
|
|
152 |
return $sections;
|
153 |
}
|
154 |
|
155 |
-
return get_option( 'tribe_events_pro_customizer',
|
156 |
}
|
157 |
|
158 |
/**
|
159 |
-
* Loads a Section to the Customizer on The Events Calendar
|
160 |
*
|
161 |
* @since 4.4
|
162 |
*
|
@@ -245,7 +234,7 @@ final class Tribe__Customizer {
|
|
245 |
*
|
246 |
* @return mixed Return the variable based on the index
|
247 |
*/
|
248 |
-
public static function search_var( $variable = null, $indexes =
|
249 |
if ( is_object( $variable ) ) {
|
250 |
$variable = (array) $variable;
|
251 |
}
|
@@ -285,7 +274,7 @@ final class Tribe__Customizer {
|
|
285 |
*
|
286 |
* @param array $defaults
|
287 |
*/
|
288 |
-
$defaults[ $section->ID ] = apply_filters( "tribe_events_pro_customizer_section_{$section->ID}_defaults",
|
289 |
|
290 |
/**
|
291 |
* Allow filtering the defaults for each settings to be filtered before the Ghost options to be set
|
@@ -294,7 +283,7 @@ final class Tribe__Customizer {
|
|
294 |
*
|
295 |
* @param array $defaults
|
296 |
*/
|
297 |
-
$settings
|
298 |
$defaults[ $section->ID ] = apply_filters( "tribe_customizer_section_{$section->ID}_defaults", $settings );
|
299 |
$sections[ $section->ID ] = wp_parse_args( $settings, $defaults[ $section->ID ] );
|
300 |
}
|
@@ -346,14 +335,14 @@ final class Tribe__Customizer {
|
|
346 |
*
|
347 |
* @param strings Using the following structure: self::has_option( 'section_name', 'setting_name' );
|
348 |
*
|
349 |
-
* @return boolean
|
350 |
*/
|
351 |
public function has_option() {
|
352 |
$search = func_get_args();
|
353 |
$option = self::get_option();
|
354 |
-
$real_option = get_option( $this->ID,
|
355 |
|
356 |
-
// Get section and
|
357 |
$section = reset( $search );
|
358 |
$setting = end( $search );
|
359 |
|
@@ -372,8 +361,6 @@ final class Tribe__Customizer {
|
|
372 |
/**
|
373 |
* Print the CSS for the customizer on `wp_print_footer_scripts`
|
374 |
*
|
375 |
-
* @since 4.12.6 Moved the template building code to the `get_styles_scripts` method.
|
376 |
-
*
|
377 |
* @return void
|
378 |
*/
|
379 |
public function print_css_template() {
|
@@ -383,63 +370,43 @@ final class Tribe__Customizer {
|
|
383 |
return false;
|
384 |
}
|
385 |
|
386 |
-
echo $this->get_styles_scripts();
|
387 |
-
}
|
388 |
-
|
389 |
-
/**
|
390 |
-
* Print the CSS for the customizer for shortcodes.
|
391 |
-
*
|
392 |
-
* @since 4.12.6
|
393 |
-
*/
|
394 |
-
public function shortcode_inline_style() {
|
395 |
/**
|
396 |
-
*
|
397 |
-
*
|
398 |
-
* @since 4.12.6
|
399 |
*
|
400 |
-
* @
|
401 |
-
*/
|
402 |
-
$should_print = apply_filters( 'tribe_customizer_should_print_shortcode_customizer_styles', false );
|
403 |
-
|
404 |
-
if ( empty( $should_print ) ) {
|
405 |
-
return;
|
406 |
-
}
|
407 |
-
|
408 |
-
$this->inline_style();
|
409 |
-
}
|
410 |
-
|
411 |
-
/**
|
412 |
-
* Print the CSS for the customizer for widgets.
|
413 |
-
*
|
414 |
-
* @since 4.12.14
|
415 |
-
*/
|
416 |
-
public function widget_inline_style() {
|
417 |
-
/**
|
418 |
-
* Whether customizer styles should print for widgets or not.
|
419 |
*
|
420 |
-
* @
|
421 |
*
|
422 |
-
* @param
|
423 |
*/
|
424 |
-
$
|
425 |
|
426 |
-
|
427 |
-
|
|
|
|
|
428 |
}
|
429 |
|
430 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
431 |
}
|
432 |
|
433 |
/**
|
434 |
* Print the CSS for the customizer using wp_add_inline_style
|
435 |
*
|
436 |
-
* @
|
437 |
-
*
|
438 |
-
* @param bool $force Whether to ignore the context to try and print the style inline, or not.
|
439 |
*/
|
440 |
-
public function inline_style(
|
441 |
-
|
442 |
-
|
|
|
443 |
return false;
|
444 |
}
|
445 |
|
@@ -459,56 +426,29 @@ final class Tribe__Customizer {
|
|
459 |
return false;
|
460 |
}
|
461 |
|
462 |
-
|
463 |
-
|
464 |
-
];
|
465 |
|
466 |
-
|
467 |
-
|
468 |
-
*
|
469 |
-
* @since 4.12.1
|
470 |
-
*
|
471 |
-
* @param array<string> $sheets An array of sheets to search for.
|
472 |
-
* @param string $css_template String containing the inline css to add.
|
473 |
-
*/
|
474 |
-
$sheets = apply_filters( 'tribe_customizer_inline_stylesheets', $sheets, $css_template );
|
475 |
|
476 |
-
|
477 |
-
return false;
|
478 |
}
|
479 |
|
480 |
-
|
481 |
-
foreach ( array_reverse( $sheets ) as $sheet ) {
|
482 |
-
if ( wp_style_is( $sheet ) ) {
|
483 |
-
$inline_style = wp_strip_all_tags( $this->parse_css_template( $css_template ) );
|
484 |
-
|
485 |
-
/**
|
486 |
-
* Fires before a style is, possibly, printed inline depending on the stylesheet.
|
487 |
-
*
|
488 |
-
* @since 4.12.15
|
489 |
-
*
|
490 |
-
* @param string $sheet The handle of the stylesheet the style will be printed inline for.
|
491 |
-
* @param string $inline_style The inline style contents, as they will be printed on the page.
|
492 |
-
*/
|
493 |
-
do_action( 'tribe_customizer_before_inline_style', $sheet, $inline_style );
|
494 |
-
|
495 |
-
// Just print styles if doing 'wp_print_footer_scripts' action.
|
496 |
-
$just_print = (bool) doing_action( 'wp_print_footer_scripts' );
|
497 |
-
|
498 |
-
if ( $just_print ) {
|
499 |
-
printf(
|
500 |
-
"<style id='%s-inline-css' type='text/css'>\n%s\n</style>\n",
|
501 |
-
esc_attr( $sheet ),
|
502 |
-
$inline_style
|
503 |
-
);
|
504 |
-
} else {
|
505 |
-
wp_add_inline_style( $sheet, $inline_style );
|
506 |
-
}
|
507 |
-
|
508 |
-
$this->inline_style = true;
|
509 |
|
510 |
-
|
511 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
512 |
}
|
513 |
}
|
514 |
|
@@ -522,15 +462,15 @@ final class Tribe__Customizer {
|
|
522 |
$css = $template;
|
523 |
$sections = $this->get_option();
|
524 |
|
525 |
-
$search =
|
526 |
-
$replace =
|
527 |
|
528 |
foreach ( $sections as $section => $settings ) {
|
529 |
if ( ! is_array( $settings ) ) {
|
530 |
continue;
|
531 |
}
|
532 |
foreach ( $settings as $setting => $value ) {
|
533 |
-
$index =
|
534 |
|
535 |
// Add search based on Underscore template
|
536 |
$search[] = '<%= ' . implode( '.', $index ) . ' %>';
|
@@ -567,7 +507,7 @@ final class Tribe__Customizer {
|
|
567 |
$this->panel = apply_filters( 'tribe_customizer_panel', $this->register_panel(), $this );
|
568 |
|
569 |
/**
|
570 |
-
* Filter the Sections within our Panel before they are added to the
|
571 |
*
|
572 |
* @since 4.4
|
573 |
*
|
@@ -583,13 +523,11 @@ final class Tribe__Customizer {
|
|
583 |
* Allows people to Register and de-register the method to register more Fields
|
584 |
*
|
585 |
* @since 4.4
|
586 |
-
* @since 4.12.15 Add Customizer instance as a parameter.
|
587 |
*
|
588 |
* @param array $section
|
589 |
* @param WP_Customize_Manager $manager
|
590 |
-
* @param Tribe__Customizer $customizer The current customizer instance.
|
591 |
*/
|
592 |
-
do_action( "tribe_customizer_register_{$id}_settings", $this->sections[ $id ], $this->manager
|
593 |
}
|
594 |
|
595 |
/**
|
@@ -621,13 +559,13 @@ final class Tribe__Customizer {
|
|
621 |
return $panel;
|
622 |
}
|
623 |
|
624 |
-
$panel_args =
|
625 |
-
'title'
|
626 |
'description' => esc_html__( 'Use the following panel of your customizer to change the styling of your Calendar and Event pages.', 'tribe-common' ),
|
627 |
|
628 |
// After `static_front_page`
|
629 |
-
'priority'
|
630 |
-
|
631 |
|
632 |
/**
|
633 |
* Filter the Panel Arguments for WP Customize
|
@@ -781,51 +719,11 @@ final class Tribe__Customizer {
|
|
781 |
// Add the Partial
|
782 |
$this->manager->selective_refresh->add_partial(
|
783 |
$name,
|
784 |
-
|
785 |
'selector' => '#' . esc_attr( $this->ID . '_css' ),
|
786 |
-
'render_callback' =>
|
787 |
-
|
788 |
);
|
789 |
}
|
790 |
}
|
791 |
-
|
792 |
-
/**
|
793 |
-
* Builds and returns the Customizer CSS template contents.
|
794 |
-
*
|
795 |
-
* The method DOES NOT check if the current context is the one where the Customizer template should
|
796 |
-
* be printed or not; that care is left to the code calling this method.
|
797 |
-
*
|
798 |
-
* @since 4.12.6 Extracted this method from the `print_css_template` one.
|
799 |
-
*
|
800 |
-
* @return string The CSS template contents.
|
801 |
-
*/
|
802 |
-
public function get_styles_scripts() {
|
803 |
-
/**
|
804 |
-
* Use this filter to add more CSS, using Underscore Template style.
|
805 |
-
*
|
806 |
-
* @since 4.4
|
807 |
-
*
|
808 |
-
* @param string $template The Customizer template.
|
809 |
-
*
|
810 |
-
* @link http://underscorejs.org/#template
|
811 |
-
*/
|
812 |
-
$css_template = trim( apply_filters( 'tribe_customizer_css_template', '' ) );
|
813 |
-
|
814 |
-
// If we don't have anything on the Customizer, then don't print empty styles.
|
815 |
-
if ( empty( $css_template ) ) {
|
816 |
-
return '';
|
817 |
-
}
|
818 |
-
|
819 |
-
// Prepare the customizer scripts.
|
820 |
-
$result = '<script type="text/css" id="' . esc_attr( 'tmpl-' . $this->ID . '_css' ) . '">';
|
821 |
-
$result .= $css_template;
|
822 |
-
$result .= '</script>';
|
823 |
-
|
824 |
-
// Prepare the customizer styles.
|
825 |
-
$result .= '<style type="text/css" id="' . esc_attr( $this->ID . '_css' ) . '">';
|
826 |
-
$result .= $this->parse_css_template( $css_template );
|
827 |
-
$result .= '</style>';
|
828 |
-
|
829 |
-
return $result;
|
830 |
-
}
|
831 |
}
|
10 |
* @since 4.0
|
11 |
*/
|
12 |
final class Tribe__Customizer {
|
13 |
+
/**
|
14 |
+
* Static Singleton Holder
|
15 |
+
*
|
16 |
+
* @var self
|
17 |
+
*/
|
18 |
+
protected static $instance;
|
19 |
+
|
20 |
/**
|
21 |
* Static Singleton Factory Method
|
22 |
*
|
23 |
* @return self
|
|
|
|
|
24 |
*/
|
25 |
public static function instance() {
|
26 |
+
return self::$instance ? self::$instance : self::$instance = new self;
|
27 |
}
|
28 |
|
29 |
/**
|
69 |
* @access private
|
70 |
* @var array
|
71 |
*/
|
72 |
+
private $sections_class = array();
|
73 |
|
74 |
/**
|
75 |
* Array of Sections Classes, for non-panel pages
|
78 |
* @access private
|
79 |
* @var array
|
80 |
*/
|
81 |
+
private $settings = array();
|
82 |
|
83 |
/**
|
84 |
* Inline Style has been added
|
99 |
*
|
100 |
* @return void
|
101 |
*/
|
102 |
+
private function __construct() {
|
103 |
if ( ! $this->is_active() ) {
|
104 |
return;
|
105 |
}
|
115 |
$this->ID = apply_filters( 'tribe_customizer_panel_id', 'tribe_customizer', $this );
|
116 |
|
117 |
// Hook the Registering methods
|
118 |
+
add_action( 'customize_register', array( $this, 'register' ), 15 );
|
119 |
|
120 |
+
add_action( 'wp_print_footer_scripts', array( $this, 'print_css_template' ), 15 );
|
121 |
|
122 |
// front end styles from customizer
|
123 |
+
add_action( 'wp_enqueue_scripts', array( $this, 'inline_style' ), 15 );
|
124 |
+
add_action( 'tribe_events_pro_widget_render', array( $this, 'inline_style' ), 101 );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
125 |
|
126 |
+
add_filter( "default_option_{$this->ID}", array( $this, 'maybe_fallback_get_option' ) );
|
127 |
}
|
128 |
|
129 |
/**
|
141 |
return $sections;
|
142 |
}
|
143 |
|
144 |
+
return get_option( 'tribe_events_pro_customizer', array() );
|
145 |
}
|
146 |
|
147 |
/**
|
148 |
+
* Loads a Section to the Customizer on the The Events Calendar Panel
|
149 |
*
|
150 |
* @since 4.4
|
151 |
*
|
234 |
*
|
235 |
* @return mixed Return the variable based on the index
|
236 |
*/
|
237 |
+
public static function search_var( $variable = null, $indexes = array(), $default = null ) {
|
238 |
if ( is_object( $variable ) ) {
|
239 |
$variable = (array) $variable;
|
240 |
}
|
274 |
*
|
275 |
* @param array $defaults
|
276 |
*/
|
277 |
+
$defaults[ $section->ID ] = apply_filters( "tribe_events_pro_customizer_section_{$section->ID}_defaults", array() );
|
278 |
|
279 |
/**
|
280 |
* Allow filtering the defaults for each settings to be filtered before the Ghost options to be set
|
283 |
*
|
284 |
* @param array $defaults
|
285 |
*/
|
286 |
+
$settings = isset( $sections[ $section->ID ] ) ? $sections[ $section->ID ] : array();
|
287 |
$defaults[ $section->ID ] = apply_filters( "tribe_customizer_section_{$section->ID}_defaults", $settings );
|
288 |
$sections[ $section->ID ] = wp_parse_args( $settings, $defaults[ $section->ID ] );
|
289 |
}
|
335 |
*
|
336 |
* @param strings Using the following structure: self::has_option( 'section_name', 'setting_name' );
|
337 |
*
|
338 |
+
* @return boolean Wheter the option exists in the database
|
339 |
*/
|
340 |
public function has_option() {
|
341 |
$search = func_get_args();
|
342 |
$option = self::get_option();
|
343 |
+
$real_option = get_option( $this->ID, array() );
|
344 |
|
345 |
+
// Get section and Settign based on keys
|
346 |
$section = reset( $search );
|
347 |
$setting = end( $search );
|
348 |
|
361 |
/**
|
362 |
* Print the CSS for the customizer on `wp_print_footer_scripts`
|
363 |
*
|
|
|
|
|
364 |
* @return void
|
365 |
*/
|
366 |
public function print_css_template() {
|
370 |
return false;
|
371 |
}
|
372 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
373 |
/**
|
374 |
+
* Use this filter to add more CSS, using Underscore Template style
|
|
|
|
|
375 |
*
|
376 |
+
* @since 4.4
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
377 |
*
|
378 |
+
* @link http://underscorejs.org/#template
|
379 |
*
|
380 |
+
* @param string $template
|
381 |
*/
|
382 |
+
$css_template = trim( apply_filters( 'tribe_customizer_css_template', '' ) );
|
383 |
|
384 |
+
// If we don't have anything on the customizer don't print empty styles
|
385 |
+
// On Customize Page, we don't care we need this
|
386 |
+
if ( ! is_customize_preview() && empty( $css_template ) ) {
|
387 |
+
return false;
|
388 |
}
|
389 |
|
390 |
+
// All sections should use this action to print their template
|
391 |
+
echo '<script type="text/css" id="' . esc_attr( 'tmpl-' . $this->ID . '_css' ) . '">';
|
392 |
+
echo $css_template;
|
393 |
+
echo '</script>';
|
394 |
+
|
395 |
+
// Place where the template will be rendered to
|
396 |
+
echo '<style type="text/css" id="' . esc_attr( $this->ID . '_css' ) . '">';
|
397 |
+
echo $this->parse_css_template( $css_template );
|
398 |
+
echo '</style>';
|
399 |
}
|
400 |
|
401 |
/**
|
402 |
* Print the CSS for the customizer using wp_add_inline_style
|
403 |
*
|
404 |
+
* @return void
|
|
|
|
|
405 |
*/
|
406 |
+
public function inline_style() {
|
407 |
+
|
408 |
+
//Only load on front end
|
409 |
+
if ( is_customize_preview() || is_admin() || $this->inline_style ) {
|
410 |
return false;
|
411 |
}
|
412 |
|
426 |
return false;
|
427 |
}
|
428 |
|
429 |
+
// add customizer styles inline with either main stylesheet is enqueued or widgets
|
430 |
+
if ( wp_style_is( 'tribe-events-calendar-style' ) ) {
|
|
|
431 |
|
432 |
+
wp_add_inline_style( 'tribe-events-calendar-style', wp_strip_all_tags( $this->parse_css_template( $css_template ) ) );
|
433 |
+
$this->inline_style = true;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
434 |
|
435 |
+
return;
|
|
|
436 |
}
|
437 |
|
438 |
+
if ( wp_style_is( 'tribe-events-calendar-pro-style' ) ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
439 |
|
440 |
+
wp_add_inline_style( 'tribe-events-calendar-pro-style', wp_strip_all_tags( $this->parse_css_template( $css_template ) ) );
|
441 |
+
$this->inline_style = true;
|
442 |
+
|
443 |
+
return;
|
444 |
+
}
|
445 |
+
|
446 |
+
if ( wp_style_is( 'widget-calendar-pro-style' ) ) {
|
447 |
+
|
448 |
+
wp_add_inline_style( 'widget-calendar-pro-style', wp_strip_all_tags( $this->parse_css_template( $css_template ) ) );
|
449 |
+
$this->inline_style = true;
|
450 |
+
|
451 |
+
return;
|
452 |
}
|
453 |
}
|
454 |
|
462 |
$css = $template;
|
463 |
$sections = $this->get_option();
|
464 |
|
465 |
+
$search = array();
|
466 |
+
$replace = array();
|
467 |
|
468 |
foreach ( $sections as $section => $settings ) {
|
469 |
if ( ! is_array( $settings ) ) {
|
470 |
continue;
|
471 |
}
|
472 |
foreach ( $settings as $setting => $value ) {
|
473 |
+
$index = array( $section, $setting );
|
474 |
|
475 |
// Add search based on Underscore template
|
476 |
$search[] = '<%= ' . implode( '.', $index ) . ' %>';
|
507 |
$this->panel = apply_filters( 'tribe_customizer_panel', $this->register_panel(), $this );
|
508 |
|
509 |
/**
|
510 |
+
* Filter the Sections within our Panel before they are added to the Cutomize Manager
|
511 |
*
|
512 |
* @since 4.4
|
513 |
*
|
523 |
* Allows people to Register and de-register the method to register more Fields
|
524 |
*
|
525 |
* @since 4.4
|
|
|
526 |
*
|
527 |
* @param array $section
|
528 |
* @param WP_Customize_Manager $manager
|
|
|
529 |
*/
|
530 |
+
do_action( "tribe_customizer_register_{$id}_settings", $this->sections[ $id ], $this->manager );
|
531 |
}
|
532 |
|
533 |
/**
|
559 |
return $panel;
|
560 |
}
|
561 |
|
562 |
+
$panel_args = array(
|
563 |
+
'title' => esc_html__( 'The Events Calendar', 'tribe-common' ),
|
564 |
'description' => esc_html__( 'Use the following panel of your customizer to change the styling of your Calendar and Event pages.', 'tribe-common' ),
|
565 |
|
566 |
// After `static_front_page`
|
567 |
+
'priority' => 125,
|
568 |
+
);
|
569 |
|
570 |
/**
|
571 |
* Filter the Panel Arguments for WP Customize
|
719 |
// Add the Partial
|
720 |
$this->manager->selective_refresh->add_partial(
|
721 |
$name,
|
722 |
+
array(
|
723 |
'selector' => '#' . esc_attr( $this->ID . '_css' ),
|
724 |
+
'render_callback' => array( $this, 'print_css_template' ),
|
725 |
+
)
|
726 |
);
|
727 |
}
|
728 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
729 |
}
|
common/src/Tribe/Customizer/Control.php
DELETED
@@ -1,20 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* The base class for any custom Control.
|
4 |
-
*
|
5 |
-
* @since 4.12.14
|
6 |
-
*
|
7 |
-
* @package Tribe\Customizer
|
8 |
-
*/
|
9 |
-
|
10 |
-
namespace Tribe\Customizer;
|
11 |
-
|
12 |
-
/**
|
13 |
-
* Class Control
|
14 |
-
*
|
15 |
-
* @since 4.12.14
|
16 |
-
*
|
17 |
-
* @package Tribe\Customizer
|
18 |
-
*/
|
19 |
-
abstract class Control extends \WP_Customize_Control {
|
20 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
common/src/Tribe/Customizer/Controls/Heading.php
DELETED
@@ -1,52 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Models a Customizer heading, a Control just in name, it does not control any setting.
|
4 |
-
*
|
5 |
-
* @since 4.12.14
|
6 |
-
*
|
7 |
-
* @package Tribe\Customizer\Controls
|
8 |
-
*/
|
9 |
-
|
10 |
-
namespace Tribe\Customizer\Controls;
|
11 |
-
|
12 |
-
use Tribe\Customizer\Control;
|
13 |
-
|
14 |
-
/**
|
15 |
-
* Class Heading
|
16 |
-
*
|
17 |
-
* @since 4.12.14
|
18 |
-
*
|
19 |
-
* @package Tribe\Customizer\Controls
|
20 |
-
*/
|
21 |
-
class Heading extends Control {
|
22 |
-
/**
|
23 |
-
* Anyone able to set theme options will be able to see the header.
|
24 |
-
*
|
25 |
-
* @since 4.12.14
|
26 |
-
*
|
27 |
-
* @var string
|
28 |
-
*/
|
29 |
-
public $capability = 'edit_theme_options';
|
30 |
-
|
31 |
-
/**
|
32 |
-
* The heading does not control any setting.
|
33 |
-
*
|
34 |
-
* @since 4.12.14
|
35 |
-
*
|
36 |
-
* @var array<string,mixed>
|
37 |
-
*/
|
38 |
-
public $settings = [];
|
39 |
-
|
40 |
-
/**
|
41 |
-
* Render the control's content
|
42 |
-
*
|
43 |
-
* @since 4.12.14
|
44 |
-
*/
|
45 |
-
public function render_content() {
|
46 |
-
?>
|
47 |
-
<h4 style="font-size: 20px; font-weight: normal; line-height: 1.75; margin-top: 0; margin-bottom: 0px;">
|
48 |
-
<?php echo esc_html( $this->label ); ?>
|
49 |
-
</h4>
|
50 |
-
<?php
|
51 |
-
}
|
52 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
common/src/Tribe/Customizer/Section.php
CHANGED
@@ -41,7 +41,7 @@ abstract class Tribe__Customizer__Section {
|
|
41 |
* @access private
|
42 |
* @var array
|
43 |
*/
|
44 |
-
public $defaults =
|
45 |
|
46 |
/**
|
47 |
* Information to setup the Section
|
@@ -51,12 +51,12 @@ abstract class Tribe__Customizer__Section {
|
|
51 |
* @access public
|
52 |
* @var array
|
53 |
*/
|
54 |
-
public $arguments =
|
55 |
'priority' => 10,
|
56 |
'capability' => 'edit_theme_options',
|
57 |
'title' => null,
|
58 |
'description' => null,
|
59 |
-
|
60 |
|
61 |
/**
|
62 |
* Overwrite this method to create the Fields/Settings for this section
|
@@ -85,7 +85,7 @@ abstract class Tribe__Customizer__Section {
|
|
85 |
* @param array $settings The actual options on the database
|
86 |
* @return array
|
87 |
*/
|
88 |
-
public function create_ghost_settings( $settings =
|
89 |
return $settings;
|
90 |
}
|
91 |
|
@@ -147,15 +147,15 @@ abstract class Tribe__Customizer__Section {
|
|
147 |
$this->setup();
|
148 |
|
149 |
// Hook the Register methods
|
150 |
-
add_action( "tribe_customizer_register_{$this->ID}_settings",
|
151 |
-
add_filter( 'tribe_customizer_pre_sections',
|
152 |
|
153 |
// Append this section CSS template
|
154 |
-
add_filter( 'tribe_customizer_css_template',
|
155 |
-
add_filter( "tribe_customizer_section_{$this->ID}_defaults",
|
156 |
|
157 |
// Create the Ghost Options
|
158 |
-
add_filter( 'tribe_customizer_pre_get_option',
|
159 |
|
160 |
// By Default Invoking a new Section will load, unless `load` is set to false
|
161 |
if ( true === (bool) $this->load ) {
|
@@ -167,7 +167,7 @@ abstract class Tribe__Customizer__Section {
|
|
167 |
* A way to apply filters when getting the Customizer options
|
168 |
* @return array
|
169 |
*/
|
170 |
-
public function get_defaults( $settings =
|
171 |
// Create Ghost Options
|
172 |
return $this->create_ghost_settings( wp_parse_args( $settings, $this->defaults ) );
|
173 |
}
|
41 |
* @access private
|
42 |
* @var array
|
43 |
*/
|
44 |
+
public $defaults = array();
|
45 |
|
46 |
/**
|
47 |
* Information to setup the Section
|
51 |
* @access public
|
52 |
* @var array
|
53 |
*/
|
54 |
+
public $arguments = array(
|
55 |
'priority' => 10,
|
56 |
'capability' => 'edit_theme_options',
|
57 |
'title' => null,
|
58 |
'description' => null,
|
59 |
+
);
|
60 |
|
61 |
/**
|
62 |
* Overwrite this method to create the Fields/Settings for this section
|
85 |
* @param array $settings The actual options on the database
|
86 |
* @return array
|
87 |
*/
|
88 |
+
public function create_ghost_settings( $settings = array() ) {
|
89 |
return $settings;
|
90 |
}
|
91 |
|
147 |
$this->setup();
|
148 |
|
149 |
// Hook the Register methods
|
150 |
+
add_action( "tribe_customizer_register_{$this->ID}_settings", array( $this, 'register_settings' ), 10, 2 );
|
151 |
+
add_filter( 'tribe_customizer_pre_sections', array( $this, 'register' ), 10, 2 );
|
152 |
|
153 |
// Append this section CSS template
|
154 |
+
add_filter( 'tribe_customizer_css_template', array( $this, 'get_css_template' ), 15 );
|
155 |
+
add_filter( "tribe_customizer_section_{$this->ID}_defaults", array( $this, 'get_defaults' ), 10 );
|
156 |
|
157 |
// Create the Ghost Options
|
158 |
+
add_filter( 'tribe_customizer_pre_get_option', array( $this, 'filter_settings' ), 10, 2 );
|
159 |
|
160 |
// By Default Invoking a new Section will load, unless `load` is set to false
|
161 |
if ( true === (bool) $this->load ) {
|
167 |
* A way to apply filters when getting the Customizer options
|
168 |
* @return array
|
169 |
*/
|
170 |
+
public function get_defaults( $settings = array() ) {
|
171 |
// Create Ghost Options
|
172 |
return $this->create_ghost_settings( wp_parse_args( $settings, $this->defaults ) );
|
173 |
}
|
common/src/Tribe/DB_Lock.php
DELETED
@@ -1,352 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Manages database locks using MySQL fucntions or queries.
|
4 |
-
*
|
5 |
-
* The MySQL functions used by this class are `GET_LOCK`, `IS_FREE_LOCK` and `RELEASE_LOCK`.
|
6 |
-
* The functions are part of MySQL 5.6 and in line with WordPress minimum requirement of MySQL version (5.6).
|
7 |
-
*
|
8 |
-
* @see https://dev.mysql.com/doc/refman/5.6/en/locking-functions.html#function_get-lock
|
9 |
-
*
|
10 |
-
* @since 4.12.6
|
11 |
-
*
|
12 |
-
* @package Tribe
|
13 |
-
*/
|
14 |
-
|
15 |
-
namespace Tribe;
|
16 |
-
|
17 |
-
/**
|
18 |
-
* Class DB_Lock
|
19 |
-
*
|
20 |
-
* @since 4.12.6
|
21 |
-
*
|
22 |
-
* @package Tribe
|
23 |
-
*/
|
24 |
-
class DB_Lock {
|
25 |
-
|
26 |
-
/**
|
27 |
-
* The prefix of the options used to manage the database lock without use of MySQL functions
|
28 |
-
* in the options table.
|
29 |
-
*
|
30 |
-
* @since 4.12.6
|
31 |
-
*
|
32 |
-
* @var string
|
33 |
-
*/
|
34 |
-
public static $db_lock_option_prefix = 'tribe_db_lock_';
|
35 |
-
|
36 |
-
/**
|
37 |
-
* A map, shared among all instance of this trait in the session, of the currently held locks the
|
38 |
-
* time the locks where acquired, a UNIX timestamp w/ micro-seconds.
|
39 |
-
*
|
40 |
-
* @since 4.12.6
|
41 |
-
*
|
42 |
-
* @var array<string,float>
|
43 |
-
*/
|
44 |
-
protected static $held_db_locks = [];
|
45 |
-
|
46 |
-
/**
|
47 |
-
* Prunes the stale locks stored in the options table.
|
48 |
-
*
|
49 |
-
* @since 4.12.6
|
50 |
-
*
|
51 |
-
* @return int|false The number of pruned locks, or `false` to indicate the query to prune the locks generated
|
52 |
-
* an error (logged).
|
53 |
-
*/
|
54 |
-
public static function prune_stale_db_locks() {
|
55 |
-
global $wpdb;
|
56 |
-
$prefix = static::$db_lock_option_prefix;
|
57 |
-
$affected_rows = $wpdb->query(
|
58 |
-
"DELETE FROM {$wpdb->options}
|
59 |
-
WHERE option_name LIKE '{$prefix}%'
|
60 |
-
AND option_value < ( UNIX_TIMESTAMP() - 86400 )"
|
61 |
-
);
|
62 |
-
|
63 |
-
if ( false === $affected_rows ) {
|
64 |
-
$log_data = [
|
65 |
-
'message' => 'Error while trying to prune stale db locks.',
|
66 |
-
'error' => $wpdb->last_error
|
67 |
-
];
|
68 |
-
do_action( 'tribe_log', 'error', __CLASS__, $log_data );
|
69 |
-
|
70 |
-
return false;
|
71 |
-
}
|
72 |
-
|
73 |
-
return (int) $affected_rows;
|
74 |
-
}
|
75 |
-
|
76 |
-
/**
|
77 |
-
* Acquires a db lock.
|
78 |
-
*
|
79 |
-
* To ensure back-compatibility with MySQL 5.6, the lock will hash the lock key using SHA1.
|
80 |
-
*
|
81 |
-
* @since 4.12.6
|
82 |
-
*
|
83 |
-
* @param string $lock_key The name of the db lock key to acquire.
|
84 |
-
*
|
85 |
-
* @return bool Whether the lock acquisition was successful or not.
|
86 |
-
*/
|
87 |
-
public function acquire_db_lock( $lock_key ) {
|
88 |
-
/**
|
89 |
-
* Filters the timeout, in seconds, of the database lock acquisition attempts.
|
90 |
-
*
|
91 |
-
* The timeout will not be used when locks are managed using queries in place of
|
92 |
-
* MySQL functions.
|
93 |
-
*
|
94 |
-
* @since 4.12.6
|
95 |
-
*
|
96 |
-
* @param int $timeout The timeout, in seconds, of the lock acquisition attempt.
|
97 |
-
* @param string $lock_key The lock key the target of the acquisition attempt.
|
98 |
-
* @param static $this The object that's trying to acquire the lock by means of the trait.
|
99 |
-
*/
|
100 |
-
$timeout = apply_filters( 'tribe_db_lock_timeout', 3, $lock_key, $this );
|
101 |
-
|
102 |
-
if ( $this->manage_db_lock_w_mysql_functions() ) {
|
103 |
-
return $this->acquire_db_lock_w_mysql_functions( $lock_key, $timeout );
|
104 |
-
}
|
105 |
-
|
106 |
-
return $this->acquire_db_lock_w_queries( $lock_key );
|
107 |
-
}
|
108 |
-
|
109 |
-
/**
|
110 |
-
* Returns whether the traits should try to acquire and release locks using MySQL `GET_LOCK` and `RELEASE_LOCK`
|
111 |
-
* functions or not.
|
112 |
-
*
|
113 |
-
* If not, then the trait will manage the locks by means of direct SQL queries on the options table.
|
114 |
-
*
|
115 |
-
* @since 4.12.6
|
116 |
-
*
|
117 |
-
* @return bool Whether the trait should use MySQL functions to manage the locks, or not.
|
118 |
-
*/
|
119 |
-
protected function manage_db_lock_w_mysql_functions() {
|
120 |
-
/**
|
121 |
-
* Filters whether the database lock should be acquired using the `GET_LOCK` and `RELEASE_LOCK`
|
122 |
-
* MySQL functions or not.
|
123 |
-
*
|
124 |
-
* If the filter returns a falsy value, then the trait will attempt to manage locks using `SELECT`
|
125 |
-
* and `UPDATE` queries on the options table.
|
126 |
-
*
|
127 |
-
* @since 4.12.6
|
128 |
-
*/
|
129 |
-
return tribe_is_truthy( apply_filters( 'tribe_db_lock_use_msyql_functions', true ) );
|
130 |
-
}
|
131 |
-
|
132 |
-
/**
|
133 |
-
* Tries to acquire the database lock using MySQL functions (`GET_LOCK` and `IS_FREE_LOCK`).
|
134 |
-
*
|
135 |
-
* @since 4.12.6
|
136 |
-
*
|
137 |
-
* @param string $lock_key The lock key to try and acquire the lock for.
|
138 |
-
* @param int $timeout The timeout, in seconds, to try and acquire the lock.
|
139 |
-
*
|
140 |
-
* @return bool Whether the lock was acquired or not.
|
141 |
-
*/
|
142 |
-
protected function acquire_db_lock_w_mysql_functions( $lock_key, $timeout ) {
|
143 |
-
/*
|
144 |
-
* On MySQL 5.6 if a session (a db connection) fires two requests of `GET_LOCK`, the lock is
|
145 |
-
* implicitly released and re-acquired.
|
146 |
-
* While this will not cause issues in the context of different db sessions (e.g. two diff. PHP
|
147 |
-
* processes competing for a lock), it would cause issues when the lock acquisition is attempted
|
148 |
-
* in the context of the same PHP process.
|
149 |
-
* To avoid a read-what-you-write issue in the context of the same request, we check if the lock is
|
150 |
-
* free, using `IS_FREE_LOCK` first.
|
151 |
-
*/
|
152 |
-
|
153 |
-
global $wpdb;
|
154 |
-
|
155 |
-
$free = $wpdb->get_var(
|
156 |
-
$wpdb->prepare( 'SELECT IS_FREE_LOCK( SHA1( %s ) )', $lock_key )
|
157 |
-
);
|
158 |
-
|
159 |
-
if ( ! $free ) {
|
160 |
-
return false;
|
161 |
-
}
|
162 |
-
|
163 |
-
$acquired = $wpdb->get_var(
|
164 |
-
$wpdb->prepare( 'SELECT GET_LOCK( SHA1( %s ),%d )', $lock_key, $timeout )
|
165 |
-
|
166 |
-
);
|
167 |
-
|
168 |
-
if ( false === $acquired ) {
|
169 |
-
// Only log errors, a failure to acquire lock is not an error.
|
170 |
-
$log_data = [
|
171 |
-
'message' => 'Error while trying to acquire lock.',
|
172 |
-
'key' => $lock_key,
|
173 |
-
'error' => $wpdb->last_error
|
174 |
-
];
|
175 |
-
do_action( 'tribe_log', 'error', __CLASS__, $log_data );
|
176 |
-
|
177 |
-
return false;
|
178 |
-
}
|
179 |
-
|
180 |
-
return true;
|
181 |
-
}
|
182 |
-
|
183 |
-
/**
|
184 |
-
* Tries to acquire the lock using SQL queries.
|
185 |
-
*
|
186 |
-
* This kind of lock does not support timeout to avoid sieging the MySQL server during processes
|
187 |
-
* that are most likely already stressing it. Either the lock is available the moment it's required or not.
|
188 |
-
* The method leverages `INSERT IGNORE` that it's available on MySQL 5.6 and is atomic provided one of the values
|
189 |
-
* we're trying to insert is UNIQUE or PRIMARY: `option_name` is UNIQUE in the `options` table.
|
190 |
-
*
|
191 |
-
* @since 4.12.6
|
192 |
-
*
|
193 |
-
* @param string $lock_key The lock key to try and acquire the lock for.
|
194 |
-
*
|
195 |
-
* @return bool Whether the lock was acquired or not.
|
196 |
-
*/
|
197 |
-
protected function acquire_db_lock_w_queries( $lock_key ) {
|
198 |
-
global $wpdb;
|
199 |
-
$option_name = $this->get_db_lock_option_name( $lock_key );
|
200 |
-
$lock_time = microtime( true );
|
201 |
-
|
202 |
-
//phpcs:disable
|
203 |
-
$rows_affected = $wpdb->query(
|
204 |
-
$wpdb->prepare( "INSERT IGNORE INTO {$wpdb->options}
|
205 |
-
(option_name, option_value, autoload)
|
206 |
-
VALUES
|
207 |
-
(%s, %s, 'no')",
|
208 |
-
$option_name,
|
209 |
-
$lock_time
|
210 |
-
)
|
211 |
-
);
|
212 |
-
//phpcs:enable
|
213 |
-
|
214 |
-
if ( false === $rows_affected ) {
|
215 |
-
$log_data = [
|
216 |
-
'message' => 'Error while trying to acquire lock with database.',
|
217 |
-
'key' => $lock_key,
|
218 |
-
'option_name' => $option_name,
|
219 |
-
'error' => $wpdb->last_error,
|
220 |
-
];
|
221 |
-
do_action( 'tribe_log', 'error', __CLASS__, $log_data );
|
222 |
-
|
223 |
-
return false;
|
224 |
-
}
|
225 |
-
|
226 |
-
/*
|
227 |
-
* The `wpdb::query()` method will return the number of affected rows when using `INSERT`.
|
228 |
-
* 1 row affected means we could INSERT and have the lock, 0 rows affected means we could not INSERT
|
229 |
-
* and have not the lock.
|
230 |
-
*/
|
231 |
-
|
232 |
-
if ( $rows_affected ) {
|
233 |
-
self::$held_db_locks[ $lock_key ] = $lock_time;
|
234 |
-
}
|
235 |
-
|
236 |
-
return (bool) $rows_affected;
|
237 |
-
}
|
238 |
-
|
239 |
-
/**
|
240 |
-
* Returns the option name used to manage the lock for a key in the options table.
|
241 |
-
*
|
242 |
-
* @since 4.12.6
|
243 |
-
*
|
244 |
-
* @param string $lock_key The lock key to build the option name for.
|
245 |
-
*
|
246 |
-
* @return string The name of the option that will be used to manage the lock for the specified key in the
|
247 |
-
* options table.
|
248 |
-
*/
|
249 |
-
public function get_db_lock_option_name( $lock_key ) {
|
250 |
-
return self::$db_lock_option_prefix . $lock_key;
|
251 |
-
}
|
252 |
-
|
253 |
-
/**
|
254 |
-
* Releases the database lock of the record.
|
255 |
-
*
|
256 |
-
* Release a not held db lock will return `null`, not `false`.
|
257 |
-
*
|
258 |
-
* @since 4.12.6
|
259 |
-
*
|
260 |
-
* @param string $lock_key The name of the lock to release.
|
261 |
-
*
|
262 |
-
* @return bool Whether the lock was correctly released or not.
|
263 |
-
*/
|
264 |
-
public function release_db_lock( $lock_key ) {
|
265 |
-
if ( $this->manage_db_lock_w_mysql_functions() ) {
|
266 |
-
return $this->release_db_lock_w_mysql_functions( $lock_key );
|
267 |
-
}
|
268 |
-
|
269 |
-
return $this->release_db_lock_w_queries( $lock_key );
|
270 |
-
}
|
271 |
-
|
272 |
-
/**
|
273 |
-
* Releases a DB lock held by the current database session (`$wpdb` instance) by
|
274 |
-
* using the MySQL `RELEASE_LOCK` function.
|
275 |
-
*
|
276 |
-
* @since 4.12.6
|
277 |
-
*
|
278 |
-
* @param string $lock_key The lock key to release the lock for.
|
279 |
-
*
|
280 |
-
* @return bool Whether the lock was correctly released or not.
|
281 |
-
*/
|
282 |
-
protected function release_db_lock_w_mysql_functions( $lock_key ) {
|
283 |
-
global $wpdb;
|
284 |
-
|
285 |
-
$released = $wpdb->query(
|
286 |
-
$wpdb->prepare( "SELECT RELEASE_LOCK( SHA1( %s ) )", $lock_key )
|
287 |
-
);
|
288 |
-
|
289 |
-
if ( false === $released ) {
|
290 |
-
$log_data = [
|
291 |
-
'message' => 'Error while trying to release lock.',
|
292 |
-
'key' => $lock_key,
|
293 |
-
'error' => $wpdb->last_error
|
294 |
-
];
|
295 |
-
do_action( 'tribe_log', 'error', __CLASS__, $log_data );
|
296 |
-
|
297 |
-
return false;
|
298 |
-
}
|
299 |
-
|
300 |
-
return true;
|
301 |
-
}
|
302 |
-
|
303 |
-
/**
|
304 |
-
* Releases a lock using SQL queries.
|
305 |
-
*
|
306 |
-
* Note: differently from the `release_db_lock_w_mysql_functions`, this method will release the lock
|
307 |
-
* even if the current session is not the one holding the lock.
|
308 |
-
* To protect from this the trait uses a map of registered locks and when the locks where registered.
|
309 |
-
*
|
310 |
-
* @since 4.12.6
|
311 |
-
*
|
312 |
-
* @param string $lock_key The lock key to release the lock for.
|
313 |
-
*
|
314 |
-
* @return bool Whether the lock was released or not, errors will be logged, a `false` value is returned if
|
315 |
-
* the lock was not held to begin with.
|
316 |
-
*/
|
317 |
-
protected function release_db_lock_w_queries( $lock_key ) {
|
318 |
-
if ( ! isset( self::$held_db_locks[ $lock_key ] ) ) {
|
319 |
-
// Avoid sessions that do nothold the lock to release it.
|
320 |
-
return false;
|
321 |
-
}
|
322 |
-
|
323 |
-
global $wpdb;
|
324 |
-
$option_name = $this->get_db_lock_option_name( $lock_key );
|
325 |
-
//phpcs:disable
|
326 |
-
$rows_affected = $wpdb->delete(
|
327 |
-
$wpdb->options,
|
328 |
-
[ 'option_name' => $option_name ],
|
329 |
-
[ '%s' ]
|
330 |
-
);
|
331 |
-
//phpcs:enable
|
332 |
-
|
333 |
-
if ( false === $rows_affected ) {
|
334 |
-
$log_data = [
|
335 |
-
'message' => 'Error while trying to release lock with database.',
|
336 |
-
'key' => $lock_key,
|
337 |
-
'option_name' => $option_name,
|
338 |
-
'error' => $wpdb->last_error,
|
339 |
-
];
|
340 |
-
do_action( 'tribe_log', 'error', __CLASS__, $log_data );
|
341 |
-
|
342 |
-
return false;
|
343 |
-
}
|
344 |
-
|
345 |
-
if ( $rows_affected ) {
|
346 |
-
// Lock successfully released.
|
347 |
-
unset( self::$held_db_locks[ $lock_key ] );
|
348 |
-
}
|
349 |
-
|
350 |
-
return (bool) $rows_affected;
|
351 |
-
}
|
352 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
common/src/Tribe/Data.php
CHANGED
@@ -49,7 +49,7 @@ class Tribe__Data implements ArrayAccess, Iterator {
|
|
49 |
* @param array|object $data An array or object of data.
|
50 |
* @param mixed $default The default value that should be returned if a key is not set
|
51 |
*/
|
52 |
-
public function __construct( $data =
|
53 |
$this->data = (array) $data;
|
54 |
$this->default = $default;
|
55 |
}
|
49 |
* @param array|object $data An array or object of data.
|
50 |
* @param mixed $default The default value that should be returned if a key is not set
|
51 |
*/
|
52 |
+
public function __construct( $data = array(), $default = false ) {
|
53 |
$this->data = (array) $data;
|
54 |
$this->default = $default;
|
55 |
}
|
common/src/Tribe/Date_Utils.php
CHANGED
@@ -35,10 +35,10 @@ if ( ! class_exists( 'Tribe__Date_Utils' ) ) {
|
|
35 |
*/
|
36 |
private static $default_datepicker_format_index = 1;
|
37 |
|
38 |
-
private static $localized_months_full
|
39 |
-
private static $localized_months_short =
|
40 |
-
private static $localized_weekdays
|
41 |
-
private static $localized_months
|
42 |
|
43 |
/**
|
44 |
* Get the datepickerFormat index.
|
@@ -95,7 +95,7 @@ if ( ! class_exists( 'Tribe__Date_Utils' ) ) {
|
|
95 |
public static function datepicker_formats( $translate = null ) {
|
96 |
|
97 |
// The datepicker has issues when a period separator and no leading zero is used. Those formats are purposefully omitted.
|
98 |
-
$formats =
|
99 |
0 => 'Y-m-d',
|
100 |
1 => 'n/j/Y',
|
101 |
2 => 'm/d/Y',
|
@@ -120,7 +120,7 @@ if ( ! class_exists( 'Tribe__Date_Utils' ) ) {
|
|
120 |
'm9' => 'Y.m',
|
121 |
'm10' => 'm.Y',
|
122 |
'm11' => 'm.Y',
|
123 |
-
|
124 |
|
125 |
if ( is_null( $translate ) ) {
|
126 |
return $formats;
|
@@ -140,55 +140,55 @@ if ( ! class_exists( 'Tribe__Date_Utils' ) ) {
|
|
140 |
*/
|
141 |
public static function datetime_from_format( $format, $date ) {
|
142 |
// Reverse engineer the relevant date formats
|
143 |
-
$keys =
|
144 |
// Year with 4 Digits
|
145 |
-
'Y' =>
|
146 |
|
147 |
// Year with 2 Digits
|
148 |
-
'y' =>
|
149 |
|
150 |
// Month with leading 0
|
151 |
-
'm' =>
|
152 |
|
153 |
// Month without the leading 0
|
154 |
-
'n' =>
|
155 |
|
156 |
// Month ABBR 3 letters
|
157 |
-
'M' =>
|
158 |
|
159 |
// Month Name
|
160 |
-
'F' =>
|
161 |
|
162 |
// Day with leading 0
|
163 |
-
'd' =>
|
164 |
|
165 |
// Day without leading 0
|
166 |
-
'j' =>
|
167 |
|
168 |
// Day ABBR 3 Letters
|
169 |
-
'D' =>
|
170 |
|
171 |
// Day Name
|
172 |
-
'l' =>
|
173 |
|
174 |
// Hour 12h formatted, with leading 0
|
175 |
-
'h' =>
|
176 |
|
177 |
// Hour 24h formatted, with leading 0
|
178 |
-
'H' =>
|
179 |
|
180 |
// Hour 12h formatted, without leading 0
|
181 |
-
'g' =>
|
182 |
|
183 |
// Hour 24h formatted, without leading 0
|
184 |
-
'G' =>
|
185 |
|
186 |
// Minutes with leading 0
|
187 |
-
'i' =>
|
188 |
|
189 |
// Seconds with leading 0
|
190 |
-
's' =>
|
191 |
-
|
192 |
|
193 |
$date_regex = "/{$keys['Y'][1]}-{$keys['m'][1]}-{$keys['d'][1]}( {$keys['H'][1]}:{$keys['i'][1]}:{$keys['s'][1]})?$/";
|
194 |
|
@@ -213,7 +213,7 @@ if ( ! class_exists( 'Tribe__Date_Utils' ) ) {
|
|
213 |
}
|
214 |
}
|
215 |
|
216 |
-
$dt =
|
217 |
|
218 |
// Now try to match it
|
219 |
if ( preg_match( '#^' . $regex . '$#', $date, $dt ) ) {
|
@@ -377,7 +377,7 @@ if ( ! class_exists( 'Tribe__Date_Utils' ) ) {
|
|
377 |
* @return bool If the timestamp is a weekday.
|
378 |
*/
|
379 |
public static function is_weekday( $curdate ) {
|
380 |
-
return in_array( date( 'N', $curdate ),
|
381 |
}
|
382 |
|
383 |
/**
|
@@ -388,7 +388,7 @@ if ( ! class_exists( 'Tribe__Date_Utils' ) ) {
|
|
388 |
* @return bool If the timestamp is a weekend.
|
389 |
*/
|
390 |
public static function is_weekend( $curdate ) {
|
391 |
-
return in_array( date( 'N', $curdate ),
|
392 |
}
|
393 |
|
394 |
/**
|
@@ -664,7 +664,7 @@ if ( ! class_exists( 'Tribe__Date_Utils' ) ) {
|
|
664 |
}
|
665 |
|
666 |
if ( empty( self::$localized_months_full ) ) {
|
667 |
-
self::$localized_months_full =
|
668 |
'January' => self::$localized_months['full']['01'],
|
669 |
'February' => self::$localized_months['full']['02'],
|
670 |
'March' => self::$localized_months['full']['03'],
|
@@ -677,7 +677,7 @@ if ( ! class_exists( 'Tribe__Date_Utils' ) ) {
|
|
677 |
'October' => self::$localized_months['full']['10'],
|
678 |
'November' => self::$localized_months['full']['11'],
|
679 |
'December' => self::$localized_months['full']['12'],
|
680 |
-
|
681 |
}
|
682 |
|
683 |
return self::$localized_months_full;
|
@@ -696,7 +696,7 @@ if ( ! class_exists( 'Tribe__Date_Utils' ) ) {
|
|
696 |
}
|
697 |
|
698 |
if ( empty( self::$localized_months_short ) ) {
|
699 |
-
self::$localized_months_short =
|
700 |
'Jan' => self::$localized_months['short']['01'],
|
701 |
'Feb' => self::$localized_months['short']['02'],
|
702 |
'Mar' => self::$localized_months['short']['03'],
|
@@ -709,7 +709,7 @@ if ( ! class_exists( 'Tribe__Date_Utils' ) ) {
|
|
709 |
'Oct' => self::$localized_months['short']['10'],
|
710 |
'Nov' => self::$localized_months['short']['11'],
|
711 |
'Dec' => self::$localized_months['short']['12'],
|
712 |
-
|
713 |
}
|
714 |
|
715 |
return self::$localized_months_short;
|
@@ -797,7 +797,7 @@ if ( ! class_exists( 'Tribe__Date_Utils' ) ) {
|
|
797 |
public static function wp_locale_weekday( $weekday, $format = 'weekday' ) {
|
798 |
$weekday = trim( $weekday );
|
799 |
|
800 |
-
$valid_formats =
|
801 |
'full',
|
802 |
'weekday',
|
803 |
'initial',
|
@@ -805,7 +805,7 @@ if ( ! class_exists( 'Tribe__Date_Utils' ) ) {
|
|
805 |
'abbrev',
|
806 |
'abbr',
|
807 |
'short',
|
808 |
-
|
809 |
|
810 |
// if there isn't a valid format, bail without providing a localized string
|
811 |
if ( ! in_array( $format, $valid_formats ) ) {
|
@@ -819,7 +819,7 @@ if ( ! class_exists( 'Tribe__Date_Utils' ) ) {
|
|
819 |
// if the weekday isn't numeric, we need to convert to numeric in order to
|
820 |
// leverage self::localized_weekdays
|
821 |
if ( ! is_numeric( $weekday ) ) {
|
822 |
-
$days_of_week =
|
823 |
'Sun',
|
824 |
'Mon',
|
825 |
'Tue',
|
@@ -827,7 +827,7 @@ if ( ! class_exists( 'Tribe__Date_Utils' ) ) {
|
|
827 |
'Thu',
|
828 |
'Fri',
|
829 |
'Sat',
|
830 |
-
|
831 |
|
832 |
$day_index = array_search( ucwords( substr( $weekday, 0, 3 ) ), $days_of_week );
|
833 |
|
@@ -871,14 +871,14 @@ if ( ! class_exists( 'Tribe__Date_Utils' ) ) {
|
|
871 |
public static function wp_locale_month( $month, $format = 'month' ) {
|
872 |
$month = trim( $month );
|
873 |
|
874 |
-
$valid_formats =
|
875 |
'full',
|
876 |
'month',
|
877 |
'abbreviation',
|
878 |
'abbrev',
|
879 |
'abbr',
|
880 |
'short',
|
881 |
-
|
882 |
|
883 |
// if there isn't a valid format, bail without providing a localized string
|
884 |
if ( ! in_array( $format, $valid_formats ) ) {
|
@@ -898,7 +898,7 @@ if ( ! class_exists( 'Tribe__Date_Utils' ) ) {
|
|
898 |
return $month;
|
899 |
}
|
900 |
} else {
|
901 |
-
$months =
|
902 |
'Jan',
|
903 |
'Feb',
|
904 |
'Mar',
|
@@ -911,7 +911,7 @@ if ( ! class_exists( 'Tribe__Date_Utils' ) ) {
|
|
911 |
'Oct',
|
912 |
'Nov',
|
913 |
'Dec',
|
914 |
-
|
915 |
|
916 |
// convert the provided month to a 3-character month and find it in the months array so we
|
917 |
// can build an appropriate month number
|
@@ -1184,7 +1184,7 @@ if ( ! class_exists( 'Tribe__Date_Utils' ) ) {
|
|
1184 |
&& is_numeric( $month )
|
1185 |
&& is_numeric( $year )
|
1186 |
&& is_numeric( $week_direction )
|
1187 |
-
&& in_array( $week_direction,
|
1188 |
)
|
1189 |
) {
|
1190 |
return false;
|
35 |
*/
|
36 |
private static $default_datepicker_format_index = 1;
|
37 |
|
38 |
+
private static $localized_months_full = array();
|
39 |
+
private static $localized_months_short = array();
|
40 |
+
private static $localized_weekdays = array();
|
41 |
+
private static $localized_months = array();
|
42 |
|
43 |
/**
|
44 |
* Get the datepickerFormat index.
|
95 |
public static function datepicker_formats( $translate = null ) {
|
96 |
|
97 |
// The datepicker has issues when a period separator and no leading zero is used. Those formats are purposefully omitted.
|
98 |
+
$formats = array(
|
99 |
0 => 'Y-m-d',
|
100 |
1 => 'n/j/Y',
|
101 |
2 => 'm/d/Y',
|
120 |
'm9' => 'Y.m',
|
121 |
'm10' => 'm.Y',
|
122 |
'm11' => 'm.Y',
|
123 |
+
);
|
124 |
|
125 |
if ( is_null( $translate ) ) {
|
126 |
return $formats;
|
140 |
*/
|
141 |
public static function datetime_from_format( $format, $date ) {
|
142 |
// Reverse engineer the relevant date formats
|
143 |
+
$keys = array(
|
144 |
// Year with 4 Digits
|
145 |
+
'Y' => array( 'year', '\d{4}' ),
|
146 |
|
147 |
// Year with 2 Digits
|
148 |
+
'y' => array( 'year', '\d{2}' ),
|
149 |
|
150 |
// Month with leading 0
|
151 |
+
'm' => array( 'month', '\d{2}' ),
|
152 |
|
153 |
// Month without the leading 0
|
154 |
+
'n' => array( 'month', '\d{1,2}' ),
|
155 |
|
156 |
// Month ABBR 3 letters
|
157 |
+
'M' => array( 'month', '[A-Z][a-z]{2}' ),
|
158 |
|
159 |
// Month Name
|
160 |
+
'F' => array( 'month', '[A-Z][a-z]{2,8}' ),
|
161 |
|
162 |
// Day with leading 0
|
163 |
+
'd' => array( 'day', '\d{2}' ),
|
164 |
|
165 |
// Day without leading 0
|
166 |
+
'j' => array( 'day', '\d{1,2}' ),
|
167 |
|
168 |
// Day ABBR 3 Letters
|
169 |
+
'D' => array( 'day', '[A-Z][a-z]{2}' ),
|
170 |
|
171 |
// Day Name
|
172 |
+
'l' => array( 'day', '[A-Z][a-z]{5,8}' ),
|
173 |
|
174 |
// Hour 12h formatted, with leading 0
|
175 |
+
'h' => array( 'hour', '\d{2}' ),
|
176 |
|
177 |
// Hour 24h formatted, with leading 0
|
178 |
+
'H' => array( 'hour', '\d{2}' ),
|
179 |
|
180 |
// Hour 12h formatted, without leading 0
|
181 |
+
'g' => array( 'hour', '\d{1,2}' ),
|
182 |
|
183 |
// Hour 24h formatted, without leading 0
|
184 |
+
'G' => array( 'hour', '\d{1,2}' ),
|
185 |
|
186 |
// Minutes with leading 0
|
187 |
+
'i' => array( 'minute', '\d{2}' ),
|
188 |
|
189 |
// Seconds with leading 0
|
190 |
+
's' => array( 'second', '\d{2}' ),
|
191 |
+
);
|
192 |
|
193 |
$date_regex = "/{$keys['Y'][1]}-{$keys['m'][1]}-{$keys['d'][1]}( {$keys['H'][1]}:{$keys['i'][1]}:{$keys['s'][1]})?$/";
|
194 |
|
213 |
}
|
214 |
}
|
215 |
|
216 |
+
$dt = array();
|
217 |
|
218 |
// Now try to match it
|
219 |
if ( preg_match( '#^' . $regex . '$#', $date, $dt ) ) {
|
377 |
* @return bool If the timestamp is a weekday.
|
378 |
*/
|
379 |
public static function is_weekday( $curdate ) {
|
380 |
+
return in_array( date( 'N', $curdate ), array( 1, 2, 3, 4, 5 ) );
|
381 |
}
|
382 |
|
383 |
/**
|
388 |
* @return bool If the timestamp is a weekend.
|
389 |
*/
|
390 |
public static function is_weekend( $curdate ) {
|
391 |
+
return in_array( date( 'N', $curdate ), array( 6, 7 ) );
|
392 |
}
|
393 |
|
394 |
/**
|
664 |
}
|
665 |
|
666 |
if ( empty( self::$localized_months_full ) ) {
|
667 |
+
self::$localized_months_full = array(
|
668 |
'January' => self::$localized_months['full']['01'],
|
669 |
'February' => self::$localized_months['full']['02'],
|
670 |
'March' => self::$localized_months['full']['03'],
|
677 |
'October' => self::$localized_months['full']['10'],
|
678 |
'November' => self::$localized_months['full']['11'],
|
679 |
'December' => self::$localized_months['full']['12'],
|
680 |
+
);
|
681 |
}
|
682 |
|
683 |
return self::$localized_months_full;
|
696 |
}
|
697 |
|
698 |
if ( empty( self::$localized_months_short ) ) {
|
699 |
+
self::$localized_months_short = array(
|
700 |
'Jan' => self::$localized_months['short']['01'],
|
701 |
'Feb' => self::$localized_months['short']['02'],
|
702 |
'Mar' => self::$localized_months['short']['03'],
|
709 |
'Oct' => self::$localized_months['short']['10'],
|
710 |
'Nov' => self::$localized_months['short']['11'],
|
711 |
'Dec' => self::$localized_months['short']['12'],
|
712 |
+
);
|
713 |
}
|
714 |
|
715 |
return self::$localized_months_short;
|
797 |
public static function wp_locale_weekday( $weekday, $format = 'weekday' ) {
|
798 |
$weekday = trim( $weekday );
|
799 |
|
800 |
+
$valid_formats = array(
|
801 |
'full',
|
802 |
'weekday',
|
803 |
'initial',
|
805 |
'abbrev',
|
806 |
'abbr',
|
807 |
'short',
|
808 |
+
);
|
809 |
|
810 |
// if there isn't a valid format, bail without providing a localized string
|
811 |
if ( ! in_array( $format, $valid_formats ) ) {
|
819 |
// if the weekday isn't numeric, we need to convert to numeric in order to
|
820 |
// leverage self::localized_weekdays
|
821 |
if ( ! is_numeric( $weekday ) ) {
|
822 |
+
$days_of_week = array(
|
823 |
'Sun',
|
824 |
'Mon',
|
825 |
'Tue',
|
827 |
'Thu',
|
828 |
'Fri',
|
829 |
'Sat',
|
830 |
+
);
|
831 |
|
832 |
$day_index = array_search( ucwords( substr( $weekday, 0, 3 ) ), $days_of_week );
|
833 |
|
871 |
public static function wp_locale_month( $month, $format = 'month' ) {
|
872 |
$month = trim( $month );
|
873 |
|
874 |
+
$valid_formats = array(
|
875 |
'full',
|
876 |
'month',
|
877 |
'abbreviation',
|
878 |
'abbrev',
|
879 |
'abbr',
|
880 |
'short',
|
881 |
+
);
|
882 |
|
883 |
// if there isn't a valid format, bail without providing a localized string
|
884 |
if ( ! in_array( $format, $valid_formats ) ) {
|
898 |
return $month;
|
899 |
}
|
900 |
} else {
|
901 |
+
$months = array(
|
902 |
'Jan',
|
903 |
'Feb',
|
904 |
'Mar',
|
911 |
'Oct',
|
912 |
'Nov',
|
913 |
'Dec',
|
914 |
+
);
|
915 |
|
916 |
// convert the provided month to a 3-character month and find it in the months array so we
|
917 |
// can build an appropriate month number
|
1184 |
&& is_numeric( $month )
|
1185 |
&& is_numeric( $year )
|
1186 |
&& is_numeric( $week_direction )
|
1187 |
+
&& in_array( $week_direction, array( - 1, 1 ) )
|
1188 |
)
|
1189 |
) {
|
1190 |
return false;
|
common/src/Tribe/Debug.php
CHANGED
@@ -5,7 +5,7 @@ class Tribe__Debug {
|
|
5 |
* constructor
|
6 |
*/
|
7 |
public function __construct() {
|
8 |
-
add_action( 'tribe_debug',
|
9 |
}
|
10 |
|
11 |
/**
|
5 |
* constructor
|
6 |
*/
|
7 |
public function __construct() {
|
8 |
+
add_action( 'tribe_debug', array( __CLASS__, 'render' ), 10, 2 );
|
9 |
}
|
10 |
|
11 |
/**
|
common/src/Tribe/Debug_Bar/Panels/Context.php
CHANGED
@@ -19,7 +19,7 @@ class Tribe__Debug_Bar__Panels__Context extends Debug_Bar_Panel {
|
|
19 |
* @return string The panel title
|
20 |
*/
|
21 |
public function title( $title = null ) {
|
22 |
-
return __( '
|
23 |
}
|
24 |
|
25 |
/**
|
@@ -47,7 +47,7 @@ class Tribe__Debug_Bar__Panels__Context extends Debug_Bar_Panel {
|
|
47 |
</style>';
|
48 |
$html .= '<div id="mt-debug-bar" class="mt-debug-bar-context">';
|
49 |
|
50 |
-
$html .= '<header class="mt-debug-bar-title"><h2>' . esc_html__( '
|
51 |
|
52 |
$html .= '<section>';
|
53 |
$html .= '<header class="mt-debug-bar-section-header"><h3>' . esc_html__( 'PHP Render Context', 'tribe-common' ) . '</h3></header>';
|
19 |
* @return string The panel title
|
20 |
*/
|
21 |
public function title( $title = null ) {
|
22 |
+
return __( 'Modern Tribe Context', 'tribe-common' );
|
23 |
}
|
24 |
|
25 |
/**
|
47 |
</style>';
|
48 |
$html .= '<div id="mt-debug-bar" class="mt-debug-bar-context">';
|
49 |
|
50 |
+
$html .= '<header class="mt-debug-bar-title"><h2>' . esc_html__( 'Modern Tribe Context', 'tribe-common' ) . '</h2></header>';
|
51 |
|
52 |
$html .= '<section>';
|
53 |
$html .= '<header class="mt-debug-bar-section-header"><h3>' . esc_html__( 'PHP Render Context', 'tribe-common' ) . '</h3></header>';
|
common/src/Tribe/Debug_Bar/Panels/Json_Ld.php
CHANGED
@@ -18,7 +18,7 @@ class Tribe__Debug_Bar__Panels__Json_Ld extends Debug_Bar_Panel {
|
|
18 |
* @return string The panel title
|
19 |
*/
|
20 |
public function title( $title = null ) {
|
21 |
-
return __( '
|
22 |
}
|
23 |
|
24 |
/**
|
@@ -37,7 +37,7 @@ class Tribe__Debug_Bar__Panels__Json_Ld extends Debug_Bar_Panel {
|
|
37 |
</style>';
|
38 |
$html .= '<div id="mt-debug-bar" class="mt-debug-bar-json-ld">';
|
39 |
|
40 |
-
$html .= '<header class="mt-debug-bar-title"><h2>' . esc_html__( '
|
41 |
'tribe-common' ) . '</h2></header>';
|
42 |
|
43 |
|
18 |
* @return string The panel title
|
19 |
*/
|
20 |
public function title( $title = null ) {
|
21 |
+
return __( 'Modern Tribe JSON-LD Data', 'tribe-common' );
|
22 |
}
|
23 |
|
24 |
/**
|
37 |
</style>';
|
38 |
$html .= '<div id="mt-debug-bar" class="mt-debug-bar-json-ld">';
|
39 |
|
40 |
+
$html .= '<header class="mt-debug-bar-title"><h2>' . esc_html__( 'Modern Tribe JSON-LD Data',
|
41 |
'tribe-common' ) . '</h2></header>';
|
42 |
|
43 |
|
common/src/Tribe/Dependency.php
CHANGED
@@ -11,23 +11,23 @@ if ( ! class_exists( 'Tribe__Dependency' ) ) {
|
|
11 |
/**
|
12 |
* A multidimensional array of active tribe plugins in the following format
|
13 |
*
|
14 |
-
*
|
15 |
* 'class' => 'main class name',
|
16 |
* 'version' => 'version num', (optional)
|
17 |
* 'path' => 'Path to the main plugin/bootstrap file' (optional)
|
18 |
-
*
|
19 |
*/
|
20 |
protected $active_plugins = [];
|
21 |
|
22 |
/**
|
23 |
* A multidimensional array of active tribe plugins in the following format
|
24 |
*
|
25 |
-
*
|
26 |
* 'class' => 'main class name',
|
27 |
* 'path' => 'Path to the main plugin/bootstrap file'
|
28 |
* 'version' => 'version num', (optional)
|
29 |
* 'dependencies' => 'A multidimensional of dependencies' (optional)
|
30 |
-
*
|
31 |
*/
|
32 |
protected $registered_plugins = [];
|
33 |
|
@@ -49,13 +49,13 @@ if ( ! class_exists( 'Tribe__Dependency' ) ) {
|
|
49 |
* @param null|string $path Path to the main plugin/bootstrap file
|
50 |
* @param array $dependencies An array of dependencies for a plugin
|
51 |
*/
|
52 |
-
public function add_registered_plugin( $main_class, $version = null, $path = null, $dependencies =
|
53 |
-
$plugin =
|
54 |
'class' => $main_class,
|
55 |
'version' => $version,
|
56 |
'path' => $path,
|
57 |
'dependencies' => $dependencies,
|
58 |
-
|
59 |
|
60 |
$this->registered_plugins[ $main_class ] = $plugin;
|
61 |
|
@@ -83,11 +83,11 @@ if ( ! class_exists( 'Tribe__Dependency' ) ) {
|
|
83 |
* @param string $path Path to the main plugin/bootstrap file
|
84 |
*/
|
85 |
public function add_active_plugin( $main_class, $version = null, $path = null ) {
|
86 |
-
$plugin =
|
87 |
-
'class'
|
88 |
-
'version'
|
89 |
-
'path'
|
90 |
-
|
91 |
|
92 |
$this->active_plugins[ $main_class ] = $plugin;
|
93 |
}
|
@@ -267,7 +267,7 @@ if ( ! class_exists( 'Tribe__Dependency' ) ) {
|
|
267 |
*
|
268 |
* @return bool
|
269 |
*/
|
270 |
-
public function has_requisite_plugins( $plugins_required =
|
271 |
foreach ( $plugins_required as $class => $version ) {
|
272 |
// Return false if the plugin is not set or is a lesser version
|
273 |
if ( ! $this->is_plugin_active( $class ) ) {
|
@@ -307,7 +307,7 @@ if ( ! class_exists( 'Tribe__Dependency' ) ) {
|
|
307 |
*
|
308 |
* @return true|int The number of failed dependency checks; `true` or `0` to indicate no checks failed.
|
309 |
*/
|
310 |
-
public function has_valid_dependencies( $plugin, $dependencies =
|
311 |
if ( empty( $dependencies ) ) {
|
312 |
return true;
|
313 |
}
|
@@ -362,7 +362,7 @@ if ( ! class_exists( 'Tribe__Dependency' ) ) {
|
|
362 |
return false;
|
363 |
}
|
364 |
|
365 |
-
// If class
|
366 |
if ( ! class_exists( $class ) ) {
|
367 |
return false;
|
368 |
}
|
@@ -415,7 +415,7 @@ if ( ! class_exists( 'Tribe__Dependency' ) ) {
|
|
415 |
* @param array $classes_req Any Main class files/tribe plugins required for this to run.
|
416 |
* @param array $dependencies an array of dependencies to check.
|
417 |
*/
|
418 |
-
public function register_plugin( $file_path, $main_class, $version, $classes_req =
|
419 |
/**
|
420 |
* Filters the version string for a plugin.
|
421 |
*
|
11 |
/**
|
12 |
* A multidimensional array of active tribe plugins in the following format
|
13 |
*
|
14 |
+
* array(
|
15 |
* 'class' => 'main class name',
|
16 |
* 'version' => 'version num', (optional)
|
17 |
* 'path' => 'Path to the main plugin/bootstrap file' (optional)
|
18 |
+
* )
|
19 |
*/
|
20 |
protected $active_plugins = [];
|
21 |
|
22 |
/**
|
23 |
* A multidimensional array of active tribe plugins in the following format
|
24 |
*
|
25 |
+
* array(
|
26 |
* 'class' => 'main class name',
|
27 |
* 'path' => 'Path to the main plugin/bootstrap file'
|
28 |
* 'version' => 'version num', (optional)
|
29 |
* 'dependencies' => 'A multidimensional of dependencies' (optional)
|
30 |
+
* )
|
31 |
*/
|
32 |
protected $registered_plugins = [];
|
33 |
|
49 |
* @param null|string $path Path to the main plugin/bootstrap file
|
50 |
* @param array $dependencies An array of dependencies for a plugin
|
51 |
*/
|
52 |
+
public function add_registered_plugin( $main_class, $version = null, $path = null, $dependencies = array() ) {
|
53 |
+
$plugin = array(
|
54 |
'class' => $main_class,
|
55 |
'version' => $version,
|
56 |
'path' => $path,
|
57 |
'dependencies' => $dependencies,
|
58 |
+
);
|
59 |
|
60 |
$this->registered_plugins[ $main_class ] = $plugin;
|
61 |
|
83 |
* @param string $path Path to the main plugin/bootstrap file
|
84 |
*/
|
85 |
public function add_active_plugin( $main_class, $version = null, $path = null ) {
|
86 |
+
$plugin = array(
|
87 |
+
'class' => $main_class,
|
88 |
+
'version' => $version,
|
89 |
+
'path' => $path,
|
90 |
+
);
|
91 |
|
92 |
$this->active_plugins[ $main_class ] = $plugin;
|
93 |
}
|
267 |
*
|
268 |
* @return bool
|
269 |
*/
|
270 |
+
public function has_requisite_plugins( $plugins_required = array() ) {
|
271 |
foreach ( $plugins_required as $class => $version ) {
|
272 |
// Return false if the plugin is not set or is a lesser version
|
273 |
if ( ! $this->is_plugin_active( $class ) ) {
|
307 |
*
|
308 |
* @return true|int The number of failed dependency checks; `true` or `0` to indicate no checks failed.
|
309 |
*/
|
310 |
+
public function has_valid_dependencies( $plugin, $dependencies = array(), $addon = false ) {
|
311 |
if ( empty( $dependencies ) ) {
|
312 |
return true;
|
313 |
}
|
362 |
return false;
|
363 |
}
|
364 |
|
365 |
+
// If class doesnt exist the plugin doesnt exist.
|
366 |
if ( ! class_exists( $class ) ) {
|
367 |
return false;
|
368 |
}
|
415 |
* @param array $classes_req Any Main class files/tribe plugins required for this to run.
|
416 |
* @param array $dependencies an array of dependencies to check.
|
417 |
*/
|
418 |
+
public function register_plugin( $file_path, $main_class, $version, $classes_req = array(), $dependencies = array() ) {
|
419 |
/**
|
420 |
* Filters the version string for a plugin.
|
421 |
*
|
common/src/Tribe/Deprecation.php
CHANGED
@@ -27,10 +27,10 @@ class Tribe__Deprecation {
|
|
27 |
*
|
28 |
* @var array
|
29 |
*/
|
30 |
-
protected $deprecated_filters =
|
31 |
-
'tribe_cost_regex' =>
|
32 |
-
'tribe_rewrite_prepared_slug' =>
|
33 |
-
|
34 |
|
35 |
/**
|
36 |
* An array specifying the tag, version and optional replacements
|
@@ -44,9 +44,9 @@ class Tribe__Deprecation {
|
|
44 |
*
|
45 |
* @var array
|
46 |
*/
|
47 |
-
protected $deprecated_actions =
|
48 |
-
'tribe_pre_rewrite' =>
|
49 |
-
|
50 |
|
51 |
/**
|
52 |
* @return Tribe__Deprecation
|
@@ -71,9 +71,9 @@ class Tribe__Deprecation {
|
|
71 |
*/
|
72 |
public function deprecate_actions() {
|
73 |
foreach ( array_keys( $this->deprecated_actions ) as $new_action_tag ) {
|
74 |
-
add_action( $new_action_tag,
|
75 |
add_filter(
|
76 |
-
$this->deprecated_actions[ $new_action_tag ][1],
|
77 |
);
|
78 |
}
|
79 |
}
|
@@ -85,9 +85,9 @@ class Tribe__Deprecation {
|
|
85 |
*/
|
86 |
public function deprecate_filters() {
|
87 |
foreach ( array_keys( $this->deprecated_filters ) as $new_filter_tag ) {
|
88 |
-
add_filter( $new_filter_tag,
|
89 |
add_filter(
|
90 |
-
$this->deprecated_filters[ $new_filter_tag ][1],
|
91 |
);
|
92 |
}
|
93 |
}
|
@@ -104,7 +104,7 @@ class Tribe__Deprecation {
|
|
104 |
$action = $this->get_action_for_deprecated_tag( $action );
|
105 |
}
|
106 |
|
107 |
-
remove_action( $deprecated_tag,
|
108 |
|
109 |
if ( doing_action( $deprecated_tag ) || has_filter( $deprecated_tag ) ) {
|
110 |
_deprecated_function(
|
@@ -112,7 +112,7 @@ class Tribe__Deprecation {
|
|
112 |
);
|
113 |
}
|
114 |
|
115 |
-
add_action( $deprecated_tag,
|
116 |
}
|
117 |
|
118 |
/**
|
@@ -133,17 +133,17 @@ class Tribe__Deprecation {
|
|
133 |
$filter = $this->get_filter_for_deprecated_tag( $filter );
|
134 |
}
|
135 |
|
136 |
-
remove_filter( $deprecated_tag,
|
137 |
|
138 |
if ( has_filter( $deprecated_tag ) || doing_filter( $deprecated_tag ) ) {
|
139 |
-
$version = Tribe__Utils__Array::get( $this->deprecated_filters,
|
140 |
|
141 |
_deprecated_function(
|
142 |
'The ' . $deprecated_tag . ' filter', $version, $filter
|
143 |
);
|
144 |
}
|
145 |
|
146 |
-
add_filter( $deprecated_tag,
|
147 |
|
148 |
return $value;
|
149 |
}
|
27 |
*
|
28 |
* @var array
|
29 |
*/
|
30 |
+
protected $deprecated_filters = array(
|
31 |
+
'tribe_cost_regex' => array( '4.3', 'tribe_events_cost_regex' ),
|
32 |
+
'tribe_rewrite_prepared_slug' => array( '4.3', 'tribe_events_rewrite_prepared_slug' ),
|
33 |
+
);
|
34 |
|
35 |
/**
|
36 |
* An array specifying the tag, version and optional replacements
|
44 |
*
|
45 |
* @var array
|
46 |
*/
|
47 |
+
protected $deprecated_actions = array(
|
48 |
+
'tribe_pre_rewrite' => array( '4.3', 'tribe_events_pre_rewrite' ),
|
49 |
+
);
|
50 |
|
51 |
/**
|
52 |
* @return Tribe__Deprecation
|
71 |
*/
|
72 |
public function deprecate_actions() {
|
73 |
foreach ( array_keys( $this->deprecated_actions ) as $new_action_tag ) {
|
74 |
+
add_action( $new_action_tag, array( $this, 'deprecated_action_message' ) );
|
75 |
add_filter(
|
76 |
+
$this->deprecated_actions[ $new_action_tag ][1], array( $this, 'deprecated_action_message' )
|
77 |
);
|
78 |
}
|
79 |
}
|
85 |
*/
|
86 |
public function deprecate_filters() {
|
87 |
foreach ( array_keys( $this->deprecated_filters ) as $new_filter_tag ) {
|
88 |
+
add_filter( $new_filter_tag, array( $this, 'deprecated_filter_message' ) );
|
89 |
add_filter(
|
90 |
+
$this->deprecated_filters[ $new_filter_tag ][1], array( $this, 'deprecated_filter_message' )
|
91 |
);
|
92 |
}
|
93 |
}
|
104 |
$action = $this->get_action_for_deprecated_tag( $action );
|
105 |
}
|
106 |
|
107 |
+
remove_action( $deprecated_tag, array( $this, 'deprecated_action_message' ) );
|
108 |
|
109 |
if ( doing_action( $deprecated_tag ) || has_filter( $deprecated_tag ) ) {
|
110 |
_deprecated_function(
|
112 |
);
|
113 |
}
|
114 |
|
115 |
+
add_action( $deprecated_tag, array( $this, 'deprecated_action_message' ) );
|
116 |
}
|
117 |
|
118 |
/**
|
133 |
$filter = $this->get_filter_for_deprecated_tag( $filter );
|
134 |
}
|
135 |
|
136 |
+
remove_filter( $deprecated_tag, array( $this, 'deprecated_filter_message' ) );
|
137 |
|
138 |
if ( has_filter( $deprecated_tag ) || doing_filter( $deprecated_tag ) ) {
|
139 |
+
$version = Tribe__Utils__Array::get( $this->deprecated_filters, array( $filter, 0 ), null );
|
140 |
|
141 |
_deprecated_function(
|
142 |
'The ' . $deprecated_tag . ' filter', $version, $filter
|
143 |
);
|
144 |
}
|
145 |
|
146 |
+
add_filter( $deprecated_tag, array( $this, 'deprecated_filter_message' ) );
|
147 |
|
148 |
return $value;
|
149 |
}
|
common/src/Tribe/Dialog/View.php
CHANGED
@@ -45,12 +45,10 @@ class View extends \Tribe__Template {
|
|
45 |
*
|
46 |
* @type string $button_id The ID for the trigger button (optional).
|
47 |
* @type array $button_classes Any desired classes for the trigger button (optional).
|
48 |
-
* @type array $button_attributes Any desired attributes for the trigger button (optional).
|
49 |
* @type boolean $button_disabled Should the button be disabled (optional).
|
50 |
* @type string $button_text The text for the dialog trigger button ("Open the dialog window").
|
51 |
* @type string $button_type The type for the trigger button (optional).
|
52 |
* @type string $button_value The value for the trigger button (optional).
|
53 |
-
* @type boolean $button_display If the dialog button should be displayed or not (optional).
|
54 |
* @type string $close_event The dialog close event hook name (`tribe_dialog_close_dialog`).
|
55 |
* @type string $content_classes The dialog content classes ("tribe-dialog__content").
|
56 |
* @type array $context Any additional context data you need to expose to this file (optional).
|
@@ -115,12 +113,10 @@ class View extends \Tribe__Template {
|
|
115 |
*
|
116 |
* @type string $button_id The ID for the trigger button (optional).
|
117 |
* @type array $button_classes Any desired classes for the trigger button (optional).
|
118 |
-
* @type array $button_attributes Any desired attributes for the trigger button (optional).
|
119 |
* @type boolean $button_disabled Should the button be disabled (optional).
|
120 |
* @type string $button_text The text for the dialog trigger button ("Open the modal window").
|
121 |
* @type string $button_type The type for the trigger button (optional).
|
122 |
* @type string $button_value The value for the trigger button (optional).
|
123 |
-
* @type boolean $button_display If the dialog button should be displayed or not (optional).
|
124 |
* @type string $close_event The dialog close event hook name (`tribe_dialog_close_modal`).
|
125 |
* @type string $content_classes The dialog content classes ("tribe-dialog__content tribe-modal__content").
|
126 |
* @type string $title_classes The dialog title classes ("tribe-dialog__title tribe-modal__title").
|
@@ -186,12 +182,10 @@ class View extends \Tribe__Template {
|
|
186 |
*
|
187 |
* @type string $button_id The ID for the trigger button (optional).
|
188 |
* @type array $button_classes Any desired classes for the trigger button (optional).
|
189 |
-
* @type array $button_attributes Any desired attributes for the trigger button (optional).
|
190 |
* @type boolean $button_disabled Should the button be disabled (optional).
|
191 |
* @type string $button_text The text for the dialog trigger button ("Open the dialog window").
|
192 |
* @type string $button_type The type for the trigger button (optional).
|
193 |
* @type string $button_value The value for the trigger button (optional).
|
194 |
-
* @type boolean $button_display If the dialog button should be displayed or not (optional).
|
195 |
* @type string $cancel_button_text Text for the "Cancel" button ("Cancel").
|
196 |
* @type string $content_classes The dialog content classes ("tribe-dialog__content tribe-confirm__content").
|
197 |
* @type string $continue_button_text Text for the "Continue" button ("Confirm").
|
@@ -256,12 +250,10 @@ class View extends \Tribe__Template {
|
|
256 |
* @type string $alert_button_text Text for the "OK" button ("OK").
|
257 |
* @type string $button_id The ID for the trigger button (optional).
|
258 |
* @type array $button_classes Any desired classes for the trigger button (optional).
|
259 |
-
* @type array $button_attributes Any desired attributes for the trigger button (optional).
|
260 |
* @type boolean $button_disabled Should the button be disabled (optional).
|
261 |
* @type string $button_text The text for the dialog trigger button ("Open the dialog window").
|
262 |
* @type string $button_type The type for the trigger button (optional).
|
263 |
* @type string $button_value The value for the trigger button (optional).
|
264 |
-
* @type boolean $button_display If the dialog button should be displayed or not (optional).
|
265 |
* @type string $content_classes The dialog content classes ("tribe-dialog__content tribe-alert__content").
|
266 |
* @type string $title_classes The dialog title classes ("tribe-dialog__title tribe-alert__title").
|
267 |
* @type array $context Any additional context data you need to expose to this file (optional).
|
@@ -323,12 +315,10 @@ class View extends \Tribe__Template {
|
|
323 |
*
|
324 |
* @type string $button_id The ID for the trigger button (optional).
|
325 |
* @type array $button_classes Any desired classes for the trigger button (optional).
|
326 |
-
* @type array $button_attributes Any desired attributes for the trigger button (optional).
|
327 |
* @type boolean $button_disabled Should the button be disabled (optional).
|
328 |
* @type string $button_text The text for the dialog trigger button ("Open the dialog window").
|
329 |
* @type string $button_type The type for the trigger button (optional).
|
330 |
* @type string $button_value The value for the trigger button (optional).
|
331 |
-
* @type boolean $button_display If the dialog button should be displayed or not (optional).
|
332 |
* @type string $close_event The dialog event hook name (`tribe_dialog_close_dialog`).
|
333 |
* @type string $content_classes The dialog content classes ("tribe-dialog__content").
|
334 |
* @type string $title_classes The dialog title classes ("tribe-dialog__title").
|
@@ -359,14 +349,12 @@ class View extends \Tribe__Template {
|
|
359 |
private function build_dialog( $content, $id, $args ) {
|
360 |
$default_args = [
|
361 |
'button_classes' => '',
|
362 |
-
'button_attributes' => [],
|
363 |
'button_disabled' => false,
|
364 |
'button_id' => '',
|
365 |
'button_name' => '',
|
366 |
'button_text' => __( 'Open the dialog window', 'tribe-common' ),
|
367 |
'button_type' => '',
|
368 |
'button_value' => '',
|
369 |
-
'button_display' => true,
|
370 |
'close_event' => 'tribe_dialog_close_dialog',
|
371 |
'content_classes' => 'tribe-dialog__content',
|
372 |
'context' => '',
|
45 |
*
|
46 |
* @type string $button_id The ID for the trigger button (optional).
|
47 |
* @type array $button_classes Any desired classes for the trigger button (optional).
|
|
|
48 |
* @type boolean $button_disabled Should the button be disabled (optional).
|
49 |
* @type string $button_text The text for the dialog trigger button ("Open the dialog window").
|
50 |
* @type string $button_type The type for the trigger button (optional).
|
51 |
* @type string $button_value The value for the trigger button (optional).
|
|
|
52 |
* @type string $close_event The dialog close event hook name (`tribe_dialog_close_dialog`).
|
53 |
* @type string $content_classes The dialog content classes ("tribe-dialog__content").
|
54 |
* @type array $context Any additional context data you need to expose to this file (optional).
|
113 |
*
|
114 |
* @type string $button_id The ID for the trigger button (optional).
|
115 |
* @type array $button_classes Any desired classes for the trigger button (optional).
|
|
|
116 |
* @type boolean $button_disabled Should the button be disabled (optional).
|
117 |
* @type string $button_text The text for the dialog trigger button ("Open the modal window").
|
118 |
* @type string $button_type The type for the trigger button (optional).
|
119 |
* @type string $button_value The value for the trigger button (optional).
|
|
|
120 |
* @type string $close_event The dialog close event hook name (`tribe_dialog_close_modal`).
|
121 |
* @type string $content_classes The dialog content classes ("tribe-dialog__content tribe-modal__content").
|
122 |
* @type string $title_classes The dialog title classes ("tribe-dialog__title tribe-modal__title").
|
182 |
*
|
183 |
* @type string $button_id The ID for the trigger button (optional).
|
184 |
* @type array $button_classes Any desired classes for the trigger button (optional).
|
|
|
185 |
* @type boolean $button_disabled Should the button be disabled (optional).
|
186 |
* @type string $button_text The text for the dialog trigger button ("Open the dialog window").
|
187 |
* @type string $button_type The type for the trigger button (optional).
|
188 |
* @type string $button_value The value for the trigger button (optional).
|
|
|
189 |
* @type string $cancel_button_text Text for the "Cancel" button ("Cancel").
|
190 |
* @type string $content_classes The dialog content classes ("tribe-dialog__content tribe-confirm__content").
|
191 |
* @type string $continue_button_text Text for the "Continue" button ("Confirm").
|
250 |
* @type string $alert_button_text Text for the "OK" button ("OK").
|
251 |
* @type string $button_id The ID for the trigger button (optional).
|
252 |
* @type array $button_classes Any desired classes for the trigger button (optional).
|
|
|
253 |
* @type boolean $button_disabled Should the button be disabled (optional).
|
254 |
* @type string $button_text The text for the dialog trigger button ("Open the dialog window").
|
255 |
* @type string $button_type The type for the trigger button (optional).
|
256 |
* @type string $button_value The value for the trigger button (optional).
|
|
|
257 |
* @type string $content_classes The dialog content classes ("tribe-dialog__content tribe-alert__content").
|
258 |
* @type string $title_classes The dialog title classes ("tribe-dialog__title tribe-alert__title").
|
259 |
* @type array $context Any additional context data you need to expose to this file (optional).
|
315 |
*
|
316 |
* @type string $button_id The ID for the trigger button (optional).
|
317 |
* @type array $button_classes Any desired classes for the trigger button (optional).
|
|
|
318 |
* @type boolean $button_disabled Should the button be disabled (optional).
|
319 |
* @type string $button_text The text for the dialog trigger button ("Open the dialog window").
|
320 |
* @type string $button_type The type for the trigger button (optional).
|
321 |
* @type string $button_value The value for the trigger button (optional).
|
|
|
322 |
* @type string $close_event The dialog event hook name (`tribe_dialog_close_dialog`).
|
323 |
* @type string $content_classes The dialog content classes ("tribe-dialog__content").
|
324 |
* @type string $title_classes The dialog title classes ("tribe-dialog__title").
|
349 |
private function build_dialog( $content, $id, $args ) {
|
350 |
$default_args = [
|
351 |
'button_classes' => '',
|
|
|
352 |
'button_disabled' => false,
|
353 |
'button_id' => '',
|
354 |
'button_name' => '',
|
355 |
'button_text' => __( 'Open the dialog window', 'tribe-common' ),
|
356 |
'button_type' => '',
|
357 |
'button_value' => '',
|
|
|
358 |
'close_event' => 'tribe_dialog_close_dialog',
|
359 |
'content_classes' => 'tribe-dialog__content',
|
360 |
'context' => '',
|
common/src/Tribe/Documentation/Swagger/Cost_Details_Definition_Provider.php
CHANGED
@@ -16,25 +16,25 @@ class Tribe__Documentation__Swagger__Cost_Details_Definition_Provider
|
|
16 |
* @return array An array description of a Swagger supported component.
|
17 |
*/
|
18 |
public function get_documentation() {
|
19 |
-
$documentation =
|
20 |
'type' => 'object',
|
21 |
-
'properties' =>
|
22 |
-
'currency_symbol'
|
23 |
-
'type'
|
24 |
'description' => __( 'The cost currency symbol', 'tribe-common' ),
|
25 |
-
|
26 |
-
'currency_position ' =>
|
27 |
-
'type'
|
28 |
'description' => __( 'The position of the currency symbol in the cost string', 'tribe-common' ),
|
29 |
-
'enum'
|
30 |
-
|
31 |
-
'values'
|
32 |
-
'type'
|
33 |
-
'items'
|
34 |
'description' => __( 'A sorted array of all the numeric values for the cost', 'tribe-common' ),
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
|
39 |
/**
|
40 |
* Filters the Swagger documentation generated for a cost details in the TEC REST API.
|
16 |
* @return array An array description of a Swagger supported component.
|
17 |
*/
|
18 |
public function get_documentation() {
|
19 |
+
$documentation = array(
|
20 |
'type' => 'object',
|
21 |
+
'properties' => array(
|
22 |
+
'currency_symbol' => array(
|
23 |
+
'type' => 'string',
|
24 |
'description' => __( 'The cost currency symbol', 'tribe-common' ),
|
25 |
+
),
|
26 |
+
'currency_position ' => array(
|
27 |
+
'type' => 'string',
|
28 |
'description' => __( 'The position of the currency symbol in the cost string', 'tribe-common' ),
|
29 |
+
'enum' => array( 'prefix', 'postfix' ),
|
30 |
+
),
|
31 |
+
'values' => array(
|
32 |
+
'type' => 'array',
|
33 |
+
'items' => array( 'type' => 'integer' ),
|
34 |
'description' => __( 'A sorted array of all the numeric values for the cost', 'tribe-common' ),
|
35 |
+
),
|
36 |
+
),
|
37 |
+
);
|
38 |
|
39 |
/**
|
40 |
* Filters the Swagger documentation generated for a cost details in the TEC REST API.
|
common/src/Tribe/Documentation/Swagger/Date_Details_Definition_Provider.php
CHANGED
@@ -16,35 +16,35 @@ class Tribe__Documentation__Swagger__Date_Details_Definition_Provider
|
|
16 |
* @return array An array description of a Swagger supported component.
|
17 |
*/
|
18 |
public function get_documentation() {
|
19 |
-
$documentation =
|
20 |
'type' => 'object',
|
21 |
-
'properties' =>
|
22 |
-
'year' =>
|
23 |
-
'type'
|
24 |
'description' => __( 'The date year', 'tribe-common' ),
|
25 |
-
|
26 |
-
'month'
|
27 |
-
'type'
|
28 |
'description' => __( 'The date month', 'tribe-common' ),
|
29 |
-
|
30 |
-
'day'
|
31 |
-
'type'
|
32 |
'description' => __( 'The date day', 'tribe-common' ),
|
33 |
-
|
34 |
-
'hour'
|
35 |
-
'type'
|
36 |
'description' => __( 'The date hour', 'tribe-common' ),
|
37 |
-
|
38 |
-
'minutes' =>
|
39 |
-
'type'
|
40 |
'description' => __( 'The date minutes', 'tribe-common' ),
|
41 |
-
|
42 |
-
'seconds' =>
|
43 |
-
'type'
|
44 |
'description' => __( 'The date seconds', 'tribe-common' ),
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
|
49 |
/**
|
50 |
* Filters the Swagger documentation generated for an date details in the TEC REST API.
|
16 |
* @return array An array description of a Swagger supported component.
|
17 |
*/
|
18 |
public function get_documentation() {
|
19 |
+
$documentation = array(
|
20 |
'type' => 'object',
|
21 |
+
'properties' => array(
|
22 |
+
'year' => array(
|
23 |
+
'type' => 'integer',
|
24 |
'description' => __( 'The date year', 'tribe-common' ),
|
25 |
+
),
|
26 |
+
'month' => array(
|
27 |
+
'type' => 'integer',
|
28 |
'description' => __( 'The date month', 'tribe-common' ),
|
29 |
+
),
|
30 |
+
'day' => array(
|
31 |
+
'type' => 'integer',
|
32 |
'description' => __( 'The date day', 'tribe-common' ),
|
33 |
+
),
|
34 |
+
'hour' => array(
|
35 |
+
'type' => 'integer',
|
36 |
'description' => __( 'The date hour', 'tribe-common' ),
|
37 |
+
),
|
38 |
+
'minutes' => array(
|
39 |
+
'type' => 'integer',
|
40 |
'description' => __( 'The date minutes', 'tribe-common' ),
|
41 |
+
),
|
42 |
+
'seconds' => array(
|
43 |
+
'type' => 'integer',
|
44 |
'description' => __( 'The date seconds', 'tribe-common' ),
|
45 |
+
),
|
46 |
+
),
|
47 |
+
);
|
48 |
|
49 |
/**
|
50 |
* Filters the Swagger documentation generated for an date details in the TEC REST API.
|
common/src/Tribe/Documentation/Swagger/Image_Definition_Provider.php
CHANGED
@@ -16,39 +16,39 @@ class Tribe__Documentation__Swagger__Image_Definition_Provider
|
|
16 |
* @return array An array description of a Swagger supported component.
|
17 |
*/
|
18 |
public function get_documentation() {
|
19 |
-
$documentation =
|
20 |
'type' => 'object',
|
21 |
-
'properties' =>
|
22 |
-
'url' =>
|
23 |
'type' => 'string',
|
24 |
'format' => 'uri',
|
25 |
'description' => __( 'The URL to the full size version of the image', 'tribe-common' ),
|
26 |
-
|
27 |
-
'id' =>
|
28 |
'type' => 'integer',
|
29 |
'description' => __( 'The image WordPress post ID', 'tribe-common' ),
|
30 |
-
|
31 |
-
'extension' =>
|
32 |
'type' => 'string',
|
33 |
'description' => __( 'The image file extension', 'tribe-common' ),
|
34 |
-
|
35 |
-
'width' =>
|
36 |
'type' => 'integer',
|
37 |
'description' => __( 'The image natural width in pixels', 'tribe-common' ),
|
38 |
-
|
39 |
-
'height' =>
|
40 |
'type' => 'integer',
|
41 |
'description' => __( 'The image natural height in pixels', 'tribe-common' ),
|
42 |
-
|
43 |
-
'sizes' =>
|
44 |
'type' => 'array',
|
45 |
'description' => __( 'The details about each size available for the image', 'tribe-common' ),
|
46 |
-
'items' =>
|
47 |
'$ref' => '#/components/schemas/ImageSize',
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
|
53 |
/**
|
54 |
* Filters the Swagger documentation generated for an image deatails in the TEC REST API.
|
16 |
* @return array An array description of a Swagger supported component.
|
17 |
*/
|
18 |
public function get_documentation() {
|
19 |
+
$documentation = array(
|
20 |
'type' => 'object',
|
21 |
+
'properties' => array(
|
22 |
+
'url' => array(
|
23 |
'type' => 'string',
|
24 |
'format' => 'uri',
|
25 |
'description' => __( 'The URL to the full size version of the image', 'tribe-common' ),
|
26 |
+
),
|
27 |
+
'id' => array(
|
28 |
'type' => 'integer',
|
29 |
'description' => __( 'The image WordPress post ID', 'tribe-common' ),
|
30 |
+
),
|
31 |
+
'extension' => array(
|
32 |
'type' => 'string',
|
33 |
'description' => __( 'The image file extension', 'tribe-common' ),
|
34 |
+
),
|
35 |
+
'width' => array(
|
36 |
'type' => 'integer',
|
37 |
'description' => __( 'The image natural width in pixels', 'tribe-common' ),
|
38 |
+
),
|
39 |
+
'height' => array(
|
40 |
'type' => 'integer',
|
41 |
'description' => __( 'The image natural height in pixels', 'tribe-common' ),
|
42 |
+
),
|
43 |
+
'sizes' => array(
|
44 |
'type' => 'array',
|
45 |
'description' => __( 'The details about each size available for the image', 'tribe-common' ),
|
46 |
+
'items' => array(
|
47 |
'$ref' => '#/components/schemas/ImageSize',
|
48 |
+
),
|
49 |
+
),
|
50 |
+
),
|
51 |
+
);
|
52 |
|
53 |
/**
|
54 |
* Filters the Swagger documentation generated for an image deatails in the TEC REST API.
|
common/src/Tribe/Documentation/Swagger/Image_Size_Definition_Provider.php
CHANGED
@@ -16,28 +16,28 @@ class Tribe__Documentation__Swagger__Image_Size_Definition_Provider
|
|
16 |
* @return array An array description of a Swagger supported component.
|
17 |
*/
|
18 |
public function get_documentation() {
|
19 |
-
$documentation =
|
20 |
'type' => 'object',
|
21 |
-
'properties' =>
|
22 |
-
'width'
|
23 |
-
'type'
|
24 |
'description' => __( 'The image width in pixels in the specified size', 'tribe-common' ),
|
25 |
-
|
26 |
-
'height'
|
27 |
-
'type'
|
28 |
'description' => __( 'The image height in pixels in the specified size', 'tribe-common' ),
|
29 |
-
|
30 |
-
'mime-type' =>
|
31 |
-
'type'
|
32 |
'description' => __( 'The image mime-type', 'tribe-common' ),
|
33 |
-
|
34 |
-
'url'
|
35 |
-
'type'
|
36 |
-
'format'
|
37 |
'description' => __( 'The link to the image in the specified size on the site', 'tribe-common' ),
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
|
42 |
/**
|
43 |
* Filters the Swagger documentation generated for an image size in the TEC REST API.
|
16 |
* @return array An array description of a Swagger supported component.
|
17 |
*/
|
18 |
public function get_documentation() {
|
19 |
+
$documentation = array(
|
20 |
'type' => 'object',
|
21 |
+
'properties' => array(
|
22 |
+
'width' => array(
|
23 |
+
'type' => 'integer',
|
24 |
'description' => __( 'The image width in pixels in the specified size', 'tribe-common' ),
|
25 |
+
),
|
26 |
+
'height' => array(
|
27 |
+
'type' => 'integer',
|
28 |
'description' => __( 'The image height in pixels in the specified size', 'tribe-common' ),
|
29 |
+
),
|
30 |
+
'mime-type' => array(
|
31 |
+
'type' => 'string',
|
32 |
'description' => __( 'The image mime-type', 'tribe-common' ),
|
33 |
+
),
|
34 |
+
'url' => array(
|
35 |
+
'type' => 'string',
|
36 |
+
'format' => 'uri',
|
37 |
'description' => __( 'The link to the image in the specified size on the site', 'tribe-common' ),
|
38 |
+
),
|
39 |
+
),
|
40 |
+
);
|
41 |
|
42 |
/**
|
43 |
* Filters the Swagger documentation generated for an image size in the TEC REST API.
|
common/src/Tribe/Documentation/Swagger/Term_Definition_Provider.php
CHANGED
@@ -16,48 +16,48 @@ class Tribe__Documentation__Swagger__Term_Definition_Provider
|
|
16 |
* @return array An array description of a Swagger supported component.
|
17 |
*/
|
18 |
public function get_documentation() {
|
19 |
-
$documentation =
|
20 |
'type' => 'object',
|
21 |
-
'properties' =>
|
22 |
-
'id'
|
23 |
-
'type'
|
24 |
'description' => __( 'The WordPress term ID', 'tribe-common' ),
|
25 |
-
|
26 |
-
'name'
|
27 |
-
'type'
|
28 |
'description' => __( 'The term name', 'tribe-common' ),
|
29 |
-
|
30 |
-
'slug'
|
31 |
-
'type'
|
32 |
'description' => __( 'The term slug', 'tribe-common' ),
|
33 |
-
|
34 |
-
'taxonomy'
|
35 |
-
'type'
|
36 |
'description' => __( 'The taxonomy the term belongs to', 'tribe-common' ),
|
37 |
-
|
38 |
-
'description' =>
|
39 |
-
'type'
|
40 |
'description' => __( 'The term description', 'tribe-common' ),
|
41 |
-
|
42 |
-
'parent'
|
43 |
-
'type'
|
44 |
'description' => __( 'The term parent term if any', 'tribe-common' ),
|
45 |
-
|
46 |
-
'count'
|
47 |
-
'type'
|
48 |
'description' => __( 'The number of posts associated with the term', 'tribe-common' ),
|
49 |
-
|
50 |
-
'url'
|
51 |
-
'type'
|
52 |
'description' => __( 'The URL to the term archive page', 'tribe-common' ),
|
53 |
-
|
54 |
-
'urls'
|
55 |
-
'type'
|
56 |
-
'items'
|
57 |
'description' => __( 'A list of links to the term own, archive and parent REST URL', 'tribe-common' ),
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
|
62 |
/**
|
63 |
* Filters the Swagger documentation generated for an term in the TEC REST API.
|
16 |
* @return array An array description of a Swagger supported component.
|
17 |
*/
|
18 |
public function get_documentation() {
|
19 |
+
$documentation = array(
|
20 |
'type' => 'object',
|
21 |
+
'properties' => array(
|
22 |
+
'id' => array(
|
23 |
+
'type' => 'integer',
|
24 |
'description' => __( 'The WordPress term ID', 'tribe-common' ),
|
25 |
+
),
|
26 |
+
'name' => array(
|
27 |
+
'type' => 'string',
|
28 |
'description' => __( 'The term name', 'tribe-common' ),
|
29 |
+
),
|
30 |
+
'slug' => array(
|
31 |
+
'type' => 'string',
|
32 |
'description' => __( 'The term slug', 'tribe-common' ),
|
33 |
+
),
|
34 |
+
'taxonomy' => array(
|
35 |
+
'type' => 'string',
|
36 |
'description' => __( 'The taxonomy the term belongs to', 'tribe-common' ),
|
37 |
+
),
|
38 |
+
'description' => array(
|
39 |
+
'type' => 'string',
|
40 |
'description' => __( 'The term description', 'tribe-common' ),
|
41 |
+
),
|
42 |
+
'parent' => array(
|
43 |
+
'type' => 'integer',
|
44 |
'description' => __( 'The term parent term if any', 'tribe-common' ),
|
45 |
+
),
|
46 |
+
'count' => array(
|
47 |
+
'type' => 'integer',
|
48 |
'description' => __( 'The number of posts associated with the term', 'tribe-common' ),
|
49 |
+
),
|
50 |
+
'url' => array(
|
51 |
+
'type' => 'string',
|
52 |
'description' => __( 'The URL to the term archive page', 'tribe-common' ),
|
53 |
+
),
|
54 |
+
'urls' => array(
|
55 |
+
'type' => 'array',
|
56 |
+
'items' => array( 'type' => 'string' ),
|
57 |
'description' => __( 'A list of links to the term own, archive and parent REST URL', 'tribe-common' ),
|
58 |
+
),
|
59 |
+
),
|
60 |
+
);
|
61 |
|
62 |
/**
|
63 |
* Filters the Swagger documentation generated for an term in the TEC REST API.
|
common/src/Tribe/Duplicate/Post.php
CHANGED
@@ -14,7 +14,7 @@ class Tribe__Duplicate__Post {
|
|
14 |
/**
|
15 |
* @var array The columns of the post table.
|
16 |
*/
|
17 |
-
public static $post_table_columns =
|
18 |
'ID',
|
19 |
'post_author',
|
20 |
'post_date',
|
@@ -38,17 +38,17 @@ class Tribe__Duplicate__Post {
|
|
38 |
'post_type',
|
39 |
'post_mime_type',
|
40 |
'comment_count',
|
41 |
-
|
42 |
|
43 |
/**
|
44 |
* @var array The post fields that should be used to find a duplicate.
|
45 |
*/
|
46 |
-
protected $post_fields =
|
47 |
|
48 |
/**
|
49 |
* @var array The custom fields that should be used to find a duplicate.
|
50 |
*/
|
51 |
-
protected $custom_fields =
|
52 |
|
53 |
/**
|
54 |
* @var Tribe__Duplicate__Strategy_Factory
|
@@ -93,7 +93,7 @@ class Tribe__Duplicate__Post {
|
|
93 |
*/
|
94 |
public function use_post_fields( array $post_fields ) {
|
95 |
if ( empty( $post_fields ) ) {
|
96 |
-
$this->post_fields =
|
97 |
|
98 |
return;
|
99 |
}
|
@@ -112,16 +112,16 @@ class Tribe__Duplicate__Post {
|
|
112 |
* @since 4.6
|
113 |
*/
|
114 |
protected function cast_to_strategy( array $fields ) {
|
115 |
-
$cast =
|
116 |
|
117 |
foreach ( $fields as $key => $value ) {
|
118 |
if ( is_numeric( $key ) ) {
|
119 |
-
$cast[ $value ] =
|
120 |
} elseif ( is_array( $value ) ) {
|
121 |
if ( ! empty( $value['match'] ) ) {
|
122 |
$cast[ $key ] = $value;
|
123 |
} else {
|
124 |
-
$cast[ $key ] = array_merge( $value,
|
125 |
}
|
126 |
}
|
127 |
}
|
@@ -291,9 +291,9 @@ class Tribe__Duplicate__Post {
|
|
291 |
/** @var wpdb $wpdb */
|
292 |
global $wpdb;
|
293 |
|
294 |
-
$where_frags
|
295 |
-
$custom_fields_where_frags =
|
296 |
-
$join
|
297 |
|
298 |
if ( ! empty( $this->post_fields ) ) {
|
299 |
$queryable_post_fields = array_intersect_key( $postarr, $this->post_fields );
|
@@ -333,10 +333,10 @@ class Tribe__Duplicate__Post {
|
|
333 |
*/
|
334 |
$join_limit = apply_filters( 'tribe_duplicate_post_join_limit', $this->join_limit, $where_frags, $this->post_type );
|
335 |
|
336 |
-
$excluded_status =
|
337 |
'trash',
|
338 |
'autodraft',
|
339 |
-
|
340 |
|
341 |
/**
|
342 |
* Filters the excluded status.
|
@@ -360,7 +360,7 @@ class Tribe__Duplicate__Post {
|
|
360 |
$post_status_conditional = $wpdb->prepare( "{$wpdb->posts}.post_status NOT IN ( {$in_string} )", $excluded_status );
|
361 |
}
|
362 |
|
363 |
-
$queries =
|
364 |
|
365 |
if ( ! empty( $join_limit ) && ! empty( $join ) ) {
|
366 |
while ( count( $join ) ) {
|
14 |
/**
|
15 |
* @var array The columns of the post table.
|
16 |
*/
|
17 |
+
public static $post_table_columns = array(
|
18 |
'ID',
|
19 |
'post_author',
|
20 |
'post_date',
|
38 |
'post_type',
|
39 |
'post_mime_type',
|
40 |
'comment_count',
|
41 |
+
);
|
42 |
|
43 |
/**
|
44 |
* @var array The post fields that should be used to find a duplicate.
|
45 |
*/
|
46 |
+
protected $post_fields = array();
|
47 |
|
48 |
/**
|
49 |
* @var array The custom fields that should be used to find a duplicate.
|
50 |
*/
|
51 |
+
protected $custom_fields = array();
|
52 |
|
53 |
/**
|
54 |
* @var Tribe__Duplicate__Strategy_Factory
|
93 |
*/
|
94 |
public function use_post_fields( array $post_fields ) {
|
95 |
if ( empty( $post_fields ) ) {
|
96 |
+
$this->post_fields = array();
|
97 |
|
98 |
return;
|
99 |
}
|
112 |
* @since 4.6
|
113 |
*/
|
114 |
protected function cast_to_strategy( array $fields ) {
|
115 |
+
$cast = array();
|
116 |
|
117 |
foreach ( $fields as $key => $value ) {
|
118 |
if ( is_numeric( $key ) ) {
|
119 |
+
$cast[ $value ] = array( 'match' => 'same' );
|
120 |
} elseif ( is_array( $value ) ) {
|
121 |
if ( ! empty( $value['match'] ) ) {
|
122 |
$cast[ $key ] = $value;
|
123 |
} else {
|
124 |
+
$cast[ $key ] = array_merge( $value, array( 'match' => 'same' ) );
|
125 |
}
|
126 |
}
|
127 |
}
|
291 |
/** @var wpdb $wpdb */
|
292 |
global $wpdb;
|
293 |
|
294 |
+
$where_frags = array();
|
295 |
+
$custom_fields_where_frags = array();
|
296 |
+
$join = array();
|
297 |
|
298 |
if ( ! empty( $this->post_fields ) ) {
|
299 |
$queryable_post_fields = array_intersect_key( $postarr, $this->post_fields );
|
333 |
*/
|
334 |
$join_limit = apply_filters( 'tribe_duplicate_post_join_limit', $this->join_limit, $where_frags, $this->post_type );
|
335 |
|
336 |
+
$excluded_status = array(
|
337 |
'trash',
|
338 |
'autodraft',
|
339 |
+
);
|
340 |
|
341 |
/**
|
342 |
* Filters the excluded status.
|
360 |
$post_status_conditional = $wpdb->prepare( "{$wpdb->posts}.post_status NOT IN ( {$in_string} )", $excluded_status );
|
361 |
}
|
362 |
|
363 |
+
$queries = array();
|
364 |
|
365 |
if ( ! empty( $join_limit ) && ! empty( $join ) ) {
|
366 |
while ( count( $join ) ) {
|
common/src/Tribe/Duplicate/Strategy/Base.php
CHANGED
@@ -19,6 +19,6 @@ abstract class Tribe__Duplicate__Strategy__Base {
|
|
19 |
* @since 4.6
|
20 |
*/
|
21 |
protected function is_a_numeric_post_field( $key ) {
|
22 |
-
return in_array( $key,
|
23 |
}
|
24 |
}
|
19 |
* @since 4.6
|
20 |
*/
|
21 |
protected function is_a_numeric_post_field( $key ) {
|
22 |
+
return in_array( $key, array( 'ID', 'post_author', 'post_parent', 'menu_order', 'comment_count' ) );
|
23 |
}
|
24 |
}
|
common/src/Tribe/Duplicate/Strategy/Like.php
CHANGED
@@ -31,7 +31,7 @@ class Tribe__Duplicate__Strategy__Like
|
|
31 |
|
32 |
$frags = $this->get_where_frags( $value );
|
33 |
|
34 |
-
$where_frags =
|
35 |
foreach ( $frags as $frag ) {
|
36 |
$formatted_frag = '%' . $wpdb->esc_like( strtolower( trim( $frag ) ) ) . '%';
|
37 |
$where_frags[] = $wpdb->prepare( "{$key} LIKE %s", $formatted_frag );
|
@@ -73,7 +73,7 @@ class Tribe__Duplicate__Strategy__Like
|
|
73 |
|
74 |
$frags = $this->get_where_frags( $value );
|
75 |
|
76 |
-
$where_frags =
|
77 |
foreach ( $frags as $frag ) {
|
78 |
$formatted_frag = '%' . $wpdb->esc_like( strtolower( trim( $frag ) ) ) . '%';
|
79 |
$query = "{$table_alias}.meta_value LIKE %s";
|
31 |
|
32 |
$frags = $this->get_where_frags( $value );
|
33 |
|
34 |
+
$where_frags = array();
|
35 |
foreach ( $frags as $frag ) {
|
36 |
$formatted_frag = '%' . $wpdb->esc_like( strtolower( trim( $frag ) ) ) . '%';
|
37 |
$where_frags[] = $wpdb->prepare( "{$key} LIKE %s", $formatted_frag );
|
73 |
|
74 |
$frags = $this->get_where_frags( $value );
|
75 |
|
76 |
+
$where_frags = array( $wpdb->prepare( "{$table_alias}.meta_key = %s", $key ) );
|
77 |
foreach ( $frags as $frag ) {
|
78 |
$formatted_frag = '%' . $wpdb->esc_like( strtolower( trim( $frag ) ) ) . '%';
|
79 |
$query = "{$table_alias}.meta_value LIKE %s";
|
common/src/Tribe/Duplicate/Strategy_Factory.php
CHANGED
@@ -8,14 +8,14 @@
|
|
8 |
* @since 4.6
|
9 |
*/
|
10 |
class Tribe__Duplicate__Strategy_Factory {
|
11 |
-
protected $strategy_map =
|
12 |
|
13 |
public function __construct() {
|
14 |
-
$strategy_map =
|
15 |
'default' => 'Tribe__Duplicate__Strategy__Same',
|
16 |
'same' => 'Tribe__Duplicate__Strategy__Same',
|
17 |
'like' => 'Tribe__Duplicate__Strategy__Like',
|
18 |
-
|
19 |
|
20 |
/**
|
21 |
* Filters the strategies managed by the strategy factory.
|
8 |
* @since 4.6
|
9 |
*/
|
10 |
class Tribe__Duplicate__Strategy_Factory {
|
11 |
+
protected $strategy_map = array();
|
12 |
|
13 |
public function __construct() {
|
14 |
+
$strategy_map = array(
|
15 |
'default' => 'Tribe__Duplicate__Strategy__Same',
|
16 |
'same' => 'Tribe__Duplicate__Strategy__Same',
|
17 |
'like' => 'Tribe__Duplicate__Strategy__Like',
|
18 |
+
);
|
19 |
|
20 |
/**
|
21 |
* Filters the strategies managed by the strategy factory.
|
common/src/Tribe/Editor.php
CHANGED
@@ -91,10 +91,10 @@ class Tribe__Editor {
|
|
91 |
*
|
92 |
* @return array
|
93 |
*/
|
94 |
-
public function add_support( $args =
|
95 |
// Make sure we have the Support argument and it's an array
|
96 |
if ( ! isset( $args['supports'] ) || ! is_array( $args['supports'] ) ) {
|
97 |
-
$args['supports'] =
|
98 |
}
|
99 |
|
100 |
// Add Editor Support
|
@@ -114,13 +114,13 @@ class Tribe__Editor {
|
|
114 |
*
|
115 |
* @return array
|
116 |
*/
|
117 |
-
public function add_rest_support( $args =
|
118 |
// Blocks Editor requires REST support
|
119 |
$args['show_in_rest'] = true;
|
120 |
|
121 |
// Make sure we have the Support argument and it's an array
|
122 |
if ( ! isset( $args['supports'] ) || ! is_array( $args['supports'] ) ) {
|
123 |
-
$args['supports'] =
|
124 |
}
|
125 |
|
126 |
if ( ! in_array( 'revisions', $args['supports'] ) ) {
|
@@ -196,30 +196,28 @@ class Tribe__Editor {
|
|
196 |
* @return bool
|
197 |
*/
|
198 |
public function is_classic_option_active() {
|
199 |
-
$valid_values =
|
200 |
|
201 |
return in_array( (string) get_option( 'classic-editor-replace' ), $valid_values, true );
|
202 |
}
|
203 |
|
204 |
/**
|
205 |
-
* Detect if the classic editor is
|
206 |
*
|
207 |
* @since 4.8
|
208 |
*
|
209 |
* @return bool
|
210 |
*/
|
211 |
public function is_classic_editor() {
|
212 |
-
$disabled_by_plugin
|
213 |
-
|
214 |
/**
|
215 |
-
* Allow other addons to
|
216 |
*
|
217 |
* @since 4.8.5
|
218 |
*
|
219 |
* @param bool $classic_is_active Whether the classic editor should be used.
|
220 |
*/
|
221 |
-
$disabled_by_filter
|
222 |
-
|
223 |
$is_classic_editor_request = tribe_get_request_var( 'classic-editor', null );
|
224 |
|
225 |
return $is_classic_editor_request || $disabled_by_plugin || $disabled_by_filter;
|
91 |
*
|
92 |
* @return array
|
93 |
*/
|
94 |
+
public function add_support( $args = array() ) {
|
95 |
// Make sure we have the Support argument and it's an array
|
96 |
if ( ! isset( $args['supports'] ) || ! is_array( $args['supports'] ) ) {
|
97 |
+
$args['supports'] = array();
|
98 |
}
|
99 |
|
100 |
// Add Editor Support
|
114 |
*
|
115 |
* @return array
|
116 |
*/
|
117 |
+
public function add_rest_support( $args = array() ) {
|
118 |
// Blocks Editor requires REST support
|
119 |
$args['show_in_rest'] = true;
|
120 |
|
121 |
// Make sure we have the Support argument and it's an array
|
122 |
if ( ! isset( $args['supports'] ) || ! is_array( $args['supports'] ) ) {
|
123 |
+
$args['supports'] = array();
|
124 |
}
|
125 |
|
126 |
if ( ! in_array( 'revisions', $args['supports'] ) ) {
|
196 |
* @return bool
|
197 |
*/
|
198 |
public function is_classic_option_active() {
|
199 |
+
$valid_values = array( 'replace', 'classic' );
|
200 |
|
201 |
return in_array( (string) get_option( 'classic-editor-replace' ), $valid_values, true );
|
202 |
}
|
203 |
|
204 |
/**
|
205 |
+
* Detect if is the classic editor is forced activated via plugin or if it comes from a request
|
206 |
*
|
207 |
* @since 4.8
|
208 |
*
|
209 |
* @return bool
|
210 |
*/
|
211 |
public function is_classic_editor() {
|
212 |
+
$disabled_by_plugin = $this->is_classic_plugin_active() && $this->is_classic_option_active();
|
|
|
213 |
/**
|
214 |
+
* Allow other addons to disabled classic editor based on options
|
215 |
*
|
216 |
* @since 4.8.5
|
217 |
*
|
218 |
* @param bool $classic_is_active Whether the classic editor should be used.
|
219 |
*/
|
220 |
+
$disabled_by_filter = apply_filters( 'tribe_editor_classic_is_active', false );
|
|
|
221 |
$is_classic_editor_request = tribe_get_request_var( 'classic-editor', null );
|
222 |
|
223 |
return $is_classic_editor_request || $disabled_by_plugin || $disabled_by_filter;
|
common/src/Tribe/Editor/Assets.php
CHANGED
@@ -1,5 +1,4 @@
|
|
1 |
<?php
|
2 |
-
|
3 |
/**
|
4 |
* Events Gutenberg Assets
|
5 |
*
|
@@ -13,7 +12,7 @@ class Tribe__Editor__Assets {
|
|
13 |
* @return void
|
14 |
*/
|
15 |
public function hook() {
|
16 |
-
add_action( 'tribe_plugins_loaded',
|
17 |
}
|
18 |
|
19 |
/**
|
@@ -36,22 +35,12 @@ class Tribe__Editor__Assets {
|
|
36 |
/**
|
37 |
* @todo revise this dependencies
|
38 |
*/
|
39 |
-
|
40 |
-
'react',
|
41 |
-
'react-dom',
|
42 |
-
'wp-components',
|
43 |
-
'wp-api',
|
44 |
-
'wp-api-request',
|
45 |
-
'wp-blocks',
|
46 |
-
'wp-i18n',
|
47 |
-
'wp-element',
|
48 |
-
'wp-editor',
|
49 |
-
],
|
50 |
'enqueue_block_editor_assets',
|
51 |
-
|
52 |
'in_footer' => false,
|
53 |
-
'localize'
|
54 |
-
|
55 |
'name' => 'tribe_editor_config',
|
56 |
/**
|
57 |
* Array used to setup the FE with custom variables from the BE
|
@@ -61,10 +50,10 @@ class Tribe__Editor__Assets {
|
|
61 |
* @param array An array with the variables to be localized
|
62 |
*/
|
63 |
'data' => tribe_callback( 'common.editor.configuration', 'localize' ),
|
64 |
-
|
65 |
-
|
66 |
'priority' => 11,
|
67 |
-
|
68 |
);
|
69 |
|
70 |
tribe_asset(
|
@@ -74,23 +63,13 @@ class Tribe__Editor__Assets {
|
|
74 |
/**
|
75 |
* @todo revise this dependencies
|
76 |
*/
|
77 |
-
|
78 |
-
'react',
|
79 |
-
'react-dom',
|
80 |
-
'wp-components',
|
81 |
-
'wp-api',
|
82 |
-
'wp-api-request',
|
83 |
-
'wp-blocks',
|
84 |
-
'wp-i18n',
|
85 |
-
'wp-element',
|
86 |
-
'wp-editor',
|
87 |
-
],
|
88 |
'enqueue_block_editor_assets',
|
89 |
-
|
90 |
'in_footer' => false,
|
91 |
-
'localize' =>
|
92 |
'priority' => 12,
|
93 |
-
|
94 |
);
|
95 |
tribe_asset(
|
96 |
$plugin,
|
@@ -99,23 +78,13 @@ class Tribe__Editor__Assets {
|
|
99 |
/**
|
100 |
* @todo revise this dependencies
|
101 |
*/
|
102 |
-
|
103 |
-
'react',
|
104 |
-
'react-dom',
|
105 |
-
'wp-components',
|
106 |
-
'wp-api',
|
107 |
-
'wp-api-request',
|
108 |
-
'wp-blocks',
|
109 |
-
'wp-i18n',
|
110 |
-
'wp-element',
|
111 |
-
'wp-editor',
|
112 |
-
],
|
113 |
'enqueue_block_editor_assets',
|
114 |
-
|
115 |
'in_footer' => false,
|
116 |
-
'localize' =>
|
117 |
'priority' => 13,
|
118 |
-
|
119 |
);
|
120 |
tribe_asset(
|
121 |
$plugin,
|
@@ -124,23 +93,13 @@ class Tribe__Editor__Assets {
|
|
124 |
/**
|
125 |
* @todo revise this dependencies
|
126 |
*/
|
127 |
-
|
128 |
-
'react',
|
129 |
-
'react-dom',
|
130 |
-
'wp-components',
|
131 |
-
'wp-api',
|
132 |
-
'wp-api-request',
|
133 |
-
'wp-blocks',
|
134 |
-
'wp-i18n',
|
135 |
-
'wp-element',
|
136 |
-
'wp-editor',
|
137 |
-
],
|
138 |
'enqueue_block_editor_assets',
|
139 |
-
|
140 |
'in_footer' => false,
|
141 |
-
'localize' =>
|
142 |
'priority' => 14,
|
143 |
-
|
144 |
);
|
145 |
tribe_asset(
|
146 |
$plugin,
|
@@ -149,7 +108,7 @@ class Tribe__Editor__Assets {
|
|
149 |
/**
|
150 |
* @todo revise this dependencies
|
151 |
*/
|
152 |
-
|
153 |
'react',
|
154 |
'react-dom',
|
155 |
'wp-components',
|
@@ -159,13 +118,13 @@ class Tribe__Editor__Assets {
|
|
159 |
'wp-i18n',
|
160 |
'wp-element',
|
161 |
'wp-editor',
|
162 |
-
|
163 |
'enqueue_block_editor_assets',
|
164 |
-
|
165 |
'in_footer' => false,
|
166 |
-
'localize' =>
|
167 |
'priority' => 15,
|
168 |
-
|
169 |
);
|
170 |
tribe_asset(
|
171 |
$plugin,
|
@@ -174,23 +133,13 @@ class Tribe__Editor__Assets {
|
|
174 |
/**
|
175 |
* @todo revise this dependencies
|
176 |
*/
|
177 |
-
|
178 |
-
'react',
|
179 |
-
'react-dom',
|
180 |
-
'wp-components',
|
181 |
-
'wp-api',
|
182 |
-
'wp-api-request',
|
183 |
-
'wp-blocks',
|
184 |
-
'wp-i18n',
|
185 |
-
'wp-element',
|
186 |
-
'wp-editor',
|
187 |
-
],
|
188 |
'enqueue_block_editor_assets',
|
189 |
-
|
190 |
'in_footer' => false,
|
191 |
-
'localize' =>
|
192 |
'priority' => 16,
|
193 |
-
|
194 |
);
|
195 |
tribe_asset(
|
196 |
$plugin,
|
@@ -199,7 +148,7 @@ class Tribe__Editor__Assets {
|
|
199 |
/**
|
200 |
* @todo revise this dependencies
|
201 |
*/
|
202 |
-
|
203 |
'react',
|
204 |
'react-dom',
|
205 |
'wp-components',
|
@@ -209,13 +158,13 @@ class Tribe__Editor__Assets {
|
|
209 |
'wp-i18n',
|
210 |
'wp-element',
|
211 |
'wp-editor',
|
212 |
-
|
213 |
'enqueue_block_editor_assets',
|
214 |
-
|
215 |
'in_footer' => false,
|
216 |
-
'localize' =>
|
217 |
'priority' => 17,
|
218 |
-
|
219 |
);
|
220 |
/**
|
221 |
* @todo: figure out why element styles are loading for tickets but not events.
|
@@ -227,7 +176,7 @@ class Tribe__Editor__Assets {
|
|
227 |
/**
|
228 |
* @todo revise this dependencies
|
229 |
*/
|
230 |
-
|
231 |
'react',
|
232 |
'react-dom',
|
233 |
'wp-components',
|
@@ -237,23 +186,23 @@ class Tribe__Editor__Assets {
|
|
237 |
'wp-i18n',
|
238 |
'wp-element',
|
239 |
'wp-editor',
|
240 |
-
|
241 |
'enqueue_block_editor_assets',
|
242 |
-
|
243 |
'in_footer' => false,
|
244 |
-
'localize' =>
|
245 |
'priority' => 17,
|
246 |
-
|
247 |
);
|
248 |
tribe_asset(
|
249 |
$plugin,
|
250 |
'tribe-common-gutenberg-elements-styles',
|
251 |
'app/elements.css',
|
252 |
-
|
253 |
'enqueue_block_editor_assets',
|
254 |
-
|
255 |
-
'in_footer'
|
256 |
-
|
257 |
);
|
258 |
}
|
259 |
}
|
1 |
<?php
|
|
|
2 |
/**
|
3 |
* Events Gutenberg Assets
|
4 |
*
|
12 |
* @return void
|
13 |
*/
|
14 |
public function hook() {
|
15 |
+
add_action( 'tribe_plugins_loaded', array( $this, 'register' ) );
|
16 |
}
|
17 |
|
18 |
/**
|
35 |
/**
|
36 |
* @todo revise this dependencies
|
37 |
*/
|
38 |
+
array( 'react', 'react-dom', 'wp-components', 'wp-api', 'wp-api-request', 'wp-blocks', 'wp-i18n', 'wp-element', 'wp-editor' ),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
39 |
'enqueue_block_editor_assets',
|
40 |
+
array(
|
41 |
'in_footer' => false,
|
42 |
+
'localize' => array(
|
43 |
+
array(
|
44 |
'name' => 'tribe_editor_config',
|
45 |
/**
|
46 |
* Array used to setup the FE with custom variables from the BE
|
50 |
* @param array An array with the variables to be localized
|
51 |
*/
|
52 |
'data' => tribe_callback( 'common.editor.configuration', 'localize' ),
|
53 |
+
),
|
54 |
+
),
|
55 |
'priority' => 11,
|
56 |
+
)
|
57 |
);
|
58 |
|
59 |
tribe_asset(
|
63 |
/**
|
64 |
* @todo revise this dependencies
|
65 |
*/
|
66 |
+
array( 'react', 'react-dom', 'wp-components', 'wp-api', 'wp-api-request', 'wp-blocks', 'wp-i18n', 'wp-element', 'wp-editor' ),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
67 |
'enqueue_block_editor_assets',
|
68 |
+
array(
|
69 |
'in_footer' => false,
|
70 |
+
'localize' => array(),
|
71 |
'priority' => 12,
|
72 |
+
)
|
73 |
);
|
74 |
tribe_asset(
|
75 |
$plugin,
|
78 |
/**
|
79 |
* @todo revise this dependencies
|
80 |
*/
|
81 |
+
array( 'react', 'react-dom', 'wp-components', 'wp-api', 'wp-api-request', 'wp-blocks', 'wp-i18n', 'wp-element', 'wp-editor' ),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
82 |
'enqueue_block_editor_assets',
|
83 |
+
array(
|
84 |
'in_footer' => false,
|
85 |
+
'localize' => array(),
|
86 |
'priority' => 13,
|
87 |
+
)
|
88 |
);
|
89 |
tribe_asset(
|
90 |
$plugin,
|
93 |
/**
|
94 |
* @todo revise this dependencies
|
95 |
*/
|
96 |
+
array( 'react', 'react-dom', 'wp-components', 'wp-api', 'wp-api-request', 'wp-blocks', 'wp-i18n', 'wp-element', 'wp-editor' ),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
97 |
'enqueue_block_editor_assets',
|
98 |
+
array(
|
99 |
'in_footer' => false,
|
100 |
+
'localize' => array(),
|
101 |
'priority' => 14,
|
102 |
+
)
|
103 |
);
|
104 |
tribe_asset(
|
105 |
$plugin,
|
108 |
/**
|
109 |
* @todo revise this dependencies
|
110 |
*/
|
111 |
+
array(
|
112 |
'react',
|
113 |
'react-dom',
|
114 |
'wp-components',
|
118 |
'wp-i18n',
|
119 |
'wp-element',
|
120 |
'wp-editor',
|
121 |
+
),
|
122 |
'enqueue_block_editor_assets',
|
123 |
+
array(
|
124 |
'in_footer' => false,
|
125 |
+
'localize' => array(),
|
126 |
'priority' => 15,
|
127 |
+
)
|
128 |
);
|
129 |
tribe_asset(
|
130 |
$plugin,
|
133 |
/**
|
134 |
* @todo revise this dependencies
|
135 |
*/
|
136 |
+
array( 'react', 'react-dom', 'wp-components', 'wp-api', 'wp-api-request', 'wp-blocks', 'wp-i18n', 'wp-element', 'wp-editor' ),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
137 |
'enqueue_block_editor_assets',
|
138 |
+
array(
|
139 |
'in_footer' => false,
|
140 |
+
'localize' => array(),
|
141 |
'priority' => 16,
|
142 |
+
)
|
143 |
);
|
144 |
tribe_asset(
|
145 |
$plugin,
|
148 |
/**
|
149 |
* @todo revise this dependencies
|
150 |
*/
|
151 |
+
array(
|
152 |
'react',
|
153 |
'react-dom',
|
154 |
'wp-components',
|
158 |
'wp-i18n',
|
159 |
'wp-element',
|
160 |
'wp-editor',
|
161 |
+
),
|
162 |
'enqueue_block_editor_assets',
|
163 |
+
array(
|
164 |
'in_footer' => false,
|
165 |
+
'localize' => array(),
|
166 |
'priority' => 17,
|
167 |
+
)
|
168 |
);
|
169 |
/**
|
170 |
* @todo: figure out why element styles are loading for tickets but not events.
|
176 |
/**
|
177 |
* @todo revise this dependencies
|
178 |
*/
|
179 |
+
array(
|
180 |
'react',
|
181 |
'react-dom',
|
182 |
'wp-components',
|
186 |
'wp-i18n',
|
187 |
'wp-element',
|
188 |
'wp-editor',
|
189 |
+
),
|
190 |
'enqueue_block_editor_assets',
|
191 |
+
array(
|
192 |
'in_footer' => false,
|
193 |
+
'localize' => array(),
|
194 |
'priority' => 17,
|
195 |
+
)
|
196 |
);
|
197 |
tribe_asset(
|
198 |
$plugin,
|
199 |
'tribe-common-gutenberg-elements-styles',
|
200 |
'app/elements.css',
|
201 |
+
array(),
|
202 |
'enqueue_block_editor_assets',
|
203 |
+
array(
|
204 |
+
'in_footer' => false,
|
205 |
+
)
|
206 |
);
|
207 |
}
|
208 |
}
|
common/src/Tribe/Editor/Blocks/Abstract.php
CHANGED
@@ -47,7 +47,7 @@ implements Tribe__Editor__Blocks__Interface {
|
|
47 |
*
|
48 |
* @return array
|
49 |
*/
|
50 |
-
public function attributes( $params =
|
51 |
|
52 |
// get the default attributes
|
53 |
$default_attributes = $this->default_attributes();
|
@@ -80,7 +80,7 @@ implements Tribe__Editor__Blocks__Interface {
|
|
80 |
*/
|
81 |
public function default_attributes() {
|
82 |
|
83 |
-
$attributes =
|
84 |
|
85 |
/**
|
86 |
* Filters the default attributes
|
@@ -102,8 +102,12 @@ implements Tribe__Editor__Blocks__Interface {
|
|
102 |
*
|
103 |
* @return string
|
104 |
*/
|
105 |
-
public function render( $attributes =
|
106 |
-
|
|
|
|
|
|
|
|
|
107 |
|
108 |
return
|
109 |
'<pre class="tribe-placeholder-text-' . $this->name() . '">' .
|
@@ -132,13 +136,13 @@ implements Tribe__Editor__Blocks__Interface {
|
|
132 |
* @return void
|
133 |
*/
|
134 |
public function register() {
|
135 |
-
$block_args =
|
136 |
-
'render_callback' =>
|
137 |
-
|
138 |
|
139 |
register_block_type( $this->name(), $block_args );
|
140 |
|
141 |
-
add_action( 'wp_ajax_' . $this->get_ajax_action(),
|
142 |
|
143 |
$this->assets();
|
144 |
$this->hook();
|
47 |
*
|
48 |
* @return array
|
49 |
*/
|
50 |
+
public function attributes( $params = array() ) {
|
51 |
|
52 |
// get the default attributes
|
53 |
$default_attributes = $this->default_attributes();
|
80 |
*/
|
81 |
public function default_attributes() {
|
82 |
|
83 |
+
$attributes = array();
|
84 |
|
85 |
/**
|
86 |
* Filters the default attributes
|
102 |
*
|
103 |
* @return string
|
104 |
*/
|
105 |
+
public function render( $attributes = array() ) {
|
106 |
+
if ( version_compare( phpversion(), '5.4', '>=' ) ) {
|
107 |
+
$json_string = json_encode( $attributes, JSON_PRETTY_PRINT );
|
108 |
+
} else {
|
109 |
+
$json_string = json_encode( $attributes );
|
110 |
+
}
|
111 |
|
112 |
return
|
113 |
'<pre class="tribe-placeholder-text-' . $this->name() . '">' .
|
136 |
* @return void
|
137 |
*/
|
138 |
public function register() {
|
139 |
+
$block_args = array(
|
140 |
+
'render_callback' => array( $this, 'render' ),
|
141 |
+
);
|
142 |
|
143 |
register_block_type( $this->name(), $block_args );
|
144 |
|
145 |
+
add_action( 'wp_ajax_' . $this->get_ajax_action(), array( $this, 'ajax' ) );
|
146 |
|
147 |
$this->assets();
|
148 |
$this->hook();
|
common/src/Tribe/Editor/Blocks/Interface.php
CHANGED
@@ -38,7 +38,7 @@ interface Tribe__Editor__Blocks__Interface {
|
|
38 |
*
|
39 |
* @return string
|
40 |
*/
|
41 |
-
public function render( $attributes =
|
42 |
|
43 |
/**
|
44 |
* Does the registration for PHP rendering for the Block, important due to been
|
38 |
*
|
39 |
* @return string
|
40 |
*/
|
41 |
+
public function render( $attributes = array() );
|
42 |
|
43 |
/**
|
44 |
* Does the registration for PHP rendering for the Block, important due to been
|
common/src/Tribe/Editor/Configuration.php
CHANGED
@@ -8,7 +8,6 @@
|
|
8 |
* @since 4.8
|
9 |
*/
|
10 |
class Tribe__Editor__Configuration implements Tribe__Editor__Configuration_Interface {
|
11 |
-
|
12 |
/**
|
13 |
* Localize variables that are part of common
|
14 |
*
|
@@ -17,35 +16,31 @@ class Tribe__Editor__Configuration implements Tribe__Editor__Configuration_Inter
|
|
17 |
* @return array
|
18 |
*/
|
19 |
public function localize() {
|
20 |
-
|
21 |
-
|
22 |
-
*/
|
23 |
-
$languages_locations = tribe( 'languages.locations' );
|
24 |
-
$editor_config = [
|
25 |
-
'common' => [
|
26 |
'adminUrl' => admin_url(),
|
27 |
-
'timeZone' =>
|
28 |
'showTimeZone' => false,
|
29 |
'label' => $this->get_timezone_label(),
|
30 |
-
|
31 |
-
'rest' =>
|
32 |
'url' => get_rest_url(),
|
33 |
-
'nonce' =>
|
34 |
'wp_rest' => wp_create_nonce( 'wp_rest' ),
|
35 |
-
|
36 |
-
'namespaces' =>
|
37 |
'core' => 'wp/v2',
|
38 |
-
|
39 |
-
|
40 |
'dateSettings' => $this->get_date_settings(),
|
41 |
-
'constants' =>
|
42 |
'hideUpsell' => ( defined( 'TRIBE_HIDE_UPSELL' ) && TRIBE_HIDE_UPSELL ),
|
43 |
-
|
44 |
-
'countries' =>
|
45 |
'usStates' => Tribe__View_Helpers::loadStates(),
|
46 |
-
|
47 |
'blocks' => [],
|
48 |
-
|
49 |
|
50 |
/**
|
51 |
* Filter the default configuration used to localize variables
|
@@ -81,31 +76,31 @@ class Tribe__Editor__Configuration implements Tribe__Editor__Configuration_Inter
|
|
81 |
public function get_date_settings() {
|
82 |
global $wp_locale;
|
83 |
|
84 |
-
return
|
85 |
-
'l10n' =>
|
86 |
'locale' => get_user_locale(),
|
87 |
'months' => array_values( $wp_locale->month ),
|
88 |
'monthsShort' => array_values( $wp_locale->month_abbrev ),
|
89 |
'weekdays' => array_values( $wp_locale->weekday ),
|
90 |
'weekdaysShort' => array_values( $wp_locale->weekday_abbrev ),
|
91 |
'meridiem' => (object) $wp_locale->meridiem,
|
92 |
-
'relative' =>
|
93 |
/* translators: %s: duration */
|
94 |
'future' => __( '%s from now', 'default' ),
|
95 |
/* translators: %s: duration */
|
96 |
'past' => __( '%s ago', 'default' ),
|
97 |
-
|
98 |
-
|
99 |
-
'formats' =>
|
100 |
'time' => get_option( 'time_format', __( 'g:i a', 'default' ) ),
|
101 |
'date' => get_option( 'date_format', __( 'F j, Y', 'default' ) ),
|
102 |
'dateNoYear' => __( 'F j', 'default' ),
|
103 |
'datetime' => get_option( 'date_format', __( 'F j, Y', 'default' ) ) . ' ' . get_option( 'time_format', __( 'g:i a', 'default' ) ),
|
104 |
-
|
105 |
-
'timezone' =>
|
106 |
'offset' => get_option( 'gmt_offset', 0 ),
|
107 |
'string' => $this->get_timezone_label(),
|
108 |
-
|
109 |
-
|
110 |
}
|
111 |
}
|
8 |
* @since 4.8
|
9 |
*/
|
10 |
class Tribe__Editor__Configuration implements Tribe__Editor__Configuration_Interface {
|
|
|
11 |
/**
|
12 |
* Localize variables that are part of common
|
13 |
*
|
16 |
* @return array
|
17 |
*/
|
18 |
public function localize() {
|
19 |
+
$editor_config = array(
|
20 |
+
'common' => array(
|
|
|
|
|
|
|
|
|
21 |
'adminUrl' => admin_url(),
|
22 |
+
'timeZone' => array(
|
23 |
'showTimeZone' => false,
|
24 |
'label' => $this->get_timezone_label(),
|
25 |
+
),
|
26 |
+
'rest' => array(
|
27 |
'url' => get_rest_url(),
|
28 |
+
'nonce' => array(
|
29 |
'wp_rest' => wp_create_nonce( 'wp_rest' ),
|
30 |
+
),
|
31 |
+
'namespaces' => array(
|
32 |
'core' => 'wp/v2',
|
33 |
+
),
|
34 |
+
),
|
35 |
'dateSettings' => $this->get_date_settings(),
|
36 |
+
'constants' => array(
|
37 |
'hideUpsell' => ( defined( 'TRIBE_HIDE_UPSELL' ) && TRIBE_HIDE_UPSELL ),
|
38 |
+
),
|
39 |
+
'countries' => tribe( 'languages.locations' )->get_countries(),
|
40 |
'usStates' => Tribe__View_Helpers::loadStates(),
|
41 |
+
),
|
42 |
'blocks' => [],
|
43 |
+
);
|
44 |
|
45 |
/**
|
46 |
* Filter the default configuration used to localize variables
|
76 |
public function get_date_settings() {
|
77 |
global $wp_locale;
|
78 |
|
79 |
+
return array(
|
80 |
+
'l10n' => array(
|
81 |
'locale' => get_user_locale(),
|
82 |
'months' => array_values( $wp_locale->month ),
|
83 |
'monthsShort' => array_values( $wp_locale->month_abbrev ),
|
84 |
'weekdays' => array_values( $wp_locale->weekday ),
|
85 |
'weekdaysShort' => array_values( $wp_locale->weekday_abbrev ),
|
86 |
'meridiem' => (object) $wp_locale->meridiem,
|
87 |
+
'relative' => array(
|
88 |
/* translators: %s: duration */
|
89 |
'future' => __( '%s from now', 'default' ),
|
90 |
/* translators: %s: duration */
|
91 |
'past' => __( '%s ago', 'default' ),
|
92 |
+
),
|
93 |
+
),
|
94 |
+
'formats' => array(
|
95 |
'time' => get_option( 'time_format', __( 'g:i a', 'default' ) ),
|
96 |
'date' => get_option( 'date_format', __( 'F j, Y', 'default' ) ),
|
97 |
'dateNoYear' => __( 'F j', 'default' ),
|
98 |
'datetime' => get_option( 'date_format', __( 'F j, Y', 'default' ) ) . ' ' . get_option( 'time_format', __( 'g:i a', 'default' ) ),
|
99 |
+
),
|
100 |
+
'timezone' => array(
|
101 |
'offset' => get_option( 'gmt_offset', 0 ),
|
102 |
'string' => $this->get_timezone_label(),
|
103 |
+
),
|
104 |
+
);
|
105 |
}
|
106 |
}
|
common/src/Tribe/Editor/Meta.php
CHANGED
@@ -16,13 +16,13 @@ abstract class Tribe__Editor__Meta
|
|
16 |
* @return array
|
17 |
*/
|
18 |
protected function text() {
|
19 |
-
return
|
20 |
-
'auth_callback' =>
|
21 |
'sanitize_callback' => 'sanitize_text_field',
|
22 |
'type' => 'string',
|
23 |
'single' => true,
|
24 |
'show_in_rest' => true,
|
25 |
-
|
26 |
}
|
27 |
|
28 |
/**
|
@@ -33,13 +33,13 @@ abstract class Tribe__Editor__Meta
|
|
33 |
* @return array
|
34 |
*/
|
35 |
protected function textarea() {
|
36 |
-
return
|
37 |
-
'auth_callback' =>
|
38 |
'sanitize_callback' => 'sanitize_textarea_field',
|
39 |
'type' => 'string',
|
40 |
'single' => true,
|
41 |
'show_in_rest' => true,
|
42 |
-
|
43 |
}
|
44 |
|
45 |
/**
|
@@ -50,13 +50,13 @@ abstract class Tribe__Editor__Meta
|
|
50 |
* @return array
|
51 |
*/
|
52 |
protected function url() {
|
53 |
-
return
|
54 |
-
'auth_callback' =>
|
55 |
'sanitize_callback' => 'esc_url_raw',
|
56 |
'type' => 'string',
|
57 |
'single' => true,
|
58 |
'show_in_rest' => true,
|
59 |
-
|
60 |
}
|
61 |
|
62 |
/**
|
@@ -67,13 +67,13 @@ abstract class Tribe__Editor__Meta
|
|
67 |
* @return array
|
68 |
*/
|
69 |
protected function numeric() {
|
70 |
-
return
|
71 |
-
'auth_callback' =>
|
72 |
'sanitize_callback' => 'absint',
|
73 |
'type' => 'number',
|
74 |
'single' => true,
|
75 |
'show_in_rest' => true,
|
76 |
-
|
77 |
}
|
78 |
|
79 |
/***
|
@@ -84,13 +84,13 @@ abstract class Tribe__Editor__Meta
|
|
84 |
* @return array
|
85 |
*/
|
86 |
protected function boolean() {
|
87 |
-
return
|
88 |
-
'auth_callback' =>
|
89 |
-
'sanitize_callback' =>
|
90 |
'type' => 'boolean',
|
91 |
'single' => true,
|
92 |
'show_in_rest' => true,
|
93 |
-
|
94 |
}
|
95 |
|
96 |
/**
|
@@ -101,14 +101,14 @@ abstract class Tribe__Editor__Meta
|
|
101 |
* @return array
|
102 |
*/
|
103 |
protected function numeric_array() {
|
104 |
-
return
|
105 |
'description' => __( 'Numeric Array', 'tribe-common' ),
|
106 |
-
'auth_callback' =>
|
107 |
-
'sanitize_callback' =>
|
108 |
'type' => 'number',
|
109 |
'single' => false,
|
110 |
'show_in_rest' => true,
|
111 |
-
|
112 |
}
|
113 |
|
114 |
/**
|
@@ -119,14 +119,14 @@ abstract class Tribe__Editor__Meta
|
|
119 |
* @return array
|
120 |
*/
|
121 |
protected function text_array() {
|
122 |
-
return
|
123 |
'description' => __( 'Text Array', 'tribe-common' ),
|
124 |
-
'auth_callback' =>
|
125 |
-
'sanitize_callback' =>
|
126 |
'type' => 'string',
|
127 |
'single' => false,
|
128 |
'show_in_rest' => true,
|
129 |
-
|
130 |
}
|
131 |
|
132 |
/**
|
16 |
* @return array
|
17 |
*/
|
18 |
protected function text() {
|
19 |
+
return array(
|
20 |
+
'auth_callback' => array( $this, 'auth_callback' ),
|
21 |
'sanitize_callback' => 'sanitize_text_field',
|
22 |
'type' => 'string',
|
23 |
'single' => true,
|
24 |
'show_in_rest' => true,
|
25 |
+
);
|
26 |
}
|
27 |
|
28 |
/**
|
33 |
* @return array
|
34 |
*/
|
35 |
protected function textarea() {
|
36 |
+
return array(
|
37 |
+
'auth_callback' => array( $this, 'auth_callback' ),
|
38 |
'sanitize_callback' => 'sanitize_textarea_field',
|
39 |
'type' => 'string',
|
40 |
'single' => true,
|
41 |
'show_in_rest' => true,
|
42 |
+
);
|
43 |
}
|
44 |
|
45 |
/**
|
50 |
* @return array
|
51 |
*/
|
52 |
protected function url() {
|
53 |
+
return array(
|
54 |
+
'auth_callback' => array( $this, 'auth_callback' ),
|
55 |
'sanitize_callback' => 'esc_url_raw',
|
56 |
'type' => 'string',
|
57 |
'single' => true,
|
58 |
'show_in_rest' => true,
|
59 |
+
);
|
60 |
}
|
61 |
|
62 |
/**
|
67 |
* @return array
|
68 |
*/
|
69 |
protected function numeric() {
|
70 |
+
return array(
|
71 |
+
'auth_callback' => array( $this, 'auth_callback' ),
|
72 |
'sanitize_callback' => 'absint',
|
73 |
'type' => 'number',
|
74 |
'single' => true,
|
75 |
'show_in_rest' => true,
|
76 |
+
);
|
77 |
}
|
78 |
|
79 |
/***
|
84 |
* @return array
|
85 |
*/
|
86 |
protected function boolean() {
|
87 |
+
return array(
|
88 |
+
'auth_callback' => array( $this, 'auth_callback' ),
|
89 |
+
'sanitize_callback' => array( $this, 'sanitize_boolean' ),
|
90 |
'type' => 'boolean',
|
91 |
'single' => true,
|
92 |
'show_in_rest' => true,
|
93 |
+
);
|
94 |
}
|
95 |
|
96 |
/**
|
101 |
* @return array
|
102 |
*/
|
103 |
protected function numeric_array() {
|
104 |
+
return array(
|
105 |
'description' => __( 'Numeric Array', 'tribe-common' ),
|
106 |
+
'auth_callback' => array( $this, 'auth_callback' ),
|
107 |
+
'sanitize_callback' => array( $this, 'sanitize_numeric_array' ),
|
108 |
'type' => 'number',
|
109 |
'single' => false,
|
110 |
'show_in_rest' => true,
|
111 |
+
);
|
112 |
}
|
113 |
|
114 |
/**
|
119 |
* @return array
|
120 |
*/
|
121 |
protected function text_array() {
|
122 |
+
return array(
|
123 |
'description' => __( 'Text Array', 'tribe-common' ),
|
124 |
+
'auth_callback' => array( $this, 'auth_callback' ),
|
125 |
+
'sanitize_callback' => array( $this, 'sanitize_text_array' ),
|
126 |
'type' => 'string',
|
127 |
'single' => false,
|
128 |
'show_in_rest' => true,
|
129 |
+
);
|
130 |
}
|
131 |
|
132 |
/**
|
common/src/Tribe/Editor/Provider.php
CHANGED
@@ -18,7 +18,7 @@ class Tribe__Editor__Provider extends tad_DI52_ServiceProvider {
|
|
18 |
return;
|
19 |
}
|
20 |
|
21 |
-
$this->container->singleton( 'editor.assets', 'Tribe__Editor__Assets',
|
22 |
|
23 |
$this->hook();
|
24 |
|
@@ -36,7 +36,7 @@ class Tribe__Editor__Provider extends tad_DI52_ServiceProvider {
|
|
36 |
*/
|
37 |
protected function hook() {
|
38 |
// Setup the registration of Blocks
|
39 |
-
add_action( 'init',
|
40 |
}
|
41 |
|
42 |
/**
|
18 |
return;
|
19 |
}
|
20 |
|
21 |
+
$this->container->singleton( 'editor.assets', 'Tribe__Editor__Assets', array( 'hook' ) );
|
22 |
|
23 |
$this->hook();
|
24 |
|
36 |
*/
|
37 |
protected function hook() {
|
38 |
// Setup the registration of Blocks
|
39 |
+
add_action( 'init', array( $this, 'register_blocks' ), 20 );
|
40 |
}
|
41 |
|
42 |
/**
|
common/src/Tribe/Editor/Utils.php
CHANGED
@@ -95,10 +95,10 @@ class Tribe__Editor__Utils {
|
|
95 |
return false;
|
96 |
}
|
97 |
|
98 |
-
return wp_update_post(
|
99 |
'ID' => $post_id,
|
100 |
'post_content' => $next_content,
|
101 |
-
|
102 |
}
|
103 |
|
104 |
/**
|
95 |
return false;
|
96 |
}
|
97 |
|
98 |
+
return wp_update_post( array(
|
99 |
'ID' => $post_id,
|
100 |
'post_content' => $next_content,
|
101 |
+
) );
|
102 |
}
|
103 |
|
104 |
/**
|
common/src/Tribe/Error.php
CHANGED
@@ -7,7 +7,7 @@ class Tribe__Error {
|
|
7 |
* All the Errors Registered
|
8 |
* @var array
|
9 |
*/
|
10 |
-
private $items =
|
11 |
|
12 |
/**
|
13 |
* Static Singleton Holder
|
@@ -49,9 +49,9 @@ class Tribe__Error {
|
|
49 |
*
|
50 |
* @return WP_Error
|
51 |
*/
|
52 |
-
public function send( $indexes, $context =
|
53 |
if ( ! $this->exists( $indexes ) ) {
|
54 |
-
$indexes =
|
55 |
}
|
56 |
|
57 |
// Fetches the Errors
|
@@ -170,7 +170,7 @@ class Tribe__Error {
|
|
170 |
$variable = $variable[ $index ];
|
171 |
}
|
172 |
|
173 |
-
$return
|
174 |
$was_namespace = is_array( $variable );
|
175 |
|
176 |
/**
|
7 |
* All the Errors Registered
|
8 |
* @var array
|
9 |
*/
|
10 |
+
private $items = array();
|
11 |
|
12 |
/**
|
13 |
* Static Singleton Holder
|
49 |
*
|
50 |
* @return WP_Error
|
51 |
*/
|
52 |
+
public function send( $indexes, $context = array(), $sprintf = array() ) {
|
53 |
if ( ! $this->exists( $indexes ) ) {
|
54 |
+
$indexes = array( 'unknown' );
|
55 |
}
|
56 |
|
57 |
// Fetches the Errors
|
170 |
$variable = $variable[ $index ];
|
171 |
}
|
172 |
|
173 |
+
$return = array();
|
174 |
$was_namespace = is_array( $variable );
|
175 |
|
176 |
/**
|
common/src/Tribe/Exception.php
CHANGED
@@ -45,7 +45,7 @@ class Tribe__Exception extends Exception {
|
|
45 |
*/
|
46 |
private function get_log_type_for_exception_code( $code ) {
|
47 |
$map = array(
|
48 |
-
// @todo
|
49 |
);
|
50 |
|
51 |
return isset( $map[ $code ] ) ? $map[ $code ] : Tribe__Log::ERROR;
|
45 |
*/
|
46 |
private function get_log_type_for_exception_code( $code ) {
|
47 |
$map = array(
|
48 |
+
// @todo: let's add a decent exception code to log type map here
|
49 |
);
|
50 |
|
51 |
return isset( $map[ $code ] ) ? $map[ $code ] : Tribe__Log::ERROR;
|
common/src/Tribe/Extension.php
CHANGED
@@ -42,7 +42,7 @@ abstract class Tribe__Extension {
|
|
42 |
* resulting data is stored in this.
|
43 |
* }
|
44 |
*/
|
45 |
-
protected $args =
|
46 |
|
47 |
/**
|
48 |
* The various extension instances
|
@@ -53,7 +53,7 @@ abstract class Tribe__Extension {
|
|
53 |
* @type object $child_class_name instance
|
54 |
* }
|
55 |
*/
|
56 |
-
private static $instances =
|
57 |
|
58 |
/**
|
59 |
* Get singleton instance of child class
|
@@ -101,7 +101,7 @@ abstract class Tribe__Extension {
|
|
101 |
if ( did_action( $init_hook ) > 0 ) {
|
102 |
$this->register();
|
103 |
} else {
|
104 |
-
add_action( $init_hook,
|
105 |
}
|
106 |
}
|
107 |
|
@@ -127,7 +127,7 @@ abstract class Tribe__Extension {
|
|
127 |
* @param string|null $minimum_version Minimum acceptable version of plugin.
|
128 |
*/
|
129 |
final protected function add_required_plugin( $main_class, $minimum_version = null ) {
|
130 |
-
$this->set(
|
131 |
}
|
132 |
|
133 |
/**
|
@@ -143,7 +143,7 @@ abstract class Tribe__Extension {
|
|
143 |
$this->get_plugin_file(),
|
144 |
__( 'Tutorial', 'tribe-common' ),
|
145 |
$url,
|
146 |
-
|
147 |
);
|
148 |
}
|
149 |
|
@@ -160,54 +160,25 @@ abstract class Tribe__Extension {
|
|
160 |
* Checks if the extension has permission to run, if so runs init() in child class
|
161 |
*/
|
162 |
final public function register() {
|
163 |
-
$extension_file = $this->get_plugin_file();
|
164 |
-
$extension_class_name = $this->get( 'class' );
|
165 |
-
$extension_version = $this->get_version();
|
166 |
-
$plugins_required = $this->get( 'requires', [] );
|
167 |
-
|
168 |
tribe_register_plugin(
|
169 |
-
$
|
170 |
-
$
|
171 |
-
$
|
172 |
-
$
|
173 |
);
|
174 |
|
175 |
$dependency = Tribe__Dependency::instance();
|
176 |
|
177 |
// check requisite plugins are active for this extension
|
178 |
-
$is_plugin_authorized = $dependency->has_requisite_plugins( $
|
179 |
-
|
180 |
-
/**
|
181 |
-
* Explicitly disallow an extension, such as a core plugin having absorbed/replaced its functionality.
|
182 |
-
*
|
183 |
-
* @since 4.12.2
|
184 |
-
*
|
185 |
-
* @param bool $is_disallowed False by default.
|
186 |
-
* @param string $extension_class_name This extension's class name string
|
187 |
-
* (without initial forward slash for namespaced classes).
|
188 |
-
* @param Tribe__Extension $this_instance This extension class' instance.
|
189 |
-
*/
|
190 |
-
$is_disallowed = (bool) apply_filters( 'tribe_extension_is_disallowed', false, $extension_class_name, $this );
|
191 |
-
|
192 |
-
if ( $is_disallowed ) {
|
193 |
-
if (
|
194 |
-
is_admin()
|
195 |
-
&& current_user_can( 'activate_plugins' )
|
196 |
-
) {
|
197 |
-
tribe_notice( 'tribe_extension_is_disallowed', [ $this, 'notice_disallowed' ], [ 'type' => 'error' ] );
|
198 |
-
}
|
199 |
-
|
200 |
-
deactivate_plugins( $extension_file, true );
|
201 |
-
|
202 |
-
return;
|
203 |
-
}
|
204 |
|
205 |
if ( $is_plugin_authorized ) {
|
206 |
$this->init();
|
207 |
|
208 |
-
//
|
209 |
-
$dependency->add_active_plugin( $
|
210 |
}
|
|
|
211 |
}
|
212 |
|
213 |
/**
|
@@ -258,7 +229,7 @@ abstract class Tribe__Extension {
|
|
258 |
}
|
259 |
|
260 |
/**
|
261 |
-
*
|
262 |
*
|
263 |
* @return string Action/hook
|
264 |
*/
|
@@ -391,7 +362,7 @@ abstract class Tribe__Extension {
|
|
391 |
|
392 |
// Class name was not set by debug_backtrace() hackery.
|
393 |
if ( null === $class_name ) {
|
394 |
-
tribe_notice( 'tribe_debug_backtrace_disabled',
|
395 |
}
|
396 |
|
397 |
return $class_name;
|
@@ -407,31 +378,12 @@ abstract class Tribe__Extension {
|
|
407 |
);
|
408 |
}
|
409 |
|
410 |
-
/**
|
411 |
-
* Gets the error message about being explicitly disallowed.
|
412 |
-
*
|
413 |
-
* @since 4.12.2
|
414 |
-
*
|
415 |
-
* @return string Notice text.
|
416 |
-
*/
|
417 |
-
public function notice_disallowed() {
|
418 |
-
return sprintf(
|
419 |
-
'<p><strong>%1$s:</strong> %2$s</p>',
|
420 |
-
$this->get_name(),
|
421 |
-
esc_html_x(
|
422 |
-
"This extension has been programmatically disallowed. The most common reason is due to another The Events Calendar plugin having absorbed or replaced this extension's functionality. This extension plugin has been deactivated, and you should likely delete it.",
|
423 |
-
'extension disallowed',
|
424 |
-
'tribe-common'
|
425 |
-
)
|
426 |
-
);
|
427 |
-
}
|
428 |
-
|
429 |
/**
|
430 |
* Prevent cloning the singleton with 'clone' operator
|
431 |
*
|
432 |
* @return void
|
433 |
*/
|
434 |
-
final
|
435 |
_doing_it_wrong(
|
436 |
__FUNCTION__,
|
437 |
'Can not use this method on singletons.',
|
@@ -444,7 +396,7 @@ abstract class Tribe__Extension {
|
|
444 |
*
|
445 |
* @return void
|
446 |
*/
|
447 |
-
final
|
448 |
_doing_it_wrong(
|
449 |
__FUNCTION__,
|
450 |
'Can not use this method on singletons.',
|
42 |
* resulting data is stored in this.
|
43 |
* }
|
44 |
*/
|
45 |
+
protected $args = array();
|
46 |
|
47 |
/**
|
48 |
* The various extension instances
|
53 |
* @type object $child_class_name instance
|
54 |
* }
|
55 |
*/
|
56 |
+
private static $instances = array();
|
57 |
|
58 |
/**
|
59 |
* Get singleton instance of child class
|
101 |
if ( did_action( $init_hook ) > 0 ) {
|
102 |
$this->register();
|
103 |
} else {
|
104 |
+
add_action( $init_hook, array( $this, 'register' ) );
|
105 |
}
|
106 |
}
|
107 |
|
127 |
* @param string|null $minimum_version Minimum acceptable version of plugin.
|
128 |
*/
|
129 |
final protected function add_required_plugin( $main_class, $minimum_version = null ) {
|
130 |
+
$this->set( array( 'requires', $main_class ), $minimum_version );
|
131 |
}
|
132 |
|
133 |
/**
|
143 |
$this->get_plugin_file(),
|
144 |
__( 'Tutorial', 'tribe-common' ),
|
145 |
$url,
|
146 |
+
array( 'class' => 'tribe-meta-link-extension' )
|
147 |
);
|
148 |
}
|
149 |
|
160 |
* Checks if the extension has permission to run, if so runs init() in child class
|
161 |
*/
|
162 |
final public function register() {
|
|
|
|
|
|
|
|
|
|
|
163 |
tribe_register_plugin(
|
164 |
+
$this->get_plugin_file(),
|
165 |
+
$this->get( 'class' ),
|
166 |
+
$this->get_version(),
|
167 |
+
$this->get( 'requires', array() )
|
168 |
);
|
169 |
|
170 |
$dependency = Tribe__Dependency::instance();
|
171 |
|
172 |
// check requisite plugins are active for this extension
|
173 |
+
$is_plugin_authorized = $dependency->has_requisite_plugins( $this->get( 'requires', array() ) );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
174 |
|
175 |
if ( $is_plugin_authorized ) {
|
176 |
$this->init();
|
177 |
|
178 |
+
//add extension as active to dependency checker
|
179 |
+
$dependency->add_active_plugin( $this->get( 'class' ), $this->get_version(), $this->get_plugin_file() );
|
180 |
}
|
181 |
+
|
182 |
}
|
183 |
|
184 |
/**
|
229 |
}
|
230 |
|
231 |
/**
|
232 |
+
* Get's the action/hook for the extensions init()
|
233 |
*
|
234 |
* @return string Action/hook
|
235 |
*/
|
362 |
|
363 |
// Class name was not set by debug_backtrace() hackery.
|
364 |
if ( null === $class_name ) {
|
365 |
+
tribe_notice( 'tribe_debug_backtrace_disabled', array( __CLASS__, 'notice_debug_backtrace' ) );
|
366 |
}
|
367 |
|
368 |
return $class_name;
|
378 |
);
|
379 |
}
|
380 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
381 |
/**
|
382 |
* Prevent cloning the singleton with 'clone' operator
|
383 |
*
|
384 |
* @return void
|
385 |
*/
|
386 |
+
final private function __clone() {
|
387 |
_doing_it_wrong(
|
388 |
__FUNCTION__,
|
389 |
'Can not use this method on singletons.',
|
396 |
*
|
397 |
* @return void
|
398 |
*/
|
399 |
+
final private function __wakeup() {
|
400 |
_doing_it_wrong(
|
401 |
__FUNCTION__,
|
402 |
'Can not use this method on singletons.',
|
common/src/Tribe/Extension_Loader.php
CHANGED
@@ -15,7 +15,7 @@ class Tribe__Extension_Loader {
|
|
15 |
* @param array $plugin_basename Plugin header key/value pairs.
|
16 |
* }
|
17 |
*/
|
18 |
-
private $plugin_data =
|
19 |
|
20 |
/**
|
21 |
* Class instance.
|
@@ -51,7 +51,7 @@ class Tribe__Extension_Loader {
|
|
51 |
* @return array Prefixes
|
52 |
*/
|
53 |
public static function get_extension_file_prefixes() {
|
54 |
-
$prefixes =
|
55 |
|
56 |
/**
|
57 |
* Filter which plugin folder prefixes are considered tribe extensions.
|
@@ -97,17 +97,13 @@ class Tribe__Extension_Loader {
|
|
97 |
|
98 |
// Class instantiation.
|
99 |
if ( class_exists( $p_data['ExtensionClass'] ) ) {
|
100 |
-
$extension_args =
|
101 |
'file' => $plugin_file,
|
102 |
'plugin_data' => $p_data,
|
103 |
-
|
104 |
|
105 |
// Instantiates extension instance.
|
106 |
-
$extension = call_user_func(
|
107 |
-
[ $p_data['ExtensionClass'], 'instance' ],
|
108 |
-
$p_data['ExtensionClass'],
|
109 |
-
$extension_args
|
110 |
-
);
|
111 |
|
112 |
if ( null !== $extension ) {
|
113 |
$success = true;
|
@@ -145,7 +141,7 @@ class Tribe__Extension_Loader {
|
|
145 |
*
|
146 |
* @return void
|
147 |
*/
|
148 |
-
|
149 |
_doing_it_wrong(
|
150 |
__FUNCTION__,
|
151 |
'Can not use this method on singletons.',
|
@@ -158,7 +154,7 @@ class Tribe__Extension_Loader {
|
|
158 |
*
|
159 |
* @return void
|
160 |
*/
|
161 |
-
|
162 |
_doing_it_wrong(
|
163 |
__FUNCTION__,
|
164 |
'Can not use this method on singletons.',
|
15 |
* @param array $plugin_basename Plugin header key/value pairs.
|
16 |
* }
|
17 |
*/
|
18 |
+
private $plugin_data = array();
|
19 |
|
20 |
/**
|
21 |
* Class instance.
|
51 |
* @return array Prefixes
|
52 |
*/
|
53 |
public static function get_extension_file_prefixes() {
|
54 |
+
$prefixes = array( 'tribe-ext-' );
|
55 |
|
56 |
/**
|
57 |
* Filter which plugin folder prefixes are considered tribe extensions.
|
97 |
|
98 |
// Class instantiation.
|
99 |
if ( class_exists( $p_data['ExtensionClass'] ) ) {
|
100 |
+
$extension_args = array(
|
101 |
'file' => $plugin_file,
|
102 |
'plugin_data' => $p_data,
|
103 |
+
);
|
104 |
|
105 |
// Instantiates extension instance.
|
106 |
+
$extension = call_user_func( array( $p_data['ExtensionClass'], 'instance' ), $p_data['ExtensionClass'], $extension_args );
|
|
|
|
|
|
|
|
|
107 |
|
108 |
if ( null !== $extension ) {
|
109 |
$success = true;
|
141 |
*
|
142 |
* @return void
|
143 |
*/
|
144 |
+
private function __clone() {
|
145 |
_doing_it_wrong(
|
146 |
__FUNCTION__,
|
147 |
'Can not use this method on singletons.',
|
154 |
*
|
155 |
* @return void
|
156 |
*/
|
157 |
+
private function __wakeup() {
|
158 |
_doing_it_wrong(
|
159 |
__FUNCTION__,
|
160 |
'Can not use this method on singletons.',
|
common/src/Tribe/Field.php
CHANGED
@@ -68,11 +68,11 @@ if ( ! class_exists( 'Tribe__Field' ) ) {
|
|
68 |
public function __construct( $id, $field, $value = null ) {
|
69 |
|
70 |
// setup the defaults
|
71 |
-
$this->defaults =
|
72 |
'type' => 'html',
|
73 |
'name' => $id,
|
74 |
-
'fieldset_attributes' =>
|
75 |
-
'attributes' =>
|
76 |
'class' => null,
|
77 |
'label' => null,
|
78 |
'label_attributes' => null,
|
@@ -90,10 +90,10 @@ if ( ! class_exists( 'Tribe__Field' ) ) {
|
|
90 |
'clear_after' => true,
|
91 |
'tooltip_first' => false,
|
92 |
'allow_clear' => false,
|
93 |
-
|
94 |
|
95 |
// a list of valid field types, to prevent screwy behavior
|
96 |
-
$this->valid_field_types =
|
97 |
'heading',
|
98 |
'html',
|
99 |
'text',
|
@@ -107,10 +107,9 @@ if ( ! class_exists( 'Tribe__Field' ) ) {
|
|
107 |
'dropdown_select2', // Deprecated use `dropdown`
|
108 |
'dropdown_chosen', // Deprecated use `dropdown`
|
109 |
'license_key',
|
110 |
-
'number',
|
111 |
'wrapped_html',
|
112 |
'email',
|
113 |
-
|
114 |
|
115 |
$this->valid_field_types = apply_filters( 'tribe_valid_field_types', $this->valid_field_types );
|
116 |
|
@@ -124,55 +123,55 @@ if ( ! class_exists( 'Tribe__Field' ) ) {
|
|
124 |
$placeholder = esc_attr( $args['placeholder'] );
|
125 |
$class = $this->sanitize_class_attribute( $args['class'] );
|
126 |
$label = wp_kses(
|
127 |
-
$args['label'],
|
128 |
-
'a' =>
|
129 |
-
'br' =>
|
130 |
-
'em' =>
|
131 |
-
'strong' =>
|
132 |
-
'b' =>
|
133 |
-
'i' =>
|
134 |
-
'u' =>
|
135 |
-
'img' =>
|
136 |
-
'title' =>
|
137 |
-
'src' =>
|
138 |
-
'alt' =>
|
139 |
-
|
140 |
-
'span' =>
|
141 |
-
|
142 |
);
|
143 |
$label_attributes = $args['label_attributes'];
|
144 |
$tooltip = wp_kses(
|
145 |
-
$args['tooltip'],
|
146 |
-
'a' =>
|
147 |
-
'br' =>
|
148 |
-
'em' =>
|
149 |
-
'strong' =>
|
150 |
-
'b' =>
|
151 |
-
'i' =>
|
152 |
-
'u' =>
|
153 |
-
'img' =>
|
154 |
-
'title' =>
|
155 |
-
'src' =>
|
156 |
-
'alt' =>
|
157 |
-
|
158 |
-
'code' =>
|
159 |
-
'span' =>
|
160 |
-
|
161 |
);
|
162 |
-
$fieldset_attributes =
|
163 |
if ( is_array( $args['fieldset_attributes'] ) ) {
|
164 |
foreach ( $args['fieldset_attributes'] as $key => $val ) {
|
165 |
$fieldset_attributes[ $key ] = esc_attr( $val );
|
166 |
}
|
167 |
}
|
168 |
-
$attributes =
|
169 |
if ( is_array( $args['attributes'] ) ) {
|
170 |
foreach ( $args['attributes'] as $key => $val ) {
|
171 |
$attributes[ $key ] = esc_attr( $val );
|
172 |
}
|
173 |
}
|
174 |
if ( is_array( $args['options'] ) ) {
|
175 |
-
$options =
|
176 |
foreach ( $args['options'] as $key => $val ) {
|
177 |
$options[ $key ] = $val;
|
178 |
}
|
@@ -222,7 +221,7 @@ if ( ! class_exists( 'Tribe__Field' ) ) {
|
|
222 |
} elseif ( in_array( $this->type, $this->valid_field_types ) ) {
|
223 |
|
224 |
// the specified type exists, run the appropriate method
|
225 |
-
$field = call_user_func(
|
226 |
|
227 |
// filter the output
|
228 |
$field = apply_filters( 'tribe_field_output_' . $this->type, $field, $this->id, $this );
|
@@ -276,8 +275,8 @@ if ( ! class_exists( 'Tribe__Field' ) ) {
|
|
276 |
if ( $this->label ) {
|
277 |
if ( isset( $this->label_attributes ) ) {
|
278 |
$this->label_attributes['class'] = isset( $this->label_attributes['class'] ) ?
|
279 |
-
implode( ' ', array_merge(
|
280 |
-
|
281 |
$this->label_attributes = $this->concat_attributes( $this->label_attributes );
|
282 |
}
|
283 |
$return = sprintf( '<legend class="tribe-field-label" %s>%s</legend>', $this->label_attributes, $this->label );
|
@@ -460,7 +459,6 @@ if ( ! class_exists( 'Tribe__Field' ) ) {
|
|
460 |
$field .= $this->do_field_name();
|
461 |
$field .= $this->do_field_value();
|
462 |
$field .= $this->do_field_placeholder();
|
463 |
-
$field .= $this->do_field_attributes();
|
464 |
$field .= '/>';
|
465 |
$field .= $this->do_screen_reader_label();
|
466 |
$field .= $this->do_field_div_end();
|
@@ -480,7 +478,6 @@ if ( ! class_exists( 'Tribe__Field' ) ) {
|
|
480 |
$field .= $this->do_field_div_start();
|
481 |
$field .= '<textarea';
|
482 |
$field .= $this->do_field_name();
|
483 |
-
$field .= $this->do_field_attributes();
|
484 |
$field .= '>';
|
485 |
$field .= esc_html( stripslashes( $this->value ) );
|
486 |
$field .= '</textarea>';
|
@@ -497,10 +494,10 @@ if ( ! class_exists( 'Tribe__Field' ) ) {
|
|
497 |
* @return string the field
|
498 |
*/
|
499 |
public function wysiwyg() {
|
500 |
-
$settings =
|
501 |
'teeny' => true,
|
502 |
'wpautop' => true,
|
503 |
-
|
504 |
ob_start();
|
505 |
wp_editor( html_entity_decode( ( $this->value ) ), $this->name, $settings );
|
506 |
$editor = ob_get_clean();
|
@@ -561,9 +558,9 @@ if ( ! class_exists( 'Tribe__Field' ) ) {
|
|
561 |
|
562 |
if ( ! is_array( $this->value ) ) {
|
563 |
if ( ! empty( $this->value ) ) {
|
564 |
-
$this->value =
|
565 |
} else {
|
566 |
-
$this->value =
|
567 |
}
|
568 |
}
|
569 |
|
@@ -623,7 +620,6 @@ if ( ! class_exists( 'Tribe__Field' ) ) {
|
|
623 |
if ( empty( $this->allow_clear ) ) {
|
624 |
$field .= " data-prevent-clear='true'";
|
625 |
}
|
626 |
-
$field .= $this->do_field_attributes();
|
627 |
$field .= '>';
|
628 |
foreach ( $this->options as $option_id => $title ) {
|
629 |
$field .= '<option value="' . esc_attr( $option_id ) . '"';
|
@@ -776,11 +772,11 @@ if ( ! class_exists( 'Tribe__Field' ) ) {
|
|
776 |
}
|
777 |
|
778 |
/**
|
779 |
-
*
|
780 |
*
|
781 |
* Example usage:
|
782 |
*
|
783 |
-
* $attrs =
|
784 |
* printf ( '<p %s>%s</p>', tribe_concat_attributes( $attrs ), 'bar' );
|
785 |
*
|
786 |
* // <p> class="one two" style="color:red;">bar</p>
|
@@ -791,12 +787,12 @@ if ( ! class_exists( 'Tribe__Field' ) ) {
|
|
791 |
*
|
792 |
* @return string The concatenated attributes.
|
793 |
*/
|
794 |
-
protected function concat_attributes( array $attributes =
|
795 |
if ( empty( $attributes ) ) {
|
796 |
return '';
|
797 |
}
|
798 |
|
799 |
-
$concat =
|
800 |
foreach ( $attributes as $attribute => $value ) {
|
801 |
if ( is_array( $value ) ) {
|
802 |
$value = implode( ' ', $value );
|
@@ -821,7 +817,7 @@ if ( ! class_exists( 'Tribe__Field' ) ) {
|
|
821 |
}
|
822 |
|
823 |
/**
|
824 |
-
* Sanitizes a space-separated or
|
825 |
*
|
826 |
* @since 4.7.7
|
827 |
*
|
68 |
public function __construct( $id, $field, $value = null ) {
|
69 |
|
70 |
// setup the defaults
|
71 |
+
$this->defaults = array(
|
72 |
'type' => 'html',
|
73 |
'name' => $id,
|
74 |
+
'fieldset_attributes' => array(),
|
75 |
+
'attributes' => array(),
|
76 |
'class' => null,
|
77 |
'label' => null,
|
78 |
'label_attributes' => null,
|
90 |
'clear_after' => true,
|
91 |
'tooltip_first' => false,
|
92 |
'allow_clear' => false,
|
93 |
+
);
|
94 |
|
95 |
// a list of valid field types, to prevent screwy behavior
|
96 |
+
$this->valid_field_types = array(
|
97 |
'heading',
|
98 |
'html',
|
99 |
'text',
|
107 |
'dropdown_select2', // Deprecated use `dropdown`
|
108 |
'dropdown_chosen', // Deprecated use `dropdown`
|
109 |
'license_key',
|
|
|
110 |
'wrapped_html',
|
111 |
'email',
|
112 |
+
);
|
113 |
|
114 |
$this->valid_field_types = apply_filters( 'tribe_valid_field_types', $this->valid_field_types );
|
115 |
|
123 |
$placeholder = esc_attr( $args['placeholder'] );
|
124 |
$class = $this->sanitize_class_attribute( $args['class'] );
|
125 |
$label = wp_kses(
|
126 |
+
$args['label'], array(
|
127 |
+
'a' => array( 'href' => array(), 'title' => array() ),
|
128 |
+
'br' => array(),
|
129 |
+
'em' => array(),
|
130 |
+
'strong' => array(),
|
131 |
+
'b' => array(),
|
132 |
+
'i' => array(),
|
133 |
+
'u' => array(),
|
134 |
+
'img' => array(
|
135 |
+
'title' => array(),
|
136 |
+
'src' => array(),
|
137 |
+
'alt' => array(),
|
138 |
+
),
|
139 |
+
'span' => array( 'class' => array() ),
|
140 |
+
)
|
141 |
);
|
142 |
$label_attributes = $args['label_attributes'];
|
143 |
$tooltip = wp_kses(
|
144 |
+
$args['tooltip'], array(
|
145 |
+
'a' => array( 'href' => array(), 'title' => array(), 'target' => array() ),
|
146 |
+
'br' => array(),
|
147 |
+
'em' => array(),
|
148 |
+
'strong' => array(),
|
149 |
+
'b' => array(),
|
150 |
+
'i' => array(),
|
151 |
+
'u' => array(),
|
152 |
+
'img' => array(
|
153 |
+
'title' => array(),
|
154 |
+
'src' => array(),
|
155 |
+
'alt' => array(),
|
156 |
+
),
|
157 |
+
'code' => array( 'span' => array() ),
|
158 |
+
'span' => array(),
|
159 |
+
)
|
160 |
);
|
161 |
+
$fieldset_attributes = array();
|
162 |
if ( is_array( $args['fieldset_attributes'] ) ) {
|
163 |
foreach ( $args['fieldset_attributes'] as $key => $val ) {
|
164 |
$fieldset_attributes[ $key ] = esc_attr( $val );
|
165 |
}
|
166 |
}
|
167 |
+
$attributes = array();
|
168 |
if ( is_array( $args['attributes'] ) ) {
|
169 |
foreach ( $args['attributes'] as $key => $val ) {
|
170 |
$attributes[ $key ] = esc_attr( $val );
|
171 |
}
|
172 |
}
|
173 |
if ( is_array( $args['options'] ) ) {
|
174 |
+
$options = array();
|
175 |
foreach ( $args['options'] as $key => $val ) {
|
176 |
$options[ $key ] = $val;
|
177 |
}
|
221 |
} elseif ( in_array( $this->type, $this->valid_field_types ) ) {
|
222 |
|
223 |
// the specified type exists, run the appropriate method
|
224 |
+
$field = call_user_func( array( $this, $this->type ) );
|
225 |
|
226 |
// filter the output
|
227 |
$field = apply_filters( 'tribe_field_output_' . $this->type, $field, $this->id, $this );
|
275 |
if ( $this->label ) {
|
276 |
if ( isset( $this->label_attributes ) ) {
|
277 |
$this->label_attributes['class'] = isset( $this->label_attributes['class'] ) ?
|
278 |
+
implode( ' ', array_merge( array( 'tribe-field-label' ), $this->label_attributes['class'] ) ) :
|
279 |
+
array( 'tribe-field-label' );
|
280 |
$this->label_attributes = $this->concat_attributes( $this->label_attributes );
|
281 |
}
|
282 |
$return = sprintf( '<legend class="tribe-field-label" %s>%s</legend>', $this->label_attributes, $this->label );
|
459 |
$field .= $this->do_field_name();
|
460 |
$field .= $this->do_field_value();
|
461 |
$field .= $this->do_field_placeholder();
|
|
|
462 |
$field .= '/>';
|
463 |
$field .= $this->do_screen_reader_label();
|
464 |
$field .= $this->do_field_div_end();
|
478 |
$field .= $this->do_field_div_start();
|
479 |
$field .= '<textarea';
|
480 |
$field .= $this->do_field_name();
|
|
|
481 |
$field .= '>';
|
482 |
$field .= esc_html( stripslashes( $this->value ) );
|
483 |
$field .= '</textarea>';
|
494 |
* @return string the field
|
495 |
*/
|
496 |
public function wysiwyg() {
|
497 |
+
$settings = array(
|
498 |
'teeny' => true,
|
499 |
'wpautop' => true,
|
500 |
+
);
|
501 |
ob_start();
|
502 |
wp_editor( html_entity_decode( ( $this->value ) ), $this->name, $settings );
|
503 |
$editor = ob_get_clean();
|
558 |
|
559 |
if ( ! is_array( $this->value ) ) {
|
560 |
if ( ! empty( $this->value ) ) {
|
561 |
+
$this->value = array( $this->value );
|
562 |
} else {
|
563 |
+
$this->value = array();
|
564 |
}
|
565 |
}
|
566 |
|
620 |
if ( empty( $this->allow_clear ) ) {
|
621 |
$field .= " data-prevent-clear='true'";
|
622 |
}
|
|
|
623 |
$field .= '>';
|
624 |
foreach ( $this->options as $option_id => $title ) {
|
625 |
$field .= '<option value="' . esc_attr( $option_id ) . '"';
|
772 |
}
|
773 |
|
774 |
/**
|
775 |
+
* Concatenatates an array of attributes to use in HTML tags.
|
776 |
*
|
777 |
* Example usage:
|
778 |
*
|
779 |
+
* $attrs = array( 'class' => array('one', 'two'), 'style' => 'color:red;' );
|
780 |
* printf ( '<p %s>%s</p>', tribe_concat_attributes( $attrs ), 'bar' );
|
781 |
*
|
782 |
* // <p> class="one two" style="color:red;">bar</p>
|
787 |
*
|
788 |
* @return string The concatenated attributes.
|
789 |
*/
|
790 |
+
protected function concat_attributes( array $attributes = array() ) {
|
791 |
if ( empty( $attributes ) ) {
|
792 |
return '';
|
793 |
}
|
794 |
|
795 |
+
$concat = array();
|
796 |
foreach ( $attributes as $attribute => $value ) {
|
797 |
if ( is_array( $value ) ) {
|
798 |
$value = implode( ' ', $value );
|
817 |
}
|
818 |
|
819 |
/**
|
820 |
+
* Sanitizes a space-separated or arrray of classes.
|
821 |
*
|
822 |
* @since 4.7.7
|
823 |
*
|
common/src/Tribe/Image/Uploader.php
CHANGED
@@ -153,14 +153,11 @@ class Tribe__Image__Uploader {
|
|
153 |
}
|
154 |
|
155 |
// Upload file into WP and leave WP handle the resize and such.
|
156 |
-
$attachment_id = media_handle_sideload(
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
],
|
162 |
-
0
|
163 |
-
);
|
164 |
|
165 |
// Remove the temporary file as is no longer required at this point.
|
166 |
if ( ! $is_local && file_exists( $file ) ) {
|
153 |
}
|
154 |
|
155 |
// Upload file into WP and leave WP handle the resize and such.
|
156 |
+
$attachment_id = media_handle_sideload( [
|
157 |
+
'name' => $this->create_file_name( $file ),
|
158 |
+
'tmp_name' => $file,
|
159 |
+
'post_mime_type' => 'image',
|
160 |
+
] );
|
|
|
|
|
|
|
161 |
|
162 |
// Remove the temporary file as is no longer required at this point.
|
163 |
if ( ! $is_local && file_exists( $file ) ) {
|
common/src/Tribe/JSON_LD/Abstract.php
CHANGED
@@ -19,14 +19,14 @@ abstract class Tribe__JSON_LD__Abstract {
|
|
19 |
*
|
20 |
* @var array
|
21 |
*/
|
22 |
-
private static $instances =
|
23 |
|
24 |
/**
|
25 |
* Holder for the Already fetched Posts
|
26 |
*
|
27 |
* @var array
|
28 |
*/
|
29 |
-
protected static $posts =
|
30 |
|
31 |
/**
|
32 |
* Holder for a post when it has multiple types
|
@@ -35,7 +35,7 @@ abstract class Tribe__JSON_LD__Abstract {
|
|
35 |
*
|
36 |
* @var array
|
37 |
*/
|
38 |
-
protected static $types =
|
39 |
|
40 |
/**
|
41 |
* The class singleton constructor.
|
@@ -72,24 +72,24 @@ abstract class Tribe__JSON_LD__Abstract {
|
|
72 |
* be generated, the `$post` parameter is not a valid post ID or object or the data
|
73 |
* for the post has been fetched already.
|
74 |
*/
|
75 |
-
public function get_data( $post = null, $args =
|
76 |
$post_id = Tribe__Main::post_id_helper( $post );
|
77 |
if ( ! $post_id ) {
|
78 |
-
return
|
79 |
}
|
80 |
|
81 |
// This prevents a JSON_LD from existing twice one the same page
|
82 |
if ( $this->exists( $post_id ) && $this->type_exists( $post_id, $this->type ) ) {
|
83 |
-
return
|
84 |
}
|
85 |
|
86 |
$post = get_post( $post_id );
|
87 |
|
88 |
if ( empty( $post->ID ) ) {
|
89 |
-
return
|
90 |
}
|
91 |
|
92 |
-
$data = (object)
|
93 |
|
94 |
// We may need to prevent the context to be triggered
|
95 |
if ( ! isset( $args['context'] ) || false !== $args['context'] ) {
|
@@ -112,7 +112,7 @@ abstract class Tribe__JSON_LD__Abstract {
|
|
112 |
|
113 |
// Index by ID: this will allow filter code to identify the actual event being referred to
|
114 |
// without injecting an additional property
|
115 |
-
return
|
116 |
}
|
117 |
|
118 |
/**
|
@@ -149,7 +149,7 @@ abstract class Tribe__JSON_LD__Abstract {
|
|
149 |
*
|
150 |
* @return string
|
151 |
*/
|
152 |
-
public function get_markup( $post = null, $args =
|
153 |
$data = $this->get_data( $post, $args );
|
154 |
$type = strtolower( esc_attr( $this->type ) );
|
155 |
$this->set_type( $post, $type );
|
@@ -182,7 +182,7 @@ abstract class Tribe__JSON_LD__Abstract {
|
|
182 |
return ! empty( $html ) ? implode( "\r\n", $html ) : '';
|
183 |
}
|
184 |
|
185 |
-
public function markup( $post = null, $args =
|
186 |
$html = $this->get_markup( $post, $args );
|
187 |
|
188 |
/**
|
@@ -296,7 +296,7 @@ abstract class Tribe__JSON_LD__Abstract {
|
|
296 |
}
|
297 |
|
298 |
if ( empty( self::$types[ $id ] ) ) {
|
299 |
-
self::$types[ $id ] =
|
300 |
} else {
|
301 |
self::$types[ $id ][] = $this->type;
|
302 |
}
|
@@ -343,8 +343,8 @@ abstract class Tribe__JSON_LD__Abstract {
|
|
343 |
* Added for testing purposes.
|
344 |
*/
|
345 |
public static function unregister_all() {
|
346 |
-
self::$posts =
|
347 |
-
self::$types =
|
348 |
}
|
349 |
|
350 |
/**
|
19 |
*
|
20 |
* @var array
|
21 |
*/
|
22 |
+
private static $instances = array();
|
23 |
|
24 |
/**
|
25 |
* Holder for the Already fetched Posts
|
26 |
*
|
27 |
* @var array
|
28 |
*/
|
29 |
+
protected static $posts = array();
|
30 |
|
31 |
/**
|
32 |
* Holder for a post when it has multiple types
|
35 |
*
|
36 |
* @var array
|
37 |
*/
|
38 |
+
protected static $types = array();
|
39 |
|
40 |
/**
|
41 |
* The class singleton constructor.
|
72 |
* be generated, the `$post` parameter is not a valid post ID or object or the data
|
73 |
* for the post has been fetched already.
|
74 |
*/
|
75 |
+
public function get_data( $post = null, $args = array() ) {
|
76 |
$post_id = Tribe__Main::post_id_helper( $post );
|
77 |
if ( ! $post_id ) {
|
78 |
+
return array();
|
79 |
}
|
80 |
|
81 |
// This prevents a JSON_LD from existing twice one the same page
|
82 |
if ( $this->exists( $post_id ) && $this->type_exists( $post_id, $this->type ) ) {
|
83 |
+
return array();
|
84 |
}
|
85 |
|
86 |
$post = get_post( $post_id );
|
87 |
|
88 |
if ( empty( $post->ID ) ) {
|
89 |
+
return array();
|
90 |
}
|
91 |
|
92 |
+
$data = (object) array();
|
93 |
|
94 |
// We may need to prevent the context to be triggered
|
95 |
if ( ! isset( $args['context'] ) || false !== $args['context'] ) {
|
112 |
|
113 |
// Index by ID: this will allow filter code to identify the actual event being referred to
|
114 |
// without injecting an additional property
|
115 |
+
return array( $post->ID => $data );
|
116 |
}
|
117 |
|
118 |
/**
|
149 |
*
|
150 |
* @return string
|
151 |
*/
|
152 |
+
public function get_markup( $post = null, $args = array() ) {
|
153 |
$data = $this->get_data( $post, $args );
|
154 |
$type = strtolower( esc_attr( $this->type ) );
|
155 |
$this->set_type( $post, $type );
|
182 |
return ! empty( $html ) ? implode( "\r\n", $html ) : '';
|
183 |
}
|
184 |
|
185 |
+
public function markup( $post = null, $args = array() ) {
|
186 |
$html = $this->get_markup( $post, $args );
|
187 |
|
188 |
/**
|
296 |
}
|
297 |
|
298 |
if ( empty( self::$types[ $id ] ) ) {
|
299 |
+
self::$types[ $id ] = array( $this->type );
|
300 |
} else {
|
301 |
self::$types[ $id ][] = $this->type;
|
302 |
}
|
343 |
* Added for testing purposes.
|
344 |
*/
|
345 |
public static function unregister_all() {
|
346 |
+
self::$posts = array();
|
347 |
+
self::$types = array();
|
348 |
}
|
349 |
|
350 |
/**
|
common/src/Tribe/Languages/Locations.php
CHANGED
@@ -16,38 +16,14 @@ class Tribe__Languages__Locations {
|
|
16 |
*
|
17 |
* Adds array to object cache to speed up subsequent retrievals.
|
18 |
*
|
19 |
-
* @since 4.13.0 add $escape param.
|
20 |
-
*
|
21 |
-
* @param bool $escape Weather to escape for translations or not.
|
22 |
-
*
|
23 |
* @return array {
|
24 |
* List of countries
|
25 |
*
|
26 |
* @type string $country_code Country name.
|
27 |
* }
|
28 |
*/
|
29 |
-
public function get_countries(
|
30 |
-
|
31 |
-
* @var Tribe__Cache $cache
|
32 |
-
*/
|
33 |
-
$cache = tribe( 'cache' );
|
34 |
-
$cache_key = 'tribe_country_list' . ( $escape ? '-escaped' : '' );
|
35 |
-
$countries = $cache->get( $cache_key , '', null );
|
36 |
-
|
37 |
-
if ( null === $countries ) {
|
38 |
-
$countries = $this->build_country_array();
|
39 |
-
|
40 |
-
if ( $escape ) {
|
41 |
-
$countries = array_map( static function( $country ) {
|
42 |
-
return html_entity_decode( $country, ENT_QUOTES );
|
43 |
-
}, $countries );
|
44 |
-
}
|
45 |
-
|
46 |
-
// Actually set the cache in case it's not in place.
|
47 |
-
$cache->set( $cache_key, $countries );
|
48 |
-
}
|
49 |
-
|
50 |
-
return $countries;
|
51 |
}
|
52 |
|
53 |
/**
|
@@ -62,7 +38,7 @@ class Tribe__Languages__Locations {
|
|
62 |
* }
|
63 |
*/
|
64 |
public function get_us_states() {
|
65 |
-
return tribe( 'cache' )->get( 'tribe_us_states_list', '',
|
66 |
}
|
67 |
|
68 |
/**
|
@@ -75,7 +51,7 @@ class Tribe__Languages__Locations {
|
|
75 |
* }
|
76 |
*/
|
77 |
public function build_country_array() {
|
78 |
-
$countries =
|
79 |
'US' => esc_html__( 'United States', 'tribe-common' ),
|
80 |
'AF' => esc_html__( 'Afghanistan', 'tribe-common' ),
|
81 |
'AX' => esc_html__( 'Åland Islands', 'tribe-common' ),
|
@@ -319,7 +295,7 @@ class Tribe__Languages__Locations {
|
|
319 |
'YE' => esc_html__( 'Yemen', 'tribe-common' ),
|
320 |
'ZM' => esc_html__( 'Zambia', 'tribe-common' ),
|
321 |
'ZW' => esc_html__( 'Zimbabwe', 'tribe-common' ),
|
322 |
-
|
323 |
|
324 |
// Perform a natural sort, ensures the countries are in the expected order even once translated.
|
325 |
natsort( $countries );
|
@@ -344,7 +320,7 @@ class Tribe__Languages__Locations {
|
|
344 |
* }
|
345 |
*/
|
346 |
public function build_us_states_array() {
|
347 |
-
$states =
|
348 |
'AL' => esc_html__( 'Alabama', 'tribe-common' ),
|
349 |
'AK' => esc_html__( 'Alaska', 'tribe-common' ),
|
350 |
'AZ' => esc_html__( 'Arizona', 'tribe-common' ),
|
@@ -355,7 +331,7 @@ class Tribe__Languages__Locations {
|
|
355 |
'DE' => esc_html__( 'Delaware', 'tribe-common' ),
|
356 |
'DC' => esc_html__( 'District of Columbia', 'tribe-common' ),
|
357 |
'FL' => esc_html__( 'Florida', 'tribe-common' ),
|
358 |
-
'GA' => esc_html_x( 'Georgia', 'The US state Georgia',
|
359 |
'HI' => esc_html__( 'Hawaii', 'tribe-common' ),
|
360 |
'ID' => esc_html__( 'Idaho', 'tribe-common' ),
|
361 |
'IL' => esc_html__( 'Illinois', 'tribe-common' ),
|
@@ -396,7 +372,7 @@ class Tribe__Languages__Locations {
|
|
396 |
'WV' => esc_html__( 'West Virginia', 'tribe-common' ),
|
397 |
'WI' => esc_html__( 'Wisconsin', 'tribe-common' ),
|
398 |
'WY' => esc_html__( 'Wyoming', 'tribe-common' ),
|
399 |
-
|
400 |
|
401 |
// Perform a natural sort, ensures the states are in the expected order even once translated.
|
402 |
natsort( $states );
|
16 |
*
|
17 |
* Adds array to object cache to speed up subsequent retrievals.
|
18 |
*
|
|
|
|
|
|
|
|
|
19 |
* @return array {
|
20 |
* List of countries
|
21 |
*
|
22 |
* @type string $country_code Country name.
|
23 |
* }
|
24 |
*/
|
25 |
+
public function get_countries() {
|
26 |
+
return tribe( 'cache' )->get( 'tribe_country_list', '', array( $this, 'build_country_array' ) );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
27 |
}
|
28 |
|
29 |
/**
|
38 |
* }
|
39 |
*/
|
40 |
public function get_us_states() {
|
41 |
+
return tribe( 'cache' )->get( 'tribe_us_states_list', '', array( $this, 'build_us_states_array' ) );
|
42 |
}
|
43 |
|
44 |
/**
|
51 |
* }
|
52 |
*/
|
53 |
public function build_country_array() {
|
54 |
+
$countries = array(
|
55 |
'US' => esc_html__( 'United States', 'tribe-common' ),
|
56 |
'AF' => esc_html__( 'Afghanistan', 'tribe-common' ),
|
57 |
'AX' => esc_html__( 'Åland Islands', 'tribe-common' ),
|
295 |
'YE' => esc_html__( 'Yemen', 'tribe-common' ),
|
296 |
'ZM' => esc_html__( 'Zambia', 'tribe-common' ),
|
297 |
'ZW' => esc_html__( 'Zimbabwe', 'tribe-common' ),
|
298 |
+
);
|
299 |
|
300 |
// Perform a natural sort, ensures the countries are in the expected order even once translated.
|
301 |
natsort( $countries );
|
320 |
* }
|
321 |
*/
|
322 |
public function build_us_states_array() {
|
323 |
+
$states = array(
|
324 |
'AL' => esc_html__( 'Alabama', 'tribe-common' ),
|
325 |
'AK' => esc_html__( 'Alaska', 'tribe-common' ),
|
326 |
'AZ' => esc_html__( 'Arizona', 'tribe-common' ),
|
331 |
'DE' => esc_html__( 'Delaware', 'tribe-common' ),
|
332 |
'DC' => esc_html__( 'District of Columbia', 'tribe-common' ),
|
333 |
'FL' => esc_html__( 'Florida', 'tribe-common' ),
|
334 |
+
'GA' => esc_html_x( 'Georgia', 'The US state Georgia','tribe-common' ),
|
335 |
'HI' => esc_html__( 'Hawaii', 'tribe-common' ),
|
336 |
'ID' => esc_html__( 'Idaho', 'tribe-common' ),
|
337 |
'IL' => esc_html__( 'Illinois', 'tribe-common' ),
|
372 |
'WV' => esc_html__( 'West Virginia', 'tribe-common' ),
|
373 |
'WI' => esc_html__( 'Wisconsin', 'tribe-common' ),
|
374 |
'WY' => esc_html__( 'Wyoming', 'tribe-common' ),
|
375 |
+
);
|
376 |
|
377 |
// Perform a natural sort, ensures the states are in the expected order even once translated.
|
378 |
natsort( $states );
|
common/src/Tribe/Languages/Recaptcha_Map.php
CHANGED
@@ -16,7 +16,7 @@ class Tribe__Languages__Recaptcha_Map implements Tribe__Languages__Map_Interface
|
|
16 |
* e.g. [ 'pt-BR' => 'Portuguese (Brazil)' ]
|
17 |
*/
|
18 |
public function get_supported_languages() {
|
19 |
-
return
|
20 |
'ar' => 'Arabic',
|
21 |
'af' => 'Afrikaans',
|
22 |
'am' => 'Amharic',
|
@@ -87,7 +87,7 @@ class Tribe__Languages__Recaptcha_Map implements Tribe__Languages__Map_Interface
|
|
87 |
'ur' => 'Urdu',
|
88 |
'vi' => 'Vietnamese',
|
89 |
'zu' => 'Zulu',
|
90 |
-
|
91 |
}
|
92 |
|
93 |
/**
|
16 |
* e.g. [ 'pt-BR' => 'Portuguese (Brazil)' ]
|
17 |
*/
|
18 |
public function get_supported_languages() {
|
19 |
+
return array(
|
20 |
'ar' => 'Arabic',
|
21 |
'af' => 'Afrikaans',
|
22 |
'am' => 'Amharic',
|
87 |
'ur' => 'Urdu',
|
88 |
'vi' => 'Vietnamese',
|
89 |
'zu' => 'Zulu',
|
90 |
+
);
|
91 |
}
|
92 |
|
93 |
/**
|
common/src/Tribe/Log.php
CHANGED
@@ -36,7 +36,7 @@ class Tribe__Log {
|
|
36 |
*
|
37 |
* @var array
|
38 |
*/
|
39 |
-
protected $levels =
|
40 |
|
41 |
/**
|
42 |
* Alternative representation of the $levels property allowing quick look
|
@@ -44,14 +44,15 @@ class Tribe__Log {
|
|
44 |
*
|
45 |
* @var array
|
46 |
*/
|
47 |
-
protected $prioritized_levels =
|
48 |
|
49 |
/**
|
50 |
* Instantiated loggers, stored for re-use.
|
51 |
*
|
52 |
* @var array
|
53 |
*/
|
54 |
-
protected $loggers =
|
|
|
55 |
|
56 |
public function __construct() {
|
57 |
if ( is_admin() ) {
|
@@ -74,7 +75,7 @@ class Tribe__Log {
|
|
74 |
*/
|
75 |
protected function log_cleanup() {
|
76 |
$this->register_cleanup_task();
|
77 |
-
do_action( self::CLEANUP,
|
78 |
}
|
79 |
|
80 |
/**
|
@@ -162,7 +163,7 @@ class Tribe__Log {
|
|
162 |
$original_type = $type;
|
163 |
|
164 |
// some levels are really just debug information
|
165 |
-
$debug_types =
|
166 |
|
167 |
if ( in_array( $type, $debug_types ) ) {
|
168 |
$type = self::DEBUG;
|
@@ -218,10 +219,10 @@ class Tribe__Log {
|
|
218 |
* @return array
|
219 |
*/
|
220 |
public function get_logging_engines() {
|
221 |
-
$available_engines =
|
222 |
-
$bundled_engines
|
223 |
'Tribe__Log__File_Logger',
|
224 |
-
|
225 |
|
226 |
foreach ( $bundled_engines as $engine_class ) {
|
227 |
$engine = $this->get_engine( $engine_class );
|
@@ -383,12 +384,12 @@ class Tribe__Log {
|
|
383 |
*
|
384 |
* @param array $logging_levels
|
385 |
*/
|
386 |
-
$this->levels = (array) apply_filters( 'tribe_common_logging_levels',
|
387 |
-
|
388 |
-
|
389 |
-
|
390 |
-
|
391 |
-
|
392 |
}
|
393 |
|
394 |
return $this->levels;
|
36 |
*
|
37 |
* @var array
|
38 |
*/
|
39 |
+
protected $levels = array();
|
40 |
|
41 |
/**
|
42 |
* Alternative representation of the $levels property allowing quick look
|
44 |
*
|
45 |
* @var array
|
46 |
*/
|
47 |
+
protected $prioritized_levels = array();
|
48 |
|
49 |
/**
|
50 |
* Instantiated loggers, stored for re-use.
|
51 |
*
|
52 |
* @var array
|
53 |
*/
|
54 |
+
protected $loggers = array();
|
55 |
+
|
56 |
|
57 |
public function __construct() {
|
58 |
if ( is_admin() ) {
|
75 |
*/
|
76 |
protected function log_cleanup() {
|
77 |
$this->register_cleanup_task();
|
78 |
+
do_action( self::CLEANUP, array( $this, 'do_cleanup' ) );
|
79 |
}
|
80 |
|
81 |
/**
|
163 |
$original_type = $type;
|
164 |
|
165 |
// some levels are really just debug information
|
166 |
+
$debug_types = array( self::SUCCESS, self::COLORIZE );
|
167 |
|
168 |
if ( in_array( $type, $debug_types ) ) {
|
169 |
$type = self::DEBUG;
|
219 |
* @return array
|
220 |
*/
|
221 |
public function get_logging_engines() {
|
222 |
+
$available_engines = array();
|
223 |
+
$bundled_engines = array(
|
224 |
'Tribe__Log__File_Logger',
|
225 |
+
);
|
226 |
|
227 |
foreach ( $bundled_engines as $engine_class ) {
|
228 |
$engine = $this->get_engine( $engine_class );
|
384 |
*
|
385 |
* @param array $logging_levels
|
386 |
*/
|
387 |
+
$this->levels = (array) apply_filters( 'tribe_common_logging_levels', array(
|
388 |
+
array( self::DISABLE, __( 'Disabled', 'tribe-common' ) ),
|
389 |
+
array( self::ERROR, __( 'Only errors', 'tribe-common' ) ),
|
390 |
+
array( self::WARNING, __( 'Warnings and errors', 'tribe-common' ) ),
|
391 |
+
array( self::DEBUG, __( 'Full debug (all events)', 'tribe-common' ) ),
|
392 |
+
) );
|
393 |
}
|
394 |
|
395 |
return $this->levels;
|
common/src/Tribe/Log/Action_Logger.php
CHANGED
@@ -78,7 +78,7 @@ class Action_Logger implements \Tribe__Log__Logger {
|
|
78 |
*
|
79 |
* @since 4.9.16
|
80 |
*/
|
81 |
-
public function retrieve( $limit = 0, array $args =
|
82 |
return [
|
83 |
[
|
84 |
'message' => __(
|
78 |
*
|
79 |
* @since 4.9.16
|
80 |
*/
|
81 |
+
public function retrieve( $limit = 0, array $args = array() ) {
|
82 |
return [
|
83 |
[
|
84 |
'message' => __(
|
common/src/Tribe/Log/Admin.php
CHANGED
@@ -1,9 +1,9 @@
|
|
1 |
<?php
|
2 |
class Tribe__Log__Admin {
|
3 |
public function __construct() {
|
4 |
-
add_action( 'wp_ajax_tribe_logging_controls',
|
5 |
-
add_action( 'init',
|
6 |
-
add_action( 'plugins_loaded',
|
7 |
}
|
8 |
|
9 |
/**
|
@@ -29,11 +29,11 @@ class Tribe__Log__Admin {
|
|
29 |
* an appropriate response.
|
30 |
*/
|
31 |
public function listen() {
|
32 |
-
$fields = wp_parse_args( $_POST,
|
33 |
'check' => '',
|
34 |
'log-level' => '',
|
35 |
'log-engine' => '',
|
36 |
-
|
37 |
|
38 |
foreach ( $fields as &$single_field ) {
|
39 |
$single_field = sanitize_text_field( $single_field );
|
@@ -58,9 +58,9 @@ class Tribe__Log__Admin {
|
|
58 |
*/
|
59 |
do_action( 'tribe_common_updated_log_settings' );
|
60 |
|
61 |
-
$data =
|
62 |
'logs' => $this->get_available_logs(),
|
63 |
-
|
64 |
|
65 |
if ( ! empty( $fields['log-view'] ) ) {
|
66 |
$data['entries'] = $this->get_log_entries( $fields['log-view'] );
|
@@ -103,17 +103,17 @@ class Tribe__Log__Admin {
|
|
103 |
Tribe__Main::instance(),
|
104 |
'tribe-common-logging-controls',
|
105 |
'admin-log-controls.js',
|
106 |
-
|
107 |
'admin_enqueue_scripts',
|
108 |
-
|
109 |
-
'conditionals' =>
|
110 |
-
'localize'
|
111 |
'name' => 'tribe_logger_data',
|
112 |
-
'data' =>
|
113 |
'check' => wp_create_nonce( 'logging-controls' ),
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
);
|
118 |
}
|
119 |
|
@@ -130,7 +130,7 @@ class Tribe__Log__Admin {
|
|
130 |
}
|
131 |
|
132 |
if ( empty( $available_logs ) ) {
|
133 |
-
return
|
134 |
}
|
135 |
|
136 |
return $available_logs;
|
@@ -145,10 +145,10 @@ class Tribe__Log__Admin {
|
|
145 |
$available_engines = $this->log_manager()->get_logging_engines();
|
146 |
|
147 |
if ( empty( $available_engines ) ) {
|
148 |
-
return
|
149 |
}
|
150 |
|
151 |
-
$engine_list =
|
152 |
|
153 |
foreach ( $available_engines as $class_name => $engine ) {
|
154 |
/**
|
@@ -171,7 +171,7 @@ class Tribe__Log__Admin {
|
|
171 |
return (array) $logger->retrieve();
|
172 |
}
|
173 |
|
174 |
-
return
|
175 |
}
|
176 |
|
177 |
/**
|
@@ -182,7 +182,7 @@ class Tribe__Log__Admin {
|
|
182 |
* @return array
|
183 |
*/
|
184 |
protected function get_logging_levels() {
|
185 |
-
$levels
|
186 |
$available_levels = $this->log_manager()->get_logging_levels();
|
187 |
|
188 |
foreach ( $available_levels as $logging_level ) {
|
@@ -201,10 +201,10 @@ class Tribe__Log__Admin {
|
|
201 |
* @return string
|
202 |
*/
|
203 |
protected function get_log_url( $log = null ) {
|
204 |
-
$query =
|
205 |
'tribe-common-log' => 'download',
|
206 |
-
'check'
|
207 |
-
|
208 |
|
209 |
$log_download_url = add_query_arg( $query, get_admin_url( null, 'edit.php' ) );
|
210 |
|
1 |
<?php
|
2 |
class Tribe__Log__Admin {
|
3 |
public function __construct() {
|
4 |
+
add_action( 'wp_ajax_tribe_logging_controls', array( $this, 'listen' ) );
|
5 |
+
add_action( 'init', array( $this, 'serve_log_downloads' ) );
|
6 |
+
add_action( 'plugins_loaded', array( $this, 'register_script' ) );
|
7 |
}
|
8 |
|
9 |
/**
|
29 |
* an appropriate response.
|
30 |
*/
|
31 |
public function listen() {
|
32 |
+
$fields = wp_parse_args( $_POST, array(
|
33 |
'check' => '',
|
34 |
'log-level' => '',
|
35 |
'log-engine' => '',
|
36 |
+
) );
|
37 |
|
38 |
foreach ( $fields as &$single_field ) {
|
39 |
$single_field = sanitize_text_field( $single_field );
|
58 |
*/
|
59 |
do_action( 'tribe_common_updated_log_settings' );
|
60 |
|
61 |
+
$data = array(
|
62 |
'logs' => $this->get_available_logs(),
|
63 |
+
);
|
64 |
|
65 |
if ( ! empty( $fields['log-view'] ) ) {
|
66 |
$data['entries'] = $this->get_log_entries( $fields['log-view'] );
|
103 |
Tribe__Main::instance(),
|
104 |
'tribe-common-logging-controls',
|
105 |
'admin-log-controls.js',
|
106 |
+
array( 'jquery' ),
|
107 |
'admin_enqueue_scripts',
|
108 |
+
array(
|
109 |
+
'conditionals' => array( Tribe__Admin__Help_Page::instance(), 'is_current_page' ),
|
110 |
+
'localize' => (object) array(
|
111 |
'name' => 'tribe_logger_data',
|
112 |
+
'data' => array(
|
113 |
'check' => wp_create_nonce( 'logging-controls' ),
|
114 |
+
),
|
115 |
+
),
|
116 |
+
)
|
117 |
);
|
118 |
}
|
119 |
|
130 |
}
|
131 |
|
132 |
if ( empty( $available_logs ) ) {
|
133 |
+
return array( '' => _x( 'None currently available', 'log selector', 'tribe-common' ) );
|
134 |
}
|
135 |
|
136 |
return $available_logs;
|
145 |
$available_engines = $this->log_manager()->get_logging_engines();
|
146 |
|
147 |
if ( empty( $available_engines ) ) {
|
148 |
+
return array( '' => _x( 'None currently available', 'log engines', 'tribe-common' ) );
|
149 |
}
|
150 |
|
151 |
+
$engine_list = array();
|
152 |
|
153 |
foreach ( $available_engines as $class_name => $engine ) {
|
154 |
/**
|
171 |
return (array) $logger->retrieve();
|
172 |
}
|
173 |
|
174 |
+
return array();
|
175 |
}
|
176 |
|
177 |
/**
|
182 |
* @return array
|
183 |
*/
|
184 |
protected function get_logging_levels() {
|
185 |
+
$levels = array();
|
186 |
$available_levels = $this->log_manager()->get_logging_levels();
|
187 |
|
188 |
foreach ( $available_levels as $logging_level ) {
|
201 |
* @return string
|
202 |
*/
|
203 |
protected function get_log_url( $log = null ) {
|
204 |
+
$query = array(
|
205 |
'tribe-common-log' => 'download',
|
206 |
+
'check' => wp_create_nonce( 'download_log' ),
|
207 |
+
);
|
208 |
|
209 |
$log_download_url = add_query_arg( $query, get_admin_url( null, 'edit.php' ) );
|
210 |
|
common/src/Tribe/Log/Canonical_Formatter.php
CHANGED
@@ -11,37 +11,9 @@
|
|
11 |
namespace Tribe\Log;
|
12 |
|
13 |
|
14 |
-
use Monolog\Formatter\FormatterInterface;
|
15 |
use Monolog\Formatter\LineFormatter;
|
16 |
|
17 |
-
class Canonical_Formatter
|
18 |
-
/**
|
19 |
-
* @since 4.12.13
|
20 |
-
*
|
21 |
-
* @var string Our standard format for the Monolog LineFormatter.
|
22 |
-
*/
|
23 |
-
protected $standard_format = 'tribe.%channel%.%level_name%: %message%';
|
24 |
-
|
25 |
-
/**
|
26 |
-
* @since 4.12.13
|
27 |
-
*
|
28 |
-
* @var string Our standard format Monolog LineFormatter.
|
29 |
-
*/
|
30 |
-
protected $standard_formatter;
|
31 |
-
|
32 |
-
/**
|
33 |
-
* @since 4.12.13
|
34 |
-
*
|
35 |
-
* @var string Our context-aware format for the Monolog LineFormatter.
|
36 |
-
*/
|
37 |
-
protected $context_format = 'tribe-canonical-line channel=%channel% %message%';
|
38 |
-
|
39 |
-
/**
|
40 |
-
* @since 4.12.13
|
41 |
-
*
|
42 |
-
* @var string Our context-aware Monolog LineFormatter.
|
43 |
-
*/
|
44 |
-
protected $context_formatter;
|
45 |
|
46 |
/**
|
47 |
* Formats a log record.
|
@@ -57,59 +29,14 @@ class Canonical_Formatter implements FormatterInterface {
|
|
57 |
|
58 |
if ( $has_context ) {
|
59 |
$record['message'] = $this->format_record_message( $record );
|
60 |
-
|
|
|
61 |
} else {
|
62 |
// Fall-back on a standard format if the message does not have a context.
|
63 |
-
$
|
64 |
-
}
|
65 |
-
|
66 |
-
return $formatter->format( $record );
|
67 |
-
}
|
68 |
-
|
69 |
-
/**
|
70 |
-
* Gets a LineFormatter whose format is context aware.
|
71 |
-
*
|
72 |
-
* @since 4.12.13
|
73 |
-
*
|
74 |
-
* @return LineFormatter
|
75 |
-
*/
|
76 |
-
public function get_context_formatter() {
|
77 |
-
if ( empty( $this->context_formatter ) ) {
|
78 |
-
$this->context_formatter = new LineFormatter( $this->context_format );
|
79 |
-
}
|
80 |
-
|
81 |
-
return $this->context_formatter;
|
82 |
-
}
|
83 |
-
|
84 |
-
/**
|
85 |
-
* Gets a LineFormatter whose format is our standard logging format.
|
86 |
-
*
|
87 |
-
* @since 4.12.13
|
88 |
-
*
|
89 |
-
* @return LineFormatter
|
90 |
-
*/
|
91 |
-
public function get_standard_formatter() {
|
92 |
-
if ( empty( $this->standard_formatter ) ) {
|
93 |
-
$this->standard_formatter = new LineFormatter( $this->standard_format );
|
94 |
}
|
95 |
|
96 |
-
return $
|
97 |
-
}
|
98 |
-
|
99 |
-
/**
|
100 |
-
* Formats a set of log records.
|
101 |
-
*
|
102 |
-
* This simply hands off the work of formatting Batches to the LineFormatter.
|
103 |
-
*
|
104 |
-
* @since 4.12.13
|
105 |
-
*
|
106 |
-
* @param array $records A set of records to format
|
107 |
-
* @return mixed The formatted set of records
|
108 |
-
*/
|
109 |
-
public function formatBatch( array $records ) {
|
110 |
-
$line_formatter = new LineFormatter();
|
111 |
-
|
112 |
-
return $line_formatter->formatBatch( $records );
|
113 |
}
|
114 |
|
115 |
/**
|
11 |
namespace Tribe\Log;
|
12 |
|
13 |
|
|
|
14 |
use Monolog\Formatter\LineFormatter;
|
15 |
|
16 |
+
class Canonical_Formatter extends LineFormatter {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
17 |
|
18 |
/**
|
19 |
* Formats a log record.
|
29 |
|
30 |
if ( $has_context ) {
|
31 |
$record['message'] = $this->format_record_message( $record );
|
32 |
+
|
33 |
+
$this->format = 'tribe-canonical-line channel=%channel% %message%';
|
34 |
} else {
|
35 |
// Fall-back on a standard format if the message does not have a context.
|
36 |
+
$this->format = 'tribe.%channel%.%level_name%: %message%';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
37 |
}
|
38 |
|
39 |
+
return parent::format( $record );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
40 |
}
|
41 |
|
42 |
/**
|
common/src/Tribe/Log/File_Logger.php
CHANGED
@@ -155,7 +155,7 @@ class Tribe__Log__File_Logger implements Tribe__Log__Logger {
|
|
155 |
return;
|
156 |
}
|
157 |
|
158 |
-
fputcsv( $this->handle,
|
159 |
}
|
160 |
|
161 |
/**
|
@@ -171,7 +171,7 @@ class Tribe__Log__File_Logger implements Tribe__Log__Logger {
|
|
171 |
*
|
172 |
* @return array
|
173 |
*/
|
174 |
-
public function retrieve( $limit = 0, array $args =
|
175 |
// Ensure we're in 'read' mode before we try to retrieve
|
176 |
if ( 'r' !== $this->context ) {
|
177 |
$this->set_context( 'r' );
|
@@ -179,10 +179,10 @@ class Tribe__Log__File_Logger implements Tribe__Log__Logger {
|
|
179 |
|
180 |
// Couldn't obtain the file handle? We'll bail out without causing further disruption
|
181 |
if ( ! $this->handle ) {
|
182 |
-
return
|
183 |
}
|
184 |
|
185 |
-
$rows =
|
186 |
|
187 |
while ( $current_row = fgetcsv( $this->handle ) ) {
|
188 |
if ( $limit && $limit === count( $rows ) ) {
|
@@ -212,7 +212,7 @@ class Tribe__Log__File_Logger implements Tribe__Log__Logger {
|
|
212 |
* @return array
|
213 |
*/
|
214 |
public function list_available_logs() {
|
215 |
-
$logs =
|
216 |
|
217 |
// This could be called when the log dir is not accessible.
|
218 |
if ( ! $this->is_available() ) {
|
@@ -238,7 +238,13 @@ class Tribe__Log__File_Logger implements Tribe__Log__Logger {
|
|
238 |
}
|
239 |
|
240 |
$name = $node->getFilename();
|
241 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
242 |
|
243 |
// Skip unless it is a .log file with the expected prefix
|
244 |
if ( 'log' !== $ext || 0 !== strpos( $name, $basename ) ) {
|
155 |
return;
|
156 |
}
|
157 |
|
158 |
+
fputcsv( $this->handle, array( date_i18n( 'Y-m-d H:i:s' ), $entry, $type, $src ) );
|
159 |
}
|
160 |
|
161 |
/**
|
171 |
*
|
172 |
* @return array
|
173 |
*/
|
174 |
+
public function retrieve( $limit = 0, array $args = array() ) {
|
175 |
// Ensure we're in 'read' mode before we try to retrieve
|
176 |
if ( 'r' !== $this->context ) {
|
177 |
$this->set_context( 'r' );
|
179 |
|
180 |
// Couldn't obtain the file handle? We'll bail out without causing further disruption
|
181 |
if ( ! $this->handle ) {
|
182 |
+
return array();
|
183 |
}
|
184 |
|
185 |
+
$rows = array();
|
186 |
|
187 |
while ( $current_row = fgetcsv( $this->handle ) ) {
|
188 |
if ( $limit && $limit === count( $rows ) ) {
|
212 |
* @return array
|
213 |
*/
|
214 |
public function list_available_logs() {
|
215 |
+
$logs = array();
|
216 |
|
217 |
// This could be called when the log dir is not accessible.
|
218 |
if ( ! $this->is_available() ) {
|
238 |
}
|
239 |
|
240 |
$name = $node->getFilename();
|
241 |
+
|
242 |
+
// DirectoryIterator::getExtension() is only available on 5.3.6
|
243 |
+
if ( version_compare( phpversion(), '5.3.6', '>=' ) ) {
|
244 |
+
$ext = $node->getExtension();
|
245 |
+
} else {
|
246 |
+
$ext = pathinfo( $name, PATHINFO_EXTENSION );
|
247 |
+
}
|
248 |
|
249 |
// Skip unless it is a .log file with the expected prefix
|
250 |
if ( 'log' !== $ext || 0 !== strpos( $name, $basename ) ) {
|
common/src/Tribe/Log/Logger.php
CHANGED
@@ -43,7 +43,7 @@ interface Tribe__Log__Logger {
|
|
43 |
*
|
44 |
* @return array
|
45 |
*/
|
46 |
-
public function retrieve( $limit = 0, array $args =
|
47 |
|
48 |
/**
|
49 |
* Returns a list of currently accessible logs (current first, oldest last).
|
43 |
*
|
44 |
* @return array
|
45 |
*/
|
46 |
+
public function retrieve( $limit = 0, array $args = array() );
|
47 |
|
48 |
/**
|
49 |
* Returns a list of currently accessible logs (current first, oldest last).
|
common/src/Tribe/Log/Null_Logger.php
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
|
4 |
/**
|
5 |
* Class Null_Logger
|
6 |
-
*
|
7 |
* Logs nothing, reads nothing.
|
8 |
*/
|
9 |
class Tribe__Log__Null_Logger implements Tribe__Log__Logger {
|
@@ -54,8 +54,8 @@ class Tribe__Log__Null_Logger implements Tribe__Log__Logger {
|
|
54 |
*
|
55 |
* @return array
|
56 |
*/
|
57 |
-
public function retrieve( $limit = 0, array $args =
|
58 |
-
return
|
59 |
}
|
60 |
|
61 |
/**
|
@@ -78,7 +78,7 @@ class Tribe__Log__Null_Logger implements Tribe__Log__Logger {
|
|
78 |
* @return array
|
79 |
*/
|
80 |
public function list_available_logs() {
|
81 |
-
return
|
82 |
}
|
83 |
|
84 |
/**
|
3 |
|
4 |
/**
|
5 |
* Class Null_Logger
|
6 |
+
*
|
7 |
* Logs nothing, reads nothing.
|
8 |
*/
|
9 |
class Tribe__Log__Null_Logger implements Tribe__Log__Logger {
|
54 |
*
|
55 |
* @return array
|
56 |
*/
|
57 |
+
public function retrieve( $limit = 0, array $args = array() ) {
|
58 |
+
return array();
|
59 |
}
|
60 |
|
61 |
/**
|
78 |
* @return array
|
79 |
*/
|
80 |
public function list_available_logs() {
|
81 |
+
return array();
|
82 |
}
|
83 |
|
84 |
/**
|
common/src/Tribe/Log/README.md
CHANGED
@@ -1,11 +1,11 @@
|
|
1 |
# Monolog-based logging
|
2 |
|
3 |
-
We've introduced a [Monolog based](https://github.com/Seldaek/monolog) logger in our common libraries.
|
4 |
You can find more information about all the possibilities this opens [on the library documentaion](https://seldaek.github.io/monolog/), but this document will serve as an introduction to the essentials of its day to day use.
|
5 |
|
6 |
## When should I log?
|
7 |
|
8 |
-
Whenever you feel you might have to debug this in the future and could use that information.
|
9 |
|
10 |
> Pro tip: if you, as a developer, find yourself using `var_dump` and `error_log` a lot, then you should log instead. Someone, someday, will have your same issue.
|
11 |
|
@@ -13,8 +13,8 @@ Worried about "spamming" the logs? [Read here](#logging-levels--or-stuff-does-no
|
|
13 |
|
14 |
## This will deprecate the old logger, but not yet
|
15 |
|
16 |
-
At first we're not replacing the "old" logger with this new one, we're just asking you **to stop using the old logger** in your code from now on and use the new, Monolog-based, one.
|
17 |
-
The old logger still offers file-based logging and connections to the UI the new logger is not yet offering; the current implementation will allow us, in the future, to log **everything** with the Monolog-based logger, but, currently, intercepting log messages from the "old" logger requires manual activation, see the following section.
|
18 |
|
19 |
To be clear: this is what we mean by "old" or "legacy" logger:
|
20 |
|
@@ -26,10 +26,10 @@ tribe( 'logger' )->log( 'Some information', Tribe__Log::DEBUG, 'The source' );
|
|
26 |
|
27 |
### Intercepting legacy logger logs with the new Monolog logger
|
28 |
|
29 |
-
The Monolog-based logger will handle logging coming from the legacy logger only if explicitly told so.
|
30 |
-
|
31 |
You can activate this function with this code:
|
32 |
-
|
33 |
```php
|
34 |
<?php
|
35 |
add_filter( 'tribe_log_use_action_logger', '__return_true' );
|
@@ -39,17 +39,17 @@ Once this is in your code any call to the legacy logger wil be redirected to the
|
|
39 |
|
40 |
## Using the logger
|
41 |
|
42 |
-
The new logger listens on the `tribe_log` action.
|
43 |
-
By default it will log to the `default` channel (see [Monolog documentation for more information about channels](https://seldaek.github.io/monolog/doc/01-usage.html#leveraging-channels)).
|
44 |
|
45 |
So the code below will log a **debug** to the **default** channel with a source of **ea_client**:
|
46 |
|
47 |
```php
|
48 |
<?php
|
49 |
-
do_action(
|
50 |
-
'tribe_log',
|
51 |
-
'debug',
|
52 |
-
'ea_client',
|
53 |
[ 'action' => 'updated', 'post_id' => $id, 'origin' => $origin ]
|
54 |
);
|
55 |
```
|
@@ -62,10 +62,10 @@ The logger listening on the action will consume three parameters:
|
|
62 |
|
63 |
## Where are my logs?
|
64 |
|
65 |
-
The initial implementation of the new logger will write, by default, to the **PHP error** log.
|
66 |
|
67 |
-
We're using Monolog to allow us, and third parties, to "attach" and "deatach" loggers as required.
|
68 |
-
By default we're formatting logs using canonical lines( read more [here](https://brandur.org/logfmt) and [here](https://blog.codeship.com/logfmt-a-log-format-thats-easy-to-read-and-write/)) to make our log entries both human-readable and machine parsable (e.g. by a tool like [this](https://www.npmjs.com/package/logfmt)).
|
69 |
|
70 |
The output format of the example above would be this:
|
71 |
|
@@ -73,17 +73,17 @@ The output format of the example above would be this:
|
|
73 |
[22-Aug-2019 15:50:42 UTC] tribe-canonical-line channel=default level=debug source=ea_client action=updated post_id=23 origin=ical
|
74 |
```
|
75 |
|
76 |
-
What about legacy logs?
|
77 |
Their format would not be formatted to the canonical line style:
|
78 |
|
79 |
```
|
80 |
-
[22-Aug-2019 16:03:33 UTC] tribe.default.DEBUG: The source: debug information
|
81 |
```
|
82 |
|
83 |
### Logging levels ( or "stuff does not appear in the log")
|
84 |
|
85 |
-
By default we're only logging Warnings and above.
|
86 |
-
This means all your `debug` level logs are being ignored.
|
87 |
|
88 |
In production we do not want to fill people logs with pointless information, but you can control the level of logging: any log equal or above the specified level will be logged.
|
89 |
|
@@ -91,10 +91,10 @@ You can control the logging level with the `tribe_log_level` filter:
|
|
91 |
|
92 |
```php
|
93 |
<?php
|
94 |
-
add_filter(
|
95 |
'tribe_log_level',
|
96 |
static function () {
|
97 |
-
// Only log errors or above.
|
98 |
return Monolog\Logger::ERROR;
|
99 |
}
|
100 |
);
|
@@ -102,7 +102,7 @@ add_filter(
|
|
102 |
|
103 |
### Logging channels
|
104 |
|
105 |
-
The default logging channel is `default`, you've seen that in the example log lines above.
|
106 |
|
107 |
But how can I change the channel?
|
108 |
|
@@ -127,21 +127,21 @@ Any log produced after the call will log to the `my_channel` channel; this will
|
|
127 |
```
|
128 |
[22-Aug-2019 15:50:42 UTC] tribe-canonical-line channel=default level=debug source=ea_client action=updated post_id=23 origin=ical
|
129 |
[22-Aug-2019 15:51:13 UTC] tribe-canonical-line channel=my_channel level=debug source=my_source foo=bar
|
130 |
-
[22-Aug-2019 16:03:33 UTC] tribe.my_channel.DEBUG: My source: Some debug information
|
131 |
```
|
132 |
|
133 |
## I want to use this right now to debug my code
|
134 |
|
135 |
-
Copy and paste this in a plugin, or must-use plugin.
|
136 |
If you're using a plugin remember to activate it.
|
137 |
|
138 |
```php
|
139 |
<?php
|
140 |
/**
|
141 |
-
* Plugin Name:
|
142 |
-
* Plugin Description: Control the behavior of
|
143 |
*/
|
144 |
-
add_filter(
|
145 |
'tribe_log_level',
|
146 |
static function () {
|
147 |
// Control the min level of logging.
|
@@ -151,4 +151,4 @@ add_filter(
|
|
151 |
|
152 |
// Redirect legacy logger calls.
|
153 |
add_filter( 'tribe_log_use_action_logger', '__return_true' );
|
154 |
-
```
|
1 |
# Monolog-based logging
|
2 |
|
3 |
+
We've introduced a [Monolog based](https://github.com/Seldaek/monolog) logger in our common libraries.
|
4 |
You can find more information about all the possibilities this opens [on the library documentaion](https://seldaek.github.io/monolog/), but this document will serve as an introduction to the essentials of its day to day use.
|
5 |
|
6 |
## When should I log?
|
7 |
|
8 |
+
Whenever you feel you might have to debug this in the future and could use that information.
|
9 |
|
10 |
> Pro tip: if you, as a developer, find yourself using `var_dump` and `error_log` a lot, then you should log instead. Someone, someday, will have your same issue.
|
11 |
|
13 |
|
14 |
## This will deprecate the old logger, but not yet
|
15 |
|
16 |
+
At first we're not replacing the "old" logger with this new one, we're just asking you **to stop using the old logger** in your code from now on and use the new, Monolog-based, one.
|
17 |
+
The old logger still offers file-based logging and connections to the UI the new logger is not yet offering; the current implementation will allow us, in the future, to log **everything** with the Monolog-based logger, but, currently, intercepting log messages from the "old" logger requires manual activation, see the following section.
|
18 |
|
19 |
To be clear: this is what we mean by "old" or "legacy" logger:
|
20 |
|
26 |
|
27 |
### Intercepting legacy logger logs with the new Monolog logger
|
28 |
|
29 |
+
The Monolog-based logger will handle logging coming from the legacy logger only if explicitly told so.
|
30 |
+
|
31 |
You can activate this function with this code:
|
32 |
+
|
33 |
```php
|
34 |
<?php
|
35 |
add_filter( 'tribe_log_use_action_logger', '__return_true' );
|
39 |
|
40 |
## Using the logger
|
41 |
|
42 |
+
The new logger listens on the `tribe_log` action.
|
43 |
+
By default it will log to the `default` channel (see [Monolog documentation for more information about channels](https://seldaek.github.io/monolog/doc/01-usage.html#leveraging-channels)).
|
44 |
|
45 |
So the code below will log a **debug** to the **default** channel with a source of **ea_client**:
|
46 |
|
47 |
```php
|
48 |
<?php
|
49 |
+
do_action(
|
50 |
+
'tribe_log',
|
51 |
+
'debug',
|
52 |
+
'ea_client',
|
53 |
[ 'action' => 'updated', 'post_id' => $id, 'origin' => $origin ]
|
54 |
);
|
55 |
```
|
62 |
|
63 |
## Where are my logs?
|
64 |
|
65 |
+
The initial implementation of the new logger will write, by default, to the **PHP error** log.
|
66 |
|
67 |
+
We're using Monolog to allow us, and third parties, to "attach" and "deatach" loggers as required.
|
68 |
+
By default we're formatting logs using canonical lines( read more [here](https://brandur.org/logfmt) and [here](https://blog.codeship.com/logfmt-a-log-format-thats-easy-to-read-and-write/)) to make our log entries both human-readable and machine parsable (e.g. by a tool like [this](https://www.npmjs.com/package/logfmt)).
|
69 |
|
70 |
The output format of the example above would be this:
|
71 |
|
73 |
[22-Aug-2019 15:50:42 UTC] tribe-canonical-line channel=default level=debug source=ea_client action=updated post_id=23 origin=ical
|
74 |
```
|
75 |
|
76 |
+
What about legacy logs?
|
77 |
Their format would not be formatted to the canonical line style:
|
78 |
|
79 |
```
|
80 |
+
[22-Aug-2019 16:03:33 UTC] tribe.default.DEBUG: The source: debug information
|
81 |
```
|
82 |
|
83 |
### Logging levels ( or "stuff does not appear in the log")
|
84 |
|
85 |
+
By default we're only logging Warnings and above.
|
86 |
+
This means all your `debug` level logs are being ignored.
|
87 |
|
88 |
In production we do not want to fill people logs with pointless information, but you can control the level of logging: any log equal or above the specified level will be logged.
|
89 |
|
91 |
|
92 |
```php
|
93 |
<?php
|
94 |
+
add_filter(
|
95 |
'tribe_log_level',
|
96 |
static function () {
|
97 |
+
// Only log errors or above.
|
98 |
return Monolog\Logger::ERROR;
|
99 |
}
|
100 |
);
|
102 |
|
103 |
### Logging channels
|
104 |
|
105 |
+
The default logging channel is `default`, you've seen that in the example log lines above.
|
106 |
|
107 |
But how can I change the channel?
|
108 |
|
127 |
```
|
128 |
[22-Aug-2019 15:50:42 UTC] tribe-canonical-line channel=default level=debug source=ea_client action=updated post_id=23 origin=ical
|
129 |
[22-Aug-2019 15:51:13 UTC] tribe-canonical-line channel=my_channel level=debug source=my_source foo=bar
|
130 |
+
[22-Aug-2019 16:03:33 UTC] tribe.my_channel.DEBUG: My source: Some debug information
|
131 |
```
|
132 |
|
133 |
## I want to use this right now to debug my code
|
134 |
|
135 |
+
Copy and paste this in a plugin, or must-use plugin.
|
136 |
If you're using a plugin remember to activate it.
|
137 |
|
138 |
```php
|
139 |
<?php
|
140 |
/**
|
141 |
+
* Plugin Name: Modern Tribe Logger Control
|
142 |
+
* Plugin Description: Control the behavior of Modern Tribe Monolog-based logger.
|
143 |
*/
|
144 |
+
add_filter(
|
145 |
'tribe_log_level',
|
146 |
static function () {
|
147 |
// Control the min level of logging.
|
151 |
|
152 |
// Redirect legacy logger calls.
|
153 |
add_filter( 'tribe_log_use_action_logger', '__return_true' );
|
154 |
+
```
|
common/src/Tribe/Log/Service_Provider.php
CHANGED
@@ -22,8 +22,6 @@ class Service_Provider extends \tad_DI52_ServiceProvider {
|
|
22 |
* @since 4.9.16
|
23 |
*/
|
24 |
public function register() {
|
25 |
-
$this->container->singleton( 'log', $this );
|
26 |
-
$this->container->singleton( static::class, $this );
|
27 |
$this->container->singleton( Logger::class, [ $this, 'build_logger' ] );
|
28 |
$this->container->singleton( 'monolog',
|
29 |
function () {
|
@@ -72,7 +70,7 @@ class Service_Provider extends \tad_DI52_ServiceProvider {
|
|
72 |
*/
|
73 |
$level_threshold = apply_filters( 'tribe_log_level', Logger::WARNING );
|
74 |
|
75 |
-
$error_log_handler = new ErrorLogHandler(
|
76 |
|
77 |
/**
|
78 |
* Filters whether to use canonical format for the logs or not.
|
@@ -147,30 +145,4 @@ class Service_Provider extends \tad_DI52_ServiceProvider {
|
|
147 |
|
148 |
return $logging_engines;
|
149 |
}
|
150 |
-
|
151 |
-
/**
|
152 |
-
* Enables logging in the service provider, if not already enabled.
|
153 |
-
*
|
154 |
-
* @since 4.12.15
|
155 |
-
*/
|
156 |
-
public function enable() {
|
157 |
-
if ( has_action( 'tribe_log', [ $this, 'dispatch_log' ] ) ) {
|
158 |
-
return;
|
159 |
-
}
|
160 |
-
|
161 |
-
add_action( 'tribe_log', [ $this, 'dispatch_log' ] );
|
162 |
-
}
|
163 |
-
|
164 |
-
/**
|
165 |
-
* Disables the logging functions.
|
166 |
-
*
|
167 |
-
* @since 4.12.15
|
168 |
-
*/
|
169 |
-
public function disable() {
|
170 |
-
if ( ! has_action( 'tribe_log', [ $this, 'dispatch_log' ] ) ) {
|
171 |
-
return;
|
172 |
-
}
|
173 |
-
|
174 |
-
remove_action( 'tribe_log', [ $this, 'dispatch_log' ] );
|
175 |
-
}
|
176 |
}
|
22 |
* @since 4.9.16
|
23 |
*/
|
24 |
public function register() {
|
|
|
|
|
25 |
$this->container->singleton( Logger::class, [ $this, 'build_logger' ] );
|
26 |
$this->container->singleton( 'monolog',
|
27 |
function () {
|
70 |
*/
|
71 |
$level_threshold = apply_filters( 'tribe_log_level', Logger::WARNING );
|
72 |
|
73 |
+
$error_log_handler = new ErrorLogHandler( null, $level_threshold );
|
74 |
|
75 |
/**
|
76 |
* Filters whether to use canonical format for the logs or not.
|
145 |
|
146 |
return $logging_engines;
|
147 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
148 |
}
|
common/src/Tribe/Main.php
CHANGED
@@ -4,8 +4,6 @@
|
|
4 |
*/
|
5 |
|
6 |
// Don't load directly
|
7 |
-
use Tribe\DB_Lock;
|
8 |
-
|
9 |
if ( ! defined( 'ABSPATH' ) ) {
|
10 |
die( '-1' );
|
11 |
}
|
@@ -19,7 +17,7 @@ class Tribe__Main {
|
|
19 |
const OPTIONNAME = 'tribe_events_calendar_options';
|
20 |
const OPTIONNAMENETWORK = 'tribe_events_calendar_network_options';
|
21 |
|
22 |
-
const VERSION = '4.
|
23 |
|
24 |
const FEED_URL = 'https://theeventscalendar.com/feed/';
|
25 |
|
@@ -67,7 +65,12 @@ class Tribe__Main {
|
|
67 |
return;
|
68 |
}
|
69 |
|
70 |
-
|
|
|
|
|
|
|
|
|
|
|
71 |
|
72 |
// the DI container class
|
73 |
require_once dirname( __FILE__ ) . '/Container.php';
|
@@ -140,14 +143,14 @@ class Tribe__Main {
|
|
140 |
}
|
141 |
|
142 |
/**
|
143 |
-
*
|
144 |
*/
|
145 |
public function context() {
|
146 |
return $this->plugin_context;
|
147 |
}
|
148 |
|
149 |
/**
|
150 |
-
*
|
151 |
*/
|
152 |
public function context_class() {
|
153 |
return $this->plugin_context_class;
|
@@ -423,14 +426,11 @@ class Tribe__Main {
|
|
423 |
// Are we on the Plugins page?
|
424 |
$is_plugins = $helper->is_screen( 'plugins' );
|
425 |
|
426 |
-
// Are we on the Widgets page?
|
427 |
-
$is_widgets = $helper->is_screen( 'widgets' );
|
428 |
-
|
429 |
// Are we viewing a generic Tribe screen?
|
430 |
// Includes: Events > Settings, Events > Help, App Shop page, and more.
|
431 |
$is_tribe_screen = $helper->is_screen();
|
432 |
|
433 |
-
return $is_post_type || $is_plugins || $
|
434 |
}
|
435 |
|
436 |
/**
|
@@ -559,7 +559,7 @@ class Tribe__Main {
|
|
559 |
if ( 'plugins.php' !== $page ) {
|
560 |
return;
|
561 |
}
|
562 |
-
$notices = apply_filters( 'tribe_plugin_notices',
|
563 |
wp_localize_script( 'tribe-pue-notices', 'tribe_plugin_notices', $notices );
|
564 |
}
|
565 |
|
@@ -576,8 +576,6 @@ class Tribe__Main {
|
|
576 |
tribe( 'admin.notice.marketing' );
|
577 |
}
|
578 |
|
579 |
-
tribe( \Tribe\Admin\Notice\WP_Version::class );
|
580 |
-
|
581 |
/**
|
582 |
* Runs after all plugins including Tribe ones have loaded
|
583 |
*
|
@@ -591,7 +589,7 @@ class Tribe__Main {
|
|
591 |
*
|
592 |
* @since 4.4
|
593 |
*
|
594 |
-
* @return void Implementation of components loader
|
595 |
*/
|
596 |
public function bind_implementations() {
|
597 |
tribe_singleton( 'settings.manager', 'Tribe__Settings_Manager' );
|
@@ -613,9 +611,7 @@ class Tribe__Main {
|
|
613 |
tribe_singleton( 'context', 'Tribe__Context' );
|
614 |
tribe_singleton( 'post-transient', 'Tribe__Post_Transient' );
|
615 |
tribe_singleton( 'db', 'Tribe__Db' );
|
616 |
-
tribe_singleton( 'db-lock', DB_Lock::class );
|
617 |
tribe_singleton( 'freemius', 'Tribe__Freemius' );
|
618 |
-
tribe_singleton( 'customizer', 'Tribe__Customizer' );
|
619 |
|
620 |
tribe_singleton( Tribe__Dependency::class, Tribe__Dependency::class );
|
621 |
|
@@ -626,7 +622,6 @@ class Tribe__Main {
|
|
626 |
|
627 |
tribe_singleton( 'admin.notice.php.version', 'Tribe__Admin__Notice__Php_Version', [ 'hook' ] );
|
628 |
tribe_singleton( 'admin.notice.marketing', 'Tribe__Admin__Notice__Marketing', [ 'hook' ] );
|
629 |
-
tribe_singleton( \Tribe\Admin\Notice\WP_Version::class, \Tribe\Admin\Notice\WP_Version::class, [ 'hook' ] );
|
630 |
|
631 |
tribe_register_provider( Tribe__Editor__Provider::class );
|
632 |
tribe_register_provider( Tribe__Service_Providers__Debug_Bar::class );
|
@@ -635,10 +630,7 @@ class Tribe__Main {
|
|
635 |
tribe_register_provider( Tribe\Service_Providers\Dialog::class );
|
636 |
tribe_register_provider( Tribe\Service_Providers\PUE::class );
|
637 |
tribe_register_provider( Tribe\Service_Providers\Shortcodes::class );
|
638 |
-
tribe_register_provider( Tribe\Service_Providers\Body_Classes::class );
|
639 |
tribe_register_provider( Tribe\Log\Service_Provider::class );
|
640 |
-
tribe_register_provider( Tribe\Service_Providers\Crons::class );
|
641 |
-
tribe_register_provider( Tribe\Service_Providers\Widgets::class );
|
642 |
}
|
643 |
|
644 |
/**
|
4 |
*/
|
5 |
|
6 |
// Don't load directly
|
|
|
|
|
7 |
if ( ! defined( 'ABSPATH' ) ) {
|
8 |
die( '-1' );
|
9 |
}
|
17 |
const OPTIONNAME = 'tribe_events_calendar_options';
|
18 |
const OPTIONNAMENETWORK = 'tribe_events_calendar_network_options';
|
19 |
|
20 |
+
const VERSION = '4.12.0';
|
21 |
|
22 |
const FEED_URL = 'https://theeventscalendar.com/feed/';
|
23 |
|
65 |
return;
|
66 |
}
|
67 |
|
68 |
+
// the 5.2 compatible autoload file
|
69 |
+
if ( version_compare( PHP_VERSION, '5.2.17', '<=' ) ) {
|
70 |
+
require_once realpath( dirname( dirname( dirname( __FILE__ ) ) ) . '/vendor/autoload_52.php' );
|
71 |
+
} else {
|
72 |
+
require_once realpath( dirname( dirname( dirname( __FILE__ ) ) ) . '/vendor/autoload.php' );
|
73 |
+
}
|
74 |
|
75 |
// the DI container class
|
76 |
require_once dirname( __FILE__ ) . '/Container.php';
|
143 |
}
|
144 |
|
145 |
/**
|
146 |
+
* Get's the instantiated context of this class. I.e. the object that instantiated this one.
|
147 |
*/
|
148 |
public function context() {
|
149 |
return $this->plugin_context;
|
150 |
}
|
151 |
|
152 |
/**
|
153 |
+
* Get's the class name of the instantiated plugin context of this class. I.e. the class name of the object that instantiated this one.
|
154 |
*/
|
155 |
public function context_class() {
|
156 |
return $this->plugin_context_class;
|
426 |
// Are we on the Plugins page?
|
427 |
$is_plugins = $helper->is_screen( 'plugins' );
|
428 |
|
|
|
|
|
|
|
429 |
// Are we viewing a generic Tribe screen?
|
430 |
// Includes: Events > Settings, Events > Help, App Shop page, and more.
|
431 |
$is_tribe_screen = $helper->is_screen();
|
432 |
|
433 |
+
return $is_post_type || $is_plugins || $is_tribe_screen;
|
434 |
}
|
435 |
|
436 |
/**
|
559 |
if ( 'plugins.php' !== $page ) {
|
560 |
return;
|
561 |
}
|
562 |
+
$notices = apply_filters( 'tribe_plugin_notices', array() );
|
563 |
wp_localize_script( 'tribe-pue-notices', 'tribe_plugin_notices', $notices );
|
564 |
}
|
565 |
|
576 |
tribe( 'admin.notice.marketing' );
|
577 |
}
|
578 |
|
|
|
|
|
579 |
/**
|
580 |
* Runs after all plugins including Tribe ones have loaded
|
581 |
*
|
589 |
*
|
590 |
* @since 4.4
|
591 |
*
|
592 |
+
* @return void Implementation of components loader doesnt return anything.
|
593 |
*/
|
594 |
public function bind_implementations() {
|
595 |
tribe_singleton( 'settings.manager', 'Tribe__Settings_Manager' );
|
611 |
tribe_singleton( 'context', 'Tribe__Context' );
|
612 |
tribe_singleton( 'post-transient', 'Tribe__Post_Transient' );
|
613 |
tribe_singleton( 'db', 'Tribe__Db' );
|
|
|
614 |
tribe_singleton( 'freemius', 'Tribe__Freemius' );
|
|
|
615 |
|
616 |
tribe_singleton( Tribe__Dependency::class, Tribe__Dependency::class );
|
617 |
|
622 |
|
623 |
tribe_singleton( 'admin.notice.php.version', 'Tribe__Admin__Notice__Php_Version', [ 'hook' ] );
|
624 |
tribe_singleton( 'admin.notice.marketing', 'Tribe__Admin__Notice__Marketing', [ 'hook' ] );
|
|
|
625 |
|
626 |
tribe_register_provider( Tribe__Editor__Provider::class );
|
627 |
tribe_register_provider( Tribe__Service_Providers__Debug_Bar::class );
|
630 |
tribe_register_provider( Tribe\Service_Providers\Dialog::class );
|
631 |
tribe_register_provider( Tribe\Service_Providers\PUE::class );
|
632 |
tribe_register_provider( Tribe\Service_Providers\Shortcodes::class );
|
|
|
633 |
tribe_register_provider( Tribe\Log\Service_Provider::class );
|
|
|
|
|
634 |
}
|
635 |
|
636 |
/**
|
common/src/Tribe/Meta/Chunker.php
CHANGED
@@ -63,7 +63,7 @@ class Tribe__Meta__Chunker {
|
|
63 |
/**
|
64 |
* @var array The post types supported by the Chunker.
|
65 |
*/
|
66 |
-
protected $post_types =
|
67 |
|
68 |
/**
|
69 |
* @var int The filter priority at which Chunker will operate on meta CRUD operations.
|
@@ -95,11 +95,11 @@ class Tribe__Meta__Chunker {
|
|
95 |
return;
|
96 |
}
|
97 |
|
98 |
-
add_filter( 'update_post_metadata',
|
99 |
-
add_filter( 'delete_post_metadata',
|
100 |
-
add_filter( 'add_post_metadata',
|
101 |
-
add_filter( 'get_post_metadata',
|
102 |
-
add_action( 'deleted_post',
|
103 |
}
|
104 |
|
105 |
/**
|
@@ -114,8 +114,8 @@ class Tribe__Meta__Chunker {
|
|
114 |
return;
|
115 |
}
|
116 |
|
117 |
-
$this->chunks_cache =
|
118 |
-
$this->post_ids_cache =
|
119 |
|
120 |
$chunked_keys = get_option( $this->chunked_keys_option_name );
|
121 |
|
@@ -199,7 +199,7 @@ class Tribe__Meta__Chunker {
|
|
199 |
$option = (array) get_option( $this->chunked_keys_option_name );
|
200 |
|
201 |
if ( ! isset( $option[ $post_id ] ) ) {
|
202 |
-
$option[ $post_id ] =
|
203 |
} else {
|
204 |
$option[ $post_id ][] = $meta_key;
|
205 |
}
|
@@ -383,10 +383,10 @@ class Tribe__Meta__Chunker {
|
|
383 |
protected function remove_checksum_for( $object_id, $meta_key ) {
|
384 |
/** @var wpdb $wpdb */
|
385 |
global $wpdb;
|
386 |
-
$data =
|
387 |
'post_id' => $object_id,
|
388 |
'meta_key' => $this->get_checksum_key( $meta_key ),
|
389 |
-
|
390 |
$wpdb->delete( $wpdb->postmeta, $data );
|
391 |
}
|
392 |
|
@@ -481,7 +481,7 @@ class Tribe__Meta__Chunker {
|
|
481 |
*/
|
482 |
protected function prefix_chunks( array $chunks ) {
|
483 |
$count = count( $chunks );
|
484 |
-
$prefixed =
|
485 |
for ( $i = 0; $i < $count; $i ++ ) {
|
486 |
$prefixed[] = "{$i}{$this->chunk_separator}{$chunks[$i]}";
|
487 |
}
|
@@ -525,21 +525,21 @@ class Tribe__Meta__Chunker {
|
|
525 |
$chunk_meta_key = $this->get_chunk_meta_key( $meta_key );
|
526 |
$this->insert_meta( $object_id, $meta_key, $chunks[0] );
|
527 |
foreach ( $chunks as $chunk ) {
|
528 |
-
$wpdb->insert( $wpdb->postmeta,
|
529 |
'post_id' => $object_id,
|
530 |
'meta_key' => $chunk_meta_key,
|
531 |
'meta_value' => $chunk,
|
532 |
-
|
533 |
}
|
534 |
|
535 |
$glued = $this->glue_chunks( $this->get_chunks_for( $object_id, $meta_key ) );
|
536 |
$checksum_key = $this->get_checksum_key( $meta_key );
|
537 |
-
$wpdb->delete( $wpdb->postmeta,
|
538 |
-
$wpdb->insert( $wpdb->postmeta,
|
539 |
'post_id' => $object_id,
|
540 |
'meta_key' => $checksum_key,
|
541 |
'meta_value' => md5( $glued ),
|
542 |
-
|
543 |
}
|
544 |
|
545 |
/**
|
@@ -554,11 +554,11 @@ class Tribe__Meta__Chunker {
|
|
554 |
protected function insert_meta( $object_id, $meta_key, $meta_value ) {
|
555 |
/** @var wpdb $wpdb */
|
556 |
global $wpdb;
|
557 |
-
$data =
|
558 |
'post_id' => $object_id,
|
559 |
'meta_key' => $meta_key,
|
560 |
'meta_value' => maybe_serialize( $meta_value ),
|
561 |
-
|
562 |
$wpdb->insert( $wpdb->postmeta, $data );
|
563 |
}
|
564 |
|
@@ -574,7 +574,7 @@ class Tribe__Meta__Chunker {
|
|
574 |
* @see Tribe__Meta__Chunker::get_chunks_for()
|
575 |
*/
|
576 |
public function glue_chunks( array $chunks ) {
|
577 |
-
$ordered_chunks =
|
578 |
foreach ( $chunks as $chunk ) {
|
579 |
preg_match( '/(\\d+)' . preg_quote( $this->chunk_separator ) . '(.*)/', $chunk, $matches );
|
580 |
$ordered_chunks[ $matches[1] ] = $matches[2];
|
@@ -614,7 +614,7 @@ class Tribe__Meta__Chunker {
|
|
614 |
$object_id, $chunk_meta_key
|
615 |
) );
|
616 |
|
617 |
-
$meta_values =
|
618 |
foreach ( $meta_ids as $meta_id ) {
|
619 |
$query = $wpdb->prepare( "SELECT meta_value FROM {$wpdb->postmeta} WHERE meta_id = %d", $meta_id );
|
620 |
$meta_values[] = $wpdb->get_var( $query );
|
@@ -736,11 +736,11 @@ class Tribe__Meta__Chunker {
|
|
736 |
* Unhooks the Chunker from the metadata operations.
|
737 |
*/
|
738 |
public function unhook() {
|
739 |
-
remove_filter( 'update_post_metadata',
|
740 |
-
remove_filter( 'delete_post_metadata',
|
741 |
-
remove_filter( 'add_post_metadata',
|
742 |
-
remove_filter( 'get_post_metadata',
|
743 |
-
remove_action( 'deleted_post',
|
744 |
}
|
745 |
|
746 |
/**
|
@@ -813,25 +813,25 @@ class Tribe__Meta__Chunker {
|
|
813 |
$all_meta = $this->get_all_meta( $object_id );
|
814 |
|
815 |
if ( empty( $all_meta ) ) {
|
816 |
-
return
|
817 |
}
|
818 |
|
819 |
-
$grouped =
|
820 |
foreach ( $all_meta as $entry ) {
|
821 |
if ( ! isset( $grouped[ $entry['meta_key'] ] ) ) {
|
822 |
-
$grouped[ $entry['meta_key'] ] =
|
823 |
} else {
|
824 |
$grouped[ $entry['meta_key'] ][] = $entry['meta_value'];
|
825 |
}
|
826 |
}
|
827 |
|
828 |
-
$chunker_meta_keys = array_filter( array_keys( $grouped ),
|
829 |
|
830 |
if ( empty( $chunker_meta_keys ) ) {
|
831 |
return $grouped;
|
832 |
}
|
833 |
|
834 |
-
$checksum_keys = array_filter( $chunker_meta_keys,
|
835 |
|
836 |
if ( empty( $checksum_keys ) ) {
|
837 |
return $grouped;
|
@@ -840,14 +840,14 @@ class Tribe__Meta__Chunker {
|
|
840 |
$chunker_meta = array_intersect_key( $grouped, array_combine( $chunker_meta_keys, $chunker_meta_keys ) );
|
841 |
$normal_meta = array_diff_key( $grouped, array_combine( $chunker_meta_keys, $chunker_meta_keys ) );
|
842 |
foreach ( $checksum_keys as $checksum_key ) {
|
843 |
-
$normal_meta_key = str_replace(
|
844 |
$chunk_meta_key = $this->get_chunk_meta_key( $normal_meta_key );
|
845 |
|
846 |
if ( empty( $chunker_meta[ $chunk_meta_key ] ) ) {
|
847 |
continue;
|
848 |
}
|
849 |
|
850 |
-
$normal_meta[ $normal_meta_key ] =
|
851 |
}
|
852 |
|
853 |
return $normal_meta;
|
@@ -881,7 +881,7 @@ class Tribe__Meta__Chunker {
|
|
881 |
$query = $wpdb->prepare( "SELECT meta_key, meta_value FROM {$wpdb->postmeta} WHERE post_id = %d", $object_id );
|
882 |
$results = $wpdb->get_results( $query, ARRAY_A );
|
883 |
|
884 |
-
return ! empty( $results ) && is_array( $results ) ? $results :
|
885 |
}
|
886 |
|
887 |
/**
|
63 |
/**
|
64 |
* @var array The post types supported by the Chunker.
|
65 |
*/
|
66 |
+
protected $post_types = array();
|
67 |
|
68 |
/**
|
69 |
* @var int The filter priority at which Chunker will operate on meta CRUD operations.
|
95 |
return;
|
96 |
}
|
97 |
|
98 |
+
add_filter( 'update_post_metadata', array( $this, 'filter_update_metadata' ), $this->filter_priority, 4 );
|
99 |
+
add_filter( 'delete_post_metadata', array( $this, 'filter_delete_metadata' ), $this->filter_priority, 3 );
|
100 |
+
add_filter( 'add_post_metadata', array( $this, 'filter_add_metadata' ), $this->filter_priority, 4 );
|
101 |
+
add_filter( 'get_post_metadata', array( $this, 'filter_get_metadata' ), $this->filter_priority, 4 );
|
102 |
+
add_action( 'deleted_post', array( $this, 'remove_post_entry' ) );
|
103 |
}
|
104 |
|
105 |
/**
|
114 |
return;
|
115 |
}
|
116 |
|
117 |
+
$this->chunks_cache = array();
|
118 |
+
$this->post_ids_cache = array();
|
119 |
|
120 |
$chunked_keys = get_option( $this->chunked_keys_option_name );
|
121 |
|
199 |
$option = (array) get_option( $this->chunked_keys_option_name );
|
200 |
|
201 |
if ( ! isset( $option[ $post_id ] ) ) {
|
202 |
+
$option[ $post_id ] = array( $meta_key );
|
203 |
} else {
|
204 |
$option[ $post_id ][] = $meta_key;
|
205 |
}
|
383 |
protected function remove_checksum_for( $object_id, $meta_key ) {
|
384 |
/** @var wpdb $wpdb */
|
385 |
global $wpdb;
|
386 |
+
$data = array(
|
387 |
'post_id' => $object_id,
|
388 |
'meta_key' => $this->get_checksum_key( $meta_key ),
|
389 |
+
);
|
390 |
$wpdb->delete( $wpdb->postmeta, $data );
|
391 |
}
|
392 |
|
481 |
*/
|
482 |
protected function prefix_chunks( array $chunks ) {
|
483 |
$count = count( $chunks );
|
484 |
+
$prefixed = array();
|
485 |
for ( $i = 0; $i < $count; $i ++ ) {
|
486 |
$prefixed[] = "{$i}{$this->chunk_separator}{$chunks[$i]}";
|
487 |
}
|
525 |
$chunk_meta_key = $this->get_chunk_meta_key( $meta_key );
|
526 |
$this->insert_meta( $object_id, $meta_key, $chunks[0] );
|
527 |
foreach ( $chunks as $chunk ) {
|
528 |
+
$wpdb->insert( $wpdb->postmeta, array(
|
529 |
'post_id' => $object_id,
|
530 |
'meta_key' => $chunk_meta_key,
|
531 |
'meta_value' => $chunk,
|
532 |
+
) );
|
533 |
}
|
534 |
|
535 |
$glued = $this->glue_chunks( $this->get_chunks_for( $object_id, $meta_key ) );
|
536 |
$checksum_key = $this->get_checksum_key( $meta_key );
|
537 |
+
$wpdb->delete( $wpdb->postmeta, array( 'post_id' => $object_id, 'meta_key' => $checksum_key ) );
|
538 |
+
$wpdb->insert( $wpdb->postmeta, array(
|
539 |
'post_id' => $object_id,
|
540 |
'meta_key' => $checksum_key,
|
541 |
'meta_value' => md5( $glued ),
|
542 |
+
) );
|
543 |
}
|
544 |
|
545 |
/**
|
554 |
protected function insert_meta( $object_id, $meta_key, $meta_value ) {
|
555 |
/** @var wpdb $wpdb */
|
556 |
global $wpdb;
|
557 |
+
$data = array(
|
558 |
'post_id' => $object_id,
|
559 |
'meta_key' => $meta_key,
|
560 |
'meta_value' => maybe_serialize( $meta_value ),
|
561 |
+
);
|
562 |
$wpdb->insert( $wpdb->postmeta, $data );
|
563 |
}
|
564 |
|
574 |
* @see Tribe__Meta__Chunker::get_chunks_for()
|
575 |
*/
|
576 |
public function glue_chunks( array $chunks ) {
|
577 |
+
$ordered_chunks = array();
|
578 |
foreach ( $chunks as $chunk ) {
|
579 |
preg_match( '/(\\d+)' . preg_quote( $this->chunk_separator ) . '(.*)/', $chunk, $matches );
|
580 |
$ordered_chunks[ $matches[1] ] = $matches[2];
|
614 |
$object_id, $chunk_meta_key
|
615 |
) );
|
616 |
|
617 |
+
$meta_values = array();
|
618 |
foreach ( $meta_ids as $meta_id ) {
|
619 |
$query = $wpdb->prepare( "SELECT meta_value FROM {$wpdb->postmeta} WHERE meta_id = %d", $meta_id );
|
620 |
$meta_values[] = $wpdb->get_var( $query );
|
736 |
* Unhooks the Chunker from the metadata operations.
|
737 |
*/
|
738 |
public function unhook() {
|
739 |
+
remove_filter( 'update_post_metadata', array( $this, 'filter_update_metadata' ), $this->filter_priority );
|
740 |
+
remove_filter( 'delete_post_metadata', array( $this, 'filter_delete_metadata' ), $this->filter_priority );
|
741 |
+
remove_filter( 'add_post_metadata', array( $this, 'filter_add_metadata' ), $this->filter_priority );
|
742 |
+
remove_filter( 'get_post_metadata', array( $this, 'filter_get_metadata' ), $this->filter_priority );
|
743 |
+
remove_action( 'deleted_post', array( $this, 'remove_post_entry' ) );
|
744 |
}
|
745 |
|
746 |
/**
|
813 |
$all_meta = $this->get_all_meta( $object_id );
|
814 |
|
815 |
if ( empty( $all_meta ) ) {
|
816 |
+
return array();
|
817 |
}
|
818 |
|
819 |
+
$grouped = array();
|
820 |
foreach ( $all_meta as $entry ) {
|
821 |
if ( ! isset( $grouped[ $entry['meta_key'] ] ) ) {
|
822 |
+
$grouped[ $entry['meta_key'] ] = array( $entry['meta_value'] );
|
823 |
} else {
|
824 |
$grouped[ $entry['meta_key'] ][] = $entry['meta_value'];
|
825 |
}
|
826 |
}
|
827 |
|
828 |
+
$chunker_meta_keys = array_filter( array_keys( $grouped ), array( $this, 'is_chunker_logic_meta_key' ) );
|
829 |
|
830 |
if ( empty( $chunker_meta_keys ) ) {
|
831 |
return $grouped;
|
832 |
}
|
833 |
|
834 |
+
$checksum_keys = array_filter( $chunker_meta_keys, array( $this, 'is_chunker_checksum_key' ) );
|
835 |
|
836 |
if ( empty( $checksum_keys ) ) {
|
837 |
return $grouped;
|
840 |
$chunker_meta = array_intersect_key( $grouped, array_combine( $chunker_meta_keys, $chunker_meta_keys ) );
|
841 |
$normal_meta = array_diff_key( $grouped, array_combine( $chunker_meta_keys, $chunker_meta_keys ) );
|
842 |
foreach ( $checksum_keys as $checksum_key ) {
|
843 |
+
$normal_meta_key = str_replace( array( $this->meta_key_prefix, '_checksum' ), '', $checksum_key );
|
844 |
$chunk_meta_key = $this->get_chunk_meta_key( $normal_meta_key );
|
845 |
|
846 |
if ( empty( $chunker_meta[ $chunk_meta_key ] ) ) {
|
847 |
continue;
|
848 |
}
|
849 |
|
850 |
+
$normal_meta[ $normal_meta_key ] = array( $this->glue_chunks( $chunker_meta[ $chunk_meta_key ] ) );
|
851 |
}
|
852 |
|
853 |
return $normal_meta;
|
881 |
$query = $wpdb->prepare( "SELECT meta_key, meta_value FROM {$wpdb->postmeta} WHERE post_id = %d", $object_id );
|
882 |
$results = $wpdb->get_results( $query, ARRAY_A );
|
883 |
|
884 |
+
return ! empty( $results ) && is_array( $results ) ? $results : array();
|
885 |
}
|
886 |
|
887 |
/**
|
common/src/Tribe/Notices.php
CHANGED
@@ -5,7 +5,7 @@ class Tribe__Notices {
|
|
5 |
* Notices to be displayed in the admin
|
6 |
* @var array
|
7 |
*/
|
8 |
-
protected $notices =
|
9 |
|
10 |
/**
|
11 |
* Define an admin notice
|
5 |
* Notices to be displayed in the admin
|
6 |
* @var array
|
7 |
*/
|
8 |
+
protected $notices = array();
|
9 |
|
10 |
/**
|
11 |
* Define an admin notice
|
common/src/Tribe/PUE/Checker.php
CHANGED
@@ -235,7 +235,7 @@ if ( ! class_exists( 'Tribe__PUE__Checker' ) ) {
|
|
235 |
* @return string
|
236 |
*/
|
237 |
public function get_pue_update_url() {
|
238 |
-
$pue_update_url = 'https://pue.
|
239 |
|
240 |
if ( defined( 'PUE_UPDATE_URL' ) ) {
|
241 |
$pue_update_url = PUE_UPDATE_URL;
|
@@ -498,7 +498,7 @@ if ( ! class_exists( 'Tribe__PUE__Checker' ) ) {
|
|
498 |
if ( 'event-aggregator' === $this->get_slug() ) {
|
499 |
$no_license_tooltip = sprintf(
|
500 |
esc_html__( '%1$sBuy a license%2$s for the Event Aggregator service to access additional import features.', 'tribe-common' ),
|
501 |
-
'<a href="https://
|
502 |
'</a>'
|
503 |
);
|
504 |
}
|
@@ -587,7 +587,7 @@ if ( ! class_exists( 'Tribe__PUE__Checker' ) ) {
|
|
587 |
var $el = $( this );
|
588 |
var $field = $el.find( 'input' );
|
589 |
|
590 |
-
if ( '' === $field.val()
|
591 |
$el.find( '.license-test-results' ).hide();
|
592 |
}
|
593 |
} );
|
@@ -841,15 +841,7 @@ if ( ! class_exists( 'Tribe__PUE__Checker' ) ) {
|
|
841 |
$class_name = $autoloader->get_prefix_by_slug( $this->get_slug() );
|
842 |
|
843 |
if ( $class_name ) {
|
844 |
-
$
|
845 |
-
|
846 |
-
if ( $is_namespaced ) {
|
847 |
-
// Handle class prefixes like Tribe\Plugin\.
|
848 |
-
$class_name .= 'PUE\Helper';
|
849 |
-
} else {
|
850 |
-
// Handle class prefixes like Tribe__Plugin__.
|
851 |
-
$class_name .= 'PUE__Helper';
|
852 |
-
}
|
853 |
|
854 |
if ( constant( $class_name . '::DATA' ) ) {
|
855 |
$license_key = constant( $class_name . '::DATA' );
|
@@ -904,7 +896,7 @@ if ( ! class_exists( 'Tribe__PUE__Checker' ) ) {
|
|
904 |
$response['status'] = 0;
|
905 |
|
906 |
if ( ! $key ) {
|
907 |
-
$response['message'] = sprintf( esc_html__( 'Hmmm... something\'s wrong with this validator. Please contact %ssupport%s.', 'tribe-common' ), '<a href="https://
|
908 |
return $response;
|
909 |
}
|
910 |
|
@@ -974,7 +966,7 @@ if ( ! class_exists( 'Tribe__PUE__Checker' ) ) {
|
|
974 |
}
|
975 |
|
976 |
public function get_license_expired_message() {
|
977 |
-
return '<a href="https://
|
978 |
__( 'Renew Your License Now', 'tribe-common' ) .
|
979 |
'<span class="screen-reader-text">' .
|
980 |
__( ' (opens in a new window)', 'tribe-common' ) .
|
235 |
* @return string
|
236 |
*/
|
237 |
public function get_pue_update_url() {
|
238 |
+
$pue_update_url = 'https://pue.tri.be';
|
239 |
|
240 |
if ( defined( 'PUE_UPDATE_URL' ) ) {
|
241 |
$pue_update_url = PUE_UPDATE_URL;
|
498 |
if ( 'event-aggregator' === $this->get_slug() ) {
|
499 |
$no_license_tooltip = sprintf(
|
500 |
esc_html__( '%1$sBuy a license%2$s for the Event Aggregator service to access additional import features.', 'tribe-common' ),
|
501 |
+
'<a href="https://m.tri.be/196y" target="_blank">',
|
502 |
'</a>'
|
503 |
);
|
504 |
}
|
587 |
var $el = $( this );
|
588 |
var $field = $el.find( 'input' );
|
589 |
|
590 |
+
if ( '' === $.trim( $field.val() ) ) {
|
591 |
$el.find( '.license-test-results' ).hide();
|
592 |
}
|
593 |
} );
|
841 |
$class_name = $autoloader->get_prefix_by_slug( $this->get_slug() );
|
842 |
|
843 |
if ( $class_name ) {
|
844 |
+
$class_name .= 'PUE__Helper';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
845 |
|
846 |
if ( constant( $class_name . '::DATA' ) ) {
|
847 |
$license_key = constant( $class_name . '::DATA' );
|
896 |
$response['status'] = 0;
|
897 |
|
898 |
if ( ! $key ) {
|
899 |
+
$response['message'] = sprintf( esc_html__( 'Hmmm... something\'s wrong with this validator. Please contact %ssupport%s.', 'tribe-common' ), '<a href="https://m.tri.be/1u">', '</a>' );
|
900 |
return $response;
|
901 |
}
|
902 |
|
966 |
}
|
967 |
|
968 |
public function get_license_expired_message() {
|
969 |
+
return '<a href="https://m.tri.be/195y" target="_blank" class="button button-primary">' .
|
970 |
__( 'Renew Your License Now', 'tribe-common' ) .
|
971 |
'<span class="screen-reader-text">' .
|
972 |
__( ' (opens in a new window)', 'tribe-common' ) .
|
common/src/Tribe/PUE/Notices.php
CHANGED
@@ -10,9 +10,9 @@ class Tribe__PUE__Notices {
|
|
10 |
const EXPIRED_KEY = 'expired_key';
|
11 |
const STORE_KEY = 'tribe_pue_key_notices';
|
12 |
|
13 |
-
protected $registered =
|
14 |
-
protected $saved_notices =
|
15 |
-
protected $notices =
|
16 |
|
17 |
protected $plugin_names = [
|
18 |
'pue_install_key_event_tickets_plus' => 'Event Tickets Plus',
|
@@ -30,8 +30,8 @@ class Tribe__PUE__Notices {
|
|
30 |
*/
|
31 |
public function __construct() {
|
32 |
$this->populate();
|
33 |
-
add_action( 'current_screen',
|
34 |
-
add_action( 'tribe_pue_notices_save_notices',
|
35 |
}
|
36 |
|
37 |
/**
|
@@ -53,7 +53,7 @@ class Tribe__PUE__Notices {
|
|
53 |
* groups.
|
54 |
*/
|
55 |
protected function populate() {
|
56 |
-
$this->saved_notices = (array) get_option( self::STORE_KEY,
|
57 |
|
58 |
if ( empty( $this->saved_notices ) ) {
|
59 |
return;
|
@@ -193,7 +193,7 @@ class Tribe__PUE__Notices {
|
|
193 |
*/
|
194 |
public function setup_notices() {
|
195 |
// Don't allow this to run multiple times
|
196 |
-
remove_action( 'current_screen',
|
197 |
|
198 |
// No need to display license key notices to users without appropriate capabilities
|
199 |
if ( ! current_user_can( 'install_plugins' ) ) {
|
@@ -205,7 +205,7 @@ class Tribe__PUE__Notices {
|
|
205 |
continue;
|
206 |
}
|
207 |
|
208 |
-
$callback =
|
209 |
|
210 |
if ( is_callable( $callback ) ) {
|
211 |
tribe_notice( 'pue_key-' . $notice_type, $callback, 'dismiss=1&type=warning' );
|
@@ -237,9 +237,9 @@ class Tribe__PUE__Notices {
|
|
237 |
|
238 |
$empty_keys = $wpdb->get_results( $sql, ARRAY_N );
|
239 |
|
240 |
-
$formatted_empty_keys =
|
241 |
foreach ( $empty_keys as $empty_key ) {
|
242 |
-
$empty_key = Tribe__Utils__Array::get( $empty_key,
|
243 |
$formatted_empty_keys[] = Tribe__Utils__Array::get( $this->plugin_names, $empty_key );
|
244 |
}
|
245 |
|
@@ -288,7 +288,7 @@ class Tribe__PUE__Notices {
|
|
288 |
'tribe-common'
|
289 |
),
|
290 |
$plugin_names,
|
291 |
-
'<a href="http://
|
292 |
'</a>'
|
293 |
);
|
294 |
|
@@ -333,12 +333,12 @@ class Tribe__PUE__Notices {
|
|
333 |
'tribe-common'
|
334 |
),
|
335 |
$plugin_names,
|
336 |
-
'<a href="http://
|
337 |
'</a>'
|
338 |
);
|
339 |
|
340 |
$renew_action =
|
341 |
-
'<a href="http://
|
342 |
__( 'Renew Your License Now', 'tribe-common' ) .
|
343 |
'<span class="screen-reader-text">' .
|
344 |
__( ' (opens in a new window)', 'tribe-common' ) .
|
@@ -364,7 +364,7 @@ class Tribe__PUE__Notices {
|
|
364 |
'tribe-common'
|
365 |
),
|
366 |
$plugin_names,
|
367 |
-
'<a href="http://
|
368 |
'</a>'
|
369 |
);
|
370 |
|
@@ -380,7 +380,7 @@ class Tribe__PUE__Notices {
|
|
380 |
protected function render_notice( $slug, $inner_html ) {
|
381 |
|
382 |
// Enqueue the notice CSS.
|
383 |
-
tribe( 'assets' )->enqueue(
|
384 |
|
385 |
$mascot = esc_url( Tribe__Main::instance()->plugin_url . 'src/resources/images/mascot.png' );
|
386 |
|
@@ -401,7 +401,7 @@ class Tribe__PUE__Notices {
|
|
401 |
protected function find_your_key_text() {
|
402 |
return sprintf(
|
403 |
__( 'You can always check the status of your licenses by logging in to %1$syour account on theeventscalendar.com%2$s.', 'tribe-common' ),
|
404 |
-
'<a href="http://
|
405 |
'</a>'
|
406 |
);
|
407 |
}
|
10 |
const EXPIRED_KEY = 'expired_key';
|
11 |
const STORE_KEY = 'tribe_pue_key_notices';
|
12 |
|
13 |
+
protected $registered = array();
|
14 |
+
protected $saved_notices = array();
|
15 |
+
protected $notices = array();
|
16 |
|
17 |
protected $plugin_names = [
|
18 |
'pue_install_key_event_tickets_plus' => 'Event Tickets Plus',
|
30 |
*/
|
31 |
public function __construct() {
|
32 |
$this->populate();
|
33 |
+
add_action( 'current_screen', array( $this, 'setup_notices' ) );
|
34 |
+
add_action( 'tribe_pue_notices_save_notices', array( $this, 'maybe_undismiss_notices' ) );
|
35 |
}
|
36 |
|
37 |
/**
|
53 |
* groups.
|
54 |
*/
|
55 |
protected function populate() {
|
56 |
+
$this->saved_notices = (array) get_option( self::STORE_KEY, array() );
|
57 |
|
58 |
if ( empty( $this->saved_notices ) ) {
|
59 |
return;
|
193 |
*/
|
194 |
public function setup_notices() {
|
195 |
// Don't allow this to run multiple times
|
196 |
+
remove_action( 'current_screen', array( $this, 'setup_notices' ) );
|
197 |
|
198 |
// No need to display license key notices to users without appropriate capabilities
|
199 |
if ( ! current_user_can( 'install_plugins' ) ) {
|
205 |
continue;
|
206 |
}
|
207 |
|
208 |
+
$callback = array( $this, 'render_' . $notice_type );
|
209 |
|
210 |
if ( is_callable( $callback ) ) {
|
211 |
tribe_notice( 'pue_key-' . $notice_type, $callback, 'dismiss=1&type=warning' );
|
237 |
|
238 |
$empty_keys = $wpdb->get_results( $sql, ARRAY_N );
|
239 |
|
240 |
+
$formatted_empty_keys = array();
|
241 |
foreach ( $empty_keys as $empty_key ) {
|
242 |
+
$empty_key = Tribe__Utils__Array::get( $empty_key, array( 0 ) );
|
243 |
$formatted_empty_keys[] = Tribe__Utils__Array::get( $this->plugin_names, $empty_key );
|
244 |
}
|
245 |
|
288 |
'tribe-common'
|
289 |
),
|
290 |
$plugin_names,
|
291 |
+
'<a href="http://m.tri.be/19n4" target="_blank">',
|
292 |
'</a>'
|
293 |
);
|
294 |
|
333 |
'tribe-common'
|
334 |
),
|
335 |
$plugin_names,
|
336 |
+
'<a href="http://m.tri.be/195d" target="_blank">',
|
337 |
'</a>'
|
338 |
);
|
339 |
|
340 |
$renew_action =
|
341 |
+
'<a href="http://m.tri.be/195y" target="_blank" class="button button-primary">' .
|
342 |
__( 'Renew Your License Now', 'tribe-common' ) .
|
343 |
'<span class="screen-reader-text">' .
|
344 |
__( ' (opens in a new window)', 'tribe-common' ) .
|
364 |
'tribe-common'
|
365 |
),
|
366 |
$plugin_names,
|
367 |
+
'<a href="http://m.tri.be/195d" target="_blank">',
|
368 |
'</a>'
|
369 |
);
|
370 |
|
380 |
protected function render_notice( $slug, $inner_html ) {
|
381 |
|
382 |
// Enqueue the notice CSS.
|
383 |
+
tribe( 'assets' )->enqueue( array( 'tribe-common-admin' ) );
|
384 |
|
385 |
$mascot = esc_url( Tribe__Main::instance()->plugin_url . 'src/resources/images/mascot.png' );
|
386 |
|
401 |
protected function find_your_key_text() {
|
402 |
return sprintf(
|
403 |
__( 'You can always check the status of your licenses by logging in to %1$syour account on theeventscalendar.com%2$s.', 'tribe-common' ),
|
404 |
+
'<a href="http://m.tri.be/195d" target="_blank">',
|
405 |
'</a>'
|
406 |
);
|
407 |
}
|
common/src/Tribe/PUE/Package_Handler.php
CHANGED
@@ -102,7 +102,7 @@ class Tribe__PUE__Package_Handler {
|
|
102 |
protected function download( $package ) {
|
103 |
if ( empty( $this->filesystem ) ) {
|
104 |
// try to connect
|
105 |
-
$this->upgrader->fs_connect(
|
106 |
|
107 |
global $wp_filesystem;
|
108 |
|
102 |
protected function download( $package ) {
|
103 |
if ( empty( $this->filesystem ) ) {
|
104 |
// try to connect
|
105 |
+
$this->upgrader->fs_connect( array( WP_CONTENT_DIR, WP_PLUGIN_DIR ) );
|
106 |
|
107 |
global $wp_filesystem;
|
108 |
|
common/src/Tribe/PUE/Plugin_Info.php
CHANGED
@@ -93,7 +93,8 @@ if ( ! class_exists( 'Tribe__PUE__Plugin_Info' ) ) {
|
|
93 |
|
94 |
// The custom update API is built so that many fields have the same name and format
|
95 |
// as those returned by the native WordPress.org API. These can be assigned directly.
|
96 |
-
|
|
|
97 |
'name',
|
98 |
'slug',
|
99 |
'version',
|
@@ -108,8 +109,7 @@ if ( ! class_exists( 'Tribe__PUE__Plugin_Info' ) ) {
|
|
108 |
'api_expired',
|
109 |
'api_upgrade',
|
110 |
'api_invalid',
|
111 |
-
|
112 |
-
|
113 |
foreach ( $sameFormat as $field ) {
|
114 |
if ( isset( $this->$field ) ) {
|
115 |
$info->$field = $this->$field;
|
@@ -132,7 +132,7 @@ if ( ! class_exists( 'Tribe__PUE__Plugin_Info' ) ) {
|
|
132 |
} elseif ( is_array( $this->sections ) ) {
|
133 |
$info->sections = $this->sections;
|
134 |
} else {
|
135 |
-
$info->sections =
|
136 |
}
|
137 |
|
138 |
return $info;
|
93 |
|
94 |
// The custom update API is built so that many fields have the same name and format
|
95 |
// as those returned by the native WordPress.org API. These can be assigned directly.
|
96 |
+
|
97 |
+
$sameFormat = array(
|
98 |
'name',
|
99 |
'slug',
|
100 |
'version',
|
109 |
'api_expired',
|
110 |
'api_upgrade',
|
111 |
'api_invalid',
|
112 |
+
);
|
|
|
113 |
foreach ( $sameFormat as $field ) {
|
114 |
if ( isset( $this->$field ) ) {
|
115 |
$info->$field = $this->$field;
|
132 |
} elseif ( is_array( $this->sections ) ) {
|
133 |
$info->sections = $this->sections;
|
134 |
} else {
|
135 |
+
$info->sections = array( 'description' => '' );
|
136 |
}
|
137 |
|
138 |
return $info;
|
common/src/Tribe/PUE/Update_Prevention.php
CHANGED
@@ -20,7 +20,7 @@ class Update_Prevention {
|
|
20 |
*
|
21 |
* @param string $content Contents of the file in question.
|
22 |
*
|
23 |
-
* @return array Named array with [ class_name => version ] or empty if it
|
24 |
*/
|
25 |
public function get_dependencies( $content ) {
|
26 |
$regex = "/'(?<plugin>[^']*)'(?:[^']*)'(?<version>[^']*)',/";
|
@@ -36,7 +36,7 @@ class Update_Prevention {
|
|
36 |
|
37 |
/**
|
38 |
* Checks for the list of constants associate with plugin to make sure we are dealing
|
39 |
-
* with a plugin owned by
|
40 |
*
|
41 |
* @since 4.9.12
|
42 |
*
|
@@ -98,7 +98,7 @@ class Update_Prevention {
|
|
98 |
|
99 |
$register_path = $source . '/src/Tribe/Plugin_Register.php';
|
100 |
|
101 |
-
// Bail when the Plugin Register file
|
102 |
if ( ! file_exists( $register_path ) ) {
|
103 |
return $source;
|
104 |
}
|
@@ -116,7 +116,7 @@ class Update_Prevention {
|
|
116 |
|
117 |
$constant_name = $class_name . '::VERSION';
|
118 |
|
119 |
-
// Skip if we
|
120 |
if ( ! defined( $constant_name ) ) {
|
121 |
continue;
|
122 |
}
|
@@ -178,7 +178,7 @@ class Update_Prevention {
|
|
178 |
$plugins_classes = array_keys( $incompatible_plugins );
|
179 |
$plugins_list_html = tribe( 'pue.notices' )->get_formatted_plugin_names_from_classes( $plugins_classes );
|
180 |
|
181 |
-
$link_read_more = '<a href="http://
|
182 |
|
183 |
$message = sprintf(
|
184 |
esc_html__( 'Your update failed due to an incompatibility between the version (%1$s) of the %2$s you tried to update to and the version of %3$s that you are using. %4$s', 'tribe-common' ),
|
20 |
*
|
21 |
* @param string $content Contents of the file in question.
|
22 |
*
|
23 |
+
* @return array Named array with [ class_name => version ] or empty if it didnt find it.
|
24 |
*/
|
25 |
public function get_dependencies( $content ) {
|
26 |
$regex = "/'(?<plugin>[^']*)'(?:[^']*)'(?<version>[^']*)',/";
|
36 |
|
37 |
/**
|
38 |
* Checks for the list of constants associate with plugin to make sure we are dealing
|
39 |
+
* with a plugin owned by Modern Tribe.
|
40 |
*
|
41 |
* @since 4.9.12
|
42 |
*
|
98 |
|
99 |
$register_path = $source . '/src/Tribe/Plugin_Register.php';
|
100 |
|
101 |
+
// Bail when the Plugin Register file doesnt exist.
|
102 |
if ( ! file_exists( $register_path ) ) {
|
103 |
return $source;
|
104 |
}
|
116 |
|
117 |
$constant_name = $class_name . '::VERSION';
|
118 |
|
119 |
+
// Skip if we cant find the version constant.
|
120 |
if ( ! defined( $constant_name ) ) {
|
121 |
continue;
|
122 |
}
|
178 |
$plugins_classes = array_keys( $incompatible_plugins );
|
179 |
$plugins_list_html = tribe( 'pue.notices' )->get_formatted_plugin_names_from_classes( $plugins_classes );
|
180 |
|
181 |
+
$link_read_more = '<a href="http://m.tri.be/1aev" target="_blank">' . esc_html__( 'Read more', 'tribe-common' ) . '.</a>';
|
182 |
|
183 |
$message = sprintf(
|
184 |
esc_html__( 'Your update failed due to an incompatibility between the version (%1$s) of the %2$s you tried to update to and the version of %3$s that you are using. %4$s', 'tribe-common' ),
|
common/src/Tribe/PUE/Utility.php
CHANGED
@@ -28,7 +28,7 @@ if ( ! class_exists( 'Tribe__PUE__Utility' ) ) {
|
|
28 |
public $version;
|
29 |
public $homepage;
|
30 |
public $download_url;
|
31 |
-
public $sections =
|
32 |
public $upgrade_notice;
|
33 |
public $custom_update;
|
34 |
|
@@ -61,7 +61,7 @@ if ( ! class_exists( 'Tribe__PUE__Utility' ) ) {
|
|
61 |
*/
|
62 |
public static function from_plugin_info( $info ) {
|
63 |
$update = new Tribe__PUE__Utility();
|
64 |
-
$copyFields =
|
65 |
'id',
|
66 |
'slug',
|
67 |
'version',
|
@@ -76,7 +76,7 @@ if ( ! class_exists( 'Tribe__PUE__Utility' ) ) {
|
|
76 |
'api_invalid_message',
|
77 |
'api_inline_invalid_message',
|
78 |
'custom_update',
|
79 |
-
|
80 |
|
81 |
foreach ( $copyFields as $field ) {
|
82 |
if ( ! isset( $info->$field ) ) {
|
28 |
public $version;
|
29 |
public $homepage;
|
30 |
public $download_url;
|
31 |
+
public $sections = array();
|
32 |
public $upgrade_notice;
|
33 |
public $custom_update;
|
34 |
|
61 |
*/
|
62 |
public static function from_plugin_info( $info ) {
|
63 |
$update = new Tribe__PUE__Utility();
|
64 |
+
$copyFields = array(
|
65 |
'id',
|
66 |
'slug',
|
67 |
'version',
|
76 |
'api_invalid_message',
|
77 |
'api_inline_invalid_message',
|
78 |
'custom_update',
|
79 |
+
);
|
80 |
|
81 |
foreach ( $copyFields as $field ) {
|
82 |
if ( ! isset( $info->$field ) ) {
|
common/src/Tribe/Plugin_Meta_Links.php
CHANGED
@@ -30,7 +30,7 @@ class Tribe__Plugin_Meta_Links {
|
|
30 |
* }
|
31 |
* }
|
32 |
*/
|
33 |
-
private $meta_links =
|
34 |
|
35 |
/**
|
36 |
* Returns the singleton instance of this class.
|
@@ -42,7 +42,7 @@ class Tribe__Plugin_Meta_Links {
|
|
42 |
}
|
43 |
|
44 |
private function __construct() {
|
45 |
-
add_action( 'plugin_row_meta',
|
46 |
}
|
47 |
|
48 |
/**
|
@@ -53,7 +53,7 @@ class Tribe__Plugin_Meta_Links {
|
|
53 |
* @param string $href URL for the link.
|
54 |
* @param array $attributes Key => value attributes for element.
|
55 |
*/
|
56 |
-
public function add_link( $plugin, $title, $href, $attributes =
|
57 |
$attributes['href'] = $href;
|
58 |
|
59 |
// Build the <a> element.
|
@@ -79,12 +79,12 @@ class Tribe__Plugin_Meta_Links {
|
|
79 |
$basename = plugin_basename( $plugin );
|
80 |
|
81 |
// Get any current links for this plugin.
|
82 |
-
$cur_links = Tribe__Utils__Array::get( $this->meta_links, $basename,
|
83 |
|
84 |
-
$cur_links[] =
|
85 |
-
'html'
|
86 |
'remove' => $remove,
|
87 |
-
|
88 |
|
89 |
$this->meta_links = Tribe__Utils__Array::set( $this->meta_links, $basename, $cur_links );
|
90 |
}
|
@@ -99,7 +99,7 @@ class Tribe__Plugin_Meta_Links {
|
|
99 |
*/
|
100 |
public function filter_meta_links( $links, $basename ) {
|
101 |
// Gets any links that are set for this plugin, defaults to an empty array.
|
102 |
-
$set_links = Tribe__Utils__Array::get( $this->meta_links, $basename,
|
103 |
|
104 |
foreach ( $set_links as $link ) {
|
105 |
|
30 |
* }
|
31 |
* }
|
32 |
*/
|
33 |
+
private $meta_links = array();
|
34 |
|
35 |
/**
|
36 |
* Returns the singleton instance of this class.
|
42 |
}
|
43 |
|
44 |
private function __construct() {
|
45 |
+
add_action( 'plugin_row_meta', array( $this, 'filter_meta_links' ), 10, 2 );
|
46 |
}
|
47 |
|
48 |
/**
|
53 |
* @param string $href URL for the link.
|
54 |
* @param array $attributes Key => value attributes for element.
|
55 |
*/
|
56 |
+
public function add_link( $plugin, $title, $href, $attributes = array() ) {
|
57 |
$attributes['href'] = $href;
|
58 |
|
59 |
// Build the <a> element.
|
79 |
$basename = plugin_basename( $plugin );
|
80 |
|
81 |
// Get any current links for this plugin.
|
82 |
+
$cur_links = Tribe__Utils__Array::get( $this->meta_links, $basename, array() );
|
83 |
|
84 |
+
$cur_links[] = array(
|
85 |
+
'html' => $html,
|
86 |
'remove' => $remove,
|
87 |
+
);
|
88 |
|
89 |
$this->meta_links = Tribe__Utils__Array::set( $this->meta_links, $basename, $cur_links );
|
90 |
}
|
99 |
*/
|
100 |
public function filter_meta_links( $links, $basename ) {
|
101 |
// Gets any links that are set for this plugin, defaults to an empty array.
|
102 |
+
$set_links = Tribe__Utils__Array::get( $this->meta_links, $basename, array() );
|
103 |
|
104 |
foreach ( $set_links as $link ) {
|
105 |
|
common/src/Tribe/Plugins.php
CHANGED
@@ -131,37 +131,5 @@ if ( ! class_exists( 'Tribe__Plugins' ) ) {
|
|
131 |
return apply_filters( 'tribe_plugins_get_list', $this->tribe_plugins );
|
132 |
}
|
133 |
|
134 |
-
/**
|
135 |
-
* Checks if given plugin is active. Usually a The Events Calendar plugin.
|
136 |
-
*
|
137 |
-
* @param string $plugin_name The name of the plugin. Each plugin defines their name upon hooking on the filter.
|
138 |
-
*
|
139 |
-
* @since 4.12.1
|
140 |
-
*
|
141 |
-
* @return bool True if plugin is active. False if plugin is not active.
|
142 |
-
*/
|
143 |
-
public static function is_active( $plugin_name ) {
|
144 |
-
if ( ! did_action( "plugins_loaded" ) ) {
|
145 |
-
_doing_it_wrong(
|
146 |
-
__METHOD__,
|
147 |
-
__( 'Using this function before "plugins_loaded" action has fired can return unreliable results.', 'tribe-common' ),
|
148 |
-
'4.12.6'
|
149 |
-
);
|
150 |
-
}
|
151 |
-
|
152 |
-
/**
|
153 |
-
* Filters the array that each Tribe plugin overrides to
|
154 |
-
* set itself as active when this function is called.
|
155 |
-
*
|
156 |
-
* @example [ 'the-events-calendar' => true, 'event-tickets' => true ]
|
157 |
-
*
|
158 |
-
* @since 4.12.1
|
159 |
-
*
|
160 |
-
* @return array Plugin slugs as keys and bool as value for whether it's active or not.
|
161 |
-
*/
|
162 |
-
$plugins = apply_filters( 'tribe_active_plugins', [] );
|
163 |
-
|
164 |
-
return isset( $plugins[ $plugin_name ] ) && tribe_is_truthy( $plugins[ $plugin_name ] );
|
165 |
-
}
|
166 |
}
|
167 |
}
|
131 |
return apply_filters( 'tribe_plugins_get_list', $this->tribe_plugins );
|
132 |
}
|
133 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
134 |
}
|
135 |
}
|
common/src/Tribe/Plugins_API.php
CHANGED
@@ -20,213 +20,128 @@ class Tribe__Plugins_API {
|
|
20 |
* @return array
|
21 |
*/
|
22 |
public function get_products() {
|
23 |
-
$products =
|
24 |
-
'the-events-calendar'
|
25 |
-
'title'
|
26 |
-
'slug'
|
27 |
-
'link'
|
28 |
-
'description'
|
29 |
-
'
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
'
|
36 |
-
'
|
37 |
-
'
|
38 |
-
'
|
39 |
-
'
|
40 |
-
],
|
41 |
-
'event-aggregator' => [
|
42 |
-
'title' => __( 'Event Aggregator', 'tribe-common' ),
|
43 |
-
'slug' => 'event-aggregator',
|
44 |
-
'link' => 'https://evnt.is/1aj0',
|
45 |
-
'description' => __( 'Automated imports for your calendar', 'tribe-common' ),
|
46 |
-
'features' => [
|
47 |
-
__( 'Schedule automated imports', 'tribe-common' ),
|
48 |
-
__( 'Customizable', 'tribe-common' ),
|
49 |
-
__( 'Works with Google Calendar, Meetup, and more', 'tribe-common' ),
|
50 |
-
__( 'Refine by date, location, or keyword', 'tribe-common' ),
|
51 |
-
],
|
52 |
-
'image' => 'images/shop/aggregator.jpg',
|
53 |
-
'logo' => 'images/logo/event-aggregator.svg',
|
54 |
-
'is_installed' => class_exists( 'Tribe__Events__Aggregator' ) && Tribe__Events__Aggregator::is_service_active(),
|
55 |
-
'free' => false,
|
56 |
'active_installs' => 20000,
|
57 |
-
|
58 |
-
'events-calendar-pro'
|
59 |
-
'title'
|
60 |
-
'slug'
|
61 |
-
'link'
|
62 |
-
'
|
63 |
-
'
|
64 |
-
__( '
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
'
|
70 |
-
'logo' => 'images/logo/events-calendar-pro.svg',
|
71 |
-
'is_installed' => class_exists( 'Tribe__Events__Pro__Main' ),
|
72 |
-
'free' => false,
|
73 |
'active_installs' => 100000,
|
74 |
-
|
75 |
-
'event-tickets'
|
76 |
-
'title'
|
77 |
-
'slug'
|
78 |
-
'link'
|
79 |
-
'description'
|
80 |
-
'
|
81 |
-
|
82 |
-
__( 'Paypal integration', 'tribe-common' ),
|
83 |
-
__( 'Attendee reports', 'tribe-common' ),
|
84 |
-
__( 'Customizable ticket template', 'tribe-common' ),
|
85 |
-
],
|
86 |
-
'image' => 'images/shop/tickets.jpg',
|
87 |
-
'logo' => 'images/logo/event-tickets.svg',
|
88 |
-
'is_installed' => class_exists( 'Tribe__Tickets__Main' ),
|
89 |
-
'free' => true,
|
90 |
'active_installs' => 20000,
|
91 |
-
|
92 |
-
'event-tickets-plus'
|
93 |
-
'title'
|
94 |
-
'slug'
|
95 |
-
'link'
|
96 |
-
'
|
97 |
-
'
|
98 |
-
__( '
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
'
|
104 |
-
'logo' => 'images/logo/event-tickets-plus.svg',
|
105 |
-
'is_installed' => class_exists( 'Tribe__Tickets_Plus__Main' ),
|
106 |
-
'free' => false,
|
107 |
'active_installs' => 10000,
|
108 |
-
|
109 |
-
'promoter'
|
110 |
-
'title'
|
111 |
-
'slug'
|
112 |
-
'link'
|
113 |
-
'
|
114 |
-
'
|
115 |
-
|
116 |
-
|
117 |
-
__( 'Streamline your email process', 'tribe-common' ),
|
118 |
-
__( 'Segment your attendee lists', 'tribe-common' ),
|
119 |
-
],
|
120 |
-
'image' => 'images/shop/promoter.jpg',
|
121 |
-
'logo' => 'images/logo/promoter.svg',
|
122 |
-
'is_installed' => tribe( 'promoter.pue' )->has_license_key(),
|
123 |
-
'free' => false,
|
124 |
'active_installs' => 1000,
|
125 |
-
|
126 |
-
'tribe-filterbar'
|
127 |
-
'title'
|
128 |
-
'slug'
|
129 |
-
'link'
|
130 |
-
'
|
131 |
-
'
|
132 |
-
|
133 |
-
|
134 |
-
__( 'Filter category, price, and more', 'tribe-common' ),
|
135 |
-
__( 'Filter distance (for Events Calendar Pro)', 'tribe-common' ),
|
136 |
-
],
|
137 |
-
'image' => 'images/shop/filter-bar.jpg',
|
138 |
-
'logo' => 'images/logo/filterbar.svg',
|
139 |
-
'is_installed' => class_exists( 'Tribe__Events__Filterbar__View' ),
|
140 |
-
'free' => false,
|
141 |
'active_installs' => 20000,
|
142 |
-
|
143 |
-
'events-community'
|
144 |
-
'title'
|
145 |
-
'slug'
|
146 |
-
'link'
|
147 |
-
'
|
148 |
-
'
|
149 |
-
|
150 |
-
|
151 |
-
__( 'Registered User Settings', 'tribe-common' ),
|
152 |
-
__( 'Email notifications', 'tribe-common' ),
|
153 |
-
],
|
154 |
-
'image' => 'images/shop/community.jpg',
|
155 |
-
'logo' => 'images/logo/community-events.svg',
|
156 |
-
'is_installed' => class_exists( 'Tribe__Events__Community__Main' ),
|
157 |
-
'free' => false,
|
158 |
'active_installs' => 20000,
|
159 |
-
|
160 |
-
'events-community-tickets' =>
|
161 |
-
'title'
|
162 |
-
'slug'
|
163 |
-
'link'
|
164 |
-
'
|
165 |
-
'
|
166 |
-
|
167 |
-
|
168 |
-
|
169 |
-
__( 'Sales reporting', 'tribe-common' ),
|
170 |
-
],
|
171 |
-
'requires' => _x( 'Event Tickets Plus and Community Events', 'Names of required plugins for Community Tickets', 'tribe-common' ),
|
172 |
-
'image' => 'images/shop/community-tickets.jpg',
|
173 |
-
'logo' => 'images/logo/community-tickets.svg',
|
174 |
-
'is_installed' => class_exists( 'Tribe__Events__Community__Tickets__Main' ),
|
175 |
-
'free' => false,
|
176 |
'active_installs' => 10000,
|
177 |
-
|
178 |
-
'tribe-eventbrite'
|
179 |
-
'title'
|
180 |
-
'slug'
|
181 |
-
'link'
|
182 |
-
'
|
183 |
-
'
|
184 |
-
__( '
|
185 |
-
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
'
|
190 |
-
'logo' => 'images/logo/eventbrite-tickets.svg',
|
191 |
-
'is_installed' => class_exists( 'Tribe__Events__Tickets__Eventbrite__Main' ),
|
192 |
-
'free' => false,
|
193 |
'active_installs' => 20000,
|
194 |
-
|
195 |
-
'image-widget-plus'
|
196 |
-
'title'
|
197 |
-
'slug'
|
198 |
-
'link'
|
199 |
-
'
|
200 |
-
'
|
201 |
-
|
202 |
-
|
203 |
-
__( 'Slideshow', 'tribe-common' ),
|
204 |
-
__( 'Random Images', 'tribe-common' ),
|
205 |
-
],
|
206 |
-
'image' => 'images/shop/image-widget-plus.jpg',
|
207 |
-
'logo' => 'images/logo/image-widget-plus.svg',
|
208 |
-
'is_installed' => class_exists( 'Tribe__Image__Plus__Main' ),
|
209 |
-
'free' => false,
|
210 |
'active_installs' => 2500,
|
211 |
-
|
212 |
-
|
213 |
-
'title' => __( 'Virtual Events', 'tribe-common' ),
|
214 |
-
'slug' => 'events-virtual',
|
215 |
-
'link' => 'http://evnt.is/virtual-events',
|
216 |
-
'description' => __( 'Features to optimize your calendar for virtual events.', 'tribe-common' ),
|
217 |
-
'features' => [
|
218 |
-
__( 'Zoom integration', 'tribe-common' ),
|
219 |
-
__( 'Virtual event labels', 'tribe-common' ),
|
220 |
-
__( 'Status control for canceled or postponed events', 'tribe-common' ),
|
221 |
-
__( 'Embed livestreams and videos', 'tribe-common' ),
|
222 |
-
],
|
223 |
-
'image' => 'images/shop/virtual-events.jpg',
|
224 |
-
'logo' => 'images/logo/virtual-events.svg',
|
225 |
-
'is_installed' => defined( 'EVENTS_VIRTUAL_FILE' ),
|
226 |
-
'free' => false,
|
227 |
-
'active_installs' => 2500,
|
228 |
-
],
|
229 |
-
];
|
230 |
|
231 |
return $products;
|
232 |
}
|
20 |
* @return array
|
21 |
*/
|
22 |
public function get_products() {
|
23 |
+
$products = array(
|
24 |
+
'the-events-calendar' => array(
|
25 |
+
'title' => __( 'The Events Calendar', 'tribe-common' ),
|
26 |
+
'slug' => 'the-events-calendar',
|
27 |
+
'link' => null,
|
28 |
+
'description' => __( 'Create an events calendar and manage it with ease. The Events Calendar plugin provides professional-level quality and features backed by a team you can trust.', 'tribe-common' ),
|
29 |
+
'image' => 'https://ps.w.org/the-events-calendar/assets/icon-128x128.png?rev=1342379',
|
30 |
+
'is_installed' => class_exists( 'Tribe__Events__Main' ),
|
31 |
+
'active_installs' => 500000,
|
32 |
+
),
|
33 |
+
'event-aggregator' => array(
|
34 |
+
'title' => __( 'Event Aggregator', 'tribe-common' ),
|
35 |
+
'slug' => 'event-aggregator',
|
36 |
+
'link' => 'https://theeventscalendar.com/product/event-aggregator/?utm_campaign=in-app&utm_source=addonspage&utm_medium=event-aggregator&utm_content=appstoreembedded-1',
|
37 |
+
'description' => __( 'Event Aggregator adds massive import functionality to your calendar. Before you know it, you’ll be importing events from Meetup, Eventbrite, Google Calendar, iCalendar, and other URLs with ease. Schedule imports to run automatically behind-the-scenes or run them manually when you’re ready. Go ahead and import to your heart’s content—Event Aggregator hooks you up with a central dashboard in the admin to make managing your imports a breeze.', 'tribe-common' ),
|
38 |
+
'image' => 'images/app-shop-ical.jpg',
|
39 |
+
'is_installed' => class_exists( 'Tribe__Events__Aggregator' ) && Tribe__Events__Aggregator::is_service_active(),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
40 |
'active_installs' => 20000,
|
41 |
+
),
|
42 |
+
'events-calendar-pro' => array(
|
43 |
+
'title' => __( 'Events Calendar PRO', 'tribe-common' ),
|
44 |
+
'slug' => 'events-calendar-pro',
|
45 |
+
'link' => 'https://theeventscalendar.com/product/wordpress-events-calendar-pro/?utm_campaign=in-app&utm_source=addonspage&utm_medium=wordpress-events-calendar-pro&utm_content=appstoreembedded-1',
|
46 |
+
'buy-now' => 'http://m.tri.be/19o4',
|
47 |
+
'description' => sprintf(
|
48 |
+
__( 'The Events Calendar PRO is a paid Add-On to our open source WordPress plugin %1$sThe Events Calendar%2$s. PRO offers a whole host of calendar features including recurring events, custom event attributes, saved venues and organizers, venue pages, advanced event admin and lots more.', 'tribe-common' ),
|
49 |
+
'<a href="http://m.tri.be/18vc">',
|
50 |
+
'</a>'
|
51 |
+
),
|
52 |
+
'image' => 'images/app-shop-pro.jpg',
|
53 |
+
'is_installed' => class_exists( 'Tribe__Events__Pro__Main' ),
|
|
|
|
|
|
|
54 |
'active_installs' => 100000,
|
55 |
+
),
|
56 |
+
'event-tickets' => array(
|
57 |
+
'title' => __( 'Event Tickets', 'tribe-common' ),
|
58 |
+
'slug' => 'event-tickets',
|
59 |
+
'link' => null,
|
60 |
+
'description' => __( 'Event Tickets provides a simple way for visitors to RSVP to your events. As a standalone plugin, it enables you to add RSVP functionality to posts or pages. When paired with The Events Calendar, you can add that same RSVP functionality directly to your event listings.', 'tribe-common' ),
|
61 |
+
'image' => 'https://ps.w.org/event-tickets/assets/icon-128x128.png?rev=1299138',
|
62 |
+
'is_installed' => class_exists( 'Tribe__Tickets__Main' ),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
63 |
'active_installs' => 20000,
|
64 |
+
),
|
65 |
+
'event-tickets-plus' => array(
|
66 |
+
'title' => __( 'Event Tickets Plus', 'tribe-common' ),
|
67 |
+
'slug' => 'event-tickets-plus',
|
68 |
+
'link' => 'https://theeventscalendar.com/product/wordpress-event-tickets-plus/?utm_campaign=in-app&utm_source=addonspage&utm_medium=wordpress-event-tickets-plus&utm_content=appstoreembedded-1',
|
69 |
+
'buy-now' => 'http://m.tri.be/19o5',
|
70 |
+
'description' => sprintf(
|
71 |
+
__( 'Event Tickets Plus allows you to sell tickets to your events using WooCommerce, Easy Digital Downloads, or our built in Tribe Commerce tool. Add tickets to your posts and pages, or add %1$sThe Events Calendar%2$s and sell tickets from your event listings. Create custom registration forms, manage attendees, use custom capacity options, and more. Guest check in is easy with QR codes and our custom scanning app.', 'tribe-common' ),
|
72 |
+
'<a href="http://m.tri.be/18vc">',
|
73 |
+
'</a>'
|
74 |
+
),
|
75 |
+
'image' => 'images/app-shop-tickets-plus.jpg',
|
76 |
+
'is_installed' => class_exists( 'Tribe__Tickets_Plus__Main' ),
|
|
|
|
|
|
|
77 |
'active_installs' => 10000,
|
78 |
+
),
|
79 |
+
'promoter' => array(
|
80 |
+
'title' => __( 'Promoter', 'tribe-common' ),
|
81 |
+
'slug' => 'promoter',
|
82 |
+
'link' => 'https://theeventscalendar.com/product/promoter/?utm_campaign=in-app&utm_source=addonspage&utm_medium=wordpress-events-promoter&utm_content=appstoreembedded-1',
|
83 |
+
'buy-now' => 'http://m.tri.be/1acy',
|
84 |
+
'description' => __( 'With Promoter, you’ll connect with your community via email through every stage of your event, bolster event attendance, and manage notifications more efficiently than ever. Increase event attendance and engagement by automatically sending reminders for on-sale dates, event times and more.', 'tribe-common' ),
|
85 |
+
'image' => 'images/app-shop-promoter.jpg',
|
86 |
+
'is_installed' => false,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
87 |
'active_installs' => 1000,
|
88 |
+
),
|
89 |
+
'tribe-filterbar' => array(
|
90 |
+
'title' => __( 'Filter Bar', 'tribe-common' ),
|
91 |
+
'slug' => 'tribe-filterbar',
|
92 |
+
'link' => 'https://theeventscalendar.com/product/wordpress-events-filterbar/?utm_campaign=in-app&utm_source=addonspage&utm_medium=wordpress-events-filterbar&utm_content=appstoreembedded-1',
|
93 |
+
'buy-now' => 'http://m.tri.be/19o6',
|
94 |
+
'description' => __( 'It is awesome that your calendar is <em>THE PLACE</em> to get hooked up with prime choice ways to spend time. You have more events than Jabba the Hutt has rolls. Too bad visitors are hiring a personal assistant to go through all the choices. Ever wish you could just filter the calendar to only show events in walking distance, on a weekend, that are free? BOOM. Now you can. Introducing… the Filter Bar.', 'tribe-common' ),
|
95 |
+
'image' => 'images/app-shop-filter-bar.jpg',
|
96 |
+
'is_installed' => class_exists( 'Tribe__Events__Filterbar__View' ),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
97 |
'active_installs' => 20000,
|
98 |
+
),
|
99 |
+
'events-community' => array(
|
100 |
+
'title' => __( 'Community Events', 'tribe-common' ),
|
101 |
+
'slug' => 'events-community',
|
102 |
+
'link' => 'https://theeventscalendar.com/product/wordpress-community-events/?utm_campaign=in-app&utm_source=addonspage&utm_medium=wordpress-community-events&utm_content=appstoreembedded-1',
|
103 |
+
'buy-now' => 'http://m.tri.be/19o7',
|
104 |
+
'description' => __( 'Accept user-submitted events on your site! With Community Events, you can accept public submissions or require account sign-on. Settings give you the options to save as a draft or publish automatically, enable categories and tags, and choose whether users can edit/manage their own events or simply submit. Best of all - setup is easy! Just activate, configure the options, and off you go.', 'tribe-common' ),
|
105 |
+
'image' => 'images/app-shop-community.jpg',
|
106 |
+
'is_installed' => class_exists( 'Tribe__Events__Community__Main' ),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
107 |
'active_installs' => 20000,
|
108 |
+
),
|
109 |
+
'events-community-tickets' => array(
|
110 |
+
'title' => __( 'Community Tickets', 'tribe-common' ),
|
111 |
+
'slug' => 'events-community-tickets',
|
112 |
+
'link' => 'https://theeventscalendar.com/product/community-tickets/?utm_campaign=in-app&utm_source=addonspage&utm_medium=community-tickets&utm_content=appstoreembedded-1',
|
113 |
+
'buy-now' => 'http://m.tri.be/19o8',
|
114 |
+
'description' => __( 'Enable Community Events organizers to offer tickets to their events. You can set flexible payment and fee options. They can even check-in attendees to their events! All of this managed from the front-end of your site without ever needing to grant access to your admin', 'tribe-common' ),
|
115 |
+
'requires' => _x( 'Event Tickets Plus and Community Events', 'Names of required plugins for Community Tickets', 'tribe-common' ),
|
116 |
+
'image' => 'images/app-shop-community-tickets.jpg',
|
117 |
+
'is_installed' => class_exists( 'Tribe__Events__Community__Tickets__Main' ),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
118 |
'active_installs' => 10000,
|
119 |
+
),
|
120 |
+
'tribe-eventbrite' => array(
|
121 |
+
'title' => __( 'Eventbrite Tickets', 'tribe-common' ),
|
122 |
+
'slug' => 'tribe-eventbrite',
|
123 |
+
'link' => 'https://theeventscalendar.com/product/wordpress-eventbrite-tickets/?utm_campaign=in-app&utm_source=addonspage&utm_medium=wordpress-eventbrite-tickets&utm_content=appstoreembedded-1',
|
124 |
+
'buy-now' => 'http://m.tri.be/19o9',
|
125 |
+
'description' => sprintf(
|
126 |
+
__( 'The Eventbrite Tickets add-on allows you to create & sell tickets through The Events Calendar using the power of %1$sEventbrite%2$s. Whether you’re creating your ticket on the WordPress dashboard or importing the details of an already-existing event from %1$sEventbrite.com%2$s, this add-on brings the power of the Eventbrite API to your calendar.', 'tribe-common' ),
|
127 |
+
'<a href="http://www.eventbrite.com/r/etp">',
|
128 |
+
'</a>'
|
129 |
+
),
|
130 |
+
'image' => 'images/app-shop-eventbrite.jpg',
|
131 |
+
'is_installed' => class_exists( 'Tribe__Events__Tickets__Eventbrite__Main' ),
|
|
|
|
|
|
|
132 |
'active_installs' => 20000,
|
133 |
+
),
|
134 |
+
'image-widget-plus' => array(
|
135 |
+
'title' => __( 'Image Widget Plus', 'tribe-common' ),
|
136 |
+
'slug' => 'image-widget-plus',
|
137 |
+
'link' => 'http://m.tri.be/19nv',
|
138 |
+
'buy-now' => 'http://m.tri.be/19oa',
|
139 |
+
'description' => __( 'Take your image widgets to the next level with Image Widget Plus! We\'ve taken the simple functionality of our basic Image Widget and amped it up with several popular feature requests - multiple image support, slideshow, lightbox, and random image - all backed by a full year of premium support.', 'tribe-common' ),
|
140 |
+
'image' => 'images/app-shop-image-widget-plus.jpg',
|
141 |
+
'is_installed' => class_exists( 'Tribe__Image__Plus__Main' ),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
142 |
'active_installs' => 2500,
|
143 |
+
),
|
144 |
+
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
145 |
|
146 |
return $products;
|
147 |
}
|
common/src/Tribe/Post_History.php
CHANGED
@@ -47,16 +47,16 @@ class Tribe__Post_History {
|
|
47 |
* @param string $message
|
48 |
* @param array $data
|
49 |
*/
|
50 |
-
public function add_entry( $message, array $data =
|
51 |
$datetime = current_time( 'mysql' );
|
52 |
$checksum = uniqid( substr( hash( 'md5', $datetime . $message . serialize( $data ) ), 0, 8 ) . '_' );
|
53 |
|
54 |
-
$log_entry = wp_slash( json_encode(
|
55 |
'datetime' => $datetime,
|
56 |
'message' => $message,
|
57 |
'data' => $data,
|
58 |
'checksum' => $checksum,
|
59 |
-
|
60 |
|
61 |
add_post_meta( $this->post_id, self::HISTORY_KEY, $log_entry );
|
62 |
}
|
@@ -84,7 +84,7 @@ class Tribe__Post_History {
|
|
84 |
* @return array
|
85 |
*/
|
86 |
public function get_entries() {
|
87 |
-
$entries =
|
88 |
|
89 |
foreach ( get_post_meta( $this->post_id, self::HISTORY_KEY ) as $log_entry ) {
|
90 |
$log_entry = json_decode( $log_entry );
|
47 |
* @param string $message
|
48 |
* @param array $data
|
49 |
*/
|
50 |
+
public function add_entry( $message, array $data = array() ) {
|
51 |
$datetime = current_time( 'mysql' );
|
52 |
$checksum = uniqid( substr( hash( 'md5', $datetime . $message . serialize( $data ) ), 0, 8 ) . '_' );
|
53 |
|
54 |
+
$log_entry = wp_slash( json_encode( array(
|
55 |
'datetime' => $datetime,
|
56 |
'message' => $message,
|
57 |
'data' => $data,
|
58 |
'checksum' => $checksum,
|
59 |
+
) ) );
|
60 |
|
61 |
add_post_meta( $this->post_id, self::HISTORY_KEY, $log_entry );
|
62 |
}
|
84 |
* @return array
|
85 |
*/
|
86 |
public function get_entries() {
|
87 |
+
$entries = array();
|
88 |
|
89 |
foreach ( get_post_meta( $this->post_id, self::HISTORY_KEY ) as $log_entry ) {
|
90 |
$log_entry = json_decode( $log_entry );
|
common/src/Tribe/Process/Handler.php
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
/**
|
4 |
* Class Tribe__Process__Handler
|
5 |
*
|
6 |
-
* The base class for all
|
7 |
*
|
8 |
* @since 4.7.12
|
9 |
* @since 4.9.5 Removed dependency on `WP_Async_Request` class.
|
3 |
/**
|
4 |
* Class Tribe__Process__Handler
|
5 |
*
|
6 |
+
* The base class for all Modern Tribe async process handlers.
|
7 |
*
|
8 |
* @since 4.7.12
|
9 |
* @since 4.9.5 Removed dependency on `WP_Async_Request` class.
|
common/src/Tribe/Promise.php
CHANGED
@@ -60,13 +60,13 @@ class Tribe__Promise extends Tribe__Process__Queue {
|
|
60 |
* @param array $extra_args An array of extra arguments that will be passed to the
|
61 |
* callback function.
|
62 |
*/
|
63 |
-
public function __construct( $callback = null, array $items = null, array $extra_args =
|
64 |
parent::__construct();
|
65 |
|
66 |
if ( ! empty( $callback ) && ! empty( $items ) ) {
|
67 |
foreach ( $items as $target ) {
|
68 |
$item['callback'] = $callback;
|
69 |
-
$item['args'] = array_merge(
|
70 |
$this->push_to_queue( $item );
|
71 |
}
|
72 |
}
|
@@ -272,7 +272,7 @@ class Tribe__Promise extends Tribe__Process__Queue {
|
|
272 |
*/
|
273 |
protected function unpack_callback( $callback ) {
|
274 |
if ( $callback instanceof Tribe__Utils__Callback ) {
|
275 |
-
$callback =
|
276 |
}
|
277 |
|
278 |
return $callback;
|
60 |
* @param array $extra_args An array of extra arguments that will be passed to the
|
61 |
* callback function.
|
62 |
*/
|
63 |
+
public function __construct( $callback = null, array $items = null, array $extra_args = array() ) {
|
64 |
parent::__construct();
|
65 |
|
66 |
if ( ! empty( $callback ) && ! empty( $items ) ) {
|
67 |
foreach ( $items as $target ) {
|
68 |
$item['callback'] = $callback;
|
69 |
+
$item['args'] = array_merge( array( $target ), $extra_args );
|
70 |
$this->push_to_queue( $item );
|
71 |
}
|
72 |
}
|
272 |
*/
|
273 |
protected function unpack_callback( $callback ) {
|
274 |
if ( $callback instanceof Tribe__Utils__Callback ) {
|
275 |
+
$callback = array( tribe( $callback->get_slug() ), $callback->get_method() );
|
276 |
}
|
277 |
|
278 |
return $callback;
|
common/src/Tribe/Promoter/Auth.php
CHANGED
@@ -15,35 +15,14 @@ class Tribe__Promoter__Auth {
|
|
15 |
/**
|
16 |
* Tribe__Promoter__Auth constructor.
|
17 |
*
|
18 |
-
* @since 4.9
|
19 |
-
*
|
20 |
* @param Tribe__Promoter__Connector $connector Connector object.
|
21 |
-
*
|
|
|
22 |
*/
|
23 |
public function __construct( Tribe__Promoter__Connector $connector ) {
|
24 |
$this->connector = $connector;
|
25 |
}
|
26 |
|
27 |
-
/**
|
28 |
-
* Register the promoter auth key as part of the settings in order to make it available into the REST API.
|
29 |
-
*
|
30 |
-
* @since 4.12.6
|
31 |
-
*
|
32 |
-
* @return void
|
33 |
-
*/
|
34 |
-
public function register_setting() {
|
35 |
-
register_setting(
|
36 |
-
'options',
|
37 |
-
'tribe_promoter_auth_key',
|
38 |
-
[
|
39 |
-
'type' => 'string',
|
40 |
-
'show_in_rest' => true,
|
41 |
-
'description' => __( 'Promoter Key', 'tribe-common' ),
|
42 |
-
'sanitize_callback' => 'sanitize_text_field',
|
43 |
-
]
|
44 |
-
);
|
45 |
-
}
|
46 |
-
|
47 |
/**
|
48 |
* Add an update the KEY used for promoter during the connection.
|
49 |
*
|
@@ -54,18 +33,15 @@ class Tribe__Promoter__Auth {
|
|
54 |
* @return string
|
55 |
*/
|
56 |
public function filter_promoter_secret_key( $secret_key ) {
|
57 |
-
|
58 |
-
_deprecated_function( __METHOD__, '4.12.6' );
|
59 |
-
|
60 |
return empty( $secret_key ) ? $this->generate_secret_key() : $secret_key;
|
61 |
}
|
62 |
|
63 |
/**
|
64 |
* Authorize the request with the Promoter Connector.
|
65 |
*
|
66 |
-
* @since 4.9
|
67 |
-
*
|
68 |
* @return bool Whether the request was authorized successfully.
|
|
|
|
|
69 |
*/
|
70 |
public function authorize_with_connector() {
|
71 |
$secret_key = $this->generate_secret_key();
|
@@ -73,14 +49,7 @@ class Tribe__Promoter__Auth {
|
|
73 |
$license_key = tribe_get_request_var( 'license_key' );
|
74 |
|
75 |
// send request to auth connector
|
76 |
-
|
77 |
-
|
78 |
-
// If the secret was not stored correctly on Connector Application, remove it!
|
79 |
-
if ( ! $result ) {
|
80 |
-
delete_option( 'tribe_promoter_auth_key' );
|
81 |
-
}
|
82 |
-
|
83 |
-
return $result;
|
84 |
}
|
85 |
|
86 |
/**
|
@@ -89,24 +58,57 @@ class Tribe__Promoter__Auth {
|
|
89 |
*
|
90 |
* @since 4.9.12
|
91 |
*
|
92 |
-
* @since 4.9
|
93 |
-
*
|
94 |
* @return string The secret key.
|
|
|
|
|
95 |
*/
|
96 |
public function generate_secret_key() {
|
|
|
97 |
|
98 |
-
|
99 |
-
|
100 |
-
if ( defined( 'AUTH_KEY' ) ) {
|
101 |
-
$key = AUTH_KEY;
|
102 |
-
} else {
|
103 |
-
$key = wp_generate_password( 25 );
|
104 |
}
|
105 |
|
106 |
-
$key = sha1( $salt . get_current_blog_id() . $key . get_bloginfo( 'url' ) );
|
107 |
-
|
108 |
update_option( 'tribe_promoter_auth_key', $key );
|
109 |
|
110 |
return $key;
|
111 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
112 |
}
|
15 |
/**
|
16 |
* Tribe__Promoter__Auth constructor.
|
17 |
*
|
|
|
|
|
18 |
* @param Tribe__Promoter__Connector $connector Connector object.
|
19 |
+
*
|
20 |
+
* @since 4.9
|
21 |
*/
|
22 |
public function __construct( Tribe__Promoter__Connector $connector ) {
|
23 |
$this->connector = $connector;
|
24 |
}
|
25 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
26 |
/**
|
27 |
* Add an update the KEY used for promoter during the connection.
|
28 |
*
|
33 |
* @return string
|
34 |
*/
|
35 |
public function filter_promoter_secret_key( $secret_key ) {
|
|
|
|
|
|
|
36 |
return empty( $secret_key ) ? $this->generate_secret_key() : $secret_key;
|
37 |
}
|
38 |
|
39 |
/**
|
40 |
* Authorize the request with the Promoter Connector.
|
41 |
*
|
|
|
|
|
42 |
* @return bool Whether the request was authorized successfully.
|
43 |
+
*
|
44 |
+
* @since 4.9
|
45 |
*/
|
46 |
public function authorize_with_connector() {
|
47 |
$secret_key = $this->generate_secret_key();
|
49 |
$license_key = tribe_get_request_var( 'license_key' );
|
50 |
|
51 |
// send request to auth connector
|
52 |
+
return $this->connector->authorize_with_connector( get_current_user_id(), $secret_key, $promoter_key, $license_key );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
53 |
}
|
54 |
|
55 |
/**
|
58 |
*
|
59 |
* @since 4.9.12
|
60 |
*
|
|
|
|
|
61 |
* @return string The secret key.
|
62 |
+
*
|
63 |
+
* @since 4.9
|
64 |
*/
|
65 |
public function generate_secret_key() {
|
66 |
+
$key = defined( 'AUTH_KEY' ) ? AUTH_KEY : '';
|
67 |
|
68 |
+
if ( empty( $key ) ) {
|
69 |
+
$key = $this->generate_key();
|
|
|
|
|
|
|
|
|
70 |
}
|
71 |
|
|
|
|
|
72 |
update_option( 'tribe_promoter_auth_key', $key );
|
73 |
|
74 |
return $key;
|
75 |
}
|
76 |
+
|
77 |
+
/**
|
78 |
+
* Create a custom key to be usead as tribe_promoter_auth_key
|
79 |
+
*
|
80 |
+
* @since 4.9.12
|
81 |
+
*
|
82 |
+
* @return string
|
83 |
+
*/
|
84 |
+
private function generate_key() {
|
85 |
+
$base = bin2hex( $this->get_random_byes() );
|
86 |
+
$to_hash = sprintf( '%s%s%s', get_bloginfo( 'name' ), get_bloginfo( 'url' ), uniqid() );
|
87 |
+
return $base . hash( 'md5', $to_hash );
|
88 |
+
}
|
89 |
+
|
90 |
+
/**
|
91 |
+
* Add function to get a random set of bytes to be used as Token
|
92 |
+
*
|
93 |
+
* @since 4.9.12
|
94 |
+
*
|
95 |
+
* @param int $length
|
96 |
+
*
|
97 |
+
* @return string
|
98 |
+
*/
|
99 |
+
private function get_random_byes( $length = 16 ) {
|
100 |
+
if ( function_exists( 'random_bytes' ) ) {
|
101 |
+
try {
|
102 |
+
return random_bytes( $length );
|
103 |
+
} catch ( Exception $e ) {
|
104 |
+
return uniqid();
|
105 |
+
}
|
106 |
+
}
|
107 |
+
|
108 |
+
if ( function_exists( 'openssl_random_pseudo_bytes' ) ) {
|
109 |
+
return openssl_random_pseudo_bytes( $length );
|
110 |
+
}
|
111 |
+
|
112 |
+
return uniqid();
|
113 |
+
}
|
114 |
}
|
common/src/Tribe/Promoter/Connector.php
CHANGED
@@ -50,14 +50,14 @@ class Tribe__Promoter__Connector {
|
|
50 |
|
51 |
$payload = [
|
52 |
'clientSecret' => $secret_key,
|
53 |
-
'licenseKey'
|
54 |
-
'userId'
|
55 |
];
|
56 |
|
57 |
$token = \Firebase\JWT\JWT::encode( $payload, $promoter_key );
|
58 |
|
59 |
$response = $this->make_call( $url, [
|
60 |
-
'body'
|
61 |
'sslverify' => false,
|
62 |
] );
|
63 |
|
@@ -91,7 +91,7 @@ class Tribe__Promoter__Connector {
|
|
91 |
$url = $this->base_url() . 'connect/auth';
|
92 |
|
93 |
$response = $this->make_call( $url, [
|
94 |
-
'body'
|
95 |
'sslverify' => false,
|
96 |
] );
|
97 |
|
@@ -175,12 +175,6 @@ class Tribe__Promoter__Connector {
|
|
175 |
return;
|
176 |
}
|
177 |
|
178 |
-
$secret_key = $this->get_secret_key();
|
179 |
-
|
180 |
-
if ( empty( $secret_key ) ) {
|
181 |
-
return;
|
182 |
-
}
|
183 |
-
|
184 |
/** @var Tribe__Promoter__PUE $promoter_pue */
|
185 |
$promoter_pue = tribe( 'promoter.pue' );
|
186 |
$license_info = $promoter_pue->get_license_info();
|
@@ -190,6 +184,11 @@ class Tribe__Promoter__Connector {
|
|
190 |
}
|
191 |
|
192 |
$license_key = $license_info['key'];
|
|
|
|
|
|
|
|
|
|
|
193 |
|
194 |
$payload = [
|
195 |
'licenseKey' => $license_key,
|
@@ -201,7 +200,7 @@ class Tribe__Promoter__Connector {
|
|
201 |
$url = $this->base_url() . 'connect/notify';
|
202 |
|
203 |
$args = [
|
204 |
-
'body'
|
205 |
'sslverify' => false,
|
206 |
];
|
207 |
|
@@ -215,8 +214,8 @@ class Tribe__Promoter__Connector {
|
|
215 |
*
|
216 |
* @return mixed
|
217 |
*/
|
218 |
-
|
219 |
-
$secret_key
|
220 |
|
221 |
/**
|
222 |
* @since 4.9.12
|
@@ -229,33 +228,19 @@ class Tribe__Promoter__Connector {
|
|
229 |
/**
|
230 |
* Make the call to the remote endpoint.
|
231 |
*
|
232 |
-
* @since 4.9
|
233 |
-
*
|
234 |
-
* @param array $args Data to send.
|
235 |
-
*
|
236 |
* @param string $url URL to send data to.
|
|
|
237 |
*
|
238 |
* @return string|false The response body or false if not successful.
|
239 |
*
|
|
|
240 |
*/
|
241 |
-
|
242 |
-
$response = wp_remote_post( $url,
|
243 |
$code = wp_remote_retrieve_response_code( $response );
|
244 |
$body = wp_remote_retrieve_body( $response );
|
245 |
|
246 |
-
if (
|
247 |
-
do_action(
|
248 |
-
'tribe_log',
|
249 |
-
'debug',
|
250 |
-
__METHOD__,
|
251 |
-
[
|
252 |
-
'url' => $url,
|
253 |
-
'args' => $args,
|
254 |
-
'response' => $response,
|
255 |
-
'response_code' => $code,
|
256 |
-
]
|
257 |
-
);
|
258 |
-
|
259 |
return false;
|
260 |
}
|
261 |
|
50 |
|
51 |
$payload = [
|
52 |
'clientSecret' => $secret_key,
|
53 |
+
'licenseKey' => $license_key,
|
54 |
+
'userId' => $user_id,
|
55 |
];
|
56 |
|
57 |
$token = \Firebase\JWT\JWT::encode( $payload, $promoter_key );
|
58 |
|
59 |
$response = $this->make_call( $url, [
|
60 |
+
'body' => [ 'token' => $token ],
|
61 |
'sslverify' => false,
|
62 |
] );
|
63 |
|
91 |
$url = $this->base_url() . 'connect/auth';
|
92 |
|
93 |
$response = $this->make_call( $url, [
|
94 |
+
'body' => [ 'token' => $token ],
|
95 |
'sslverify' => false,
|
96 |
] );
|
97 |
|
175 |
return;
|
176 |
}
|
177 |
|
|
|
|
|
|
|
|
|
|
|
|
|
178 |
/** @var Tribe__Promoter__PUE $promoter_pue */
|
179 |
$promoter_pue = tribe( 'promoter.pue' );
|
180 |
$license_info = $promoter_pue->get_license_info();
|
184 |
}
|
185 |
|
186 |
$license_key = $license_info['key'];
|
187 |
+
$secret_key = $this->get_secret_key();
|
188 |
+
|
189 |
+
if ( empty( $secret_key ) ) {
|
190 |
+
return;
|
191 |
+
}
|
192 |
|
193 |
$payload = [
|
194 |
'licenseKey' => $license_key,
|
200 |
$url = $this->base_url() . 'connect/notify';
|
201 |
|
202 |
$args = [
|
203 |
+
'body' => [ 'token' => $token ],
|
204 |
'sslverify' => false,
|
205 |
];
|
206 |
|
214 |
*
|
215 |
* @return mixed
|
216 |
*/
|
217 |
+
protected function get_secret_key() {
|
218 |
+
$secret_key = get_option( 'tribe_promoter_auth_key' );
|
219 |
|
220 |
/**
|
221 |
* @since 4.9.12
|
228 |
/**
|
229 |
* Make the call to the remote endpoint.
|
230 |
*
|
|
|
|
|
|
|
|
|
231 |
* @param string $url URL to send data to.
|
232 |
+
* @param array $args Data to send.
|
233 |
*
|
234 |
* @return string|false The response body or false if not successful.
|
235 |
*
|
236 |
+
* @since 4.9
|
237 |
*/
|
238 |
+
private function make_call( $url, $args ) {
|
239 |
+
$response = wp_remote_post( $url, $args );
|
240 |
$code = wp_remote_retrieve_response_code( $response );
|
241 |
$body = wp_remote_retrieve_body( $response );
|
242 |
|
243 |
+
if ( is_wp_error( $response ) || $code > 299 ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
244 |
return false;
|
245 |
}
|
246 |
|
common/src/Tribe/Promoter/PUE.php
CHANGED
@@ -23,10 +23,10 @@ class Tribe__Promoter__PUE {
|
|
23 |
* @since 4.9
|
24 |
*/
|
25 |
public function load() {
|
26 |
-
$this->pue_checker = new Tribe__PUE__Checker( 'http://tri.be/', $this->slug,
|
27 |
'context' => 'service',
|
28 |
'plugin_name' => __( 'Promoter', 'tribe-common' ),
|
29 |
-
|
30 |
}
|
31 |
|
32 |
/**
|
@@ -57,10 +57,10 @@ class Tribe__Promoter__PUE {
|
|
57 |
return false;
|
58 |
}
|
59 |
|
60 |
-
return
|
61 |
'key' => $key,
|
62 |
'is_network_key' => $is_network_key,
|
63 |
-
|
64 |
}
|
65 |
|
66 |
/**
|
@@ -71,7 +71,9 @@ class Tribe__Promoter__PUE {
|
|
71 |
* @since 4.9
|
72 |
*/
|
73 |
public function has_license_key() {
|
74 |
-
|
|
|
|
|
75 |
}
|
76 |
|
77 |
/**
|
23 |
* @since 4.9
|
24 |
*/
|
25 |
public function load() {
|
26 |
+
$this->pue_checker = new Tribe__PUE__Checker( 'http://tri.be/', $this->slug, array(
|
27 |
'context' => 'service',
|
28 |
'plugin_name' => __( 'Promoter', 'tribe-common' ),
|
29 |
+
) );
|
30 |
}
|
31 |
|
32 |
/**
|
57 |
return false;
|
58 |
}
|
59 |
|
60 |
+
return array(
|
61 |
'key' => $key,
|
62 |
'is_network_key' => $is_network_key,
|
63 |
+
);
|
64 |
}
|
65 |
|
66 |
/**
|
71 |
* @since 4.9
|
72 |
*/
|
73 |
public function has_license_key() {
|
74 |
+
$license_info = $this->get_license_info();
|
75 |
+
|
76 |
+
return ! empty( $license_info );
|
77 |
}
|
78 |
|
79 |
/**
|
common/src/Tribe/Promoter/View.php
CHANGED
@@ -66,7 +66,7 @@ class Tribe__Promoter__View extends Tribe__Template {
|
|
66 |
return;
|
67 |
}
|
68 |
|
69 |
-
$is_admin
|
70 |
$authorized = false;
|
71 |
$auth_error = false;
|
72 |
|
66 |
return;
|
67 |
}
|
68 |
|
69 |
+
$is_admin = is_user_logged_in() && current_user_can( 'manage_options' );
|
70 |
$authorized = false;
|
71 |
$auth_error = false;
|
72 |
|
common/src/Tribe/REST/Main.php
CHANGED
@@ -4,21 +4,21 @@
|
|
4 |
/**
|
5 |
* Class Tribe__REST__Main
|
6 |
*
|
7 |
-
* The main entry point for a
|
8 |
*
|
9 |
* This class should not contain business logic and merely set up and start the REST API support.
|
10 |
*/
|
11 |
abstract class Tribe__REST__Main {
|
12 |
|
13 |
/**
|
14 |
-
*
|
15 |
*
|
16 |
* @var string
|
17 |
*/
|
18 |
protected $namespace = 'tribe';
|
19 |
|
20 |
/**
|
21 |
-
* Returns the namespace of
|
22 |
*
|
23 |
* @return string
|
24 |
*/
|
4 |
/**
|
5 |
* Class Tribe__REST__Main
|
6 |
*
|
7 |
+
* The main entry point for a Modern Tribe REST API implementation.
|
8 |
*
|
9 |
* This class should not contain business logic and merely set up and start the REST API support.
|
10 |
*/
|
11 |
abstract class Tribe__REST__Main {
|
12 |
|
13 |
/**
|
14 |
+
* Modern Tribe REST APIs URL namespace.
|
15 |
*
|
16 |
* @var string
|
17 |
*/
|
18 |
protected $namespace = 'tribe';
|
19 |
|
20 |
/**
|
21 |
+
* Returns the namespace of Modern Tribe REST APIs.
|
22 |
*
|
23 |
* @return string
|
24 |
*/
|
common/src/Tribe/REST/Post_Repository.php
CHANGED
@@ -14,11 +14,11 @@ class Tribe__REST__Post_Repository {
|
|
14 |
$full_url = get_attachment_link( $image_id );
|
15 |
$file = get_attached_file( $image_id );
|
16 |
|
17 |
-
$data =
|
18 |
'url' => $full_url,
|
19 |
'id' => $image_id,
|
20 |
'extension' => pathinfo( $file, PATHINFO_EXTENSION ),
|
21 |
-
|
22 |
|
23 |
$metadata = wp_get_attachment_metadata( $image_id );
|
24 |
|
@@ -49,26 +49,26 @@ class Tribe__REST__Post_Repository {
|
|
49 |
*/
|
50 |
protected function get_date_details( $date ) {
|
51 |
if ( empty( $date ) ) {
|
52 |
-
return
|
53 |
'year' => '',
|
54 |
'month' => '',
|
55 |
'day' => '',
|
56 |
'hour' => '',
|
57 |
'minutes' => '',
|
58 |
'seconds' => '',
|
59 |
-
|
60 |
}
|
61 |
|
62 |
$time = strtotime( $date );
|
63 |
|
64 |
-
return
|
65 |
'year' => date( 'Y', $time ),
|
66 |
'month' => date( 'm', $time ),
|
67 |
'day' => date( 'd', $time ),
|
68 |
'hour' => date( 'H', $time ),
|
69 |
'minutes' => date( 'i', $time ),
|
70 |
'seconds' => date( 's', $time ),
|
71 |
-
|
72 |
}
|
73 |
|
74 |
/**
|
@@ -80,19 +80,15 @@ class Tribe__REST__Post_Repository {
|
|
80 |
*
|
81 |
* @return array
|
82 |
*/
|
83 |
-
protected function format_and_sort_cost_couples( array $cost_couples =
|
84 |
global $wp_locale;
|
85 |
|
86 |
-
$cost_values =
|
87 |
foreach ( $cost_couples as $key => $value ) {
|
88 |
-
$value = str_replace(
|
89 |
-
[
|
90 |
-
|
91 |
-
|
92 |
-
],
|
93 |
-
[ '.', '' ],
|
94 |
-
'' . $value
|
95 |
-
);
|
96 |
if ( is_numeric( $value ) ) {
|
97 |
$cost_values[] = $value;
|
98 |
} else {
|
14 |
$full_url = get_attachment_link( $image_id );
|
15 |
$file = get_attached_file( $image_id );
|
16 |
|
17 |
+
$data = array(
|
18 |
'url' => $full_url,
|
19 |
'id' => $image_id,
|
20 |
'extension' => pathinfo( $file, PATHINFO_EXTENSION ),
|
21 |
+
);
|
22 |
|
23 |
$metadata = wp_get_attachment_metadata( $image_id );
|
24 |
|
49 |
*/
|
50 |
protected function get_date_details( $date ) {
|
51 |
if ( empty( $date ) ) {
|
52 |
+
return array(
|
53 |
'year' => '',
|
54 |
'month' => '',
|
55 |
'day' => '',
|
56 |
'hour' => '',
|
57 |
'minutes' => '',
|
58 |
'seconds' => '',
|
59 |
+
);
|
60 |
}
|
61 |
|
62 |
$time = strtotime( $date );
|
63 |
|
64 |
+
return array(
|
65 |
'year' => date( 'Y', $time ),
|
66 |
'month' => date( 'm', $time ),
|
67 |
'day' => date( 'd', $time ),
|
68 |
'hour' => date( 'H', $time ),
|
69 |
'minutes' => date( 'i', $time ),
|
70 |
'seconds' => date( 's', $time ),
|
71 |
+
);
|
72 |
}
|
73 |
|
74 |
/**
|
80 |
*
|
81 |
* @return array
|
82 |
*/
|
83 |
+
protected function format_and_sort_cost_couples( array $cost_couples = array() ) {
|
84 |
global $wp_locale;
|
85 |
|
86 |
+
$cost_values = array();
|
87 |
foreach ( $cost_couples as $key => $value ) {
|
88 |
+
$value = str_replace( array(
|
89 |
+
$wp_locale->number_format['decimal_point'],
|
90 |
+
$wp_locale->number_format['thousands_sep'],
|
91 |
+
), array( '.', '' ), '' . $value );
|
|
|
|
|
|
|
|
|
92 |
if ( is_numeric( $value ) ) {
|
93 |
$cost_values[] = $value;
|
94 |
} else {
|
common/src/Tribe/Repository.php
CHANGED
@@ -1,32 +1,28 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
use Tribe\Traits\With_Meta_Updates_Handling;
|
4 |
-
use Tribe\Traits\With_Post_Attribute_Detection;
|
5 |
use Tribe__Utils__Array as Arr;
|
6 |
|
7 |
abstract class Tribe__Repository
|
8 |
implements Tribe__Repository__Interface {
|
9 |
-
use With_Meta_Updates_Handling;
|
10 |
-
use With_Post_Attribute_Detection;
|
11 |
|
12 |
const MAX_NUMBER_OF_POSTS_PER_PAGE = 99999999999;
|
13 |
|
14 |
/**
|
15 |
* @var array An array of keys that cannot be updated on this repository.
|
16 |
*/
|
17 |
-
protected static $blocked_keys =
|
18 |
'ID',
|
19 |
'post_type',
|
20 |
'post_modified',
|
21 |
'post_modified_gmt',
|
22 |
'guid',
|
23 |
'comment_count',
|
24 |
-
|
25 |
|
26 |
/**
|
27 |
* @var array A list of the default filters supported and implemented by the repository.
|
28 |
*/
|
29 |
-
protected static $default_modifiers =
|
30 |
'p',
|
31 |
'author',
|
32 |
'author_name',
|
@@ -121,22 +117,22 @@ abstract class Tribe__Repository
|
|
121 |
'term_in',
|
122 |
'term_not_in',
|
123 |
'term_and',
|
124 |
-
|
125 |
|
126 |
/**
|
127 |
* @var array An array of default arguments that will be applied to all queries.
|
128 |
*/
|
129 |
-
protected static $common_args =
|
130 |
'post_type' => 'post',
|
131 |
'suppress_filters' => false,
|
132 |
-
'posts_per_page' => -1,
|
133 |
-
|
134 |
|
135 |
/**
|
136 |
* @var array A list of query modifiers that will trigger a overriding merge, thus
|
137 |
* replacing previous values, when set multiple times.
|
138 |
*/
|
139 |
-
protected static $replacing_modifiers =
|
140 |
'p',
|
141 |
'author',
|
142 |
'author_name',
|
@@ -191,22 +187,20 @@ abstract class Tribe__Repository
|
|
191 |
'guid',
|
192 |
'perm',
|
193 |
'order',
|
194 |
-
|
195 |
|
196 |
/**
|
197 |
* @var int
|
198 |
*/
|
199 |
protected static $meta_alias = 0;
|
200 |
-
|
201 |
/**
|
202 |
* @var array A list of keys that denote the value to check should be cast to array.
|
203 |
*/
|
204 |
-
protected static $multi_value_keys =
|
205 |
-
|
206 |
/**
|
207 |
* @var array A map of SQL comparison operators to their human-readable counterpart.
|
208 |
*/
|
209 |
-
protected static $comparison_operators =
|
210 |
'=' => 'equals',
|
211 |
'!=' => 'not-equals',
|
212 |
'>' => 'gt',
|
@@ -223,7 +217,7 @@ abstract class Tribe__Repository
|
|
223 |
'NOT EXISTS' => 'not-exists',
|
224 |
'REGEXP' => 'regexp',
|
225 |
'NOT REGEXP' => 'not-regexp',
|
226 |
-
|
227 |
|
228 |
/**
|
229 |
* A counter to keep track, on the class level, of the aliases generated for the terms table
|
@@ -240,7 +234,7 @@ abstract class Tribe__Repository
|
|
240 |
/**
|
241 |
* @var array The post IDs that will be updated.
|
242 |
*/
|
243 |
-
protected $ids =
|
244 |
/**
|
245 |
* @var bool Whether the post IDs to update have already been fetched or not.
|
246 |
*/
|
@@ -248,114 +242,101 @@ abstract class Tribe__Repository
|
|
248 |
/**
|
249 |
* @var array The updates that will be saved to the database.
|
250 |
*/
|
251 |
-
protected $updates =
|
252 |
|
253 |
/**
|
254 |
* @var array A list of taxonomies this repository will recognize.
|
255 |
*/
|
256 |
-
protected $taxonomies =
|
257 |
|
258 |
/**
|
259 |
* @var array A map detailing which fields should be converted from a
|
260 |
* GMT time and date to a local one.
|
261 |
*/
|
262 |
-
protected $to_local_time_map =
|
263 |
'post_date_gmt' => 'post_date',
|
264 |
-
|
265 |
-
|
266 |
/**
|
267 |
* @var array A map detailing which fields should be converted from a
|
268 |
* localized time and date to a GMT one.
|
269 |
*/
|
270 |
-
protected $to_gmt_map =
|
271 |
'post_date' => 'post_date_gmt',
|
272 |
-
|
273 |
|
274 |
/**
|
275 |
* @var array
|
276 |
*/
|
277 |
-
protected $default_args =
|
278 |
-
|
279 |
/**
|
280 |
* @var array An array of query modifying callbacks populated while applying
|
281 |
* the filters.
|
282 |
*/
|
283 |
-
protected $query_modifiers =
|
284 |
-
|
285 |
/**
|
286 |
* @var bool Whether the current query is void or not.
|
287 |
*/
|
288 |
protected $void_query = false;
|
289 |
-
|
290 |
/**
|
291 |
* @var array An array of query arguments that will be populated while applying
|
292 |
* filters.
|
293 |
*/
|
294 |
-
protected $query_args =
|
295 |
-
'meta_query' =>
|
296 |
-
'tax_query' =>
|
297 |
-
'date_query' =>
|
298 |
-
|
299 |
-
|
300 |
/**
|
301 |
* @var array An array of query arguments that support 'relation'.
|
302 |
*/
|
303 |
-
protected $relation_query_args =
|
304 |
'meta_query',
|
305 |
'tax_query',
|
306 |
'date_query',
|
307 |
-
|
308 |
-
|
309 |
/**
|
310 |
* @var WP_Query The current query object built and modified by the instance.
|
311 |
*/
|
312 |
protected $current_query;
|
313 |
-
|
314 |
/**
|
315 |
* @var array An associative array of the filters that will be applied and the used values.
|
316 |
*/
|
317 |
-
protected $current_filters =
|
318 |
-
|
319 |
/**
|
320 |
* @var string|null The current filter being applied.
|
321 |
*/
|
322 |
protected $current_filter;
|
323 |
-
|
324 |
/**
|
325 |
* @var Tribe__Repository__Query_Filters
|
326 |
*/
|
327 |
public $filter_query;
|
328 |
-
|
329 |
/**
|
330 |
* @var string The filter that should be used to get a post by its primary key.
|
331 |
*/
|
332 |
protected $primary_key = 'p';
|
333 |
-
|
334 |
/**
|
335 |
* @var array A map of callbacks in the shape [ <slug> => <callback|primitive> ]
|
336 |
*/
|
337 |
-
protected $schema =
|
338 |
|
339 |
/**
|
340 |
* @var array A map of schema slugs and their meta keys to be queried.
|
341 |
*/
|
342 |
-
protected $simple_meta_schema =
|
343 |
|
344 |
/**
|
345 |
* @var array A map of schema slugs and their taxonomies to be queried.
|
346 |
*/
|
347 |
-
protected $simple_tax_schema =
|
348 |
|
349 |
/**
|
350 |
* @var Tribe__Repository__Interface
|
351 |
*/
|
352 |
protected $main_repository;
|
353 |
-
|
354 |
/**
|
355 |
* @var Tribe__Repository__Formatter_Interface
|
356 |
*/
|
357 |
protected $formatter;
|
358 |
-
|
359 |
/**
|
360 |
* @var bool
|
361 |
*/
|
@@ -375,7 +356,7 @@ abstract class Tribe__Repository
|
|
375 |
*
|
376 |
* @var array
|
377 |
*/
|
378 |
-
protected $update_fields_aliases =
|
379 |
'title' => 'post_title',
|
380 |
'content' => 'post_content',
|
381 |
'description' => 'post_content',
|
@@ -389,7 +370,7 @@ abstract class Tribe__Repository
|
|
389 |
'date_utc' => 'post_date_gmt',
|
390 |
'tag' => 'post_tag',
|
391 |
'image' => '_thumbnail_id',
|
392 |
-
|
393 |
|
394 |
/**
|
395 |
* The default create args that will be used by the repository
|
@@ -438,9 +419,9 @@ abstract class Tribe__Repository
|
|
438 |
*/
|
439 |
public function __construct() {
|
440 |
$this->filter_query = new Tribe__Repository__Query_Filters();
|
441 |
-
$this->default_args = array_merge(
|
442 |
-
$post_types = (array) Tribe__Utils__Array::get( $this->default_args, 'post_type',
|
443 |
-
$this->taxonomies = get_taxonomies(
|
444 |
|
445 |
/**
|
446 |
* Allow plugins to init their classes and setup hooks at the initial setup of a repository.
|
@@ -517,8 +498,7 @@ abstract class Tribe__Repository
|
|
517 |
*/
|
518 |
public function where( $key, $value = null ) {
|
519 |
$call_args = func_get_args();
|
520 |
-
|
521 |
-
return call_user_func_array( [ $this, 'by' ], $call_args );
|
522 |
}
|
523 |
|
524 |
/**
|
@@ -666,7 +646,7 @@ abstract class Tribe__Repository
|
|
666 |
*/
|
667 |
public function all() {
|
668 |
if ( $this->void_query ) {
|
669 |
-
return
|
670 |
}
|
671 |
|
672 |
$query = $this->build_query();
|
@@ -707,7 +687,7 @@ abstract class Tribe__Repository
|
|
707 |
*/
|
708 |
$formatted = $return_ids
|
709 |
? $results
|
710 |
-
: array_filter( array_map(
|
711 |
|
712 |
// Reset the fields if required.
|
713 |
$query->set( 'fields', $original_fields_value );
|
@@ -738,7 +718,7 @@ abstract class Tribe__Repository
|
|
738 |
public function order( $order = 'ASC' ) {
|
739 |
$order = strtoupper( $order );
|
740 |
|
741 |
-
if ( ! in_array( $order,
|
742 |
return $this;
|
743 |
}
|
744 |
|
@@ -752,11 +732,7 @@ abstract class Tribe__Repository
|
|
752 |
*/
|
753 |
public function order_by( $order_by, $order = 'DESC' ) {
|
754 |
$this->query_args['orderby'] = $order_by;
|
755 |
-
|
756 |
-
// Based on `WP_Query->parse_orderby` we should ignore the global order passed, and use the value on for each item in array.
|
757 |
-
if ( ! is_array( $order_by ) ) {
|
758 |
-
$this->query_args['order'] = $order;
|
759 |
-
}
|
760 |
|
761 |
return $this;
|
762 |
}
|
@@ -774,7 +750,7 @@ abstract class Tribe__Repository
|
|
774 |
* {@inheritdoc}
|
775 |
*/
|
776 |
public function permission( $permission ) {
|
777 |
-
if ( ! in_array( $permission,
|
778 |
return $this;
|
779 |
}
|
780 |
|
@@ -950,10 +926,10 @@ abstract class Tribe__Repository
|
|
950 |
* {@inheritdoc}
|
951 |
*/
|
952 |
public function nth( $n ) {
|
953 |
-
$per_page = (int) Tribe__Utils__Array::get_in_any(
|
954 |
$this->query_args,
|
955 |
$this->default_args,
|
956 |
-
|
957 |
|
958 |
if ( - 1 !== $per_page && $n > $per_page ) {
|
959 |
return null;
|
@@ -1030,12 +1006,12 @@ abstract class Tribe__Repository
|
|
1030 |
$matching_ids = $this->get_ids();
|
1031 |
|
1032 |
if ( empty( $matching_ids ) ) {
|
1033 |
-
return
|
1034 |
}
|
1035 |
|
1036 |
$spliced = array_splice( $matching_ids, 0, $n );
|
1037 |
|
1038 |
-
return $return_ids ? $spliced : array_map(
|
1039 |
}
|
1040 |
|
1041 |
/**
|
@@ -1145,11 +1121,20 @@ abstract class Tribe__Repository
|
|
1145 |
*/
|
1146 |
$this->query_args = array_merge( $this->query_args, $query_modifier );
|
1147 |
} else {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1148 |
/**
|
1149 |
* We do a recursive merge to allow "stacking" of same kind of queries;
|
1150 |
-
* e.g. two or more `tax_query
|
1151 |
*/
|
1152 |
-
$this->query_args =
|
1153 |
}
|
1154 |
} else {
|
1155 |
/**
|
@@ -1197,18 +1182,18 @@ abstract class Tribe__Repository
|
|
1197 |
if ( $this->has_default_modifier( $key ) ) {
|
1198 |
// let's use the default filters normalizing the key first
|
1199 |
$call_args[0] = $this->normalize_key( $key );
|
1200 |
-
$query_modifier = call_user_func_array(
|
1201 |
} elseif ( 2 === count( $call_args ) ) {
|
1202 |
// Pass query argument $key with the single value argument.
|
1203 |
-
$query_modifier =
|
1204 |
$key => $call_args[1],
|
1205 |
-
|
1206 |
} else {
|
1207 |
// More than two $call_args were sent (key, value), assume it was meant for a filter that was not defined yet.
|
1208 |
throw Tribe__Repository__Usage_Error::because_the_read_filter_is_not_defined( $key, $this );
|
1209 |
}
|
1210 |
} else {
|
1211 |
-
$query_modifier = call_user_func_array(
|
1212 |
}
|
1213 |
|
1214 |
return $query_modifier;
|
@@ -1258,7 +1243,7 @@ abstract class Tribe__Repository
|
|
1258 |
// `ID` to `id`
|
1259 |
$normalized = strtolower( $key );
|
1260 |
|
1261 |
-
$post_prefixed =
|
1262 |
'password',
|
1263 |
'name__in',
|
1264 |
'_in',
|
@@ -1273,7 +1258,7 @@ abstract class Tribe__Repository
|
|
1273 |
'modified',
|
1274 |
'modified_gmt',
|
1275 |
'content_filtered',
|
1276 |
-
|
1277 |
|
1278 |
if ( in_array( $key, $post_prefixed, true ) ) {
|
1279 |
$normalized = 'post_' . $key;
|
@@ -1331,11 +1316,11 @@ abstract class Tribe__Repository
|
|
1331 |
$to_update = $this->get_ids();
|
1332 |
|
1333 |
if ( empty( $to_update ) ) {
|
1334 |
-
return $return_promise ? new Tribe__Promise() :
|
1335 |
}
|
1336 |
|
1337 |
-
$exit =
|
1338 |
-
$postarrs =
|
1339 |
|
1340 |
foreach ( $to_update as $id ) {
|
1341 |
$postarrs[ $id ] = $this->filter_postarr_for_update( $this->build_postarr( $id ), $id );
|
@@ -1366,7 +1351,7 @@ abstract class Tribe__Repository
|
|
1366 |
*/
|
1367 |
public function get_ids() {
|
1368 |
if ( $this->void_query ) {
|
1369 |
-
return
|
1370 |
}
|
1371 |
|
1372 |
|
@@ -1398,7 +1383,7 @@ abstract class Tribe__Repository
|
|
1398 |
* Extending classes might use this method to run sub-queries
|
1399 |
* and signal a void query; let's return an empty array.
|
1400 |
*/
|
1401 |
-
return
|
1402 |
}
|
1403 |
}
|
1404 |
|
@@ -1422,6 +1407,43 @@ abstract class Tribe__Repository
|
|
1422 |
return ! in_array( $key, self::$blocked_keys, true );
|
1423 |
}
|
1424 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1425 |
/**
|
1426 |
* Whether the current key is a date one requiring a converted key pair too or not.
|
1427 |
*
|
@@ -1452,6 +1474,19 @@ abstract class Tribe__Repository
|
|
1452 |
$postarr[ $key ] = $value;
|
1453 |
}
|
1454 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1455 |
/**
|
1456 |
* {@inheritdoc}
|
1457 |
*/
|
@@ -1475,7 +1510,7 @@ abstract class Tribe__Repository
|
|
1475 |
*/
|
1476 |
public function set( $key, $value ) {
|
1477 |
if ( ! is_string( $key ) ) {
|
1478 |
-
throw Tribe__Repository__Usage_Error::
|
1479 |
}
|
1480 |
|
1481 |
$this->updates[ $key ] = $value;
|
@@ -1544,7 +1579,7 @@ abstract class Tribe__Repository
|
|
1544 |
public function where_meta_related_by( $meta_keys, $compare, $field = null, $values = null ) {
|
1545 |
$meta_keys = Tribe__Utils__Array::list_to_array( $meta_keys );
|
1546 |
|
1547 |
-
if ( ! in_array( $compare,
|
1548 |
if ( empty( $field ) || empty( $values ) ) {
|
1549 |
throw Tribe__Repository__Usage_Error::because_this_comparison_operator_requires_fields_and_values( $meta_keys, $compare, $this );
|
1550 |
}
|
@@ -1602,7 +1637,7 @@ abstract class Tribe__Repository
|
|
1602 |
public function where_meta_related_by_meta( $meta_keys, $compare, $meta_field = null, $meta_values = null, $or_not_exists = false ) {
|
1603 |
$meta_keys = Tribe__Utils__Array::list_to_array( $meta_keys );
|
1604 |
|
1605 |
-
if ( ! in_array( $compare,
|
1606 |
if ( empty( $meta_field ) || empty( $meta_values ) ) {
|
1607 |
throw Tribe__Repository__Usage_Error::because_this_comparison_operator_requires_fields_and_values( $meta_keys, $compare, $this );
|
1608 |
}
|
@@ -1689,7 +1724,7 @@ abstract class Tribe__Repository
|
|
1689 |
$buffered_count = count( $buffered );
|
1690 |
|
1691 |
foreach ( $all_callbacks as $c ) {
|
1692 |
-
call_user_func_array(
|
1693 |
|
1694 |
if ( $buffered_count === count( $this->filter_query->get_buffered_where_clauses() ) ) {
|
1695 |
throw Tribe__Repository__Usage_Error::because_where_or_should_only_be_used_with_methods_that_add_where_clauses( $c, $this );
|
@@ -1730,12 +1765,12 @@ abstract class Tribe__Repository
|
|
1730 |
* @param string|null $by The ->by() lookup to use (defaults to meta_regexp_or_like).
|
1731 |
*/
|
1732 |
public function add_simple_meta_schema_entry( $key, $meta_key, $by = null ) {
|
1733 |
-
$this->schema[ $key ] =
|
1734 |
|
1735 |
-
$this->simple_meta_schema[ $key ] =
|
1736 |
'meta_key' => $meta_key,
|
1737 |
'by' => $by,
|
1738 |
-
|
1739 |
}
|
1740 |
|
1741 |
/**
|
@@ -1748,12 +1783,12 @@ abstract class Tribe__Repository
|
|
1748 |
* @param string|null $by The ->by() lookup to use (defaults to term_in).
|
1749 |
*/
|
1750 |
public function add_simple_tax_schema_entry( $key, $taxonomy, $by = null ) {
|
1751 |
-
$this->schema[ $key ] =
|
1752 |
|
1753 |
-
$this->simple_tax_schema[ $key ] =
|
1754 |
'taxonomy' => $taxonomy,
|
1755 |
'by' => $by,
|
1756 |
-
|
1757 |
}
|
1758 |
|
1759 |
/**
|
@@ -1775,7 +1810,7 @@ abstract class Tribe__Repository
|
|
1775 |
* @throws Tribe__Repository__Usage_Error If a filter is called with wrong arguments.
|
1776 |
*/
|
1777 |
protected function apply_default_modifier( $key, $value ) {
|
1778 |
-
$args =
|
1779 |
|
1780 |
$call_args = func_get_args();
|
1781 |
$arg_1 = isset( $call_args[2] ) ? $call_args[2] : null;
|
@@ -1787,14 +1822,14 @@ abstract class Tribe__Repository
|
|
1787 |
switch ( $key ) {
|
1788 |
default:
|
1789 |
// leverage built-in WP_Query filters
|
1790 |
-
$args =
|
1791 |
break;
|
1792 |
case 'ID':
|
1793 |
case 'id':
|
1794 |
-
$args =
|
1795 |
break;
|
1796 |
case 'search':
|
1797 |
-
$args =
|
1798 |
break;
|
1799 |
case 'post_status':
|
1800 |
$this->query_args['post_status'] = (array) $value;
|
@@ -1824,7 +1859,7 @@ abstract class Tribe__Repository
|
|
1824 |
break;
|
1825 |
case 'to_ping':
|
1826 |
$this->filter_query->to_get_posts_to_ping( $value );
|
1827 |
-
$args =
|
1828 |
break;
|
1829 |
case 'post_modified':
|
1830 |
$args = $this->get_posts_after( $value, 'post_modified' );
|
@@ -1839,7 +1874,7 @@ abstract class Tribe__Repository
|
|
1839 |
$this->filter_query->to_get_posts_with_guid_like( $value );
|
1840 |
break;
|
1841 |
case 'menu_order':
|
1842 |
-
$args =
|
1843 |
break;
|
1844 |
case 'meta':
|
1845 |
case 'meta_equals':
|
@@ -2001,7 +2036,7 @@ abstract class Tribe__Repository
|
|
2001 |
* @return array
|
2002 |
*/
|
2003 |
protected function get_posts_after( $value, $column = 'post_date' ) {
|
2004 |
-
$timezone = in_array( $column,
|
2005 |
? 'UTC'
|
2006 |
: Tribe__Timezones::generate_timezone_string_from_utc_offset( Tribe__Timezones::wp_timezone_string() );
|
2007 |
|
@@ -2013,16 +2048,16 @@ abstract class Tribe__Repository
|
|
2013 |
|
2014 |
$array_key = sprintf( '%s-after', $column );
|
2015 |
|
2016 |
-
return
|
2017 |
-
'date_query' =>
|
2018 |
'relation' => 'AND',
|
2019 |
-
$array_key =>
|
2020 |
'inclusive' => true,
|
2021 |
'column' => $column,
|
2022 |
'after' => $date->format( 'Y-m-d H:i:s' ),
|
2023 |
-
|
2024 |
-
|
2025 |
-
|
2026 |
}
|
2027 |
|
2028 |
/**
|
@@ -2036,7 +2071,7 @@ abstract class Tribe__Repository
|
|
2036 |
* @return array
|
2037 |
*/
|
2038 |
protected function get_posts_before( $value, $column = 'post_date' ) {
|
2039 |
-
$timezone = in_array( $column,
|
2040 |
? 'UTC'
|
2041 |
: Tribe__Timezones::generate_timezone_string_from_utc_offset( Tribe__Timezones::wp_timezone_string() );
|
2042 |
|
@@ -2048,16 +2083,16 @@ abstract class Tribe__Repository
|
|
2048 |
|
2049 |
$array_key = sprintf( '%s-before', $column );
|
2050 |
|
2051 |
-
return
|
2052 |
-
'date_query' =>
|
2053 |
'relation' => 'AND',
|
2054 |
-
$array_key =>
|
2055 |
'inclusive' => true,
|
2056 |
'column' => $column,
|
2057 |
'before' => $date->format( 'Y-m-d H:i:s' ),
|
2058 |
-
|
2059 |
-
|
2060 |
-
|
2061 |
}
|
2062 |
|
2063 |
/**
|
@@ -2082,16 +2117,16 @@ abstract class Tribe__Repository
|
|
2082 |
if ( count( $meta_keys ) === 1 ) {
|
2083 |
$array_key = $this->sql_slug( $meta_keys[0], $postfix );
|
2084 |
|
2085 |
-
$args =
|
2086 |
-
'meta_query' =>
|
2087 |
-
$array_key =>
|
2088 |
'key' => $meta_keys[0],
|
2089 |
'compare' => strtoupper( $compare ),
|
2090 |
-
|
2091 |
-
|
2092 |
-
|
2093 |
|
2094 |
-
if ( ! in_array( $compare,
|
2095 |
$args['meta_query'][ $array_key ]['value'] = $meta_value;
|
2096 |
}
|
2097 |
|
@@ -2178,22 +2213,22 @@ abstract class Tribe__Repository
|
|
2178 |
* @return array
|
2179 |
*/
|
2180 |
protected function build_tax_query( $taxonomy, $terms, $field, $operator ) {
|
2181 |
-
if ( in_array( $operator,
|
2182 |
$array_key = $this->sql_slug( $taxonomy, $operator );
|
2183 |
} else {
|
2184 |
$array_key = $this->sql_slug( $taxonomy, $field, $operator );
|
2185 |
}
|
2186 |
|
2187 |
-
return
|
2188 |
-
'tax_query' =>
|
2189 |
-
$array_key =>
|
2190 |
'taxonomy' => $taxonomy,
|
2191 |
'field' => $field,
|
2192 |
'terms' => $terms,
|
2193 |
'operator' => strtoupper( $operator ),
|
2194 |
-
|
2195 |
-
|
2196 |
-
|
2197 |
}
|
2198 |
|
2199 |
/**
|
@@ -2237,12 +2272,12 @@ abstract class Tribe__Repository
|
|
2237 |
public function prepare_interval( $values, $format = '%s', $operator = 'IN' ) {
|
2238 |
$values = Tribe__Utils__Array::list_to_array( $values );
|
2239 |
|
2240 |
-
$prepared =
|
2241 |
foreach ( $values as $value ) {
|
2242 |
$prepared[] = $this->prepare_value( $value, $format );
|
2243 |
}
|
2244 |
|
2245 |
-
return in_array( $operator,
|
2246 |
? sprintf( '%s AND %s', $prepared[0], $prepared[1] )
|
2247 |
: sprintf( '(%s)', implode( ',', $prepared ) );
|
2248 |
}
|
@@ -2443,7 +2478,7 @@ abstract class Tribe__Repository
|
|
2443 |
$to_delete = $this->get_ids();
|
2444 |
|
2445 |
if ( empty( $to_delete ) ) {
|
2446 |
-
return $return_promise ? new Tribe__Promise() :
|
2447 |
}
|
2448 |
|
2449 |
|
@@ -2873,10 +2908,10 @@ abstract class Tribe__Repository
|
|
2873 |
* {@inheritdoc}
|
2874 |
*/
|
2875 |
public function build_postarr( $id = null ) {
|
2876 |
-
$postarr =
|
2877 |
-
'tax_input' =>
|
2878 |
-
'meta_input' =>
|
2879 |
-
|
2880 |
|
2881 |
/*
|
2882 |
* The check is lax here by design: we leave space for the client code
|
@@ -3053,7 +3088,7 @@ abstract class Tribe__Repository
|
|
3053 |
/**
|
3054 |
* {@inheritdoc}
|
3055 |
*/
|
3056 |
-
public function filter( $args =
|
3057 |
$list = new WP_List_Util( $this->all() );
|
3058 |
|
3059 |
return $list->filter( $args, $operator );
|
@@ -3062,7 +3097,7 @@ abstract class Tribe__Repository
|
|
3062 |
/**
|
3063 |
* {@inheritdoc}
|
3064 |
*/
|
3065 |
-
public function sort( $orderby =
|
3066 |
$list = new WP_List_Util( $this->all() );
|
3067 |
|
3068 |
return $list->sort( $orderby, $order, $preserve_keys );
|
1 |
<?php
|
2 |
|
|
|
|
|
3 |
use Tribe__Utils__Array as Arr;
|
4 |
|
5 |
abstract class Tribe__Repository
|
6 |
implements Tribe__Repository__Interface {
|
|
|
|
|
7 |
|
8 |
const MAX_NUMBER_OF_POSTS_PER_PAGE = 99999999999;
|
9 |
|
10 |
/**
|
11 |
* @var array An array of keys that cannot be updated on this repository.
|
12 |
*/
|
13 |
+
protected static $blocked_keys = array(
|
14 |
'ID',
|
15 |
'post_type',
|
16 |
'post_modified',
|
17 |
'post_modified_gmt',
|
18 |
'guid',
|
19 |
'comment_count',
|
20 |
+
);
|
21 |
|
22 |
/**
|
23 |
* @var array A list of the default filters supported and implemented by the repository.
|
24 |
*/
|
25 |
+
protected static $default_modifiers = array(
|
26 |
'p',
|
27 |
'author',
|
28 |
'author_name',
|
117 |
'term_in',
|
118 |
'term_not_in',
|
119 |
'term_and',
|
120 |
+
);
|
121 |
|
122 |
/**
|
123 |
* @var array An array of default arguments that will be applied to all queries.
|
124 |
*/
|
125 |
+
protected static $common_args = array(
|
126 |
'post_type' => 'post',
|
127 |
'suppress_filters' => false,
|
128 |
+
'posts_per_page' => - 1,
|
129 |
+
);
|
130 |
|
131 |
/**
|
132 |
* @var array A list of query modifiers that will trigger a overriding merge, thus
|
133 |
* replacing previous values, when set multiple times.
|
134 |
*/
|
135 |
+
protected static $replacing_modifiers = array(
|
136 |
'p',
|
137 |
'author',
|
138 |
'author_name',
|
187 |
'guid',
|
188 |
'perm',
|
189 |
'order',
|
190 |
+
);
|
191 |
|
192 |
/**
|
193 |
* @var int
|
194 |
*/
|
195 |
protected static $meta_alias = 0;
|
|
|
196 |
/**
|
197 |
* @var array A list of keys that denote the value to check should be cast to array.
|
198 |
*/
|
199 |
+
protected static $multi_value_keys = array( 'IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN' );
|
|
|
200 |
/**
|
201 |
* @var array A map of SQL comparison operators to their human-readable counterpart.
|
202 |
*/
|
203 |
+
protected static $comparison_operators = array(
|
204 |
'=' => 'equals',
|
205 |
'!=' => 'not-equals',
|
206 |
'>' => 'gt',
|
217 |
'NOT EXISTS' => 'not-exists',
|
218 |
'REGEXP' => 'regexp',
|
219 |
'NOT REGEXP' => 'not-regexp',
|
220 |
+
);
|
221 |
|
222 |
/**
|
223 |
* A counter to keep track, on the class level, of the aliases generated for the terms table
|
234 |
/**
|
235 |
* @var array The post IDs that will be updated.
|
236 |
*/
|
237 |
+
protected $ids = array();
|
238 |
/**
|
239 |
* @var bool Whether the post IDs to update have already been fetched or not.
|
240 |
*/
|
242 |
/**
|
243 |
* @var array The updates that will be saved to the database.
|
244 |
*/
|
245 |
+
protected $updates = array();
|
246 |
|
247 |
/**
|
248 |
* @var array A list of taxonomies this repository will recognize.
|
249 |
*/
|
250 |
+
protected $taxonomies = array();
|
251 |
|
252 |
/**
|
253 |
* @var array A map detailing which fields should be converted from a
|
254 |
* GMT time and date to a local one.
|
255 |
*/
|
256 |
+
protected $to_local_time_map = array(
|
257 |
'post_date_gmt' => 'post_date',
|
258 |
+
);
|
|
|
259 |
/**
|
260 |
* @var array A map detailing which fields should be converted from a
|
261 |
* localized time and date to a GMT one.
|
262 |
*/
|
263 |
+
protected $to_gmt_map = array(
|
264 |
'post_date' => 'post_date_gmt',
|
265 |
+
);
|
266 |
|
267 |
/**
|
268 |
* @var array
|
269 |
*/
|
270 |
+
protected $default_args = array( 'post_type' => 'post' );
|
|
|
271 |
/**
|
272 |
* @var array An array of query modifying callbacks populated while applying
|
273 |
* the filters.
|
274 |
*/
|
275 |
+
protected $query_modifiers = array();
|
|
|
276 |
/**
|
277 |
* @var bool Whether the current query is void or not.
|
278 |
*/
|
279 |
protected $void_query = false;
|
|
|
280 |
/**
|
281 |
* @var array An array of query arguments that will be populated while applying
|
282 |
* filters.
|
283 |
*/
|
284 |
+
protected $query_args = array(
|
285 |
+
'meta_query' => array( 'relation' => 'AND' ),
|
286 |
+
'tax_query' => array( 'relation' => 'AND' ),
|
287 |
+
'date_query' => array( 'relation' => 'AND' ),
|
288 |
+
);
|
|
|
289 |
/**
|
290 |
* @var array An array of query arguments that support 'relation'.
|
291 |
*/
|
292 |
+
protected $relation_query_args = array(
|
293 |
'meta_query',
|
294 |
'tax_query',
|
295 |
'date_query',
|
296 |
+
);
|
|
|
297 |
/**
|
298 |
* @var WP_Query The current query object built and modified by the instance.
|
299 |
*/
|
300 |
protected $current_query;
|
|
|
301 |
/**
|
302 |
* @var array An associative array of the filters that will be applied and the used values.
|
303 |
*/
|
304 |
+
protected $current_filters = array();
|
|
|
305 |
/**
|
306 |
* @var string|null The current filter being applied.
|
307 |
*/
|
308 |
protected $current_filter;
|
|
|
309 |
/**
|
310 |
* @var Tribe__Repository__Query_Filters
|
311 |
*/
|
312 |
public $filter_query;
|
|
|
313 |
/**
|
314 |
* @var string The filter that should be used to get a post by its primary key.
|
315 |
*/
|
316 |
protected $primary_key = 'p';
|
|
|
317 |
/**
|
318 |
* @var array A map of callbacks in the shape [ <slug> => <callback|primitive> ]
|
319 |
*/
|
320 |
+
protected $schema = array();
|
321 |
|
322 |
/**
|
323 |
* @var array A map of schema slugs and their meta keys to be queried.
|
324 |
*/
|
325 |
+
protected $simple_meta_schema = array();
|
326 |
|
327 |
/**
|
328 |
* @var array A map of schema slugs and their taxonomies to be queried.
|
329 |
*/
|
330 |
+
protected $simple_tax_schema = array();
|
331 |
|
332 |
/**
|
333 |
* @var Tribe__Repository__Interface
|
334 |
*/
|
335 |
protected $main_repository;
|
|
|
336 |
/**
|
337 |
* @var Tribe__Repository__Formatter_Interface
|
338 |
*/
|
339 |
protected $formatter;
|
|
|
340 |
/**
|
341 |
* @var bool
|
342 |
*/
|
356 |
*
|
357 |
* @var array
|
358 |
*/
|
359 |
+
protected $update_fields_aliases = array(
|
360 |
'title' => 'post_title',
|
361 |
'content' => 'post_content',
|
362 |
'description' => 'post_content',
|
370 |
'date_utc' => 'post_date_gmt',
|
371 |
'tag' => 'post_tag',
|
372 |
'image' => '_thumbnail_id',
|
373 |
+
);
|
374 |
|
375 |
/**
|
376 |
* The default create args that will be used by the repository
|
419 |
*/
|
420 |
public function __construct() {
|
421 |
$this->filter_query = new Tribe__Repository__Query_Filters();
|
422 |
+
$this->default_args = array_merge( array( 'posts_per_page' => - 1 ), $this->default_args );
|
423 |
+
$post_types = (array) Tribe__Utils__Array::get( $this->default_args, 'post_type', array() );
|
424 |
+
$this->taxonomies = get_taxonomies( array( 'object_type' => $post_types ), 'names' );
|
425 |
|
426 |
/**
|
427 |
* Allow plugins to init their classes and setup hooks at the initial setup of a repository.
|
498 |
*/
|
499 |
public function where( $key, $value = null ) {
|
500 |
$call_args = func_get_args();
|
501 |
+
return call_user_func_array( array( $this, 'by' ), $call_args );
|
|
|
502 |
}
|
503 |
|
504 |
/**
|
646 |
*/
|
647 |
public function all() {
|
648 |
if ( $this->void_query ) {
|
649 |
+
return array();
|
650 |
}
|
651 |
|
652 |
$query = $this->build_query();
|
687 |
*/
|
688 |
$formatted = $return_ids
|
689 |
? $results
|
690 |
+
: array_filter( array_map( array( $this, 'format_item' ), $results ) );
|
691 |
|
692 |
// Reset the fields if required.
|
693 |
$query->set( 'fields', $original_fields_value );
|
718 |
public function order( $order = 'ASC' ) {
|
719 |
$order = strtoupper( $order );
|
720 |
|
721 |
+
if ( ! in_array( $order, array( 'ASC', 'DESC' ), true ) ) {
|
722 |
return $this;
|
723 |
}
|
724 |
|
732 |
*/
|
733 |
public function order_by( $order_by, $order = 'DESC' ) {
|
734 |
$this->query_args['orderby'] = $order_by;
|
735 |
+
$this->query_args['order'] = $order;
|
|
|
|
|
|
|
|
|
736 |
|
737 |
return $this;
|
738 |
}
|
750 |
* {@inheritdoc}
|
751 |
*/
|
752 |
public function permission( $permission ) {
|
753 |
+
if ( ! in_array( $permission, array( self::PERMISSION_READABLE, self::PERMISSION_EDITABLE ), true ) ) {
|
754 |
return $this;
|
755 |
}
|
756 |
|
926 |
* {@inheritdoc}
|
927 |
*/
|
928 |
public function nth( $n ) {
|
929 |
+
$per_page = (int) Tribe__Utils__Array::get_in_any( array(
|
930 |
$this->query_args,
|
931 |
$this->default_args,
|
932 |
+
), 'posts_per_page', get_option( 'posts_per_page' ) );
|
933 |
|
934 |
if ( - 1 !== $per_page && $n > $per_page ) {
|
935 |
return null;
|
1006 |
$matching_ids = $this->get_ids();
|
1007 |
|
1008 |
if ( empty( $matching_ids ) ) {
|
1009 |
+
return array();
|
1010 |
}
|
1011 |
|
1012 |
$spliced = array_splice( $matching_ids, 0, $n );
|
1013 |
|
1014 |
+
return $return_ids ? $spliced : array_map( array( $this, 'format_item' ), $spliced );
|
1015 |
}
|
1016 |
|
1017 |
/**
|
1121 |
*/
|
1122 |
$this->query_args = array_merge( $this->query_args, $query_modifier );
|
1123 |
} else {
|
1124 |
+
$query_args = $this->query_args;
|
1125 |
+
|
1126 |
+
// Handle relation separately because we do not want that to merge recursively
|
1127 |
+
foreach ( $this->relation_query_args as $query_arg ) {
|
1128 |
+
if ( isset( $query_args[ $query_arg ]['relation'], $query_modifier[ $query_arg ]['relation'] ) ) {
|
1129 |
+
unset( $query_args[ $query_arg ]['relation'] );
|
1130 |
+
}
|
1131 |
+
}
|
1132 |
+
|
1133 |
/**
|
1134 |
* We do a recursive merge to allow "stacking" of same kind of queries;
|
1135 |
+
* e.g. two or more `tax_query`.
|
1136 |
*/
|
1137 |
+
$this->query_args = array_merge_recursive( $query_args, $query_modifier );
|
1138 |
}
|
1139 |
} else {
|
1140 |
/**
|
1182 |
if ( $this->has_default_modifier( $key ) ) {
|
1183 |
// let's use the default filters normalizing the key first
|
1184 |
$call_args[0] = $this->normalize_key( $key );
|
1185 |
+
$query_modifier = call_user_func_array( array( $this, 'apply_default_modifier' ), $call_args );
|
1186 |
} elseif ( 2 === count( $call_args ) ) {
|
1187 |
// Pass query argument $key with the single value argument.
|
1188 |
+
$query_modifier = array(
|
1189 |
$key => $call_args[1],
|
1190 |
+
);
|
1191 |
} else {
|
1192 |
// More than two $call_args were sent (key, value), assume it was meant for a filter that was not defined yet.
|
1193 |
throw Tribe__Repository__Usage_Error::because_the_read_filter_is_not_defined( $key, $this );
|
1194 |
}
|
1195 |
} else {
|
1196 |
+
$query_modifier = call_user_func_array( array( $this, 'apply_modifier' ), $call_args );
|
1197 |
}
|
1198 |
|
1199 |
return $query_modifier;
|
1243 |
// `ID` to `id`
|
1244 |
$normalized = strtolower( $key );
|
1245 |
|
1246 |
+
$post_prefixed = array(
|
1247 |
'password',
|
1248 |
'name__in',
|
1249 |
'_in',
|
1258 |
'modified',
|
1259 |
'modified_gmt',
|
1260 |
'content_filtered',
|
1261 |
+
);
|
1262 |
|
1263 |
if ( in_array( $key, $post_prefixed, true ) ) {
|
1264 |
$normalized = 'post_' . $key;
|
1316 |
$to_update = $this->get_ids();
|
1317 |
|
1318 |
if ( empty( $to_update ) ) {
|
1319 |
+
return $return_promise ? new Tribe__Promise() : array();
|
1320 |
}
|
1321 |
|
1322 |
+
$exit = array();
|
1323 |
+
$postarrs = array();
|
1324 |
|
1325 |
foreach ( $to_update as $id ) {
|
1326 |
$postarrs[ $id ] = $this->filter_postarr_for_update( $this->build_postarr( $id ), $id );
|
1351 |
*/
|
1352 |
public function get_ids() {
|
1353 |
if ( $this->void_query ) {
|
1354 |
+
return array();
|
1355 |
}
|
1356 |
|
1357 |
|
1383 |
* Extending classes might use this method to run sub-queries
|
1384 |
* and signal a void query; let's return an empty array.
|
1385 |
*/
|
1386 |
+
return array();
|
1387 |
}
|
1388 |
}
|
1389 |
|
1407 |
return ! in_array( $key, self::$blocked_keys, true );
|
1408 |
}
|
1409 |
|
1410 |
+
/**
|
1411 |
+
* Whether the key is a field of the posts table or not.
|
1412 |
+
*
|
1413 |
+
* @since 4.7.19
|
1414 |
+
*
|
1415 |
+
* @param string $key
|
1416 |
+
*
|
1417 |
+
* @return bool
|
1418 |
+
*/
|
1419 |
+
protected function is_a_post_field( $key ) {
|
1420 |
+
return in_array( $key, array(
|
1421 |
+
'ID',
|
1422 |
+
'post_author',
|
1423 |
+
'post_date',
|
1424 |
+
'post_date_gmt',
|
1425 |
+
'post_content',
|
1426 |
+
'post_title',
|
1427 |
+
'post_excerpt',
|
1428 |
+
'post_status',
|
1429 |
+
'comment_status',
|
1430 |
+
'ping_status',
|
1431 |
+
'post_password',
|
1432 |
+
'post_name',
|
1433 |
+
'to_ping',
|
1434 |
+
'pinged',
|
1435 |
+
'post_modified',
|
1436 |
+
'post_modified_gmt',
|
1437 |
+
'post_content_filtered',
|
1438 |
+
'post_parent',
|
1439 |
+
'guid',
|
1440 |
+
'menu_order',
|
1441 |
+
'post_type',
|
1442 |
+
'post_mime_type',
|
1443 |
+
'comment_count',
|
1444 |
+
), true );
|
1445 |
+
}
|
1446 |
+
|
1447 |
/**
|
1448 |
* Whether the current key is a date one requiring a converted key pair too or not.
|
1449 |
*
|
1474 |
$postarr[ $key ] = $value;
|
1475 |
}
|
1476 |
|
1477 |
+
/**
|
1478 |
+
* Whether the current key identifies one of the supported taxonomies or not.
|
1479 |
+
*
|
1480 |
+
* @since 4.7.19
|
1481 |
+
*
|
1482 |
+
* @param string $key
|
1483 |
+
*
|
1484 |
+
* @return bool
|
1485 |
+
*/
|
1486 |
+
protected function is_a_taxonomy( $key ) {
|
1487 |
+
return in_array( $key, $this->taxonomies, true );
|
1488 |
+
}
|
1489 |
+
|
1490 |
/**
|
1491 |
* {@inheritdoc}
|
1492 |
*/
|
1510 |
*/
|
1511 |
public function set( $key, $value ) {
|
1512 |
if ( ! is_string( $key ) ) {
|
1513 |
+
throw Tribe__Repository__Usage_Error::because_udpate_key_should_be_a_string( $this );
|
1514 |
}
|
1515 |
|
1516 |
$this->updates[ $key ] = $value;
|
1579 |
public function where_meta_related_by( $meta_keys, $compare, $field = null, $values = null ) {
|
1580 |
$meta_keys = Tribe__Utils__Array::list_to_array( $meta_keys );
|
1581 |
|
1582 |
+
if ( ! in_array( $compare, array( 'EXISTS', 'NOT EXISTS' ), true ) ) {
|
1583 |
if ( empty( $field ) || empty( $values ) ) {
|
1584 |
throw Tribe__Repository__Usage_Error::because_this_comparison_operator_requires_fields_and_values( $meta_keys, $compare, $this );
|
1585 |
}
|
1637 |
public function where_meta_related_by_meta( $meta_keys, $compare, $meta_field = null, $meta_values = null, $or_not_exists = false ) {
|
1638 |
$meta_keys = Tribe__Utils__Array::list_to_array( $meta_keys );
|
1639 |
|
1640 |
+
if ( ! in_array( $compare, array( 'EXISTS', 'NOT EXISTS' ), true ) ) {
|
1641 |
if ( empty( $meta_field ) || empty( $meta_values ) ) {
|
1642 |
throw Tribe__Repository__Usage_Error::because_this_comparison_operator_requires_fields_and_values( $meta_keys, $compare, $this );
|
1643 |
}
|
1724 |
$buffered_count = count( $buffered );
|
1725 |
|
1726 |
foreach ( $all_callbacks as $c ) {
|
1727 |
+
call_user_func_array( array( $this, $c[0] ), array_slice( $c, 1 ) );
|
1728 |
|
1729 |
if ( $buffered_count === count( $this->filter_query->get_buffered_where_clauses() ) ) {
|
1730 |
throw Tribe__Repository__Usage_Error::because_where_or_should_only_be_used_with_methods_that_add_where_clauses( $c, $this );
|
1765 |
* @param string|null $by The ->by() lookup to use (defaults to meta_regexp_or_like).
|
1766 |
*/
|
1767 |
public function add_simple_meta_schema_entry( $key, $meta_key, $by = null ) {
|
1768 |
+
$this->schema[ $key ] = array( $this, 'filter_by_simple_meta_schema' );
|
1769 |
|
1770 |
+
$this->simple_meta_schema[ $key ] = array(
|
1771 |
'meta_key' => $meta_key,
|
1772 |
'by' => $by,
|
1773 |
+
);
|
1774 |
}
|
1775 |
|
1776 |
/**
|
1783 |
* @param string|null $by The ->by() lookup to use (defaults to term_in).
|
1784 |
*/
|
1785 |
public function add_simple_tax_schema_entry( $key, $taxonomy, $by = null ) {
|
1786 |
+
$this->schema[ $key ] = array( $this, 'filter_by_simple_tax_schema' );
|
1787 |
|
1788 |
+
$this->simple_tax_schema[ $key ] = array(
|
1789 |
'taxonomy' => $taxonomy,
|
1790 |
'by' => $by,
|
1791 |
+
);
|
1792 |
}
|
1793 |
|
1794 |
/**
|
1810 |
* @throws Tribe__Repository__Usage_Error If a filter is called with wrong arguments.
|
1811 |
*/
|
1812 |
protected function apply_default_modifier( $key, $value ) {
|
1813 |
+
$args = array();
|
1814 |
|
1815 |
$call_args = func_get_args();
|
1816 |
$arg_1 = isset( $call_args[2] ) ? $call_args[2] : null;
|
1822 |
switch ( $key ) {
|
1823 |
default:
|
1824 |
// leverage built-in WP_Query filters
|
1825 |
+
$args = array( $key => $value );
|
1826 |
break;
|
1827 |
case 'ID':
|
1828 |
case 'id':
|
1829 |
+
$args = array( 'p' => $value );
|
1830 |
break;
|
1831 |
case 'search':
|
1832 |
+
$args = array( 's' => $value );
|
1833 |
break;
|
1834 |
case 'post_status':
|
1835 |
$this->query_args['post_status'] = (array) $value;
|
1859 |
break;
|
1860 |
case 'to_ping':
|
1861 |
$this->filter_query->to_get_posts_to_ping( $value );
|
1862 |
+
$args = array( 'to_ping' => $value );
|
1863 |
break;
|
1864 |
case 'post_modified':
|
1865 |
$args = $this->get_posts_after( $value, 'post_modified' );
|
1874 |
$this->filter_query->to_get_posts_with_guid_like( $value );
|
1875 |
break;
|
1876 |
case 'menu_order':
|
1877 |
+
$args = array( 'menu_order' => $value );
|
1878 |
break;
|
1879 |
case 'meta':
|
1880 |
case 'meta_equals':
|
2036 |
* @return array
|
2037 |
*/
|
2038 |
protected function get_posts_after( $value, $column = 'post_date' ) {
|
2039 |
+
$timezone = in_array( $column, array( 'post_date_gmt', 'post_modified_gmt' ), true )
|
2040 |
? 'UTC'
|
2041 |
: Tribe__Timezones::generate_timezone_string_from_utc_offset( Tribe__Timezones::wp_timezone_string() );
|
2042 |
|
2048 |
|
2049 |
$array_key = sprintf( '%s-after', $column );
|
2050 |
|
2051 |
+
return array(
|
2052 |
+
'date_query' => array(
|
2053 |
'relation' => 'AND',
|
2054 |
+
$array_key => array(
|
2055 |
'inclusive' => true,
|
2056 |
'column' => $column,
|
2057 |
'after' => $date->format( 'Y-m-d H:i:s' ),
|
2058 |
+
),
|
2059 |
+
),
|
2060 |
+
);
|
2061 |
}
|
2062 |
|
2063 |
/**
|
2071 |
* @return array
|
2072 |
*/
|
2073 |
protected function get_posts_before( $value, $column = 'post_date' ) {
|
2074 |
+
$timezone = in_array( $column, array( 'post_date_gmt', 'post_modified_gmt' ), true )
|
2075 |
? 'UTC'
|
2076 |
: Tribe__Timezones::generate_timezone_string_from_utc_offset( Tribe__Timezones::wp_timezone_string() );
|
2077 |
|
2083 |
|
2084 |
$array_key = sprintf( '%s-before', $column );
|
2085 |
|
2086 |
+
return array(
|
2087 |
+
'date_query' => array(
|
2088 |
'relation' => 'AND',
|
2089 |
+
$array_key => array(
|
2090 |
'inclusive' => true,
|
2091 |
'column' => $column,
|
2092 |
'before' => $date->format( 'Y-m-d H:i:s' ),
|
2093 |
+
),
|
2094 |
+
),
|
2095 |
+
);
|
2096 |
}
|
2097 |
|
2098 |
/**
|
2117 |
if ( count( $meta_keys ) === 1 ) {
|
2118 |
$array_key = $this->sql_slug( $meta_keys[0], $postfix );
|
2119 |
|
2120 |
+
$args = array(
|
2121 |
+
'meta_query' => array(
|
2122 |
+
$array_key => array(
|
2123 |
'key' => $meta_keys[0],
|
2124 |
'compare' => strtoupper( $compare ),
|
2125 |
+
),
|
2126 |
+
),
|
2127 |
+
);
|
2128 |
|
2129 |
+
if ( ! in_array( $compare, array( 'EXISTS', 'NOT EXISTS' ), true ) ) {
|
2130 |
$args['meta_query'][ $array_key ]['value'] = $meta_value;
|
2131 |
}
|
2132 |
|
2213 |
* @return array
|
2214 |
*/
|
2215 |
protected function build_tax_query( $taxonomy, $terms, $field, $operator ) {
|
2216 |
+
if ( in_array( $operator, array( 'EXISTS', 'NOT EXISTS' ), true ) ) {
|
2217 |
$array_key = $this->sql_slug( $taxonomy, $operator );
|
2218 |
} else {
|
2219 |
$array_key = $this->sql_slug( $taxonomy, $field, $operator );
|
2220 |
}
|
2221 |
|
2222 |
+
return array(
|
2223 |
+
'tax_query' => array(
|
2224 |
+
$array_key => array(
|
2225 |
'taxonomy' => $taxonomy,
|
2226 |
'field' => $field,
|
2227 |
'terms' => $terms,
|
2228 |
'operator' => strtoupper( $operator ),
|
2229 |
+
),
|
2230 |
+
),
|
2231 |
+
);
|
2232 |
}
|
2233 |
|
2234 |
/**
|
2272 |
public function prepare_interval( $values, $format = '%s', $operator = 'IN' ) {
|
2273 |
$values = Tribe__Utils__Array::list_to_array( $values );
|
2274 |
|
2275 |
+
$prepared = array();
|
2276 |
foreach ( $values as $value ) {
|
2277 |
$prepared[] = $this->prepare_value( $value, $format );
|
2278 |
}
|
2279 |
|
2280 |
+
return in_array( $operator, array( 'BETWEEN', 'NOT BETWEEN' ) )
|
2281 |
? sprintf( '%s AND %s', $prepared[0], $prepared[1] )
|
2282 |
: sprintf( '(%s)', implode( ',', $prepared ) );
|
2283 |
}
|
2478 |
$to_delete = $this->get_ids();
|
2479 |
|
2480 |
if ( empty( $to_delete ) ) {
|
2481 |
+
return $return_promise ? new Tribe__Promise() : array();
|
2482 |
}
|
2483 |
|
2484 |
|
2908 |
* {@inheritdoc}
|
2909 |
*/
|
2910 |
public function build_postarr( $id = null ) {
|
2911 |
+
$postarr = array(
|
2912 |
+
'tax_input' => array(),
|
2913 |
+
'meta_input' => array(),
|
2914 |
+
);
|
2915 |
|
2916 |
/*
|
2917 |
* The check is lax here by design: we leave space for the client code
|
3088 |
/**
|
3089 |
* {@inheritdoc}
|
3090 |
*/
|
3091 |
+
public function filter( $args = array(), $operator = 'AND' ) {
|
3092 |
$list = new WP_List_Util( $this->all() );
|
3093 |
|
3094 |
return $list->filter( $args, $operator );
|
3097 |
/**
|
3098 |
* {@inheritdoc}
|
3099 |
*/
|
3100 |
+
public function sort( $orderby = array(), $order = 'ASC', $preserve_keys = false ) {
|
3101 |
$list = new WP_List_Util( $this->all() );
|
3102 |
|
3103 |
return $list->sort( $orderby, $order, $preserve_keys );
|
common/src/Tribe/Repository/Core_Read_Interface.php
CHANGED
@@ -149,9 +149,9 @@ interface Core_Read_Interface {
|
|
149 |
*
|
150 |
* @since 4.7.19
|
151 |
*
|
152 |
-
* @param string
|
153 |
-
* @param string
|
154 |
-
*
|
155 |
*
|
156 |
* @return Tribe__Repository__Read_Interface
|
157 |
*/
|
@@ -362,7 +362,7 @@ interface Core_Read_Interface {
|
|
362 |
*
|
363 |
* @see \wp_list_filter()
|
364 |
*/
|
365 |
-
public function filter( $args =
|
366 |
|
367 |
/**
|
368 |
* Sorts the results according to the specified criteria.
|
@@ -382,7 +382,7 @@ interface Core_Read_Interface {
|
|
382 |
*
|
383 |
* @see \wp_list_sort()
|
384 |
*/
|
385 |
-
public function sort( $orderby =
|
386 |
|
387 |
/**
|
388 |
* Builds a collection on the result of the `all()` method call.
|
149 |
*
|
150 |
* @since 4.7.19
|
151 |
*
|
152 |
+
* @param string $order_by The post field, custom field or alias key to order posts by.
|
153 |
+
* @param string $order The order direction; optional; shortcut for the `order` method; defaults
|
154 |
+
* to `DESC`.
|
155 |
*
|
156 |
* @return Tribe__Repository__Read_Interface
|
157 |
*/
|
362 |
*
|
363 |
* @see \wp_list_filter()
|
364 |
*/
|
365 |
+
public function filter( $args = array(), $operator = 'AND' );
|
366 |
|
367 |
/**
|
368 |
* Sorts the results according to the specified criteria.
|
382 |
*
|
383 |
* @see \wp_list_sort()
|
384 |
*/
|
385 |
+
public function sort( $orderby = array(), $order = 'ASC', $preserve_keys = false );
|
386 |
|
387 |
/**
|
388 |
* Builds a collection on the result of the `all()` method call.
|
common/src/Tribe/Repository/Decorator.php
CHANGED
@@ -51,7 +51,7 @@ abstract class Tribe__Repository__Decorator implements Tribe__Repository__Interf
|
|
51 |
*/
|
52 |
public function by( $key, $value = null ) {
|
53 |
$call_args = func_get_args();
|
54 |
-
call_user_func_array(
|
55 |
|
56 |
return $this;
|
57 |
}
|
@@ -61,7 +61,7 @@ abstract class Tribe__Repository__Decorator implements Tribe__Repository__Interf
|
|
61 |
*/
|
62 |
public function where( $key, $value = null ) {
|
63 |
$call_args = func_get_args();
|
64 |
-
call_user_func_array(
|
65 |
|
66 |
return $this;
|
67 |
}
|
@@ -322,7 +322,7 @@ abstract class Tribe__Repository__Decorator implements Tribe__Repository__Interf
|
|
322 |
*/
|
323 |
public function where_or( $callbacks ) {
|
324 |
$call_args = func_get_args();
|
325 |
-
call_user_func_array(
|
326 |
|
327 |
return $this;
|
328 |
}
|
@@ -545,14 +545,14 @@ abstract class Tribe__Repository__Decorator implements Tribe__Repository__Interf
|
|
545 |
/**
|
546 |
* {@inheritdoc}
|
547 |
*/
|
548 |
-
public function filter( $orderby =
|
549 |
return $this->decorated->filter( $orderby, $order, $preserve_keys );
|
550 |
}
|
551 |
|
552 |
/**
|
553 |
* {@inheritdoc}
|
554 |
*/
|
555 |
-
public function sort( $orderby =
|
556 |
return $this->decorated->sort( $orderby, $order, $preserve_keys );
|
557 |
}
|
558 |
|
51 |
*/
|
52 |
public function by( $key, $value = null ) {
|
53 |
$call_args = func_get_args();
|
54 |
+
call_user_func_array( array( $this->decorated, 'by' ), $call_args );
|
55 |
|
56 |
return $this;
|
57 |
}
|
61 |
*/
|
62 |
public function where( $key, $value = null ) {
|
63 |
$call_args = func_get_args();
|
64 |
+
call_user_func_array( array( $this->decorated, 'where' ), $call_args );
|
65 |
|
66 |
return $this;
|
67 |
}
|
322 |
*/
|
323 |
public function where_or( $callbacks ) {
|
324 |
$call_args = func_get_args();
|
325 |
+
call_user_func_array( array( $this->decorated, 'where_or' ), $call_args );
|
326 |
|
327 |
return $this;
|
328 |
}
|
545 |
/**
|
546 |
* {@inheritdoc}
|
547 |
*/
|
548 |
+
public function filter( $orderby = array(), $order = 'ASC', $preserve_keys = false ) {
|
549 |
return $this->decorated->filter( $orderby, $order, $preserve_keys );
|
550 |
}
|
551 |
|
552 |
/**
|
553 |
* {@inheritdoc}
|
554 |
*/
|
555 |
+
public function sort( $orderby = array(), $order = 'ASC', $preserve_keys = false ) {
|
556 |
return $this->decorated->sort( $orderby, $order, $preserve_keys );
|
557 |
}
|
558 |
|
common/src/Tribe/Repository/Query_Filters.php
CHANGED
@@ -17,16 +17,16 @@ class Tribe__Repository__Query_Filters {
|
|
17 |
/**
|
18 |
* @var array
|
19 |
*/
|
20 |
-
protected static $initial_query_vars =
|
21 |
-
'like' =>
|
22 |
-
'post_title' =>
|
23 |
-
'post_content' =>
|
24 |
-
'post_excerpt' =>
|
25 |
-
|
26 |
-
'status' =>
|
27 |
-
'join' =>
|
28 |
-
'where' =>
|
29 |
-
|
30 |
|
31 |
/**
|
32 |
* An array of the filters that can be set and unset by id.
|
@@ -55,7 +55,7 @@ class Tribe__Repository__Query_Filters {
|
|
55 |
/**
|
56 |
* @var array A list of the filters this class has added.
|
57 |
*/
|
58 |
-
protected $active_filters =
|
59 |
|
60 |
/**
|
61 |
* @var bool
|
@@ -65,7 +65,7 @@ class Tribe__Repository__Query_Filters {
|
|
65 |
/**
|
66 |
* @var array
|
67 |
*/
|
68 |
-
protected $buffered_where_clauses =
|
69 |
|
70 |
/**
|
71 |
* Stores the last request run by the current query.
|
@@ -99,38 +99,38 @@ class Tribe__Repository__Query_Filters {
|
|
99 |
$values = Tribe__Utils__Array::list_to_array( $values );
|
100 |
|
101 |
if ( empty( $meta_keys ) || count( $values ) === 0 ) {
|
102 |
-
return
|
103 |
}
|
104 |
|
105 |
-
$args =
|
106 |
-
'meta_query' =>
|
107 |
-
$query_slug =>
|
108 |
'relation' => 'AND',
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
|
113 |
foreach ( $meta_keys as $key ) {
|
114 |
-
$args['meta_query'][ $query_slug ][ $key ] =
|
115 |
-
'not-exists' =>
|
116 |
'key' => $key,
|
117 |
'compare' => 'NOT EXISTS',
|
118 |
-
|
119 |
'relation' => 'OR',
|
120 |
-
|
121 |
|
122 |
if ( count( $values ) > 1 ) {
|
123 |
-
$args['meta_query'][ $query_slug ][ $key ]['not-in'] =
|
124 |
'key' => $key,
|
125 |
'compare' => 'NOT IN',
|
126 |
'value' => $values,
|
127 |
-
|
128 |
} else {
|
129 |
-
$args['meta_query'][ $query_slug ][ $key ]['not-equals'] =
|
130 |
'key' => $key,
|
131 |
'value' => $values[0],
|
132 |
'compare' => '!=',
|
133 |
-
|
134 |
}
|
135 |
}
|
136 |
|
@@ -153,30 +153,30 @@ class Tribe__Repository__Query_Filters {
|
|
153 |
$values = Tribe__Utils__Array::list_to_array( $values );
|
154 |
|
155 |
if ( empty( $meta_keys ) || count( $values ) === 0 ) {
|
156 |
-
return
|
157 |
}
|
158 |
|
159 |
-
$args =
|
160 |
-
'meta_query' =>
|
161 |
-
$query_slug =>
|
162 |
'relation' => 'OR',
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
|
167 |
foreach ( $meta_keys as $meta_key ) {
|
168 |
if ( count( $values ) > 1 ) {
|
169 |
-
$args['meta_query'][ $query_slug ][ $meta_key ] =
|
170 |
'key' => $meta_key,
|
171 |
'compare' => 'IN',
|
172 |
'value' => $values,
|
173 |
-
|
174 |
} else {
|
175 |
-
$args['meta_query'][ $query_slug ][ $meta_key ] =
|
176 |
'key' => $meta_key,
|
177 |
'compare' => '=',
|
178 |
'value' => $values[0],
|
179 |
-
|
180 |
}
|
181 |
}
|
182 |
|
@@ -197,22 +197,22 @@ class Tribe__Repository__Query_Filters {
|
|
197 |
$meta_keys = Tribe__Utils__Array::list_to_array( $meta_keys );
|
198 |
|
199 |
if ( empty( $meta_keys ) ) {
|
200 |
-
return
|
201 |
}
|
202 |
|
203 |
-
$args =
|
204 |
-
'meta_query' =>
|
205 |
-
$query_slug =>
|
206 |
'relation' => 'OR',
|
207 |
-
|
208 |
-
|
209 |
-
|
210 |
|
211 |
foreach ( $meta_keys as $meta_key ) {
|
212 |
-
$args['meta_query'][ $query_slug ][ $meta_key ] =
|
213 |
'key' => $meta_key,
|
214 |
'compare' => 'EXISTS',
|
215 |
-
|
216 |
}
|
217 |
|
218 |
return $args;
|
@@ -235,35 +235,35 @@ class Tribe__Repository__Query_Filters {
|
|
235 |
$values = Tribe__Utils__Array::list_to_array( $values );
|
236 |
|
237 |
if ( empty( $meta_keys ) || count( $values ) === 0 ) {
|
238 |
-
return
|
239 |
}
|
240 |
|
241 |
-
$args =
|
242 |
-
'meta_query' =>
|
243 |
-
$query_slug =>
|
244 |
'relation' => 'AND',
|
245 |
-
|
246 |
-
|
247 |
-
|
248 |
|
249 |
foreach ( $meta_keys as $meta_key ) {
|
250 |
-
$args['meta_query'][ $query_slug ][ $meta_key ]['does-not-exist'] =
|
251 |
'key' => $meta_key,
|
252 |
'compare' => 'NOT EXISTS',
|
253 |
-
|
254 |
$args['meta_query'][ $query_slug ][ $meta_key ]['relation'] = 'OR';
|
255 |
if ( count( $values ) > 1 ) {
|
256 |
-
$args['meta_query'][ $query_slug ][ $meta_key ]['in'] =
|
257 |
'key' => $meta_key,
|
258 |
'compare' => 'IN',
|
259 |
'value' => $values,
|
260 |
-
|
261 |
} else {
|
262 |
-
$args['meta_query'][ $query_slug ][ $meta_key ]['equals'] =
|
263 |
'key' => $meta_key,
|
264 |
'compare' => '=',
|
265 |
'value' => $values[0],
|
266 |
-
|
267 |
}
|
268 |
}
|
269 |
|
@@ -287,36 +287,36 @@ class Tribe__Repository__Query_Filters {
|
|
287 |
$values = Tribe__Utils__Array::list_to_array( $values );
|
288 |
|
289 |
if ( empty( $meta_keys ) || count( $values ) === 0 ) {
|
290 |
-
return
|
291 |
}
|
292 |
|
293 |
-
$args =
|
294 |
-
'meta_query' =>
|
295 |
-
$query_slug =>
|
296 |
'relation' => 'AND',
|
297 |
-
|
298 |
-
|
299 |
-
|
300 |
|
301 |
foreach ( $meta_keys as $meta_key ) {
|
302 |
-
$args['meta_query'][ $query_slug ][ $meta_key ]['does-not-exist'] =
|
303 |
'key' => $meta_key,
|
304 |
'compare' => 'NOT EXISTS',
|
305 |
-
|
306 |
$args['meta_query'][ $query_slug ][ $meta_key ]['relation'] = 'OR';
|
307 |
|
308 |
if ( count( $values ) > 1 ) {
|
309 |
-
$args['meta_query'][ $query_slug ][ $meta_key ]['not-in'] =
|
310 |
'key' => $meta_key,
|
311 |
'compare' => 'NOT IN',
|
312 |
'value' => $values,
|
313 |
-
|
314 |
} else {
|
315 |
-
$args['meta_query'][ $query_slug ][ $meta_key ]['not-equals'] =
|
316 |
'key' => $meta_key,
|
317 |
'compare' => '!=',
|
318 |
'value' => $values[0],
|
319 |
-
|
320 |
}
|
321 |
}
|
322 |
|
@@ -366,11 +366,11 @@ class Tribe__Repository__Query_Filters {
|
|
366 |
global $wpdb;
|
367 |
|
368 |
$like = $wpdb->esc_like( $entry );
|
369 |
-
$variations =
|
370 |
$wpdb->prepare( "{$wpdb->posts}.{$field} LIKE %s ", "{$like}%" ),
|
371 |
$wpdb->prepare( "{$wpdb->posts}.{$field} LIKE %s ", "%{$like}%" ),
|
372 |
$wpdb->prepare( "{$wpdb->posts}.{$field} LIKE %s ", "%{$like}" ),
|
373 |
-
|
374 |
|
375 |
return ' AND (' . implode( ' OR ', $variations ) . ')';
|
376 |
}
|
@@ -430,7 +430,7 @@ class Tribe__Repository__Query_Filters {
|
|
430 |
$matching_ids = $wpdb->get_col( $relation_query );
|
431 |
|
432 |
if ( empty( $matching_ids ) ) {
|
433 |
-
$query->posts =
|
434 |
$filtered_found_posts = 0;
|
435 |
break;
|
436 |
}
|
@@ -438,7 +438,7 @@ class Tribe__Repository__Query_Filters {
|
|
438 |
if ( $ids_only ) {
|
439 |
$query->posts = array_intersect( $query->posts, $matching_ids );
|
440 |
} else {
|
441 |
-
$updated_query_posts =
|
442 |
foreach ( $query->posts as $this_post ) {
|
443 |
if ( in_array( $this_post->ID, $matching_ids ) ) {
|
444 |
$updated_query_posts[] = $this_post;
|
@@ -475,8 +475,8 @@ class Tribe__Repository__Query_Filters {
|
|
475 |
public function to_get_posts_with_title_like( $value ) {
|
476 |
$this->query_vars['like']['post_title'][] = $value;
|
477 |
|
478 |
-
if ( ! has_filter( 'posts_where',
|
479 |
-
$this->add_filter( 'posts_where',
|
480 |
}
|
481 |
}
|
482 |
|
@@ -492,7 +492,7 @@ class Tribe__Repository__Query_Filters {
|
|
492 |
* @param int $accepted_args
|
493 |
*/
|
494 |
protected function add_filter( $tag, $function_to_add, $priority = 10, $accepted_args = 1 ) {
|
495 |
-
$this->active_filters[] =
|
496 |
add_filter( $tag, $function_to_add, $priority, $accepted_args );
|
497 |
}
|
498 |
|
@@ -506,8 +506,8 @@ class Tribe__Repository__Query_Filters {
|
|
506 |
public function to_get_posts_with_content_like( $value ) {
|
507 |
$this->query_vars['like']['post_content'][] = $value;
|
508 |
|
509 |
-
if ( ! has_filter( 'posts_where',
|
510 |
-
$this->add_filter( 'posts_where',
|
511 |
}
|
512 |
}
|
513 |
|
@@ -521,8 +521,8 @@ class Tribe__Repository__Query_Filters {
|
|
521 |
public function to_get_posts_with_excerpt_like( $value ) {
|
522 |
$this->query_vars['like']['post_excerpt'] = $value;
|
523 |
|
524 |
-
if ( ! has_filter( 'posts_where',
|
525 |
-
add_filter( 'posts_where',
|
526 |
}
|
527 |
}
|
528 |
|
@@ -536,8 +536,8 @@ class Tribe__Repository__Query_Filters {
|
|
536 |
public function to_get_posts_with_filtered_content_like( $value ) {
|
537 |
$this->query_vars['like']['post_content_filtered'][] = $value;
|
538 |
|
539 |
-
if ( ! has_filter( 'posts_where',
|
540 |
-
add_filter( 'posts_where',
|
541 |
}
|
542 |
}
|
543 |
|
@@ -551,8 +551,8 @@ class Tribe__Repository__Query_Filters {
|
|
551 |
public function to_get_posts_with_guid_like( $value ) {
|
552 |
$this->query_vars['like']['guid'][] = $value;
|
553 |
|
554 |
-
if ( ! has_filter( 'posts_where',
|
555 |
-
add_filter( 'posts_where',
|
556 |
}
|
557 |
}
|
558 |
|
@@ -566,8 +566,8 @@ class Tribe__Repository__Query_Filters {
|
|
566 |
public function to_get_posts_to_ping( $value ) {
|
567 |
$this->query_vars['to_ping'] = $value;
|
568 |
|
569 |
-
if ( ! has_filter( 'posts_where',
|
570 |
-
add_filter( 'posts_where',
|
571 |
}
|
572 |
}
|
573 |
|
@@ -666,8 +666,8 @@ class Tribe__Repository__Query_Filters {
|
|
666 |
$this->query_vars['where'][] = '(' . $where_clause . ')';
|
667 |
}
|
668 |
|
669 |
-
if ( ! has_filter( 'posts_where',
|
670 |
-
add_filter( 'posts_where',
|
671 |
}
|
672 |
}
|
673 |
}
|
@@ -690,8 +690,8 @@ class Tribe__Repository__Query_Filters {
|
|
690 |
$this->query_vars['join'][] = $join_clause;
|
691 |
}
|
692 |
|
693 |
-
if ( ! has_filter( 'posts_join',
|
694 |
-
add_filter( 'posts_join',
|
695 |
}
|
696 |
}
|
697 |
|
@@ -738,8 +738,8 @@ class Tribe__Repository__Query_Filters {
|
|
738 |
$this->query_vars[ $orderby_key ][ $id ] = array_merge( $this->query_vars[ $orderby_key ][ $id ], $entries );
|
739 |
}
|
740 |
|
741 |
-
if ( ! has_filter( 'posts_orderby',
|
742 |
-
add_filter( 'posts_orderby',
|
743 |
}
|
744 |
}
|
745 |
|
@@ -762,8 +762,8 @@ class Tribe__Repository__Query_Filters {
|
|
762 |
$this->query_vars['fields'][] = $field;
|
763 |
}
|
764 |
|
765 |
-
if ( ! has_filter( 'posts_fields',
|
766 |
-
add_filter( 'posts_fields',
|
767 |
}
|
768 |
}
|
769 |
|
@@ -795,7 +795,7 @@ class Tribe__Repository__Query_Filters {
|
|
795 |
|
796 |
if ( $get_clean ) {
|
797 |
$this->buffer_where_clauses = false;
|
798 |
-
$this->buffered_where_clauses =
|
799 |
}
|
800 |
|
801 |
return $clauses;
|
@@ -846,7 +846,7 @@ class Tribe__Repository__Query_Filters {
|
|
846 |
global $wpdb;
|
847 |
|
848 |
foreach ( $input as $string ) {
|
849 |
-
$buffer[] = is_array( $string ) ? $string :
|
850 |
}
|
851 |
|
852 |
$buffer = array_unique( call_user_func_array( 'array_merge', $buffer ) );
|
@@ -1055,7 +1055,7 @@ class Tribe__Repository__Query_Filters {
|
|
1055 |
* value, if the query is not the one attached to this filter or the method
|
1056 |
* is called not in the context of the `posts_pre_query` filter;
|
1057 |
*/
|
1058 |
-
public function capture_request( $posts = null, WP_Query $query
|
1059 |
if ( ! doing_filter( 'posts_pre_query' ) ) {
|
1060 |
// Let's make sure nothing bad happens if this runs outside of its natural context.
|
1061 |
return null;
|
17 |
/**
|
18 |
* @var array
|
19 |
*/
|
20 |
+
protected static $initial_query_vars = array(
|
21 |
+
'like' => array(
|
22 |
+
'post_title' => array(),
|
23 |
+
'post_content' => array(),
|
24 |
+
'post_excerpt' => array(),
|
25 |
+
),
|
26 |
+
'status' => array(),
|
27 |
+
'join' => array(),
|
28 |
+
'where' => array(),
|
29 |
+
);
|
30 |
|
31 |
/**
|
32 |
* An array of the filters that can be set and unset by id.
|
55 |
/**
|
56 |
* @var array A list of the filters this class has added.
|
57 |
*/
|
58 |
+
protected $active_filters = array();
|
59 |
|
60 |
/**
|
61 |
* @var bool
|
65 |
/**
|
66 |
* @var array
|
67 |
*/
|
68 |
+
protected $buffered_where_clauses = array();
|
69 |
|
70 |
/**
|
71 |
* Stores the last request run by the current query.
|
99 |
$values = Tribe__Utils__Array::list_to_array( $values );
|
100 |
|
101 |
if ( empty( $meta_keys ) || count( $values ) === 0 ) {
|
102 |
+
return array();
|
103 |
}
|
104 |
|
105 |
+
$args = array(
|
106 |
+
'meta_query' => array(
|
107 |
+
$query_slug => array(
|
108 |
'relation' => 'AND',
|
109 |
+
),
|
110 |
+
),
|
111 |
+
);
|
112 |
|
113 |
foreach ( $meta_keys as $key ) {
|
114 |
+
$args['meta_query'][ $query_slug ][ $key ] = array(
|
115 |
+
'not-exists' => array(
|
116 |
'key' => $key,
|
117 |
'compare' => 'NOT EXISTS',
|
118 |
+
),
|
119 |
'relation' => 'OR',
|
120 |
+
);
|
121 |
|
122 |
if ( count( $values ) > 1 ) {
|
123 |
+
$args['meta_query'][ $query_slug ][ $key ]['not-in'] = array(
|
124 |
'key' => $key,
|
125 |
'compare' => 'NOT IN',
|
126 |
'value' => $values,
|
127 |
+
);
|
128 |
} else {
|
129 |
+
$args['meta_query'][ $query_slug ][ $key ]['not-equals'] = array(
|
130 |
'key' => $key,
|
131 |
'value' => $values[0],
|
132 |
'compare' => '!=',
|
133 |
+
);
|
134 |
}
|
135 |
}
|
136 |
|
153 |
$values = Tribe__Utils__Array::list_to_array( $values );
|
154 |
|
155 |
if ( empty( $meta_keys ) || count( $values ) === 0 ) {
|
156 |
+
return array();
|
157 |
}
|
158 |
|
159 |
+
$args = array(
|
160 |
+
'meta_query' => array(
|
161 |
+
$query_slug => array(
|
162 |
'relation' => 'OR',
|
163 |
+
),
|
164 |
+
),
|
165 |
+
);
|
166 |
|
167 |
foreach ( $meta_keys as $meta_key ) {
|
168 |
if ( count( $values ) > 1 ) {
|
169 |
+
$args['meta_query'][ $query_slug ][ $meta_key ] = array(
|
170 |
'key' => $meta_key,
|
171 |
'compare' => 'IN',
|
172 |
'value' => $values,
|
173 |
+
);
|
174 |
} else {
|
175 |
+
$args['meta_query'][ $query_slug ][ $meta_key ] = array(
|
176 |
'key' => $meta_key,
|
177 |
'compare' => '=',
|
178 |
'value' => $values[0],
|
179 |
+
);
|
180 |
}
|
181 |
}
|
182 |
|
197 |
$meta_keys = Tribe__Utils__Array::list_to_array( $meta_keys );
|
198 |
|
199 |
if ( empty( $meta_keys ) ) {
|
200 |
+
return array();
|
201 |
}
|
202 |
|
203 |
+
$args = array(
|
204 |
+
'meta_query' => array(
|
205 |
+
$query_slug => array(
|
206 |
'relation' => 'OR',
|
207 |
+
),
|
208 |
+
),
|
209 |
+
);
|
210 |
|
211 |
foreach ( $meta_keys as $meta_key ) {
|
212 |
+
$args['meta_query'][ $query_slug ][ $meta_key ] = array(
|
213 |
'key' => $meta_key,
|
214 |
'compare' => 'EXISTS',
|
215 |
+
);
|
216 |
}
|
217 |
|
218 |
return $args;
|
235 |
$values = Tribe__Utils__Array::list_to_array( $values );
|
236 |
|
237 |
if ( empty( $meta_keys ) || count( $values ) === 0 ) {
|
238 |
+
return array();
|
239 |
}
|
240 |
|
241 |
+
$args = array(
|
242 |
+
'meta_query' => array(
|
243 |
+
$query_slug => array(
|
244 |
'relation' => 'AND',
|
245 |
+
),
|
246 |
+
),
|
247 |
+
);
|
248 |
|
249 |
foreach ( $meta_keys as $meta_key ) {
|
250 |
+
$args['meta_query'][ $query_slug ][ $meta_key ]['does-not-exist'] = array(
|
251 |
'key' => $meta_key,
|
252 |
'compare' => 'NOT EXISTS',
|
253 |
+
);
|
254 |
$args['meta_query'][ $query_slug ][ $meta_key ]['relation'] = 'OR';
|
255 |
if ( count( $values ) > 1 ) {
|
256 |
+
$args['meta_query'][ $query_slug ][ $meta_key ]['in'] = array(
|
257 |
'key' => $meta_key,
|
258 |
'compare' => 'IN',
|
259 |
'value' => $values,
|
260 |
+
);
|
261 |
} else {
|
262 |
+
$args['meta_query'][ $query_slug ][ $meta_key ]['equals'] = array(
|
263 |
'key' => $meta_key,
|
264 |
'compare' => '=',
|
265 |
'value' => $values[0],
|
266 |
+
);
|
267 |
}
|
268 |
}
|
269 |
|
287 |
$values = Tribe__Utils__Array::list_to_array( $values );
|
288 |
|
289 |
if ( empty( $meta_keys ) || count( $values ) === 0 ) {
|
290 |
+
return array();
|
291 |
}
|
292 |
|
293 |
+
$args = array(
|
294 |
+
'meta_query' => array(
|
295 |
+
$query_slug => array(
|
296 |
'relation' => 'AND',
|
297 |
+
),
|
298 |
+
),
|
299 |
+
);
|
300 |
|
301 |
foreach ( $meta_keys as $meta_key ) {
|
302 |
+
$args['meta_query'][ $query_slug ][ $meta_key ]['does-not-exist'] = array(
|
303 |
'key' => $meta_key,
|
304 |
'compare' => 'NOT EXISTS',
|
305 |
+
);
|
306 |
$args['meta_query'][ $query_slug ][ $meta_key ]['relation'] = 'OR';
|
307 |
|
308 |
if ( count( $values ) > 1 ) {
|
309 |
+
$args['meta_query'][ $query_slug ][ $meta_key ]['not-in'] = array(
|
310 |
'key' => $meta_key,
|
311 |
'compare' => 'NOT IN',
|
312 |
'value' => $values,
|
313 |
+
);
|
314 |
} else {
|
315 |
+
$args['meta_query'][ $query_slug ][ $meta_key ]['not-equals'] = array(
|
316 |
'key' => $meta_key,
|
317 |
'compare' => '!=',
|
318 |
'value' => $values[0],
|
319 |
+
);
|
320 |
}
|
321 |
}
|
322 |
|
366 |
global $wpdb;
|
367 |
|
368 |
$like = $wpdb->esc_like( $entry );
|
369 |
+
$variations = array(
|
370 |
$wpdb->prepare( "{$wpdb->posts}.{$field} LIKE %s ", "{$like}%" ),
|
371 |
$wpdb->prepare( "{$wpdb->posts}.{$field} LIKE %s ", "%{$like}%" ),
|
372 |
$wpdb->prepare( "{$wpdb->posts}.{$field} LIKE %s ", "%{$like}" ),
|
373 |
+
);
|
374 |
|
375 |
return ' AND (' . implode( ' OR ', $variations ) . ')';
|
376 |
}
|
430 |
$matching_ids = $wpdb->get_col( $relation_query );
|
431 |
|
432 |
if ( empty( $matching_ids ) ) {
|
433 |
+
$query->posts = array();
|
434 |
$filtered_found_posts = 0;
|
435 |
break;
|
436 |
}
|
438 |
if ( $ids_only ) {
|
439 |
$query->posts = array_intersect( $query->posts, $matching_ids );
|
440 |
} else {
|
441 |
+
$updated_query_posts = array();
|
442 |
foreach ( $query->posts as $this_post ) {
|
443 |
if ( in_array( $this_post->ID, $matching_ids ) ) {
|
444 |
$updated_query_posts[] = $this_post;
|
475 |
public function to_get_posts_with_title_like( $value ) {
|
476 |
$this->query_vars['like']['post_title'][] = $value;
|
477 |
|
478 |
+
if ( ! has_filter( 'posts_where', array( $this, 'filter_by_like' ) ) ) {
|
479 |
+
$this->add_filter( 'posts_where', array( $this, 'filter_by_like' ), 10, 2 );
|
480 |
}
|
481 |
}
|
482 |
|
492 |
* @param int $accepted_args
|
493 |
*/
|
494 |
protected function add_filter( $tag, $function_to_add, $priority = 10, $accepted_args = 1 ) {
|
495 |
+
$this->active_filters[] = array( $tag, $function_to_add, $priority );
|
496 |
add_filter( $tag, $function_to_add, $priority, $accepted_args );
|
497 |
}
|
498 |
|
506 |
public function to_get_posts_with_content_like( $value ) {
|
507 |
$this->query_vars['like']['post_content'][] = $value;
|
508 |
|
509 |
+
if ( ! has_filter( 'posts_where', array( $this, 'filter_by_like' ) ) ) {
|
510 |
+
$this->add_filter( 'posts_where', array( $this, 'filter_by_like' ), 10, 2 );
|
511 |
}
|
512 |
}
|
513 |
|
521 |
public function to_get_posts_with_excerpt_like( $value ) {
|
522 |
$this->query_vars['like']['post_excerpt'] = $value;
|
523 |
|
524 |
+
if ( ! has_filter( 'posts_where', array( $this, 'filter_by_like' ) ) ) {
|
525 |
+
add_filter( 'posts_where', array( $this, 'filter_by_like' ), 10, 2 );
|
526 |
}
|
527 |
}
|
528 |
|
536 |
public function to_get_posts_with_filtered_content_like( $value ) {
|
537 |
$this->query_vars['like']['post_content_filtered'][] = $value;
|
538 |
|
539 |
+
if ( ! has_filter( 'posts_where', array( $this, 'filter_by_like' ) ) ) {
|
540 |
+
add_filter( 'posts_where', array( $this, 'filter_by_like' ), 10, 2 );
|
541 |
}
|
542 |
}
|
543 |
|
551 |
public function to_get_posts_with_guid_like( $value ) {
|
552 |
$this->query_vars['like']['guid'][] = $value;
|
553 |
|
554 |
+
if ( ! has_filter( 'posts_where', array( $this, 'filter_by_like' ) ) ) {
|
555 |
+
add_filter( 'posts_where', array( $this, 'filter_by_like' ), 10, 2 );
|
556 |
}
|
557 |
}
|
558 |
|
566 |
public function to_get_posts_to_ping( $value ) {
|
567 |
$this->query_vars['to_ping'] = $value;
|
568 |
|
569 |
+
if ( ! has_filter( 'posts_where', array( $this, 'filter_by_to_ping' ) ) ) {
|
570 |
+
add_filter( 'posts_where', array( $this, 'filter_by_to_ping' ), 10, 2 );
|
571 |
}
|
572 |
}
|
573 |
|
666 |
$this->query_vars['where'][] = '(' . $where_clause . ')';
|
667 |
}
|
668 |
|
669 |
+
if ( ! has_filter( 'posts_where', array( $this, 'filter_posts_where' ) ) ) {
|
670 |
+
add_filter( 'posts_where', array( $this, 'filter_posts_where' ), 10, 2 );
|
671 |
}
|
672 |
}
|
673 |
}
|
690 |
$this->query_vars['join'][] = $join_clause;
|
691 |
}
|
692 |
|
693 |
+
if ( ! has_filter( 'posts_join', array( $this, 'filter_posts_join' ) ) ) {
|
694 |
+
add_filter( 'posts_join', array( $this, 'filter_posts_join' ), 10, 2 );
|
695 |
}
|
696 |
}
|
697 |
|
738 |
$this->query_vars[ $orderby_key ][ $id ] = array_merge( $this->query_vars[ $orderby_key ][ $id ], $entries );
|
739 |
}
|
740 |
|
741 |
+
if ( ! has_filter( 'posts_orderby', array( $this, 'filter_posts_orderby' ) ) ) {
|
742 |
+
add_filter( 'posts_orderby', array( $this, 'filter_posts_orderby' ), 10, 2 );
|
743 |
}
|
744 |
}
|
745 |
|
762 |
$this->query_vars['fields'][] = $field;
|
763 |
}
|
764 |
|
765 |
+
if ( ! has_filter( 'posts_fields', array( $this, 'filter_posts_fields' ) ) ) {
|
766 |
+
add_filter( 'posts_fields', array( $this, 'filter_posts_fields' ), 10, 2 );
|
767 |
}
|
768 |
}
|
769 |
|
795 |
|
796 |
if ( $get_clean ) {
|
797 |
$this->buffer_where_clauses = false;
|
798 |
+
$this->buffered_where_clauses = array();
|
799 |
}
|
800 |
|
801 |
return $clauses;
|
846 |
global $wpdb;
|
847 |
|
848 |
foreach ( $input as $string ) {
|
849 |
+
$buffer[] = is_array( $string ) ? $string : array( $string );
|
850 |
}
|
851 |
|
852 |
$buffer = array_unique( call_user_func_array( 'array_merge', $buffer ) );
|
1055 |
* value, if the query is not the one attached to this filter or the method
|
1056 |
* is called not in the context of the `posts_pre_query` filter;
|
1057 |
*/
|
1058 |
+
public function capture_request( $posts = null, WP_Query $query ) {
|
1059 |
if ( ! doing_filter( 'posts_pre_query' ) ) {
|
1060 |
// Let's make sure nothing bad happens if this runs outside of its natural context.
|
1061 |
return null;
|
common/src/Tribe/Repository/Usage_Error.php
CHANGED
@@ -75,23 +75,7 @@ class Tribe__Repository__Usage_Error extends Exception {
|
|
75 |
public static function because_this_field_cannot_be_updated( $key, $object ) {
|
76 |
$class = get_class( $object );
|
77 |
|
78 |
-
return new self( "The {$class} class does not allow
|
79 |
-
}
|
80 |
-
|
81 |
-
/**
|
82 |
-
* "Sugar" method to correct a typo in a public method name.
|
83 |
-
* Indicates that the `set` method of the Update repository is being used incorrectly.
|
84 |
-
*
|
85 |
-
* @since 4.12.6
|
86 |
-
*
|
87 |
-
* @TODO: perhaps we should deprecate this at some point?
|
88 |
-
*
|
89 |
-
* @param Tribe__Repository__Update_Interface $object
|
90 |
-
*
|
91 |
-
* @return Tribe__Repository__Usage_Error A ready to throw instance of the class.
|
92 |
-
*/
|
93 |
-
public static function because_udpate_key_should_be_a_string( $object ) {
|
94 |
-
return self::because_update_key_should_be_a_string( $object );
|
95 |
}
|
96 |
|
97 |
/**
|
@@ -103,7 +87,7 @@ class Tribe__Repository__Usage_Error extends Exception {
|
|
103 |
*
|
104 |
* @return Tribe__Repository__Usage_Error A ready to throw instance of the class.
|
105 |
*/
|
106 |
-
public static function
|
107 |
$class = get_class( $object );
|
108 |
|
109 |
return new self( 'The key used in the `set` method should be a string; if you want to set multiple fields at once use the `set_args` method.' );
|
@@ -221,7 +205,7 @@ class Tribe__Repository__Usage_Error extends Exception {
|
|
221 |
* @return Tribe__Repository__Usage_Error A ready to throw instance of the class.
|
222 |
*/
|
223 |
public static function because_this_comparison_operator_requires_an_value_of_type( $operator, $filter, $type ) {
|
224 |
-
return new self( "You are trying to use a comparison
|
225 |
}
|
226 |
|
227 |
/**
|
75 |
public static function because_this_field_cannot_be_updated( $key, $object ) {
|
76 |
$class = get_class( $object );
|
77 |
|
78 |
+
return new self( "The {$class} class does not allow udpating the {$key} field; allow it by decorating or extending this class." );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
79 |
}
|
80 |
|
81 |
/**
|
87 |
*
|
88 |
* @return Tribe__Repository__Usage_Error A ready to throw instance of the class.
|
89 |
*/
|
90 |
+
public static function because_udpate_key_should_be_a_string( $object ) {
|
91 |
$class = get_class( $object );
|
92 |
|
93 |
return new self( 'The key used in the `set` method should be a string; if you want to set multiple fields at once use the `set_args` method.' );
|
205 |
* @return Tribe__Repository__Usage_Error A ready to throw instance of the class.
|
206 |
*/
|
207 |
public static function because_this_comparison_operator_requires_an_value_of_type( $operator, $filter, $type ) {
|
208 |
+
return new self( "You are trying to use a comparison opearator ({$operator}) in the filter {$filter} that requires a value of type {$type}." );
|
209 |
}
|
210 |
|
211 |
/**
|
common/src/Tribe/Rewrite.php
CHANGED
@@ -47,15 +47,14 @@ class Tribe__Rewrite {
|
|
47 |
*
|
48 |
* @var array
|
49 |
*/
|
50 |
-
public $rules =
|
51 |
|
52 |
/**
|
53 |
* Base slugs for rewrite urls
|
54 |
*
|
55 |
* @var array
|
56 |
*/
|
57 |
-
public $bases =
|
58 |
-
|
59 |
/**
|
60 |
* After creating the Hooks on WordPress we lock the usage of the function.
|
61 |
*
|
@@ -183,17 +182,17 @@ class Tribe__Rewrite {
|
|
183 |
}
|
184 |
|
185 |
protected function add_hooks() {
|
186 |
-
add_filter( 'generate_rewrite_rules',
|
187 |
|
188 |
// Remove percent Placeholders on all items
|
189 |
-
add_filter( 'rewrite_rules_array',
|
190 |
|
191 |
add_action( 'shutdown', [ $this, 'dump_cache' ] );
|
192 |
}
|
193 |
|
194 |
protected function remove_hooks() {
|
195 |
-
remove_filter( 'generate_rewrite_rules',
|
196 |
-
remove_filter( 'rewrite_rules_array',
|
197 |
|
198 |
remove_action( 'shutdown', [ $this, 'dump_cache' ] );
|
199 |
}
|
@@ -230,10 +229,10 @@ class Tribe__Rewrite {
|
|
230 |
*
|
231 |
* @return Tribe__Events__Rewrite
|
232 |
*/
|
233 |
-
public function add( $regex, $args =
|
234 |
$regex = (array) $regex;
|
235 |
|
236 |
-
$default =
|
237 |
$args = array_filter( wp_parse_args( $args, $default ) );
|
238 |
|
239 |
$url = add_query_arg( $args, 'index.php' );
|
@@ -246,7 +245,7 @@ class Tribe__Rewrite {
|
|
246 |
|
247 |
// Add the Bases to the regex
|
248 |
foreach ( $this->bases as $key => $value ) {
|
249 |
-
$regex = str_replace(
|
250 |
}
|
251 |
|
252 |
// Apply the Preg Indexes to the URL
|
@@ -413,17 +412,6 @@ class Tribe__Rewrite {
|
|
413 |
return $home_url;
|
414 |
}
|
415 |
|
416 |
-
// Passthru vars are additional salts for the cache that would render it useless: parse them here.
|
417 |
-
$query = (string) parse_url( $url, PHP_URL_QUERY );
|
418 |
-
wp_parse_str( $query, $query_vars );
|
419 |
-
// Non-scalar value query vars should not be handled, but they should survive the resolution and not be cached.
|
420 |
-
$scalar_query_vars = array_filter( $query_vars, 'is_scalar' );
|
421 |
-
$passthru_vars = array_diff_key( $query_vars, $scalar_query_vars );
|
422 |
-
// Remove the passthru query vars from the URL to match the correct cache.
|
423 |
-
$url = remove_query_arg( array_keys( $passthru_vars ), $url );
|
424 |
-
// Normalize the URL to make sure there's a trailing slash at the end of the path, before the query or fragment.
|
425 |
-
$url = preg_replace( '~(?<!/)([?#])~', '/$1', $url );
|
426 |
-
|
427 |
if ( ! $force ) {
|
428 |
$this->warmup_cache(
|
429 |
'canonical_url',
|
@@ -431,12 +419,15 @@ class Tribe__Rewrite {
|
|
431 |
Listener::TRIGGER_GENERATE_REWRITE_RULES
|
432 |
);
|
433 |
if ( isset( $this->canonical_url_cache[ $url ] ) ) {
|
434 |
-
|
435 |
-
return add_query_arg( $passthru_vars, $this->canonical_url_cache[ $url ] );
|
436 |
}
|
437 |
}
|
438 |
|
439 |
-
$
|
|
|
|
|
|
|
|
|
440 |
|
441 |
if ( isset( $query_vars['paged'] ) && 1 === (int) $query_vars['paged'] ) {
|
442 |
// Remove the `paged` query var if it's 1.
|
@@ -522,11 +513,6 @@ class Tribe__Rewrite {
|
|
522 |
return '';
|
523 |
}
|
524 |
|
525 |
-
if ( isset( $localized_matcher['localized_slug'] ) ) {
|
526 |
-
// If available, then return the localized slug instead of inferring it as we do below.
|
527 |
-
return $localized_matcher['localized_slug'];
|
528 |
-
}
|
529 |
-
|
530 |
/*
|
531 |
* We use `end` as, by default, the localized version of the slug in the current language will be at the
|
532 |
* end of the array.
|
@@ -554,8 +540,7 @@ class Tribe__Rewrite {
|
|
554 |
$replace
|
555 |
);
|
556 |
|
557 |
-
|
558 |
-
$replaced = str_ireplace( array_keys( $replace ), $replace, $link_template );
|
559 |
|
560 |
// Remove trailing chars.
|
561 |
$path = rtrim( $replaced, '?$' );
|
@@ -599,9 +584,6 @@ class Tribe__Rewrite {
|
|
599 |
$this->canonical_url_cache[ $url ] = $resolved;
|
600 |
}
|
601 |
|
602 |
-
// Re-apply passthru vars now, if any. After the caching to allow salting the cache key too much.
|
603 |
-
$resolved = add_query_arg( $passthru_vars, $resolved );
|
604 |
-
|
605 |
return $resolved;
|
606 |
}
|
607 |
|
@@ -885,16 +867,10 @@ class Tribe__Rewrite {
|
|
885 |
$perma_query_vars = [];
|
886 |
$url_components = parse_url($url);
|
887 |
$url_path = Arr::get( $url_components, 'path', '/' );
|
888 |
-
$site_path = parse_url( home_url(), PHP_URL_PATH );
|
889 |
-
if ( ! empty( $site_path ) && '/' !== $site_path ) {
|
890 |
-
// The current site is in a sub-directory: the site path should be dropped from the request path.
|
891 |
-
$url_path = str_replace( $site_path, '', $url_path );
|
892 |
-
}
|
893 |
$url_query = Arr::get( $url_components, 'query', '' );
|
894 |
parse_str( $url_query, $url_query_vars );
|
895 |
// Look for matches, removing leading `/` char.
|
896 |
-
$request_match
|
897 |
-
$decoded_request_match = urldecode( $request_match );
|
898 |
|
899 |
// Fetch the rewrite rules.
|
900 |
$rewrite_rules = $this->rewrite->wp_rewrite_rules();
|
@@ -903,7 +879,7 @@ class Tribe__Rewrite {
|
|
903 |
if ( ! empty( $rewrite_rules ) ) {
|
904 |
foreach ( (array) $rewrite_rules as $match => $query ) {
|
905 |
$matches_regex = preg_match( "#^$match#", $request_match, $matches )
|
906 |
-
|| preg_match( "#^$match#", $
|
907 |
|
908 |
if ( ! $matches_regex ) {
|
909 |
continue;
|
47 |
*
|
48 |
* @var array
|
49 |
*/
|
50 |
+
public $rules = array();
|
51 |
|
52 |
/**
|
53 |
* Base slugs for rewrite urls
|
54 |
*
|
55 |
* @var array
|
56 |
*/
|
57 |
+
public $bases = array();
|
|
|
58 |
/**
|
59 |
* After creating the Hooks on WordPress we lock the usage of the function.
|
60 |
*
|
182 |
}
|
183 |
|
184 |
protected function add_hooks() {
|
185 |
+
add_filter( 'generate_rewrite_rules', array( $this, 'filter_generate' ) );
|
186 |
|
187 |
// Remove percent Placeholders on all items
|
188 |
+
add_filter( 'rewrite_rules_array', array( $this, 'remove_percent_placeholders' ), 25 );
|
189 |
|
190 |
add_action( 'shutdown', [ $this, 'dump_cache' ] );
|
191 |
}
|
192 |
|
193 |
protected function remove_hooks() {
|
194 |
+
remove_filter( 'generate_rewrite_rules', array( $this, 'filter_generate' ) );
|
195 |
+
remove_filter( 'rewrite_rules_array', array( $this, 'remove_percent_placeholders' ), 25 );
|
196 |
|
197 |
remove_action( 'shutdown', [ $this, 'dump_cache' ] );
|
198 |
}
|
229 |
*
|
230 |
* @return Tribe__Events__Rewrite
|
231 |
*/
|
232 |
+
public function add( $regex, $args = array() ) {
|
233 |
$regex = (array) $regex;
|
234 |
|
235 |
+
$default = array();
|
236 |
$args = array_filter( wp_parse_args( $args, $default ) );
|
237 |
|
238 |
$url = add_query_arg( $args, 'index.php' );
|
245 |
|
246 |
// Add the Bases to the regex
|
247 |
foreach ( $this->bases as $key => $value ) {
|
248 |
+
$regex = str_replace( array( '{{ ' . $key . ' }}', '{{' . $key . '}}' ), $value, $regex );
|
249 |
}
|
250 |
|
251 |
// Apply the Preg Indexes to the URL
|
412 |
return $home_url;
|
413 |
}
|
414 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
415 |
if ( ! $force ) {
|
416 |
$this->warmup_cache(
|
417 |
'canonical_url',
|
419 |
Listener::TRIGGER_GENERATE_REWRITE_RULES
|
420 |
);
|
421 |
if ( isset( $this->canonical_url_cache[ $url ] ) ) {
|
422 |
+
return $this->canonical_url_cache[ $url ];
|
|
|
423 |
}
|
424 |
}
|
425 |
|
426 |
+
$query = (string) parse_url( $url, PHP_URL_QUERY );
|
427 |
+
wp_parse_str( $query, $query_vars );
|
428 |
+
|
429 |
+
// Drop any query var that is not a scalar; it should not be handled.
|
430 |
+
$query_vars = array_filter( $query_vars, 'is_scalar' );
|
431 |
|
432 |
if ( isset( $query_vars['paged'] ) && 1 === (int) $query_vars['paged'] ) {
|
433 |
// Remove the `paged` query var if it's 1.
|
513 |
return '';
|
514 |
}
|
515 |
|
|
|
|
|
|
|
|
|
|
|
516 |
/*
|
517 |
* We use `end` as, by default, the localized version of the slug in the current language will be at the
|
518 |
* end of the array.
|
540 |
$replace
|
541 |
);
|
542 |
|
543 |
+
$replaced = str_replace( array_keys( $replace ), $replace, $link_template );
|
|
|
544 |
|
545 |
// Remove trailing chars.
|
546 |
$path = rtrim( $replaced, '?$' );
|
584 |
$this->canonical_url_cache[ $url ] = $resolved;
|
585 |
}
|
586 |
|
|
|
|
|
|
|
587 |
return $resolved;
|
588 |
}
|
589 |
|
867 |
$perma_query_vars = [];
|
868 |
$url_components = parse_url($url);
|
869 |
$url_path = Arr::get( $url_components, 'path', '/' );
|
|
|
|
|
|
|
|
|
|
|
870 |
$url_query = Arr::get( $url_components, 'query', '' );
|
871 |
parse_str( $url_query, $url_query_vars );
|
872 |
// Look for matches, removing leading `/` char.
|
873 |
+
$request_match = ltrim( $url_path, '/' );
|
|
|
874 |
|
875 |
// Fetch the rewrite rules.
|
876 |
$rewrite_rules = $this->rewrite->wp_rewrite_rules();
|
879 |
if ( ! empty( $rewrite_rules ) ) {
|
880 |
foreach ( (array) $rewrite_rules as $match => $query ) {
|
881 |
$matches_regex = preg_match( "#^$match#", $request_match, $matches )
|
882 |
+
|| preg_match( "#^$match#", urldecode( $request_match ), $matches );
|
883 |
|
884 |
if ( ! $matches_regex ) {
|
885 |
continue;
|
common/src/Tribe/Service_Providers/Body_Classes.php
DELETED
@@ -1,86 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace Tribe\Service_Providers;
|
4 |
-
|
5 |
-
use Tribe\Utils\Body_Classes as Body_Class_Object;
|
6 |
-
|
7 |
-
/**
|
8 |
-
* Class Body_Classes
|
9 |
-
*
|
10 |
-
* @since 4.12.6
|
11 |
-
*
|
12 |
-
* Handles the registration and creation of our async process handlers.
|
13 |
-
*/
|
14 |
-
class Body_Classes extends \tad_DI52_ServiceProvider {
|
15 |
-
|
16 |
-
/**
|
17 |
-
* Binds and sets up implementations.
|
18 |
-
*
|
19 |
-
* @since 4.12.6
|
20 |
-
*/
|
21 |
-
public function register() {
|
22 |
-
tribe_singleton( Body_Class_Object::class, Body_Class_Object::class );
|
23 |
-
tribe_singleton( 'common.service_providers.body_classes', $this );
|
24 |
-
|
25 |
-
/**
|
26 |
-
* Allows plugins to hook into the register action to register views, etc.
|
27 |
-
*
|
28 |
-
* @since 4.12.6
|
29 |
-
*
|
30 |
-
* @param Tribe\Service_Providers\Dialog $dialog
|
31 |
-
*/
|
32 |
-
do_action( 'tribe_body_classes_register', $this );
|
33 |
-
|
34 |
-
$this->hooks();
|
35 |
-
}
|
36 |
-
|
37 |
-
/**
|
38 |
-
* Set up hooks for classes.
|
39 |
-
*
|
40 |
-
* @since 4.12.6
|
41 |
-
*/
|
42 |
-
private function hooks() {
|
43 |
-
add_filter( 'body_class', [ $this, 'add_body_classes' ] );
|
44 |
-
add_filter( 'admin_body_class', [ $this, 'add_admin_body_classes' ] );
|
45 |
-
|
46 |
-
/**
|
47 |
-
* Allows plugins to hook into the hooks action to register their own hooks.
|
48 |
-
*
|
49 |
-
* @since 4.12.6
|
50 |
-
*
|
51 |
-
* @param Tribe\Service_Providers\Dialog $dialog
|
52 |
-
*/
|
53 |
-
do_action( 'tribe_body_classes_hooks', $this );
|
54 |
-
}
|
55 |
-
|
56 |
-
/**
|
57 |
-
* Hook in and add FE body classes.
|
58 |
-
*
|
59 |
-
* @since 4.12.6
|
60 |
-
*
|
61 |
-
* @param array $classes An array of body class names.
|
62 |
-
* @return array The modified array of body class names.
|
63 |
-
*/
|
64 |
-
public function add_body_classes( $classes = [] ) {
|
65 |
-
/** @var Body_Class_Object $body_classes */
|
66 |
-
$body_classes = tribe( Body_Class_Object::class );
|
67 |
-
|
68 |
-
return $body_classes->add_body_classes( $classes );
|
69 |
-
}
|
70 |
-
|
71 |
-
/**
|
72 |
-
* Hook in and add admin body classes.
|
73 |
-
*
|
74 |
-
* @since 4.12.6
|
75 |
-
*
|
76 |
-
* @param array $classes An array of body class names.
|
77 |
-
* @return array The modified array of body class names.
|
78 |
-
*/
|
79 |
-
public function add_admin_body_classes( $classes = [] ) {
|
80 |
-
/** @var Body_Class_Object $body_classes */
|
81 |
-
$body_classes = tribe( Body_Class_Object::class );
|
82 |
-
|
83 |
-
return $body_classes->add_admin_body_classes( $classes );
|
84 |
-
}
|
85 |
-
|
86 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
common/src/Tribe/Service_Providers/Crons.php
DELETED
@@ -1,37 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Handles common cron functions.
|
4 |
-
*
|
5 |
-
* @since 4.12.6
|
6 |
-
*
|
7 |
-
* @package Tribe\Service_Providers
|
8 |
-
*/
|
9 |
-
|
10 |
-
namespace Tribe\Service_Providers;
|
11 |
-
|
12 |
-
use Tribe\DB_Lock;
|
13 |
-
|
14 |
-
/**
|
15 |
-
* Class Crons
|
16 |
-
*
|
17 |
-
* @since 4.12.6
|
18 |
-
*
|
19 |
-
* @package Tribe\Service_Providers
|
20 |
-
*/
|
21 |
-
class Crons extends \tad_DI52_ServiceProvider {
|
22 |
-
|
23 |
-
/**
|
24 |
-
* Registers the filters required by the provider to manage cron processes.
|
25 |
-
*
|
26 |
-
* @since 4.12.6
|
27 |
-
*/
|
28 |
-
public function register() {
|
29 |
-
// Schedule a cron event happening once a day.
|
30 |
-
if ( ! wp_get_schedule( 'tribe_daily_cron' ) ) {
|
31 |
-
wp_schedule_event( time(), 'daily', 'tribe_daily_cron' );
|
32 |
-
}
|
33 |
-
|
34 |
-
// Register actions that should happen on that hook.
|
35 |
-
add_action( 'tribe_daily_cron', [ DB_Lock::class, 'prune_stale_db_locks' ] );
|
36 |
-
}
|
37 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
common/src/Tribe/Service_Providers/Debug_Bar.php
CHANGED
@@ -12,11 +12,11 @@ class Tribe__Service_Providers__Debug_Bar extends tad_DI52_ServiceProvider {
|
|
12 |
* Binds and sets up implementations.
|
13 |
*/
|
14 |
public function register() {
|
15 |
-
add_filter( 'debug_bar_panels',
|
16 |
}
|
17 |
|
18 |
/**
|
19 |
-
* Adds
|
20 |
*
|
21 |
* @since 4.9.5
|
22 |
*
|
@@ -26,17 +26,17 @@ class Tribe__Service_Providers__Debug_Bar extends tad_DI52_ServiceProvider {
|
|
26 |
*/
|
27 |
public function add_panels( array $panels ) {
|
28 |
/**
|
29 |
-
* Filters the list of
|
30 |
* Debug Bar.
|
31 |
*
|
32 |
* @since 4.9.5
|
33 |
*
|
34 |
-
* @param Debug_Bar_Panel[] The default list of
|
35 |
*/
|
36 |
-
$tribe_panels = apply_filters( 'tribe_debug_bar_panels',
|
37 |
new Tribe__Debug_Bar__Panels__Context(),
|
38 |
new Tribe__Debug_Bar__Panels__Json_Ld(),
|
39 |
-
|
40 |
|
41 |
if ( count( $tribe_panels ) > 0 ) {
|
42 |
$panels = array_merge( $panels, $tribe_panels );
|
12 |
* Binds and sets up implementations.
|
13 |
*/
|
14 |
public function register() {
|
15 |
+
add_filter( 'debug_bar_panels', array( $this, 'add_panels' ) );
|
16 |
}
|
17 |
|
18 |
/**
|
19 |
+
* Adds Modern Tribe panels to the Debug Bar panels.
|
20 |
*
|
21 |
* @since 4.9.5
|
22 |
*
|
26 |
*/
|
27 |
public function add_panels( array $panels ) {
|
28 |
/**
|
29 |
+
* Filters the list of Modern Tribe debug bar panels that will be added to the
|
30 |
* Debug Bar.
|
31 |
*
|
32 |
* @since 4.9.5
|
33 |
*
|
34 |
+
* @param Debug_Bar_Panel[] The default list of Modern Tribe panels added to the Debug Bar.
|
35 |
*/
|
36 |
+
$tribe_panels = apply_filters( 'tribe_debug_bar_panels', array(
|
37 |
new Tribe__Debug_Bar__Panels__Context(),
|
38 |
new Tribe__Debug_Bar__Panels__Json_Ld(),
|
39 |
+
) );
|
40 |
|
41 |
if ( count( $tribe_panels ) > 0 ) {
|
42 |
$panels = array_merge( $panels, $tribe_panels );
|
common/src/Tribe/Service_Providers/Dialog.php
CHANGED
@@ -83,7 +83,7 @@ class Dialog extends \tad_DI52_ServiceProvider {
|
|
83 |
tribe_asset(
|
84 |
$main,
|
85 |
'mt-a11y-dialog',
|
86 |
-
'
|
87 |
[ 'underscore', 'tribe-common' ],
|
88 |
[],
|
89 |
[ 'groups' => 'tribe-dialog' ]
|
83 |
tribe_asset(
|
84 |
$main,
|
85 |
'mt-a11y-dialog',
|
86 |
+
'vendor/faction23/a11y-dialog/a11y-dialog.js',
|
87 |
[ 'underscore', 'tribe-common' ],
|
88 |
[],
|
89 |
[ 'groups' => 'tribe-dialog' ]
|
common/src/Tribe/Service_Providers/Processes.php
CHANGED
@@ -69,10 +69,10 @@ class Tribe__Service_Providers__Processes extends tad_DI52_ServiceProvider {
|
|
69 |
*/
|
70 |
protected function hook_handler_for( $action ) {
|
71 |
if ( null === $this->handler_actions ) {
|
72 |
-
$handlers =
|
73 |
'Tribe__Process__Tester',
|
74 |
'Tribe__Process__Post_Thumbnail_Setter',
|
75 |
-
|
76 |
|
77 |
/**
|
78 |
* Filters the process handler classes the Service Provider should handle.
|
@@ -87,7 +87,7 @@ class Tribe__Service_Providers__Processes extends tad_DI52_ServiceProvider {
|
|
87 |
|
88 |
$this->handler_actions = array_combine(
|
89 |
$handlers,
|
90 |
-
array_map(
|
91 |
);
|
92 |
}
|
93 |
|
@@ -110,9 +110,9 @@ class Tribe__Service_Providers__Processes extends tad_DI52_ServiceProvider {
|
|
110 |
*/
|
111 |
protected function hook_queue_for( $action ) {
|
112 |
if ( null === $this->queue_actions ) {
|
113 |
-
$queues =
|
114 |
'Tribe__Promise',
|
115 |
-
|
116 |
|
117 |
/**
|
118 |
* Filters the queue processing classes the Service Provider should handle.
|
@@ -127,7 +127,7 @@ class Tribe__Service_Providers__Processes extends tad_DI52_ServiceProvider {
|
|
127 |
|
128 |
$all_queues_actions = array_combine(
|
129 |
$queues,
|
130 |
-
array_map(
|
131 |
);
|
132 |
}
|
133 |
|
@@ -152,7 +152,7 @@ class Tribe__Service_Providers__Processes extends tad_DI52_ServiceProvider {
|
|
152 |
*/
|
153 |
protected function get_handler_action( $handler_class ) {
|
154 |
/** @var Tribe__Process__Handler handler_class */
|
155 |
-
return 'tribe_process_' . call_user_func(
|
156 |
}
|
157 |
|
158 |
/**
|
@@ -166,7 +166,7 @@ class Tribe__Service_Providers__Processes extends tad_DI52_ServiceProvider {
|
|
166 |
*/
|
167 |
protected function get_queue_action( $queue_class ) {
|
168 |
/** @var Tribe__Process__Queue queue_class */
|
169 |
-
return 'tribe_queue_' . call_user_func(
|
170 |
}
|
171 |
|
172 |
/**
|
@@ -201,7 +201,7 @@ class Tribe__Service_Providers__Processes extends tad_DI52_ServiceProvider {
|
|
201 |
* Here we parse the scheduled cron events to get those scheduled by a queue
|
202 |
* or process handler.
|
203 |
*/
|
204 |
-
$hooks = $this->get_scheduled_like(
|
205 |
|
206 |
if ( empty( $hooks ) ) {
|
207 |
return;
|
@@ -254,11 +254,11 @@ class Tribe__Service_Providers__Processes extends tad_DI52_ServiceProvider {
|
|
254 |
$cron = get_option( 'cron', false );
|
255 |
|
256 |
if ( empty( $cron ) ) {
|
257 |
-
return
|
258 |
}
|
259 |
|
260 |
$needles = (array) $needles;
|
261 |
-
$matching =
|
262 |
|
263 |
foreach ( $cron as $time ) {
|
264 |
if ( ! is_array( $time ) ) {
|
69 |
*/
|
70 |
protected function hook_handler_for( $action ) {
|
71 |
if ( null === $this->handler_actions ) {
|
72 |
+
$handlers = array(
|
73 |
'Tribe__Process__Tester',
|
74 |
'Tribe__Process__Post_Thumbnail_Setter',
|
75 |
+
);
|
76 |
|
77 |
/**
|
78 |
* Filters the process handler classes the Service Provider should handle.
|
87 |
|
88 |
$this->handler_actions = array_combine(
|
89 |
$handlers,
|
90 |
+
array_map( array( $this, 'get_handler_action' ), $handlers )
|
91 |
);
|
92 |
}
|
93 |
|
110 |
*/
|
111 |
protected function hook_queue_for( $action ) {
|
112 |
if ( null === $this->queue_actions ) {
|
113 |
+
$queues = array(
|
114 |
'Tribe__Promise',
|
115 |
+
);
|
116 |
|
117 |
/**
|
118 |
* Filters the queue processing classes the Service Provider should handle.
|
127 |
|
128 |
$all_queues_actions = array_combine(
|
129 |
$queues,
|
130 |
+
array_map( array( $this, 'get_queue_action' ), $queues )
|
131 |
);
|
132 |
}
|
133 |
|
152 |
*/
|
153 |
protected function get_handler_action( $handler_class ) {
|
154 |
/** @var Tribe__Process__Handler handler_class */
|
155 |
+
return 'tribe_process_' . call_user_func( array( $handler_class, 'action' ) );
|
156 |
}
|
157 |
|
158 |
/**
|
166 |
*/
|
167 |
protected function get_queue_action( $queue_class ) {
|
168 |
/** @var Tribe__Process__Queue queue_class */
|
169 |
+
return 'tribe_queue_' . call_user_func( array( $queue_class, 'action' ) );
|
170 |
}
|
171 |
|
172 |
/**
|
201 |
* Here we parse the scheduled cron events to get those scheduled by a queue
|
202 |
* or process handler.
|
203 |
*/
|
204 |
+
$hooks = $this->get_scheduled_like( array( 'tribe_process_', 'tribe_queue_' ) );
|
205 |
|
206 |
if ( empty( $hooks ) ) {
|
207 |
return;
|
254 |
$cron = get_option( 'cron', false );
|
255 |
|
256 |
if ( empty( $cron ) ) {
|
257 |
+
return array();
|
258 |
}
|
259 |
|
260 |
$needles = (array) $needles;
|
261 |
+
$matching = array();
|
262 |
|
263 |
foreach ( $cron as $time ) {
|
264 |
if ( ! is_array( $time ) ) {
|
common/src/Tribe/Service_Providers/Promoter.php
CHANGED
@@ -14,7 +14,7 @@ class Tribe__Service_Providers__Promoter extends tad_DI52_ServiceProvider {
|
|
14 |
*/
|
15 |
public function register() {
|
16 |
tribe_singleton( 'promoter.auth', 'Tribe__Promoter__Auth' );
|
17 |
-
tribe_singleton( 'promoter.pue', 'Tribe__Promoter__PUE',
|
18 |
tribe_singleton( 'promoter.view', 'Tribe__Promoter__View' );
|
19 |
|
20 |
$this->hook();
|
@@ -27,20 +27,16 @@ class Tribe__Service_Providers__Promoter extends tad_DI52_ServiceProvider {
|
|
27 |
add_action( 'template_redirect', tribe_callback( 'promoter.view', 'display_auth_check_view' ), 10, 0 );
|
28 |
add_action( 'init', tribe_callback( 'promoter.view', 'add_rewrites' ) );
|
29 |
|
30 |
-
|
31 |
-
$pue = tribe( 'promoter.pue' );
|
32 |
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
tribe_callback( 'promoter.auth', 'register_setting' )
|
38 |
-
);
|
39 |
-
}
|
40 |
|
41 |
// The usage of a high priority so we can push the icon to the end
|
42 |
-
add_action( 'admin_bar_menu',
|
43 |
-
add_action( 'tribe_common_loaded',
|
44 |
}
|
45 |
|
46 |
/**
|
@@ -60,7 +56,7 @@ class Tribe__Service_Providers__Promoter extends tad_DI52_ServiceProvider {
|
|
60 |
* It uses and inline SVG as will provider more flexibility for styling so we can change
|
61 |
* the fill of the path property of the SVG so we can match the WP installations.
|
62 |
*/
|
63 |
-
$args =
|
64 |
'id' => 'promoter-admin-bar',
|
65 |
'title' => sprintf(
|
66 |
"<span class='promoter-admin-bar__icon'>%s</span><span class='promoter-admin-bar__text'>%s</span>",
|
@@ -68,11 +64,11 @@ class Tribe__Service_Providers__Promoter extends tad_DI52_ServiceProvider {
|
|
68 |
'Promoter'
|
69 |
),
|
70 |
'href' => 'https://promoter.theeventscalendar.com/',
|
71 |
-
'meta' =>
|
72 |
'target' => '_blank',
|
73 |
'class' => 'promoter-admin-bar-link',
|
74 |
-
|
75 |
-
|
76 |
$wp_admin_bar->add_node( $args );
|
77 |
}
|
78 |
|
@@ -86,11 +82,11 @@ class Tribe__Service_Providers__Promoter extends tad_DI52_ServiceProvider {
|
|
86 |
Tribe__Main::instance(),
|
87 |
'promoter',
|
88 |
'promoter.css',
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
'conditionals' =>
|
93 |
-
|
94 |
);
|
95 |
}
|
96 |
|
14 |
*/
|
15 |
public function register() {
|
16 |
tribe_singleton( 'promoter.auth', 'Tribe__Promoter__Auth' );
|
17 |
+
tribe_singleton( 'promoter.pue', 'Tribe__Promoter__PUE', array( 'load' ) );
|
18 |
tribe_singleton( 'promoter.view', 'Tribe__Promoter__View' );
|
19 |
|
20 |
$this->hook();
|
27 |
add_action( 'template_redirect', tribe_callback( 'promoter.view', 'display_auth_check_view' ), 10, 0 );
|
28 |
add_action( 'init', tribe_callback( 'promoter.view', 'add_rewrites' ) );
|
29 |
|
30 |
+
tribe( 'promoter.pue' );
|
|
|
31 |
|
32 |
+
add_filter(
|
33 |
+
'tribe_promoter_secret_key',
|
34 |
+
tribe_callback( 'promoter.auth', 'filter_promoter_secret_key' )
|
35 |
+
);
|
|
|
|
|
|
|
36 |
|
37 |
// The usage of a high priority so we can push the icon to the end
|
38 |
+
add_action( 'admin_bar_menu', array( $this, 'add_promoter_logo_on_admin_bar' ), 1000 );
|
39 |
+
add_action( 'tribe_common_loaded', array( $this, 'add_promoter_assets' ) );
|
40 |
}
|
41 |
|
42 |
/**
|
56 |
* It uses and inline SVG as will provider more flexibility for styling so we can change
|
57 |
* the fill of the path property of the SVG so we can match the WP installations.
|
58 |
*/
|
59 |
+
$args = array(
|
60 |
'id' => 'promoter-admin-bar',
|
61 |
'title' => sprintf(
|
62 |
"<span class='promoter-admin-bar__icon'>%s</span><span class='promoter-admin-bar__text'>%s</span>",
|
64 |
'Promoter'
|
65 |
),
|
66 |
'href' => 'https://promoter.theeventscalendar.com/',
|
67 |
+
'meta' => array(
|
68 |
'target' => '_blank',
|
69 |
'class' => 'promoter-admin-bar-link',
|
70 |
+
),
|
71 |
+
);
|
72 |
$wp_admin_bar->add_node( $args );
|
73 |
}
|
74 |
|
82 |
Tribe__Main::instance(),
|
83 |
'promoter',
|
84 |
'promoter.css',
|
85 |
+
array(),
|
86 |
+
array( 'wp_enqueue_scripts', 'admin_enqueue_scripts' ),
|
87 |
+
array(
|
88 |
+
'conditionals' => array( $this, 'should_load_promoter_styles' ),
|
89 |
+
)
|
90 |
);
|
91 |
}
|
92 |
|
common/src/Tribe/Service_Providers/Shortcodes.php
CHANGED
@@ -18,23 +18,16 @@ class Shortcodes extends \tad_DI52_ServiceProvider {
|
|
18 |
* @since 4.12.0
|
19 |
*/
|
20 |
public function register() {
|
21 |
-
if (
|
22 |
return;
|
23 |
}
|
24 |
|
25 |
$this->container->singleton( Manager::class, Manager::class );
|
26 |
-
$this->container->singleton(
|
27 |
-
'shortcode.manager',
|
28 |
-
function() {
|
29 |
-
return $this->container->make( Manager::class );
|
30 |
-
}
|
31 |
-
);
|
32 |
|
33 |
$this->register_hooks();
|
34 |
$this->register_assets();
|
35 |
|
36 |
$this->container->singleton( static::class, $this );
|
37 |
-
|
38 |
}
|
39 |
|
40 |
/**
|
@@ -71,8 +64,6 @@ class Shortcodes extends \tad_DI52_ServiceProvider {
|
|
71 |
*/
|
72 |
protected function register_hooks() {
|
73 |
add_action( 'init', [ $this, 'action_add_shortcodes' ], 20 );
|
74 |
-
add_filter( 'pre_do_shortcode_tag', [ $this, 'filter_pre_do_shortcode_tag' ], 10, 4 );
|
75 |
-
add_filter( 'do_shortcode_tag', [ $this, 'filter_do_shortcode_tag' ], 10, 4 );
|
76 |
}
|
77 |
|
78 |
/**
|
@@ -86,36 +77,4 @@ class Shortcodes extends \tad_DI52_ServiceProvider {
|
|
86 |
public function action_add_shortcodes() {
|
87 |
$this->container->make( Manager::class )->add_shortcodes();
|
88 |
}
|
89 |
-
|
90 |
-
/**
|
91 |
-
* Filters `pre_do_shortcode_tag` to mark that a tribe shortcode is currently being done.
|
92 |
-
*
|
93 |
-
* @since 4.12.9
|
94 |
-
*
|
95 |
-
* @param bool|string $return Short-circuit return value. Either false or the value to replace the shortcode with.
|
96 |
-
* @param string $tag Shortcode name.
|
97 |
-
* @param array $attr Shortcode attributes array,
|
98 |
-
* @param array $m Regular expression match array.
|
99 |
-
*
|
100 |
-
* @return bool|string Short-circuit return value.
|
101 |
-
*/
|
102 |
-
public function filter_pre_do_shortcode_tag( $false, $tag, $attr, $m ) {
|
103 |
-
return $this->container->make( Manager::class )->filter_pre_do_shortcode_tag( $false, $tag, $attr, $m );
|
104 |
-
}
|
105 |
-
|
106 |
-
/**
|
107 |
-
* * Filters `do_shortcode_tag` to mark that a tribe shortcode is complete, and remove it from the current list.
|
108 |
-
*
|
109 |
-
* @since 4.12.9
|
110 |
-
*
|
111 |
-
* @param string $output Shortcode output.
|
112 |
-
* @param string $tag Shortcode name.
|
113 |
-
* @param array|string $attr Shortcode attributes array or empty string.
|
114 |
-
* @param array $m Regular expression match array.
|
115 |
-
*
|
116 |
-
* @return string Shortcode output.
|
117 |
-
*/
|
118 |
-
public function filter_do_shortcode_tag( $output, $tag, $attr, $m ) {
|
119 |
-
return $this->container->make( Manager::class )->filter_do_shortcode_tag( $output, $tag, $attr, $m );
|
120 |
-
}
|
121 |
-
}
|
18 |
* @since 4.12.0
|
19 |
*/
|
20 |
public function register() {
|
21 |
+
if ( static::is_active() ) {
|
22 |
return;
|
23 |
}
|
24 |
|
25 |
$this->container->singleton( Manager::class, Manager::class );
|
|
|
|
|
|
|
|
|
|
|
|
|
26 |
|
27 |
$this->register_hooks();
|
28 |
$this->register_assets();
|
29 |
|
30 |
$this->container->singleton( static::class, $this );
|
|
|
31 |
}
|
32 |
|
33 |
/**
|
64 |
*/
|
65 |
protected function register_hooks() {
|
66 |
add_action( 'init', [ $this, 'action_add_shortcodes' ], 20 );
|
|
|
|
|
67 |
}
|
68 |
|
69 |
/**
|
77 |
public function action_add_shortcodes() {
|
78 |
$this->container->make( Manager::class )->add_shortcodes();
|
79 |
}
|
80 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
common/src/Tribe/Service_Providers/Widgets.php
DELETED
@@ -1,77 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
namespace Tribe\Service_Providers;
|
3 |
-
|
4 |
-
use Tribe\Widget\Manager;
|
5 |
-
|
6 |
-
/**
|
7 |
-
* Class Widget
|
8 |
-
*
|
9 |
-
* @since 4.12.12
|
10 |
-
*
|
11 |
-
* @package Tribe\Service_Providers
|
12 |
-
*/
|
13 |
-
class Widgets extends \tad_DI52_ServiceProvider {
|
14 |
-
|
15 |
-
/**
|
16 |
-
* Binds and sets up implementations.
|
17 |
-
*
|
18 |
-
* @since 4.12.12
|
19 |
-
*/
|
20 |
-
public function register() {
|
21 |
-
if ( ! static::is_active() ) {
|
22 |
-
return;
|
23 |
-
}
|
24 |
-
|
25 |
-
$this->container->singleton( Manager::class, Manager::class );
|
26 |
-
$this->container->singleton(
|
27 |
-
'widget.manager',
|
28 |
-
function() {
|
29 |
-
return $this->container->make( Manager::class );
|
30 |
-
}
|
31 |
-
);
|
32 |
-
|
33 |
-
$this->register_hooks();
|
34 |
-
|
35 |
-
$this->container->singleton( static::class, $this );
|
36 |
-
$this->container->singleton( 'widgets', $this );
|
37 |
-
}
|
38 |
-
|
39 |
-
/**
|
40 |
-
* Static method wrapper around a filter to allow full deactivation of this provider.
|
41 |
-
*
|
42 |
-
* @since 4.12.12
|
43 |
-
*
|
44 |
-
* @return boolean If this service provider is active.
|
45 |
-
*/
|
46 |
-
public static function is_active() {
|
47 |
-
/**
|
48 |
-
* Allows filtering to prevent all Tribe widgets from loading.
|
49 |
-
*
|
50 |
-
* @since 4.12.12
|
51 |
-
*
|
52 |
-
* @param boolean $is_active If widgets should be loaded or not.
|
53 |
-
*/
|
54 |
-
return apply_filters( 'tribe_widgets_is_active', true );
|
55 |
-
}
|
56 |
-
|
57 |
-
/**
|
58 |
-
* Registers the provider handling all the 1st level filters and actions for this service provider.
|
59 |
-
*
|
60 |
-
* @since 4.12.12
|
61 |
-
*/
|
62 |
-
protected function register_hooks() {
|
63 |
-
add_action( 'widgets_init', [ $this, 'register_widgets_with_wp' ], 20 );
|
64 |
-
}
|
65 |
-
|
66 |
-
/**
|
67 |
-
* Adds the new widgets.
|
68 |
-
*
|
69 |
-
* This triggers on `init@P20` due to how v1 is added on `init@P10` and removed on `init@P15`,
|
70 |
-
* as it's important to leave gaps on priority for future flexibility.
|
71 |
-
*
|
72 |
-
* @since 4.12.12
|
73 |
-
*/
|
74 |
-
public function register_widgets_with_wp() {
|
75 |
-
$this->container->make( Manager::class )->register_widgets_with_wp();
|
76 |
-
}
|
77 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
common/src/Tribe/Settings.php
CHANGED
@@ -140,22 +140,22 @@ if ( ! class_exists( 'Tribe__Settings' ) ) {
|
|
140 |
* An array defining the suite root plugins.
|
141 |
* @var array
|
142 |
*/
|
143 |
-
protected $root_plugins =
|
144 |
'the-events-calendar/the-events-calendar.php',
|
145 |
'event-tickets/event-ticket.php',
|
146 |
-
|
147 |
|
148 |
/**
|
149 |
* An associative array in the form [ <tab-slug> => array(...<fields>) ]
|
150 |
* @var array
|
151 |
*/
|
152 |
-
protected $fields_for_save =
|
153 |
|
154 |
/**
|
155 |
* An array that contains the fields that are currently being validated.
|
156 |
* @var array
|
157 |
*/
|
158 |
-
protected $current_fields =
|
159 |
|
160 |
/**
|
161 |
* Static Singleton Factory Method
|
@@ -178,10 +178,10 @@ if ( ! class_exists( 'Tribe__Settings' ) ) {
|
|
178 |
$this->requiredCap = apply_filters( 'tribe_settings_req_cap', 'manage_options' );
|
179 |
$this->adminSlug = apply_filters( 'tribe_settings_admin_slug', 'tribe-common' );
|
180 |
$this->help_slug = apply_filters( 'tribe_settings_help_slug', 'tribe-common-help' );
|
181 |
-
$this->errors = get_option( 'tribe_settings_errors',
|
182 |
$this->major_error = get_option( 'tribe_settings_major_error', false );
|
183 |
-
$this->sent_data = get_option( 'tribe_settings_sent_data',
|
184 |
-
$this->validated =
|
185 |
$this->defaultTab = null;
|
186 |
$this->currentTab = null;
|
187 |
|
@@ -193,11 +193,11 @@ if ( ! class_exists( 'Tribe__Settings' ) ) {
|
|
193 |
*/
|
194 |
public function hook() {
|
195 |
// run actions & filters
|
196 |
-
add_action( 'admin_menu',
|
197 |
-
add_action( 'network_admin_menu',
|
198 |
-
add_action( 'admin_init',
|
199 |
-
add_action( 'tribe_settings_below_tabs',
|
200 |
-
add_action( 'tribe_settings_below_tabs',
|
201 |
}
|
202 |
|
203 |
/**
|
@@ -254,7 +254,7 @@ if ( ! class_exists( 'Tribe__Settings' ) ) {
|
|
254 |
esc_html__( 'Settings', 'tribe-common' ),
|
255 |
$this->requiredCap,
|
256 |
self::$parent_slug,
|
257 |
-
|
258 |
);
|
259 |
}
|
260 |
}
|
@@ -270,10 +270,10 @@ if ( ! class_exists( 'Tribe__Settings' ) ) {
|
|
270 |
}
|
271 |
|
272 |
$this->admin_page = add_submenu_page(
|
273 |
-
'settings.php', esc_html__( 'Events Settings', 'tribe-common' ), esc_html__( 'Events Settings', 'tribe-common' ), $this->requiredCap, $this->adminSlug,
|
274 |
$this,
|
275 |
'generatePage',
|
276 |
-
|
277 |
);
|
278 |
|
279 |
$this->admin_page = add_submenu_page(
|
@@ -282,10 +282,10 @@ if ( ! class_exists( 'Tribe__Settings' ) ) {
|
|
282 |
esc_html__( 'Events Help', 'tribe-common' ),
|
283 |
$this->requiredCap,
|
284 |
$this->help_slug,
|
285 |
-
|
286 |
tribe( 'settings.manager' ),
|
287 |
'do_help_tab',
|
288 |
-
|
289 |
);
|
290 |
}
|
291 |
|
@@ -440,7 +440,7 @@ if ( ! class_exists( 'Tribe__Settings' ) ) {
|
|
440 |
|
441 |
// bail if we have errors
|
442 |
if ( count( $this->errors ) ) {
|
443 |
-
remove_action( 'shutdown',
|
444 |
add_option( 'tribe_settings_errors', $this->errors );
|
445 |
add_option( 'tribe_settings_major_error', $this->major_error );
|
446 |
wp_redirect( $this->url );
|
@@ -488,8 +488,8 @@ if ( ! class_exists( 'Tribe__Settings' ) ) {
|
|
488 |
|
489 |
// do not generate errors for dependent fields that should not show
|
490 |
if ( ! empty( $this->errors ) ) {
|
491 |
-
$keep
|
492 |
-
$compare = empty( $keep ) ?
|
493 |
$this->errors = array_intersect_key( $this->errors, $compare );
|
494 |
}
|
495 |
|
@@ -512,7 +512,7 @@ if ( ! class_exists( 'Tribe__Settings' ) ) {
|
|
512 |
do_action( 'tribe_settings_save_tab_' . $this->currentTab );
|
513 |
|
514 |
// we'll need this later
|
515 |
-
$parent_options =
|
516 |
|
517 |
/**
|
518 |
* loop through each validated option and either
|
@@ -588,11 +588,11 @@ if ( ! class_exists( 'Tribe__Settings' ) ) {
|
|
588 |
|
589 |
do_action( 'tribe_settings_after_save' );
|
590 |
do_action( 'tribe_settings_after_save_' . $this->currentTab );
|
591 |
-
remove_action( 'shutdown',
|
592 |
add_option( 'tribe_settings_sent_data', $_POST );
|
593 |
add_option( 'tribe_settings_errors', $this->errors );
|
594 |
add_option( 'tribe_settings_major_error', $this->major_error );
|
595 |
-
wp_redirect( esc_url_raw( add_query_arg(
|
596 |
exit;
|
597 |
}
|
598 |
|
@@ -669,11 +669,11 @@ if ( ! class_exists( 'Tribe__Settings' ) ) {
|
|
669 |
*
|
670 |
* @return string
|
671 |
*/
|
672 |
-
public function get_url( array $args =
|
673 |
-
$defaults =
|
674 |
-
'page'
|
675 |
'parent' => self::$parent_page,
|
676 |
-
|
677 |
|
678 |
// Allow the link to be "changed" on the fly
|
679 |
$args = wp_parse_args( $args, $defaults );
|
140 |
* An array defining the suite root plugins.
|
141 |
* @var array
|
142 |
*/
|
143 |
+
protected $root_plugins = array(
|
144 |
'the-events-calendar/the-events-calendar.php',
|
145 |
'event-tickets/event-ticket.php',
|
146 |
+
);
|
147 |
|
148 |
/**
|
149 |
* An associative array in the form [ <tab-slug> => array(...<fields>) ]
|
150 |
* @var array
|
151 |
*/
|
152 |
+
protected $fields_for_save = array();
|
153 |
|
154 |
/**
|
155 |
* An array that contains the fields that are currently being validated.
|
156 |
* @var array
|
157 |
*/
|
158 |
+
protected $current_fields = array();
|
159 |
|
160 |
/**
|
161 |
* Static Singleton Factory Method
|
178 |
$this->requiredCap = apply_filters( 'tribe_settings_req_cap', 'manage_options' );
|
179 |
$this->adminSlug = apply_filters( 'tribe_settings_admin_slug', 'tribe-common' );
|
180 |
$this->help_slug = apply_filters( 'tribe_settings_help_slug', 'tribe-common-help' );
|
181 |
+
$this->errors = get_option( 'tribe_settings_errors', array() );
|
182 |
$this->major_error = get_option( 'tribe_settings_major_error', false );
|
183 |
+
$this->sent_data = get_option( 'tribe_settings_sent_data', array() );
|
184 |
+
$this->validated = array();
|
185 |
$this->defaultTab = null;
|
186 |
$this->currentTab = null;
|
187 |
|
193 |
*/
|
194 |
public function hook() {
|
195 |
// run actions & filters
|
196 |
+
add_action( 'admin_menu', array( $this, 'addPage' ) );
|
197 |
+
add_action( 'network_admin_menu', array( $this, 'addNetworkPage' ) );
|
198 |
+
add_action( 'admin_init', array( $this, 'initTabs' ) );
|
199 |
+
add_action( 'tribe_settings_below_tabs', array( $this, 'displayErrors' ) );
|
200 |
+
add_action( 'tribe_settings_below_tabs', array( $this, 'displaySuccess' ) );
|
201 |
}
|
202 |
|
203 |
/**
|
254 |
esc_html__( 'Settings', 'tribe-common' ),
|
255 |
$this->requiredCap,
|
256 |
self::$parent_slug,
|
257 |
+
array( $this, 'generatePage' )
|
258 |
);
|
259 |
}
|
260 |
}
|
270 |
}
|
271 |
|
272 |
$this->admin_page = add_submenu_page(
|
273 |
+
'settings.php', esc_html__( 'Events Settings', 'tribe-common' ), esc_html__( 'Events Settings', 'tribe-common' ), $this->requiredCap, $this->adminSlug, array(
|
274 |
$this,
|
275 |
'generatePage',
|
276 |
+
)
|
277 |
);
|
278 |
|
279 |
$this->admin_page = add_submenu_page(
|
282 |
esc_html__( 'Events Help', 'tribe-common' ),
|
283 |
$this->requiredCap,
|
284 |
$this->help_slug,
|
285 |
+
array(
|
286 |
tribe( 'settings.manager' ),
|
287 |
'do_help_tab',
|
288 |
+
)
|
289 |
);
|
290 |
}
|
291 |
|
440 |
|
441 |
// bail if we have errors
|
442 |
if ( count( $this->errors ) ) {
|
443 |
+
remove_action( 'shutdown', array( $this, 'deleteOptions' ) );
|
444 |
add_option( 'tribe_settings_errors', $this->errors );
|
445 |
add_option( 'tribe_settings_major_error', $this->major_error );
|
446 |
wp_redirect( $this->url );
|
488 |
|
489 |
// do not generate errors for dependent fields that should not show
|
490 |
if ( ! empty( $this->errors ) ) {
|
491 |
+
$keep = array_filter( array_keys( $this->errors ), array( $this, 'dependency_checks' ) );
|
492 |
+
$compare = empty( $keep ) ? array() : array_combine( $keep, $keep );
|
493 |
$this->errors = array_intersect_key( $this->errors, $compare );
|
494 |
}
|
495 |
|
512 |
do_action( 'tribe_settings_save_tab_' . $this->currentTab );
|
513 |
|
514 |
// we'll need this later
|
515 |
+
$parent_options = array();
|
516 |
|
517 |
/**
|
518 |
* loop through each validated option and either
|
588 |
|
589 |
do_action( 'tribe_settings_after_save' );
|
590 |
do_action( 'tribe_settings_after_save_' . $this->currentTab );
|
591 |
+
remove_action( 'shutdown', array( $this, 'deleteOptions' ) );
|
592 |
add_option( 'tribe_settings_sent_data', $_POST );
|
593 |
add_option( 'tribe_settings_errors', $this->errors );
|
594 |
add_option( 'tribe_settings_major_error', $this->major_error );
|
595 |
+
wp_redirect( esc_url_raw( add_query_arg( array( 'saved' => true ), $this->url ) ) );
|
596 |
exit;
|
597 |
}
|
598 |
|
669 |
*
|
670 |
* @return string
|
671 |
*/
|
672 |
+
public function get_url( array $args = array() ) {
|
673 |
+
$defaults = array(
|
674 |
+
'page' => $this->adminSlug,
|
675 |
'parent' => self::$parent_page,
|
676 |
+
);
|
677 |
|
678 |
// Allow the link to be "changed" on the fly
|
679 |
$args = wp_parse_args( $args, $defaults );
|
common/src/Tribe/Settings_Manager.php
CHANGED
@@ -13,7 +13,7 @@ class Tribe__Settings_Manager {
|
|
13 |
|
14 |
// Load multisite defaults
|
15 |
if ( is_multisite() ) {
|
16 |
-
$tribe_events_mu_defaults =
|
17 |
if ( file_exists( WP_CONTENT_DIR . '/tribe-events-mu-defaults.php' ) ) {
|
18 |
require_once WP_CONTENT_DIR . '/tribe-events-mu-defaults.php';
|
19 |
}
|
@@ -23,13 +23,13 @@ class Tribe__Settings_Manager {
|
|
23 |
|
24 |
public function add_hooks() {
|
25 |
// option pages
|
26 |
-
add_action( '_network_admin_menu',
|
27 |
-
add_action( '_admin_menu',
|
28 |
|
29 |
-
add_action( 'admin_menu',
|
30 |
-
add_action( 'tribe_settings_do_tabs',
|
31 |
-
add_action( 'tribe_settings_do_tabs',
|
32 |
-
add_action( 'tribe_settings_validate_tab_network',
|
33 |
add_action( 'updated_option', [ $this, 'update_options_cache' ], 10, 3 );
|
34 |
}
|
35 |
|
@@ -171,7 +171,7 @@ class Tribe__Settings_Manager {
|
|
171 |
*/
|
172 |
public static function get_network_options() {
|
173 |
if ( ! isset( self::$network_options ) ) {
|
174 |
-
$options = get_site_option( Tribe__Main::OPTIONNAMENETWORK,
|
175 |
self::$network_options = apply_filters( 'tribe_get_network_options', $options );
|
176 |
}
|
177 |
|
@@ -216,11 +216,11 @@ class Tribe__Settings_Manager {
|
|
216 |
if ( ! is_array( $options ) ) {
|
217 |
return;
|
218 |
}
|
219 |
-
|
220 |
if ( $apply_filters == true ) {
|
221 |
$options = apply_filters( 'tribe-events-save-network-options', $options );
|
222 |
}
|
223 |
|
|
|
224 |
if ( update_site_option( Tribe__Main::OPTIONNAMENETWORK, $options ) ) {
|
225 |
self::$network_options = apply_filters( 'tribe_get_network_options', $options );
|
226 |
} else {
|
@@ -236,15 +236,10 @@ class Tribe__Settings_Manager {
|
|
236 |
public static function add_network_options_page() {
|
237 |
$tribe_settings = Tribe__Settings::instance();
|
238 |
add_submenu_page(
|
239 |
-
'settings.php',
|
240 |
-
$tribe_settings->menuName,
|
241 |
-
$tribe_settings->menuName,
|
242 |
-
'manage_network_options',
|
243 |
-
'tribe-common',
|
244 |
-
[
|
245 |
$tribe_settings,
|
246 |
'generatePage',
|
247 |
-
|
248 |
);
|
249 |
}
|
250 |
|
@@ -290,11 +285,11 @@ class Tribe__Settings_Manager {
|
|
290 |
*/
|
291 |
$license_fields = apply_filters( 'tribe_license_fields', $licenses_tab );
|
292 |
|
293 |
-
new Tribe__Settings_Tab( 'licenses', esc_html__( 'Licenses', 'tribe-common' ),
|
294 |
'priority' => '40',
|
295 |
'fields' => $license_fields,
|
296 |
'network_admin' => is_network_admin() ? true : false,
|
297 |
-
|
298 |
}
|
299 |
|
300 |
/**
|
@@ -314,7 +309,7 @@ class Tribe__Settings_Manager {
|
|
314 |
* @todo move to an admin class
|
315 |
*/
|
316 |
public function add_help_admin_menu_item() {
|
317 |
-
$hidden_settings_tabs = self::get_network_option( 'hideSettingsTabs',
|
318 |
if ( in_array( 'help', $hidden_settings_tabs ) ) {
|
319 |
return;
|
320 |
}
|
@@ -323,7 +318,7 @@ class Tribe__Settings_Manager {
|
|
323 |
$title = esc_html__( 'Help', 'tribe-common' );
|
324 |
$slug = 'tribe-help';
|
325 |
|
326 |
-
add_submenu_page( $parent, $title, $title, 'manage_options', $slug,
|
327 |
}
|
328 |
|
329 |
/**
|
@@ -332,8 +327,7 @@ class Tribe__Settings_Manager {
|
|
332 |
* @return bool
|
333 |
*/
|
334 |
protected function have_addons() {
|
335 |
-
$addons = apply_filters( 'tribe_licensable_addons',
|
336 |
-
|
337 |
return ! empty( $addons );
|
338 |
}
|
339 |
|
@@ -343,7 +337,7 @@ class Tribe__Settings_Manager {
|
|
343 |
* @return void
|
344 |
*/
|
345 |
public function save_all_tabs_hidden() {
|
346 |
-
$all_tabs_keys = array_keys( apply_filters( 'tribe_settings_all_tabs',
|
347 |
|
348 |
$network_options = (array) get_site_option( Tribe__Main::OPTIONNAMENETWORK );
|
349 |
|
13 |
|
14 |
// Load multisite defaults
|
15 |
if ( is_multisite() ) {
|
16 |
+
$tribe_events_mu_defaults = array();
|
17 |
if ( file_exists( WP_CONTENT_DIR . '/tribe-events-mu-defaults.php' ) ) {
|
18 |
require_once WP_CONTENT_DIR . '/tribe-events-mu-defaults.php';
|
19 |
}
|
23 |
|
24 |
public function add_hooks() {
|
25 |
// option pages
|
26 |
+
add_action( '_network_admin_menu', array( $this, 'init_options' ) );
|
27 |
+
add_action( '_admin_menu', array( $this, 'init_options' ) );
|
28 |
|
29 |
+
add_action( 'admin_menu', array( $this, 'add_help_admin_menu_item' ), 50 );
|
30 |
+
add_action( 'tribe_settings_do_tabs', array( $this, 'do_setting_tabs' ) );
|
31 |
+
add_action( 'tribe_settings_do_tabs', array( $this, 'do_network_settings_tab' ), 400 );
|
32 |
+
add_action( 'tribe_settings_validate_tab_network', array( $this, 'save_all_tabs_hidden' ) );
|
33 |
add_action( 'updated_option', [ $this, 'update_options_cache' ], 10, 3 );
|
34 |
}
|
35 |
|
171 |
*/
|
172 |
public static function get_network_options() {
|
173 |
if ( ! isset( self::$network_options ) ) {
|
174 |
+
$options = get_site_option( Tribe__Main::OPTIONNAMENETWORK, array() );
|
175 |
self::$network_options = apply_filters( 'tribe_get_network_options', $options );
|
176 |
}
|
177 |
|
216 |
if ( ! is_array( $options ) ) {
|
217 |
return;
|
218 |
}
|
|
|
219 |
if ( $apply_filters == true ) {
|
220 |
$options = apply_filters( 'tribe-events-save-network-options', $options );
|
221 |
}
|
222 |
|
223 |
+
// @TODO use getNetworkOptions + force
|
224 |
if ( update_site_option( Tribe__Main::OPTIONNAMENETWORK, $options ) ) {
|
225 |
self::$network_options = apply_filters( 'tribe_get_network_options', $options );
|
226 |
} else {
|
236 |
public static function add_network_options_page() {
|
237 |
$tribe_settings = Tribe__Settings::instance();
|
238 |
add_submenu_page(
|
239 |
+
'settings.php', $tribe_settings->menuName, $tribe_settings->menuName, 'manage_network_options', 'tribe-common', array(
|
|
|
|
|
|
|
|
|
|
|
240 |
$tribe_settings,
|
241 |
'generatePage',
|
242 |
+
)
|
243 |
);
|
244 |
}
|
245 |
|
285 |
*/
|
286 |
$license_fields = apply_filters( 'tribe_license_fields', $licenses_tab );
|
287 |
|
288 |
+
new Tribe__Settings_Tab( 'licenses', esc_html__( 'Licenses', 'tribe-common' ), array(
|
289 |
'priority' => '40',
|
290 |
'fields' => $license_fields,
|
291 |
'network_admin' => is_network_admin() ? true : false,
|
292 |
+
) );
|
293 |
}
|
294 |
|
295 |
/**
|
309 |
* @todo move to an admin class
|
310 |
*/
|
311 |
public function add_help_admin_menu_item() {
|
312 |
+
$hidden_settings_tabs = self::get_network_option( 'hideSettingsTabs', array() );
|
313 |
if ( in_array( 'help', $hidden_settings_tabs ) ) {
|
314 |
return;
|
315 |
}
|
318 |
$title = esc_html__( 'Help', 'tribe-common' );
|
319 |
$slug = 'tribe-help';
|
320 |
|
321 |
+
add_submenu_page( $parent, $title, $title, 'manage_options', $slug, array( $this, 'do_help_tab' ) );
|
322 |
}
|
323 |
|
324 |
/**
|
327 |
* @return bool
|
328 |
*/
|
329 |
protected function have_addons() {
|
330 |
+
$addons = apply_filters( 'tribe_licensable_addons', array() );
|
|
|
331 |
return ! empty( $addons );
|
332 |
}
|
333 |
|
337 |
* @return void
|
338 |
*/
|
339 |
public function save_all_tabs_hidden() {
|
340 |
+
$all_tabs_keys = array_keys( apply_filters( 'tribe_settings_all_tabs', array() ) );
|
341 |
|
342 |
$network_options = (array) get_site_option( Tribe__Main::OPTIONNAMENETWORK );
|
343 |
|
common/src/Tribe/Settings_Tab.php
CHANGED
@@ -45,16 +45,16 @@ if ( ! class_exists( 'Tribe__Settings_Tab' ) ) {
|
|
45 |
* @param string $name the tab's visible name
|
46 |
* @param array $args additional arguments for the tab
|
47 |
*/
|
48 |
-
public function __construct( $id, $name, $args =
|
49 |
|
50 |
// setup the defaults
|
51 |
-
$this->defaults =
|
52 |
-
'fields' =>
|
53 |
'priority' => 50,
|
54 |
'show_save' => true,
|
55 |
'display_callback' => false,
|
56 |
'network_admin' => false,
|
57 |
-
|
58 |
|
59 |
// parse args with defaults
|
60 |
$this->args = wp_parse_args( $args, $this->defaults );
|
@@ -68,9 +68,9 @@ if ( ! class_exists( 'Tribe__Settings_Tab' ) ) {
|
|
68 |
|
69 |
// run actions & filters
|
70 |
if ( ! $this->network_admin ) {
|
71 |
-
add_filter( 'tribe_settings_all_tabs',
|
72 |
}
|
73 |
-
add_filter( 'tribe_settings_tabs',
|
74 |
}
|
75 |
|
76 |
/**
|
@@ -83,13 +83,13 @@ if ( ! class_exists( 'Tribe__Settings_Tab' ) ) {
|
|
83 |
* @return array $tabs the filtered tabs
|
84 |
*/
|
85 |
public function addTab( $tabs ) {
|
86 |
-
$hideSettingsTabs = Tribe__Settings_Manager::get_network_option( 'hideSettingsTabs',
|
87 |
if ( ( isset( $this->fields ) || has_action( 'tribe_settings_content_tab_' . $this->id ) ) && ( empty( $hideSettingsTabs ) || ! in_array( $this->id, $hideSettingsTabs ) ) ) {
|
88 |
if ( ( is_network_admin() && $this->args['network_admin'] ) || ( ! is_network_admin() && ! $this->args['network_admin'] ) ) {
|
89 |
$tabs[ $this->id ] = $this->name;
|
90 |
-
add_filter( 'tribe_settings_fields',
|
91 |
-
add_filter( 'tribe_settings_no_save_tabs',
|
92 |
-
add_filter( 'tribe_settings_content_tab_' . $this->id,
|
93 |
}
|
94 |
}
|
95 |
|
@@ -122,7 +122,7 @@ if ( ! class_exists( 'Tribe__Settings_Tab' ) ) {
|
|
122 |
if ( ! empty ( $this->fields ) ) {
|
123 |
$fields[ $this->id ] = $this->fields;
|
124 |
} elseif ( has_action( 'tribe_settings_content_tab_' . $this->id ) ) {
|
125 |
-
$fields[ $this->id ] = $this->fields =
|
126 |
}
|
127 |
|
128 |
return $fields;
|
@@ -156,12 +156,12 @@ if ( ! class_exists( 'Tribe__Settings_Tab' ) ) {
|
|
156 |
return;
|
157 |
}
|
158 |
|
159 |
-
$sent_data = get_option( 'tribe_settings_sent_data',
|
160 |
|
161 |
if ( is_array( $this->fields ) && ! empty( $this->fields ) ) {
|
162 |
foreach ( $this->fields as $key => $field ) {
|
163 |
if ( isset( $sent_data[ $key ] ) ) {
|
164 |
-
//
|
165 |
$value = $sent_data[ $key ];
|
166 |
} else {
|
167 |
// Some options should always be stored at network level
|
45 |
* @param string $name the tab's visible name
|
46 |
* @param array $args additional arguments for the tab
|
47 |
*/
|
48 |
+
public function __construct( $id, $name, $args = array() ) {
|
49 |
|
50 |
// setup the defaults
|
51 |
+
$this->defaults = array(
|
52 |
+
'fields' => array(),
|
53 |
'priority' => 50,
|
54 |
'show_save' => true,
|
55 |
'display_callback' => false,
|
56 |
'network_admin' => false,
|
57 |
+
);
|
58 |
|
59 |
// parse args with defaults
|
60 |
$this->args = wp_parse_args( $args, $this->defaults );
|
68 |
|
69 |
// run actions & filters
|
70 |
if ( ! $this->network_admin ) {
|
71 |
+
add_filter( 'tribe_settings_all_tabs', array( $this, 'addAllTabs' ) );
|
72 |
}
|
73 |
+
add_filter( 'tribe_settings_tabs', array( $this, 'addTab' ), $this->priority );
|
74 |
}
|
75 |
|
76 |
/**
|
83 |
* @return array $tabs the filtered tabs
|
84 |
*/
|
85 |
public function addTab( $tabs ) {
|
86 |
+
$hideSettingsTabs = Tribe__Settings_Manager::get_network_option( 'hideSettingsTabs', array() );
|
87 |
if ( ( isset( $this->fields ) || has_action( 'tribe_settings_content_tab_' . $this->id ) ) && ( empty( $hideSettingsTabs ) || ! in_array( $this->id, $hideSettingsTabs ) ) ) {
|
88 |
if ( ( is_network_admin() && $this->args['network_admin'] ) || ( ! is_network_admin() && ! $this->args['network_admin'] ) ) {
|
89 |
$tabs[ $this->id ] = $this->name;
|
90 |
+
add_filter( 'tribe_settings_fields', array( $this, 'addFields' ) );
|
91 |
+
add_filter( 'tribe_settings_no_save_tabs', array( $this, 'showSaveTab' ) );
|
92 |
+
add_filter( 'tribe_settings_content_tab_' . $this->id, array( $this, 'doContent' ) );
|
93 |
}
|
94 |
}
|
95 |
|
122 |
if ( ! empty ( $this->fields ) ) {
|
123 |
$fields[ $this->id ] = $this->fields;
|
124 |
} elseif ( has_action( 'tribe_settings_content_tab_' . $this->id ) ) {
|
125 |
+
$fields[ $this->id ] = $this->fields = array( 0 => null ); // just to trick it
|
126 |
}
|
127 |
|
128 |
return $fields;
|
156 |
return;
|
157 |
}
|
158 |
|
159 |
+
$sent_data = get_option( 'tribe_settings_sent_data', array() );
|
160 |
|
161 |
if ( is_array( $this->fields ) && ! empty( $this->fields ) ) {
|
162 |
foreach ( $this->fields as $key => $field ) {
|
163 |
if ( isset( $sent_data[ $key ] ) ) {
|
164 |
+
// if we just saved [or attempted to], get the value that was inputed
|
165 |
$value = $sent_data[ $key ];
|
166 |
} else {
|
167 |
// Some options should always be stored at network level
|
common/src/Tribe/Shortcode/Manager.php
CHANGED
@@ -5,7 +5,6 @@
|
|
5 |
* @package Tribe\Shortcode
|
6 |
* @since 4.12.0
|
7 |
*/
|
8 |
-
|
9 |
namespace Tribe\Shortcode;
|
10 |
|
11 |
/**
|
@@ -16,16 +15,6 @@ namespace Tribe\Shortcode;
|
|
16 |
* @package Tribe\Shortcode
|
17 |
*/
|
18 |
class Manager {
|
19 |
-
|
20 |
-
/**
|
21 |
-
* Current shortcodes.
|
22 |
-
*
|
23 |
-
* @since 4.12.9
|
24 |
-
*
|
25 |
-
* @var array $current_shortcode An array containing the current shortcodes being executed.
|
26 |
-
*/
|
27 |
-
public $current_shortcode = [];
|
28 |
-
|
29 |
/**
|
30 |
* Get the list of shortcodes available for handling.
|
31 |
*
|
@@ -115,68 +104,4 @@ class Manager {
|
|
115 |
|
116 |
return $instance->get_html();
|
117 |
}
|
118 |
-
|
119 |
-
/**
|
120 |
-
* Filter `pre_do_shortcode_tag` to add the current shortcode.
|
121 |
-
*
|
122 |
-
* @since 4.12.9
|
123 |
-
*
|
124 |
-
* @param bool|string $return Short-circuit return value. Either false or the value to replace the shortcode with.
|
125 |
-
* @param string $tag Shortcode name.
|
126 |
-
* @param array $attr Shortcode attributes array,
|
127 |
-
* @param array $m Regular expression match array.
|
128 |
-
*
|
129 |
-
* @return bool|string Short-circuit return value.
|
130 |
-
*/
|
131 |
-
public function filter_pre_do_shortcode_tag( $return, $tag, $attr, $m ) {
|
132 |
-
if ( ! $this->is_shortcode_registered( $tag ) ) {
|
133 |
-
return $return;
|
134 |
-
}
|
135 |
-
|
136 |
-
// Add to the doing shortcode.
|
137 |
-
$this->current_shortcode[] = $tag;
|
138 |
-
|
139 |
-
return $return;
|
140 |
-
}
|
141 |
-
|
142 |
-
/**
|
143 |
-
* Filter `do_shortcode_tag` to remove the shortcode from the `$tribe_current_shortcode` list.
|
144 |
-
*
|
145 |
-
* @since 4.12.9
|
146 |
-
*
|
147 |
-
* @param string $output Shortcode output.
|
148 |
-
* @param string $tag Shortcode name.
|
149 |
-
* @param array|string $attr Shortcode attributes array or empty string.
|
150 |
-
* @param array $m Regular expression match array.
|
151 |
-
*
|
152 |
-
* @return string Shortcode output.
|
153 |
-
*/
|
154 |
-
public function filter_do_shortcode_tag( $output, $tag, $attr, $m ) {
|
155 |
-
if ( ! $this->is_shortcode_registered( $tag ) ) {
|
156 |
-
return $output;
|
157 |
-
}
|
158 |
-
|
159 |
-
if ( isset( $this->current_shortcode[ $tag ] ) ) {
|
160 |
-
unset( $this->current_shortcode[ $tag ] );
|
161 |
-
}
|
162 |
-
|
163 |
-
return $output;
|
164 |
-
}
|
165 |
-
|
166 |
-
/**
|
167 |
-
* Check if a shortcode is being done.
|
168 |
-
*
|
169 |
-
* @since 4.12.9
|
170 |
-
*
|
171 |
-
* @param null|string $tag The shortcode tag name, or null to check if doing any shortcode.
|
172 |
-
*
|
173 |
-
* @return bool If the shortcode is being done or not.
|
174 |
-
*/
|
175 |
-
public function is_doing_shortcode( $tag = null ) {
|
176 |
-
if ( null === $tag ) {
|
177 |
-
return ! empty( $this->current_shortcode );
|
178 |
-
}
|
179 |
-
|
180 |
-
return in_array( $tag, $this->current_shortcode, true );
|
181 |
-
}
|
182 |
}
|
5 |
* @package Tribe\Shortcode
|
6 |
* @since 4.12.0
|
7 |
*/
|
|
|
8 |
namespace Tribe\Shortcode;
|
9 |
|
10 |
/**
|
15 |
* @package Tribe\Shortcode
|
16 |
*/
|
17 |
class Manager {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
18 |
/**
|
19 |
* Get the list of shortcodes available for handling.
|
20 |
*
|
104 |
|
105 |
return $instance->get_html();
|
106 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
107 |
}
|
common/src/Tribe/Shortcode/Shortcode_Abstract.php
CHANGED
@@ -1,72 +1,65 @@
|
|
1 |
<?php
|
2 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
namespace Tribe\Shortcode;
|
4 |
|
5 |
use Tribe__Utils__Array as Arr;
|
6 |
|
7 |
/**
|
8 |
-
*
|
9 |
-
*
|
10 |
-
* @package Tribe\Shortcode
|
11 |
*
|
12 |
* @since 4.12.0
|
|
|
|
|
13 |
*/
|
14 |
abstract class Shortcode_Abstract implements Shortcode_Interface {
|
15 |
/**
|
16 |
* Slug of the current shortcode.
|
17 |
*
|
18 |
-
* @since
|
19 |
*
|
20 |
-
* @var
|
21 |
*/
|
22 |
protected $slug;
|
23 |
|
24 |
/**
|
25 |
* Default arguments to be merged into final arguments of the shortcode.
|
26 |
*
|
27 |
-
* @since
|
28 |
*
|
29 |
-
* @var
|
30 |
*/
|
31 |
protected $default_arguments = [];
|
32 |
|
33 |
/**
|
34 |
-
* Array
|
35 |
-
*
|
36 |
-
* The array keys are aliases of the array values (i.e. the "real" shortcode attributes to parse).
|
37 |
-
* Example array: [ 'alias' => 'canonical', 'from' => 'to', 'that' => 'becomes_this' ]
|
38 |
-
* Example shortcode usage: [some_tag alias=17 to='Fred'] will be parsed as [some_tag canonical=17 to='Fred']
|
39 |
-
*
|
40 |
-
* @since 4.12.2
|
41 |
-
*
|
42 |
-
* @var array<string,string>
|
43 |
-
*/
|
44 |
-
protected $aliased_arguments = [];
|
45 |
-
|
46 |
-
/**
|
47 |
-
* Array of callbacks for arguments validation.
|
48 |
*
|
49 |
-
* @since
|
50 |
*
|
51 |
-
* @var
|
52 |
*/
|
53 |
protected $validate_arguments_map = [];
|
54 |
|
55 |
/**
|
56 |
* Arguments of the current shortcode.
|
57 |
*
|
58 |
-
* @since
|
59 |
*
|
60 |
-
* @var
|
61 |
*/
|
62 |
protected $arguments;
|
63 |
|
64 |
/**
|
65 |
* Content of the current shortcode.
|
66 |
*
|
67 |
-
* @since
|
68 |
*
|
69 |
-
* @var
|
70 |
*/
|
71 |
protected $content;
|
72 |
|
@@ -74,39 +67,23 @@ abstract class Shortcode_Abstract implements Shortcode_Interface {
|
|
74 |
* {@inheritDoc}
|
75 |
*/
|
76 |
public function setup( $arguments, $content ) {
|
77 |
-
$this->arguments = $this->parse_arguments(
|
78 |
$this->content = $content;
|
79 |
}
|
80 |
|
81 |
/**
|
82 |
* {@inheritDoc}
|
83 |
*/
|
84 |
-
public function
|
85 |
-
$this->aliased_arguments = Arr::filter_to_flat_scalar_associative_array( (array) $alias_map );
|
86 |
-
}
|
87 |
-
|
88 |
-
/**
|
89 |
-
* {@inheritDoc}
|
90 |
-
*/
|
91 |
-
public function get_aliased_arguments() {
|
92 |
-
return $this->aliased_arguments;
|
93 |
-
}
|
94 |
-
|
95 |
-
/**
|
96 |
-
* {@inheritDoc}
|
97 |
-
*/
|
98 |
-
public function parse_arguments( array $arguments ) {
|
99 |
-
$arguments = Arr::parse_associative_array_alias( (array) $arguments, (array) $this->get_aliased_arguments() );
|
100 |
$arguments = shortcode_atts( $this->get_default_arguments(), $arguments, $this->slug );
|
101 |
-
|
102 |
return $this->validate_arguments( $arguments );
|
103 |
}
|
104 |
|
105 |
/**
|
106 |
* {@inheritDoc}
|
107 |
*/
|
108 |
-
public function validate_arguments(
|
109 |
-
$validate_arguments_map = $this->
|
110 |
foreach ( $validate_arguments_map as $key => $callback ) {
|
111 |
$arguments[ $key ] = $callback( isset( $arguments[ $key ] ) ? $arguments[ $key ] : null );
|
112 |
}
|
@@ -125,32 +102,25 @@ abstract class Shortcode_Abstract implements Shortcode_Interface {
|
|
125 |
* {@inheritDoc}
|
126 |
*/
|
127 |
public function get_validated_arguments_map() {
|
128 |
-
return $this->validate_arguments_map;
|
129 |
-
}
|
130 |
-
|
131 |
-
/**
|
132 |
-
* {@inheritDoc}
|
133 |
-
*/
|
134 |
-
public function filter_validated_arguments_map( $validate_arguments_map ) {
|
135 |
/**
|
136 |
* Applies a filter to instance arguments validation callbacks.
|
137 |
*
|
138 |
-
* @since
|
139 |
*
|
140 |
-
* @param
|
141 |
-
* @param
|
142 |
*/
|
143 |
-
$validate_arguments_map = apply_filters( 'tribe_shortcode_validate_arguments_map', $validate_arguments_map, $this );
|
144 |
|
145 |
$registration_slug = $this->get_registration_slug();
|
146 |
|
147 |
/**
|
148 |
* Applies a filter to instance arguments validation callbacks based on the registration slug of the shortcode.
|
149 |
*
|
150 |
-
* @since
|
151 |
*
|
152 |
-
* @param
|
153 |
-
* @param
|
154 |
*/
|
155 |
$validate_arguments_map = apply_filters( "tribe__shortcode_{$registration_slug}_validate_arguments_map", $validate_arguments_map, $this );
|
156 |
|
@@ -164,10 +134,10 @@ abstract class Shortcode_Abstract implements Shortcode_Interface {
|
|
164 |
/**
|
165 |
* Applies a filter to instance arguments.
|
166 |
*
|
167 |
-
* @since
|
168 |
*
|
169 |
-
* @param
|
170 |
-
* @param
|
171 |
*/
|
172 |
$arguments = apply_filters( 'tribe_shortcode_arguments', $this->arguments, $this );
|
173 |
|
@@ -176,10 +146,10 @@ abstract class Shortcode_Abstract implements Shortcode_Interface {
|
|
176 |
/**
|
177 |
* Applies a filter to instance arguments based on the registration slug of the shortcode.
|
178 |
*
|
179 |
-
* @since
|
180 |
*
|
181 |
-
* @param
|
182 |
-
* @param
|
183 |
*/
|
184 |
$arguments = apply_filters( "tribe_shortcode_{$registration_slug}_arguments", $arguments, $this );
|
185 |
|
@@ -194,14 +164,14 @@ abstract class Shortcode_Abstract implements Shortcode_Interface {
|
|
194 |
$argument = Arr::get( $arguments, $index, $default );
|
195 |
|
196 |
/**
|
197 |
-
* Applies a filter to a specific shortcode argument, catch all for all shortcodes
|
198 |
*
|
199 |
-
* @since
|
200 |
*
|
201 |
-
* @param
|
202 |
-
* @param
|
203 |
-
* @param
|
204 |
-
* @param
|
205 |
*/
|
206 |
$argument = apply_filters( 'tribe_shortcode_argument', $argument, $index, $default, $this );
|
207 |
|
@@ -210,12 +180,12 @@ abstract class Shortcode_Abstract implements Shortcode_Interface {
|
|
210 |
/**
|
211 |
* Applies a filter to a specific shortcode argument, to a particular registration slug.
|
212 |
*
|
213 |
-
* @since
|
214 |
*
|
215 |
-
* @param
|
216 |
-
* @param
|
217 |
-
* @param
|
218 |
-
* @param
|
219 |
*/
|
220 |
$argument = apply_filters( "tribe_shortcode_{$registration_slug}_argument", $argument, $index, $default, $this );
|
221 |
|
@@ -229,10 +199,10 @@ abstract class Shortcode_Abstract implements Shortcode_Interface {
|
|
229 |
/**
|
230 |
* Applies a filter to instance default arguments.
|
231 |
*
|
232 |
-
* @since
|
233 |
*
|
234 |
-
* @param
|
235 |
-
* @param
|
236 |
*/
|
237 |
$default_arguments = apply_filters( 'tribe_shortcode_default_arguments', $this->default_arguments, $this );
|
238 |
|
@@ -241,10 +211,10 @@ abstract class Shortcode_Abstract implements Shortcode_Interface {
|
|
241 |
/**
|
242 |
* Applies a filter to instance default arguments based on the registration slug of the shortcode.
|
243 |
*
|
244 |
-
* @since
|
245 |
*
|
246 |
-
* @param
|
247 |
-
* @param
|
248 |
*/
|
249 |
$default_arguments = apply_filters( "tribe_shortcode_{$registration_slug}_default_arguments", $default_arguments, $this );
|
250 |
|
1 |
<?php
|
2 |
+
/**
|
3 |
+
* The abstract all shortcodes should implement.
|
4 |
+
*
|
5 |
+
* @since 4.12.0
|
6 |
+
*
|
7 |
+
* @package Tribe\Shortcode
|
8 |
+
*/
|
9 |
namespace Tribe\Shortcode;
|
10 |
|
11 |
use Tribe__Utils__Array as Arr;
|
12 |
|
13 |
/**
|
14 |
+
* Interface Shortcode_Interface
|
|
|
|
|
15 |
*
|
16 |
* @since 4.12.0
|
17 |
+
*
|
18 |
+
* @package Tribe\Shortcode
|
19 |
*/
|
20 |
abstract class Shortcode_Abstract implements Shortcode_Interface {
|
21 |
/**
|
22 |
* Slug of the current shortcode.
|
23 |
*
|
24 |
+
* @since 4.12.0
|
25 |
*
|
26 |
+
* @var string
|
27 |
*/
|
28 |
protected $slug;
|
29 |
|
30 |
/**
|
31 |
* Default arguments to be merged into final arguments of the shortcode.
|
32 |
*
|
33 |
+
* @since 4.12.0
|
34 |
*
|
35 |
+
* @var array
|
36 |
*/
|
37 |
protected $default_arguments = [];
|
38 |
|
39 |
/**
|
40 |
+
* Array of callbacks for arguments validation
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
41 |
*
|
42 |
+
* @since 4.12.0
|
43 |
*
|
44 |
+
* @var array
|
45 |
*/
|
46 |
protected $validate_arguments_map = [];
|
47 |
|
48 |
/**
|
49 |
* Arguments of the current shortcode.
|
50 |
*
|
51 |
+
* @since 4.12.0
|
52 |
*
|
53 |
+
* @var array
|
54 |
*/
|
55 |
protected $arguments;
|
56 |
|
57 |
/**
|
58 |
* Content of the current shortcode.
|
59 |
*
|
60 |
+
* @since 4.12.0
|
61 |
*
|
62 |
+
* @var string
|
63 |
*/
|
64 |
protected $content;
|
65 |
|
67 |
* {@inheritDoc}
|
68 |
*/
|
69 |
public function setup( $arguments, $content ) {
|
70 |
+
$this->arguments = $this->parse_arguments( $arguments );
|
71 |
$this->content = $content;
|
72 |
}
|
73 |
|
74 |
/**
|
75 |
* {@inheritDoc}
|
76 |
*/
|
77 |
+
public function parse_arguments( $arguments ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
78 |
$arguments = shortcode_atts( $this->get_default_arguments(), $arguments, $this->slug );
|
|
|
79 |
return $this->validate_arguments( $arguments );
|
80 |
}
|
81 |
|
82 |
/**
|
83 |
* {@inheritDoc}
|
84 |
*/
|
85 |
+
public function validate_arguments( $arguments ) {
|
86 |
+
$validate_arguments_map = $this->get_validate_arguments_map();
|
87 |
foreach ( $validate_arguments_map as $key => $callback ) {
|
88 |
$arguments[ $key ] = $callback( isset( $arguments[ $key ] ) ? $arguments[ $key ] : null );
|
89 |
}
|
102 |
* {@inheritDoc}
|
103 |
*/
|
104 |
public function get_validated_arguments_map() {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
105 |
/**
|
106 |
* Applies a filter to instance arguments validation callbacks.
|
107 |
*
|
108 |
+
* @since 4.12.0
|
109 |
*
|
110 |
+
* @param array $validate_arguments_map Current set of callbacks for arguments.
|
111 |
+
* @param static $instance Which instance of shortcode we are dealing with.
|
112 |
*/
|
113 |
+
$validate_arguments_map = apply_filters( 'tribe_shortcode_validate_arguments_map', $this->validate_arguments_map, $this );
|
114 |
|
115 |
$registration_slug = $this->get_registration_slug();
|
116 |
|
117 |
/**
|
118 |
* Applies a filter to instance arguments validation callbacks based on the registration slug of the shortcode.
|
119 |
*
|
120 |
+
* @since 4.12.0
|
121 |
*
|
122 |
+
* @param array $validate_arguments_map Current set of callbacks for arguments.
|
123 |
+
* @param static $instance Which instance of shortcode we are dealing with.
|
124 |
*/
|
125 |
$validate_arguments_map = apply_filters( "tribe__shortcode_{$registration_slug}_validate_arguments_map", $validate_arguments_map, $this );
|
126 |
|
134 |
/**
|
135 |
* Applies a filter to instance arguments.
|
136 |
*
|
137 |
+
* @since 4.12.0
|
138 |
*
|
139 |
+
* @param array $arguments Current set of arguments.
|
140 |
+
* @param static $instance Which instance of shortcode we are dealing with.
|
141 |
*/
|
142 |
$arguments = apply_filters( 'tribe_shortcode_arguments', $this->arguments, $this );
|
143 |
|
146 |
/**
|
147 |
* Applies a filter to instance arguments based on the registration slug of the shortcode.
|
148 |
*
|
149 |
+
* @since 4.12.0
|
150 |
*
|
151 |
+
* @param array $arguments Current set of arguments.
|
152 |
+
* @param static $instance Which instance of shortcode we are dealing with.
|
153 |
*/
|
154 |
$arguments = apply_filters( "tribe_shortcode_{$registration_slug}_arguments", $arguments, $this );
|
155 |
|
164 |
$argument = Arr::get( $arguments, $index, $default );
|
165 |
|
166 |
/**
|
167 |
+
* Applies a filter to a specific shortcode argument, catch all for all shortcodes..
|
168 |
*
|
169 |
+
* @since 4.12.0
|
170 |
*
|
171 |
+
* @param mixed $argument The argument.
|
172 |
+
* @param array $index Which index we indent to fetch from the arguments.
|
173 |
+
* @param array $default Default value if it doesnt exist.
|
174 |
+
* @param static $instance Which instance of shortcode we are dealing with.
|
175 |
*/
|
176 |
$argument = apply_filters( 'tribe_shortcode_argument', $argument, $index, $default, $this );
|
177 |
|
180 |
/**
|
181 |
* Applies a filter to a specific shortcode argument, to a particular registration slug.
|
182 |
*
|
183 |
+
* @since 4.12.0
|
184 |
*
|
185 |
+
* @param mixed $argument The argument value.
|
186 |
+
* @param array $index Which index we indent to fetch from the arguments.
|
187 |
+
* @param array $default Default value if it doesnt exist.
|
188 |
+
* @param static $instance Which instance of shortcode we are dealing with.
|
189 |
*/
|
190 |
$argument = apply_filters( "tribe_shortcode_{$registration_slug}_argument", $argument, $index, $default, $this );
|
191 |
|
199 |
/**
|
200 |
* Applies a filter to instance default arguments.
|
201 |
*
|
202 |
+
* @since 4.12.0
|
203 |
*
|
204 |
+
* @param array $default_arguments Current set of default arguments.
|
205 |
+
* @param static $instance Which instance of shortcode we are dealing with.
|
206 |
*/
|
207 |
$default_arguments = apply_filters( 'tribe_shortcode_default_arguments', $this->default_arguments, $this );
|
208 |
|
211 |
/**
|
212 |
* Applies a filter to instance default arguments based on the registration slug of the shortcode.
|
213 |
*
|
214 |
+
* @since 4.12.0
|
215 |
*
|
216 |
+
* @param array $default_arguments Current set of default arguments.
|
217 |
+
* @param static $instance Which instance of shortcode we are dealing with.
|
218 |
*/
|
219 |
$default_arguments = apply_filters( "tribe_shortcode_{$registration_slug}_default_arguments", $default_arguments, $this );
|
220 |
|
common/src/Tribe/Shortcode/Shortcode_Interface.php
CHANGED
@@ -1,20 +1,28 @@
|
|
1 |
<?php
|
2 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
namespace Tribe\Shortcode;
|
4 |
|
5 |
/**
|
6 |
* Interface Shortcode_Interface
|
7 |
*
|
8 |
-
* @package Tribe\Shortcode
|
9 |
-
*
|
10 |
* @since 4.12.0
|
|
|
|
|
11 |
*/
|
12 |
interface Shortcode_Interface {
|
13 |
|
14 |
/**
|
15 |
-
* Returns the shortcode slug
|
|
|
|
|
16 |
*
|
17 |
-
* @since
|
18 |
*
|
19 |
* @return string The shortcode slug.
|
20 |
*/
|
@@ -23,60 +31,39 @@ interface Shortcode_Interface {
|
|
23 |
/**
|
24 |
* Configures the base variables for an instance of shortcode.
|
25 |
*
|
26 |
-
* @since
|
27 |
*
|
28 |
-
* @param array
|
29 |
* @param string $content Contents passed to the shortcode, inside of the open and close brackets.
|
30 |
*/
|
31 |
public function setup( $arguments, $content );
|
32 |
|
33 |
-
/**
|
34 |
-
* Sets the aliased arguments array.
|
35 |
-
*
|
36 |
-
* @see Tribe__Utils__Array::parse_associative_array_alias() The expected format.
|
37 |
-
*
|
38 |
-
* @since 4.12.2
|
39 |
-
*
|
40 |
-
* @param array $alias_map An associative array of aliases: key as alias, value as mapped canonical.
|
41 |
-
* Example: [ 'alias' => 'canonical', 'from' => 'to', 'that' => 'becomes_this' ]
|
42 |
-
*/
|
43 |
-
public function set_aliased_arguments( array $alias_map );
|
44 |
-
|
45 |
-
/**
|
46 |
-
* Gets the aliased arguments array.
|
47 |
-
*
|
48 |
-
* @since 4.12.2
|
49 |
-
*
|
50 |
-
* @return array<string,string> The associative array map of aliases and their canonical arguments.
|
51 |
-
*/
|
52 |
-
public function get_aliased_arguments();
|
53 |
-
|
54 |
/**
|
55 |
* Returns the arguments for the shortcode parsed correctly with defaults applied.
|
56 |
*
|
57 |
-
* @since
|
58 |
*
|
59 |
-
* @param array
|
60 |
*
|
61 |
* @return array<string,mixed> The parsed shortcode arguments map.
|
62 |
*/
|
63 |
-
public function parse_arguments(
|
64 |
|
65 |
/**
|
66 |
* Returns the array of arguments for this shortcode after applying the validation callbacks.
|
67 |
*
|
68 |
-
* @since
|
69 |
*
|
70 |
-
* @param array
|
71 |
*
|
72 |
* @return array<string,mixed> The validated shortcode arguments map.
|
73 |
*/
|
74 |
-
public function validate_arguments(
|
75 |
|
76 |
/**
|
77 |
* Returns the array of callbacks for this shortcode's arguments.
|
78 |
*
|
79 |
-
* @since
|
80 |
*
|
81 |
* @return array<string,mixed> A map of the shortcode arguments that have survived validation.
|
82 |
*/
|
@@ -85,7 +72,7 @@ interface Shortcode_Interface {
|
|
85 |
/**
|
86 |
* Returns a shortcode default arguments.
|
87 |
*
|
88 |
-
* @since
|
89 |
*
|
90 |
* @return array<string,mixed> The shortcode default arguments map.
|
91 |
*/
|
@@ -94,7 +81,7 @@ interface Shortcode_Interface {
|
|
94 |
/**
|
95 |
* Returns a shortcode arguments after been parsed.
|
96 |
*
|
97 |
-
* @since
|
98 |
*
|
99 |
* @return array<string,mixed> The shortcode arguments, as set by the user in the shortcode string.
|
100 |
*/
|
@@ -103,21 +90,21 @@ interface Shortcode_Interface {
|
|
103 |
/**
|
104 |
* Returns a shortcode argument after it has been parsed.
|
105 |
*
|
106 |
-
* @
|
107 |
*
|
108 |
-
* @
|
109 |
-
* @param array $default Default value if it doesn't exist.
|
110 |
*
|
111 |
-
* @
|
|
|
112 |
*
|
113 |
-
* @return mixed
|
114 |
*/
|
115 |
public function get_argument( $index, $default = null );
|
116 |
|
117 |
/**
|
118 |
-
* Returns a shortcode
|
119 |
*
|
120 |
-
* @since
|
121 |
*
|
122 |
* @return string The shortcode rendered HTML code.
|
123 |
*/
|
1 |
<?php
|
2 |
+
/**
|
3 |
+
* The interface all shortcodes should implement.
|
4 |
+
*
|
5 |
+
* @since 4.12.0
|
6 |
+
*
|
7 |
+
* @package Tribe\Shortcode
|
8 |
+
*/
|
9 |
namespace Tribe\Shortcode;
|
10 |
|
11 |
/**
|
12 |
* Interface Shortcode_Interface
|
13 |
*
|
|
|
|
|
14 |
* @since 4.12.0
|
15 |
+
*
|
16 |
+
* @package Tribe\Shortcode
|
17 |
*/
|
18 |
interface Shortcode_Interface {
|
19 |
|
20 |
/**
|
21 |
+
* Returns the shortcode slug.
|
22 |
+
*
|
23 |
+
* The slug should be the one that will allow the shortcode to be built by the shortcode class by slug.
|
24 |
*
|
25 |
+
* @since 4.12.0
|
26 |
*
|
27 |
* @return string The shortcode slug.
|
28 |
*/
|
31 |
/**
|
32 |
* Configures the base variables for an instance of shortcode.
|
33 |
*
|
34 |
+
* @since 4.12.0
|
35 |
*
|
36 |
+
* @param array $arguments Set of arguments passed to the Shortcode at hand.
|
37 |
* @param string $content Contents passed to the shortcode, inside of the open and close brackets.
|
38 |
*/
|
39 |
public function setup( $arguments, $content );
|
40 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
41 |
/**
|
42 |
* Returns the arguments for the shortcode parsed correctly with defaults applied.
|
43 |
*
|
44 |
+
* @since 4.12.0
|
45 |
*
|
46 |
+
* @param array $arguments Set of arguments passed to the Shortcode at hand.
|
47 |
*
|
48 |
* @return array<string,mixed> The parsed shortcode arguments map.
|
49 |
*/
|
50 |
+
public function parse_arguments( $arguments );
|
51 |
|
52 |
/**
|
53 |
* Returns the array of arguments for this shortcode after applying the validation callbacks.
|
54 |
*
|
55 |
+
* @since 4.12.0
|
56 |
*
|
57 |
+
* @param array $arguments Set of arguments passed to the Shortcode at hand.
|
58 |
*
|
59 |
* @return array<string,mixed> The validated shortcode arguments map.
|
60 |
*/
|
61 |
+
public function validate_arguments( $arguments );
|
62 |
|
63 |
/**
|
64 |
* Returns the array of callbacks for this shortcode's arguments.
|
65 |
*
|
66 |
+
* @since 4.12.0
|
67 |
*
|
68 |
* @return array<string,mixed> A map of the shortcode arguments that have survived validation.
|
69 |
*/
|
72 |
/**
|
73 |
* Returns a shortcode default arguments.
|
74 |
*
|
75 |
+
* @since 4.12.0
|
76 |
*
|
77 |
* @return array<string,mixed> The shortcode default arguments map.
|
78 |
*/
|
81 |
/**
|
82 |
* Returns a shortcode arguments after been parsed.
|
83 |
*
|
84 |
+
* @since 4.12.0
|
85 |
*
|
86 |
* @return array<string,mixed> The shortcode arguments, as set by the user in the shortcode string.
|
87 |
*/
|
90 |
/**
|
91 |
* Returns a shortcode argument after it has been parsed.
|
92 |
*
|
93 |
+
* @uses Tribe__Utils__Array::get For index fetching and Default.
|
94 |
*
|
95 |
+
* @since 4.12.0
|
|
|
96 |
*
|
97 |
+
* @param array $index Which index we indent to fetch from the arguments.
|
98 |
+
* @param array $default Default value if it doesnt exist.
|
99 |
*
|
100 |
+
* @return mixed Value for the Index passed as the first argument.
|
101 |
*/
|
102 |
public function get_argument( $index, $default = null );
|
103 |
|
104 |
/**
|
105 |
+
* Returns a shortcode HTML code.
|
106 |
*
|
107 |
+
* @since 4.12.0
|
108 |
*
|
109 |
* @return string The shortcode rendered HTML code.
|
110 |
*/
|
common/src/Tribe/Shortcode/Utils.php
DELETED
@@ -1,45 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
namespace Tribe\Shortcode;
|
3 |
-
|
4 |
-
/**
|
5 |
-
* Class Utils.
|
6 |
-
*
|
7 |
-
* @since 4.13.0
|
8 |
-
*
|
9 |
-
* @package Tribe\Shortcode
|
10 |
-
*/
|
11 |
-
class Utils {
|
12 |
-
/**
|
13 |
-
* Convert settings to a set of shortcode attributes.
|
14 |
-
*
|
15 |
-
* @since 4.13.0
|
16 |
-
*
|
17 |
-
* @param array<string,mixed> $settings Widget settings.
|
18 |
-
* @param array<string> $allowed Allowed settings for shortcode.
|
19 |
-
*
|
20 |
-
* @return string Shortcode attributes string.
|
21 |
-
*/
|
22 |
-
public static function get_attributes_string( $settings, $allowed = [] ) {
|
23 |
-
$settings_string = '';
|
24 |
-
|
25 |
-
$allowed = array_flip( $allowed );
|
26 |
-
|
27 |
-
foreach ( $settings as $key => $value ) {
|
28 |
-
if ( ! empty( $allowed ) && ! isset( $allowed[ $key ] ) ) {
|
29 |
-
continue;
|
30 |
-
}
|
31 |
-
|
32 |
-
$key = esc_attr( $key );
|
33 |
-
|
34 |
-
if ( is_array( $value ) ) {
|
35 |
-
$value = implode( ', ', $value );
|
36 |
-
}
|
37 |
-
|
38 |
-
$value = esc_attr( $value );
|
39 |
-
|
40 |
-
$settings_string .= " {$key}=\"{$value}\"";
|
41 |
-
}
|
42 |
-
|
43 |
-
return $settings_string;
|
44 |
-
}
|
45 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
common/src/Tribe/Simple_Table.php
CHANGED
@@ -8,7 +8,7 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
8 |
/**
|
9 |
* A class for outputting a multidimensional array as a straightforward HTML table
|
10 |
*
|
11 |
-
* @
|
12 |
*/
|
13 |
class Tribe__Simple_Table {
|
14 |
|
@@ -38,7 +38,7 @@ class Tribe__Simple_Table {
|
|
38 |
* @param array $tbody Multidimension array containing table rows/columns
|
39 |
* @param array $thead Single dimension array containing table headings
|
40 |
*/
|
41 |
-
public function __construct( $tbody, $thead =
|
42 |
$this->thead = $thead;
|
43 |
$this->tbody = $tbody;
|
44 |
}
|
@@ -143,7 +143,7 @@ class Tribe__Simple_Table {
|
|
143 |
*
|
144 |
* @return string HTML element
|
145 |
*/
|
146 |
-
private function output_element( $html_tag, $data = null, $attributes =
|
147 |
$output = '<' . tag_escape( $html_tag );
|
148 |
|
149 |
if ( ! empty( $attributes ) ) {
|
8 |
/**
|
9 |
* A class for outputting a multidimensional array as a straightforward HTML table
|
10 |
*
|
11 |
+
* @TODO Remove this in version 5 if it does not see much usage
|
12 |
*/
|
13 |
class Tribe__Simple_Table {
|
14 |
|
38 |
* @param array $tbody Multidimension array containing table rows/columns
|
39 |
* @param array $thead Single dimension array containing table headings
|
40 |
*/
|
41 |
+
public function __construct( $tbody, $thead = array() ) {
|
42 |
$this->thead = $thead;
|
43 |
$this->tbody = $tbody;
|
44 |
}
|
143 |
*
|
144 |
* @return string HTML element
|
145 |
*/
|
146 |
+
private function output_element( $html_tag, $data = null, $attributes = array() ) {
|
147 |
$output = '<' . tag_escape( $html_tag );
|
148 |
|
149 |
if ( ! empty( $attributes ) ) {
|
common/src/Tribe/Support.php
CHANGED
@@ -26,20 +26,20 @@ if ( ! class_exists( 'Tribe__Support' ) ) {
|
|
26 |
*
|
27 |
* @var array
|
28 |
*/
|
29 |
-
protected $must_escape =
|
30 |
'tribeEventsAfterHTML',
|
31 |
'tribeEventsBeforeHTML',
|
32 |
-
|
33 |
|
34 |
/**
|
35 |
* Field prefixes here should be partially obfuscated before being printed.
|
36 |
*
|
37 |
* @var array
|
38 |
*/
|
39 |
-
protected $must_obfuscate_prefixes =
|
40 |
'pue_install_key_',
|
41 |
'google_maps_js_api_key',
|
42 |
-
|
43 |
|
44 |
private function __construct() {
|
45 |
/**
|
@@ -49,11 +49,11 @@ if ( ! class_exists( 'Tribe__Support' ) ) {
|
|
49 |
*/
|
50 |
$this->must_escape = (array) apply_filters( 'tribe_help_must_escape_fields', $this->must_escape );
|
51 |
|
52 |
-
add_action( 'tribe_help_pre_get_sections',
|
53 |
-
add_action( 'delete_option_rewrite_rules',
|
54 |
|
55 |
-
add_action( 'rest_api_init',
|
56 |
-
add_action( 'wp_ajax_tribe_toggle_sysinfo_optin',
|
57 |
}
|
58 |
|
59 |
/**
|
@@ -74,7 +74,7 @@ if ( ! class_exists( 'Tribe__Support' ) ) {
|
|
74 |
global $wpdb;
|
75 |
$user = wp_get_current_user();
|
76 |
|
77 |
-
$plugins =
|
78 |
if ( function_exists( 'get_plugin_data' ) ) {
|
79 |
$plugins_raw = wp_get_active_and_valid_plugins();
|
80 |
foreach ( $plugins_raw as $k => $v ) {
|
@@ -93,7 +93,7 @@ if ( ! class_exists( 'Tribe__Support' ) ) {
|
|
93 |
}
|
94 |
}
|
95 |
|
96 |
-
$network_plugins =
|
97 |
if ( is_multisite() && function_exists( 'get_plugin_data' ) ) {
|
98 |
$plugins_raw = wp_get_active_network_plugins();
|
99 |
foreach ( $plugins_raw as $k => $v ) {
|
@@ -112,7 +112,7 @@ if ( ! class_exists( 'Tribe__Support' ) ) {
|
|
112 |
}
|
113 |
}
|
114 |
|
115 |
-
$mu_plugins =
|
116 |
if ( function_exists( 'get_mu_plugins' ) ) {
|
117 |
$mu_plugins_raw = get_mu_plugins();
|
118 |
foreach ( $mu_plugins_raw as $k => $v ) {
|
@@ -130,10 +130,10 @@ if ( ! class_exists( 'Tribe__Support' ) ) {
|
|
130 |
}
|
131 |
}
|
132 |
|
133 |
-
$keys = apply_filters( 'tribe-pue-install-keys',
|
134 |
//Obfuscate the License Keys for Security
|
135 |
if ( is_array( $keys ) && ! empty( $keys ) ) {
|
136 |
-
$secure_keys =
|
137 |
foreach ( $keys as $plugin => $license ) {
|
138 |
$secure_keys[ $plugin ] = preg_replace( '/^(.{4}).*(.{4})$/', '$1' . str_repeat( '#', 32 ) . '$2', $license );
|
139 |
}
|
@@ -145,15 +145,15 @@ if ( ! class_exists( 'Tribe__Support' ) ) {
|
|
145 |
$server = explode( '/', reset( $server ) );
|
146 |
|
147 |
//PHP Information
|
148 |
-
$php_info =
|
149 |
-
$php_vars =
|
150 |
'max_execution_time',
|
151 |
'memory_limit',
|
152 |
'upload_max_filesize',
|
153 |
'post_max_size',
|
154 |
'display_errors',
|
155 |
'log_errors',
|
156 |
-
|
157 |
|
158 |
foreach ( $php_vars as $php_var ) {
|
159 |
if ( isset( $wpdb->qm_php_vars ) && isset( $wpdb->qm_php_vars[ $php_var ] ) ) {
|
@@ -176,7 +176,7 @@ if ( ! class_exists( 'Tribe__Support' ) ) {
|
|
176 |
}
|
177 |
|
178 |
$site_url = get_site_url();
|
179 |
-
$systeminfo =
|
180 |
'Home URL' => get_home_url(),
|
181 |
'Site URL' => $site_url,
|
182 |
'Site Language' => get_option( 'WPLANG' ) ? get_option( 'WPLANG' ) : esc_html__( 'English', 'tribe-common' ),
|
@@ -206,7 +206,7 @@ if ( ! class_exists( 'Tribe__Support' ) ) {
|
|
206 |
'Week Starts On' => get_option( 'start_of_week' ),
|
207 |
'Common Library Dir' => $GLOBALS['tribe-common-info']['dir'],
|
208 |
'Common Library Version' => $GLOBALS['tribe-common-info']['version'],
|
209 |
-
|
210 |
|
211 |
if ( $this->rewrite_rules_purged ) {
|
212 |
$systeminfo['rewrite rules purged'] = esc_html__( 'Rewrite rules were purged on load of this help page. Chances are there is a rewrite rule flush occurring in a plugin or theme!', 'tribe-common' );
|
@@ -262,7 +262,7 @@ if ( ! class_exists( 'Tribe__Support' ) ) {
|
|
262 |
} elseif ( is_array( $v ) && $is_numeric_array ) {
|
263 |
$output .= sprintf( '<dd class="support-stats-array"><ul><li>%s</li></ul></dd>', join( '</li><li>', $v ) );
|
264 |
} else {
|
265 |
-
$formatted_v =
|
266 |
foreach ( $v as $obj_key => $obj_val ) {
|
267 |
if ( in_array( $obj_key, $this->must_escape ) ) {
|
268 |
$obj_val = esc_html( $obj_val );
|
@@ -287,7 +287,7 @@ if ( ! class_exists( 'Tribe__Support' ) ) {
|
|
287 |
}
|
288 |
|
289 |
/**
|
290 |
-
* Logs the
|
291 |
*/
|
292 |
public function log_rewrite_rule_purge() {
|
293 |
$this->rewrite_rules_purged = true;
|
@@ -315,8 +315,8 @@ if ( ! class_exists( 'Tribe__Support' ) ) {
|
|
315 |
$checked = 'checked';
|
316 |
}
|
317 |
|
318 |
-
$opt_in = '<p class="system-info"><input name="tribe_auto_sysinfo_opt_in" id="tribe_auto_sysinfo_opt_in" type="checkbox" value="optin" ' . esc_attr( $checked ) . '/><label for="tribe_auto_sysinfo_opt_in">' . esc_html__( 'Yes, automatically share my system information with
|
319 |
-
$opt_in .= '<p class="tooltip description">' . esc_html__( 'Your system information will only be used by
|
320 |
$opt_in .= '<p class="tribe-sysinfo-optin-msg"></p>';
|
321 |
|
322 |
return $opt_in;
|
@@ -355,15 +355,10 @@ if ( ! class_exists( 'Tribe__Support' ) ) {
|
|
355 |
public static function create_sysinfo_endpoint() {
|
356 |
$optin_key = get_option( 'tribe_systeminfo_optin' );
|
357 |
if ( $optin_key ) {
|
358 |
-
register_rest_route(
|
359 |
-
'
|
360 |
-
'
|
361 |
-
|
362 |
-
'methods' => 'GET',
|
363 |
-
'callback' => [ 'Tribe__Support', 'sysinfo_query' ],
|
364 |
-
'permission_callback' => '__return_true',
|
365 |
-
]
|
366 |
-
);
|
367 |
}
|
368 |
}
|
369 |
|
@@ -383,7 +378,7 @@ if ( ! class_exists( 'Tribe__Support' ) ) {
|
|
383 |
update_option( 'tribe_systeminfo_optin', $optin_key );
|
384 |
|
385 |
//Only Connect If a License Exists
|
386 |
-
$keys = apply_filters( 'tribe-pue-install-keys',
|
387 |
if ( is_array( $keys ) && ! empty( $keys ) ) {
|
388 |
Tribe__Support::send_sysinfo_key( $optin_key );
|
389 |
} else {
|
@@ -412,7 +407,7 @@ if ( ! class_exists( 'Tribe__Support' ) ) {
|
|
412 |
*/
|
413 |
public static function send_sysinfo_key( $optin_key = null, $url = null, $remove = null, $pueadd = false ) {
|
414 |
|
415 |
-
$url
|
416 |
|
417 |
$teccom_url = 'https://theeventscalendar.com/';
|
418 |
|
26 |
*
|
27 |
* @var array
|
28 |
*/
|
29 |
+
protected $must_escape = array(
|
30 |
'tribeEventsAfterHTML',
|
31 |
'tribeEventsBeforeHTML',
|
32 |
+
);
|
33 |
|
34 |
/**
|
35 |
* Field prefixes here should be partially obfuscated before being printed.
|
36 |
*
|
37 |
* @var array
|
38 |
*/
|
39 |
+
protected $must_obfuscate_prefixes = array(
|
40 |
'pue_install_key_',
|
41 |
'google_maps_js_api_key',
|
42 |
+
);
|
43 |
|
44 |
private function __construct() {
|
45 |
/**
|
49 |
*/
|
50 |
$this->must_escape = (array) apply_filters( 'tribe_help_must_escape_fields', $this->must_escape );
|
51 |
|
52 |
+
add_action( 'tribe_help_pre_get_sections', array( $this, 'append_system_info' ), 10 );
|
53 |
+
add_action( 'delete_option_rewrite_rules', array( $this, 'log_rewrite_rule_purge' ) );
|
54 |
|
55 |
+
add_action( 'rest_api_init', array( __CLASS__, 'create_sysinfo_endpoint' ) );
|
56 |
+
add_action( 'wp_ajax_tribe_toggle_sysinfo_optin', array( __CLASS__, 'ajax_sysinfo_optin' ) );
|
57 |
}
|
58 |
|
59 |
/**
|
74 |
global $wpdb;
|
75 |
$user = wp_get_current_user();
|
76 |
|
77 |
+
$plugins = array();
|
78 |
if ( function_exists( 'get_plugin_data' ) ) {
|
79 |
$plugins_raw = wp_get_active_and_valid_plugins();
|
80 |
foreach ( $plugins_raw as $k => $v ) {
|
93 |
}
|
94 |
}
|
95 |
|
96 |
+
$network_plugins = array();
|
97 |
if ( is_multisite() && function_exists( 'get_plugin_data' ) ) {
|
98 |
$plugins_raw = wp_get_active_network_plugins();
|
99 |
foreach ( $plugins_raw as $k => $v ) {
|
112 |
}
|
113 |
}
|
114 |
|
115 |
+
$mu_plugins = array();
|
116 |
if ( function_exists( 'get_mu_plugins' ) ) {
|
117 |
$mu_plugins_raw = get_mu_plugins();
|
118 |
foreach ( $mu_plugins_raw as $k => $v ) {
|
130 |
}
|
131 |
}
|
132 |
|
133 |
+
$keys = apply_filters( 'tribe-pue-install-keys', array() );
|
134 |
//Obfuscate the License Keys for Security
|
135 |
if ( is_array( $keys ) && ! empty( $keys ) ) {
|
136 |
+
$secure_keys = array();
|
137 |
foreach ( $keys as $plugin => $license ) {
|
138 |
$secure_keys[ $plugin ] = preg_replace( '/^(.{4}).*(.{4})$/', '$1' . str_repeat( '#', 32 ) . '$2', $license );
|
139 |
}
|
145 |
$server = explode( '/', reset( $server ) );
|
146 |
|
147 |
//PHP Information
|
148 |
+
$php_info = array();
|
149 |
+
$php_vars = array(
|
150 |
'max_execution_time',
|
151 |
'memory_limit',
|
152 |
'upload_max_filesize',
|
153 |
'post_max_size',
|
154 |
'display_errors',
|
155 |
'log_errors',
|
156 |
+
);
|
157 |
|
158 |
foreach ( $php_vars as $php_var ) {
|
159 |
if ( isset( $wpdb->qm_php_vars ) && isset( $wpdb->qm_php_vars[ $php_var ] ) ) {
|
176 |
}
|
177 |
|
178 |
$site_url = get_site_url();
|
179 |
+
$systeminfo = array(
|
180 |
'Home URL' => get_home_url(),
|
181 |
'Site URL' => $site_url,
|
182 |
'Site Language' => get_option( 'WPLANG' ) ? get_option( 'WPLANG' ) : esc_html__( 'English', 'tribe-common' ),
|
206 |
'Week Starts On' => get_option( 'start_of_week' ),
|
207 |
'Common Library Dir' => $GLOBALS['tribe-common-info']['dir'],
|
208 |
'Common Library Version' => $GLOBALS['tribe-common-info']['version'],
|
209 |
+
);
|
210 |
|
211 |
if ( $this->rewrite_rules_purged ) {
|
212 |
$systeminfo['rewrite rules purged'] = esc_html__( 'Rewrite rules were purged on load of this help page. Chances are there is a rewrite rule flush occurring in a plugin or theme!', 'tribe-common' );
|
262 |
} elseif ( is_array( $v ) && $is_numeric_array ) {
|
263 |
$output .= sprintf( '<dd class="support-stats-array"><ul><li>%s</li></ul></dd>', join( '</li><li>', $v ) );
|
264 |
} else {
|
265 |
+
$formatted_v = array();
|
266 |
foreach ( $v as $obj_key => $obj_val ) {
|
267 |
if ( in_array( $obj_key, $this->must_escape ) ) {
|
268 |
$obj_val = esc_html( $obj_val );
|
287 |
}
|
288 |
|
289 |
/**
|
290 |
+
* Logs the occurence of rewrite rule purging
|
291 |
*/
|
292 |
public function log_rewrite_rule_purge() {
|
293 |
$this->rewrite_rules_purged = true;
|
315 |
$checked = 'checked';
|
316 |
}
|
317 |
|
318 |
+
$opt_in = '<p class="system-info"><input name="tribe_auto_sysinfo_opt_in" id="tribe_auto_sysinfo_opt_in" type="checkbox" value="optin" ' . esc_attr( $checked ) . '/><label for="tribe_auto_sysinfo_opt_in">' . esc_html__( 'Yes, automatically share my system information with the Modern Tribe support team', 'tribe-common' ) . '</label></p>';
|
319 |
+
$opt_in .= '<p class="tooltip description">' . esc_html__( 'Your system information will only be used by the Modern Tribe support team. All information is stored securely. We do not share this information with any third parties.', 'tribe-common' ) . '</p>';
|
320 |
$opt_in .= '<p class="tribe-sysinfo-optin-msg"></p>';
|
321 |
|
322 |
return $opt_in;
|
355 |
public static function create_sysinfo_endpoint() {
|
356 |
$optin_key = get_option( 'tribe_systeminfo_optin' );
|
357 |
if ( $optin_key ) {
|
358 |
+
register_rest_route( 'tribe_events/v2', '/(?P<key>[a-z0-9\-]+)/sysinfo/', array(
|
359 |
+
'methods' => 'GET',
|
360 |
+
'callback' => array( 'Tribe__Support', 'sysinfo_query' ),
|
361 |
+
) );
|
|
|
|
|
|
|
|
|
|
|
362 |
}
|
363 |
}
|
364 |
|
378 |
update_option( 'tribe_systeminfo_optin', $optin_key );
|
379 |
|
380 |
//Only Connect If a License Exists
|
381 |
+
$keys = apply_filters( 'tribe-pue-install-keys', array() );
|
382 |
if ( is_array( $keys ) && ! empty( $keys ) ) {
|
383 |
Tribe__Support::send_sysinfo_key( $optin_key );
|
384 |
} else {
|
407 |
*/
|
408 |
public static function send_sysinfo_key( $optin_key = null, $url = null, $remove = null, $pueadd = false ) {
|
409 |
|
410 |
+
$url = $url ? $url : urlencode( str_replace( array( 'http://', 'https://' ), '', get_site_url() ) );
|
411 |
|
412 |
$teccom_url = 'https://theeventscalendar.com/';
|
413 |
|
common/src/Tribe/Support/Obfuscator.php
CHANGED
@@ -6,14 +6,14 @@ class Tribe__Support__Obfuscator {
|
|
6 |
/**
|
7 |
* @var array
|
8 |
*/
|
9 |
-
protected $prefixes =
|
10 |
|
11 |
/**
|
12 |
* Tribe__Support__Obfuscator constructor.
|
13 |
*
|
14 |
* @param array $prefixes
|
15 |
*/
|
16 |
-
public function __construct( array $prefixes =
|
17 |
$this->prefixes = $prefixes;
|
18 |
}
|
19 |
|
6 |
/**
|
7 |
* @var array
|
8 |
*/
|
9 |
+
protected $prefixes = array();
|
10 |
|
11 |
/**
|
12 |
* Tribe__Support__Obfuscator constructor.
|
13 |
*
|
14 |
* @param array $prefixes
|
15 |
*/
|
16 |
+
public function __construct( array $prefixes = array() ) {
|
17 |
$this->prefixes = $prefixes;
|
18 |
}
|
19 |
|
common/src/Tribe/Support/Template_Checker.php
CHANGED
@@ -9,8 +9,9 @@ class Tribe__Support__Template_Checker {
|
|
9 |
protected $plugin_views_dir = '';
|
10 |
protected $theme_views_dir = '';
|
11 |
|
12 |
-
protected $originals =
|
13 |
-
protected $overrides =
|
|
|
14 |
|
15 |
/**
|
16 |
* Examine the plugin views (and optionally any theme overrides) and analyse
|
@@ -175,7 +176,7 @@ class Tribe__Support__Template_Checker {
|
|
175 |
* @return array
|
176 |
*/
|
177 |
public function get_versioned_views() {
|
178 |
-
$versioned_views =
|
179 |
|
180 |
foreach ( $this->originals as $key => $version ) {
|
181 |
if ( ! empty( $version ) ) {
|
@@ -195,7 +196,7 @@ class Tribe__Support__Template_Checker {
|
|
195 |
* @return array
|
196 |
*/
|
197 |
public function get_views_tagged_this_release() {
|
198 |
-
$currently_tagged_views =
|
199 |
|
200 |
foreach ( $this->get_versioned_views() as $key => $version ) {
|
201 |
if ( $version === $this->plugin_version ) {
|
@@ -225,7 +226,7 @@ class Tribe__Support__Template_Checker {
|
|
225 |
* @return array
|
226 |
*/
|
227 |
public function get_versioned_overrides() {
|
228 |
-
$versioned_views =
|
229 |
|
230 |
foreach ( $this->overrides as $key => $version ) {
|
231 |
if ( ! empty( $version ) ) {
|
@@ -251,7 +252,7 @@ class Tribe__Support__Template_Checker {
|
|
251 |
* @return array
|
252 |
*/
|
253 |
public function get_outdated_overrides( $include_unknown = false ) {
|
254 |
-
$outdated =
|
255 |
$originals = $this->get_versioned_views();
|
256 |
|
257 |
$overrides = $include_unknown
|
9 |
protected $plugin_views_dir = '';
|
10 |
protected $theme_views_dir = '';
|
11 |
|
12 |
+
protected $originals = array();
|
13 |
+
protected $overrides = array();
|
14 |
+
|
15 |
|
16 |
/**
|
17 |
* Examine the plugin views (and optionally any theme overrides) and analyse
|
176 |
* @return array
|
177 |
*/
|
178 |
public function get_versioned_views() {
|
179 |
+
$versioned_views = array();
|
180 |
|
181 |
foreach ( $this->originals as $key => $version ) {
|
182 |
if ( ! empty( $version ) ) {
|
196 |
* @return array
|
197 |
*/
|
198 |
public function get_views_tagged_this_release() {
|
199 |
+
$currently_tagged_views = array();
|
200 |
|
201 |
foreach ( $this->get_versioned_views() as $key => $version ) {
|
202 |
if ( $version === $this->plugin_version ) {
|
226 |
* @return array
|
227 |
*/
|
228 |
public function get_versioned_overrides() {
|
229 |
+
$versioned_views = array();
|
230 |
|
231 |
foreach ( $this->overrides as $key => $version ) {
|
232 |
if ( ! empty( $version ) ) {
|
252 |
* @return array
|
253 |
*/
|
254 |
public function get_outdated_overrides( $include_unknown = false ) {
|
255 |
+
$outdated = array();
|
256 |
$originals = $this->get_versioned_views();
|
257 |
|
258 |
$overrides = $include_unknown
|
common/src/Tribe/Support/Template_Checker_Report.php
CHANGED
@@ -14,7 +14,7 @@ class Tribe__Support__Template_Checker_Report {
|
|
14 |
*
|
15 |
* @var array
|
16 |
*/
|
17 |
-
protected static $plugin_reports =
|
18 |
|
19 |
/**
|
20 |
* Container for finished report.
|
@@ -53,7 +53,7 @@ class Tribe__Support__Template_Checker_Report {
|
|
53 |
*
|
54 |
* @var array $registered_template_systems
|
55 |
*/
|
56 |
-
return apply_filters( 'tribe_support_registered_template_systems',
|
57 |
}
|
58 |
|
59 |
/**
|
14 |
*
|
15 |
* @var array
|
16 |
*/
|
17 |
+
protected static $plugin_reports = array();
|
18 |
|
19 |
/**
|
20 |
* Container for finished report.
|
53 |
*
|
54 |
* @var array $registered_template_systems
|
55 |
*/
|
56 |
+
return apply_filters( 'tribe_support_registered_template_systems', array() );
|
57 |
}
|
58 |
|
59 |
/**
|
common/src/Tribe/Tabbed_View.php
CHANGED
@@ -13,7 +13,7 @@ class Tribe__Tabbed_View {
|
|
13 |
*
|
14 |
* @var array An associative array in the [<slug> => <instance>] format.
|
15 |
*/
|
16 |
-
protected $items =
|
17 |
|
18 |
/**
|
19 |
* The slug of the default tab
|
@@ -32,7 +32,7 @@ class Tribe__Tabbed_View {
|
|
32 |
*
|
33 |
* @var array|object
|
34 |
*/
|
35 |
-
protected $data =
|
36 |
|
37 |
/**
|
38 |
* @var string
|
@@ -99,7 +99,7 @@ class Tribe__Tabbed_View {
|
|
99 |
* @return Tribe__Tabbed_View__Tab[] An array of all the active and visible tabs.
|
100 |
*/
|
101 |
public function get_visibles() {
|
102 |
-
return array_filter( $this->get(),
|
103 |
}
|
104 |
|
105 |
/**
|
@@ -175,7 +175,7 @@ class Tribe__Tabbed_View {
|
|
175 |
* @return null|array|object If we couldn't find the tab it will be null, if the slug is null will return all tabs
|
176 |
*/
|
177 |
public function get( $slug = null ) {
|
178 |
-
uasort( $this->items,
|
179 |
|
180 |
if ( is_null( $slug ) ) {
|
181 |
return $this->items;
|
@@ -295,7 +295,7 @@ class Tribe__Tabbed_View {
|
|
295 |
* @return Tribe__Tabbed_View__Tab[]
|
296 |
*/
|
297 |
public function get_tabs() {
|
298 |
-
uasort( $this->items,
|
299 |
|
300 |
return array_values( $this->items );
|
301 |
}
|
@@ -332,9 +332,9 @@ class Tribe__Tabbed_View {
|
|
332 |
return '';
|
333 |
}
|
334 |
|
335 |
-
$default_data =
|
336 |
'view' => $this,
|
337 |
-
|
338 |
|
339 |
$data = array_merge( $default_data, (array) $this->data );
|
340 |
|
13 |
*
|
14 |
* @var array An associative array in the [<slug> => <instance>] format.
|
15 |
*/
|
16 |
+
protected $items = array();
|
17 |
|
18 |
/**
|
19 |
* The slug of the default tab
|
32 |
*
|
33 |
* @var array|object
|
34 |
*/
|
35 |
+
protected $data = array();
|
36 |
|
37 |
/**
|
38 |
* @var string
|
99 |
* @return Tribe__Tabbed_View__Tab[] An array of all the active and visible tabs.
|
100 |
*/
|
101 |
public function get_visibles() {
|
102 |
+
return array_filter( $this->get(), array( $this, 'is_tab_visible' ) );
|
103 |
}
|
104 |
|
105 |
/**
|
175 |
* @return null|array|object If we couldn't find the tab it will be null, if the slug is null will return all tabs
|
176 |
*/
|
177 |
public function get( $slug = null ) {
|
178 |
+
uasort( $this->items, array( $this, 'sort_by_priority' ) );
|
179 |
|
180 |
if ( is_null( $slug ) ) {
|
181 |
return $this->items;
|
295 |
* @return Tribe__Tabbed_View__Tab[]
|
296 |
*/
|
297 |
public function get_tabs() {
|
298 |
+
uasort( $this->items, array( $this, 'sort_by_priority' ) );
|
299 |
|
300 |
return array_values( $this->items );
|
301 |
}
|
332 |
return '';
|
333 |
}
|
334 |
|
335 |
+
$default_data = array(
|
336 |
'view' => $this,
|
337 |
+
);
|
338 |
|
339 |
$data = array_merge( $default_data, (array) $this->data );
|
340 |
|
common/src/Tribe/Tabbed_View/Tab.php
CHANGED
@@ -20,7 +20,7 @@ class Tribe__Tabbed_View__Tab {
|
|
20 |
*
|
21 |
* @var array|object
|
22 |
*/
|
23 |
-
protected $data =
|
24 |
|
25 |
/**
|
26 |
* The template file that should be used to render the tab.
|
@@ -164,9 +164,9 @@ class Tribe__Tabbed_View__Tab {
|
|
164 |
return '';
|
165 |
}
|
166 |
|
167 |
-
$default_data =
|
168 |
'tab' => $this,
|
169 |
-
|
170 |
|
171 |
$data = array_merge( $default_data, (array) $this->data );
|
172 |
|
@@ -189,14 +189,14 @@ class Tribe__Tabbed_View__Tab {
|
|
189 |
*
|
190 |
* @return string
|
191 |
*/
|
192 |
-
public function get_url( $args =
|
193 |
if ( ! empty( $this->url ) ) {
|
194 |
return $this->url;
|
195 |
}
|
196 |
|
197 |
-
$defaults =
|
198 |
'tab' => $this->get_slug(),
|
199 |
-
|
200 |
|
201 |
// Allow the link to be "changed" on the fly
|
202 |
$args = wp_parse_args( $args, $defaults );
|
20 |
*
|
21 |
* @var array|object
|
22 |
*/
|
23 |
+
protected $data = array();
|
24 |
|
25 |
/**
|
26 |
* The template file that should be used to render the tab.
|
164 |
return '';
|
165 |
}
|
166 |
|
167 |
+
$default_data = array(
|
168 |
'tab' => $this,
|
169 |
+
);
|
170 |
|
171 |
$data = array_merge( $default_data, (array) $this->data );
|
172 |
|
189 |
*
|
190 |
* @return string
|
191 |
*/
|
192 |
+
public function get_url( $args = array(), $relative = false ) {
|
193 |
if ( ! empty( $this->url ) ) {
|
194 |
return $this->url;
|
195 |
}
|
196 |
|
197 |
+
$defaults = array(
|
198 |
'tab' => $this->get_slug(),
|
199 |
+
);
|
200 |
|
201 |
// Allow the link to be "changed" on the fly
|
202 |
$args = wp_parse_args( $args, $defaults );
|
common/src/Tribe/Template.php
CHANGED
@@ -1,8 +1,5 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
use Tribe\Utils\Paths;
|
4 |
-
use Tribe\Utils\Strings;
|
5 |
-
|
6 |
class Tribe__Template {
|
7 |
/**
|
8 |
* The folders into which we will look for the template.
|
@@ -11,7 +8,7 @@ class Tribe__Template {
|
|
11 |
*
|
12 |
* @var array
|
13 |
*/
|
14 |
-
protected $folder =
|
15 |
|
16 |
/**
|
17 |
* The origin class for the plugin where the template lives
|
@@ -38,7 +35,7 @@ class Tribe__Template {
|
|
38 |
*
|
39 |
* @var array
|
40 |
*/
|
41 |
-
protected $global =
|
42 |
|
43 |
/**
|
44 |
* Used for finding templates for public templates on themes inside of a folder.
|
@@ -58,15 +55,6 @@ class Tribe__Template {
|
|
58 |
*/
|
59 |
protected $template_context_extract = false;
|
60 |
|
61 |
-
/**
|
62 |
-
* Current template hook name.
|
63 |
-
*
|
64 |
-
* @since 4.12.1
|
65 |
-
*
|
66 |
-
* @var string|null
|
67 |
-
*/
|
68 |
-
protected $template_current_hook_name;
|
69 |
-
|
70 |
/**
|
71 |
* Base template for where to look for template
|
72 |
*
|
@@ -94,25 +82,6 @@ class Tribe__Template {
|
|
94 |
*/
|
95 |
protected $template_current_file_path;
|
96 |
|
97 |
-
/**
|
98 |
-
* Whether to look for template files in common or not; defaults to true.
|
99 |
-
*
|
100 |
-
* @since 4.12.10
|
101 |
-
*
|
102 |
-
* @var bool
|
103 |
-
*/
|
104 |
-
protected $common_lookup = true;
|
105 |
-
|
106 |
-
/**
|
107 |
-
* A map of aliases to add a rewritten version of the paths to the template lists.
|
108 |
-
* The map has format `original => alias`.
|
109 |
-
*
|
110 |
-
* @since 4.12.10
|
111 |
-
*
|
112 |
-
* @var array<string,string>
|
113 |
-
*/
|
114 |
-
protected $aliases = [];
|
115 |
-
|
116 |
/**
|
117 |
* Configures the class origin plugin path
|
118 |
*
|
@@ -214,17 +183,6 @@ class Tribe__Template {
|
|
214 |
return $this;
|
215 |
}
|
216 |
|
217 |
-
/**
|
218 |
-
* Gets in this instance of the template engine whether we are looking public folders like themes.
|
219 |
-
*
|
220 |
-
* @since 4.12.1
|
221 |
-
*
|
222 |
-
* @return bool Whether we are looking into theme folders.
|
223 |
-
*/
|
224 |
-
public function get_template_folder_lookup() {
|
225 |
-
return $this->template_folder_lookup;
|
226 |
-
}
|
227 |
-
|
228 |
/**
|
229 |
* Configures the class global context
|
230 |
*
|
@@ -234,7 +192,7 @@ class Tribe__Template {
|
|
234 |
*
|
235 |
* @return self
|
236 |
*/
|
237 |
-
public function add_template_globals( $context =
|
238 |
// Cast as Array merge and save
|
239 |
$this->global = wp_parse_args( (array) $context, $this->global );
|
240 |
|
@@ -258,43 +216,17 @@ class Tribe__Template {
|
|
258 |
}
|
259 |
|
260 |
/**
|
261 |
-
*
|
262 |
-
*
|
263 |
-
* @since 4.12.1
|
264 |
-
*
|
265 |
-
* @param string $value Which value will be saved as the current hook name.
|
266 |
-
*
|
267 |
-
* @return self Allow daisy-chaining.
|
268 |
-
*/
|
269 |
-
public function set_template_current_hook_name( $value ) {
|
270 |
-
$this->template_current_hook_name = (string) $value;
|
271 |
-
|
272 |
-
return $this;
|
273 |
-
}
|
274 |
-
|
275 |
-
/**
|
276 |
-
* Gets the hook name for the current template setup.
|
277 |
-
*
|
278 |
-
* @since 4.12.1
|
279 |
-
*
|
280 |
-
* @return string Hook name currently set on the class.
|
281 |
-
*/
|
282 |
-
public function get_template_current_hook_name() {
|
283 |
-
return $this->template_current_hook_name;
|
284 |
-
}
|
285 |
-
|
286 |
-
/**
|
287 |
-
* Sets an Index inside of the global or local context.
|
288 |
-
* Final to prevent extending the class when the `get` already exists on the child class.
|
289 |
-
*
|
290 |
-
* @see Tribe__Utils__Array::set()
|
291 |
*
|
292 |
* @since 4.6.2
|
293 |
*
|
294 |
-
* @
|
295 |
-
*
|
296 |
-
* @param
|
297 |
-
*
|
|
|
|
|
298 |
*
|
299 |
* @return mixed The value of the specified index or the default if not found.
|
300 |
*/
|
@@ -307,19 +239,18 @@ class Tribe__Template {
|
|
307 |
|
308 |
/**
|
309 |
* Allows filtering the the getting of Context variables, also short circuiting
|
310 |
-
* Following the same
|
311 |
*
|
312 |
* @since 4.6.2
|
313 |
*
|
314 |
-
* @param
|
315 |
-
* @param
|
316 |
-
*
|
317 |
-
* @param
|
318 |
-
* @param
|
319 |
-
* @param
|
320 |
*/
|
321 |
$value = apply_filters( 'tribe_template_context_get', null, $index, $default, $is_local, $this );
|
322 |
-
|
323 |
if ( null !== $value ) {
|
324 |
return $value;
|
325 |
}
|
@@ -508,30 +439,18 @@ class Tribe__Template {
|
|
508 |
* Fetches the folders in which we will look for a given file
|
509 |
*
|
510 |
* @since 4.7.20
|
511 |
-
* @since 4.12.10 Add support for common lookup.
|
512 |
*
|
513 |
-
* @return array
|
514 |
*/
|
515 |
protected function get_template_path_list() {
|
516 |
$folders = [];
|
517 |
|
518 |
$folders['plugin'] = [
|
519 |
-
'id'
|
520 |
-
'priority'
|
521 |
-
'path'
|
522 |
];
|
523 |
|
524 |
-
if ( $this->common_lookup ) {
|
525 |
-
// After the plugin (due to priority) look into Common too.
|
526 |
-
$folders['common'] = [
|
527 |
-
'id' => 'common',
|
528 |
-
'priority' => 100,
|
529 |
-
'path' => $this->get_template_common_path(),
|
530 |
-
];
|
531 |
-
}
|
532 |
-
|
533 |
-
$folders = array_merge( $folders, $this->apply_aliases( $folders ) );
|
534 |
-
|
535 |
/**
|
536 |
* Allows filtering of the list of folders in which we will look for the
|
537 |
* template given.
|
@@ -613,7 +532,7 @@ class Tribe__Template {
|
|
613 |
}
|
614 |
|
615 |
// Build the File Path
|
616 |
-
$file =
|
617 |
|
618 |
// Append the Extension to the file path
|
619 |
$file .= '.php';
|
@@ -626,7 +545,7 @@ class Tribe__Template {
|
|
626 |
}
|
627 |
}
|
628 |
|
629 |
-
if ( $this->
|
630 |
$theme_folders = $this->get_template_theme_path_list( $namespace );
|
631 |
|
632 |
foreach ( $theme_folders as $folder ) {
|
@@ -643,7 +562,6 @@ class Tribe__Template {
|
|
643 |
// Skip non-existent files
|
644 |
if ( file_exists( $file ) ) {
|
645 |
$found_file = $file;
|
646 |
-
break;
|
647 |
}
|
648 |
}
|
649 |
}
|
@@ -666,98 +584,6 @@ class Tribe__Template {
|
|
666 |
return false;
|
667 |
}
|
668 |
|
669 |
-
/**
|
670 |
-
* Runs the entry point hooks and filters.
|
671 |
-
*
|
672 |
-
* @param string $entry_point_name The name of the entry point.
|
673 |
-
* @param boolean $echo If we should also print the entry point content.
|
674 |
-
*
|
675 |
-
* @return null|string `null` if an entry point is disabled or the entry point HTML.
|
676 |
-
*/
|
677 |
-
public function do_entry_point( $entry_point_name, $echo = true ) {
|
678 |
-
$hook_name = $this->get_template_current_hook_name();
|
679 |
-
|
680 |
-
/**
|
681 |
-
* Filter if the entry points are enabled.
|
682 |
-
*
|
683 |
-
* @since 4.12.1
|
684 |
-
*
|
685 |
-
* @param boolean $is_enabled Is entry_point enabled.
|
686 |
-
* @param string $hook_name For which template include this entry point belongs.
|
687 |
-
* @param string $entry_point_name Which entry point specifically we are triggering.
|
688 |
-
* @param self $template Current instance of the template class doing this entry point.
|
689 |
-
*/
|
690 |
-
$is_entry_point_enabled = apply_filters( 'tribe_template_entry_point_is_enabled', true, $hook_name, $entry_point_name, $this );
|
691 |
-
|
692 |
-
if ( ! $is_entry_point_enabled ) {
|
693 |
-
return null;
|
694 |
-
}
|
695 |
-
|
696 |
-
ob_start();
|
697 |
-
|
698 |
-
if ( has_action( "tribe_template_entry_point:{$hook_name}" ) ) {
|
699 |
-
/**
|
700 |
-
* Generic entry point action for the current template.
|
701 |
-
*
|
702 |
-
* @since 4.12.1
|
703 |
-
*
|
704 |
-
* @param string $hook_name For which template include this entry point belongs.
|
705 |
-
* @param string $entry_point_name Which entry point specifically we are triggering.
|
706 |
-
* @param self $template Current instance of the template class doing this entry point.
|
707 |
-
*/
|
708 |
-
do_action( "tribe_template_entry_point:{$hook_name}", $hook_name, $entry_point_name, $this );
|
709 |
-
}
|
710 |
-
|
711 |
-
if ( has_action( "tribe_template_entry_point:{$hook_name}:{$entry_point_name}" ) ) {
|
712 |
-
/**
|
713 |
-
* Specific named entry point action called.
|
714 |
-
*
|
715 |
-
* @since 4.12.1
|
716 |
-
*
|
717 |
-
* @param string $hook_name For which template include this entry point belongs.
|
718 |
-
* @param string $entry_point_name Which entry point specifically we are triggering.
|
719 |
-
* @param self $template Current instance of the template class doing this entry point.
|
720 |
-
*/
|
721 |
-
do_action( "tribe_template_entry_point:{$hook_name}:{$entry_point_name}", $hook_name, $entry_point_name, $this );
|
722 |
-
}
|
723 |
-
|
724 |
-
$html = ob_get_clean();
|
725 |
-
|
726 |
-
if ( has_filter( "tribe_template_entry_point_html:{$hook_name}" ) ) {
|
727 |
-
/**
|
728 |
-
* Generic entry point action for the current template.
|
729 |
-
*
|
730 |
-
* @since 4.12.1
|
731 |
-
*
|
732 |
-
* @param string $html HTML returned and/or echoed for this for this entry point.
|
733 |
-
* @param string $hook_name For which template include this entry point belongs.
|
734 |
-
* @param string $entry_point_name Which entry point specifically we are triggering.
|
735 |
-
* @param self $template Current instance of the template class doing this entry point.
|
736 |
-
*/
|
737 |
-
$html = apply_filters( "tribe_template_entry_point_html:{$hook_name}", $html, $hook_name, $entry_point_name, $this );
|
738 |
-
}
|
739 |
-
|
740 |
-
if ( has_filter( "tribe_template_entry_point_html:{$hook_name}:{$entry_point_name}" ) ) {
|
741 |
-
/**
|
742 |
-
* Specific named entry point action called.
|
743 |
-
*
|
744 |
-
* @since 4.12.1
|
745 |
-
*
|
746 |
-
* @param string $html HTML returned and/or echoed for this for this entry point.
|
747 |
-
* @param string $hook_name For which template include this entry point belongs.
|
748 |
-
* @param string $entry_point_name Which entry point specifically we are triggering.
|
749 |
-
* @param self $template Current instance of the template class doing this entry point.
|
750 |
-
*/
|
751 |
-
$html = apply_filters( "tribe_template_entry_point_html:{$hook_name}:{$entry_point_name}", $html, $hook_name, $entry_point_name, $this );
|
752 |
-
}
|
753 |
-
|
754 |
-
if ( $echo ) {
|
755 |
-
echo $html;
|
756 |
-
}
|
757 |
-
|
758 |
-
return $html;
|
759 |
-
}
|
760 |
-
|
761 |
/**
|
762 |
* A very simple method to include a Template, allowing filtering and additions using hooks.
|
763 |
*
|
@@ -846,13 +672,9 @@ class Tribe__Template {
|
|
846 |
$namespace = array_merge( $origin_folder_appendix, $legacy_namespace );
|
847 |
}
|
848 |
|
849 |
-
// Setup the Hook name
|
850 |
$legacy_hook_name = implode( '/', $legacy_namespace );
|
851 |
$hook_name = implode( '/', $namespace );
|
852 |
-
$prev_hook_name = $this->get_template_current_hook_name();
|
853 |
-
|
854 |
-
// Store the current hook name for the purposes of entry-points.
|
855 |
-
$this->set_template_current_hook_name( $hook_name );
|
856 |
|
857 |
/**
|
858 |
* Allow users to filter the HTML before rendering
|
@@ -881,95 +703,164 @@ class Tribe__Template {
|
|
881 |
* @param array $name Template name
|
882 |
* @param self $template Current instance of the Tribe__Template
|
883 |
*/
|
884 |
-
$pre_html = apply_filters( "tribe_template_pre_html
|
885 |
|
886 |
if ( null !== $pre_html ) {
|
887 |
return $pre_html;
|
888 |
}
|
889 |
|
|
|
|
|
890 |
// Merges the local data passed to template to the global scope
|
891 |
$this->merge_context( $context, $file, $name );
|
892 |
|
893 |
-
|
894 |
-
|
895 |
-
|
896 |
-
|
897 |
-
|
898 |
-
|
899 |
-
|
900 |
-
|
901 |
-
|
902 |
-
|
903 |
-
|
904 |
-
|
905 |
-
$html = $this->filter_template_html( $html, $file, $name, $hook_name );
|
906 |
-
|
907 |
-
// Tries to hook container entry points in the HTML.
|
908 |
-
$html = $this->template_hook_container_entry_points( $html );
|
909 |
-
|
910 |
-
if ( $echo ) {
|
911 |
-
echo $html;
|
912 |
-
}
|
913 |
|
914 |
-
|
915 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
916 |
|
917 |
-
|
918 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
919 |
|
920 |
-
|
921 |
-
* Run the hooks for the container entry points.
|
922 |
-
*
|
923 |
-
* @since 4.12.1
|
924 |
-
*
|
925 |
-
* @param string $html The html of the current template.
|
926 |
-
*
|
927 |
-
* @return string|false Either the final entry point content HTML or `false` if no entry point could be found or set to false.
|
928 |
-
*/
|
929 |
-
private function template_hook_container_entry_points( $html ) {
|
930 |
|
931 |
-
|
932 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
933 |
|
934 |
-
|
935 |
-
|
936 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
937 |
|
938 |
-
|
939 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
940 |
|
941 |
-
//
|
942 |
-
$
|
943 |
-
$last_tag = end( $html_tags );
|
944 |
|
945 |
-
|
946 |
-
|
947 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
948 |
|
949 |
-
|
950 |
-
|
951 |
-
|
952 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
953 |
|
954 |
-
|
955 |
-
|
956 |
-
|
957 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
958 |
|
959 |
-
|
960 |
-
|
961 |
-
return $html;
|
962 |
}
|
963 |
|
964 |
-
$first_tag_html = reset( $html_matches );
|
965 |
-
$last_tag_html = end( $html_matches );
|
966 |
-
|
967 |
-
$open_container_entry_point_html = $this->do_entry_point( 'after_container_open', false );
|
968 |
-
$close_container_entry_point_html = $this->do_entry_point( 'before_container_close', false );
|
969 |
-
|
970 |
-
$html = Strings::replace_first( $first_tag_html, $first_tag_html . $open_container_entry_point_html, $html );
|
971 |
-
$html = Strings::replace_last( $last_tag_html, $close_container_entry_point_html . $last_tag_html, $html );
|
972 |
-
|
973 |
return $html;
|
974 |
}
|
975 |
|
@@ -996,10 +887,7 @@ class Tribe__Template {
|
|
996 |
$namespace_map = (array) apply_filters( 'tribe_template_origin_namespace_map', [], $path, $this );
|
997 |
|
998 |
foreach ( $namespace_map as $namespace => $contains_string ) {
|
999 |
-
//
|
1000 |
-
$contains_string = rtrim( $contains_string, '\\/' ) . DIRECTORY_SEPARATOR;
|
1001 |
-
|
1002 |
-
// Skip when we don't have the namespace path.
|
1003 |
if ( false === strpos( $path, $contains_string ) ) {
|
1004 |
continue;
|
1005 |
}
|
@@ -1028,15 +916,14 @@ class Tribe__Template {
|
|
1028 |
*
|
1029 |
* @param string $file Which file will be included with safe context.
|
1030 |
*
|
1031 |
-
* @return
|
1032 |
*/
|
1033 |
public function template_safe_include( $file ) {
|
1034 |
-
ob_start();
|
1035 |
// We use this instance variable to prevent collisions.
|
1036 |
$this->template_current_file_path = $file;
|
1037 |
unset( $file );
|
1038 |
|
1039 |
-
// Only do this if really needed (by default it
|
1040 |
if ( true === $this->template_context_extract && ! empty( $this->context ) ) {
|
1041 |
// Make any provided variables available in the template variable scope.
|
1042 |
extract( $this->context ); // @phpcs:ignore
|
@@ -1046,7 +933,6 @@ class Tribe__Template {
|
|
1046 |
|
1047 |
// After the include we reset the variable.
|
1048 |
unset( $this->template_current_file_path );
|
1049 |
-
return ob_get_clean();
|
1050 |
}
|
1051 |
|
1052 |
/**
|
@@ -1099,370 +985,4 @@ class Tribe__Template {
|
|
1099 |
public function get_values() {
|
1100 |
return array_merge( $this->get_global_values(), $this->get_local_values() );
|
1101 |
}
|
1102 |
-
|
1103 |
-
/**
|
1104 |
-
* Get the Entry Point Matches.
|
1105 |
-
*
|
1106 |
-
* @since 4.12.1
|
1107 |
-
*
|
1108 |
-
* @param string $html The html of the current template.
|
1109 |
-
*
|
1110 |
-
* @return array An array of matches from the regular expression.
|
1111 |
-
*/
|
1112 |
-
private function get_entry_point_matches( $html ) {
|
1113 |
-
$regexp = '/<(?<is_end>\/)*(?<tag>[A-Z0-9]*)(?:\b)*[^>]*>/mi';
|
1114 |
-
|
1115 |
-
preg_match_all( $regexp, $html, $matches );
|
1116 |
-
|
1117 |
-
return $matches;
|
1118 |
-
}
|
1119 |
-
|
1120 |
-
/**
|
1121 |
-
* Fetches the path for locating files in the Common folder part of the plugin that is currently providing it.
|
1122 |
-
*
|
1123 |
-
* Note: the Common path will be dependent on the version that is loaded from the plugin that is bundling it.
|
1124 |
-
* E.g. if both TEC and ET are active (both will bundle Common) and the ET version of Common has been loaded as
|
1125 |
-
* most recent and the ET version of Common does not have a template file, then the template file will not be found.
|
1126 |
-
* This will allow versioning the existence and nature of the template files part of common.
|
1127 |
-
*
|
1128 |
-
* @since 4.12.10
|
1129 |
-
*
|
1130 |
-
* @return string The absolute path, with no guarantee of its existence, to the Common version of the template file.
|
1131 |
-
*/
|
1132 |
-
protected function get_template_common_path() {
|
1133 |
-
// As base path use the current location of Common, remove the trailing slash.
|
1134 |
-
$common_abs_path = untrailingslashit( Tribe__Main::instance()->plugin_path );
|
1135 |
-
$path = array_merge( (array) $common_abs_path, $this->folder );
|
1136 |
-
|
1137 |
-
// Implode to avoid problems on Windows hosts.
|
1138 |
-
$path = implode( DIRECTORY_SEPARATOR, $path );
|
1139 |
-
|
1140 |
-
/**
|
1141 |
-
* Allows filtering the path to a template provided by Common.
|
1142 |
-
*
|
1143 |
-
* @since 4.12.10
|
1144 |
-
*
|
1145 |
-
* @param string $path Complete path to include the base folder of common part of the plugin.
|
1146 |
-
* @param self $template Current instance of the Tribe__Template.
|
1147 |
-
*/
|
1148 |
-
return apply_filters( 'tribe_template_common_path', $path, $this );
|
1149 |
-
}
|
1150 |
-
|
1151 |
-
/**
|
1152 |
-
* Sets the aliases the template should use.
|
1153 |
-
*
|
1154 |
-
* @since 4.12.10
|
1155 |
-
*
|
1156 |
-
* @param array<string,string> $aliases A map of aliases that should be used to add lookup locations, in the format
|
1157 |
-
* `[ original => alias ]`;
|
1158 |
-
*
|
1159 |
-
* @return static This instance, for method chaining.
|
1160 |
-
*/
|
1161 |
-
public function set_aliases( array $aliases = [] ) {
|
1162 |
-
$this->aliases = $aliases;
|
1163 |
-
|
1164 |
-
return $this;
|
1165 |
-
}
|
1166 |
-
|
1167 |
-
/**
|
1168 |
-
* Applies the template path aliases, if any, to a list of folders.
|
1169 |
-
*
|
1170 |
-
* @since 4.12.10
|
1171 |
-
*
|
1172 |
-
* @param array<string,array> $folders The list of folder to apply the aliases to, if any.
|
1173 |
-
*
|
1174 |
-
* @return array<string,array> The list of new folder entries to add to the folders, in the same input format of the
|
1175 |
-
* folders.
|
1176 |
-
*/
|
1177 |
-
protected function apply_aliases( array $folders ) {
|
1178 |
-
$new_folders = [];
|
1179 |
-
if ( ! empty( $this->aliases ) ) {
|
1180 |
-
foreach ( $folders as $folder_name => $folder ) {
|
1181 |
-
$original_path = $folder['path'];
|
1182 |
-
foreach ( $this->aliases as $original => $alias ) {
|
1183 |
-
// Since an alias could be a path, we take care to handle it with the current directory separator.
|
1184 |
-
list( $normalized_original, $normalized_alias ) = str_replace(['\\','/'] , DIRECTORY_SEPARATOR, [ $original, $alias ] );
|
1185 |
-
if ( false === strpos( $original_path, $normalized_original ) ) {
|
1186 |
-
continue;
|
1187 |
-
}
|
1188 |
-
|
1189 |
-
$alias_path = str_replace( $normalized_original, $normalized_alias, $original_path );
|
1190 |
-
|
1191 |
-
$new = $folder;
|
1192 |
-
$new['path'] = $alias_path;
|
1193 |
-
$new['priority'] = (int) $new['priority'] + 1;
|
1194 |
-
$new_folders[ $folder_name . '_' . $alias ] = $new;
|
1195 |
-
}
|
1196 |
-
}
|
1197 |
-
}
|
1198 |
-
return $new_folders;
|
1199 |
-
}
|
1200 |
-
|
1201 |
-
|
1202 |
-
/**
|
1203 |
-
* Filters the full HTML for the template.
|
1204 |
-
*
|
1205 |
-
* @since 4.13.0
|
1206 |
-
*
|
1207 |
-
* @param string $html The final HTML.
|
1208 |
-
* @param string $file Complete path to include the PHP File.
|
1209 |
-
* @param array $name Template name.
|
1210 |
-
* @param string $hook_name The hook used to create the filter by name.
|
1211 |
-
*
|
1212 |
-
* @return string HTML after filtering.
|
1213 |
-
*/
|
1214 |
-
protected function filter_template_html( $html, $file, $name, $hook_name ) {
|
1215 |
-
/**
|
1216 |
-
* Allow users to filter the final HTML.
|
1217 |
-
*
|
1218 |
-
* @since 4.6.2
|
1219 |
-
* @since 4.7.20 The $name param no longer contains the extension
|
1220 |
-
*
|
1221 |
-
* @param string $html The final HTML.
|
1222 |
-
* @param string $file Complete path to include the PHP File.
|
1223 |
-
* @param array $name Template name.
|
1224 |
-
* @param self $template Current instance of the Tribe__Template.
|
1225 |
-
*/
|
1226 |
-
$html = apply_filters( 'tribe_template_html', $html, $file, $name, $this );
|
1227 |
-
|
1228 |
-
/**
|
1229 |
-
* Allow users to filter the final HTML by the name.
|
1230 |
-
*
|
1231 |
-
* E.g.:
|
1232 |
-
* `tribe_template_html:events/blocks/parts/details`
|
1233 |
-
* `tribe_template_html:events/embed`
|
1234 |
-
* `tribe_template_html:tickets/login-to-purchase`
|
1235 |
-
*
|
1236 |
-
* @since 4.7.20
|
1237 |
-
*
|
1238 |
-
* @param string $html The final HTML.
|
1239 |
-
* @param string $file Complete path to include the PHP File.
|
1240 |
-
* @param array $name Template name.
|
1241 |
-
* @param self $template Current instance of the Tribe__Template.
|
1242 |
-
*/
|
1243 |
-
$html = apply_filters( "tribe_template_html:{$hook_name}", $html, $file, $name, $this );
|
1244 |
-
|
1245 |
-
return $html;
|
1246 |
-
}
|
1247 |
-
|
1248 |
-
/**
|
1249 |
-
* Filters the HTML for the Before include actions.
|
1250 |
-
*
|
1251 |
-
* @since 4.13.0
|
1252 |
-
*
|
1253 |
-
* @param string $html The final HTML.
|
1254 |
-
* @param string $file Complete path to include the PHP File.
|
1255 |
-
* @param array $name Template name.
|
1256 |
-
* @param string $hook_name The hook used to create the filter by name.
|
1257 |
-
*
|
1258 |
-
* @return string HTML after filtering.
|
1259 |
-
*/
|
1260 |
-
protected function filter_template_before_include_html( $html, $file, $name, $hook_name ) {
|
1261 |
-
/**
|
1262 |
-
* Allow users to filter the Before include actions.
|
1263 |
-
*
|
1264 |
-
* @since 4.13.0
|
1265 |
-
*
|
1266 |
-
* @param string $html The final HTML.
|
1267 |
-
* @param string $file Complete path to include the PHP File.
|
1268 |
-
* @param array $name Template name.
|
1269 |
-
* @param self $template Current instance of the Tribe__Template.
|
1270 |
-
*/
|
1271 |
-
$html = apply_filters( 'tribe_template_before_include_html', $html, $file, $name, $this );
|
1272 |
-
|
1273 |
-
/**
|
1274 |
-
* Allow users to filter the Before include actions by name.
|
1275 |
-
*
|
1276 |
-
* E.g.:
|
1277 |
-
* `tribe_template_before_include_html:events/blocks/parts/details`
|
1278 |
-
* `tribe_template_before_include_html:events/embed`
|
1279 |
-
* `tribe_template_before_include_html:tickets/login-to-purchase`
|
1280 |
-
*
|
1281 |
-
* @since 4.13.0
|
1282 |
-
*
|
1283 |
-
* @param string $html The final HTML.
|
1284 |
-
* @param string $file Complete path to include the PHP File.
|
1285 |
-
* @param array $name Template name.
|
1286 |
-
* @param self $template Current instance of the Tribe__Template.
|
1287 |
-
*/
|
1288 |
-
$html = apply_filters( "tribe_template_before_include_html:{$hook_name}", $html, $file, $name, $this );
|
1289 |
-
|
1290 |
-
return $html;
|
1291 |
-
}
|
1292 |
-
|
1293 |
-
/**
|
1294 |
-
* Filters the HTML for the PHP safe include.
|
1295 |
-
*
|
1296 |
-
* @since 4.13.0
|
1297 |
-
*
|
1298 |
-
* @param string $html The final HTML.
|
1299 |
-
* @param string $file Complete path to include the PHP File.
|
1300 |
-
* @param array $name Template name.
|
1301 |
-
* @param string $hook_name The hook used to create the filter by name.
|
1302 |
-
*
|
1303 |
-
* @return string HTML after filtering.
|
1304 |
-
*/
|
1305 |
-
protected function filter_template_include_html( $html, $file, $name, $hook_name ) {
|
1306 |
-
/**
|
1307 |
-
* Allow users to filter the PHP template include actions.
|
1308 |
-
*
|
1309 |
-
* @since 4.13.0
|
1310 |
-
*
|
1311 |
-
* @param string $html The final HTML.
|
1312 |
-
* @param string $file Complete path to include the PHP File.
|
1313 |
-
* @param array $name Template name.
|
1314 |
-
* @param self $template Current instance of the Tribe__Template.
|
1315 |
-
*/
|
1316 |
-
$html = apply_filters( 'tribe_template_include_html', $html, $file, $name, $this );
|
1317 |
-
|
1318 |
-
/**
|
1319 |
-
* Allow users to filter the PHP template include actions by name.
|
1320 |
-
*
|
1321 |
-
* E.g.:
|
1322 |
-
* `tribe_template_include_html:events/blocks/parts/details`
|
1323 |
-
* `tribe_template_include_html:events/embed`
|
1324 |
-
* `tribe_template_include_html:tickets/login-to-purchase`
|
1325 |
-
*
|
1326 |
-
* @since 4.13.0
|
1327 |
-
*
|
1328 |
-
* @param string $html The final HTML.
|
1329 |
-
* @param string $file Complete path to include the PHP File.
|
1330 |
-
* @param array $name Template name.
|
1331 |
-
* @param self $template Current instance of the Tribe__Template.
|
1332 |
-
*/
|
1333 |
-
$html = apply_filters( "tribe_template_include_html:{$hook_name}", $html, $file, $name, $this );
|
1334 |
-
|
1335 |
-
return $html;
|
1336 |
-
}
|
1337 |
-
|
1338 |
-
/**
|
1339 |
-
* Filters the HTML for the after include actions.
|
1340 |
-
*
|
1341 |
-
* @since 4.13.0
|
1342 |
-
*
|
1343 |
-
* @param string $html The final HTML.
|
1344 |
-
* @param string $file Complete path to include the PHP File.
|
1345 |
-
* @param array $name Template name.
|
1346 |
-
* @param string $hook_name The hook used to create the filter by name.
|
1347 |
-
*
|
1348 |
-
* @return string HTML after filtering.
|
1349 |
-
*/
|
1350 |
-
protected function filter_template_after_include_html( $html, $file, $name, $hook_name ) {
|
1351 |
-
/**
|
1352 |
-
* Allow users to filter the after include actions.
|
1353 |
-
*
|
1354 |
-
* @since 4.13.0
|
1355 |
-
*
|
1356 |
-
* @param string $html The final HTML.
|
1357 |
-
* @param string $file Complete path to include the PHP File.
|
1358 |
-
* @param array $name Template name.
|
1359 |
-
* @param self $template Current instance of the Tribe__Template.
|
1360 |
-
*/
|
1361 |
-
$html = apply_filters( 'tribe_template_after_include_html', $html, $file, $name, $this );
|
1362 |
-
|
1363 |
-
/**
|
1364 |
-
* Allow users to filter the after include actions by name.
|
1365 |
-
*
|
1366 |
-
* E.g.:
|
1367 |
-
* `tribe_template_after_include_html:events/blocks/parts/details`
|
1368 |
-
* `tribe_template_after_include_html:events/embed`
|
1369 |
-
* `tribe_template_after_include_html:tickets/login-to-purchase`
|
1370 |
-
*
|
1371 |
-
* @since 4.13.0
|
1372 |
-
*
|
1373 |
-
* @param string $html The final HTML.
|
1374 |
-
* @param string $file Complete path to include the PHP File.
|
1375 |
-
* @param array $name Template name.
|
1376 |
-
* @param self $template Current instance of the Tribe__Template.
|
1377 |
-
*/
|
1378 |
-
$html = apply_filters( "tribe_template_after_include_html:{$hook_name}", $html, $file, $name, $this );
|
1379 |
-
|
1380 |
-
return $html;
|
1381 |
-
}
|
1382 |
-
|
1383 |
-
/**
|
1384 |
-
* Fires of actions before including the template.
|
1385 |
-
*
|
1386 |
-
* @since 4.13.0
|
1387 |
-
*
|
1388 |
-
* @param string $file Complete path to include the PHP File.
|
1389 |
-
* @param array $name Template name.
|
1390 |
-
* @param string $hook_name The hook used to create the filter by name.
|
1391 |
-
*
|
1392 |
-
* @return string HTML printed by the before actions.
|
1393 |
-
*/
|
1394 |
-
protected function actions_before_template( $file, $name, $hook_name ) {
|
1395 |
-
ob_start();
|
1396 |
-
|
1397 |
-
/**
|
1398 |
-
* Fires an Action before including the template file
|
1399 |
-
*
|
1400 |
-
* @since 4.13.0
|
1401 |
-
*
|
1402 |
-
* @param string $file Complete path to include the PHP File
|
1403 |
-
* @param array $name Template name
|
1404 |
-
* @param self $template Current instance of the Tribe__Template
|
1405 |
-
*/
|
1406 |
-
do_action( 'tribe_template_before_include', $file, $name, $this );
|
1407 |
-
|
1408 |
-
/**
|
1409 |
-
* Fires an Action for a given template name before including the template file,
|
1410 |
-
*
|
1411 |
-
* E.g.:
|
1412 |
-
* `tribe_template_before_include:events/blocks/parts/details`
|
1413 |
-
* `tribe_template_before_include:events/embed`
|
1414 |
-
* `tribe_template_before_include:tickets/login-to-purchase`
|
1415 |
-
*
|
1416 |
-
* @since 4.13.0
|
1417 |
-
*
|
1418 |
-
* @param string $file Complete path to include the PHP File.
|
1419 |
-
* @param array $name Template name.
|
1420 |
-
* @param self $template Current instance of the Tribe__Template.
|
1421 |
-
*/
|
1422 |
-
do_action( "tribe_template_before_include:{$hook_name}", $file, $name, $this );
|
1423 |
-
|
1424 |
-
return ob_get_clean();
|
1425 |
-
}
|
1426 |
-
|
1427 |
-
/**
|
1428 |
-
* Fires of actions after including the template.
|
1429 |
-
*
|
1430 |
-
* @since 4.13.0
|
1431 |
-
*
|
1432 |
-
* @param string $file Complete path to include the PHP File.
|
1433 |
-
* @param array $name Template name.
|
1434 |
-
* @param string $hook_name The hook used to create the filter by name.
|
1435 |
-
*
|
1436 |
-
* @return string HTML printed by the after actions.
|
1437 |
-
*/
|
1438 |
-
protected function actions_after_template( $file, $name, $hook_name ) {
|
1439 |
-
ob_start();
|
1440 |
-
/**
|
1441 |
-
* Fires an Action after including the template file.
|
1442 |
-
*
|
1443 |
-
* @since 4.13.0
|
1444 |
-
*
|
1445 |
-
* @param string $file Complete path to include the PHP File.
|
1446 |
-
* @param array $name Template name.
|
1447 |
-
* @param self $template Current instance of the Tribe__Template.
|
1448 |
-
*/
|
1449 |
-
do_action( 'tribe_template_after_include', $file, $name, $this );
|
1450 |
-
|
1451 |
-
/**
|
1452 |
-
* Fires an Action for a given template name after including the template file.
|
1453 |
-
*
|
1454 |
-
* E.g.:
|
1455 |
-
* `tribe_template_after_include:events/blocks/parts/details`
|
1456 |
-
* `tribe_template_after_include:events/embed`
|
1457 |
-
* `tribe_template_after_include:tickets/login-to-purchase`
|
1458 |
-
*
|
1459 |
-
* @since 4.13.0
|
1460 |
-
*
|
1461 |
-
* @param string $file Complete path to include the PHP File.
|
1462 |
-
* @param array $name Template name.
|
1463 |
-
* @param self $template Current instance of the Tribe__Template.
|
1464 |
-
*/
|
1465 |
-
do_action( "tribe_template_after_include:{$hook_name}", $file, $name, $this );
|
1466 |
-
return ob_get_clean();
|
1467 |
-
}
|
1468 |
}
|
1 |
<?php
|
2 |
|
|
|
|
|
|
|
3 |
class Tribe__Template {
|
4 |
/**
|
5 |
* The folders into which we will look for the template.
|
8 |
*
|
9 |
* @var array
|
10 |
*/
|
11 |
+
protected $folder = array();
|
12 |
|
13 |
/**
|
14 |
* The origin class for the plugin where the template lives
|
35 |
*
|
36 |
* @var array
|
37 |
*/
|
38 |
+
protected $global = array();
|
39 |
|
40 |
/**
|
41 |
* Used for finding templates for public templates on themes inside of a folder.
|
55 |
*/
|
56 |
protected $template_context_extract = false;
|
57 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
58 |
/**
|
59 |
* Base template for where to look for template
|
60 |
*
|
82 |
*/
|
83 |
protected $template_current_file_path;
|
84 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
85 |
/**
|
86 |
* Configures the class origin plugin path
|
87 |
*
|
183 |
return $this;
|
184 |
}
|
185 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
186 |
/**
|
187 |
* Configures the class global context
|
188 |
*
|
192 |
*
|
193 |
* @return self
|
194 |
*/
|
195 |
+
public function add_template_globals( $context = array() ) {
|
196 |
// Cast as Array merge and save
|
197 |
$this->global = wp_parse_args( (array) $context, $this->global );
|
198 |
|
216 |
}
|
217 |
|
218 |
/**
|
219 |
+
* Sets a Index inside of the global or local context
|
220 |
+
* Final to prevent extending the class when the `get` already exists on the child class
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
221 |
*
|
222 |
* @since 4.6.2
|
223 |
*
|
224 |
+
* @see Tribe__Utils__Array::set
|
225 |
+
*
|
226 |
+
* @param array $index Specify each nested index in order.
|
227 |
+
* Example: array( 'lvl1', 'lvl2' );
|
228 |
+
* @param mixed $default Default value if the search finds nothing.
|
229 |
+
* @param boolean $is_local Use the Local or Global context
|
230 |
*
|
231 |
* @return mixed The value of the specified index or the default if not found.
|
232 |
*/
|
239 |
|
240 |
/**
|
241 |
* Allows filtering the the getting of Context variables, also short circuiting
|
242 |
+
* Following the same strucuture as WP Core
|
243 |
*
|
244 |
* @since 4.6.2
|
245 |
*
|
246 |
+
* @param mixed $value The value that will be filtered
|
247 |
+
* @param array $index Specify each nested index in order.
|
248 |
+
* Example: array( 'lvl1', 'lvl2' );
|
249 |
+
* @param mixed $default Default value if the search finds nothing.
|
250 |
+
* @param boolean $is_local Use the Local or Global context
|
251 |
+
* @param self $template Current instance of the Tribe__Template
|
252 |
*/
|
253 |
$value = apply_filters( 'tribe_template_context_get', null, $index, $default, $is_local, $this );
|
|
|
254 |
if ( null !== $value ) {
|
255 |
return $value;
|
256 |
}
|
439 |
* Fetches the folders in which we will look for a given file
|
440 |
*
|
441 |
* @since 4.7.20
|
|
|
442 |
*
|
443 |
+
* @return array
|
444 |
*/
|
445 |
protected function get_template_path_list() {
|
446 |
$folders = [];
|
447 |
|
448 |
$folders['plugin'] = [
|
449 |
+
'id' => 'plugin',
|
450 |
+
'priority' => 20,
|
451 |
+
'path' => $this->get_template_plugin_path(),
|
452 |
];
|
453 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
454 |
/**
|
455 |
* Allows filtering of the list of folders in which we will look for the
|
456 |
* template given.
|
532 |
}
|
533 |
|
534 |
// Build the File Path
|
535 |
+
$file = implode( DIRECTORY_SEPARATOR, array_merge( (array) $folder['path'], $name ) );
|
536 |
|
537 |
// Append the Extension to the file path
|
538 |
$file .= '.php';
|
545 |
}
|
546 |
}
|
547 |
|
548 |
+
if ( $this->template_folder_lookup ) {
|
549 |
$theme_folders = $this->get_template_theme_path_list( $namespace );
|
550 |
|
551 |
foreach ( $theme_folders as $folder ) {
|
562 |
// Skip non-existent files
|
563 |
if ( file_exists( $file ) ) {
|
564 |
$found_file = $file;
|
|
|
565 |
}
|
566 |
}
|
567 |
}
|
584 |
return false;
|
585 |
}
|
586 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
587 |
/**
|
588 |
* A very simple method to include a Template, allowing filtering and additions using hooks.
|
589 |
*
|
672 |
$namespace = array_merge( $origin_folder_appendix, $legacy_namespace );
|
673 |
}
|
674 |
|
675 |
+
// Setup the Hook name
|
676 |
$legacy_hook_name = implode( '/', $legacy_namespace );
|
677 |
$hook_name = implode( '/', $namespace );
|
|
|
|
|
|
|
|
|
678 |
|
679 |
/**
|
680 |
* Allow users to filter the HTML before rendering
|
703 |
* @param array $name Template name
|
704 |
* @param self $template Current instance of the Tribe__Template
|
705 |
*/
|
706 |
+
$pre_html = apply_filters( "tribe_template_pre_html:$hook_name", $pre_html, $file, $name, $this );
|
707 |
|
708 |
if ( null !== $pre_html ) {
|
709 |
return $pre_html;
|
710 |
}
|
711 |
|
712 |
+
ob_start();
|
713 |
+
|
714 |
// Merges the local data passed to template to the global scope
|
715 |
$this->merge_context( $context, $file, $name );
|
716 |
|
717 |
+
/**
|
718 |
+
* Fires an Action before including the template file
|
719 |
+
*
|
720 |
+
* @since 4.6.2
|
721 |
+
* @since 4.7.20 The $name param no longer contains the extension
|
722 |
+
*
|
723 |
+
* @param string $file Complete path to include the PHP File
|
724 |
+
* @param array $name Template name
|
725 |
+
* @param self $template Current instance of the Tribe__Template
|
726 |
+
*/
|
727 |
+
do_action( 'tribe_template_before_include', $file, $name, $this );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
728 |
|
729 |
+
/**
|
730 |
+
* Fires an Action for a given template name before including the template file
|
731 |
+
*
|
732 |
+
* E.g.:
|
733 |
+
* `tribe_template_before_include:events/blocks/parts/details`
|
734 |
+
* `tribe_template_before_include:events/embed`
|
735 |
+
* `tribe_template_before_include:tickets/login-to-purchase`
|
736 |
+
*
|
737 |
+
* @deprecated 4.11.0
|
738 |
+
* @since 4.7.20
|
739 |
+
*
|
740 |
+
* @param string $file Complete path to include the PHP File
|
741 |
+
* @param array $name Template name
|
742 |
+
* @param self $template Current instance of the Tribe__Template
|
743 |
+
*/
|
744 |
+
do_action( "tribe_template_before_include:$legacy_hook_name", $file, $name, $this );
|
745 |
|
746 |
+
/**
|
747 |
+
* Fires an Action for a given template name before including the template file
|
748 |
+
*
|
749 |
+
* E.g.:
|
750 |
+
* `tribe_template_before_include:events/blocks/parts/details`
|
751 |
+
* `tribe_template_before_include:events/embed`
|
752 |
+
* `tribe_template_before_include:tickets/login-to-purchase`
|
753 |
+
*
|
754 |
+
* @since 4.7.20
|
755 |
+
*
|
756 |
+
* @param string $file Complete path to include the PHP File
|
757 |
+
* @param array $name Template name
|
758 |
+
* @param self $template Current instance of the Tribe__Template
|
759 |
+
*/
|
760 |
+
do_action( "tribe_template_before_include:$hook_name", $file, $name, $this );
|
761 |
|
762 |
+
$this->template_safe_include( $file );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
763 |
|
764 |
+
/**
|
765 |
+
* Fires an Action after including the template file
|
766 |
+
*
|
767 |
+
* @since 4.6.2
|
768 |
+
* @since 4.7.20 The $name param no longer contains the extension
|
769 |
+
*
|
770 |
+
* @param string $file Complete path to include the PHP File
|
771 |
+
* @param array $name Template name
|
772 |
+
* @param self $template Current instance of the Tribe__Template
|
773 |
+
*/
|
774 |
+
do_action( 'tribe_template_after_include', $file, $name, $this );
|
775 |
|
776 |
+
/**
|
777 |
+
* Fires an Action for a given template name after including the template file
|
778 |
+
*
|
779 |
+
* E.g.:
|
780 |
+
* `tribe_template_after_include:events/blocks/parts/details`
|
781 |
+
* `tribe_template_after_include:events/embed`
|
782 |
+
* `tribe_template_after_include:tickets/login-to-purchase`
|
783 |
+
*
|
784 |
+
* @deprecated 4.11.0
|
785 |
+
* @since 4.7.20
|
786 |
+
*
|
787 |
+
* @param string $file Complete path to include the PHP File
|
788 |
+
* @param array $name Template name
|
789 |
+
* @param self $template Current instance of the Tribe__Template
|
790 |
+
*/
|
791 |
+
do_action( "tribe_template_after_include:$legacy_hook_name", $file, $name, $this );
|
792 |
|
793 |
+
/**
|
794 |
+
* Fires an Action for a given template name after including the template file
|
795 |
+
*
|
796 |
+
* E.g.:
|
797 |
+
* `tribe_template_after_include:events/blocks/parts/details`
|
798 |
+
* `tribe_template_after_include:events/embed`
|
799 |
+
* `tribe_template_after_include:tickets/login-to-purchase`
|
800 |
+
*
|
801 |
+
* @since 4.7.20
|
802 |
+
*
|
803 |
+
* @param string $file Complete path to include the PHP File
|
804 |
+
* @param array $name Template name
|
805 |
+
* @param self $template Current instance of the Tribe__Template
|
806 |
+
*/
|
807 |
+
do_action( "tribe_template_after_include:$hook_name", $file, $name, $this );
|
808 |
|
809 |
+
// Only fetch the contents after the action
|
810 |
+
$html = ob_get_clean();
|
|
|
811 |
|
812 |
+
/**
|
813 |
+
* Allow users to filter the final HTML
|
814 |
+
*
|
815 |
+
* @since 4.6.2
|
816 |
+
* @since 4.7.20 The $name param no longer contains the extension
|
817 |
+
*
|
818 |
+
* @param string $html The final HTML
|
819 |
+
* @param string $file Complete path to include the PHP File
|
820 |
+
* @param array $name Template name
|
821 |
+
* @param self $template Current instance of the Tribe__Template
|
822 |
+
*/
|
823 |
+
$html = apply_filters( 'tribe_template_html', $html, $file, $name, $this );
|
824 |
|
825 |
+
/**
|
826 |
+
* Allow users to filter the final HTML by the name
|
827 |
+
*
|
828 |
+
* E.g.:
|
829 |
+
* `tribe_template_html:events/blocks/parts/details`
|
830 |
+
* `tribe_template_html:events/embed`
|
831 |
+
* `tribe_template_html:tickets/login-to-purchase`
|
832 |
+
*
|
833 |
+
* @deprecated 4.11.0
|
834 |
+
* @since 4.7.20
|
835 |
+
*
|
836 |
+
* @param string $html The final HTML
|
837 |
+
* @param string $file Complete path to include the PHP File
|
838 |
+
* @param array $name Template name
|
839 |
+
* @param self $template Current instance of the Tribe__Template
|
840 |
+
*/
|
841 |
+
$html = apply_filters( "tribe_template_html:$legacy_hook_name", $html, $file, $name, $this );
|
842 |
|
843 |
+
/**
|
844 |
+
* Allow users to filter the final HTML by the name
|
845 |
+
*
|
846 |
+
* E.g.:
|
847 |
+
* `tribe_template_html:events/blocks/parts/details`
|
848 |
+
* `tribe_template_html:events/embed`
|
849 |
+
* `tribe_template_html:tickets/login-to-purchase`
|
850 |
+
*
|
851 |
+
* @since 4.7.20
|
852 |
+
*
|
853 |
+
* @param string $html The final HTML
|
854 |
+
* @param string $file Complete path to include the PHP File
|
855 |
+
* @param array $name Template name
|
856 |
+
* @param self $template Current instance of the Tribe__Template
|
857 |
+
*/
|
858 |
+
$html = apply_filters( "tribe_template_html:$hook_name", $html, $file, $name, $this );
|
859 |
|
860 |
+
if ( $echo ) {
|
861 |
+
echo $html;
|
|
|
862 |
}
|
863 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
864 |
return $html;
|
865 |
}
|
866 |
|
887 |
$namespace_map = (array) apply_filters( 'tribe_template_origin_namespace_map', [], $path, $this );
|
888 |
|
889 |
foreach ( $namespace_map as $namespace => $contains_string ) {
|
890 |
+
// Skip when we dont have the namespace path.
|
|
|
|
|
|
|
891 |
if ( false === strpos( $path, $contains_string ) ) {
|
892 |
continue;
|
893 |
}
|
916 |
*
|
917 |
* @param string $file Which file will be included with safe context.
|
918 |
*
|
919 |
+
* @return void
|
920 |
*/
|
921 |
public function template_safe_include( $file ) {
|
|
|
922 |
// We use this instance variable to prevent collisions.
|
923 |
$this->template_current_file_path = $file;
|
924 |
unset( $file );
|
925 |
|
926 |
+
// Only do this if really needed (by default it wont).
|
927 |
if ( true === $this->template_context_extract && ! empty( $this->context ) ) {
|
928 |
// Make any provided variables available in the template variable scope.
|
929 |
extract( $this->context ); // @phpcs:ignore
|
933 |
|
934 |
// After the include we reset the variable.
|
935 |
unset( $this->template_current_file_path );
|
|
|
936 |
}
|
937 |
|
938 |
/**
|
985 |
public function get_values() {
|
986 |
return array_merge( $this->get_global_values(), $this->get_local_values() );
|
987 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
988 |
}
|
common/src/Tribe/Template_Factory.php
CHANGED
@@ -23,7 +23,7 @@ class Tribe__Template_Factory {
|
|
23 |
*
|
24 |
* @var array
|
25 |
**/
|
26 |
-
protected $asset_packages =
|
27 |
|
28 |
/**
|
29 |
* Static variable that holds array of vendor script handles, for adding to later deps.
|
@@ -33,7 +33,7 @@ class Tribe__Template_Factory {
|
|
33 |
* @static
|
34 |
* @var array
|
35 |
*/
|
36 |
-
protected static $vendor_scripts =
|
37 |
|
38 |
/**
|
39 |
* Constant that holds the ajax hook suffix for the view
|
@@ -154,7 +154,7 @@ class Tribe__Template_Factory {
|
|
154 |
* @param string $name
|
155 |
* @param array $deps Dependents
|
156 |
*/
|
157 |
-
public static function asset_package( $name, $deps =
|
158 |
|
159 |
$common = Tribe__Main::instance();
|
160 |
$prefix = 'tribe-events';
|
23 |
*
|
24 |
* @var array
|
25 |
**/
|
26 |
+
protected $asset_packages = array();
|
27 |
|
28 |
/**
|
29 |
* Static variable that holds array of vendor script handles, for adding to later deps.
|
33 |
* @static
|
34 |
* @var array
|
35 |
*/
|
36 |
+
protected static $vendor_scripts = array();
|
37 |
|
38 |
/**
|
39 |
* Constant that holds the ajax hook suffix for the view
|
154 |
* @param string $name
|
155 |
* @param array $deps Dependents
|
156 |
*/
|
157 |
+
public static function asset_package( $name, $deps = array() ) {
|
158 |
|
159 |
$common = Tribe__Main::instance();
|
160 |
$prefix = 'tribe-events';
|
common/src/Tribe/Template_Part_Cache.php
CHANGED
@@ -56,13 +56,13 @@ class Tribe__Template_Part_Cache {
|
|
56 |
public function add_hooks() {
|
57 |
|
58 |
// set the cached html in transients after the template part is included
|
59 |
-
add_filter( 'tribe_get_template_part_content',
|
60 |
|
61 |
// get the cached html right before the setup_view runs so it's available for bypassing any view logic
|
62 |
-
add_action( 'tribe_events_before_view',
|
63 |
|
64 |
// when the specified template part is included, show the cached html instead
|
65 |
-
add_filter( 'tribe_get_template_part_path_' . $this->template,
|
66 |
}
|
67 |
|
68 |
/**
|
56 |
public function add_hooks() {
|
57 |
|
58 |
// set the cached html in transients after the template part is included
|
59 |
+
add_filter( 'tribe_get_template_part_content', array( $this, 'set' ), 10, 2 );
|
60 |
|
61 |
// get the cached html right before the setup_view runs so it's available for bypassing any view logic
|
62 |
+
add_action( 'tribe_events_before_view', array( $this, 'get' ), 9, 1 );
|
63 |
|
64 |
// when the specified template part is included, show the cached html instead
|
65 |
+
add_filter( 'tribe_get_template_part_path_' . $this->template, array( $this, 'display' ) );
|
66 |
}
|
67 |
|
68 |
/**
|
common/src/Tribe/Templates.php
CHANGED
@@ -37,7 +37,7 @@ class Tribe__Templates {
|
|
37 |
*/
|
38 |
public static function locate_stylesheet( $stylesheets, $fallback = false ) {
|
39 |
if ( ! is_array( $stylesheets ) ) {
|
40 |
-
$stylesheets =
|
41 |
}
|
42 |
if ( empty( $stylesheets ) ) {
|
43 |
return $fallback;
|
37 |
*/
|
38 |
public static function locate_stylesheet( $stylesheets, $fallback = false ) {
|
39 |
if ( ! is_array( $stylesheets ) ) {
|
40 |
+
$stylesheets = array( $stylesheets );
|
41 |
}
|
42 |
if ( empty( $stylesheets ) ) {
|
43 |
return $fallback;
|
common/src/Tribe/Terms.php
CHANGED
@@ -16,7 +16,7 @@ class Tribe__Terms {
|
|
16 |
public static function translate_terms_to_ids( $terms, $taxonomy, $create_missing = true ) {
|
17 |
$terms = is_string( $terms ) ? preg_split( '/\\s*,\\s*/', $terms ) : (array) $terms;
|
18 |
|
19 |
-
$term_ids =
|
20 |
foreach ( $terms as $term ) {
|
21 |
if ( ! $term instanceof WP_Term && ! strlen( trim( $term ) ) ) {
|
22 |
continue;
|
16 |
public static function translate_terms_to_ids( $terms, $taxonomy, $create_missing = true ) {
|
17 |
$terms = is_string( $terms ) ? preg_split( '/\\s*,\\s*/', $terms ) : (array) $terms;
|
18 |
|
19 |
+
$term_ids = array();
|
20 |
foreach ( $terms as $term ) {
|
21 |
if ( ! $term instanceof WP_Term && ! strlen( trim( $term ) ) ) {
|
22 |
continue;
|
common/src/Tribe/Timezones.php
CHANGED
@@ -15,7 +15,7 @@ class Tribe__Timezones {
|
|
15 |
*
|
16 |
* @var array
|
17 |
*/
|
18 |
-
protected static $timezones =
|
19 |
|
20 |
public static function init() {
|
21 |
self::invalidate_caches();
|
@@ -27,8 +27,8 @@ class Tribe__Timezones {
|
|
27 |
* Currently we are concerned only with the site timezone abbreviation.
|
28 |
*/
|
29 |
protected static function invalidate_caches() {
|
30 |
-
add_filter( 'pre_update_option_gmt_offset',
|
31 |
-
add_filter( 'pre_update_option_timezone_string',
|
32 |
}
|
33 |
|
34 |
/**
|
@@ -408,7 +408,7 @@ class Tribe__Timezones {
|
|
408 |
*/
|
409 |
public static function timezone_from_utc_offset( $utc_offset_string ) {
|
410 |
// Test for strings looking like "UTC-2" or "UTC+5.25" etc
|
411 |
-
if ( ! preg_match( '/^UTC[
|
412 |
return false;
|
413 |
}
|
414 |
|
@@ -462,11 +462,11 @@ class Tribe__Timezones {
|
|
462 |
}
|
463 |
|
464 |
// if the offset contains fractions like :15, :30 or :45 convert them
|
465 |
-
$supported_offsets =
|
466 |
'/:15$/' => '.25',
|
467 |
'/:30$/' => '.5',
|
468 |
'/:45$/' => '.75',
|
469 |
-
|
470 |
$offset = preg_replace( array_keys( $supported_offsets ), array_values( $supported_offsets ), $offset );
|
471 |
|
472 |
// Convert the offset to minutes for easier handling of fractional offsets
|
@@ -615,7 +615,7 @@ class Tribe__Timezones {
|
|
615 |
return $timezone_candidate->getName();
|
616 |
}
|
617 |
|
618 |
-
$timezone_string = preg_replace( '/
|
619 |
$timezone_string = self::is_utc_offset( $timezone_string )
|
620 |
? self::generate_timezone_string_from_utc_offset( $timezone_string )
|
621 |
: $timezone_string;
|
@@ -623,3 +623,4 @@ class Tribe__Timezones {
|
|
623 |
return $timezone_string;
|
624 |
}
|
625 |
}
|
|
15 |
*
|
16 |
* @var array
|
17 |
*/
|
18 |
+
protected static $timezones = array();
|
19 |
|
20 |
public static function init() {
|
21 |
self::invalidate_caches();
|
27 |
* Currently we are concerned only with the site timezone abbreviation.
|
28 |
*/
|
29 |
protected static function invalidate_caches() {
|
30 |
+
add_filter( 'pre_update_option_gmt_offset', array( __CLASS__, 'clear_site_timezone_abbr' ) );
|
31 |
+
add_filter( 'pre_update_option_timezone_string', array( __CLASS__, 'clear_site_timezone_abbr' ) );
|
32 |
}
|
33 |
|
34 |
/**
|
408 |
*/
|
409 |
public static function timezone_from_utc_offset( $utc_offset_string ) {
|
410 |
// Test for strings looking like "UTC-2" or "UTC+5.25" etc
|
411 |
+
if ( ! preg_match( '/^UTC[\-\+]{1}[0-9\.]{1,4}$/', $utc_offset_string ) ) {
|
412 |
return false;
|
413 |
}
|
414 |
|
462 |
}
|
463 |
|
464 |
// if the offset contains fractions like :15, :30 or :45 convert them
|
465 |
+
$supported_offsets = array(
|
466 |
'/:15$/' => '.25',
|
467 |
'/:30$/' => '.5',
|
468 |
'/:45$/' => '.75',
|
469 |
+
);
|
470 |
$offset = preg_replace( array_keys( $supported_offsets ), array_values( $supported_offsets ), $offset );
|
471 |
|
472 |
// Convert the offset to minutes for easier handling of fractional offsets
|
615 |
return $timezone_candidate->getName();
|
616 |
}
|
617 |
|
618 |
+
$timezone_string = preg_replace( '/(\\+||\\-)0$/', '', $timezone_candidate );
|
619 |
$timezone_string = self::is_utc_offset( $timezone_string )
|
620 |
? self::generate_timezone_string_from_utc_offset( $timezone_string )
|
621 |
: $timezone_string;
|
623 |
return $timezone_string;
|
624 |
}
|
625 |
}
|
626 |
+
|
common/src/Tribe/Tracker.php
CHANGED
@@ -19,34 +19,34 @@ class Tribe__Tracker {
|
|
19 |
/**
|
20 |
* @var array An array of the tracked post types.
|
21 |
*/
|
22 |
-
protected $tracked_post_types =
|
23 |
|
24 |
/**
|
25 |
* @var array An array of the tracked taxonomies.
|
26 |
*/
|
27 |
-
protected $tracked_taxonomies =
|
28 |
|
29 |
/**
|
30 |
* Hooks up the methods that will actually track the fields we are looking for.
|
31 |
*/
|
32 |
public function hook() {
|
33 |
// Track the Meta Updates for Meta That came from the correct Post Types
|
34 |
-
add_filter( 'update_post_metadata',
|
35 |
|
36 |
// After a meta is added we mark that is has been modified
|
37 |
-
add_action( 'added_post_meta',
|
38 |
|
39 |
// Before a meta is removed we mark that is has been modified
|
40 |
-
add_action( 'delete_post_meta',
|
41 |
|
42 |
// Track the Post Fields Updates for Meta in the correct Post Types
|
43 |
-
add_action( 'post_updated',
|
44 |
|
45 |
// Track the Post term updates
|
46 |
-
add_action( 'set_object_terms',
|
47 |
|
48 |
// Clean up modified fields if the post is removed.
|
49 |
-
add_action( 'delete_post',
|
50 |
}
|
51 |
|
52 |
/**
|
@@ -83,30 +83,13 @@ class Tribe__Tracker {
|
|
83 |
}
|
84 |
|
85 |
/**
|
86 |
-
*
|
87 |
-
*
|
88 |
-
* @since 4.12.3
|
89 |
-
*
|
90 |
-
* @param string $meta_key The key for the meta field we're interested in.
|
91 |
-
* @param int $post_id The ID of the post to check.
|
92 |
-
*
|
93 |
-
* @return boolean|string The change timestamp or false if the field is not found/empty.
|
94 |
-
*/
|
95 |
-
public function get_modified_date( $meta_key, $post_id ) {
|
96 |
-
$modified = get_post_meta( $post_id, self::$field_key, true );
|
97 |
-
|
98 |
-
// If the key is missing or empty/null return false - no recorded change.
|
99 |
-
return Tribe__Utils__Array::get( $modified, $meta_key, false );
|
100 |
-
}
|
101 |
-
|
102 |
-
/**
|
103 |
-
* Easy way to see currently which post types are being tracked by our code.
|
104 |
*
|
105 |
* @return array
|
106 |
*/
|
107 |
public function get_post_types() {
|
108 |
// By default we are not tracking anything
|
109 |
-
$tracked_post_types =
|
110 |
|
111 |
/**
|
112 |
* Adds a way for Developers to add and remove which post types will be tracked
|
@@ -128,10 +111,10 @@ class Tribe__Tracker {
|
|
128 |
*/
|
129 |
public function get_excluded_meta_keys() {
|
130 |
// By default we are not tracking anything
|
131 |
-
$excluded_keys =
|
132 |
'_edit_lock',
|
133 |
self::$field_key,
|
134 |
-
|
135 |
|
136 |
/**
|
137 |
* Adds a way for Developers remove Meta Keys that shouldn't be tracked
|
@@ -197,7 +180,7 @@ class Tribe__Tracker {
|
|
197 |
// Fetch the current data from the modified fields
|
198 |
$modified = get_post_meta( $post->ID, self::$field_key, true );
|
199 |
if ( ! is_array( $modified ) ) {
|
200 |
-
$modified =
|
201 |
}
|
202 |
|
203 |
// If we got here we will update the Modified Meta
|
@@ -276,7 +259,7 @@ class Tribe__Tracker {
|
|
276 |
// Fetch the current data from the modified fields
|
277 |
$modified = get_post_meta( $post->ID, self::$field_key, true );
|
278 |
if ( ! is_array( $modified ) ) {
|
279 |
-
$modified =
|
280 |
}
|
281 |
|
282 |
// If we got here we will update the Modified Meta
|
@@ -320,17 +303,17 @@ class Tribe__Tracker {
|
|
320 |
$now = current_time( 'timestamp' );
|
321 |
|
322 |
if ( ! $modified = get_post_meta( $post_id, self::$field_key, true ) ) {
|
323 |
-
$modified =
|
324 |
}
|
325 |
|
326 |
-
$fields_to_check_for_changes =
|
327 |
'post_title',
|
328 |
'post_content',
|
329 |
'post_excerpt',
|
330 |
'post_status',
|
331 |
'post_type',
|
332 |
'post_parent',
|
333 |
-
|
334 |
|
335 |
foreach ( $fields_to_check_for_changes as $field ) {
|
336 |
if ( ! $this->has_field_changed( $field, $post_after, $post_before ) ) {
|
@@ -392,7 +375,7 @@ class Tribe__Tracker {
|
|
392 |
}
|
393 |
|
394 |
if ( ! $modified = get_post_meta( $post->ID, self::$field_key, true ) ) {
|
395 |
-
$modified =
|
396 |
}
|
397 |
|
398 |
if ( $tt_ids == $old_tt_ids ) {
|
19 |
/**
|
20 |
* @var array An array of the tracked post types.
|
21 |
*/
|
22 |
+
protected $tracked_post_types = array();
|
23 |
|
24 |
/**
|
25 |
* @var array An array of the tracked taxonomies.
|
26 |
*/
|
27 |
+
protected $tracked_taxonomies = array();
|
28 |
|
29 |
/**
|
30 |
* Hooks up the methods that will actually track the fields we are looking for.
|
31 |
*/
|
32 |
public function hook() {
|
33 |
// Track the Meta Updates for Meta That came from the correct Post Types
|
34 |
+
add_filter( 'update_post_metadata', array( $this, 'filter_watch_updated_meta' ), PHP_INT_MAX - 1, 5 );
|
35 |
|
36 |
// After a meta is added we mark that is has been modified
|
37 |
+
add_action( 'added_post_meta', array( $this, 'register_added_deleted_meta' ), PHP_INT_MAX - 1, 3 );
|
38 |
|
39 |
// Before a meta is removed we mark that is has been modified
|
40 |
+
add_action( 'delete_post_meta', array( $this, 'register_added_deleted_meta' ), PHP_INT_MAX - 1, 3 );
|
41 |
|
42 |
// Track the Post Fields Updates for Meta in the correct Post Types
|
43 |
+
add_action( 'post_updated', array( $this, 'filter_watch_post_fields' ), 10, 3 );
|
44 |
|
45 |
// Track the Post term updates
|
46 |
+
add_action( 'set_object_terms', array( $this, 'track_taxonomy_term_changes' ), 10, 6 );
|
47 |
|
48 |
// Clean up modified fields if the post is removed.
|
49 |
+
add_action( 'delete_post', array( $this, 'cleanup_meta_fields' ) );
|
50 |
}
|
51 |
|
52 |
/**
|
83 |
}
|
84 |
|
85 |
/**
|
86 |
+
* Easy way to see currently which post types are been tracked by our code.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
87 |
*
|
88 |
* @return array
|
89 |
*/
|
90 |
public function get_post_types() {
|
91 |
// By default we are not tracking anything
|
92 |
+
$tracked_post_types = array();
|
93 |
|
94 |
/**
|
95 |
* Adds a way for Developers to add and remove which post types will be tracked
|
111 |
*/
|
112 |
public function get_excluded_meta_keys() {
|
113 |
// By default we are not tracking anything
|
114 |
+
$excluded_keys = array(
|
115 |
'_edit_lock',
|
116 |
self::$field_key,
|
117 |
+
);
|
118 |
|
119 |
/**
|
120 |
* Adds a way for Developers remove Meta Keys that shouldn't be tracked
|
180 |
// Fetch the current data from the modified fields
|
181 |
$modified = get_post_meta( $post->ID, self::$field_key, true );
|
182 |
if ( ! is_array( $modified ) ) {
|
183 |
+
$modified = array();
|
184 |
}
|
185 |
|
186 |
// If we got here we will update the Modified Meta
|
259 |
// Fetch the current data from the modified fields
|
260 |
$modified = get_post_meta( $post->ID, self::$field_key, true );
|
261 |
if ( ! is_array( $modified ) ) {
|
262 |
+
$modified = array();
|
263 |
}
|
264 |
|
265 |
// If we got here we will update the Modified Meta
|
303 |
$now = current_time( 'timestamp' );
|
304 |
|
305 |
if ( ! $modified = get_post_meta( $post_id, self::$field_key, true ) ) {
|
306 |
+
$modified = array();
|
307 |
}
|
308 |
|
309 |
+
$fields_to_check_for_changes = array(
|
310 |
'post_title',
|
311 |
'post_content',
|
312 |
'post_excerpt',
|
313 |
'post_status',
|
314 |
'post_type',
|
315 |
'post_parent',
|
316 |
+
);
|
317 |
|
318 |
foreach ( $fields_to_check_for_changes as $field ) {
|
319 |
if ( ! $this->has_field_changed( $field, $post_after, $post_before ) ) {
|
375 |
}
|
376 |
|
377 |
if ( ! $modified = get_post_meta( $post->ID, self::$field_key, true ) ) {
|
378 |
+
$modified = array();
|
379 |
}
|
380 |
|
381 |
if ( $tt_ids == $old_tt_ids ) {
|
common/src/Tribe/Traits/With_DB_Lock.php
DELETED
@@ -1,50 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Provides methods to acquire and release a database (SQL) lock using the `Tribe\DB_Lock` class.
|
4 |
-
*
|
5 |
-
* @since 4.12.6
|
6 |
-
*
|
7 |
-
* @package Tribe\Traits
|
8 |
-
*/
|
9 |
-
|
10 |
-
namespace Tribe\Traits;
|
11 |
-
|
12 |
-
/**
|
13 |
-
* Trait With_Db_Lock
|
14 |
-
*
|
15 |
-
* @since 4.12.6
|
16 |
-
*
|
17 |
-
* @package Tribe\Traits
|
18 |
-
*/
|
19 |
-
trait With_DB_Lock {
|
20 |
-
|
21 |
-
/**
|
22 |
-
* Acquires a db lock.
|
23 |
-
*
|
24 |
-
* To ensure back-compatibility with MySQL 5.6, the lock will hash the lock key using SHA1.
|
25 |
-
*
|
26 |
-
* @since 4.12.6
|
27 |
-
*
|
28 |
-
* @param string $lock_key The name of the db lock key to acquire.
|
29 |
-
*
|
30 |
-
* @return bool Whether the lock acquisition was successful or not.
|
31 |
-
*/
|
32 |
-
private function acquire_db_lock( $lock_key ) {
|
33 |
-
return tribe( 'db-lock' )->acquire_db_lock( $lock_key );
|
34 |
-
}
|
35 |
-
|
36 |
-
/**
|
37 |
-
* Releases the database lock of the record.
|
38 |
-
*
|
39 |
-
* Release a not held db lock will return `null`, not `false`.
|
40 |
-
*
|
41 |
-
* @since 4.12.6
|
42 |
-
*
|
43 |
-
* @param string $lock_key The name of the lock to release.
|
44 |
-
*
|
45 |
-
* @return bool Whether the lock was correctly released or not.
|
46 |
-
*/
|
47 |
-
private function release_db_lock( $lock_key ) {
|
48 |
-
return tribe( 'db-lock' )->release_db_lock( $lock_key );
|
49 |
-
}
|
50 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
common/src/Tribe/Traits/With_Meta_Updates_Handling.php
DELETED
@@ -1,66 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Provides methods useful to deal with meta updates.
|
4 |
-
*
|
5 |
-
* @since 4.12.6
|
6 |
-
*
|
7 |
-
* @package Tribe\Traits
|
8 |
-
*/
|
9 |
-
|
10 |
-
namespace Tribe\Traits;
|
11 |
-
|
12 |
-
/**
|
13 |
-
* Trait With_Meta_Updates_Handling
|
14 |
-
*
|
15 |
-
* @since 4.12.6
|
16 |
-
*
|
17 |
-
* @package Tribe\Traits
|
18 |
-
*/
|
19 |
-
trait With_Meta_Updates_Handling {
|
20 |
-
/**
|
21 |
-
* Returns a closure that should be hooked to the `udapte_post_metadata` filter to "unpack" arrays of meta
|
22 |
-
* for a specific key.
|
23 |
-
*
|
24 |
-
* Providing an array of values in the context of `meta_input` will store them as a single array of values, not
|
25 |
-
* as multiple values. This closure will unpack the meta on update to have multiple values in place of one.
|
26 |
-
* This is the case, as an example, with Event Organizers, where we want a meta entry for each Organizer, not an
|
27 |
-
* array of Organizer IDs in a single meta.
|
28 |
-
*
|
29 |
-
* @since 4.12.6
|
30 |
-
*
|
31 |
-
* @param string $target_meta_key The meta key that should be "unpacked" for updates.
|
32 |
-
* @param int|null $target_post_id The specific post ID to target, or null to target the next update.
|
33 |
-
*
|
34 |
-
* @return \Closure The closure that will deal with the unpacked meta update.
|
35 |
-
*/
|
36 |
-
protected function unpack_meta_on_update( $target_meta_key, $target_post_id = null ) {
|
37 |
-
$closure = static function ( $update = null, $post_id = null, $meta_key = null, $meta_value = null ) use (
|
38 |
-
$target_post_id,
|
39 |
-
$target_meta_key,
|
40 |
-
&$closure
|
41 |
-
) {
|
42 |
-
if ( $target_meta_key !== $meta_key ) {
|
43 |
-
return $update;
|
44 |
-
}
|
45 |
-
|
46 |
-
if ( null !== $target_post_id && $target_post_id !== $post_id ) {
|
47 |
-
return $update;
|
48 |
-
}
|
49 |
-
|
50 |
-
remove_filter( 'update_post_metadata', $closure );
|
51 |
-
|
52 |
-
$values = (array) $meta_value;
|
53 |
-
delete_post_meta( $post_id, $target_meta_key );
|
54 |
-
foreach ( $values as $organizer_id ) {
|
55 |
-
add_post_meta( $post_id, $target_meta_key, $organizer_id );
|
56 |
-
}
|
57 |
-
|
58 |
-
// As in "we've dealt with it, do not update this meta."
|
59 |
-
return true;
|
60 |
-
};
|
61 |
-
|
62 |
-
add_filter( 'update_post_metadata', $closure, 10, 4 );
|
63 |
-
|
64 |
-
return $closure;
|
65 |
-
}
|
66 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
common/src/Tribe/Traits/With_Post_Attribute_Detection.php
DELETED
@@ -1,82 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Provides methods to detect whether a field is a post field, a taxonomy or a custom field in relation to a post type.
|
4 |
-
*
|
5 |
-
* Note that the trait does not include a `is_a_custom_field` method as that's implied from a field not being
|
6 |
-
* a post field and not being a taxonomy.
|
7 |
-
*
|
8 |
-
* @since 4.12.6
|
9 |
-
*
|
10 |
-
* @package Tribe\Traits
|
11 |
-
*/
|
12 |
-
|
13 |
-
namespace Tribe\Traits;
|
14 |
-
|
15 |
-
/**
|
16 |
-
* Trait With_Post_Attribute_Detection
|
17 |
-
*
|
18 |
-
* @since 4.12.6
|
19 |
-
*
|
20 |
-
* @package Tribe\Traits
|
21 |
-
*/
|
22 |
-
trait With_Post_Attribute_Detection {
|
23 |
-
|
24 |
-
/**
|
25 |
-
* Whether the key is a field of the posts table or not.
|
26 |
-
*
|
27 |
-
* @since 4.7.19 Created in the `Tribe__Repository` class.
|
28 |
-
* @since 4.12.6 Refactored out of the `Tribe__Repository` class into this trait.
|
29 |
-
*
|
30 |
-
* @param string $key The field to check.
|
31 |
-
*
|
32 |
-
* @return bool Whether the key indicates a post field, a column in the `posts` table, or not.
|
33 |
-
*/
|
34 |
-
protected function is_a_post_field( $key ) {
|
35 |
-
return in_array( $key, [
|
36 |
-
'ID',
|
37 |
-
'post_author',
|
38 |
-
'post_date',
|
39 |
-
'post_date_gmt',
|
40 |
-
'post_content',
|
41 |
-
'post_title',
|
42 |
-
'post_excerpt',
|
43 |
-
'post_status',
|
44 |
-
'comment_status',
|
45 |
-
'ping_status',
|
46 |
-
'post_password',
|
47 |
-
'post_name',
|
48 |
-
'to_ping',
|
49 |
-
'pinged',
|
50 |
-
'post_modified',
|
51 |
-
'post_modified_gmt',
|
52 |
-
'post_content_filtered',
|
53 |
-
'post_parent',
|
54 |
-
'guid',
|
55 |
-
'menu_order',
|
56 |
-
'post_type',
|
57 |
-
'post_mime_type',
|
58 |
-
'comment_count',
|
59 |
-
], true );
|
60 |
-
}
|
61 |
-
|
62 |
-
/**
|
63 |
-
* Whether the current key identifies one of the supported taxonomies or not.
|
64 |
-
*
|
65 |
-
* @since 4.7.19 Created in the `Tribe__Repository` class.
|
66 |
-
* @since 4.12.6 Refactored out of the `Tribe__Repository` class into this trait.
|
67 |
-
*
|
68 |
-
* @param string $key The field to check.
|
69 |
-
*
|
70 |
-
* @return bool Whether the key indicates a taxonomy of the post type or not.
|
71 |
-
*/
|
72 |
-
protected function is_a_taxonomy( $key ) {
|
73 |
-
if ( ! isset( $this->taxonomies ) ) {
|
74 |
-
// If we're here, then the developer made an error: throw an exception to bring this up as early as possible.
|
75 |
-
throw new \RuntimeException(
|
76 |
-
'The ' . __TRAIT__ . ' trait requires the user class to define a $taxonomies array parameter.'
|
77 |
-
);
|
78 |
-
}
|
79 |
-
|
80 |
-
return in_array( $key, $this->taxonomies, true );
|
81 |
-
}
|
82 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
common/src/Tribe/Updater.php
CHANGED
@@ -90,7 +90,7 @@ class Tribe__Updater {
|
|
90 |
* @return array
|
91 |
*/
|
92 |
public function get_update_callbacks() {
|
93 |
-
return
|
94 |
}
|
95 |
|
96 |
/**
|
@@ -102,9 +102,9 @@ class Tribe__Updater {
|
|
102 |
* @return array
|
103 |
*/
|
104 |
public function get_constant_update_callbacks() {
|
105 |
-
return
|
106 |
-
|
107 |
-
|
108 |
}
|
109 |
|
110 |
/**
|
90 |
* @return array
|
91 |
*/
|
92 |
public function get_update_callbacks() {
|
93 |
+
return array();
|
94 |
}
|
95 |
|
96 |
/**
|
102 |
* @return array
|
103 |
*/
|
104 |
public function get_constant_update_callbacks() {
|
105 |
+
return array(
|
106 |
+
array( $this, 'flush_rewrites' ),
|
107 |
+
);
|
108 |
}
|
109 |
|
110 |
/**
|
common/src/Tribe/Utils/Array.php
CHANGED
@@ -442,230 +442,5 @@ if ( ! class_exists( 'Tribe__Utils__Array' ) ) {
|
|
442 |
|
443 |
return $default;
|
444 |
}
|
445 |
-
|
446 |
-
/**
|
447 |
-
* Discards everything other than array values having string keys and scalar values, ensuring a
|
448 |
-
* one-dimensional, associative array result.
|
449 |
-
*
|
450 |
-
* @link https://www.php.net/manual/language.types.array.php Keys cast to non-strings will be discarded.
|
451 |
-
*
|
452 |
-
* @since 4.12.2
|
453 |
-
*
|
454 |
-
* @param array $array
|
455 |
-
*
|
456 |
-
* @return array Associative or empty array.
|
457 |
-
*/
|
458 |
-
public static function filter_to_flat_scalar_associative_array( array $array ) {
|
459 |
-
$result = [];
|
460 |
-
|
461 |
-
if ( ! is_array( $array ) ) {
|
462 |
-
return $result;
|
463 |
-
}
|
464 |
-
|
465 |
-
foreach ( $array as $k => $v ) {
|
466 |
-
if ( ! is_string( $k ) ) {
|
467 |
-
continue;
|
468 |
-
}
|
469 |
-
|
470 |
-
if ( ! is_scalar( $v ) ) {
|
471 |
-
continue;
|
472 |
-
}
|
473 |
-
|
474 |
-
$result[ $k ] = $v;
|
475 |
-
}
|
476 |
-
|
477 |
-
return $result;
|
478 |
-
}
|
479 |
-
|
480 |
-
/**
|
481 |
-
* Build an array from migrating aliased key values to their canonical key values, removing all alias keys.
|
482 |
-
*
|
483 |
-
* If the original array has values for both the alias and its canonical, keep the canonical's value and
|
484 |
-
* discard the alias' value.
|
485 |
-
*
|
486 |
-
* @since 4.12.2
|
487 |
-
*
|
488 |
-
* @param array $original An associative array of values, such as passed shortcode arguments.
|
489 |
-
* @param array $alias_map An associative array of aliases: key as alias, value as mapped canonical.
|
490 |
-
* Example: [ 'alias' => 'canonical', 'from' => 'to', 'that' => 'becomes_this' ]
|
491 |
-
*
|
492 |
-
* @return array
|
493 |
-
*/
|
494 |
-
public static function parse_associative_array_alias( array $original, array $alias_map ) {
|
495 |
-
// Ensure array values.
|
496 |
-
$original = (array) $original;
|
497 |
-
$alias_map = static::filter_to_flat_scalar_associative_array( (array) $alias_map );
|
498 |
-
|
499 |
-
// Fail gracefully if alias array wasn't setup as [ 'from' => 'to' ].
|
500 |
-
if ( empty( $alias_map ) ) {
|
501 |
-
return $original;
|
502 |
-
}
|
503 |
-
|
504 |
-
$result = $original;
|
505 |
-
|
506 |
-
// Parse aliases.
|
507 |
-
foreach ( $alias_map as $from => $to ) {
|
508 |
-
// If this alias isn't in use, go onto the next.
|
509 |
-
if ( ! isset( $result[ $from ] ) ) {
|
510 |
-
continue;
|
511 |
-
}
|
512 |
-
|
513 |
-
// Only allow setting alias value if canonical value is not already present.
|
514 |
-
if ( ! isset( $result[ $to ] ) ) {
|
515 |
-
$result[ $to ] = $result[ $from ];
|
516 |
-
}
|
517 |
-
|
518 |
-
// Always remove the alias key.
|
519 |
-
unset( $result[ $from ] );
|
520 |
-
}
|
521 |
-
|
522 |
-
return $result;
|
523 |
-
}
|
524 |
-
|
525 |
-
/**
|
526 |
-
* Stringifies the numeric keys of an array.
|
527 |
-
*
|
528 |
-
* @since 4.12.14
|
529 |
-
*
|
530 |
-
* @param array<int|string,mixed> $input The input array whose keys should be stringified.
|
531 |
-
* @param string|null $prefix The prefix that should be use to stringify the keys, if not provided
|
532 |
-
* then it will be generated.
|
533 |
-
*
|
534 |
-
* @return array<string,mixed> The input array with each numeric key stringified.
|
535 |
-
*/
|
536 |
-
public static function stringify_keys( array $input, $prefix = null ) {
|
537 |
-
$prefix = null === $prefix ? uniqid( 'sk_', true ) : $prefix;
|
538 |
-
$visitor = static function ( $key, $value ) use ( $prefix ) {
|
539 |
-
$string_key = is_numeric( $key ) ? $prefix . $key : $key;
|
540 |
-
|
541 |
-
return [ $string_key, $value ];
|
542 |
-
};
|
543 |
-
|
544 |
-
return static::array_visit_recursive( $input, $visitor );
|
545 |
-
}
|
546 |
-
|
547 |
-
/**
|
548 |
-
* The inverse of the `stringify_keys` method, it will restore numeric keys for previously
|
549 |
-
* stringified keys.
|
550 |
-
*
|
551 |
-
* @since 4.12.14
|
552 |
-
*
|
553 |
-
* @param array<int|string,mixed> $input The input array whose stringified keys should be
|
554 |
-
* destringified.
|
555 |
-
* @param string $prefix The prefix that should be used to target only specific string keys.
|
556 |
-
*
|
557 |
-
* @return array<int|string,mixed> The input array, its stringified keys destringified.
|
558 |
-
*/
|
559 |
-
public static function destringify_keys( array $input, $prefix = 'sk_' ) {
|
560 |
-
$visitor = static function ( $key, $value ) use ( $prefix ) {
|
561 |
-
$destringified_key = 0 === self::strpos( $key, $prefix ) ? null : $key;
|
562 |
-
|
563 |
-
return [ $destringified_key, $value ];
|
564 |
-
};
|
565 |
-
|
566 |
-
return static::array_visit_recursive( $input, $visitor );
|
567 |
-
}
|
568 |
-
|
569 |
-
/**
|
570 |
-
* Recursively visits all elements of an array applying the specified callback to each element
|
571 |
-
* key and value.
|
572 |
-
*
|
573 |
-
* @since 4.12.14
|
574 |
-
*
|
575 |
-
* @param array $input The input array whose nodes should be visited.
|
576 |
-
* @param callable $visitor A callback function that will be called on each array item; the callback will
|
577 |
-
* receive the item key and value as input and should return an array that contains
|
578 |
-
* the update key and value in the shape `[ <key>, <value> ]`. Returning a `null`
|
579 |
-
* key will cause the element to be removed from the array.
|
580 |
-
*/
|
581 |
-
public static function array_visit_recursive( $input, callable $visitor ) {
|
582 |
-
if ( ! is_array( $input ) ) {
|
583 |
-
return $input;
|
584 |
-
}
|
585 |
-
|
586 |
-
$return = [];
|
587 |
-
|
588 |
-
foreach ( $input as $key => &$value ) {
|
589 |
-
if ( is_array( $value ) ) {
|
590 |
-
$value = static::array_visit_recursive( $value, $visitor );
|
591 |
-
}
|
592 |
-
// Ensure visitors can quickly return `null` to remove an element.
|
593 |
-
list( $updated_key, $update_value ) = array_replace( [ $key, $value ], (array) $visitor( $key, $value ) );
|
594 |
-
if ( false === $updated_key ) {
|
595 |
-
// Visitor will be able to remove an element by returning a `false` key for it.
|
596 |
-
continue;
|
597 |
-
}
|
598 |
-
if ( null === $updated_key ) {
|
599 |
-
// Automatically assign the first available numeric index to the element.
|
600 |
-
$return[] = $update_value;
|
601 |
-
} else {
|
602 |
-
$return[ $updated_key ] = $update_value;
|
603 |
-
}
|
604 |
-
}
|
605 |
-
|
606 |
-
return $return;
|
607 |
-
}
|
608 |
-
|
609 |
-
/**
|
610 |
-
* Recursively remove associative, non numeric, keys from an array.
|
611 |
-
*
|
612 |
-
* @since 4.12.14
|
613 |
-
*
|
614 |
-
* @param array<string|int,mixed> $input The input array.
|
615 |
-
*
|
616 |
-
* @return array<int|mixed> An array that only contains integer keys at any of its levels.
|
617 |
-
*/
|
618 |
-
public static function remove_numeric_keys_recursive( array $input ) {
|
619 |
-
return self::array_visit_recursive(
|
620 |
-
$input,
|
621 |
-
static function ( $key ) {
|
622 |
-
return is_numeric( $key ) ? false : $key;
|
623 |
-
}
|
624 |
-
);
|
625 |
-
}
|
626 |
-
|
627 |
-
/**
|
628 |
-
* Recursively remove numeric keys from an array.
|
629 |
-
*
|
630 |
-
* @since 4.12.14
|
631 |
-
*
|
632 |
-
* @param array<string|int,mixed> $input The input array.
|
633 |
-
*
|
634 |
-
* @return array<string,mixed> An array that only contains non numeric keys at any of its levels.
|
635 |
-
*/
|
636 |
-
public static function remove_string_keys_recursive( array $input ) {
|
637 |
-
return self::array_visit_recursive(
|
638 |
-
$input,
|
639 |
-
static function ( $key ) {
|
640 |
-
return !is_numeric( $key ) ? false : $key;
|
641 |
-
}
|
642 |
-
);
|
643 |
-
}
|
644 |
-
|
645 |
-
/**
|
646 |
-
* Merges two or more arrays in the nested format used by WP_Query arguments preserving and merging them correctly.
|
647 |
-
*
|
648 |
-
* The method will recursively replace named keys and merge numeric keys. The method takes its name from its intended
|
649 |
-
* primary use, but it's not limited to query arguments only.
|
650 |
-
*
|
651 |
-
* @since 4.12.14
|
652 |
-
*
|
653 |
-
* @param array<string|int,mixed> ...$arrays A set of arrays to merge.
|
654 |
-
*
|
655 |
-
* @return array<string|int,mixed> The recursively merged array.
|
656 |
-
*/
|
657 |
-
public static function merge_recursive_query_vars( array ...$arrays ) {
|
658 |
-
if ( ! count( $arrays ) ) {
|
659 |
-
return [];
|
660 |
-
}
|
661 |
-
|
662 |
-
// Temporarily transform numeric keys to string keys generated with time-related randomness.
|
663 |
-
$stringified = array_map( [ static::class, 'stringify_keys' ], $arrays );
|
664 |
-
// Replace recursive will recursively replace any entry that has the same string key, stringified keys will never match due to randomness.
|
665 |
-
$merged = array_replace_recursive( ...$stringified );
|
666 |
-
|
667 |
-
// Finally destringify the keys to return something that will resemble, in shape, the original arrays.
|
668 |
-
return static::destringify_keys( $merged );
|
669 |
-
}
|
670 |
}
|
671 |
}
|
442 |
|
443 |
return $default;
|
444 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
445 |
}
|
446 |
}
|
common/src/Tribe/Utils/Body_Classes.php
DELETED
@@ -1,350 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Class used to manage and add body classes via a queue across our plugins.
|
4 |
-
*
|
5 |
-
* @since 4.12.6
|
6 |
-
*/
|
7 |
-
namespace Tribe\Utils;
|
8 |
-
|
9 |
-
use Tribe\Utils\Element_Classes;
|
10 |
-
|
11 |
-
/**
|
12 |
-
* Body_Classes class
|
13 |
-
*
|
14 |
-
* @since 4.12.6
|
15 |
-
*/
|
16 |
-
class Body_Classes {
|
17 |
-
/**
|
18 |
-
* Stores all the classes.
|
19 |
-
* In the format: ['class' => true, 'class => false ]
|
20 |
-
*
|
21 |
-
* @var array<string,bool>
|
22 |
-
*/
|
23 |
-
protected $classes = [];
|
24 |
-
|
25 |
-
/**
|
26 |
-
* Stores all the admin classes.
|
27 |
-
* In the format: ['class' => true, 'class => false ]
|
28 |
-
*
|
29 |
-
* @var array<string,bool>
|
30 |
-
*/
|
31 |
-
protected $admin_classes = [];
|
32 |
-
|
33 |
-
/**
|
34 |
-
* Queue-aware method to get the classes array.
|
35 |
-
* Returns the array of classes to add.
|
36 |
-
*
|
37 |
-
* @since 4.12.6
|
38 |
-
*
|
39 |
-
* @param string $queue The queue we want to get 'admin', 'display', 'all'.
|
40 |
-
* @return array<string,bool> A map of the classes for the queue.
|
41 |
-
*/
|
42 |
-
public function get_classes( $queue = 'display' ) {
|
43 |
-
switch( $queue ) {
|
44 |
-
case 'admin':
|
45 |
-
return $this->admin_classes;
|
46 |
-
break;
|
47 |
-
case 'all':
|
48 |
-
return array_merge( $this->classes, $this->admin_classes );
|
49 |
-
break;
|
50 |
-
default:
|
51 |
-
return $this->classes;
|
52 |
-
break;
|
53 |
-
}
|
54 |
-
}
|
55 |
-
|
56 |
-
/**
|
57 |
-
* Returns the array of classnames to add
|
58 |
-
*
|
59 |
-
* @since 4.12.6
|
60 |
-
*
|
61 |
-
* @param string $queue The queue we want to get 'admin', 'display', 'all'.
|
62 |
-
* @return array<string> The list of class names.
|
63 |
-
*/
|
64 |
-
public function get_class_names( $queue = 'display' ) {
|
65 |
-
$classes = $this->get_classes( $queue );
|
66 |
-
|
67 |
-
return array_keys(
|
68 |
-
array_filter(
|
69 |
-
$classes,
|
70 |
-
static function( $v ) {
|
71 |
-
return $v;
|
72 |
-
},
|
73 |
-
ARRAY_FILTER_USE_KEY
|
74 |
-
)
|
75 |
-
);
|
76 |
-
}
|
77 |
-
|
78 |
-
/**
|
79 |
-
* Checks if a class is in the queue,
|
80 |
-
* wether it's going to be added or not.
|
81 |
-
*
|
82 |
-
* @since 4.12.6
|
83 |
-
*
|
84 |
-
* @param string $class The class we are checking for.
|
85 |
-
* @param string $queue The queue we want to check 'admin', 'display', 'all'
|
86 |
-
* @return boolean Whether a class exists or not in the queue.
|
87 |
-
*/
|
88 |
-
public function class_exists( $class, $queue = 'display' ) {
|
89 |
-
$classes = $this->get_classes( $queue );
|
90 |
-
|
91 |
-
return array_key_exists( $class, $classes );
|
92 |
-
}
|
93 |
-
|
94 |
-
/**
|
95 |
-
* Checks if a class is in the queue and going to be added.
|
96 |
-
*
|
97 |
-
* @since 4.12.6
|
98 |
-
*
|
99 |
-
* @param string $class The class we are checking for.
|
100 |
-
* @param string $queue The queue we want to check 'admin', 'display', 'all'
|
101 |
-
* @return boolean Whether a class is currently queued or not.
|
102 |
-
*/
|
103 |
-
public function class_is_enqueued( $class, $queue = 'display' ) {
|
104 |
-
$classes = $this->get_classes( $queue );
|
105 |
-
if ( ! $this->class_exists( $class, $queue ) ) {
|
106 |
-
return false;
|
107 |
-
}
|
108 |
-
|
109 |
-
return $classes[ $class ];
|
110 |
-
}
|
111 |
-
|
112 |
-
/**
|
113 |
-
* Dequeues a class.
|
114 |
-
*
|
115 |
-
* @since 4.12.6
|
116 |
-
*
|
117 |
-
* @param string $class
|
118 |
-
* @param string $queue The queue we want to alter 'admin', 'display', 'all'
|
119 |
-
* @return boolean
|
120 |
-
*/
|
121 |
-
public function dequeue_class( $class, $queue = 'display' ) {
|
122 |
-
if ( ! $this->class_exists( $class, $queue ) ) {
|
123 |
-
return false;
|
124 |
-
}
|
125 |
-
|
126 |
-
if ( 'admin' !== $queue ) {
|
127 |
-
$this->classes[ $class ] = false;
|
128 |
-
}
|
129 |
-
|
130 |
-
if ( 'display' !== $queue ) {
|
131 |
-
$this->admin_classes[ $class ] = false;
|
132 |
-
}
|
133 |
-
|
134 |
-
return true;
|
135 |
-
|
136 |
-
}
|
137 |
-
|
138 |
-
/**
|
139 |
-
* Enqueues a class.
|
140 |
-
*
|
141 |
-
* @since 4.12.6
|
142 |
-
*
|
143 |
-
* @param string $class
|
144 |
-
* @param string $queue The queue we want to alter 'admin', 'display', 'all'
|
145 |
-
* @return false
|
146 |
-
*/
|
147 |
-
public function enqueue_class( $class, $queue = 'display' ) {
|
148 |
-
if ( ! $this->class_exists( $class, $queue ) ) {
|
149 |
-
return false;
|
150 |
-
}
|
151 |
-
|
152 |
-
if ( 'admin' !== $queue ) {
|
153 |
-
$this->classes[ $class ] = true;
|
154 |
-
}
|
155 |
-
|
156 |
-
if ( 'display' !== $queue ) {
|
157 |
-
$this->admin_classes[ $class ] = true;
|
158 |
-
}
|
159 |
-
|
160 |
-
return true;
|
161 |
-
}
|
162 |
-
|
163 |
-
/**
|
164 |
-
* Add a single class to the queue.
|
165 |
-
*
|
166 |
-
* @since 4.12.6
|
167 |
-
*
|
168 |
-
* @param string $class The class to add.
|
169 |
-
* @param string $queue The queue we want to alter 'admin', 'display', 'all'
|
170 |
-
* @return void
|
171 |
-
*/
|
172 |
-
public function add_class( $class, $queue = 'display' ) {
|
173 |
-
if ( empty( $class ) ) {
|
174 |
-
return;
|
175 |
-
}
|
176 |
-
|
177 |
-
if ( is_array( $class ) ) {
|
178 |
-
$this->add_classes( $class, $queue );
|
179 |
-
} elseif ( $this->should_add_body_class_to_queue( $class, $queue ) ) {
|
180 |
-
|
181 |
-
$class = sanitize_html_class( $class );
|
182 |
-
|
183 |
-
if ( 'admin' !== $queue ) {
|
184 |
-
$this->classes[ $class ] = true ;
|
185 |
-
}
|
186 |
-
|
187 |
-
if ( 'display' !== $queue ) {
|
188 |
-
$this->admin_classes[ $class ] = true ;
|
189 |
-
}
|
190 |
-
|
191 |
-
}
|
192 |
-
}
|
193 |
-
|
194 |
-
/**
|
195 |
-
* Add an array of classes to the queue.
|
196 |
-
*
|
197 |
-
* @since 4.12.6
|
198 |
-
*
|
199 |
-
* @param array<string> $class The classes to add.
|
200 |
-
* @return void
|
201 |
-
*/
|
202 |
-
public function add_classes( array $classes, $queue = 'display' ) {
|
203 |
-
foreach ( $classes as $key => $value ) {
|
204 |
-
// If the classes are passed as class => bool, only add ones set to true.
|
205 |
-
if ( is_bool( $value ) && false !== $value ) {
|
206 |
-
$this->add_class( $key, $queue );
|
207 |
-
} else {
|
208 |
-
$this->add_class( $value, $queue );
|
209 |
-
}
|
210 |
-
}
|
211 |
-
}
|
212 |
-
|
213 |
-
/**
|
214 |
-
* Remove a single class from the queue.
|
215 |
-
*
|
216 |
-
* @since 4.12.6
|
217 |
-
*
|
218 |
-
* @param string $class The class to remove.
|
219 |
-
* @return void
|
220 |
-
*/
|
221 |
-
public function remove_class( $class, $queue = 'display' ) {
|
222 |
-
if ( 'admin' !== $queue ) {
|
223 |
-
$this->classes = array_filter(
|
224 |
-
$this->classes,
|
225 |
-
static function( $k ) use ( $class ) {
|
226 |
-
return $k !== $class;
|
227 |
-
},
|
228 |
-
ARRAY_FILTER_USE_KEY
|
229 |
-
);
|
230 |
-
}
|
231 |
-
|
232 |
-
if ( 'display' !== $queue ) {
|
233 |
-
$this->admin_classes = array_filter(
|
234 |
-
$this->admin_classes,
|
235 |
-
static function( $k ) use ( $class ) {
|
236 |
-
return $k !== $class;
|
237 |
-
},
|
238 |
-
ARRAY_FILTER_USE_KEY
|
239 |
-
);
|
240 |
-
}
|
241 |
-
}
|
242 |
-
|
243 |
-
/**
|
244 |
-
* Remove an array of classes from the queue.
|
245 |
-
*
|
246 |
-
* @since 4.12.6
|
247 |
-
*
|
248 |
-
* @param array<string> $classes The classes to remove.
|
249 |
-
* @return void
|
250 |
-
*/
|
251 |
-
public function remove_classes( array $classes, $queue = 'display' ) {
|
252 |
-
if ( empty( $classes ) || ! is_array( $classes) ) {
|
253 |
-
return;
|
254 |
-
}
|
255 |
-
|
256 |
-
foreach ( $classes as $class ) {
|
257 |
-
$this->remove_class( $class, $queue );
|
258 |
-
}
|
259 |
-
}
|
260 |
-
|
261 |
-
/**
|
262 |
-
* Adds the enqueued classes to the body class array.
|
263 |
-
*
|
264 |
-
* @since 4.12.6
|
265 |
-
*
|
266 |
-
* @param array<string> $classes An array of body class names.
|
267 |
-
* @return array Array of body classes.
|
268 |
-
*/
|
269 |
-
public function add_body_classes( $classes = [] ) {
|
270 |
-
// Make sure they should be added.
|
271 |
-
if( ! $this->should_add_body_classes( $this->get_class_names(), (array) $classes, 'display' ) ) {
|
272 |
-
return $classes;
|
273 |
-
}
|
274 |
-
|
275 |
-
$element_classes = new Element_Classes( $this->get_class_names() );
|
276 |
-
|
277 |
-
return array_merge( $classes, $element_classes->get_classes() );
|
278 |
-
}
|
279 |
-
|
280 |
-
/**
|
281 |
-
* Adds the enqueued classes to the body class array.
|
282 |
-
*
|
283 |
-
* @since 4.12.6
|
284 |
-
*
|
285 |
-
* @param string $classes The existing body class names.
|
286 |
-
*
|
287 |
-
* @return string String of admin body classes.
|
288 |
-
*/
|
289 |
-
public function add_admin_body_classes( $classes ) {
|
290 |
-
$existing_classes = explode( ' ', $classes );
|
291 |
-
// Make sure they should be added.
|
292 |
-
if ( ! $this->should_add_body_classes( $this->get_class_names( 'admin' ), (array) $existing_classes, 'admin' ) ) {
|
293 |
-
// Ensure we return the current string on false!
|
294 |
-
return $classes;
|
295 |
-
}
|
296 |
-
|
297 |
-
$element_classes = new Element_Classes( $this->get_class_names( 'admin' ) );
|
298 |
-
|
299 |
-
return implode( ' ', array_merge( $existing_classes, $element_classes->get_classes() ) );
|
300 |
-
|
301 |
-
}
|
302 |
-
|
303 |
-
/**
|
304 |
-
* Should a individual class be added to the queue.
|
305 |
-
*
|
306 |
-
* @since 4.12.6
|
307 |
-
*
|
308 |
-
* @param string $class The body class we wish to add.
|
309 |
-
*
|
310 |
-
* @return boolean Whether to add tribe body classes to the queue.
|
311 |
-
*/
|
312 |
-
private function should_add_body_class_to_queue( $class, $queue = 'display' ) {
|
313 |
-
/**
|
314 |
-
* Filter whether to add the body class to the queue or not.
|
315 |
-
*
|
316 |
-
* @since 4.12.6
|
317 |
-
*
|
318 |
-
* @param boolean $add Whether to add the class to the queue or not.
|
319 |
-
* @param array $class The array of body class names to add.
|
320 |
-
* @param string $queue The queue we want to get 'admin', 'display', 'all'.
|
321 |
-
*/
|
322 |
-
return (bool) apply_filters( 'tribe_body_class_should_add_to_queue', false, $class, $queue );
|
323 |
-
}
|
324 |
-
|
325 |
-
/**
|
326 |
-
* Logic for whether the body classes, as a whole, should be added.
|
327 |
-
*
|
328 |
-
* @since 4.12.6
|
329 |
-
*
|
330 |
-
* @param array $add_classes An array of body class names to add.
|
331 |
-
* @param array $existing_classes An array of existing body class names from WP.
|
332 |
-
* @param string $queue The queue we want to get 'admin', 'display', 'all'.
|
333 |
-
*
|
334 |
-
* @return boolean Whether to add tribe body classes.
|
335 |
-
*/
|
336 |
-
private function should_add_body_classes( array $add_classes, array $existing_classes, $queue ) {
|
337 |
-
/**
|
338 |
-
* Filter whether to add tribe body classes or not.
|
339 |
-
*
|
340 |
-
* @since 4.12.6
|
341 |
-
*
|
342 |
-
* @param boolean $add Whether to add classes or not.
|
343 |
-
* @param array $add_classes The array of body class names to add.
|
344 |
-
* @param array $existing_classes An array of existing body class names from WP.
|
345 |
-
* @param string $queue The queue we want to get 'admin', 'display', 'all'.
|
346 |
-
*
|
347 |
-
*/
|
348 |
-
return (bool)apply_filters( 'tribe_body_classes_should_add', false, $queue, $add_classes, $existing_classes );
|
349 |
-
}
|
350 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
common/src/Tribe/Utils/Callback.php
CHANGED
@@ -9,7 +9,7 @@ class Tribe__Utils__Callback {
|
|
9 |
*
|
10 |
* @var array
|
11 |
*/
|
12 |
-
public $items =
|
13 |
|
14 |
/**
|
15 |
* The Prefix we use for the Overloading replacement
|
@@ -58,12 +58,12 @@ class Tribe__Utils__Callback {
|
|
58 |
array_shift( $arguments );
|
59 |
array_shift( $arguments );
|
60 |
|
61 |
-
$item = (object)
|
62 |
-
'slug'
|
63 |
-
'method'
|
64 |
'arguments' => $arguments,
|
65 |
-
'is_empty'
|
66 |
-
|
67 |
|
68 |
$key = md5( json_encode( $item ) );
|
69 |
|
@@ -76,7 +76,7 @@ class Tribe__Utils__Callback {
|
|
76 |
|
77 |
$this->items[ $key ] = $item;
|
78 |
|
79 |
-
return
|
80 |
}
|
81 |
|
82 |
/**
|
@@ -145,7 +145,7 @@ class Tribe__Utils__Callback {
|
|
145 |
* @return array An array of properties that should be serialized.
|
146 |
*/
|
147 |
public function __sleep() {
|
148 |
-
return
|
149 |
}
|
150 |
|
151 |
/**
|
9 |
*
|
10 |
* @var array
|
11 |
*/
|
12 |
+
public $items = array();
|
13 |
|
14 |
/**
|
15 |
* The Prefix we use for the Overloading replacement
|
58 |
array_shift( $arguments );
|
59 |
array_shift( $arguments );
|
60 |
|
61 |
+
$item = (object) array(
|
62 |
+
'slug' => $slug,
|
63 |
+
'method' => $method,
|
64 |
'arguments' => $arguments,
|
65 |
+
'is_empty' => $is_empty,
|
66 |
+
);
|
67 |
|
68 |
$key = md5( json_encode( $item ) );
|
69 |
|
76 |
|
77 |
$this->items[ $key ] = $item;
|
78 |
|
79 |
+
return array( $this, $this->prefix . $key );
|
80 |
}
|
81 |
|
82 |
/**
|
145 |
* @return array An array of properties that should be serialized.
|
146 |
*/
|
147 |
public function __sleep() {
|
148 |
+
return array( 'slug', 'method' );
|
149 |
}
|
150 |
|
151 |
/**
|
common/src/Tribe/Utils/Collection.php
CHANGED
@@ -17,7 +17,7 @@ class Tribe__Utils__Collection extends SplDoublyLinkedList {
|
|
17 |
*
|
18 |
* @var array
|
19 |
*/
|
20 |
-
protected $items =
|
21 |
|
22 |
/**
|
23 |
* The doubly-linked list that will hold the items handled by the collection.
|
17 |
*
|
18 |
* @var array
|
19 |
*/
|
20 |
+
protected $items = array();
|
21 |
|
22 |
/**
|
23 |
* The doubly-linked list that will hold the items handled by the collection.
|
common/src/Tribe/Utils/Color.php
CHANGED
@@ -72,7 +72,7 @@ class Tribe__Utils__Color {
|
|
72 |
$G = hexdec( $color[2] . $color[3] );
|
73 |
$B = hexdec( $color[4] . $color[5] );
|
74 |
|
75 |
-
$HSL =
|
76 |
|
77 |
$var_R = ( $R / 255 );
|
78 |
$var_G = ( $G / 255 );
|
@@ -127,13 +127,13 @@ class Tribe__Utils__Color {
|
|
127 |
* @return string HEX string
|
128 |
* @throws Exception "Bad HSL Array"
|
129 |
*/
|
130 |
-
public static function hslToHex( $hsl =
|
131 |
-
|
132 |
if ( empty( $hsl ) || ! isset( $hsl['H'] ) || ! isset( $hsl['S'] ) || ! isset( $hsl['L'] ) ) {
|
133 |
throw new Exception( 'Param was not an HSL array' );
|
134 |
}
|
135 |
|
136 |
-
list( $H, $S, $L ) =
|
137 |
|
138 |
if ( 0 == $S ) {
|
139 |
$r = $L * 255;
|
@@ -197,8 +197,8 @@ class Tribe__Utils__Color {
|
|
197 |
* @return string RGB string
|
198 |
* @throws Exception "Bad RGB Array"
|
199 |
*/
|
200 |
-
public static function rgbToHex( $rgb =
|
201 |
-
|
202 |
if ( empty( $rgb ) || ! isset( $rgb['R'] ) || ! isset( $rgb['G'] ) || ! isset( $rgb['B'] ) ) {
|
203 |
throw new Exception( 'Param was not an RGB array' );
|
204 |
}
|
@@ -269,7 +269,7 @@ class Tribe__Utils__Color {
|
|
269 |
}
|
270 |
|
271 |
// Return our gradient array
|
272 |
-
return
|
273 |
}
|
274 |
|
275 |
|
@@ -449,8 +449,8 @@ class Tribe__Utils__Color {
|
|
449 |
$gmix = ( ( $rgb1['G'] * $r1 ) + ( $rgb2['G'] * $r2 ) ) / 2;
|
450 |
$bmix = ( ( $rgb1['B'] * $r1 ) + ( $rgb2['B'] * $r2 ) ) / 2;
|
451 |
|
452 |
-
|
453 |
-
|
454 |
|
455 |
/**
|
456 |
* Given a Hue, returns corresponding RGB value
|
72 |
$G = hexdec( $color[2] . $color[3] );
|
73 |
$B = hexdec( $color[4] . $color[5] );
|
74 |
|
75 |
+
$HSL = array();
|
76 |
|
77 |
$var_R = ( $R / 255 );
|
78 |
$var_G = ( $G / 255 );
|
127 |
* @return string HEX string
|
128 |
* @throws Exception "Bad HSL Array"
|
129 |
*/
|
130 |
+
public static function hslToHex( $hsl = array() ) {
|
131 |
+
// Make sure it's HSL
|
132 |
if ( empty( $hsl ) || ! isset( $hsl['H'] ) || ! isset( $hsl['S'] ) || ! isset( $hsl['L'] ) ) {
|
133 |
throw new Exception( 'Param was not an HSL array' );
|
134 |
}
|
135 |
|
136 |
+
list( $H, $S, $L ) = array( $hsl['H'] / 360, $hsl['S'], $hsl['L'] );
|
137 |
|
138 |
if ( 0 == $S ) {
|
139 |
$r = $L * 255;
|
197 |
* @return string RGB string
|
198 |
* @throws Exception "Bad RGB Array"
|
199 |
*/
|
200 |
+
public static function rgbToHex( $rgb = array() ) {
|
201 |
+
// Make sure it's RGB
|
202 |
if ( empty( $rgb ) || ! isset( $rgb['R'] ) || ! isset( $rgb['G'] ) || ! isset( $rgb['B'] ) ) {
|
203 |
throw new Exception( 'Param was not an RGB array' );
|
204 |
}
|
269 |
}
|
270 |
|
271 |
// Return our gradient array
|
272 |
+
return array( 'light' => $lightColor, 'dark' => $darkColor );
|
273 |
}
|
274 |
|
275 |
|
449 |
$gmix = ( ( $rgb1['G'] * $r1 ) + ( $rgb2['G'] * $r2 ) ) / 2;
|
450 |
$bmix = ( ( $rgb1['B'] * $r1 ) + ( $rgb2['B'] * $r2 ) ) / 2;
|
451 |
|
452 |
+
return array( 'R' => $rmix, 'G' => $gmix, 'B' => $bmix );
|
453 |
+
}
|
454 |
|
455 |
/**
|
456 |
* Given a Hue, returns corresponding RGB value
|
common/src/Tribe/Utils/Coordinates_Provider.php
CHANGED
@@ -76,7 +76,7 @@ class Tribe__Utils__Coordinates_Provider {
|
|
76 |
}
|
77 |
|
78 |
$base_request_url = trailingslashit( $this->get_google_api_base() ) . $this->get_google_api_json_format();
|
79 |
-
$url = esc_url( add_query_arg(
|
80 |
$response = $this->http->get( $url );
|
81 |
|
82 |
if ( is_wp_error( $response ) ) {
|
@@ -95,7 +95,7 @@ class Tribe__Utils__Coordinates_Provider {
|
|
95 |
|
96 |
$location = $decoded['results'][0]['geometry']['location'];
|
97 |
|
98 |
-
$updated_transient = array_merge( $this->get_transient(),
|
99 |
set_transient( self::$transient_name, $updated_transient );
|
100 |
$this->transient = $updated_transient;
|
101 |
|
@@ -120,7 +120,7 @@ class Tribe__Utils__Coordinates_Provider {
|
|
120 |
protected function get_transient() {
|
121 |
if ( ! is_array( $this->transient ) ) {
|
122 |
$transient = get_transient( self::$transient_name );
|
123 |
-
$this->transient = is_array( $transient ) ? $transient :
|
124 |
}
|
125 |
|
126 |
return $this->transient;
|
76 |
}
|
77 |
|
78 |
$base_request_url = trailingslashit( $this->get_google_api_base() ) . $this->get_google_api_json_format();
|
79 |
+
$url = esc_url( add_query_arg( array( 'address' => $address ), $base_request_url ) );
|
80 |
$response = $this->http->get( $url );
|
81 |
|
82 |
if ( is_wp_error( $response ) ) {
|
95 |
|
96 |
$location = $decoded['results'][0]['geometry']['location'];
|
97 |
|
98 |
+
$updated_transient = array_merge( $this->get_transient(), array( $address => $location ) );
|
99 |
set_transient( self::$transient_name, $updated_transient );
|
100 |
$this->transient = $updated_transient;
|
101 |
|
120 |
protected function get_transient() {
|
121 |
if ( ! is_array( $this->transient ) ) {
|
122 |
$transient = get_transient( self::$transient_name );
|
123 |
+
$this->transient = is_array( $transient ) ? $transient : array();
|
124 |
}
|
125 |
|
126 |
return $this->transient;
|
common/src/Tribe/Utils/Element_Attributes.php
DELETED
@@ -1,241 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
namespace Tribe\Utils;
|
3 |
-
|
4 |
-
/**
|
5 |
-
* Class Element_Attributes to handle HTML attributes for elements.
|
6 |
-
*
|
7 |
-
* @since 4.12.3
|
8 |
-
*
|
9 |
-
* @package Tribe\Utils
|
10 |
-
*/
|
11 |
-
class Element_Attributes {
|
12 |
-
/**
|
13 |
-
* Store the results of parsing the attributes.
|
14 |
-
*
|
15 |
-
* @since 4.12.3
|
16 |
-
*
|
17 |
-
* @var array<string,string>
|
18 |
-
*/
|
19 |
-
protected $results = [];
|
20 |
-
|
21 |
-
/**
|
22 |
-
* Stores the arguments passed.
|
23 |
-
*
|
24 |
-
* @since 4.12.3
|
25 |
-
*
|
26 |
-
* @var array
|
27 |
-
*/
|
28 |
-
protected $arguments = [];
|
29 |
-
|
30 |
-
/**
|
31 |
-
* Setups an instance of Element Attributes.
|
32 |
-
*
|
33 |
-
* @since 4.12.3
|
34 |
-
*
|
35 |
-
* @return void
|
36 |
-
*/
|
37 |
-
public function __construct() {
|
38 |
-
$this->arguments = func_get_args();
|
39 |
-
}
|
40 |
-
|
41 |
-
/**
|
42 |
-
* When invoked this class will return the full HTML attributes.
|
43 |
-
*
|
44 |
-
* @since 4.12.3
|
45 |
-
*
|
46 |
-
* @return string In the format ` attribute1="value1" attribute2="value2" `
|
47 |
-
*/
|
48 |
-
public function __invoke() {
|
49 |
-
$this->arguments = func_get_args();
|
50 |
-
return $this->get_attributes();
|
51 |
-
}
|
52 |
-
|
53 |
-
|
54 |
-
/**
|
55 |
-
* When cast to string an instance will return the full HTML attributes.
|
56 |
-
*
|
57 |
-
* @since 4.12.3
|
58 |
-
*
|
59 |
-
* @return string In the format ` attribute1="value1" attribute2="value2" `
|
60 |
-
*/
|
61 |
-
public function __toString() {
|
62 |
-
return $this->get_attributes();
|
63 |
-
}
|
64 |
-
|
65 |
-
/**
|
66 |
-
* Gets the full HTML attributes for this instance of Element Attributes.
|
67 |
-
* It will contain a space on each end of the attribute.
|
68 |
-
*
|
69 |
-
* @since 4.12.3
|
70 |
-
*
|
71 |
-
* @return string In the format ` attribute1="value1" attribute2="value2" `
|
72 |
-
*/
|
73 |
-
public function get_attributes() {
|
74 |
-
$attributes = $this->get_attributes_as_string();
|
75 |
-
|
76 |
-
// Bail with empty string when no attributes are present
|
77 |
-
if ( ! $attributes ) {
|
78 |
-
return '';
|
79 |
-
}
|
80 |
-
|
81 |
-
return " {$attributes} ";
|
82 |
-
}
|
83 |
-
|
84 |
-
/**
|
85 |
-
* Gets a space separated string of all attributes to be printed.
|
86 |
-
*
|
87 |
-
* @since 4.12.3
|
88 |
-
*
|
89 |
-
* @return string
|
90 |
-
*/
|
91 |
-
public function get_attributes_as_string() {
|
92 |
-
return implode( ' ', $this->get_attributes_array() );
|
93 |
-
}
|
94 |
-
|
95 |
-
/**
|
96 |
-
* Get the array of attributes to be printed.
|
97 |
-
*
|
98 |
-
* @since 4.12.3
|
99 |
-
*
|
100 |
-
* @return array
|
101 |
-
*/
|
102 |
-
public function get_attributes_array() {
|
103 |
-
$this->results = [];
|
104 |
-
$attributes = [];
|
105 |
-
|
106 |
-
$this->parse_array( $this->arguments );
|
107 |
-
|
108 |
-
foreach ( $this->results as $key => $val ) {
|
109 |
-
if ( ! $val && '0' !== $val ) {
|
110 |
-
continue;
|
111 |
-
}
|
112 |
-
|
113 |
-
if ( is_bool( $val ) ) {
|
114 |
-
$attributes[] = esc_attr( $key );
|
115 |
-
} else {
|
116 |
-
// Remove double quotes that might be surrounding the value.
|
117 |
-
trim( $val, '"' );
|
118 |
-
$attributes[] = esc_attr( $key ) . '="' . esc_attr( $val ) . '"';
|
119 |
-
}
|
120 |
-
}
|
121 |
-
|
122 |
-
return $attributes;
|
123 |
-
}
|
124 |
-
|
125 |
-
/**
|
126 |
-
* Parse arguments or argument for this instance, and store values on results.
|
127 |
-
*
|
128 |
-
* @since 4.12.3
|
129 |
-
*
|
130 |
-
* @param mixed $arguments Any possible set of arguments that this class supports.
|
131 |
-
*
|
132 |
-
* @return void
|
133 |
-
*/
|
134 |
-
protected function parse( $arguments ) {
|
135 |
-
if ( ! $arguments ) {
|
136 |
-
return;
|
137 |
-
}
|
138 |
-
|
139 |
-
if ( is_numeric( $arguments ) ) { // phpcs:ignore
|
140 |
-
// Bail on any numeric values.
|
141 |
-
} elseif ( is_array( $arguments ) ) {
|
142 |
-
// ['foo', 'bar', ...] || ['foo' => TRUE, 'bar' => FALSE, 'baz' => 'foo', ...]
|
143 |
-
$this->parse_array( $arguments );
|
144 |
-
} elseif ( is_string( $arguments ) ) {
|
145 |
-
// 'foo bar'
|
146 |
-
$this->parse_string( $arguments );
|
147 |
-
} elseif ( $arguments instanceof \Closure || is_callable( $arguments ) ) {
|
148 |
-
// function() {}
|
149 |
-
$this->parse_callable( $arguments );
|
150 |
-
} elseif ( is_object( $arguments ) ) {
|
151 |
-
// stdClass
|
152 |
-
$this->parse_object( $arguments );
|
153 |
-
}
|
154 |
-
}
|
155 |
-
|
156 |
-
/**
|
157 |
-
* Parse an array into an array of acceptable values for the instance.
|
158 |
-
*
|
159 |
-
* @since 4.12.3
|
160 |
-
*
|
161 |
-
* @param array $values Array of values to be parsed.
|
162 |
-
*
|
163 |
-
* @return void
|
164 |
-
*/
|
165 |
-
protected function parse_array( array $values ) {
|
166 |
-
foreach ( $values as $key => $value ) {
|
167 |
-
if ( is_int( $key ) ) {
|
168 |
-
$this->parse( $value );
|
169 |
-
} elseif ( is_string( $key ) ) {
|
170 |
-
if ( ! is_bool( $value ) && ! is_string( $value ) ) {
|
171 |
-
throw new \UnexpectedValueException( 'Value for key ' . $key . ' must be of type boolean or string' );
|
172 |
-
}
|
173 |
-
|
174 |
-
$this->results[ $key ] = $value;
|
175 |
-
}
|
176 |
-
}
|
177 |
-
}
|
178 |
-
|
179 |
-
/**
|
180 |
-
* Parse a string into an array of acceptable values for the instance.
|
181 |
-
*
|
182 |
-
* @since 4.12.3
|
183 |
-
*
|
184 |
-
* @param string $arguments Space separated string of attributes to be parsed.
|
185 |
-
*
|
186 |
-
* @return void
|
187 |
-
*/
|
188 |
-
protected function parse_string( $arguments ) {
|
189 |
-
$values = preg_split( '/\s+/', $arguments, -1, PREG_SPLIT_NO_EMPTY );
|
190 |
-
|
191 |
-
// When it doesn't match, bail early.
|
192 |
-
if ( ! $values ) {
|
193 |
-
return;
|
194 |
-
}
|
195 |
-
|
196 |
-
$attrs = [];
|
197 |
-
|
198 |
-
foreach ( $values as $key => $value ) {
|
199 |
-
if ( preg_match( '/^(?<key>[^=]+)="*(?<value>.*?)"*$/', $value, $m ) ) {
|
200 |
-
// Something like `f="boo"` or `foo=bar`.
|
201 |
-
$attrs[ $m['key'] ] = $m['value'];
|
202 |
-
|
203 |
-
continue;
|
204 |
-
}
|
205 |
-
|
206 |
-
$attrs[ $value ] = true;
|
207 |
-
}
|
208 |
-
|
209 |
-
$this->parse_array( $attrs );
|
210 |
-
}
|
211 |
-
|
212 |
-
/**
|
213 |
-
* Parses an object into the array of considered attributes.
|
214 |
-
*
|
215 |
-
* @since 4.12.3
|
216 |
-
*
|
217 |
-
* @param mixed $object Object to be converted into array and parsed.
|
218 |
-
*
|
219 |
-
* @return void
|
220 |
-
*/
|
221 |
-
protected function parse_object( $object ) {
|
222 |
-
$this->parse_array( (array) $object );
|
223 |
-
}
|
224 |
-
|
225 |
-
/**
|
226 |
-
* Parses a callable method or function into the array of considered attributes.
|
227 |
-
*
|
228 |
-
* The result of the callable will REPLACE the current attributes, callables will work like filters.
|
229 |
-
*
|
230 |
-
* @since 4.12.3
|
231 |
-
*
|
232 |
-
* @param callable $method_or_function Method or Function to be called.
|
233 |
-
*
|
234 |
-
* @return void
|
235 |
-
*/
|
236 |
-
protected function parse_callable( callable $method_or_function ) {
|
237 |
-
$filtered = $method_or_function( $this->results );
|
238 |
-
$this->results = [];
|
239 |
-
$this->parse( $filtered );
|
240 |
-
}
|
241 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
common/src/Tribe/Utils/Element_Classes.php
CHANGED
@@ -179,7 +179,7 @@ class Element_Classes {
|
|
179 |
protected function parse_string( $arguments, $default_value = true ) {
|
180 |
$values = preg_split( '/\s+/', $arguments, -1, PREG_SPLIT_NO_EMPTY );
|
181 |
|
182 |
-
// When it
|
183 |
if ( ! $values ) {
|
184 |
return;
|
185 |
}
|
179 |
protected function parse_string( $arguments, $default_value = true ) {
|
180 |
$values = preg_split( '/\s+/', $arguments, -1, PREG_SPLIT_NO_EMPTY );
|
181 |
|
182 |
+
// When it doesnt match, bail early.
|
183 |
if ( ! $values ) {
|
184 |
return;
|
185 |
}
|
common/src/Tribe/Utils/Global_ID.php
CHANGED
@@ -15,25 +15,25 @@ class Tribe__Utils__Global_ID {
|
|
15 |
|
16 |
|
17 |
/**
|
18 |
-
*
|
19 |
* @var array
|
20 |
*/
|
21 |
-
protected $valid_types =
|
22 |
'url',
|
23 |
'meetup',
|
24 |
'facebook',
|
25 |
'eventbrite',
|
26 |
-
|
27 |
|
28 |
/**
|
29 |
* For some types of ID we have a predefined Origin
|
30 |
* @var array
|
31 |
*/
|
32 |
-
protected $type_origins =
|
33 |
-
'meetup'
|
34 |
-
'facebook'
|
35 |
'eventbrite' => 'eventbrite.com',
|
36 |
-
|
37 |
|
38 |
/**
|
39 |
* Tribe__Utils__Global_ID constructor.
|
@@ -123,7 +123,7 @@ class Tribe__Utils__Global_ID {
|
|
123 |
*
|
124 |
* @return string
|
125 |
*/
|
126 |
-
public function generate( array $args =
|
127 |
// We can't do this without type or origin
|
128 |
if ( ! $this->type() || ! $this->origin() ) {
|
129 |
return false;
|
@@ -150,7 +150,7 @@ class Tribe__Utils__Global_ID {
|
|
150 |
$parsed = wp_parse_url( 'http://' . $global_id );
|
151 |
|
152 |
if ( ! empty( $parsed['query'] ) ) {
|
153 |
-
$parsed_query =
|
154 |
|
155 |
wp_parse_str( $parsed['query'], $parsed_query );
|
156 |
|
15 |
|
16 |
|
17 |
/**
|
18 |
+
* Dont allow creation of Global IDs for other types of source
|
19 |
* @var array
|
20 |
*/
|
21 |
+
protected $valid_types = array(
|
22 |
'url',
|
23 |
'meetup',
|
24 |
'facebook',
|
25 |
'eventbrite',
|
26 |
+
);
|
27 |
|
28 |
/**
|
29 |
* For some types of ID we have a predefined Origin
|
30 |
* @var array
|
31 |
*/
|
32 |
+
protected $type_origins = array(
|
33 |
+
'meetup' => 'meetup.com',
|
34 |
+
'facebook' => 'facebook.com',
|
35 |
'eventbrite' => 'eventbrite.com',
|
36 |
+
);
|
37 |
|
38 |
/**
|
39 |
* Tribe__Utils__Global_ID constructor.
|
123 |
*
|
124 |
* @return string
|
125 |
*/
|
126 |
+
public function generate( array $args = array() ) {
|
127 |
// We can't do this without type or origin
|
128 |
if ( ! $this->type() || ! $this->origin() ) {
|
129 |
return false;
|
150 |
$parsed = wp_parse_url( 'http://' . $global_id );
|
151 |
|
152 |
if ( ! empty( $parsed['query'] ) ) {
|
153 |
+
$parsed_query = array();
|
154 |
|
155 |
wp_parse_str( $parsed['query'], $parsed_query );
|
156 |
|
common/src/Tribe/Utils/JSON.php
CHANGED
@@ -22,7 +22,7 @@ class Tribe__Utils__JSON {
|
|
22 |
return $value;
|
23 |
}
|
24 |
if ( is_array( $value ) ) {
|
25 |
-
$escaped =
|
26 |
foreach ( $value as $key => $subvalue ) {
|
27 |
$escaped[ $key ] = self::escape_string( $subvalue );
|
28 |
}
|
@@ -30,8 +30,8 @@ class Tribe__Utils__JSON {
|
|
30 |
return $escaped;
|
31 |
}
|
32 |
|
33 |
-
$escapers =
|
34 |
-
$replacements =
|
35 |
|
36 |
return str_replace( $escapers, $replacements, $value );
|
37 |
}
|
22 |
return $value;
|
23 |
}
|
24 |
if ( is_array( $value ) ) {
|
25 |
+
$escaped = array();
|
26 |
foreach ( $value as $key => $subvalue ) {
|
27 |
$escaped[ $key ] = self::escape_string( $subvalue );
|
28 |
}
|
30 |
return $escaped;
|
31 |
}
|
32 |
|
33 |
+
$escapers = array( "\\", "/", "\"", "\n", "\r", "\t", "\x08", "\x0c" );
|
34 |
+
$replacements = array( "\\\\", "\\/", "\\\"", "\\n", "\\r", "\\t", "\\f", "\\b" );
|
35 |
|
36 |
return str_replace( $escapers, $replacements, $value );
|
37 |
}
|
common/src/Tribe/Utils/Paths.php
DELETED
@@ -1,75 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Utilities to manipulate file-system paths.
|
4 |
-
*
|
5 |
-
* @since 4.12.14
|
6 |
-
*
|
7 |
-
* @package Tribe\Utils
|
8 |
-
*/
|
9 |
-
|
10 |
-
namespace Tribe\Utils;
|
11 |
-
|
12 |
-
/**
|
13 |
-
* Class Paths
|
14 |
-
*
|
15 |
-
* @since 4.12.14
|
16 |
-
*
|
17 |
-
* @package Tribe\Utils
|
18 |
-
*/
|
19 |
-
class Paths {
|
20 |
-
|
21 |
-
/**
|
22 |
-
* Merge a set of paths into a single path.
|
23 |
-
*
|
24 |
-
* The function will take care of merging the paths intersecting their common fragments.
|
25 |
-
* E.g. `foo/bar/baz` and `bar/baz/test.php` will be merged int `foo/bar/baz/test.php`.
|
26 |
-
*
|
27 |
-
* @since 4.12.14
|
28 |
-
*
|
29 |
-
* @param string|array<string<array<string>> ...$paths A set of paths to merge, each one either a string or an array
|
30 |
-
* of path fragments.
|
31 |
-
*
|
32 |
-
* @return string The merged path, the path intersecting fragments removed.
|
33 |
-
*/
|
34 |
-
public static function merge( ...$paths ) {
|
35 |
-
$merged_paths = '';
|
36 |
-
|
37 |
-
if ( count( $paths ) > 2 ) {
|
38 |
-
$slice = array_splice( $paths, 0, 1 );
|
39 |
-
$paths = array_merge( $slice, [ static::merge( ...$paths ) ] );
|
40 |
-
}
|
41 |
-
|
42 |
-
$path_1 = isset( $paths[0] ) ? $paths[0] : '';
|
43 |
-
$lead_slash = is_string( $path_1 ) && $path_1 !== ltrim( $path_1, '\\/' ) ? DIRECTORY_SEPARATOR : '';
|
44 |
-
$path_2 = isset( $paths[1] ) ? $paths[1] : '';
|
45 |
-
$trail_slash = is_string( $path_2 ) && $path_2 !== rtrim( $path_2, '\\/' ) ? DIRECTORY_SEPARATOR : '';
|
46 |
-
// Handle *nix spacing escape sequence (`\ `) correctly. The Windows one (`^ `) is already handled.
|
47 |
-
$break_pattern = '/[\\\\\\/](?!\\s)/';
|
48 |
-
$drop_empty_strings = static function ( $frag ) {
|
49 |
-
return $frag !== '';
|
50 |
-
};
|
51 |
-
$path_1_frags = is_array( $path_1 )
|
52 |
-
? $path_1
|
53 |
-
: array_filter( (array) preg_split( $break_pattern, $path_1 ), $drop_empty_strings );
|
54 |
-
$path_2_frags = is_array( $path_2 )
|
55 |
-
? $path_2
|
56 |
-
: array_filter( (array) preg_split( $break_pattern, $path_2 ), $drop_empty_strings );
|
57 |
-
$non_consecutive_common = array_intersect( $path_1_frags, $path_2_frags );
|
58 |
-
|
59 |
-
$trimmed_path_2 = trim(
|
60 |
-
preg_replace(
|
61 |
-
'#^' . preg_quote( implode( DIRECTORY_SEPARATOR, $non_consecutive_common ), '#' ) . '#', '',
|
62 |
-
implode( DIRECTORY_SEPARATOR, $path_2_frags )
|
63 |
-
),
|
64 |
-
'\\/'
|
65 |
-
);
|
66 |
-
|
67 |
-
$merged_paths .= $lead_slash . implode( DIRECTORY_SEPARATOR, $path_1_frags );
|
68 |
-
|
69 |
-
if ( $trimmed_path_2 ) {
|
70 |
-
$merged_paths .= DIRECTORY_SEPARATOR . $trimmed_path_2 . $trail_slash;
|
71 |
-
}
|
72 |
-
|
73 |
-
return $merged_paths;
|
74 |
-
}
|
75 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
common/src/Tribe/Utils/Plugins.php
CHANGED
@@ -16,7 +16,7 @@ class Tribe__Utils__Plugins {
|
|
16 |
* @return array Plugin data; keys match capitalized file header declarations.
|
17 |
*/
|
18 |
public static function get_plugin_data( $plugin_file ) {
|
19 |
-
$headers =
|
20 |
'Name' => 'Plugin Name',
|
21 |
'PluginURI' => 'Plugin URI',
|
22 |
'Version' => 'Version',
|
@@ -28,7 +28,7 @@ class Tribe__Utils__Plugins {
|
|
28 |
'TextDomain' => 'Text Domain',
|
29 |
'DomainPath' => 'Domain Path',
|
30 |
'Network' => 'Network',
|
31 |
-
|
32 |
|
33 |
/**
|
34 |
* Filter which header keys passed to get_file_data().
|
@@ -65,7 +65,7 @@ class Tribe__Utils__Plugins {
|
|
65 |
$full_list = array_merge( $full_list, wp_get_active_network_plugins() );
|
66 |
}
|
67 |
|
68 |
-
$filtered_list =
|
69 |
|
70 |
foreach ( $full_list as $plugin ) {
|
71 |
$base = plugin_basename( $plugin );
|
16 |
* @return array Plugin data; keys match capitalized file header declarations.
|
17 |
*/
|
18 |
public static function get_plugin_data( $plugin_file ) {
|
19 |
+
$headers = array(
|
20 |
'Name' => 'Plugin Name',
|
21 |
'PluginURI' => 'Plugin URI',
|
22 |
'Version' => 'Version',
|
28 |
'TextDomain' => 'Text Domain',
|
29 |
'DomainPath' => 'Domain Path',
|
30 |
'Network' => 'Network',
|
31 |
+
);
|
32 |
|
33 |
/**
|
34 |
* Filter which header keys passed to get_file_data().
|
65 |
$full_list = array_merge( $full_list, wp_get_active_network_plugins() );
|
66 |
}
|
67 |
|
68 |
+
$filtered_list = array();
|
69 |
|
70 |
foreach ( $full_list as $plugin ) {
|
71 |
$base = plugin_basename( $plugin );
|
common/src/Tribe/Utils/Post_Collection.php
CHANGED
@@ -5,24 +5,12 @@
|
|
5 |
* @since 4.9.5
|
6 |
*/
|
7 |
|
8 |
-
use Tribe\Traits\With_Post_Attribute_Detection;
|
9 |
-
|
10 |
/**
|
11 |
* Class Tribe__Utils__Post_Collection
|
12 |
*
|
13 |
* @since 4.9.5
|
14 |
*/
|
15 |
class Tribe__Utils__Post_Collection extends Tribe__Utils__Collection {
|
16 |
-
use With_Post_Attribute_Detection;
|
17 |
-
|
18 |
-
/**
|
19 |
-
* A list of the taxonomies supported by the post types in the collection.
|
20 |
-
*
|
21 |
-
* @since 4.12.6
|
22 |
-
*
|
23 |
-
* @var array<string>
|
24 |
-
*/
|
25 |
-
protected $taxonomies;
|
26 |
|
27 |
/**
|
28 |
* Tribe__Utils__Post_Collection constructor.
|
@@ -36,235 +24,6 @@ class Tribe__Utils__Post_Collection extends Tribe__Utils__Collection {
|
|
36 |
parent::__construct( array_filter( array_map( 'get_post', $items ) ) );
|
37 |
}
|
38 |
|
39 |
-
/**
|
40 |
-
* Plucks fields from the posts in the collection creating a map using a field value as key and one
|
41 |
-
* or more fields as values.
|
42 |
-
*
|
43 |
-
* Note: the method does not make any check on the uniqueness of the fields used as keys, e.g. this will
|
44 |
-
* probably not return what intended: `$collection->pluck_combine( 'post_status', 'post_title' );`.
|
45 |
-
* If there's a chance of the key fields not being unique, then use `#` as key field to simply return an
|
46 |
-
* array of plucked values.
|
47 |
-
*
|
48 |
-
* @since 4.12.6
|
49 |
-
*
|
50 |
-
* @param string $key_field The field to key the return map by, or `#` to use
|
51 |
-
* progressive integers to key the return value. Use fields
|
52 |
-
* as keys only when their uniqueness is sure.
|
53 |
-
* @param string|array<string>|array<array> $value_fields Either a single field name to populate the values with;
|
54 |
-
* a list of fields, each plucked with default settings;
|
55 |
-
* a map of fields to fetch, each defining a `single` and
|
56 |
-
* `args` key to define the pluck `$single` and `$args`
|
57 |
-
* parameters where applicable.
|
58 |
-
* Additionally an `as` parameter can be specified to alias
|
59 |
-
* the field in the results.
|
60 |
-
* If the only requirement is to alias fields, just use a
|
61 |
-
* flat map like `[ <orig_key_1> => <alias_1>, ... ]`.
|
62 |
-
*
|
63 |
-
* @return array<int|string,string|array> A list of plucked fields or a map of plucked fields keyed by the
|
64 |
-
* specified field.
|
65 |
-
*/
|
66 |
-
public function pluck_combine( $key_field = '#', $value_fields = 'post_title' ) {
|
67 |
-
$value_req_is_array = is_array( $value_fields );
|
68 |
-
$value_fields = (array) $value_fields;
|
69 |
-
$rows = [];
|
70 |
-
$field_names = [];
|
71 |
-
$field_index = 0;
|
72 |
-
foreach ( $value_fields as $k => $field ) {
|
73 |
-
if ( is_string( $k ) && is_string( $field ) ) {
|
74 |
-
$single = true;
|
75 |
-
$args = [];
|
76 |
-
$field_name = $field;
|
77 |
-
$pluck = $k;
|
78 |
-
} else {
|
79 |
-
list( $as, $single, $args ) = $this->parse_field_args( $field );
|
80 |
-
$field = is_array( $field ) ? $k : $field;
|
81 |
-
$field_name = null === $as ? $field : $as;
|
82 |
-
$pluck = $field;
|
83 |
-
}
|
84 |
-
$field_names[ $field_index ] = $field_name;
|
85 |
-
$rows[ $field_name ] = $this->pluck( $pluck, $single, $args );
|
86 |
-
$field_index ++;
|
87 |
-
}
|
88 |
-
$values = [];
|
89 |
-
|
90 |
-
// Build a list with only numeric keys and string values.
|
91 |
-
$fields_list = array_replace(
|
92 |
-
array_filter(
|
93 |
-
array_filter( $value_fields, 'is_string' ),
|
94 |
-
'is_numeric',
|
95 |
-
ARRAY_FILTER_USE_KEY
|
96 |
-
),
|
97 |
-
$field_names
|
98 |
-
);
|
99 |
-
|
100 |
-
for ( $i = 0, $count = count( $this->items ); $i < $count; $i ++ ) {
|
101 |
-
$values[ $i ] = array_combine( $fields_list, array_column( $rows, $i ) );
|
102 |
-
}
|
103 |
-
|
104 |
-
if ( ! $value_req_is_array ) {
|
105 |
-
$values = array_column( $values, reset( $fields_list ) );
|
106 |
-
}
|
107 |
-
|
108 |
-
// If the key field is `#` then use a progressive number as key, else use the specified field.
|
109 |
-
$keys = '#' === $key_field
|
110 |
-
? range( 0, count( $this->items ) - 1 )
|
111 |
-
: $this->pluck( $key_field, true );
|
112 |
-
|
113 |
-
return array_combine( $keys, $values );
|
114 |
-
}
|
115 |
-
|
116 |
-
/**
|
117 |
-
* Parses a single field request to extract the `$single` and `$args` parameters from it.
|
118 |
-
*
|
119 |
-
* @since 4.12.6
|
120 |
-
*
|
121 |
-
* @param string|array<string,string|array> $field The field name or the field arguments map.
|
122 |
-
*
|
123 |
-
* @return array<string,string,array> The `$as`, `$single` and `$args` parameters extracted from the field.
|
124 |
-
*/
|
125 |
-
protected function parse_field_args( $field ) {
|
126 |
-
$field = (array) $field;
|
127 |
-
|
128 |
-
$as = isset( $field['as'] )
|
129 |
-
? (string) $field['as']
|
130 |
-
: null;
|
131 |
-
$single = isset( $field['single'] )
|
132 |
-
? (bool) $field['single']
|
133 |
-
: true;
|
134 |
-
$args = isset( $field['args'] )
|
135 |
-
? (array) $field['args']
|
136 |
-
: null;
|
137 |
-
|
138 |
-
return [ $as, $single, $args ];
|
139 |
-
}
|
140 |
-
|
141 |
-
/**
|
142 |
-
* Plucks a post field, a taxonomy or a custom field from the collection.
|
143 |
-
*
|
144 |
-
* @since 4.12.6
|
145 |
-
*
|
146 |
-
* @param string $key The name of the field to pluck; the method will try to detect the type of field
|
147 |
-
* from its name. If any issues might arise due to fields of different types with the
|
148 |
-
* same name, then use the `pluck_<type>` methods directly.
|
149 |
-
* @param bool $single Whether to pluck a single taxonomy term or custom fields or an array of all the taxonomy
|
150 |
-
* terms or custom fields for each post.
|
151 |
-
* @param array $args A list of n optional arguments that will be passed down to the `pluck_<type>` methods.
|
152 |
-
* Currently only the the `pluck_taxonomy` will support one more argument to define the
|
153 |
-
* query arguments for the term query.
|
154 |
-
*
|
155 |
-
* @return array<string>|array<array> Either an array of plucked fields when plucking post fields or single
|
156 |
-
* custom fields or taxonomy terms, or an array of arrays, each one a list
|
157 |
-
* of all the taxonomy terms or custom fields entries for each post.
|
158 |
-
*/
|
159 |
-
public function pluck( $key, $single = true, array $args = null ) {
|
160 |
-
$type = $this->detect_field_type( $key );
|
161 |
-
|
162 |
-
switch ( $type ) {
|
163 |
-
case 'post_field':
|
164 |
-
return $this->pluck_field( $key );
|
165 |
-
break;
|
166 |
-
case 'taxonomy':
|
167 |
-
return $this->pluck_taxonomy( $key, $single, $args );
|
168 |
-
break;
|
169 |
-
default:
|
170 |
-
return $this->pluck_meta( $key, $single );
|
171 |
-
break;
|
172 |
-
}
|
173 |
-
}
|
174 |
-
|
175 |
-
/**
|
176 |
-
* Detects the type of a post field from its name.
|
177 |
-
*
|
178 |
-
* @since 4.12.6
|
179 |
-
*
|
180 |
-
* @param string $key The name of the field to check.
|
181 |
-
*
|
182 |
-
* @return string The type of field detected for the key, either `post_field`, `taxonomy` or `custom_field`.
|
183 |
-
*/
|
184 |
-
protected function detect_field_type( $key ) {
|
185 |
-
if ( $this->is_a_post_field( $key ) ) {
|
186 |
-
return 'post_field';
|
187 |
-
}
|
188 |
-
|
189 |
-
// Init taxonomies as late as possible and only once.
|
190 |
-
$this->init_taxonomies();
|
191 |
-
|
192 |
-
if ( $this->is_a_taxonomy( $key ) ) {
|
193 |
-
return 'taxonomy';
|
194 |
-
}
|
195 |
-
|
196 |
-
return 'custom_field';
|
197 |
-
}
|
198 |
-
|
199 |
-
/**
|
200 |
-
* Initialize the post collection taxonomies by filling up the `$taxonomies` property.
|
201 |
-
*
|
202 |
-
* Note the collection will use the first post in the collection to fill the taxonomies array,
|
203 |
-
* this assumes the collection is homogeneous in its post types.
|
204 |
-
*
|
205 |
-
* @since 4.12.6
|
206 |
-
*/
|
207 |
-
protected function init_taxonomies() {
|
208 |
-
if ( ! empty( $this->taxonomies ) ) {
|
209 |
-
// Already set up, return.
|
210 |
-
return;
|
211 |
-
}
|
212 |
-
|
213 |
-
if ( empty( $this->items ) ) {
|
214 |
-
// We cannot detect taxonomies from an empty list of items.
|
215 |
-
$this->taxonomies = [];
|
216 |
-
|
217 |
-
return;
|
218 |
-
}
|
219 |
-
|
220 |
-
// Use the first post to detect the taxonomies.
|
221 |
-
$this->taxonomies = get_object_taxonomies( reset( $this->items ), 'names' );
|
222 |
-
}
|
223 |
-
|
224 |
-
/**
|
225 |
-
* Plucks a post field from all posts in the collection.
|
226 |
-
*
|
227 |
-
* Note: there is no check on the name of the plucked post field: if a non-existing post field is requested, then
|
228 |
-
* the method will return an empty array.
|
229 |
-
*
|
230 |
-
* @since 4.12.6
|
231 |
-
*
|
232 |
-
* @param string $field The name of the post field to pluck.
|
233 |
-
*
|
234 |
-
* @return array<string> A list of the plucked post fields from each item in the collection.
|
235 |
-
*/
|
236 |
-
public function pluck_field( $field ) {
|
237 |
-
return wp_list_pluck( $this->items, $field );
|
238 |
-
}
|
239 |
-
|
240 |
-
/**
|
241 |
-
* Plucks taxonomy terms assigned to the posts in the collection.
|
242 |
-
*
|
243 |
-
* Note: there is no check on the taxonomy being an existing one or not; that responsibility
|
244 |
-
* is on the user code.
|
245 |
-
*
|
246 |
-
* @since 4.12.6
|
247 |
-
*
|
248 |
-
* @param string $taxonomy The name of the post taxonomy to pluck terms for.
|
249 |
-
* @param bool $single Whether to return only the first results or all of them.
|
250 |
-
* @param array<string,string|array> $args A set of arguments as supported by the `WP_Term_Query::__construct`
|
251 |
-
* method.
|
252 |
-
*
|
253 |
-
* @return array<mixed>|array<array> Either an array of the requested results if `$single` is `true`
|
254 |
-
* or an array of arrays if `$single` is `false`.
|
255 |
-
*/
|
256 |
-
public function pluck_taxonomy( $taxonomy, $single = true, array $args = null ) {
|
257 |
-
$plucked = [];
|
258 |
-
$args = null === $args ? [ 'fields' => 'names' ] : $args;
|
259 |
-
|
260 |
-
foreach ( $this as $item ) {
|
261 |
-
$terms = wp_get_object_terms( $item->ID, $taxonomy, $args );
|
262 |
-
$plucked[] = $single ? reset( $terms ) : $terms;
|
263 |
-
}
|
264 |
-
|
265 |
-
return $plucked;
|
266 |
-
}
|
267 |
-
|
268 |
/**
|
269 |
* Plucks a meta key for all elements in the collection.
|
270 |
*
|
@@ -281,7 +40,7 @@ class Tribe__Utils__Post_Collection extends Tribe__Utils__Collection {
|
|
281 |
* string value.
|
282 |
*/
|
283 |
public function pluck_meta( $meta_key, $single = true ) {
|
284 |
-
$plucked =
|
285 |
|
286 |
foreach ( $this as $item ) {
|
287 |
$plucked[] = get_post_meta( $item->ID, $meta_key, $single );
|
@@ -289,4 +48,4 @@ class Tribe__Utils__Post_Collection extends Tribe__Utils__Collection {
|
|
289 |
|
290 |
return $plucked;
|
291 |
}
|
292 |
-
}
|
5 |
* @since 4.9.5
|
6 |
*/
|
7 |
|
|
|
|
|
8 |
/**
|
9 |
* Class Tribe__Utils__Post_Collection
|
10 |
*
|
11 |
* @since 4.9.5
|
12 |
*/
|
13 |
class Tribe__Utils__Post_Collection extends Tribe__Utils__Collection {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
14 |
|
15 |
/**
|
16 |
* Tribe__Utils__Post_Collection constructor.
|
24 |
parent::__construct( array_filter( array_map( 'get_post', $items ) ) );
|
25 |
}
|
26 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
27 |
/**
|
28 |
* Plucks a meta key for all elements in the collection.
|
29 |
*
|
40 |
* string value.
|
41 |
*/
|
42 |
public function pluck_meta( $meta_key, $single = true ) {
|
43 |
+
$plucked = array();
|
44 |
|
45 |
foreach ( $this as $item ) {
|
46 |
$plucked[] = get_post_meta( $item->ID, $meta_key, $single );
|
48 |
|
49 |
return $plucked;
|
50 |
}
|
51 |
+
}
|
common/src/Tribe/Utils/Post_Root_Pool.php
CHANGED
@@ -132,8 +132,8 @@ class Tribe__Utils__Post_Root_Pool {
|
|
132 |
protected function maybe_init_pool() {
|
133 |
self::$prefix_pool = get_transient( $this->pool_transient_name );
|
134 |
if ( self::$prefix_pool === false ) {
|
135 |
-
self::$prefix_pool =
|
136 |
-
set_transient( $this->pool_transient_name,
|
137 |
}
|
138 |
}
|
139 |
|
132 |
protected function maybe_init_pool() {
|
133 |
self::$prefix_pool = get_transient( $this->pool_transient_name );
|
134 |
if ( self::$prefix_pool === false ) {
|
135 |
+
self::$prefix_pool = array();
|
136 |
+
set_transient( $this->pool_transient_name, array() );
|
137 |
}
|
138 |
}
|
139 |
|
common/src/Tribe/Utils/Strings.php
DELETED
@@ -1,65 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* String Utilities
|
4 |
-
*
|
5 |
-
* @since 4.12.1
|
6 |
-
* @package Tribe\Utils
|
7 |
-
*/
|
8 |
-
|
9 |
-
namespace Tribe\Utils;
|
10 |
-
|
11 |
-
/**
|
12 |
-
* Class Strings
|
13 |
-
*
|
14 |
-
* @since 4.12.1
|
15 |
-
*
|
16 |
-
* @package Tribe\Utils
|
17 |
-
*/
|
18 |
-
class Strings {
|
19 |
-
|
20 |
-
/**
|
21 |
-
* Replace the first occurrence of a given value in the string.
|
22 |
-
*
|
23 |
-
* @since 4.12.1
|
24 |
-
*
|
25 |
-
* @param string $search The string to search for and replace.
|
26 |
-
* @param string $replace The replacement string.
|
27 |
-
* @param string $subject The string to do the search and replace from.
|
28 |
-
*
|
29 |
-
* @return string The string with the first occurrence of a given value replaced.
|
30 |
-
*/
|
31 |
-
public static function replace_first( $search, $replace, $subject ) {
|
32 |
-
if ( '' === $search ) {
|
33 |
-
return $subject;
|
34 |
-
}
|
35 |
-
|
36 |
-
$position = strpos( $subject, $search );
|
37 |
-
|
38 |
-
if ( $position !== false ) {
|
39 |
-
return substr_replace( $subject, $replace, $position, strlen( $search ) );
|
40 |
-
}
|
41 |
-
|
42 |
-
return $subject;
|
43 |
-
}
|
44 |
-
|
45 |
-
/**
|
46 |
-
* Replace the last occurrence of a given value in the string.
|
47 |
-
*
|
48 |
-
* @since 4.12.1
|
49 |
-
*
|
50 |
-
* @param string $search The string to search for and replace.
|
51 |
-
* @param string $replace The replacement string.
|
52 |
-
* @param string $subject The string to do the search and replace from.
|
53 |
-
*
|
54 |
-
* @return string The string with the last occurrence of a given value replaced.
|
55 |
-
*/
|
56 |
-
public static function replace_last( $search, $replace, $subject ) {
|
57 |
-
$position = strrpos( $subject, $search );
|
58 |
-
|
59 |
-
if ( $position !== false ) {
|
60 |
-
return substr_replace( $subject, $replace, $position, strlen( $search ) );
|
61 |
-
}
|
62 |
-
|
63 |
-
return $subject;
|
64 |
-
}
|
65 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
common/src/Tribe/Utils/Taxonomy.php
DELETED
@@ -1,126 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace Tribe\Utils;
|
4 |
-
|
5 |
-
/**
|
6 |
-
* Class Taxonomy.
|
7 |
-
*
|
8 |
-
* @since 4.13.0
|
9 |
-
*
|
10 |
-
* @package Tribe\Utils
|
11 |
-
*/
|
12 |
-
class Taxonomy {
|
13 |
-
/**
|
14 |
-
* Match any operand.
|
15 |
-
*
|
16 |
-
* @since 4.13.0
|
17 |
-
* @since 4.13.0
|
18 |
-
*
|
19 |
-
* @var string
|
20 |
-
*/
|
21 |
-
const OPERAND_OR = 'OR';
|
22 |
-
|
23 |
-
/**
|
24 |
-
* Match all operand.
|
25 |
-
*
|
26 |
-
* @since 4.13.0
|
27 |
-
*
|
28 |
-
* @var string
|
29 |
-
*/
|
30 |
-
const OPERAND_AND = 'AND';
|
31 |
-
|
32 |
-
/**
|
33 |
-
* Default operand for taxonomy filters.
|
34 |
-
*
|
35 |
-
* @since 4.13.0
|
36 |
-
*
|
37 |
-
* @var string
|
38 |
-
*/
|
39 |
-
const DEFAULT_OPERAND = self::OPERAND_OR;
|
40 |
-
|
41 |
-
/**
|
42 |
-
* Translates a given argument to repository arguments.
|
43 |
-
*
|
44 |
-
* @since 4.13.0
|
45 |
-
*
|
46 |
-
* @param string $taxonomy Which taxonomy we are using to setup.
|
47 |
-
* @param string|array $terms Which terms we are going to use here.
|
48 |
-
* @param string $operand Which is the operand we should use.
|
49 |
-
*
|
50 |
-
* @return array A fully qualified `tax_query` array, merge using `array_merge_recursively`.
|
51 |
-
*/
|
52 |
-
public static function translate_to_repository_args( $taxonomy, $terms, $operand = self::OPERAND_OR ) {
|
53 |
-
$tax_query = [];
|
54 |
-
// Prevent empty values from even trying.
|
55 |
-
if ( empty( $taxonomy ) ) {
|
56 |
-
return $tax_query;
|
57 |
-
}
|
58 |
-
|
59 |
-
// Prevent empty values from even trying.
|
60 |
-
if ( empty( $terms ) ) {
|
61 |
-
return $tax_query;
|
62 |
-
}
|
63 |
-
|
64 |
-
$repo = tribe_events();
|
65 |
-
|
66 |
-
$operation = static::OPERAND_AND === $operand ? 'term_and' : 'term_in';
|
67 |
-
|
68 |
-
$repo->by( $operation, $taxonomy, $terms );
|
69 |
-
|
70 |
-
// This will only build the query not execute it.
|
71 |
-
$built_query = $repo->build_query();
|
72 |
-
|
73 |
-
if ( ! empty( $built_query->query_vars['tax_query'] ) ) {
|
74 |
-
$tax_query = $built_query->query_vars['tax_query'];
|
75 |
-
}
|
76 |
-
|
77 |
-
return $tax_query;
|
78 |
-
}
|
79 |
-
|
80 |
-
/**
|
81 |
-
* Transform all Term IDs and Slugs into IDs of existing terms in a given taxonomy.
|
82 |
-
*
|
83 |
-
* @since 4.13.0
|
84 |
-
*
|
85 |
-
* @param string|int|array $terms Terms to be cleaned up.
|
86 |
-
* @param string $taxonomy Which taxonomy we are querying for.
|
87 |
-
*
|
88 |
-
* @return array List of IDs of terms.
|
89 |
-
*/
|
90 |
-
public static function normalize_to_term_ids( $terms, $taxonomy ) {
|
91 |
-
if ( empty( $terms ) ) {
|
92 |
-
return $terms;
|
93 |
-
}
|
94 |
-
|
95 |
-
/**
|
96 |
-
* Allow filtering of the needle for splitting terms, by default it will be a comma.
|
97 |
-
*
|
98 |
-
* @since 4.13.0
|
99 |
-
*
|
100 |
-
* @param string $needle Defaults to a comma. Which character that we will split terms by.
|
101 |
-
* @param string|array $terms Terms string that we will split by the needle filtered.
|
102 |
-
* @param string $taxonomy Which taxonomy this will be for.
|
103 |
-
*/
|
104 |
-
$needle = apply_filters( 'tribe_normalize_to_term_ids_needle', ',', $terms, $taxonomy );
|
105 |
-
if ( is_string( $terms ) && false !== strpos( $terms, $needle ) ) {
|
106 |
-
$terms = array_map( 'trim', explode( $needle, $terms ) );
|
107 |
-
}
|
108 |
-
|
109 |
-
$terms = array_map( static function ( $param ) use ( $taxonomy ) {
|
110 |
-
$param = preg_replace( '/^#/', '', $param );
|
111 |
-
$term_by = is_numeric( $param ) ? 'ID' : 'slug';
|
112 |
-
$term = get_term_by( $term_by, $param, $taxonomy );
|
113 |
-
|
114 |
-
if ( ! $term instanceof \WP_Term ) {
|
115 |
-
return false;
|
116 |
-
}
|
117 |
-
|
118 |
-
return $term->term_id;
|
119 |
-
}, (array) $terms );
|
120 |
-
|
121 |
-
$terms = array_filter( $terms );
|
122 |
-
$terms = array_unique( $terms );
|
123 |
-
|
124 |
-
return $terms;
|
125 |
-
}
|
126 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
common/src/Tribe/Validate.php
CHANGED
@@ -57,7 +57,7 @@ if ( ! class_exists( 'Tribe__Validate' ) ) {
|
|
57 |
* @param array $field The field object to validate
|
58 |
* @param mixed $value The value to validate
|
59 |
*/
|
60 |
-
public function __construct( $field_id, $field, $value, $additional_args =
|
61 |
|
62 |
// prepare object properties
|
63 |
$this->result = new stdClass;
|
@@ -96,7 +96,7 @@ if ( ! class_exists( 'Tribe__Validate' ) ) {
|
|
96 |
if ( ( ! isset( $_POST[ $field_id ] ) || ! $_POST[ $field_id ] || $_POST[ $field_id ] == '' ) && isset( $this->field['can_be_empty'] ) && $this->field['can_be_empty'] ) {
|
97 |
$this->result->valid = true;
|
98 |
} else {
|
99 |
-
call_user_func(
|
100 |
}
|
101 |
} else {
|
102 |
// invalid validation type set, validation fails
|
@@ -291,7 +291,7 @@ if ( ! class_exists( 'Tribe__Validate' ) ) {
|
|
291 |
return;
|
292 |
}
|
293 |
|
294 |
-
$this->value = is_array( $this->value ) ? $this->value :
|
295 |
|
296 |
foreach ( $this->value as $val ) {
|
297 |
if ( array_key_exists( $val, $this->field['options'] ) ) {
|
@@ -312,10 +312,10 @@ if ( ! class_exists( 'Tribe__Validate' ) ) {
|
|
312 |
*/
|
313 |
public function options_with_label() {
|
314 |
if ( array_key_exists( $this->value, $this->field['options'] ) ) {
|
315 |
-
$this->value = ( $this->value === 0 ) ? false :
|
316 |
$this->value,
|
317 |
$this->field['options'][ $this->value ],
|
318 |
-
|
319 |
$this->result->valid = true;
|
320 |
} else {
|
321 |
$this->result->valid = false;
|
@@ -465,7 +465,7 @@ if ( ! class_exists( 'Tribe__Validate' ) ) {
|
|
465 |
if ( ! isset( $country[0] ) || ! isset( $country[1] ) ) {
|
466 |
$this->result->valid = false;
|
467 |
$this->result->error = sprintf( esc_html__( 'Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom.', 'tribe-common' ), $this->label );
|
468 |
-
$this->value = wp_kses( $this->value,
|
469 |
|
470 |
return;
|
471 |
}
|
57 |
* @param array $field The field object to validate
|
58 |
* @param mixed $value The value to validate
|
59 |
*/
|
60 |
+
public function __construct( $field_id, $field, $value, $additional_args = array() ) {
|
61 |
|
62 |
// prepare object properties
|
63 |
$this->result = new stdClass;
|
96 |
if ( ( ! isset( $_POST[ $field_id ] ) || ! $_POST[ $field_id ] || $_POST[ $field_id ] == '' ) && isset( $this->field['can_be_empty'] ) && $this->field['can_be_empty'] ) {
|
97 |
$this->result->valid = true;
|
98 |
} else {
|
99 |
+
call_user_func( array( $this, $this->type ) ); // run the validation
|
100 |
}
|
101 |
} else {
|
102 |
// invalid validation type set, validation fails
|
291 |
return;
|
292 |
}
|
293 |
|
294 |
+
$this->value = is_array( $this->value ) ? $this->value : array( $this->value );
|
295 |
|
296 |
foreach ( $this->value as $val ) {
|
297 |
if ( array_key_exists( $val, $this->field['options'] ) ) {
|
312 |
*/
|
313 |
public function options_with_label() {
|
314 |
if ( array_key_exists( $this->value, $this->field['options'] ) ) {
|
315 |
+
$this->value = ( $this->value === 0 ) ? false : array(
|
316 |
$this->value,
|
317 |
$this->field['options'][ $this->value ],
|
318 |
+
);
|
319 |
$this->result->valid = true;
|
320 |
} else {
|
321 |
$this->result->valid = false;
|
465 |
if ( ! isset( $country[0] ) || ! isset( $country[1] ) ) {
|
466 |
$this->result->valid = false;
|
467 |
$this->result->error = sprintf( esc_html__( 'Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom.', 'tribe-common' ), $this->label );
|
468 |
+
$this->value = wp_kses( $this->value, array() );
|
469 |
|
470 |
return;
|
471 |
}
|
common/src/Tribe/Validator/Base.php
CHANGED
@@ -94,7 +94,7 @@ class Tribe__Validator__Base implements Tribe__Validator__Interface {
|
|
94 |
$sep = is_string( $sep ) ? $sep : ',';
|
95 |
$list = Tribe__Utils__Array::list_to_array( $list, $sep );
|
96 |
|
97 |
-
$valid = array_filter( $list,
|
98 |
|
99 |
return ! empty( $valid ) && count( $valid ) === count( $list );
|
100 |
}
|
94 |
$sep = is_string( $sep ) ? $sep : ',';
|
95 |
$list = Tribe__Utils__Array::list_to_array( $list, $sep );
|
96 |
|
97 |
+
$valid = array_filter( $list, array( $this, 'is_positive_int' ) );
|
98 |
|
99 |
return ! empty( $valid ) && count( $valid ) === count( $list );
|
100 |
}
|
common/src/Tribe/View_Helpers.php
CHANGED
@@ -56,21 +56,21 @@ if ( ! class_exists( 'Tribe__View_Helpers' ) ) {
|
|
56 |
natsort( $countries );
|
57 |
|
58 |
// Placeholder option ('Select a Country') first by default
|
59 |
-
$select_country =
|
60 |
$countries = $select_country + $countries;
|
61 |
|
62 |
if ( ( $postId || $useDefault ) ) {
|
63 |
$countryValue = get_post_meta( $postId, '_EventCountry', true );
|
64 |
if ( $countryValue ) {
|
65 |
-
$defaultCountry =
|
66 |
} else {
|
67 |
$defaultCountry = tribe_get_default_value( 'country' );
|
68 |
}
|
69 |
if ( $defaultCountry && $defaultCountry[0] != '' ) {
|
70 |
$selectCountry = array_shift( $countries );
|
71 |
asort( $countries );
|
72 |
-
$countries =
|
73 |
-
$countries =
|
74 |
array_unique( $countries );
|
75 |
}
|
76 |
}
|
@@ -182,7 +182,7 @@ if ( ! class_exists( 'Tribe__View_Helpers' ) ) {
|
|
182 |
* @return array The hours array.
|
183 |
*/
|
184 |
private static function hours() {
|
185 |
-
$hours =
|
186 |
$rangeMax = self::is_24hr_format() ? 23 : 12;
|
187 |
$rangeStart = $rangeMax > 12 ? 0 : 1;
|
188 |
foreach ( range( $rangeStart, $rangeMax ) as $hour ) {
|
@@ -237,7 +237,7 @@ if ( ! class_exists( 'Tribe__View_Helpers' ) ) {
|
|
237 |
* @return array The minutes array.
|
238 |
*/
|
239 |
private static function minutes( $exact_minute = 0 ) {
|
240 |
-
$minutes =
|
241 |
|
242 |
// The exact minute should be an absint between 0 and 59
|
243 |
$exact_minute = absint( $exact_minute );
|
@@ -282,10 +282,10 @@ if ( ! class_exists( 'Tribe__View_Helpers' ) ) {
|
|
282 |
public static function getMeridianOptions( $date = '', $isStart = false ) {
|
283 |
if ( strstr( get_option( 'time_format', Tribe__Date_Utils::TIMEFORMAT ), 'A' ) ) {
|
284 |
$a = 'A';
|
285 |
-
$meridians =
|
286 |
} else {
|
287 |
$a = 'a';
|
288 |
-
$meridians =
|
289 |
}
|
290 |
if ( empty( $date ) ) {
|
291 |
$meridian = ( $isStart ) ? $meridians[0] : $meridians[1];
|
@@ -317,7 +317,7 @@ if ( ! class_exists( 'Tribe__View_Helpers' ) ) {
|
|
317 |
$current_year = (int) date_i18n( 'Y' );
|
318 |
$years_back = (int) apply_filters( 'tribe_years_to_go_back', 5, $current_year );
|
319 |
$years_forward = (int) apply_filters( 'tribe_years_to_go_forward', 5, $current_year );
|
320 |
-
$years =
|
321 |
for ( $i = $years_back; $i > 0; $i -- ) {
|
322 |
$year = $current_year - $i;
|
323 |
$years[] = $year;
|
@@ -337,7 +337,7 @@ if ( ! class_exists( 'Tribe__View_Helpers' ) ) {
|
|
337 |
* @return array The days array.
|
338 |
*/
|
339 |
public static function days( $totalDays ) {
|
340 |
-
$days =
|
341 |
foreach ( range( 1, $totalDays ) as $day ) {
|
342 |
$days[ $day ] = $day;
|
343 |
}
|
56 |
natsort( $countries );
|
57 |
|
58 |
// Placeholder option ('Select a Country') first by default
|
59 |
+
$select_country = array( '' => esc_html__( 'Select a Country:', 'tribe-common' ) );
|
60 |
$countries = $select_country + $countries;
|
61 |
|
62 |
if ( ( $postId || $useDefault ) ) {
|
63 |
$countryValue = get_post_meta( $postId, '_EventCountry', true );
|
64 |
if ( $countryValue ) {
|
65 |
+
$defaultCountry = array( array_search( $countryValue, $countries ), $countryValue );
|
66 |
} else {
|
67 |
$defaultCountry = tribe_get_default_value( 'country' );
|
68 |
}
|
69 |
if ( $defaultCountry && $defaultCountry[0] != '' ) {
|
70 |
$selectCountry = array_shift( $countries );
|
71 |
asort( $countries );
|
72 |
+
$countries = array( $defaultCountry[0] => $defaultCountry[1] ) + $countries;
|
73 |
+
$countries = array( '' => $selectCountry ) + $countries;
|
74 |
array_unique( $countries );
|
75 |
}
|
76 |
}
|
182 |
* @return array The hours array.
|
183 |
*/
|
184 |
private static function hours() {
|
185 |
+
$hours = array();
|
186 |
$rangeMax = self::is_24hr_format() ? 23 : 12;
|
187 |
$rangeStart = $rangeMax > 12 ? 0 : 1;
|
188 |
foreach ( range( $rangeStart, $rangeMax ) as $hour ) {
|
237 |
* @return array The minutes array.
|
238 |
*/
|
239 |
private static function minutes( $exact_minute = 0 ) {
|
240 |
+
$minutes = array();
|
241 |
|
242 |
// The exact minute should be an absint between 0 and 59
|
243 |
$exact_minute = absint( $exact_minute );
|
282 |
public static function getMeridianOptions( $date = '', $isStart = false ) {
|
283 |
if ( strstr( get_option( 'time_format', Tribe__Date_Utils::TIMEFORMAT ), 'A' ) ) {
|
284 |
$a = 'A';
|
285 |
+
$meridians = array( 'AM', 'PM' );
|
286 |
} else {
|
287 |
$a = 'a';
|
288 |
+
$meridians = array( 'am', 'pm' );
|
289 |
}
|
290 |
if ( empty( $date ) ) {
|
291 |
$meridian = ( $isStart ) ? $meridians[0] : $meridians[1];
|
317 |
$current_year = (int) date_i18n( 'Y' );
|
318 |
$years_back = (int) apply_filters( 'tribe_years_to_go_back', 5, $current_year );
|
319 |
$years_forward = (int) apply_filters( 'tribe_years_to_go_forward', 5, $current_year );
|
320 |
+
$years = array();
|
321 |
for ( $i = $years_back; $i > 0; $i -- ) {
|
322 |
$year = $current_year - $i;
|
323 |
$years[] = $year;
|
337 |
* @return array The days array.
|
338 |
*/
|
339 |
public static function days( $totalDays ) {
|
340 |
+
$days = array();
|
341 |
foreach ( range( 1, $totalDays ) as $day ) {
|
342 |
$days[ $day ] = $day;
|
343 |
}
|
common/src/Tribe/Widget/Manager.php
DELETED
@@ -1,97 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Widgets manager for Tribe plugins.
|
4 |
-
*
|
5 |
-
* @since 4.12.12
|
6 |
-
*
|
7 |
-
* @package Tribe\Widget
|
8 |
-
*/
|
9 |
-
|
10 |
-
namespace Tribe\Widget;
|
11 |
-
|
12 |
-
/**
|
13 |
-
* Class Widget Manager.
|
14 |
-
*
|
15 |
-
* @since 4.12.12
|
16 |
-
*
|
17 |
-
* @package Tribe\Widget
|
18 |
-
*/
|
19 |
-
class Manager {
|
20 |
-
|
21 |
-
/**
|
22 |
-
* Get the list of widgets available for handling.
|
23 |
-
*
|
24 |
-
* @since 4.12.12
|
25 |
-
*
|
26 |
-
* @return array An associative array of widgets in the shape `[ <slug> => <class> ]`.
|
27 |
-
*/
|
28 |
-
public function get_registered_widgets() {
|
29 |
-
$widgets = [];
|
30 |
-
|
31 |
-
/**
|
32 |
-
* Allow the registering of widgets from other plugins.
|
33 |
-
*
|
34 |
-
* @since 4.12.12
|
35 |
-
*
|
36 |
-
* @var array<string,string> An associative array of widgets in the shape `[ <slug> => <class> ]`.
|
37 |
-
*/
|
38 |
-
$widgets = apply_filters( 'tribe_widgets', $widgets );
|
39 |
-
|
40 |
-
return $widgets;
|
41 |
-
}
|
42 |
-
|
43 |
-
/**
|
44 |
-
* Verifies if a given widget slug is registered for handling.
|
45 |
-
*
|
46 |
-
* @since 4.12.12
|
47 |
-
*
|
48 |
-
* @param string $slug The widget slug we are checking for registration.
|
49 |
-
*
|
50 |
-
* @return bool Whether the widget is registered or not.
|
51 |
-
*/
|
52 |
-
public function is_widget_registered( $slug ) {
|
53 |
-
$registered_widgets = $this->get_registered_widgets();
|
54 |
-
|
55 |
-
return isset( $registered_widgets[ $slug ] );
|
56 |
-
}
|
57 |
-
|
58 |
-
/**
|
59 |
-
* Verifies if a given widget class name is registered for handling.
|
60 |
-
*
|
61 |
-
* @since 4.12.12
|
62 |
-
*
|
63 |
-
* @param string $class_name The widget class name we are checking for registration.
|
64 |
-
*
|
65 |
-
* @return bool Whether the widget is registered, by class.
|
66 |
-
*/
|
67 |
-
public function is_widget_registered_by_class( $class_name ) {
|
68 |
-
$registered_widgets = $this->get_registered_widgets();
|
69 |
-
|
70 |
-
return in_array( $class_name, $registered_widgets, true );
|
71 |
-
}
|
72 |
-
|
73 |
-
/**
|
74 |
-
* Add new widgets handler to ensure our list of widget slugs is registered by class name.
|
75 |
-
*
|
76 |
-
* @since 4.12.12
|
77 |
-
*/
|
78 |
-
public function register_widgets_with_wp() {
|
79 |
-
$registered_widgets = $this->get_registered_widgets();
|
80 |
-
|
81 |
-
// Add to WordPress all of the registered Widgets.
|
82 |
-
foreach ( $registered_widgets as $widget => $class_name ) {
|
83 |
-
register_widget( $class_name );
|
84 |
-
}
|
85 |
-
}
|
86 |
-
|
87 |
-
/**
|
88 |
-
* Remove Widget from WordPress widget register by class name.
|
89 |
-
*
|
90 |
-
* @since 4.12.12
|
91 |
-
*
|
92 |
-
* @param string $class_name The class name of the widget to unregister.
|
93 |
-
*/
|
94 |
-
public function unregister_widget_from_wp( $class_name ) {
|
95 |
-
unregister_widget( $class_name );
|
96 |
-
}
|
97 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
common/src/Tribe/Widget/Widget_Abstract.php
DELETED
@@ -1,874 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace Tribe\Widget;
|
4 |
-
|
5 |
-
use Tribe__Utils__Array as Arr;
|
6 |
-
use Tribe__Template;
|
7 |
-
|
8 |
-
/**
|
9 |
-
* The abstract base without Views that all widgets should implement.
|
10 |
-
*
|
11 |
-
* @since 4.12.12
|
12 |
-
*
|
13 |
-
* @package Tribe\Widget
|
14 |
-
*/
|
15 |
-
abstract class Widget_Abstract extends \WP_Widget implements Widget_Interface {
|
16 |
-
/**
|
17 |
-
* Prefix for WordPress registration of the widget.
|
18 |
-
*
|
19 |
-
* @since 4.13.0
|
20 |
-
*
|
21 |
-
* @var string
|
22 |
-
*/
|
23 |
-
const PREFIX = 'tribe-widget-';
|
24 |
-
|
25 |
-
/**
|
26 |
-
* Slug of the current widget.
|
27 |
-
*
|
28 |
-
* @since 4.13.0
|
29 |
-
*
|
30 |
-
* @var string
|
31 |
-
*/
|
32 |
-
protected static $widget_slug;
|
33 |
-
|
34 |
-
/**
|
35 |
-
* If this Widget was rendered on the screen, often useful for Assets.
|
36 |
-
*
|
37 |
-
* Every widget needs this to be defined internally otherwise it wont work.
|
38 |
-
*
|
39 |
-
* @since 4.13.0
|
40 |
-
*
|
41 |
-
* @var boolean
|
42 |
-
*/
|
43 |
-
protected static $widget_in_use;
|
44 |
-
|
45 |
-
/**
|
46 |
-
* An instance of template.
|
47 |
-
*
|
48 |
-
* @since 4.12.14
|
49 |
-
*
|
50 |
-
* @var Tribe__Template
|
51 |
-
*/
|
52 |
-
protected $admin_template;
|
53 |
-
|
54 |
-
/**
|
55 |
-
* Default arguments to be merged into final arguments of the widget.
|
56 |
-
*
|
57 |
-
* @since 4.12.12
|
58 |
-
*
|
59 |
-
* @var array<string,mixed>
|
60 |
-
*/
|
61 |
-
protected $default_arguments = [];
|
62 |
-
|
63 |
-
/**
|
64 |
-
* Sidebar arguments passed to the widget.
|
65 |
-
*
|
66 |
-
* @since 4.13.0
|
67 |
-
*
|
68 |
-
* @var array<string,mixed>
|
69 |
-
*/
|
70 |
-
protected $sidebar_arguments = [];
|
71 |
-
|
72 |
-
/**
|
73 |
-
* Array map allowing aliased widget arguments.
|
74 |
-
*
|
75 |
-
* The array keys are aliases of the array values (i.e. the "real" widget attributes to parse).
|
76 |
-
* Example array: [ 'alias' => 'canonical', 'from' => 'to', 'that' => 'becomes_this' ]
|
77 |
-
* Example widget usage: [some_tag alias=17 to='Fred'] will be parsed as [some_tag canonical=17 to='Fred']
|
78 |
-
*
|
79 |
-
* @since 4.12.12
|
80 |
-
*
|
81 |
-
* @var array<string,string>
|
82 |
-
*/
|
83 |
-
protected $aliased_arguments = [];
|
84 |
-
|
85 |
-
/**
|
86 |
-
* Array of callbacks for validation of arguments.
|
87 |
-
*
|
88 |
-
* @since 4.12.12
|
89 |
-
*
|
90 |
-
* @var array<string,callable>
|
91 |
-
*/
|
92 |
-
protected $validate_arguments_map = [];
|
93 |
-
|
94 |
-
/**
|
95 |
-
* Arguments of the current widget.
|
96 |
-
*
|
97 |
-
* @since 4.12.12
|
98 |
-
*
|
99 |
-
* @var array<string,mixed>
|
100 |
-
*/
|
101 |
-
protected $arguments = [];
|
102 |
-
|
103 |
-
/**
|
104 |
-
* Current set of Admin Fields used on the admin form.
|
105 |
-
*
|
106 |
-
* @since 4.13.0
|
107 |
-
*
|
108 |
-
* @var array<string,mixed>
|
109 |
-
*/
|
110 |
-
protected $admin_fields = [];
|
111 |
-
|
112 |
-
/**
|
113 |
-
* HTML content of the current widget.
|
114 |
-
*
|
115 |
-
* @since 4.12.12
|
116 |
-
*
|
117 |
-
* @var string
|
118 |
-
*/
|
119 |
-
protected $content;
|
120 |
-
|
121 |
-
/**
|
122 |
-
* {@inheritDoc}
|
123 |
-
*/
|
124 |
-
public function __construct( $id_base = '', $name = '', $widget_options = [], $control_options = [] ) {
|
125 |
-
/**
|
126 |
-
* For backwards compatibility purposes alone.
|
127 |
-
* @todo remove after 2021-08-01
|
128 |
-
*/
|
129 |
-
$this->slug = static::get_widget_slug();
|
130 |
-
|
131 |
-
parent::__construct(
|
132 |
-
$this->parse_id_base( $id_base ),
|
133 |
-
$this->parse_name( $name ),
|
134 |
-
$this->parse_widget_options( $widget_options ),
|
135 |
-
$this->parse_control_options( $control_options )
|
136 |
-
);
|
137 |
-
}
|
138 |
-
|
139 |
-
/**
|
140 |
-
* Parse the ID base sent to the __construct method.
|
141 |
-
*
|
142 |
-
* @since 4.13.0
|
143 |
-
*
|
144 |
-
* @param string $id_base The ID base that we will use for this Widget instance.
|
145 |
-
*
|
146 |
-
* @return string|null Parsed value given by the __construct.
|
147 |
-
*/
|
148 |
-
protected function parse_id_base( $id_base = null ) {
|
149 |
-
// When empty use the one default to the widget.
|
150 |
-
if ( empty( $id_base ) ) {
|
151 |
-
$id_base = static::PREFIX . static::get_widget_slug();
|
152 |
-
}
|
153 |
-
|
154 |
-
return $id_base;
|
155 |
-
}
|
156 |
-
|
157 |
-
/**
|
158 |
-
* Parse the ID base sent to the __construct method.
|
159 |
-
*
|
160 |
-
* @since 4.13.0
|
161 |
-
*
|
162 |
-
* @param string $name The ID base that we will use for this Widget instance.
|
163 |
-
*
|
164 |
-
* @return string Parsed value given by the __construct.
|
165 |
-
*/
|
166 |
-
protected function parse_name( $name = null ) {
|
167 |
-
// When empty use the one default to the widget.
|
168 |
-
if ( empty( $name ) ) {
|
169 |
-
$name = static::get_default_widget_name();
|
170 |
-
}
|
171 |
-
|
172 |
-
return $name;
|
173 |
-
}
|
174 |
-
|
175 |
-
/**
|
176 |
-
* Sets up the Widget name,
|
177 |
-
*
|
178 |
-
* @since 4.13.0
|
179 |
-
*
|
180 |
-
* @return string Returns the default widget name.
|
181 |
-
*/
|
182 |
-
public static function get_default_widget_name() {
|
183 |
-
return __( 'Widget', 'tribe-common' );
|
184 |
-
}
|
185 |
-
|
186 |
-
/**
|
187 |
-
* Parse the widget options base sent to the __construct method.
|
188 |
-
*
|
189 |
-
* @since 4.13.0
|
190 |
-
*
|
191 |
-
* @param array $widget_options The widget options base that we will use for this Widget instance.
|
192 |
-
*
|
193 |
-
* @return array Widget options that will be passed to the __construct.
|
194 |
-
*/
|
195 |
-
protected function parse_widget_options( $widget_options = [] ) {
|
196 |
-
// When empty use the one default to the widget.
|
197 |
-
if ( empty( $widget_options ) ) {
|
198 |
-
$widget_options = static::get_default_widget_options();
|
199 |
-
}
|
200 |
-
|
201 |
-
return $widget_options;
|
202 |
-
}
|
203 |
-
|
204 |
-
/**
|
205 |
-
* Gets the default widget options.
|
206 |
-
*
|
207 |
-
* @since 4.13.0
|
208 |
-
*
|
209 |
-
* @return array Default widget options.
|
210 |
-
*/
|
211 |
-
public static function get_default_widget_options() {
|
212 |
-
return [];
|
213 |
-
}
|
214 |
-
|
215 |
-
/**
|
216 |
-
* Parse the control options base sent to the __construct method.
|
217 |
-
*
|
218 |
-
* @since 4.13.0
|
219 |
-
*
|
220 |
-
* @param array $control_options The base control options passed to the construct method.
|
221 |
-
*
|
222 |
-
* @return array Parsed value given by the __construct.
|
223 |
-
*/
|
224 |
-
protected function parse_control_options( $control_options = [] ) {
|
225 |
-
// When empty use the one default to the widget.
|
226 |
-
if ( empty( $control_options ) ) {
|
227 |
-
$control_options = static::get_default_control_options();
|
228 |
-
}
|
229 |
-
|
230 |
-
return $control_options;
|
231 |
-
}
|
232 |
-
|
233 |
-
/**
|
234 |
-
* Gets the default control options.
|
235 |
-
*
|
236 |
-
* @since 4.13.0
|
237 |
-
*
|
238 |
-
* @return array Default control options.
|
239 |
-
*/
|
240 |
-
public static function get_default_control_options() {
|
241 |
-
return [];
|
242 |
-
}
|
243 |
-
|
244 |
-
/**
|
245 |
-
* {@inheritDoc}
|
246 |
-
*/
|
247 |
-
public static function get_widget_slug() {
|
248 |
-
return static::$widget_slug;
|
249 |
-
}
|
250 |
-
|
251 |
-
/**
|
252 |
-
* {@inheritDoc}
|
253 |
-
*/
|
254 |
-
public static function is_widget_in_use() {
|
255 |
-
return static::$widget_in_use;
|
256 |
-
}
|
257 |
-
|
258 |
-
/**
|
259 |
-
* {@inheritDoc}
|
260 |
-
*/
|
261 |
-
public static function widget_in_use( $toggle = true ) {
|
262 |
-
static::$widget_in_use = tribe_is_truthy( $toggle );
|
263 |
-
}
|
264 |
-
|
265 |
-
/**
|
266 |
-
* Setup the widget.
|
267 |
-
*
|
268 |
-
* @since 5.2.1
|
269 |
-
* @since 4.13.0 include $args and $instance params.
|
270 |
-
*
|
271 |
-
* @param array $args Display arguments including 'before_title', 'after_title',
|
272 |
-
* 'before_widget', and 'after_widget'.
|
273 |
-
* @param array $instance The settings for the particular instance of the widget.
|
274 |
-
*
|
275 |
-
* @return mixed
|
276 |
-
*/
|
277 |
-
abstract public function setup( $args = [], $instance = [] );
|
278 |
-
|
279 |
-
/**
|
280 |
-
* {@inheritDoc}
|
281 |
-
*/
|
282 |
-
public function form( $instance ) {
|
283 |
-
$this->setup( [], $instance );
|
284 |
-
|
285 |
-
// Specifically on the admin we force the admin fields into the arguments.
|
286 |
-
$this->arguments['admin_fields'] = $this->get_admin_fields();
|
287 |
-
|
288 |
-
$this->toggle_hooks( true );
|
289 |
-
|
290 |
-
$html = $this->get_admin_html( $this->get_arguments() );
|
291 |
-
|
292 |
-
$this->toggle_hooks( false );
|
293 |
-
return $html;
|
294 |
-
}
|
295 |
-
|
296 |
-
/**
|
297 |
-
* {@inheritDoc}
|
298 |
-
*/
|
299 |
-
public function widget( $args, $instance ) {
|
300 |
-
// Once the widget is rendered we trigger that it is in use.
|
301 |
-
static::widget_in_use( true );
|
302 |
-
|
303 |
-
$this->setup( $args, $instance );
|
304 |
-
|
305 |
-
$this->toggle_hooks( true );
|
306 |
-
|
307 |
-
$html = $this->get_html();
|
308 |
-
|
309 |
-
$this->toggle_hooks( false );
|
310 |
-
|
311 |
-
echo $html;
|
312 |
-
|
313 |
-
return $html;
|
314 |
-
}
|
315 |
-
|
316 |
-
/**
|
317 |
-
* Returns the rendered View HTML code.
|
318 |
-
*
|
319 |
-
* @since 4.12.12
|
320 |
-
*
|
321 |
-
* @return string
|
322 |
-
*/
|
323 |
-
abstract public function get_html();
|
324 |
-
|
325 |
-
/**
|
326 |
-
* {@inheritDoc}
|
327 |
-
*/
|
328 |
-
public function set_aliased_arguments( array $alias_map ) {
|
329 |
-
$this->aliased_arguments = Arr::filter_to_flat_scalar_associative_array( (array) $alias_map );
|
330 |
-
}
|
331 |
-
|
332 |
-
/**
|
333 |
-
* {@inheritDoc}
|
334 |
-
*/
|
335 |
-
public function get_aliased_arguments() {
|
336 |
-
return $this->aliased_arguments;
|
337 |
-
}
|
338 |
-
|
339 |
-
/**
|
340 |
-
* {@inheritDoc}
|
341 |
-
*/
|
342 |
-
public function parse_arguments( array $arguments ) {
|
343 |
-
$arguments = Arr::parse_associative_array_alias( (array) $arguments, (array) $this->get_aliased_arguments() );
|
344 |
-
|
345 |
-
return $this->validate_arguments( $arguments );
|
346 |
-
}
|
347 |
-
|
348 |
-
/**
|
349 |
-
* {@inheritDoc}
|
350 |
-
*/
|
351 |
-
public function validate_arguments( array $arguments ) {
|
352 |
-
$validate_arguments_map = $this->filter_validated_arguments_map( $this->get_validated_arguments_map() );
|
353 |
-
|
354 |
-
// Only overwrite methods that have a validation, the rest stay as-is.
|
355 |
-
foreach ( $validate_arguments_map as $key => $callback ) {
|
356 |
-
$arguments[ $key ] = $callback( Arr::get( $arguments, $key, null ) );
|
357 |
-
}
|
358 |
-
|
359 |
-
return $arguments;
|
360 |
-
}
|
361 |
-
|
362 |
-
/**
|
363 |
-
* {@inheritDoc}
|
364 |
-
*/
|
365 |
-
public function get_validated_arguments_map() {
|
366 |
-
return $this->validate_arguments_map;
|
367 |
-
}
|
368 |
-
|
369 |
-
/**
|
370 |
-
* {@inheritDoc}
|
371 |
-
*/
|
372 |
-
public function filter_validated_arguments_map( $validate_arguments_map = [] ) {
|
373 |
-
/**
|
374 |
-
* Applies a filter to the validation map for instance arguments.
|
375 |
-
*
|
376 |
-
* @since 4.12.12
|
377 |
-
*
|
378 |
-
* @param array<string,callable> $validate_arguments_map Current set of callbacks for arguments.
|
379 |
-
* @param static $instance The widget instance we are dealing with.
|
380 |
-
*/
|
381 |
-
$validate_arguments_map = apply_filters( 'tribe_widget_validate_arguments_map', $validate_arguments_map, $this );
|
382 |
-
|
383 |
-
$widget_slug = static::get_widget_slug();
|
384 |
-
|
385 |
-
/**
|
386 |
-
* Applies a filter to the validation map for instance arguments for a specific widget. Based on the widget slug of the widget
|
387 |
-
*
|
388 |
-
* @since 4.12.12
|
389 |
-
*
|
390 |
-
* @param array<string,callable> $validate_arguments_map Current set of callbacks for arguments.
|
391 |
-
* @param static $instance The widget instance we are dealing with.
|
392 |
-
*/
|
393 |
-
$validate_arguments_map = apply_filters( "tribe_widget_{$widget_slug}_validate_arguments_map", $validate_arguments_map, $this );
|
394 |
-
|
395 |
-
return $validate_arguments_map;
|
396 |
-
}
|
397 |
-
|
398 |
-
/**
|
399 |
-
* Sets up the widgets default admin fields.
|
400 |
-
*
|
401 |
-
* @since 4.12.14
|
402 |
-
*
|
403 |
-
* @return array<string,mixed> The array of widget admin fields.
|
404 |
-
*/
|
405 |
-
abstract protected function setup_admin_fields();
|
406 |
-
|
407 |
-
/**
|
408 |
-
* {@inheritDoc}
|
409 |
-
*/
|
410 |
-
public function get_admin_fields() {
|
411 |
-
$fields = $this->setup_admin_fields();
|
412 |
-
$arguments = $this->get_arguments();
|
413 |
-
$fields = $this->filter_admin_fields( $fields );
|
414 |
-
|
415 |
-
foreach ( $fields as $field_name => $field ) {
|
416 |
-
$fields[ $field_name ] = $this->get_admin_data( $arguments, $field_name, $field );
|
417 |
-
}
|
418 |
-
|
419 |
-
return $fields;
|
420 |
-
}
|
421 |
-
|
422 |
-
/**
|
423 |
-
* {@inheritDoc}
|
424 |
-
*/
|
425 |
-
public function filter_admin_fields( $admin_fields ) {
|
426 |
-
/**
|
427 |
-
* Applies a filter to a widget's admin fields.
|
428 |
-
*
|
429 |
-
* @since 4.12.14
|
430 |
-
*
|
431 |
-
* @param array<string,mixed> $admin_fields The array of widget admin fields.
|
432 |
-
* @param static $instance The widget instance we are dealing with.
|
433 |
-
*/
|
434 |
-
$admin_fields = apply_filters( 'tribe_widget_admin_fields', $admin_fields, $this );
|
435 |
-
|
436 |
-
$widget_slug = static::get_widget_slug();
|
437 |
-
|
438 |
-
/**
|
439 |
-
* Applies a filter to a widget's admin fields based on the widget slug of the widget.
|
440 |
-
*
|
441 |
-
* @since TBE
|
442 |
-
*
|
443 |
-
* @param array<string,mixed> $admin_fields The array of widget admin fields.
|
444 |
-
* @param static $instance The widget instance we are dealing with.
|
445 |
-
*/
|
446 |
-
$admin_fields = apply_filters( "tribe_widget_{$widget_slug}_admin_fields", $admin_fields, $this );
|
447 |
-
|
448 |
-
return $admin_fields;
|
449 |
-
}
|
450 |
-
|
451 |
-
/**
|
452 |
-
* {@inheritDoc}
|
453 |
-
*/
|
454 |
-
public function filter_updated_instance( $updated_instance, $new_instance ) {
|
455 |
-
/**
|
456 |
-
* Applies a filter to updated instance of a widget.
|
457 |
-
*
|
458 |
-
* @since 4.12.14
|
459 |
-
*
|
460 |
-
* @param array<string,mixed> $updated_instance The updated instance of the widget.
|
461 |
-
* @param array<string,mixed> $new_instance The new values for the widget instance.
|
462 |
-
* @param static $instance The widget instance we are dealing with.
|
463 |
-
*/
|
464 |
-
$updated_instance = apply_filters( 'tribe_widget_updated_instance', $updated_instance, $new_instance, $this );
|
465 |
-
|
466 |
-
$widget_slug = static::get_widget_slug();
|
467 |
-
|
468 |
-
/**
|
469 |
-
* Applies a filter to updated instance of a widget arguments based on the widget slug of the widget.
|
470 |
-
*
|
471 |
-
* @since 4.12.14
|
472 |
-
*
|
473 |
-
* @param array<string,mixed> $updated_instance The updated instance of the widget.
|
474 |
-
* @param array<string,mixed> $new_instance The new values for the widget instance.
|
475 |
-
* @param static $instance The widget instance we are dealing with.
|
476 |
-
*/
|
477 |
-
$updated_instance = apply_filters( "tribe_widget_{$widget_slug}_updated_instance", $updated_instance, $new_instance, $this );
|
478 |
-
|
479 |
-
return $updated_instance;
|
480 |
-
}
|
481 |
-
|
482 |
-
/**
|
483 |
-
* Sets up the widgets arguments, using saved values.
|
484 |
-
*
|
485 |
-
* @since 4.12.14
|
486 |
-
*
|
487 |
-
* @param array<string,mixed> $instance Saved values for the widget instance.
|
488 |
-
*
|
489 |
-
* @return array<string,mixed> The widget arguments, as set by the user in the widget string.
|
490 |
-
*/
|
491 |
-
protected function setup_arguments( array $instance = [] ) {
|
492 |
-
// First Setup the Defaults to make sure dynamic values are present.
|
493 |
-
$this->setup_default_arguments();
|
494 |
-
|
495 |
-
// Now merge instance into the arguments then to the defaults.
|
496 |
-
$this->arguments = array_merge(
|
497 |
-
$this->get_default_arguments(),
|
498 |
-
$this->arguments,
|
499 |
-
$instance
|
500 |
-
);
|
501 |
-
|
502 |
-
// Parse these arguments to avoid problems.
|
503 |
-
$this->arguments = $this->parse_arguments( $this->arguments );
|
504 |
-
|
505 |
-
return $this->arguments;
|
506 |
-
}
|
507 |
-
|
508 |
-
/**
|
509 |
-
* Handles gathering the data for admin fields.
|
510 |
-
*
|
511 |
-
* @since 5.3.0
|
512 |
-
* @since 4.13.0 Move into common from Events Abstract
|
513 |
-
*
|
514 |
-
* @param array<string,mixed> $arguments Current set of arguments.
|
515 |
-
* @param int $field_name The ID of the field.
|
516 |
-
* @param array<string,mixed> $field The field info.
|
517 |
-
*
|
518 |
-
* @return array<string,mixed> $data The assembled field data.
|
519 |
-
*/
|
520 |
-
public function get_admin_data( $arguments, $field_name, $field ) {
|
521 |
-
$data = [
|
522 |
-
'classes' => Arr::get( $field, 'classes', '' ),
|
523 |
-
'dependency' => $this->format_dependency( $field ),
|
524 |
-
'id' => $this->get_field_id( $field_name ),
|
525 |
-
'label' => Arr::get( $field, 'label', '' ),
|
526 |
-
'name' => $this->get_field_name( $field_name ),
|
527 |
-
'options' => Arr::get( $field, 'options', [] ),
|
528 |
-
'placeholder' => Arr::get( $field, 'placeholder', '' ),
|
529 |
-
'value' => Arr::get( $arguments, $field_name ),
|
530 |
-
];
|
531 |
-
|
532 |
-
$children = Arr::get( $field, 'children', [] );
|
533 |
-
|
534 |
-
if ( ! empty( $children ) ) {
|
535 |
-
foreach ( $children as $child_name => $child ) {
|
536 |
-
$input_name = ( 'radio' === $child['type'] ) ? $field_name : $child_name;
|
537 |
-
|
538 |
-
$child_data = $this->get_admin_data(
|
539 |
-
$arguments,
|
540 |
-
$input_name,
|
541 |
-
$child
|
542 |
-
);
|
543 |
-
|
544 |
-
$data['children'][ $child_name ] = $child_data;
|
545 |
-
}
|
546 |
-
}
|
547 |
-
|
548 |
-
$data = array_merge( $field, $data );
|
549 |
-
|
550 |
-
// @todo properly filter this.
|
551 |
-
return apply_filters( 'tribe_widget_field_data', $data, $field_name, $this );
|
552 |
-
}
|
553 |
-
|
554 |
-
/**
|
555 |
-
* {@inheritDoc}
|
556 |
-
*/
|
557 |
-
public function get_arguments( array $_deprecated = [] ) {
|
558 |
-
return $this->filter_arguments( $this->arguments );
|
559 |
-
}
|
560 |
-
|
561 |
-
/**
|
562 |
-
* {@inheritDoc}
|
563 |
-
*/
|
564 |
-
public function filter_arguments( $arguments ) {
|
565 |
-
/**
|
566 |
-
* Applies a filter to instance arguments.
|
567 |
-
*
|
568 |
-
* @since 4.12.12
|
569 |
-
*
|
570 |
-
* @param array<string,mixed> $arguments Current set of arguments.
|
571 |
-
* @param static $instance The widget instance we are dealing with.
|
572 |
-
*/
|
573 |
-
$arguments = apply_filters( 'tribe_widget_arguments', $arguments, $this );
|
574 |
-
|
575 |
-
$widget_slug = static::get_widget_slug();
|
576 |
-
|
577 |
-
/**
|
578 |
-
* Applies a filter to instance arguments based on the widget slug of the widget.
|
579 |
-
*
|
580 |
-
* @since 4.12.12
|
581 |
-
*
|
582 |
-
* @param array<string,mixed> $arguments Current set of arguments.
|
583 |
-
* @param static $instance The widget instance we are dealing with.
|
584 |
-
*/
|
585 |
-
$arguments = apply_filters( "tribe_widget_{$widget_slug}_arguments", $arguments, $this );
|
586 |
-
|
587 |
-
return $arguments;
|
588 |
-
}
|
589 |
-
|
590 |
-
/**
|
591 |
-
* {@inheritDoc}
|
592 |
-
*/
|
593 |
-
public function get_argument( $index, $default = null ) {
|
594 |
-
$argument = Arr::get( $this->get_arguments(), $index, $default );
|
595 |
-
|
596 |
-
return $this->filter_argument( $argument, $index, $default );
|
597 |
-
}
|
598 |
-
|
599 |
-
/**
|
600 |
-
* {@inheritDoc}
|
601 |
-
*/
|
602 |
-
public function filter_argument( $argument, $index, $default = null ) {
|
603 |
-
/**
|
604 |
-
* Applies a filter to a specific widget argument, catch all for all widgets.
|
605 |
-
*
|
606 |
-
* @since 4.12.12
|
607 |
-
*
|
608 |
-
* @param mixed $argument The argument.
|
609 |
-
* @param string|int $index Which index we intend to fetch from the arguments.
|
610 |
-
* @param array<string,mixed> $default Default value if it doesn't exist.
|
611 |
-
* @param static $instance The widget instance we are dealing with.
|
612 |
-
*/
|
613 |
-
$argument = apply_filters( 'tribe_widget_argument', $argument, $index, $default, $this );
|
614 |
-
|
615 |
-
$widget_slug = static::get_widget_slug();
|
616 |
-
|
617 |
-
/**
|
618 |
-
* Applies a filter to a specific widget argument, to a particular widget slug.
|
619 |
-
*
|
620 |
-
* @since 4.12.12
|
621 |
-
*
|
622 |
-
* @param mixed $argument The argument value.
|
623 |
-
* @param string|int $index Which index we intend to fetch from the arguments.
|
624 |
-
* @param mixed $default Default value if it doesn't exist.
|
625 |
-
* @param static $instance The widget instance we are dealing with.
|
626 |
-
*/
|
627 |
-
$argument = apply_filters( "tribe_widget_{$widget_slug}_argument", $argument, $index, $default, $this );
|
628 |
-
|
629 |
-
return $argument;
|
630 |
-
}
|
631 |
-
|
632 |
-
/**
|
633 |
-
* {@inheritDoc}
|
634 |
-
*/
|
635 |
-
public function setup_sidebar_arguments( $arguments ) {
|
636 |
-
$this->sidebar_arguments = $arguments;
|
637 |
-
}
|
638 |
-
|
639 |
-
/**
|
640 |
-
* {@inheritDoc}
|
641 |
-
*/
|
642 |
-
public function get_sidebar_arguments() {
|
643 |
-
return $this->filter_sidebar_arguments( $this->sidebar_arguments );
|
644 |
-
}
|
645 |
-
|
646 |
-
/**
|
647 |
-
* {@inheritDoc}
|
648 |
-
*/
|
649 |
-
public function filter_sidebar_arguments( $arguments ) {
|
650 |
-
/**
|
651 |
-
* Applies a filter to the widget sidebar arguments, catch all for all widgets.
|
652 |
-
*
|
653 |
-
* @since 4.13.0
|
654 |
-
*
|
655 |
-
* @param mixed $arguments The argument.
|
656 |
-
* @param static $instance The widget instance we are dealing with.
|
657 |
-
*/
|
658 |
-
$arguments = apply_filters( 'tribe_widget_sidebar_arguments', $arguments, $this );
|
659 |
-
|
660 |
-
$widget_slug = static::get_widget_slug();
|
661 |
-
|
662 |
-
/**
|
663 |
-
* Applies a filter to the widget sidebar arguments, to a particular widget slug.
|
664 |
-
*
|
665 |
-
* @since 4.13.0
|
666 |
-
*
|
667 |
-
* @param mixed $arguments The argument.
|
668 |
-
* @param static $instance The widget instance we are dealing with.
|
669 |
-
*/
|
670 |
-
$arguments = apply_filters( "tribe_widget_{$widget_slug}_sidebar_arguments", $arguments, $this );
|
671 |
-
|
672 |
-
return $arguments;
|
673 |
-
}
|
674 |
-
|
675 |
-
/**
|
676 |
-
* Sets up the widgets default arguments.
|
677 |
-
*
|
678 |
-
* @since 4.12.14
|
679 |
-
*
|
680 |
-
* @return array<string,mixed> The default widget arguments.
|
681 |
-
*/
|
682 |
-
protected function setup_default_arguments() {
|
683 |
-
// Setup admin fields.
|
684 |
-
$this->default_arguments['admin_fields'] = $this->get_admin_fields();
|
685 |
-
|
686 |
-
// Add the Widget to the arguments to pass to the admin template.
|
687 |
-
$this->default_arguments['widget_obj'] = $this;
|
688 |
-
|
689 |
-
return $this->default_arguments;
|
690 |
-
}
|
691 |
-
|
692 |
-
/**
|
693 |
-
* {@inheritDoc}
|
694 |
-
*/
|
695 |
-
public function get_default_arguments() {
|
696 |
-
return $this->filter_default_arguments( $this->default_arguments );
|
697 |
-
}
|
698 |
-
|
699 |
-
/**
|
700 |
-
* {@inheritDoc}
|
701 |
-
*/
|
702 |
-
public function filter_default_arguments( array $default_arguments = [] ) {
|
703 |
-
/**
|
704 |
-
* Applies a filter to default instance arguments.
|
705 |
-
*
|
706 |
-
* @since 4.12.12
|
707 |
-
*
|
708 |
-
* @param array<string,mixed> $default_arguments Current set of default arguments.
|
709 |
-
* @param static $instance The widget instance we are dealing with.
|
710 |
-
*/
|
711 |
-
$default_arguments = apply_filters( 'tribe_widget_default_arguments', $default_arguments, $this );
|
712 |
-
|
713 |
-
$widget_slug = static::get_widget_slug();
|
714 |
-
|
715 |
-
/**
|
716 |
-
* Applies a filter to default instance arguments based on the widget slug of the widget.
|
717 |
-
*
|
718 |
-
* @since 4.12.12
|
719 |
-
*
|
720 |
-
* @param array<string,mixed> $default_arguments Current set of default arguments.
|
721 |
-
* @param static $instance The widget instance we are dealing with.
|
722 |
-
*/
|
723 |
-
return apply_filters( "tribe_widget_{$widget_slug}_default_arguments", $default_arguments, $this );
|
724 |
-
}
|
725 |
-
|
726 |
-
/**
|
727 |
-
* {@inheritDoc}
|
728 |
-
*/
|
729 |
-
public function filter_args_to_context( array $alterations = [], array $arguments = [] ) {
|
730 |
-
/**
|
731 |
-
* Applies a filter to arguments before they get turned into context.
|
732 |
-
*
|
733 |
-
* @since 4.13.0
|
734 |
-
*
|
735 |
-
* @param array<string,mixed> $alterations Current set of alterations for the context.
|
736 |
-
* @param array<string,mixed> $arguments Current set of arguments in the widget.
|
737 |
-
* @param static $instance The widget instance we are dealing with.
|
738 |
-
*/
|
739 |
-
$alterations = apply_filters( 'tribe_widget_args_to_context', $alterations, $arguments, $this );
|
740 |
-
|
741 |
-
$widget_slug = static::get_widget_slug();
|
742 |
-
|
743 |
-
/**
|
744 |
-
* Applies a filter to arguments before they get turned into context based on the widget slug of the widget.
|
745 |
-
*
|
746 |
-
* @since 4.13.0
|
747 |
-
*
|
748 |
-
* @param array<string,mixed> $alterations Current set of alterations for the context.
|
749 |
-
* @param array<string,mixed> $arguments Current set of arguments in the widget.
|
750 |
-
* @param static $instance The widget instance we are dealing with.
|
751 |
-
*/
|
752 |
-
return apply_filters( "tribe_widget_{$widget_slug}_args_to_context", $alterations, $arguments, $this );
|
753 |
-
}
|
754 |
-
|
755 |
-
/**
|
756 |
-
* Sets the admin template.
|
757 |
-
*
|
758 |
-
* @since 4.12.14
|
759 |
-
*
|
760 |
-
* @param \Tribe__Template $template The admin template to use.
|
761 |
-
*/
|
762 |
-
public function set_admin_template( \Tribe__Template $template ) {
|
763 |
-
$this->admin_template = $template;
|
764 |
-
}
|
765 |
-
|
766 |
-
/**
|
767 |
-
* Returns the current admin template.
|
768 |
-
*
|
769 |
-
* @since 4.12.14
|
770 |
-
*
|
771 |
-
* @return \Tribe__Template The current admin template.
|
772 |
-
*/
|
773 |
-
public function get_admin_template() {
|
774 |
-
return $this->admin_template;
|
775 |
-
}
|
776 |
-
|
777 |
-
/**
|
778 |
-
* Get the admin html for the widget form.
|
779 |
-
*
|
780 |
-
* @since 4.12.14
|
781 |
-
*
|
782 |
-
* @param array<string,mixed> $arguments Current set of arguments.
|
783 |
-
*
|
784 |
-
* @return string HTML for the admin fields.
|
785 |
-
*/
|
786 |
-
public function get_admin_html( $arguments ) {
|
787 |
-
return $this->get_admin_template()->template( [ 'widgets', static::get_widget_slug() ], $arguments );
|
788 |
-
}
|
789 |
-
|
790 |
-
/**
|
791 |
-
* Toggles hooks for the widget, will be deactivated after the rendering has happened.
|
792 |
-
*
|
793 |
-
* @since 4.13.0
|
794 |
-
*
|
795 |
-
* @param bool $toggle Whether to turn the hooks on or off.
|
796 |
-
*
|
797 |
-
* @return void
|
798 |
-
*/
|
799 |
-
public function toggle_hooks( $toggle ) {
|
800 |
-
if ( $toggle ) {
|
801 |
-
$this->add_hooks();
|
802 |
-
} else {
|
803 |
-
$this->remove_hooks();
|
804 |
-
}
|
805 |
-
|
806 |
-
/**
|
807 |
-
* Fires after widget was setup while rendering a widget.
|
808 |
-
*
|
809 |
-
* @since 4.13.0
|
810 |
-
*
|
811 |
-
* @param bool $toggle Whether the hooks should be turned on or off. This value is `true` before a widget
|
812 |
-
* HTML is rendered and `false` after the widget HTML rendered.
|
813 |
-
* @param static $this The widget object that is toggling the hooks.
|
814 |
-
*/
|
815 |
-
do_action( 'tribe_shortcode_toggle_hooks', $toggle, $this );
|
816 |
-
}
|
817 |
-
|
818 |
-
/**
|
819 |
-
* Toggles off portions of the template based on widget params.
|
820 |
-
* This runs on the `tribe_shortcode_toggle_hooks` hook when the toggle is true.
|
821 |
-
*
|
822 |
-
* @since 4.13.0
|
823 |
-
*/
|
824 |
-
protected function add_hooks() {
|
825 |
-
|
826 |
-
}
|
827 |
-
|
828 |
-
/**
|
829 |
-
* Toggles on portions of the template that were modified in `add_template_mods()` above.
|
830 |
-
* This runs on the `tribe_shortcode_toggle_hooks` hook when the toggle is false.
|
831 |
-
* Thus encapsulating our control of these shared pieces to only when the widget is rendering.
|
832 |
-
*
|
833 |
-
* @since 4.13.0
|
834 |
-
*/
|
835 |
-
protected function remove_hooks() {
|
836 |
-
|
837 |
-
}
|
838 |
-
|
839 |
-
/**********************
|
840 |
-
* Deprecated Methods *
|
841 |
-
**********************/
|
842 |
-
|
843 |
-
/**
|
844 |
-
* Slug of the current widget.
|
845 |
-
*
|
846 |
-
* @since 4.12.12
|
847 |
-
*
|
848 |
-
* @deprecated 4.13.0 Moved into using static::$widget_slug
|
849 |
-
* @todo remove after 2021-08-01
|
850 |
-
*
|
851 |
-
* @var string
|
852 |
-
*/
|
853 |
-
protected $slug;
|
854 |
-
|
855 |
-
/**
|
856 |
-
* The slug of the admin widget view.
|
857 |
-
*
|
858 |
-
* @since 4.12.14
|
859 |
-
*
|
860 |
-
* @deprecated 4.13.0 Moved into using static::$widget_slug
|
861 |
-
* @todo remove after 2021-08-01
|
862 |
-
*
|
863 |
-
* @var string
|
864 |
-
*/
|
865 |
-
protected $view_admin_slug;
|
866 |
-
|
867 |
-
/**
|
868 |
-
* {@inheritDoc}
|
869 |
-
* @deprecated 4.13.0 Moved into using static::get_widget_slug
|
870 |
-
*/
|
871 |
-
public function get_registration_slug() {
|
872 |
-
return static::get_widget_slug();
|
873 |
-
}
|
874 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
common/src/Tribe/Widget/Widget_Interface.php
DELETED
@@ -1,331 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace Tribe\Widget;
|
4 |
-
|
5 |
-
/**
|
6 |
-
* Interface Widget_Interface
|
7 |
-
*
|
8 |
-
* @since 4.12.12
|
9 |
-
*
|
10 |
-
* @package Tribe\Widget
|
11 |
-
*
|
12 |
-
*/
|
13 |
-
interface Widget_Interface {
|
14 |
-
/**
|
15 |
-
* Constructor for V2 Widgets.
|
16 |
-
*
|
17 |
-
* @since 4.12.12
|
18 |
-
*
|
19 |
-
* @param string $id_base Optional. Base ID for the widget, lowercase. If left empty,
|
20 |
-
* a portion of the widget's class name will be used. Has to be unique.
|
21 |
-
* @param string $name Name for the widget displayed on the configuration page.
|
22 |
-
* @param array<string,mixed> $widget_options Optional. Widget options. See wp_register_sidebar_widget() for
|
23 |
-
* information on accepted arguments. Default empty array.
|
24 |
-
* @param array<string,mixed> $control_options Optional. Widget control options. See wp_register_widget_control() for
|
25 |
-
* information on accepted arguments. Default empty array.
|
26 |
-
*/
|
27 |
-
public function __construct( $id_base = '', $name = '', $widget_options = [], $control_options = [] );
|
28 |
-
|
29 |
-
/**
|
30 |
-
* Returns the widget slug that allows the widget to be built via the widget class using that slug.
|
31 |
-
*
|
32 |
-
* @since 4.13.0
|
33 |
-
*
|
34 |
-
* @return string The widget slug.
|
35 |
-
*/
|
36 |
-
public static function get_widget_slug();
|
37 |
-
|
38 |
-
/**
|
39 |
-
* Returns if the widget is in use on this current page.
|
40 |
-
*
|
41 |
-
* @since 4.13.0
|
42 |
-
*
|
43 |
-
* @return bool If this widget is in use.
|
44 |
-
*/
|
45 |
-
public static function is_widget_in_use();
|
46 |
-
|
47 |
-
/**
|
48 |
-
* Sets if this widget is in use on the current page.
|
49 |
-
*
|
50 |
-
* @since 4.13.0
|
51 |
-
*
|
52 |
-
* @see tribe_is_truthy()
|
53 |
-
*
|
54 |
-
* @param bool $toggle Toggle true or false if a widget is in use.
|
55 |
-
*/
|
56 |
-
public static function widget_in_use( $toggle = true );
|
57 |
-
|
58 |
-
/**
|
59 |
-
* Echoes the widget content.
|
60 |
-
*
|
61 |
-
* @since 4.12.12
|
62 |
-
*
|
63 |
-
* @param array<string,mixed> $args Display arguments including 'before_title', 'after_title',
|
64 |
-
* 'before_widget', and 'after_widget'.
|
65 |
-
* @param array<string,mixed> $instance The settings for the particular instance of the widget.
|
66 |
-
*/
|
67 |
-
public function widget( $args, $instance );
|
68 |
-
|
69 |
-
/**
|
70 |
-
* Updates a particular instance of a widget.
|
71 |
-
*
|
72 |
-
* This function should check that `$new_instance` is set correctly. The newly-calculated
|
73 |
-
* value of `$instance` should be returned. If false is returned, the instance won't be
|
74 |
-
* saved/updated.
|
75 |
-
*
|
76 |
-
* @since 4.12.12
|
77 |
-
*
|
78 |
-
* @param array<string,mixed> $new_instance New settings for this instance as input by the user via
|
79 |
-
* WP_Widget::form().
|
80 |
-
* @param array<string,mixed> $old_instance Old settings for this instance.
|
81 |
-
*
|
82 |
-
* @return array<string,mixed> Settings to save or bool false to cancel saving.
|
83 |
-
*/
|
84 |
-
public function update( $new_instance, $old_instance );
|
85 |
-
|
86 |
-
/**
|
87 |
-
* Outputs the settings update form.
|
88 |
-
*
|
89 |
-
* @since 4.12.12
|
90 |
-
*
|
91 |
-
* @param array<string,mixed> $instance Current settings.
|
92 |
-
*
|
93 |
-
* @return string Default return is 'noform'.
|
94 |
-
*/
|
95 |
-
public function form( $instance );
|
96 |
-
|
97 |
-
/**
|
98 |
-
* Sets the aliased arguments array.
|
99 |
-
*
|
100 |
-
* @see Tribe__Utils__Array::parse_associative_array_alias() The expected format.
|
101 |
-
*
|
102 |
-
* @since 4.12.12
|
103 |
-
*
|
104 |
-
* @param array<string,mixed> $alias_map An associative array of aliases: key as alias, value as mapped canonical.
|
105 |
-
* Example: [ 'alias' => 'canonical', 'from' => 'to', 'that' => 'becomes_this' ]
|
106 |
-
*/
|
107 |
-
public function set_aliased_arguments( array $alias_map );
|
108 |
-
|
109 |
-
/**
|
110 |
-
* Gets the aliased arguments array.
|
111 |
-
*
|
112 |
-
* @since 4.12.12
|
113 |
-
*
|
114 |
-
* @return array<string,string> The associative array map of aliases and their canonical arguments.
|
115 |
-
*/
|
116 |
-
public function get_aliased_arguments();
|
117 |
-
|
118 |
-
/**
|
119 |
-
* Returns the arguments for the widget parsed correctly with defaults applied.
|
120 |
-
*
|
121 |
-
* @since 4.12.12
|
122 |
-
*
|
123 |
-
* @param array $arguments Set of arguments passed to the widget at hand.
|
124 |
-
*
|
125 |
-
* @return array<string,mixed> The parsed widget arguments map.
|
126 |
-
*/
|
127 |
-
public function parse_arguments( array $arguments );
|
128 |
-
|
129 |
-
/**
|
130 |
-
* Returns the array of arguments for this widget after applying the validation callbacks.
|
131 |
-
*
|
132 |
-
* @since 4.12.12
|
133 |
-
*
|
134 |
-
* @param array $arguments Set of arguments passed to the widget at hand.
|
135 |
-
*
|
136 |
-
* @return array<string,mixed> The validated widget arguments map.
|
137 |
-
*/
|
138 |
-
public function validate_arguments( array $arguments );
|
139 |
-
|
140 |
-
/**
|
141 |
-
* Returns the array of callbacks for this widget's arguments.
|
142 |
-
*
|
143 |
-
* @since 4.12.12
|
144 |
-
*
|
145 |
-
* @return array<string,callable> A map of the widget arguments that have survived validation.
|
146 |
-
*/
|
147 |
-
public function get_validated_arguments_map();
|
148 |
-
|
149 |
-
/**
|
150 |
-
* Returns the array of callbacks for this widget's arguments.
|
151 |
-
*
|
152 |
-
* @since 4.12.12
|
153 |
-
*
|
154 |
-
* @param array<string,callable> $validate_arguments_map Array of callbacks for this widget's arguments.
|
155 |
-
*
|
156 |
-
* @return array<string,callable> A map of the widget arguments that have survived validation.
|
157 |
-
*/
|
158 |
-
public function filter_validated_arguments_map( $validate_arguments_map = [] );
|
159 |
-
|
160 |
-
/**
|
161 |
-
* Returns an array of admin fields for the widget.
|
162 |
-
*
|
163 |
-
* @since 4.12.14
|
164 |
-
*
|
165 |
-
* @return array<string,mixed> The array of widget admin fields.
|
166 |
-
*/
|
167 |
-
public function get_admin_fields();
|
168 |
-
|
169 |
-
/**
|
170 |
-
* Filter a widget's admin fields.
|
171 |
-
*
|
172 |
-
* @since 4.12.14
|
173 |
-
*
|
174 |
-
* @param array<string,mixed> $admin_fields The array of widget admin fields.
|
175 |
-
*
|
176 |
-
* @return array<string,mixed> The array of widget admin fields.
|
177 |
-
*/
|
178 |
-
public function filter_admin_fields( $admin_fields );
|
179 |
-
|
180 |
-
/**
|
181 |
-
* Filters a widget's updated instance.
|
182 |
-
*
|
183 |
-
* @since 4.12.14
|
184 |
-
*
|
185 |
-
* @param array<string,mixed> $updated_instance The updated instance of the widget.
|
186 |
-
* @param array<string,mixed> $new_instance The new values for the widget instance.
|
187 |
-
*
|
188 |
-
* @return array<string,mixed> The updated instance to be saved for the widget.
|
189 |
-
*/
|
190 |
-
public function filter_updated_instance( $updated_instance, $new_instance );
|
191 |
-
|
192 |
-
/**
|
193 |
-
* Returns a widget arguments after been parsed.
|
194 |
-
*
|
195 |
-
* @since 4.12.12
|
196 |
-
* @since 4.13.0 Deprecated the instance method as that is passed only to setup_arguments method.
|
197 |
-
*
|
198 |
-
* @param array<string,mixed> $_deprecated Saved values for the widget instance.
|
199 |
-
*
|
200 |
-
* @return array<string,mixed> The widget arguments, as set by the user in the widget string.
|
201 |
-
*/
|
202 |
-
public function get_arguments( array $_deprecated = [] );
|
203 |
-
|
204 |
-
/**
|
205 |
-
* Filter a widget's arguments after they have been been parsed.
|
206 |
-
*
|
207 |
-
* @since 4.12.12
|
208 |
-
*
|
209 |
-
* @param array<string,mixed> $arguments Current set of arguments.
|
210 |
-
*
|
211 |
-
* @return array<string,mixed> The widget arguments, as set by the user in the widget string.
|
212 |
-
*/
|
213 |
-
public function filter_arguments( $arguments );
|
214 |
-
|
215 |
-
/**
|
216 |
-
* Get a single widget argument after it has been parsed and filtered.
|
217 |
-
*
|
218 |
-
* @since 4.12.12
|
219 |
-
*
|
220 |
-
* @param string|int $index Which index we intend to fetch from the arguments.
|
221 |
-
* @param array|mixed $default Default value if it doesn't exist.
|
222 |
-
*
|
223 |
-
* @uses Tribe__Utils__Array::get For index fetching and Default.
|
224 |
-
*
|
225 |
-
* @return mixed Value for the Index passed as the first argument.
|
226 |
-
*/
|
227 |
-
public function get_argument( $index, $default = null );
|
228 |
-
|
229 |
-
/**
|
230 |
-
* Filter a widget argument.
|
231 |
-
*
|
232 |
-
* @since 4.12.12
|
233 |
-
*
|
234 |
-
* @param mixed $argument The argument value.
|
235 |
-
* @param string|int $index Which index we intend to fetch from the arguments.
|
236 |
-
* @param array|mixed $default Default value if it doesn't exist.
|
237 |
-
*
|
238 |
-
* @uses Tribe__Utils__Array::get For index fetching and Default.
|
239 |
-
*
|
240 |
-
* @return mixed Value for the Index passed as the first argument.
|
241 |
-
*/
|
242 |
-
public function filter_argument( $argument, $index, $default = null );
|
243 |
-
|
244 |
-
/**
|
245 |
-
* Get default arguments for a widget.
|
246 |
-
*
|
247 |
-
* @since 4.12.12
|
248 |
-
*
|
249 |
-
* @return array<string,mixed> The map of widget default arguments.
|
250 |
-
*/
|
251 |
-
public function get_default_arguments();
|
252 |
-
|
253 |
-
/**
|
254 |
-
* Filter a widget's default arguments.
|
255 |
-
*
|
256 |
-
* @since 4.12.12
|
257 |
-
*
|
258 |
-
* @param array<string,mixed> $default_arguments Current set of default arguments.
|
259 |
-
*
|
260 |
-
* @return array<string,mixed> The map of widget default arguments.
|
261 |
-
*/
|
262 |
-
public function filter_default_arguments( array $default_arguments = [] );
|
263 |
-
|
264 |
-
|
265 |
-
/**
|
266 |
-
* Filter a widget's arguments before they are passed to the context.
|
267 |
-
*
|
268 |
-
* @since 4.13.0
|
269 |
-
*
|
270 |
-
* @param array<string,mixed> $alterations Current set of alterations for the context.
|
271 |
-
* @param array<string,mixed> $arguments Current set of arguments in the widget.
|
272 |
-
*
|
273 |
-
* @return array<string,mixed> The map of arguments after filtering.
|
274 |
-
*/
|
275 |
-
public function filter_args_to_context( array $alterations = [], array $arguments = [] );
|
276 |
-
|
277 |
-
/**
|
278 |
-
* Returns a widget's HTML.
|
279 |
-
*
|
280 |
-
* @since 4.12.12
|
281 |
-
*
|
282 |
-
* @return string The rendered widget's HTML code.
|
283 |
-
*/
|
284 |
-
public function get_html();
|
285 |
-
|
286 |
-
/**
|
287 |
-
* Sets the sidebar arguments sent by the theme.
|
288 |
-
*
|
289 |
-
* @since 4.13.0
|
290 |
-
*
|
291 |
-
* @param array<string,mixed> $arguments Arguments passed by the theme.
|
292 |
-
*/
|
293 |
-
public function setup_sidebar_arguments( $arguments );
|
294 |
-
|
295 |
-
/**
|
296 |
-
* Sets the sidebar arguments sent by the theme.
|
297 |
-
*
|
298 |
-
* @since 4.13.0
|
299 |
-
*
|
300 |
-
* @return array<string, mixed> Arguments sent by the theme and stored in this class.
|
301 |
-
*/
|
302 |
-
public function get_sidebar_arguments();
|
303 |
-
|
304 |
-
/**
|
305 |
-
* Sets the sidebar arguments sent by the theme.
|
306 |
-
*
|
307 |
-
* @since 4.13.0
|
308 |
-
*
|
309 |
-
* @param array<string,mixed> $arguments Arguments passed by the theme.
|
310 |
-
*
|
311 |
-
* @return array<string, mixed> Arguments sent by the theme and stored in this class.
|
312 |
-
*/
|
313 |
-
public function filter_sidebar_arguments( $arguments );
|
314 |
-
|
315 |
-
/**********************
|
316 |
-
* Deprecated Methods *
|
317 |
-
**********************/
|
318 |
-
|
319 |
-
/**
|
320 |
-
* Returns the widget slug that allows the widget to be built via the widget class using that slug.
|
321 |
-
*
|
322 |
-
* @since 4.12.12
|
323 |
-
*
|
324 |
-
* @deprecated 4.13.0 In favor of static::get_widget_slug()
|
325 |
-
* @todo remove after 2021-08-01
|
326 |
-
*
|
327 |
-
* @return string The widget slug.
|
328 |
-
*/
|
329 |
-
public function get_registration_slug();
|
330 |
-
|
331 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
common/src/admin-views/app-shop.php
CHANGED
@@ -1,206 +1,95 @@
|
|
1 |
-
|
2 |
-
// $main, $products, $bundles, $extensions must be defined before loading this file
|
3 |
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
];
|
8 |
-
foreach ( $products as $product ) {
|
9 |
-
if ( $product->is_installed ) {
|
10 |
-
$all_products['installed'][] = $product;
|
11 |
-
} else {
|
12 |
-
$all_products['for-sale'][] = $product;
|
13 |
-
}
|
14 |
-
}
|
15 |
-
?>
|
16 |
-
|
17 |
-
<div id="tribe-app-shop">
|
18 |
-
|
19 |
-
<div class="tribe-header">
|
20 |
-
<div class="content-wrapper">
|
21 |
-
<div class="logo-word-mark">
|
22 |
-
<img
|
23 |
-
src="<?php echo esc_url( tribe_resource_url( 'images/logo/tec-brand.svg', false, null, $main ) ); ?>"
|
24 |
-
alt="<?php esc_attr_e( 'The Events Calendar brand logo', 'tribe-common' ); ?>"
|
25 |
-
/>
|
26 |
-
</div>
|
27 |
-
|
28 |
-
<ul>
|
29 |
-
<li class="selected" data-tab="tribe-all-solutions"><?php esc_html_e( 'All Solutions', 'tribe-common' ); ?></li>
|
30 |
-
<li data-tab="tribe-bundles"><?php esc_html_e( 'Save with Bundles', 'tribe-common' ); ?></li>
|
31 |
-
<li data-tab="tribe-extensions"><?php esc_html_e( 'Extensions', 'tribe-common' ); ?></li>
|
32 |
-
</ul>
|
33 |
-
</div>
|
34 |
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
35 |
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
42 |
<div class="content-wrapper">
|
43 |
<div class="addon-grid">
|
44 |
-
<?php
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
<li>
|
76 |
-
<span class="check">
|
77 |
-
<svg fill="none" height="12" viewBox="0 0 16 12" width="16" xmlns="http://www.w3.org/2000/svg"><path clip-rule="evenodd" d="m13.7357.374803-8.40784 8.402337-3.06361-3.06158c-.52424-.506-1.357557-.49877-1.872924.01626s-.522608 1.34779-.016275 1.87169l4.008209 4.00559c.52173.5212 1.36747.5212 1.8892 0l9.35244-9.34634c.5064-.5239.4991-1.356665-.0162-1.871692-.5154-.515027-1.3487-.522264-1.873-.016265z" fill="#3d54ff" fill-rule="evenodd"/></svg>
|
78 |
-
</span><span class="feature-text">
|
79 |
-
<?php echo esc_html( $feature ); ?>
|
80 |
-
</span>
|
81 |
-
</li>
|
82 |
-
<?php endforeach; ?>
|
83 |
-
</ul>
|
84 |
-
|
85 |
-
<?php if ( 'installed' == $status ) : ?>
|
86 |
-
<a class="button" href="https://evnt.is/1aiz"><?php esc_html_e( 'Manage', 'tribe-common' ); ?></a>
|
87 |
-
<?php else : ?>
|
88 |
-
<a class="button" href="<?php echo esc_url( $product->link ); ?>"><?php esc_html_e( 'Learn More', 'tribe-common' ); ?></a>
|
89 |
-
<?php endif; ?>
|
90 |
-
|
91 |
</div>
|
92 |
-
|
93 |
-
|
94 |
-
</div>
|
95 |
-
</div>
|
96 |
-
</div>
|
97 |
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
alt="<?php esc_attr_e( 'Shapes and lines for visual interest', 'tribe-common' ); ?>"
|
103 |
-
/>
|
104 |
-
<div class="content-wrapper">
|
105 |
-
<div class="addon-grid">
|
106 |
-
<h2><?php esc_html_e( 'The plugins you need at one discounted price', 'tribe-common' ); ?></h2>
|
107 |
-
<p><?php esc_html_e( 'We\'ve packaged our most popular plugins into bundles jam-packed with value.', 'tribe-common' ); ?></p>
|
108 |
-
<?php foreach ( $bundles as $bundle ) : ?>
|
109 |
-
<div class="tribe-bundle">
|
110 |
-
<div class="details">
|
111 |
-
<div class="headline">
|
112 |
-
<img src="<?php echo esc_url( tribe_resource_url( $bundle->logo, false, null, $main ) ); ?>" alt="<?php esc_attr_e( 'TEC Logo', 'tribe-common' ); ?>" />
|
113 |
-
<h3><a href="<?php echo esc_url( $bundle->link ); ?>" target="_blank"><?php echo esc_html( $bundle->title ); ?></a></h3>
|
114 |
-
</div>
|
115 |
-
|
116 |
-
<p><?php echo esc_html( $bundle->description ); ?></p>
|
117 |
-
|
118 |
-
<div class="cta wide">
|
119 |
-
<a class="button" href="<?php echo esc_url( $bundle->link ); ?>"><?php esc_html_e( 'Save With A Bundle', 'tribe-common' ); ?></a>
|
120 |
-
<span class="discount"><?php echo esc_html( $bundle->discount ); ?></span>
|
121 |
-
</div>
|
122 |
-
</div>
|
123 |
-
|
124 |
-
<div class="includes">
|
125 |
-
<h4><?php esc_html_e( 'Includes', 'tribe-common' ); ?></h4>
|
126 |
-
<ul>
|
127 |
-
<?php foreach ( $bundle->includes as $i => $product_key ) : ?>
|
128 |
-
<?php
|
129 |
-
// get $product object
|
130 |
-
$product = $products[ $product_key ];
|
131 |
?>
|
|
|
|
|
|
|
|
|
|
|
132 |
|
133 |
-
|
134 |
-
<img src="<?php echo esc_url( tribe_resource_url( $product->logo, false, null, $main ) ); ?>" alt="<?php esc_attr_e( 'TEC Logo', 'tribe-common' ); ?>" />
|
135 |
-
<span><?php echo esc_html( $product->title ); ?></span>
|
136 |
-
</li>
|
137 |
-
|
138 |
-
<?php if ( $i == 4 ) : // if there are 5 products included, then we need 2 lists ?>
|
139 |
-
</ul><ul class="second">
|
140 |
-
<?php endif; ?>
|
141 |
-
<?php endforeach; ?>
|
142 |
-
</ul>
|
143 |
-
</div>
|
144 |
-
|
145 |
-
<div class="cta narrow">
|
146 |
-
<a class="button" href="<?php echo esc_url( $bundle->link ); ?>"><?php esc_html_e( 'Save With A Bundle', 'tribe-common' ); ?></a>
|
147 |
-
<span class="discount"><?php echo esc_html( $bundle->discount ); ?></span>
|
148 |
-
</div>
|
149 |
-
|
150 |
-
</div>
|
151 |
-
<?php endforeach; ?>
|
152 |
-
</div>
|
153 |
-
</div>
|
154 |
-
</div>
|
155 |
-
|
156 |
-
<div id="tribe-extensions" class="tribe-content">
|
157 |
-
<img
|
158 |
-
class="tribe-events-admin-graphic"
|
159 |
-
src="<?php echo esc_url( tribe_resource_url( 'images/header/extensions.jpg', false, null, $main ) ); ?>"
|
160 |
-
alt="<?php esc_attr_e( 'Shapes and lines for visual interest', 'tribe-common' ); ?>"
|
161 |
-
/>
|
162 |
-
<div class="content-wrapper">
|
163 |
-
<div class="addon-grid">
|
164 |
-
<h2><?php esc_html_e( 'Free extensions to power up your plugins', 'tribe-common' ); ?></h2>
|
165 |
-
<p><?php esc_html_e( 'Extensions are quick solutions our team came up with to solve specific issues you may need. (Note - extensions are not covered by our support team.)', 'tribe-common' ); ?></p>
|
166 |
-
<?php foreach ( $extensions as $extension ) : ?>
|
167 |
-
<div class="tribe-addon">
|
168 |
-
<div class="headline">
|
169 |
-
<h3 class="has-pill"><a href="<?php echo esc_url( $extension->link ); ?>" target="_blank"><?php echo esc_html( $extension->title ); ?></a></h3>
|
170 |
-
<span class="pill free"><?php esc_html_e( 'FREE', 'tribe-common' ); ?></span>
|
171 |
-
</div>
|
172 |
-
|
173 |
-
<div class="promo-image">
|
174 |
-
<a href="<?php echo esc_url( $extension->link ); ?>" target="_blank"><img src="<?php echo esc_url( tribe_resource_url( $extension->image, false, null, $main ) ); ?>" /></a>
|
175 |
</div>
|
176 |
-
|
177 |
-
<p><?php echo esc_html( $extension->description ); ?></p>
|
178 |
-
|
179 |
-
<a class="button" href="<?php echo esc_url( $extension->link ); ?>"><?php esc_html_e( 'Download', 'tribe-common' ); ?></a>
|
180 |
</div>
|
181 |
-
<?php endforeach; ?>
|
182 |
-
|
183 |
-
<a class="button secondary" href="https://evnt.is/1ajd"><?php esc_html_e( 'Browse Extensions', 'tribe-common' ); ?></a>
|
184 |
|
|
|
|
|
|
|
185 |
</div>
|
186 |
-
|
187 |
</div>
|
188 |
-
|
189 |
-
|
|
|
190 |
</div>
|
191 |
-
|
192 |
-
<?php // this is inline jQuery / javascript for extra simplicity */ ?>
|
193 |
-
<script type="text/javascript">
|
194 |
-
jQuery( document ).ready( function($) {
|
195 |
-
var current_tab = "#tribe-all-solutions";
|
196 |
-
$( 'body' ).on( "click", ".tribe-header li", function() {
|
197 |
-
var tab = "#" + $( this ).data( "tab" );
|
198 |
-
$( current_tab ).hide();
|
199 |
-
$( '.tribe-header li' ).removeClass( "selected" );
|
200 |
-
$( this ).addClass( "selected" );
|
201 |
-
|
202 |
-
$( tab ).show();
|
203 |
-
current_tab = tab;
|
204 |
-
} );
|
205 |
-
} );
|
206 |
-
</script>
|
1 |
+
<div id="tribe-app-shop" class="wrap">
|
|
|
2 |
|
3 |
+
<div class="header">
|
4 |
+
<h1><?php esc_html_e( 'Events Add-Ons', 'tribe-common' ); ?></h1>
|
5 |
+
<a class="button" href="https://theeventscalendar.com/?utm_campaign=in-app&utm_source=addonspage&utm_medium=top-banner" target="_blank"><?php esc_html_e( 'Browse All Add-Ons', 'tribe-common' ); ?></a>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6 |
</div>
|
7 |
+
<?php
|
8 |
+
$all_products = array(
|
9 |
+
'for-sale' => array(),
|
10 |
+
'installed' => array(),
|
11 |
+
);
|
12 |
+
foreach ( $products as $product ) {
|
13 |
+
if ( $product->is_installed ) {
|
14 |
+
$all_products['installed'][] = $product;
|
15 |
+
} else {
|
16 |
+
$all_products['for-sale'][] = $product;
|
17 |
+
}
|
18 |
+
}
|
19 |
|
20 |
+
$products = array();
|
21 |
+
foreach ( $all_products as $type => $products ) {
|
22 |
+
if ( empty( $products ) ) {
|
23 |
+
continue;
|
24 |
+
}
|
25 |
+
|
26 |
+
$button_label = esc_html__( 'Buy This Add-On', 'tribe-common' );
|
27 |
+
$button_class = 'button-primary';
|
28 |
+
if ( 'installed' === $type ) {
|
29 |
+
?><h1 class="tribe-installed-headline"><?php esc_html_e( 'Installed Add-Ons', 'tribe-common' ); ?></h1><?php
|
30 |
+
$button_class = 'button-disabled';
|
31 |
+
$button_label = '<span class="dashicons dashicons-yes"></span>' . esc_html__( 'Installed', 'tribe-common' );
|
32 |
+
}
|
33 |
+
|
34 |
+
?>
|
35 |
<div class="content-wrapper">
|
36 |
<div class="addon-grid">
|
37 |
+
<?php
|
38 |
+
|
39 |
+
$count = count( $products );
|
40 |
+
|
41 |
+
switch ( $count ) {
|
42 |
+
case 0:
|
43 |
+
case 3:
|
44 |
+
case 6:
|
45 |
+
$wide_indexes = array();
|
46 |
+
break;
|
47 |
+
|
48 |
+
case 2:
|
49 |
+
$wide_indexes = array( 0, 1 );
|
50 |
+
break;
|
51 |
+
|
52 |
+
case 5:
|
53 |
+
$wide_indexes = array( 0, 4 );
|
54 |
+
break;
|
55 |
+
|
56 |
+
case 1:
|
57 |
+
case 4:
|
58 |
+
case 7:
|
59 |
+
default:
|
60 |
+
$wide_indexes = array( 0 );
|
61 |
+
}
|
62 |
+
|
63 |
+
foreach ( $products as $i => $product ) {
|
64 |
+
?>
|
65 |
+
<div class="tribe-addon<?php echo in_array( $i, $wide_indexes ) ? ' first' : ''; ?>">
|
66 |
+
<div class="thumb">
|
67 |
+
<a href="<?php echo esc_url( $product->link ); ?>" target="_blank"><img src="<?php echo esc_url( tribe_resource_url( $product->image, false, null, $main ) ); ?>" /></a>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
68 |
</div>
|
69 |
+
<div class="caption">
|
70 |
+
<h4><a href="<?php echo esc_url( $product->link ); ?>" target="_blank"><?php echo esc_html( $product->title ); ?></a></h4>
|
|
|
|
|
|
|
71 |
|
72 |
+
<div class="description">
|
73 |
+
<p><?php echo $product->description; ?></p>
|
74 |
+
<?php
|
75 |
+
if ( isset( $product->requires ) ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
76 |
?>
|
77 |
+
<p><strong><?php esc_html_e( 'Requires:', 'tribe-common' );?></strong> <?php echo esc_html( $product->requires ); ?></p>
|
78 |
+
<?php
|
79 |
+
}
|
80 |
+
?>
|
81 |
+
</div>
|
82 |
|
83 |
+
<a class="button <?php esc_attr_e( $button_class ); ?>" href="<?php echo esc_url( $product->link ); ?>"><?php echo $button_label; // escaped above ?></a>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
84 |
</div>
|
|
|
|
|
|
|
|
|
85 |
</div>
|
|
|
|
|
|
|
86 |
|
87 |
+
<?php
|
88 |
+
}
|
89 |
+
?>
|
90 |
</div>
|
|
|
91 |
</div>
|
92 |
+
<?php
|
93 |
+
}
|
94 |
+
?>
|
95 |
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
common/src/admin-views/notices/tribe-bf-2018-et.php
ADDED
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* The Black Friday 2018 admin notice for when only ET is active.
|
4 |
+
*
|
5 |
+
* @since 4.7.23
|
6 |
+
*
|
7 |
+
* @var string $mascot_url The local URL for the notice's mascot image.
|
8 |
+
* @var int $end_time The Unix timestamp for the sale's end time.
|
9 |
+
*/
|
10 |
+
?>
|
11 |
+
<div class="tribe-marketing-notice">
|
12 |
+
<div class="tribe-notice-icon">
|
13 |
+
<img src="<?php echo esc_url( $mascot_url ); ?>" />
|
14 |
+
</div>
|
15 |
+
<div class="tribe-notice-content">
|
16 |
+
<h3>Event Tickets Plus is on Sale Today!</h3>
|
17 |
+
<p>Premium functionality = premium results. Event Tickets Plus integrates directly with WooCommerce and includes a slew of prime features like global ticket stock, custom attendee fields, and QR codes for easy check-ins.</p>
|
18 |
+
<p><a target="_blank" class="button button-primary alignleft" href="http://m.tri.be/1a8m">Shop our holiday sale now!</a></p>
|
19 |
+
</div>
|
20 |
+
</div>
|
common/src/admin-views/notices/tribe-bf-2018-general.php
ADDED
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* The Black Friday 2018 admin notice for when both ET and TEC are active.
|
4 |
+
*
|
5 |
+
* @since 4.7.23
|
6 |
+
*
|
7 |
+
* @var string $mascot_url The local URL for the notice's mascot image.
|
8 |
+
* @var int $end_time The Unix timestamp for the sale's end time.
|
9 |
+
*/
|
10 |
+
?>
|
11 |
+
<div class="tribe-marketing-notice">
|
12 |
+
<div class="tribe-notice-icon">
|
13 |
+
<img src="<?php echo esc_url( $mascot_url ); ?>" />
|
14 |
+
</div>
|
15 |
+
<div class="tribe-notice-content">
|
16 |
+
<h3>Today: All Premium Calendar Add-Ons are on Sale!</h3>
|
17 |
+
<p>Save up to 30% on all of our premium calendar and ticketing add-ons, including Events Calendar PRO, Event Tickets Plus, Filter Bar, Community Events, and more!</p>
|
18 |
+
<p><a target="_blank" class="button button-primary" href="http://m.tri.be/1a8n">Shop Now</a></p>
|
19 |
+
</div>
|
20 |
+
</div>
|
common/src/admin-views/notices/tribe-bf-2018-tec.php
ADDED
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* The Black Friday 2018 admin notice for when only TEC is active.
|
4 |
+
*
|
5 |
+
* @since 4.7.23
|
6 |
+
*
|
7 |
+
* @var string $mascot_url The local URL for the notice's mascot image.
|
8 |
+
* @var int $end_time The Unix timestamp for the sale's end time.
|
9 |
+
*/
|
10 |
+
?>
|
11 |
+
<div class="tribe-marketing-notice tribe-bf-2018-tec">
|
12 |
+
<div class="tribe-notice-icon">
|
13 |
+
<img src="<?php echo esc_url( $mascot_url ); ?>" />
|
14 |
+
</div>
|
15 |
+
<div class="tribe-notice-content">
|
16 |
+
<h3>Up to 30% Off!</h3>
|
17 |
+
<p>Save big on Events Calendar PRO, Filter Bar, Community Events, and more during our huge Black Friday sale!</p>
|
18 |
+
<p><a target="_blank" class="button button-primary" href="http://m.tri.be/1a8l">Shop Now</a> <em>(But hurry, because this offer ends on <abbr title="<?php echo esc_attr( date_i18n( 'r', $end_time ) ); ?>">Monday, November 26th</abbr>.)</em></p>
|
19 |
+
</div>
|
20 |
+
</div>
|
common/src/admin-views/notices/tribe-bf-general.php
DELETED
@@ -1,22 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* The Black Friday admin notice.
|
4 |
-
*
|
5 |
-
* @since 4.12.14
|
6 |
-
*
|
7 |
-
* @var string $icon_url The local URL for the notice's image.
|
8 |
-
* @var string $cta_url The short URL for black friday.
|
9 |
-
*/
|
10 |
-
?>
|
11 |
-
<div class="tribe-marketing-notice">
|
12 |
-
<div class="tribe-marketing-notice__icon">
|
13 |
-
<img src="<?php echo esc_url( $icon_url ); ?>"/>
|
14 |
-
</div>
|
15 |
-
<div class="tribe-marketing-notice__content">
|
16 |
-
<h3>Save 40% on Every. Single. Plugin.</h3>
|
17 |
-
<p>
|
18 |
-
Black Friday Sale now through November 30.
|
19 |
-
<span class="tribe-marketing-notice__cta"><a target="_blank" href="<?php echo esc_url( $cta_url ); ?>">Shop now</a></span>
|
20 |
-
</p>
|
21 |
-
</div>
|
22 |
-
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
common/src/admin-views/notices/tribe-gutenberg-release.php
ADDED
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* The Gutenberg Release admin notice for when TEC is active, or TEC *and* ET.
|
4 |
+
*
|
5 |
+
* @since 4.7.23
|
6 |
+
*
|
7 |
+
* @var int $icon The local URL for the notice's icon image.
|
8 |
+
* @var int $end_time The Unix timestamp for the release notice's end time.
|
9 |
+
*/
|
10 |
+
?>
|
11 |
+
<div class="tribe-marketing-notice">
|
12 |
+
<div class="tribe-notice-icon">
|
13 |
+
<img src="<?php echo esc_url( $icon_url ); ?>" />
|
14 |
+
</div>
|
15 |
+
<div class="tribe-notice-content">
|
16 |
+
<h3>Breaking News: Gutenberg Block Editor Release</h3>
|
17 |
+
<p>The beta version of WordPress 5.0 is out! This is a <strong>big deal</strong>: the official release of the new editing interface is right around the corner.</p>
|
18 |
+
<p>Once this release happens, the new block editor will become the default editor for all WordPress sites running version 5.0 or higher. We recommend you familiarize yourself ASAP so you’re ready for the change when it happens.</p>
|
19 |
+
<a href="http://m.tri.be/1a8o" target="_blank" class="button button-primary">Get Up to Speed</a>
|
20 |
+
</div>
|
21 |
+
</div>
|
common/src/admin-views/tabbed-view/tabbed-view.php
CHANGED
@@ -12,19 +12,7 @@ $tabs = $view->get_visibles();
|
|
12 |
<?php if ( count( $tabs ) > 1 ) : ?>
|
13 |
<div class="tabbed-view-wrap wrap">
|
14 |
<?php if ( $view->get_label() ) : ?>
|
15 |
-
<h1>
|
16 |
-
<?php echo esc_html( $view->get_label() ); ?>
|
17 |
-
<?php
|
18 |
-
/**
|
19 |
-
* Add an action to render content after text label.
|
20 |
-
*
|
21 |
-
* @since 4.12.17
|
22 |
-
*
|
23 |
-
* @param Tribe__Tabbed_View $view Tabbed View Object.
|
24 |
-
*/
|
25 |
-
do_action( 'tribe_tabbed_view_heading_after_text_label', $view );
|
26 |
-
?>
|
27 |
-
</h1>
|
28 |
<?php endif; ?>
|
29 |
|
30 |
<h2 class="nav-tab-wrapper">
|
12 |
<?php if ( count( $tabs ) > 1 ) : ?>
|
13 |
<div class="tabbed-view-wrap wrap">
|
14 |
<?php if ( $view->get_label() ) : ?>
|
15 |
+
<h1><?php echo esc_html( $view->get_label() ); ?></h1>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
16 |
<?php endif; ?>
|
17 |
|
18 |
<h2 class="nav-tab-wrapper">
|
common/src/admin-views/tribe-options-display.php
CHANGED
@@ -2,61 +2,60 @@
|
|
2 |
|
3 |
$sample_date = strtotime( 'January 15 ' . date( 'Y' ) );
|
4 |
|
5 |
-
$displayTab =
|
6 |
'priority' => 20,
|
7 |
'fields' =>
|
8 |
/**
|
9 |
* Filter the fields available on the display settings tab
|
10 |
*
|
11 |
* @param array $fields a nested associative array of fields & field info passed to Tribe__Field
|
12 |
-
*
|
13 |
* @see Tribe__Field
|
14 |
*/
|
15 |
apply_filters(
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
],
|
54 |
-
'validation_type' => 'options',
|
55 |
-
],
|
56 |
-
'tribe-form-content-end' => [
|
57 |
-
'type' => 'html',
|
58 |
-
'html' => '</div>',
|
59 |
],
|
60 |
-
|
61 |
-
|
62 |
-
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
3 |
$sample_date = strtotime( 'January 15 ' . date( 'Y' ) );
|
4 |
|
5 |
+
$displayTab = array(
|
6 |
'priority' => 20,
|
7 |
'fields' =>
|
8 |
/**
|
9 |
* Filter the fields available on the display settings tab
|
10 |
*
|
11 |
* @param array $fields a nested associative array of fields & field info passed to Tribe__Field
|
|
|
12 |
* @see Tribe__Field
|
13 |
*/
|
14 |
apply_filters(
|
15 |
+
'tribe_display_settings_tab_fields', array(
|
16 |
+
'tribe-form-content-start' => array(
|
17 |
+
'type' => 'html',
|
18 |
+
'html' => '<div class="tribe-settings-form-wrap">',
|
19 |
+
),
|
20 |
+
'tribeEventsDateFormatSettingsTitle' => array(
|
21 |
+
'type' => 'html',
|
22 |
+
'html' => '<h3>' . esc_html__( 'Date Format Settings', 'tribe-common' ) . '</h3>',
|
23 |
+
),
|
24 |
+
'tribeEventsDateFormatExplanation' => array(
|
25 |
+
'type' => 'html',
|
26 |
+
'html' => '<p>'
|
27 |
+
. sprintf(
|
28 |
+
__( 'The following three fields accept the date format options available to the PHP %1$s function. <a href="%2$s" target="_blank">Learn how to make your own date format here</a>.', 'tribe-common' ),
|
29 |
+
'<code>date()</code>',
|
30 |
+
'https://codex.wordpress.org/Formatting_Date_and_Time'
|
31 |
+
)
|
32 |
+
. '</p>',
|
33 |
+
),
|
34 |
+
'datepickerFormat' => [
|
35 |
+
'type' => 'dropdown',
|
36 |
+
'label' => esc_html__( 'Compact Date Format', 'tribe-common' ),
|
37 |
+
'tooltip' => esc_html__( 'Select the date format used for elements with minimal space, such as in datepickers.', 'tribe-common' ),
|
38 |
+
'default' => 1,
|
39 |
+
'options' => [
|
40 |
+
'0' => date( 'Y-m-d', $sample_date ),
|
41 |
+
'1' => date( 'n/j/Y', $sample_date ),
|
42 |
+
'2' => date( 'm/d/Y', $sample_date ),
|
43 |
+
'3' => date( 'j/n/Y', $sample_date ),
|
44 |
+
'4' => date( 'd/m/Y', $sample_date ),
|
45 |
+
'5' => date( 'n-j-Y', $sample_date ),
|
46 |
+
'6' => date( 'm-d-Y', $sample_date ),
|
47 |
+
'7' => date( 'j-n-Y', $sample_date ),
|
48 |
+
'8' => date( 'd-m-Y', $sample_date ),
|
49 |
+
'9' => date( 'Y.m.d', $sample_date ),
|
50 |
+
'10' => date( 'm.d.Y', $sample_date ),
|
51 |
+
'11' => date( 'd.m.Y', $sample_date ),
|
|
|
|
|
|
|
|
|
|
|
|
|
52 |
],
|
53 |
+
'validation_type' => 'options',
|
54 |
+
],
|
55 |
+
'tribe-form-content-end' => [
|
56 |
+
'type' => 'html',
|
57 |
+
'html' => '</div>',
|
58 |
+
],
|
59 |
+
)
|
60 |
+
),
|
61 |
+
);
|
common/src/admin-views/tribe-options-general.php
CHANGED
@@ -3,20 +3,16 @@
|
|
3 |
$generalTabFields = [
|
4 |
'info-start' => [
|
5 |
'type' => 'html',
|
6 |
-
'html' => '<div id="modern-tribe-info">
|
7 |
-
<img
|
8 |
-
src="' . plugins_url( 'resources/images/logo/tec-brand.svg', dirname( __FILE__ ) ) . '"
|
9 |
-
alt="' . esc_attr( 'The Events Calendar brand logo', 'tribe-common' ) . '"
|
10 |
-
/>',
|
11 |
],
|
12 |
'event-tickets-info' => [
|
13 |
'type' => 'html',
|
14 |
-
'html' => '<p>' . sprintf( esc_html__( 'Thank you for using Event Tickets! All of us at
|
15 |
'conditional' => ! class_exists( 'Tribe__Events__Main' ),
|
16 |
],
|
17 |
'event-tickets-upsell-info' => [
|
18 |
'type' => 'html',
|
19 |
-
'html' => '<p>' . sprintf( esc_html__( 'Optimize your site\'s event listings with %1$sThe Events Calendar%2$s, our free calendar plugin. Looking for additional functionality including recurring events, user-submission, advanced ticket sales and more? Check out our %3$spremium add-ons%4$s.', 'tribe-common' ), '<a href="http://
|
20 |
'conditional' => ! class_exists( 'Tribe__Events__Main' ),
|
21 |
],
|
22 |
'upsell-info' => [
|
@@ -31,7 +27,7 @@ $generalTabFields = [
|
|
31 |
],
|
32 |
'donate-link-info' => [
|
33 |
'type' => 'html',
|
34 |
-
'html' => '<p>' . esc_html__( 'Are you thinking "Wow, this plugin is amazing! I should say thanks to
|
35 |
'conditional' => class_exists( 'Tribe__Events__Main' ),
|
36 |
],
|
37 |
'donate-link' => [
|
@@ -78,3 +74,4 @@ $generalTab = [
|
|
78 |
'priority' => 10,
|
79 |
'fields' => apply_filters( 'tribe_general_settings_tab_fields', $generalTabFields ),
|
80 |
];
|
|
3 |
$generalTabFields = [
|
4 |
'info-start' => [
|
5 |
'type' => 'html',
|
6 |
+
'html' => '<div id="modern-tribe-info"><img src="' . plugins_url( 'resources/images/modern-tribe@2x.png', dirname( __FILE__ ) ) . '" alt="Modern Tribe Inc." title="Modern Tribe Inc.">',
|
|
|
|
|
|
|
|
|
7 |
],
|
8 |
'event-tickets-info' => [
|
9 |
'type' => 'html',
|
10 |
+
'html' => '<p>' . sprintf( esc_html__( 'Thank you for using Event Tickets! All of us at Modern Tribe sincerely appreciate your support and we\'re excited to see you using our plugins. Check out our handy %1$sNew User Primer%2$s to get started.', 'tribe-common' ), '<a href="http://m.tri.be/18nd">', '</a>' ) . '</p>',
|
11 |
'conditional' => ! class_exists( 'Tribe__Events__Main' ),
|
12 |
],
|
13 |
'event-tickets-upsell-info' => [
|
14 |
'type' => 'html',
|
15 |
+
'html' => '<p>' . sprintf( esc_html__( 'Optimize your site\'s event listings with %1$sThe Events Calendar%2$s, our free calendar plugin. Looking for additional functionality including recurring events, user-submission, advanced ticket sales and more? Check out our %3$spremium add-ons%4$s.', 'tribe-common' ), '<a href="http://m.tri.be/18x6">', '</a>', '<a href="http://m.tri.be/18x5">', '</a>' ) . '</p>',
|
16 |
'conditional' => ! class_exists( 'Tribe__Events__Main' ),
|
17 |
],
|
18 |
'upsell-info' => [
|
27 |
],
|
28 |
'donate-link-info' => [
|
29 |
'type' => 'html',
|
30 |
+
'html' => '<p>' . esc_html__( 'Are you thinking "Wow, this plugin is amazing! I should say thanks to Modern Tribe for all their hard work." The greatest thanks we could ask for is recognition. Add a small text-only link at the bottom of your calendar pointing to The Events Calendar project.', 'tribe-common' ) . '<br><a href="' . esc_url( plugins_url( 'resources/images/donate-link-screenshot.png', dirname( __FILE__ ) ) ) . '" class="thickbox">' . esc_html__( 'See an example of the link', 'tribe-common' ) . '</a>.</p>',
|
31 |
'conditional' => class_exists( 'Tribe__Events__Main' ),
|
32 |
],
|
33 |
'donate-link' => [
|
74 |
'priority' => 10,
|
75 |
'fields' => apply_filters( 'tribe_general_settings_tab_fields', $generalTabFields ),
|
76 |
];
|
77 |
+
|
common/src/admin-views/tribe-options-help.php
CHANGED
@@ -7,65 +7,35 @@ $plugins = $help->get_plugins( null, false );
|
|
7 |
|
8 |
// Creates the Feature Box section
|
9 |
$help->add_section( 'feature-box', null, 0, 'box' );
|
10 |
-
$help->add_section_content( 'feature-box', '<img src="' . esc_url( plugins_url( 'resources/images/
|
11 |
-
$help->add_section_content( 'feature-box', sprintf( esc_html__( 'Thank you for using %s! All of us at
|
12 |
|
13 |
// Creates the Support section
|
14 |
$help->add_section( 'support', __( 'Getting Support', 'tribe-common' ), 10 );
|
15 |
-
$help->add_section_content( 'support', sprintf( __( 'Our website’s %s is a great place to find tips and tricks for using and customizing our plugins.', 'tribe-common' ), '<a href="http://
|
16 |
$help->add_section_content( 'support', sprintf(
|
17 |
'<strong>%1$s</strong> %2$s',
|
18 |
esc_html__( 'Want to dive deeper?', 'tribe-common' ),
|
19 |
sprintf(
|
20 |
__( 'Check out our %s for developers.', 'tribe-common' ),
|
21 |
-
'<a href="http://
|
22 |
)
|
23 |
), 50 );
|
24 |
|
25 |
// Creates the Extra Help section
|
26 |
$help->add_section( 'extra-help', __( 'Getting More Help', 'tribe-common' ), 20 );
|
27 |
$help->add_section_content( 'extra-help', __( 'While the resources above help solve a majority of the issues we see, there are times you might be looking for extra support. If you need assistance using our plugins and would like us to take a look, please follow these steps:', 'tribe-common' ), 0 );
|
28 |
-
$help->add_section_content(
|
29 |
-
'
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
'tribe-common'
|
36 |
-
),
|
37 |
-
'<strong><a href="http://evnt.is/18j9" target="_blank">' . __(
|
38 |
-
'Check our Knowledgebase',
|
39 |
-
'tribe-common'
|
40 |
-
) . '</a></strong>'
|
41 |
-
),
|
42 |
-
sprintf(
|
43 |
-
__(
|
44 |
-
'%s. Testing for an existing conflict is the best start for in-depth troubleshooting. We will often ask you to follow these steps when opening a new thread, so doing this ahead of time will be super helpful.',
|
45 |
-
'tribe-common'
|
46 |
-
),
|
47 |
-
'<strong><a href="http://evnt.is/18jh" target="_blank">' . __(
|
48 |
-
'Test for a theme or plugin conflict',
|
49 |
-
'tribe-common'
|
50 |
-
) . '</a></strong>'
|
51 |
-
),
|
52 |
-
sprintf(
|
53 |
-
__(
|
54 |
-
'%s. There are very few issues we haven’t seen and it’s likely another user has already asked your question and gotten an answer from our support staff. While posting to the help desk is open only to paid customers, they are open for anyone to search and review.',
|
55 |
-
'tribe-common'
|
56 |
-
),
|
57 |
-
'<strong><a href="http://evnt.is/4w/" target="_blank">' . __(
|
58 |
-
'Search our support help desk',
|
59 |
-
'tribe-common'
|
60 |
-
) . '</a></strong>'
|
61 |
-
),
|
62 |
-
],
|
63 |
-
10
|
64 |
-
);
|
65 |
|
66 |
// By default these three will be gathered
|
67 |
$help->add_section_content( 'extra-help', __( 'Please note that all hands-on support is provided via the help desk. You can email or tweet at us… but we will probably point you back to the help desk 😄', 'tribe-common' ), 40 );
|
68 |
-
$help->add_section_content( 'extra-help', '<div style="text-align: right;"><a href="http://
|
69 |
|
70 |
// Creates the System Info section
|
71 |
$help->add_section( 'system-info', __( 'System Information', 'tribe-common' ), 30 );
|
7 |
|
8 |
// Creates the Feature Box section
|
9 |
$help->add_section( 'feature-box', null, 0, 'box' );
|
10 |
+
$help->add_section_content( 'feature-box', '<img src="' . esc_url( plugins_url( 'resources/images/modern-tribe@2x.png', dirname( __FILE__ ) ) ) . '" alt="Modern Tribe Inc." title="Modern Tribe Inc.">' );
|
11 |
+
$help->add_section_content( 'feature-box', sprintf( esc_html__( 'Thank you for using %s! All of us at Modern Tribe sincerely appreciate your support and we’re excited to see you using our plugins.', 'tribe-common' ), $help->get_plugins_text() ) );
|
12 |
|
13 |
// Creates the Support section
|
14 |
$help->add_section( 'support', __( 'Getting Support', 'tribe-common' ), 10 );
|
15 |
+
$help->add_section_content( 'support', sprintf( __( 'Our website’s %s is a great place to find tips and tricks for using and customizing our plugins.', 'tribe-common' ), '<a href="http://m.tri.be/18j9" target="_blank">' . __( 'Knowledgebase', 'tribe-common' ) . '</a>' ), 0 );
|
16 |
$help->add_section_content( 'support', sprintf(
|
17 |
'<strong>%1$s</strong> %2$s',
|
18 |
esc_html__( 'Want to dive deeper?', 'tribe-common' ),
|
19 |
sprintf(
|
20 |
__( 'Check out our %s for developers.', 'tribe-common' ),
|
21 |
+
'<a href="http://m.tri.be/18jf" target="_blank">' . esc_html__( 'list of available functions', 'tribe-common' ) . '</a>'
|
22 |
)
|
23 |
), 50 );
|
24 |
|
25 |
// Creates the Extra Help section
|
26 |
$help->add_section( 'extra-help', __( 'Getting More Help', 'tribe-common' ), 20 );
|
27 |
$help->add_section_content( 'extra-help', __( 'While the resources above help solve a majority of the issues we see, there are times you might be looking for extra support. If you need assistance using our plugins and would like us to take a look, please follow these steps:', 'tribe-common' ), 0 );
|
28 |
+
$help->add_section_content( 'extra-help', array(
|
29 |
+
'type' => 'ol',
|
30 |
+
|
31 |
+
sprintf( __( '%s. All of the common (and not-so-common) answers to questions we see are here. It’s often the fastest path to finding an answer!', 'tribe-common' ), '<strong><a href="http://m.tri.be/18j9" target="_blank">' . __( 'Check our Knowledgebase', 'tribe-common' ) . '</a></strong>' ),
|
32 |
+
sprintf( __( '%s. Testing for an existing conflict is the best start for in-depth troubleshooting. We will often ask you to follow these steps when opening a new thread, so doing this ahead of time will be super helpful.', 'tribe-common' ), '<strong><a href="http://m.tri.be/18jh" target="_blank">' . __( 'Test for a theme or plugin conflict', 'tribe-common' ) . '</a></strong>' ),
|
33 |
+
sprintf( __( '%s. There are very few issues we haven’t seen and it’s likely another user has already asked your question and gotten an answer from our support staff. While posting to the help desk is open only to paid customers, they are open for anyone to search and review.', 'tribe-common' ), '<strong><a href="http://m.tri.be/4w/" target="_blank">' . __( 'Search our support help desk', 'tribe-common' ) . '</a></strong>' ),
|
34 |
+
), 10 );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
35 |
|
36 |
// By default these three will be gathered
|
37 |
$help->add_section_content( 'extra-help', __( 'Please note that all hands-on support is provided via the help desk. You can email or tweet at us… but we will probably point you back to the help desk 😄', 'tribe-common' ), 40 );
|
38 |
+
$help->add_section_content( 'extra-help', '<div style="text-align: right;"><a href="http://m.tri.be/18ji" target="_blank" class="button">' . __( 'Read more about our support policy', 'tribe-common' ) . '</a></div>', 40 );
|
39 |
|
40 |
// Creates the System Info section
|
41 |
$help->add_section( 'system-info', __( 'System Information', 'tribe-common' ), 30 );
|
common/src/admin-views/tribe-options-licenses.php
CHANGED
@@ -8,9 +8,9 @@ $html = '<p>' .
|
|
8 |
$html .= '<p>' .
|
9 |
sprintf(
|
10 |
esc_html__( 'In order to register a plugin license, you\'ll first need to %1$sdownload and install%2$s the plugin you purchased. You can download the latest version of your plugin(s) from %3$syour account\'s downloads page%4$s. Once the plugin is installed and activated on this site, the license key field will appear below.', 'tribe-common' ),
|
11 |
-
'<a href="http://
|
12 |
'</a>',
|
13 |
-
'<a href="http://
|
14 |
'</a>'
|
15 |
) .
|
16 |
'</p>';
|
@@ -24,22 +24,22 @@ $html .= '<p>' .
|
|
24 |
'</p>';
|
25 |
|
26 |
$html .= '<ul>';
|
27 |
-
$html .= '<li><a href="http://
|
28 |
esc_html__( 'Why am I being told my license key is out of installs?', 'tribe-common' ) .
|
29 |
'</a></li>';
|
30 |
-
$html .= '<li><a href="http://
|
31 |
esc_html__( 'View and manage your license keys', 'tribe-common' ) .
|
32 |
'</a></li>';
|
33 |
-
$html .= '<li><a href="http://
|
34 |
esc_html__( 'Moving your license keys', 'tribe-common' ) .
|
35 |
'</a></li>';
|
36 |
-
$html .= '<li><a href="http://
|
37 |
esc_html__( 'Expired license keys and subscriptions', 'tribe-common' ) .
|
38 |
'</a></li>';
|
39 |
|
40 |
// Expand with extra information for multisite users
|
41 |
if ( is_multisite() ) {
|
42 |
-
$html .= '<li><a href="http://
|
43 |
esc_html__( 'Licenses for Multisites', 'tribe-common' ) .
|
44 |
'</a></li>';
|
45 |
}
|
@@ -47,21 +47,21 @@ if ( is_multisite() ) {
|
|
47 |
$html .= '</ul>';
|
48 |
|
49 |
|
50 |
-
$licenses_tab =
|
51 |
-
'info-start'
|
52 |
'type' => 'html',
|
53 |
'html' => '<div id="modern-tribe-info">',
|
54 |
-
|
55 |
-
'info-box-title'
|
56 |
'type' => 'html',
|
57 |
'html' => '<h2>' . esc_html__( 'Licenses', 'tribe-common' ) . '</h2>',
|
58 |
-
|
59 |
-
'info-box-description' =>
|
60 |
'type' => 'html',
|
61 |
'html' => $html,
|
62 |
-
|
63 |
-
'info-end'
|
64 |
'type' => 'html',
|
65 |
'html' => '</div>',
|
66 |
-
|
67 |
-
|
8 |
$html .= '<p>' .
|
9 |
sprintf(
|
10 |
esc_html__( 'In order to register a plugin license, you\'ll first need to %1$sdownload and install%2$s the plugin you purchased. You can download the latest version of your plugin(s) from %3$syour account\'s downloads page%4$s. Once the plugin is installed and activated on this site, the license key field will appear below.', 'tribe-common' ),
|
11 |
+
'<a href="http://m.tri.be/1acu" target="_blank">',
|
12 |
'</a>',
|
13 |
+
'<a href="http://m.tri.be/1act" target="_blank">',
|
14 |
'</a>'
|
15 |
) .
|
16 |
'</p>';
|
24 |
'</p>';
|
25 |
|
26 |
$html .= '<ul>';
|
27 |
+
$html .= '<li><a href="http://m.tri.be/1acv" target="_blank">' .
|
28 |
esc_html__( 'Why am I being told my license key is out of installs?', 'tribe-common' ) .
|
29 |
'</a></li>';
|
30 |
+
$html .= '<li><a href="http://m.tri.be/1ad1" target="_blank">' .
|
31 |
esc_html__( 'View and manage your license keys', 'tribe-common' ) .
|
32 |
'</a></li>';
|
33 |
+
$html .= '<li><a href="http://m.tri.be/1acw" target="_blank">' .
|
34 |
esc_html__( 'Moving your license keys', 'tribe-common' ) .
|
35 |
'</a></li>';
|
36 |
+
$html .= '<li><a href="http://m.tri.be/1acx" target="_blank">' .
|
37 |
esc_html__( 'Expired license keys and subscriptions', 'tribe-common' ) .
|
38 |
'</a></li>';
|
39 |
|
40 |
// Expand with extra information for multisite users
|
41 |
if ( is_multisite() ) {
|
42 |
+
$html .= '<li><a href="http://m.tri.be/1ad0" target="_blank">' .
|
43 |
esc_html__( 'Licenses for Multisites', 'tribe-common' ) .
|
44 |
'</a></li>';
|
45 |
}
|
47 |
$html .= '</ul>';
|
48 |
|
49 |
|
50 |
+
$licenses_tab = array(
|
51 |
+
'info-start' => array(
|
52 |
'type' => 'html',
|
53 |
'html' => '<div id="modern-tribe-info">',
|
54 |
+
),
|
55 |
+
'info-box-title' => array(
|
56 |
'type' => 'html',
|
57 |
'html' => '<h2>' . esc_html__( 'Licenses', 'tribe-common' ) . '</h2>',
|
58 |
+
),
|
59 |
+
'info-box-description' => array(
|
60 |
'type' => 'html',
|
61 |
'html' => $html,
|
62 |
+
),
|
63 |
+
'info-end' => array(
|
64 |
'type' => 'html',
|
65 |
'html' => '</div>',
|
66 |
+
),
|
67 |
+
);
|
common/src/admin-views/tribe-options-network.php
CHANGED
@@ -1,35 +1,35 @@
|
|
1 |
<?php
|
2 |
-
$allTabs = apply_filters( 'tribe_settings_all_tabs',
|
3 |
|
4 |
-
$networkTab =
|
5 |
'priority' => 10,
|
6 |
'network_admin' => true,
|
7 |
'fields' => apply_filters(
|
8 |
-
'tribe_network_settings_tab_fields',
|
9 |
-
'info-start' =>
|
10 |
'type' => 'html',
|
11 |
'html' => '<div id="modern-tribe-info">',
|
12 |
-
|
13 |
-
'info-box-title' =>
|
14 |
'type' => 'html',
|
15 |
'html' => '<h1>' . esc_html__( 'Network Settings', 'tribe-common' ) . '</h1>',
|
16 |
-
|
17 |
-
'info-box-description' =>
|
18 |
'type' => 'html',
|
19 |
-
'html' => '<p>' . esc_html__( 'This is where all of the global network settings for The Events Calendar can be modified.', 'tribe-common' ) . '</p>',
|
20 |
-
|
21 |
-
'info-end' =>
|
22 |
'type' => 'html',
|
23 |
'html' => '</div>',
|
24 |
-
|
25 |
-
'hideSettingsTabs' =>
|
26 |
'type' => 'checkbox_list',
|
27 |
'label' => esc_html__( 'Hide the following settings tabs on every site:', 'tribe-common' ),
|
28 |
'default' => false,
|
29 |
'options' => $allTabs,
|
30 |
'validation_type' => 'options_multi',
|
31 |
'can_be_empty' => true,
|
32 |
-
|
33 |
-
|
34 |
),
|
35 |
-
|
1 |
<?php
|
2 |
+
$allTabs = apply_filters( 'tribe_settings_all_tabs', array() );
|
3 |
|
4 |
+
$networkTab = array(
|
5 |
'priority' => 10,
|
6 |
'network_admin' => true,
|
7 |
'fields' => apply_filters(
|
8 |
+
'tribe_network_settings_tab_fields', array(
|
9 |
+
'info-start' => array(
|
10 |
'type' => 'html',
|
11 |
'html' => '<div id="modern-tribe-info">',
|
12 |
+
),
|
13 |
+
'info-box-title' => array(
|
14 |
'type' => 'html',
|
15 |
'html' => '<h1>' . esc_html__( 'Network Settings', 'tribe-common' ) . '</h1>',
|
16 |
+
),
|
17 |
+
'info-box-description' => array(
|
18 |
'type' => 'html',
|
19 |
+
'html' => '<p>' . esc_html__( 'This is where all of the global network settings for Modern Tribe\'s The Events Calendar can be modified.', 'tribe-common' ) . '</p>',
|
20 |
+
),
|
21 |
+
'info-end' => array(
|
22 |
'type' => 'html',
|
23 |
'html' => '</div>',
|
24 |
+
),
|
25 |
+
'hideSettingsTabs' => array(
|
26 |
'type' => 'checkbox_list',
|
27 |
'label' => esc_html__( 'Hide the following settings tabs on every site:', 'tribe-common' ),
|
28 |
'default' => false,
|
29 |
'options' => $allTabs,
|
30 |
'validation_type' => 'options_multi',
|
31 |
'can_be_empty' => true,
|
32 |
+
),
|
33 |
+
)
|
34 |
),
|
35 |
+
);
|
common/src/admin-views/widgets/components/fields.php
DELETED
@@ -1,43 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Admin View: Widget Component Fields Container
|
4 |
-
*
|
5 |
-
* Administration Views cannot be overwritten by default from your theme.
|
6 |
-
*
|
7 |
-
* See more documentation about our views templating system.
|
8 |
-
*
|
9 |
-
* @link http://evnt.is/1aiy
|
10 |
-
*
|
11 |
-
* @var \Tribe__Template $this Instance of the template including this file.
|
12 |
-
* @var array<mixed> $fields_container_classes (optional) HTML classes used for the form element
|
13 |
-
* @var Widget_Abstract $widget_obj An instance of the widget abstract.
|
14 |
-
* @var array<array,mixed> $fields An array of admin fields to display in the widget form.
|
15 |
-
*
|
16 |
-
* @version 4.12.18
|
17 |
-
*/
|
18 |
-
|
19 |
-
use Tribe\Widget\Widget_Abstract;
|
20 |
-
|
21 |
-
$default_classes = [
|
22 |
-
'tribe-widget-fields'
|
23 |
-
];
|
24 |
-
|
25 |
-
$classes = array_merge( $default_classes, $this->get( 'fields_container_classes', [] ) );
|
26 |
-
?>
|
27 |
-
|
28 |
-
<div
|
29 |
-
<?php tribe_classes( $classes ); ?>
|
30 |
-
>
|
31 |
-
<?php
|
32 |
-
foreach ( $fields as $field ) {
|
33 |
-
// Try to load the component for this field type.
|
34 |
-
$this->template( "widgets/components/fields/{$field['type']}", $field );
|
35 |
-
|
36 |
-
// Sets the current field for possible usage inside of the entry point.
|
37 |
-
$this->set_values( [ 'field' => $field ] );
|
38 |
-
|
39 |
-
// Allow fields that were not registered as components to have something loaded.
|
40 |
-
$this->do_entry_point( "field-{$field['type']}" );
|
41 |
-
}
|
42 |
-
?>
|
43 |
-
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
common/src/admin-views/widgets/components/fields/checkbox.php
DELETED
@@ -1,42 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Admin View: Widget Component Checkbox field
|
4 |
-
*
|
5 |
-
* Administration Views cannot be overwritten by default from your theme.
|
6 |
-
*
|
7 |
-
* See more documentation about our views templating system.
|
8 |
-
*
|
9 |
-
* @link http://evnt.is/1aiy
|
10 |
-
*
|
11 |
-
* @version 4.12.18
|
12 |
-
*
|
13 |
-
* @var string $label Label for the checkbox.
|
14 |
-
* @var string $value Value for the checkbox.
|
15 |
-
* @var string $id ID of the checkbox.
|
16 |
-
* @var string $name Name attribute for the checkbox.
|
17 |
-
* @var string $dependency The dependency attributes for the control wrapper.
|
18 |
-
*/
|
19 |
-
|
20 |
-
?>
|
21 |
-
<div
|
22 |
-
class="tribe-widget-form-control tribe-widget-form-control--checkbox"
|
23 |
-
<?php
|
24 |
-
// Not escaped - contains html (data-attr="value").
|
25 |
-
echo $dependency; // phpcs:ignore
|
26 |
-
?>
|
27 |
-
>
|
28 |
-
<input
|
29 |
-
class="tribe-widget-form-control__input"
|
30 |
-
id="<?php echo esc_attr( $id ); ?>"
|
31 |
-
name="<?php echo esc_attr( $name ); ?>"
|
32 |
-
type="checkbox"
|
33 |
-
value="1"
|
34 |
-
<?php checked( tribe_is_truthy( $value ), true ); ?>
|
35 |
-
/>
|
36 |
-
<label
|
37 |
-
class="tribe-widget-form-control__label"
|
38 |
-
for="<?php echo esc_attr( $id ); ?>"
|
39 |
-
>
|
40 |
-
<?php echo esc_html( $label ); ?>
|
41 |
-
</label>
|
42 |
-
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
common/src/admin-views/widgets/components/fields/dropdown.php
DELETED
@@ -1,53 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Admin View: Widget Component Dropdown field.
|
4 |
-
*
|
5 |
-
* Administration Views cannot be overwritten by default from your theme.
|
6 |
-
*
|
7 |
-
* See more documentation about our views templating system.
|
8 |
-
*
|
9 |
-
* @link http://evnt.is/1aiy
|
10 |
-
*
|
11 |
-
* @version 4.12.18
|
12 |
-
*
|
13 |
-
* @var string $label Label for the dropdown.
|
14 |
-
* @var string $value Value for the dropdown.
|
15 |
-
* @var string $id ID of the dropdown.
|
16 |
-
* @var string $name Name attribute for the dropdown.
|
17 |
-
* @var string $dependency The dependency attributes for the control wrapper.
|
18 |
-
* @var array<array<string,string>> $options An array of options in the format
|
19 |
-
* [
|
20 |
-
* 'value => string|int,
|
21 |
-
* 'text' => string
|
22 |
-
* ]
|
23 |
-
*/
|
24 |
-
|
25 |
-
?>
|
26 |
-
<div
|
27 |
-
class="tribe-widget-form-control tribe-widget-form-control--dropdown"
|
28 |
-
<?php
|
29 |
-
// Not escaped - contains html (data-attr="value").
|
30 |
-
echo $dependency; // phpcs:ignore
|
31 |
-
?>
|
32 |
-
>
|
33 |
-
<label
|
34 |
-
class="tribe-widget-form-control__label"
|
35 |
-
for="<?php echo esc_attr( $id ); ?>"
|
36 |
-
>
|
37 |
-
<?php echo esc_html( $label ); ?>
|
38 |
-
</label>
|
39 |
-
<select
|
40 |
-
id="<?php echo esc_attr( $id ); ?>"
|
41 |
-
name="<?php echo esc_attr( $name ); ?>"
|
42 |
-
class="tribe-widget-form-control__input widefat"
|
43 |
-
>
|
44 |
-
<?php foreach ( $options as $option ) { ?>
|
45 |
-
<option
|
46 |
-
value="<?php echo esc_attr( $option['value'] ); ?>"
|
47 |
-
<?php selected( $value, $option['value'] ); ?>
|
48 |
-
>
|
49 |
-
<?php echo esc_html( $option['text'] ); ?>
|
50 |
-
</option>
|
51 |
-
<?php } ?>
|
52 |
-
</select>
|
53 |
-
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
common/src/admin-views/widgets/components/fields/fieldset.php
DELETED
@@ -1,39 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Admin View: Widget Component Fieldset field.
|
4 |
-
*
|
5 |
-
* This component is different in that it calls other components!
|
6 |
-
*
|
7 |
-
* Administration Views cannot be overwritten by default from your theme.
|
8 |
-
*
|
9 |
-
* See more documentation about our views templating system.
|
10 |
-
*
|
11 |
-
* @link http://evnt.is/1aiy
|
12 |
-
*
|
13 |
-
* @version 4.12.18
|
14 |
-
*
|
15 |
-
* @var string $label Title for the fieldset.
|
16 |
-
* @var string $description Description for the fieldset.
|
17 |
-
* @var string $classes Classes to add to the fieldset.
|
18 |
-
* @var string $dependency Dependency attribute for the fieldset.
|
19 |
-
* @var array<string,mixed> $children Child elements for the fieldset.
|
20 |
-
*/
|
21 |
-
|
22 |
-
use Tribe__Utils__Array as Arr;
|
23 |
-
|
24 |
-
$fieldset_classes = array_merge( [ 'tribe-widget-form-control', 'tribe-widget-form-control--fieldset' ], Arr::list_to_array( $classes, ' ' ) );
|
25 |
-
|
26 |
-
?>
|
27 |
-
<fieldset
|
28 |
-
<?php tribe_classes( $fieldset_classes ); ?>
|
29 |
-
<?php
|
30 |
-
// Not escaped - contains html (data-attr="value").
|
31 |
-
echo $dependency; // phpcs:ignore
|
32 |
-
?>
|
33 |
-
>
|
34 |
-
<?php if ( ! empty( $label ) ) : ?>
|
35 |
-
<legend class="tribe-widget-form-control__legend"><?php echo esc_html( $label ); ?></legend>
|
36 |
-
<?php endif; ?>
|
37 |
-
|
38 |
-
<?php $this->template( "widgets/components/fields", [ 'fields' => $children ] ); ?>
|
39 |
-
</fieldset>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
common/src/admin-views/widgets/components/fields/number.php
DELETED
@@ -1,47 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Admin View: Widget Component Number field
|
4 |
-
*
|
5 |
-
* Administration Views cannot be overwritten by default from your theme.
|
6 |
-
*
|
7 |
-
* See more documentation about our views templating system.
|
8 |
-
*
|
9 |
-
* @link http://evnt.is/1aiy
|
10 |
-
*
|
11 |
-
* @version 4.13.0
|
12 |
-
*
|
13 |
-
* @var string $label Label for the number input.
|
14 |
-
* @var string $id ID of the number input.
|
15 |
-
* @var string $name Name attribute for the number input.
|
16 |
-
* @var string $dependency The dependency attributes for the control wrapper.
|
17 |
-
* @var string $value Value for the number input.
|
18 |
-
* @var string $min Value for the min attribute.
|
19 |
-
* @var string $max Value for the max attribute.
|
20 |
-
* @var string $step Value for the step attribute.
|
21 |
-
*/
|
22 |
-
|
23 |
-
?>
|
24 |
-
<div
|
25 |
-
class="tribe-widget-form-control tribe-widget-form-control--text"
|
26 |
-
<?php
|
27 |
-
// Not escaped - contains html (data-attr="value").
|
28 |
-
echo $dependency; // phpcs:ignore
|
29 |
-
?>
|
30 |
-
>
|
31 |
-
<label
|
32 |
-
class="tribe-common-form-control__label"
|
33 |
-
for="<?php echo esc_attr( $id ); ?>"
|
34 |
-
>
|
35 |
-
<?php echo esc_html( $label ); ?>
|
36 |
-
</label>
|
37 |
-
<input
|
38 |
-
class="tribe-common-form-control__input widefat"
|
39 |
-
id="<?php echo esc_attr( $id ); ?>"
|
40 |
-
name="<?php echo esc_attr( $name ); ?>"
|
41 |
-
type="number"
|
42 |
-
min="<?php echo esc_attr( $min ); ?>"
|
43 |
-
max="<?php echo esc_attr( $max ); ?>"
|
44 |
-
step="<?php echo esc_attr( $step ); ?>"
|
45 |
-
value="<?php echo esc_attr( $value ); ?>"
|
46 |
-
/>
|
47 |
-
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
common/src/admin-views/widgets/components/fields/radio.php
DELETED
@@ -1,43 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Admin View: Widget Component Radio field
|
4 |
-
*
|
5 |
-
* Administration Views cannot be overwritten by default from your theme.
|
6 |
-
*
|
7 |
-
* See more documentation about our views templating system.
|
8 |
-
*
|
9 |
-
* @link http://evnt.is/1aiy
|
10 |
-
*
|
11 |
-
* @version 4.12.18
|
12 |
-
*
|
13 |
-
* @var string $label Label for the radio group.
|
14 |
-
* @var string $value Value for the radio group.
|
15 |
-
* @var string $button_value Value for the individual button.
|
16 |
-
* @var string $name Name attribute for the radio.
|
17 |
-
* @var string $id ID attribute for the radio.
|
18 |
-
* @var string $dependency The dependency attributes for the control wrapper.
|
19 |
-
*/
|
20 |
-
|
21 |
-
?>
|
22 |
-
<div
|
23 |
-
class="tribe-widget-form-control tribe-widget-form-control--radio"
|
24 |
-
<?php
|
25 |
-
// Not escaped - contains html (data-attr="value").
|
26 |
-
echo $dependency; // phpcs:ignore
|
27 |
-
?>
|
28 |
-
>
|
29 |
-
<input
|
30 |
-
class="tribe-widget-form-control__input"
|
31 |
-
id="<?php echo esc_attr( $id . '-' . strtolower( $button_value ) ); ?>"
|
32 |
-
name="<?php echo esc_attr( $name ); ?>"
|
33 |
-
type="radio"
|
34 |
-
value="<?php echo esc_attr( $button_value ); ?>"
|
35 |
-
<?php checked( $button_value, $value ); ?>
|
36 |
-
/>
|
37 |
-
<label
|
38 |
-
class="tribe-widget-form-control__label"
|
39 |
-
for="<?php echo esc_attr( $id . '-' . strtolower( $button_value ) ); ?>"
|
40 |
-
>
|
41 |
-
<?php echo esc_html( $label ); ?>
|
42 |
-
</label>
|
43 |
-
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
common/src/admin-views/widgets/components/fields/section.php
DELETED
@@ -1,40 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Admin View: Widget Component Section field.
|
4 |
-
*
|
5 |
-
* This component is different in that it calls other components!
|
6 |
-
*
|
7 |
-
* Administration Views cannot be overwritten by default from your theme.
|
8 |
-
*
|
9 |
-
* See more documentation about our views templating system.
|
10 |
-
*
|
11 |
-
* @link http://evnt.is/1aiy
|
12 |
-
*
|
13 |
-
* @version 4.12.18
|
14 |
-
*
|
15 |
-
* @var string $label Title for the section. (optional)
|
16 |
-
* @var string $description Description for the section. (optional)
|
17 |
-
* @var string $classes Classes to add to the section. (optional)
|
18 |
-
* @var string $dependency The dependency attributes for the control wrapper.
|
19 |
-
* @var array<string,mixed> $children Child elements for the section.
|
20 |
-
*/
|
21 |
-
|
22 |
-
use Tribe__Utils__Array as Arr;
|
23 |
-
|
24 |
-
$section_classes = array_merge( [ 'tribe-widget-form-control', 'tribe-widget-form-control--section' ], Arr::list_to_array( $classes, ' ' ) );
|
25 |
-
|
26 |
-
?>
|
27 |
-
<div
|
28 |
-
<?php tribe_classes( $section_classes ); ?>
|
29 |
-
<?php
|
30 |
-
// Not escaped - contains html (data-attr="value").
|
31 |
-
echo $dependency; // phpcs:ignore
|
32 |
-
?>
|
33 |
-
>
|
34 |
-
<?php if ( ! empty( $label ) ) : ?>
|
35 |
-
<?php // Note: the actual widget title/handle is an <h2>. ?>
|
36 |
-
<h4 class="tribe-widget-form-control__section-title"><?php echo esc_html( $label ); ?></h4>
|
37 |
-
<?php endif; ?>
|
38 |
-
|
39 |
-
<?php $this->template( "widgets/components/fields", [ 'fields' => $children ] ); ?>
|
40 |
-
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
common/src/admin-views/widgets/components/fields/text.php
DELETED
@@ -1,41 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Admin View: Widget Component Text field
|
4 |
-
*
|
5 |
-
* Administration Views cannot be overwritten by default from your theme.
|
6 |
-
*
|
7 |
-
* See more documentation about our views templating system.
|
8 |
-
*
|
9 |
-
* @link http://evnt.is/1aiy
|
10 |
-
*
|
11 |
-
* @version 4.12.18
|
12 |
-
*
|
13 |
-
* @var string $label Label for the text input.
|
14 |
-
* @var string $value Value for the text input.
|
15 |
-
* @var string $id ID of the text input.
|
16 |
-
* @var string $name Name attribute for the text input.
|
17 |
-
* @var string $dependency The dependency attributes for the control wrapper.
|
18 |
-
*/
|
19 |
-
|
20 |
-
?>
|
21 |
-
<div
|
22 |
-
class="tribe-widget-form-control tribe-widget-form-control--text"
|
23 |
-
<?php
|
24 |
-
// Not escaped - contains html (data-attr="value").
|
25 |
-
echo $dependency; // phpcs:ignore
|
26 |
-
?>
|
27 |
-
>
|
28 |
-
<label
|
29 |
-
class="tribe-common-form-control__label"
|
30 |
-
for="<?php echo esc_attr( $id ); ?>"
|
31 |
-
>
|
32 |
-
<?php echo esc_html( $label ); ?>
|
33 |
-
</label>
|
34 |
-
<input
|
35 |
-
class="tribe-common-form-control__input widefat"
|
36 |
-
id="<?php echo esc_attr( $id ); ?>"
|
37 |
-
name="<?php echo esc_attr( $name ); ?>"
|
38 |
-
type="text"
|
39 |
-
value="<?php echo esc_attr( $value ); ?>"
|
40 |
-
/>
|
41 |
-
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
common/src/admin-views/widgets/components/form.php
DELETED
@@ -1,31 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Admin View: Widget Component Form
|
4 |
-
*
|
5 |
-
* Override this template in your own theme by creating a file at:
|
6 |
-
* [your-theme]/tribe/admin-views/widgets/components/form.php
|
7 |
-
*
|
8 |
-
* See more documentation about our views templating system.
|
9 |
-
*
|
10 |
-
* @link http://evnt.is/1aiy
|
11 |
-
*
|
12 |
-
* @var \Tribe__Template $this Instance of the template including this file.
|
13 |
-
* @var array<mixed> $form_classes (optional) HTML classes used for the form element
|
14 |
-
* @var array<string,mixed> $admin_fields Fields to be rendered.
|
15 |
-
*
|
16 |
-
* @version 4.12.18
|
17 |
-
*/
|
18 |
-
|
19 |
-
$default_classes = [
|
20 |
-
'tribe-widget-form'
|
21 |
-
];
|
22 |
-
|
23 |
-
$classes = array_merge( $default_classes, $this->get( 'form_classes', [] ) );
|
24 |
-
?>
|
25 |
-
|
26 |
-
<div
|
27 |
-
<?php tribe_classes( $classes ); ?>
|
28 |
-
>
|
29 |
-
<?php $this->template( 'widgets/components/fields', [ 'fields' => $admin_fields ] ); ?>
|
30 |
-
</div>
|
31 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
common/src/functions/query.php
CHANGED
@@ -28,7 +28,7 @@ if ( ! function_exists( 'tribe_filter_meta_query' ) ) {
|
|
28 |
* @return array The filtered meta query array.
|
29 |
*/
|
30 |
function tribe_filter_meta_query( array $meta_query, array $where ) {
|
31 |
-
$filtered =
|
32 |
|
33 |
foreach ( $meta_query as $key => $entry ) {
|
34 |
if ( ! is_array( $entry ) ) {
|
@@ -54,44 +54,3 @@ if ( ! function_exists( 'tribe_filter_meta_query' ) ) {
|
|
54 |
return $filtered;
|
55 |
}
|
56 |
}
|
57 |
-
|
58 |
-
if ( ! function_exists( 'tribe_normalize_orderby' ) ) {
|
59 |
-
|
60 |
-
/**
|
61 |
-
* Normalizes an `orderby` string or array to an map of keys and orders.
|
62 |
-
*
|
63 |
-
* Note the function and the variables use the "orderby" (no spaces) name to stick
|
64 |
-
* with the WordPress query standard.
|
65 |
-
*
|
66 |
-
* @since 4.12.6
|
67 |
-
*
|
68 |
-
* @param string|array<string,string> $orderby Either an `orderby` key, a list of `orderby`
|
69 |
-
* keys or a map of `orderby` clauses.
|
70 |
-
* @param string $order The default order that should be applied to `orderby` entries that
|
71 |
-
* lack one.
|
72 |
-
*
|
73 |
-
* @return array The normalized `orderby` array, in the format supported by WordPress queries:
|
74 |
-
* `[ <key_1> => <order>, <key_2> => <order>, ... ]`.
|
75 |
-
*/
|
76 |
-
function tribe_normalize_orderby( $orderby, $order = 'ASC' ) {
|
77 |
-
// Make the `orderby` part an array.
|
78 |
-
$orderby_arr = (array) $orderby;
|
79 |
-
$normalized = [];
|
80 |
-
|
81 |
-
foreach ( $orderby_arr as $by_key => $direction ) {
|
82 |
-
if ( empty( $direction ) ) {
|
83 |
-
continue;
|
84 |
-
}
|
85 |
-
|
86 |
-
if ( is_numeric( $by_key ) ) {
|
87 |
-
// It's an entry where the key is just listed, relying on the default order.
|
88 |
-
$by_key = $direction;
|
89 |
-
$direction = $order;
|
90 |
-
}
|
91 |
-
|
92 |
-
$normalized[ $by_key ] = $direction;
|
93 |
-
}
|
94 |
-
|
95 |
-
return $normalized;
|
96 |
-
}
|
97 |
-
}
|
28 |
* @return array The filtered meta query array.
|
29 |
*/
|
30 |
function tribe_filter_meta_query( array $meta_query, array $where ) {
|
31 |
+
$filtered = array();
|
32 |
|
33 |
foreach ( $meta_query as $key => $entry ) {
|
34 |
if ( ! is_array( $entry ) ) {
|
54 |
return $filtered;
|
55 |
}
|
56 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
common/src/functions/template-tags/date.php
CHANGED
@@ -68,7 +68,7 @@ if ( ! function_exists( 'tribe_beginning_of_day' ) ) {
|
|
68 |
* @category Events
|
69 |
*
|
70 |
* @param string $date The date to find the beginning of the day, defaults to today
|
71 |
-
* @param string $format Allows date and time
|
72 |
*
|
73 |
* @return string
|
74 |
*/
|
@@ -189,7 +189,7 @@ if ( ! function_exists( 'tribe_get_start_time' ) ) {
|
|
189 |
return;
|
190 |
}
|
191 |
|
192 |
-
// @todo
|
193 |
if ( class_exists( 'Tribe__Events__Timezones' ) ) {
|
194 |
$start_date = Tribe__Events__Timezones::event_start_timestamp( $event->ID, $timezone );
|
195 |
}
|
@@ -240,7 +240,7 @@ if ( ! function_exists( 'tribe_get_end_time' ) ) {
|
|
240 |
return;
|
241 |
}
|
242 |
|
243 |
-
// @todo
|
244 |
if ( class_exists( 'Tribe__Events__Timezones' ) ) {
|
245 |
$end_date = Tribe__Events__Timezones::event_end_timestamp( $event->ID, $timezone );
|
246 |
}
|
@@ -300,7 +300,7 @@ if ( ! function_exists( 'tribe_get_start_date' ) ) {
|
|
300 |
$display_time = false;
|
301 |
}
|
302 |
|
303 |
-
// @todo
|
304 |
if ( class_exists( 'Tribe__Events__Timezones' ) ) {
|
305 |
$start_date = Tribe__Events__Timezones::event_start_timestamp( $event->ID, $timezone );
|
306 |
} else {
|
@@ -362,7 +362,7 @@ if ( ! function_exists( 'tribe_get_end_date' ) ) {
|
|
362 |
$display_time = false;
|
363 |
}
|
364 |
|
365 |
-
// @todo
|
366 |
if ( class_exists( 'Tribe__Events__Timezones' ) ) {
|
367 |
$end_date = Tribe__Events__Timezones::event_end_timestamp( $event->ID );
|
368 |
} else {
|
@@ -393,7 +393,7 @@ if ( ! function_exists( 'tribe_normalize_manual_utc_offset' ) ) {
|
|
393 |
* e.g. 'UTC+3', 'UTC-4.5', 'UTC+2.75'
|
394 |
*/
|
395 |
function tribe_normalize_manual_utc_offset( $utc_offset ) {
|
396 |
-
$matches =
|
397 |
if ( preg_match( '/^UTC\\s*((\\+|-)(\\d{1,2}))((:|.|,)(\\d{1,2})+)*/ui', $utc_offset, $matches ) ) {
|
398 |
if ( ! empty( $matches[6] ) ) {
|
399 |
$minutes = $matches[6] > 10 && $matches[6] <= 60 ? $minutes = $matches[6] / 60 : $matches[6];
|
@@ -448,4 +448,4 @@ if ( ! function_exists( 'tribe_is_site_using_24_hour_time' ) ) {
|
|
448 |
$time_format = get_option( 'time_format' );
|
449 |
return strpos( $time_format, 'H' ) !== false;
|
450 |
}
|
451 |
-
}
|
68 |
* @category Events
|
69 |
*
|
70 |
* @param string $date The date to find the beginning of the day, defaults to today
|
71 |
+
* @param string $format Allows date and time formating using standard php syntax (http://php.net/manual/en/function.date.php)
|
72 |
*
|
73 |
* @return string
|
74 |
*/
|
189 |
return;
|
190 |
}
|
191 |
|
192 |
+
// @todo move timezones to Common
|
193 |
if ( class_exists( 'Tribe__Events__Timezones' ) ) {
|
194 |
$start_date = Tribe__Events__Timezones::event_start_timestamp( $event->ID, $timezone );
|
195 |
}
|
240 |
return;
|
241 |
}
|
242 |
|
243 |
+
// @todo move timezones to Common
|
244 |
if ( class_exists( 'Tribe__Events__Timezones' ) ) {
|
245 |
$end_date = Tribe__Events__Timezones::event_end_timestamp( $event->ID, $timezone );
|
246 |
}
|
300 |
$display_time = false;
|
301 |
}
|
302 |
|
303 |
+
// @todo move timezones to Common
|
304 |
if ( class_exists( 'Tribe__Events__Timezones' ) ) {
|
305 |
$start_date = Tribe__Events__Timezones::event_start_timestamp( $event->ID, $timezone );
|
306 |
} else {
|
362 |
$display_time = false;
|
363 |
}
|
364 |
|
365 |
+
// @todo move timezones to Common
|
366 |
if ( class_exists( 'Tribe__Events__Timezones' ) ) {
|
367 |
$end_date = Tribe__Events__Timezones::event_end_timestamp( $event->ID );
|
368 |
} else {
|
393 |
* e.g. 'UTC+3', 'UTC-4.5', 'UTC+2.75'
|
394 |
*/
|
395 |
function tribe_normalize_manual_utc_offset( $utc_offset ) {
|
396 |
+
$matches = array();
|
397 |
if ( preg_match( '/^UTC\\s*((\\+|-)(\\d{1,2}))((:|.|,)(\\d{1,2})+)*/ui', $utc_offset, $matches ) ) {
|
398 |
if ( ! empty( $matches[6] ) ) {
|
399 |
$minutes = $matches[6] > 10 && $matches[6] <= 60 ? $minutes = $matches[6] / 60 : $matches[6];
|
448 |
$time_format = get_option( 'time_format' );
|
449 |
return strpos( $time_format, 'H' ) !== false;
|
450 |
}
|
451 |
+
}
|
common/src/functions/template-tags/general.php
CHANGED
@@ -264,7 +264,7 @@ if ( ! function_exists( 'tribe_get_days_between' ) ) {
|
|
264 |
if ( ! function_exists( 'tribe_prepare_for_json' ) ) {
|
265 |
/**
|
266 |
* Function to prepare content for use as a value in a json encoded string destined for storage on a html data attribute.
|
267 |
-
* Hence the double quote fun, especially in case they pass html encoded " along. Any of those getting through to the data att will break
|
268 |
* Themers can use this function to prepare data they may want to send to tribe_events_template_data() in the templates, and we use it in that function ourselves.
|
269 |
*
|
270 |
* @category Events
|
@@ -277,7 +277,7 @@ if ( ! function_exists( 'tribe_prepare_for_json' ) ) {
|
|
277 |
$value = trim( htmlspecialchars( $string, ENT_QUOTES, 'UTF-8' ) );
|
278 |
$value = str_replace( '"', '"', $value );
|
279 |
// &#013; is same as \r and JSON strings should be a single line not multiple lines.
|
280 |
-
$removable_values =
|
281 |
$value = str_replace( $removable_values, '', $value );
|
282 |
|
283 |
return $value;
|
@@ -362,13 +362,13 @@ if ( ! function_exists( 'tribe_is_bot' ) ) {
|
|
362 |
|
363 |
// declare known bot user agents (lowercase)
|
364 |
$user_agent_bots = (array) apply_filters(
|
365 |
-
'tribe_is_bot_list',
|
366 |
'bot',
|
367 |
'slurp',
|
368 |
'spider',
|
369 |
'crawler',
|
370 |
'yandex',
|
371 |
-
|
372 |
);
|
373 |
|
374 |
foreach ( $user_agent_bots as $bot ) {
|
@@ -525,14 +525,14 @@ if ( ! function_exists( 'tribe_get_date_option' ) ) {
|
|
525 |
* Shortcut for Tribe__Admin__Notices::register(), create a Admin Notice easily
|
526 |
*
|
527 |
* @param string $slug Slug to save the notice
|
528 |
-
* @param callable|string $callback A callable Method/
|
529 |
* @param array $arguments Arguments to Setup a notice
|
530 |
* @param callable|null $active_callback An optional callback that should return bool values
|
531 |
* to indicate whether the notice should display or not.
|
532 |
*
|
533 |
* @return stdClass Which notice was registered
|
534 |
*/
|
535 |
-
function tribe_notice( $slug, $callback, $arguments =
|
536 |
return Tribe__Admin__Notices::instance()->register( $slug, $callback, $arguments, $active_callback );
|
537 |
}
|
538 |
|
@@ -549,7 +549,7 @@ function tribe_notice( $slug, $callback, $arguments = [], $active_callback = nul
|
|
549 |
*
|
550 |
* @return stdClass Which notice was registered
|
551 |
*/
|
552 |
-
function tribe_transient_notice( $slug, $html, $arguments =
|
553 |
$expire = null !== $expire ? (int) $expire : WEEK_IN_SECONDS;
|
554 |
|
555 |
return Tribe__Admin__Notices::instance()->register_transient( $slug, $html, $arguments, $expire );
|
@@ -575,7 +575,7 @@ function tribe_transient_notice_remove( $slug ) {
|
|
575 |
*
|
576 |
* @return WP_Error
|
577 |
*/
|
578 |
-
function tribe_error( $indexes, $context =
|
579 |
return Tribe__Error::instance()->send( $indexes, $context, $sprintf );
|
580 |
}
|
581 |
|
@@ -645,12 +645,11 @@ function tribe_asset_enqueue_group( $group ) {
|
|
645 |
* Function to include more the one asset, based on `tribe_asset`
|
646 |
*
|
647 |
* @since 4.3
|
648 |
-
* @since 4.12.10 Added support for overriding arguments for individual assets.
|
649 |
*
|
650 |
* @param object $origin The main Object for the plugin you are enqueueing the script/style for
|
651 |
* @param array $assets {
|
652 |
* Indexed array, don't use any associative key.
|
653 |
-
* E.g.:
|
654 |
*
|
655 |
* @type string $slug Slug to save the asset
|
656 |
* @type string $file Which file will be loaded, either CSS or JS
|
@@ -661,8 +660,8 @@ function tribe_asset_enqueue_group( $group ) {
|
|
661 |
*
|
662 |
* @return array Which Assets were registered
|
663 |
*/
|
664 |
-
function tribe_assets( $origin, $assets, $action = null, $arguments =
|
665 |
-
$registered =
|
666 |
|
667 |
foreach ( $assets as $asset ) {
|
668 |
if ( ! is_array( $asset ) ) {
|
@@ -675,16 +674,9 @@ function tribe_assets( $origin, $assets, $action = null, $arguments = [] ) {
|
|
675 |
}
|
676 |
|
677 |
$file = $asset[1];
|
678 |
-
$deps = ! empty( $asset[2] ) ? $asset[2] :
|
679 |
-
|
680 |
-
// Support the asset having a custom action.
|
681 |
-
$asset_action = ! empty( $asset[3] ) ? $asset[3] : $action;
|
682 |
-
|
683 |
-
// Support the asset having custom arguments and merge them with the original ones.
|
684 |
-
$asset_arguments = ! empty( $asset[4] ) ? array_merge( $arguments, $asset[4] ) : $arguments;
|
685 |
-
|
686 |
-
$registered[] = tribe_asset( $origin, $slug, $file, $deps, $asset_action, $asset_arguments );
|
687 |
|
|
|
688 |
}
|
689 |
|
690 |
return $registered;
|
@@ -787,40 +779,3 @@ if ( ! function_exists( 'tribe_cache' ) ) {
|
|
787 |
return tribe( 'cache' );
|
788 |
}
|
789 |
}
|
790 |
-
|
791 |
-
if ( ! function_exists( 'tribe_asset_print_group' ) ) {
|
792 |
-
/**
|
793 |
-
* Prints the `script` (JS) and `link` (CSS) HTML tags associated with one or more assets groups.
|
794 |
-
*
|
795 |
-
* @since 4.12.6
|
796 |
-
*
|
797 |
-
* @param string|array $group Which group(s) should be enqueued.
|
798 |
-
* @param bool $echo Whether to print the group(s) tag(s) to the page or not; default to `true` to
|
799 |
-
* print the HTML `script` (JS) and `link` (CSS) tags to the page.
|
800 |
-
*
|
801 |
-
* @return string The `script` and `link` HTML tags produced for the group(s).
|
802 |
-
*/
|
803 |
-
function tribe_asset_print_group( $group, $echo = true ) {
|
804 |
-
/** @var \Tribe__Assets $assets */
|
805 |
-
$assets = tribe( 'assets' );
|
806 |
-
|
807 |
-
return $assets->print_group($group, $echo);
|
808 |
-
}
|
809 |
-
}
|
810 |
-
|
811 |
-
if ( ! function_exists( 'tribe_doing_shortcode' ) ) {
|
812 |
-
/**
|
813 |
-
* Check whether a specific shortcode is being run.
|
814 |
-
*
|
815 |
-
* This is limited to only shortcodes registered with Tribe\Shortcode\Manager.
|
816 |
-
*
|
817 |
-
* @since 4.12.10
|
818 |
-
*
|
819 |
-
* @param null|string $tag The shortcode tag name, or null to check if doing any shortcode.
|
820 |
-
*
|
821 |
-
* @return bool Whether the shortcode is currently being run.
|
822 |
-
*/
|
823 |
-
function tribe_doing_shortcode( $tag = null ) {
|
824 |
-
return tribe( 'shortcode.manager' )->is_doing_shortcode( $tag );
|
825 |
-
}
|
826 |
-
}
|
264 |
if ( ! function_exists( 'tribe_prepare_for_json' ) ) {
|
265 |
/**
|
266 |
* Function to prepare content for use as a value in a json encoded string destined for storage on a html data attribute.
|
267 |
+
* Hence the double quote fun, especially in case they pass html encoded " along. Any of those getting through to the data att will break jquery's parseJSON method.
|
268 |
* Themers can use this function to prepare data they may want to send to tribe_events_template_data() in the templates, and we use it in that function ourselves.
|
269 |
*
|
270 |
* @category Events
|
277 |
$value = trim( htmlspecialchars( $string, ENT_QUOTES, 'UTF-8' ) );
|
278 |
$value = str_replace( '"', '"', $value );
|
279 |
// &#013; is same as \r and JSON strings should be a single line not multiple lines.
|
280 |
+
$removable_values = array( '\r', '\n', '\t', '&#013;' );
|
281 |
$value = str_replace( $removable_values, '', $value );
|
282 |
|
283 |
return $value;
|
362 |
|
363 |
// declare known bot user agents (lowercase)
|
364 |
$user_agent_bots = (array) apply_filters(
|
365 |
+
'tribe_is_bot_list', array(
|
366 |
'bot',
|
367 |
'slurp',
|
368 |
'spider',
|
369 |
'crawler',
|
370 |
'yandex',
|
371 |
+
)
|
372 |
);
|
373 |
|
374 |
foreach ( $user_agent_bots as $bot ) {
|
525 |
* Shortcut for Tribe__Admin__Notices::register(), create a Admin Notice easily
|
526 |
*
|
527 |
* @param string $slug Slug to save the notice
|
528 |
+
* @param callable|string $callback A callable Method/Fuction to actually display the notice
|
529 |
* @param array $arguments Arguments to Setup a notice
|
530 |
* @param callable|null $active_callback An optional callback that should return bool values
|
531 |
* to indicate whether the notice should display or not.
|
532 |
*
|
533 |
* @return stdClass Which notice was registered
|
534 |
*/
|
535 |
+
function tribe_notice( $slug, $callback, $arguments = array(), $active_callback = null ) {
|
536 |
return Tribe__Admin__Notices::instance()->register( $slug, $callback, $arguments, $active_callback );
|
537 |
}
|
538 |
|
549 |
*
|
550 |
* @return stdClass Which notice was registered
|
551 |
*/
|
552 |
+
function tribe_transient_notice( $slug, $html, $arguments = array(), $expire = null ) {
|
553 |
$expire = null !== $expire ? (int) $expire : WEEK_IN_SECONDS;
|
554 |
|
555 |
return Tribe__Admin__Notices::instance()->register_transient( $slug, $html, $arguments, $expire );
|
575 |
*
|
576 |
* @return WP_Error
|
577 |
*/
|
578 |
+
function tribe_error( $indexes, $context = array(), $sprintf = array() ) {
|
579 |
return Tribe__Error::instance()->send( $indexes, $context, $sprintf );
|
580 |
}
|
581 |
|
645 |
* Function to include more the one asset, based on `tribe_asset`
|
646 |
*
|
647 |
* @since 4.3
|
|
|
648 |
*
|
649 |
* @param object $origin The main Object for the plugin you are enqueueing the script/style for
|
650 |
* @param array $assets {
|
651 |
* Indexed array, don't use any associative key.
|
652 |
+
* E.g.: array( 'slug-my-script', 'my/own/path.js', array( 'jquery' ) )
|
653 |
*
|
654 |
* @type string $slug Slug to save the asset
|
655 |
* @type string $file Which file will be loaded, either CSS or JS
|
660 |
*
|
661 |
* @return array Which Assets were registered
|
662 |
*/
|
663 |
+
function tribe_assets( $origin, $assets, $action = null, $arguments = array() ) {
|
664 |
+
$registered = array();
|
665 |
|
666 |
foreach ( $assets as $asset ) {
|
667 |
if ( ! is_array( $asset ) ) {
|
674 |
}
|
675 |
|
676 |
$file = $asset[1];
|
677 |
+
$deps = ! empty( $asset[2] ) ? $asset[2] : array();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
678 |
|
679 |
+
$registered[] = tribe_asset( $origin, $slug, $file, $deps, $action, $arguments );
|
680 |
}
|
681 |
|
682 |
return $registered;
|
779 |
return tribe( 'cache' );
|
780 |
}
|
781 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
common/src/functions/template-tags/html.php
CHANGED
@@ -2,7 +2,6 @@
|
|
2 |
/**
|
3 |
* HTML functions (template-tags) for use in WordPress templates.
|
4 |
*/
|
5 |
-
use Tribe\Utils\Element_Attributes;
|
6 |
use Tribe\Utils\Element_Classes;
|
7 |
|
8 |
/**
|
@@ -26,46 +25,16 @@ function tribe_get_classes() {
|
|
26 |
*
|
27 |
* @param mixed $classes,... unlimited Any amount of params to be rendered as classes.
|
28 |
*
|
29 |
-
* @return
|
30 |
*/
|
31 |
function tribe_classes() {
|
32 |
$element_classes = new Element_Classes( func_get_args() );
|
33 |
echo $element_classes->get_attribute();
|
34 |
}
|
35 |
|
36 |
-
/**
|
37 |
-
* Parse input values into a valid array of attributes to be used in the templates.
|
38 |
-
*
|
39 |
-
* @since 4.12.3
|
40 |
-
*
|
41 |
-
* @param mixed $attributes,... unlimited Any amount of params to be rendered as attributes.
|
42 |
-
*
|
43 |
-
* @return array<string> An array of the parsed string attributes.
|
44 |
-
*/
|
45 |
-
function tribe_get_attributes() {
|
46 |
-
$element_attributes = new Element_Attributes( func_get_args() );
|
47 |
-
return $element_attributes->get_attributes_array();
|
48 |
-
}
|
49 |
-
|
50 |
-
/**
|
51 |
-
* Parse input values into a valid html attributes to be used in the templates.
|
52 |
-
*
|
53 |
-
* @since 4.12.3
|
54 |
-
*
|
55 |
-
* @param mixed $attributes,... unlimited Any amount of params to be rendered as attributes.
|
56 |
-
*
|
57 |
-
* @return void
|
58 |
-
*/
|
59 |
-
function tribe_attributes() {
|
60 |
-
$element_attributes = new Element_Attributes( func_get_args() );
|
61 |
-
echo $element_attributes->get_attributes();
|
62 |
-
}
|
63 |
-
|
64 |
/**
|
65 |
* Get attributes for required fields.
|
66 |
*
|
67 |
-
* @deprecated 4.12.6
|
68 |
-
*
|
69 |
* @since 4.10.0
|
70 |
*
|
71 |
* @param boolean $required If the field is required.
|
@@ -112,8 +81,6 @@ function tribe_required_label( $required, $echo = true ) {
|
|
112 |
/**
|
113 |
* Get attributes for disabled fields.
|
114 |
*
|
115 |
-
* @deprecated 4.12.6
|
116 |
-
*
|
117 |
* @since 4.10.0
|
118 |
*
|
119 |
* @param boolean $disabled If the field is disabled.
|
@@ -132,94 +99,3 @@ function tribe_disabled( $disabled, $echo = true ) {
|
|
132 |
}
|
133 |
}
|
134 |
}
|
135 |
-
|
136 |
-
/**
|
137 |
-
* Generates a string for the tribe-dependency attributes.
|
138 |
-
*
|
139 |
-
* @since 4.12.14
|
140 |
-
*
|
141 |
-
* @param array<string,mixed> $deps The passed array of dependencies.
|
142 |
-
*
|
143 |
-
* @return string $dependency The string of dependencies attributes to add to the input.
|
144 |
-
*/
|
145 |
-
function tribe_format_field_dependency( $deps ) {
|
146 |
-
// Sanity check.
|
147 |
-
if ( empty( $deps ) ) {
|
148 |
-
return '';
|
149 |
-
}
|
150 |
-
|
151 |
-
// Let's be case-insensitive!
|
152 |
-
$deps = array_combine( array_map( 'strtolower', array_keys( $deps ) ), $deps );
|
153 |
-
|
154 |
-
// No ID to hook to? Bail.
|
155 |
-
if ( empty( $deps['id'] ) ) {
|
156 |
-
return;
|
157 |
-
}
|
158 |
-
|
159 |
-
$dependency = '';
|
160 |
-
|
161 |
-
$accepted = [
|
162 |
-
'id',
|
163 |
-
'parent',
|
164 |
-
'is',
|
165 |
-
'is-not',
|
166 |
-
'is-empty',
|
167 |
-
'is-not-empty',
|
168 |
-
'is-numeric',
|
169 |
-
'is-not-numeric',
|
170 |
-
'is-checked',
|
171 |
-
'is-not-checked',
|
172 |
-
];
|
173 |
-
|
174 |
-
$valid_deps = array_intersect_key( $deps, array_flip( $accepted ) );
|
175 |
-
|
176 |
-
foreach ( $valid_deps as $attr => $value ) {
|
177 |
-
// Attributes are always lower case.
|
178 |
-
$attr = strtolower( $attr );
|
179 |
-
|
180 |
-
// Handle the ID component.
|
181 |
-
if ( 'id' === $attr ) {
|
182 |
-
// Prepend a hash "#" if it's missing.
|
183 |
-
if ( '#' !== substr( $value, 0, 1 ) ) {
|
184 |
-
$value = '#' . $value;
|
185 |
-
}
|
186 |
-
|
187 |
-
$dependency .= " data-depends=\"{$value}\"";
|
188 |
-
continue;
|
189 |
-
}
|
190 |
-
|
191 |
-
// Handle the dependent parent component.
|
192 |
-
if ( 'parent' === $attr ) {
|
193 |
-
$dependency .= " data-dependent-parent=\"{$value}\"";
|
194 |
-
continue;
|
195 |
-
}
|
196 |
-
|
197 |
-
// Handle boolean values.
|
198 |
-
if ( is_bool( $value ) ) {
|
199 |
-
if ( $value ) {
|
200 |
-
$dependency .= " data-condition-{$attr}";
|
201 |
-
} else {
|
202 |
-
if ( 0 === stripos( $attr, 'is-not-' ) ) {
|
203 |
-
$attr = str_replace( 'is-not-', 'is-', $attr );
|
204 |
-
} else {
|
205 |
-
$attr = str_replace( 'is-', 'is-not-', $attr );
|
206 |
-
}
|
207 |
-
|
208 |
-
$dependency .= " data-{$attr}";
|
209 |
-
}
|
210 |
-
|
211 |
-
continue;
|
212 |
-
}
|
213 |
-
|
214 |
-
// Handle string and "empty" values
|
215 |
-
if( 0 === strlen( $value ) ) {
|
216 |
-
$dependency .= " data-condition-{$attr}";
|
217 |
-
} else if ( 'is' === $attr ) {
|
218 |
-
$dependency .= " data-condition=\"{$value}\"";
|
219 |
-
} else if ( 'is-not' === $attr ) {
|
220 |
-
$dependency .= " data-condition-not=\"{$value}\"";
|
221 |
-
}
|
222 |
-
}
|
223 |
-
|
224 |
-
return $dependency;
|
225 |
-
}
|
2 |
/**
|
3 |
* HTML functions (template-tags) for use in WordPress templates.
|
4 |
*/
|
|
|
5 |
use Tribe\Utils\Element_Classes;
|
6 |
|
7 |
/**
|
25 |
*
|
26 |
* @param mixed $classes,... unlimited Any amount of params to be rendered as classes.
|
27 |
*
|
28 |
+
* @return string
|
29 |
*/
|
30 |
function tribe_classes() {
|
31 |
$element_classes = new Element_Classes( func_get_args() );
|
32 |
echo $element_classes->get_attribute();
|
33 |
}
|
34 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
35 |
/**
|
36 |
* Get attributes for required fields.
|
37 |
*
|
|
|
|
|
38 |
* @since 4.10.0
|
39 |
*
|
40 |
* @param boolean $required If the field is required.
|
81 |
/**
|
82 |
* Get attributes for disabled fields.
|
83 |
*
|
|
|
|
|
84 |
* @since 4.10.0
|
85 |
*
|
86 |
* @param boolean $disabled If the field is disabled.
|
99 |
}
|
100 |
}
|
101 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
common/src/functions/template-tags/post.php
CHANGED
@@ -30,10 +30,7 @@ function tribe_get_the_content( $more_link_text = null, $strip_teaser = false, $
|
|
30 |
$content = get_the_content( $more_link_text, $strip_teaser );
|
31 |
}
|
32 |
|
33 |
-
|
34 |
-
// If blocks are present we need to run the content filter.
|
35 |
-
|
36 |
-
if ( $has_blocks || ! doing_filter( 'the_content' ) ) {
|
37 |
/**
|
38 |
* Filters the post content.
|
39 |
*
|
@@ -97,4 +94,4 @@ function tribe_get_post_class( $class, $post ) {
|
|
97 |
}
|
98 |
|
99 |
return array_merge( $class, $post_classes[ $post_id ] );
|
100 |
-
}
|
30 |
$content = get_the_content( $more_link_text, $strip_teaser );
|
31 |
}
|
32 |
|
33 |
+
if ( ! doing_filter( 'the_content' ) ) {
|
|
|
|
|
|
|
34 |
/**
|
35 |
* Filters the post content.
|
36 |
*
|
94 |
}
|
95 |
|
96 |
return array_merge( $class, $post_classes[ $post_id ] );
|
97 |
+
}
|
common/src/functions/utils.php
CHANGED
@@ -174,45 +174,6 @@ if ( ! function_exists( 'tribe_get_global_query_object' ) ) {
|
|
174 |
}
|
175 |
}
|
176 |
|
177 |
-
if ( ! function_exists( 'tribe_null_or_truthy' ) ) {
|
178 |
-
/**
|
179 |
-
* Validation of Null or Truthy values for Shortcode Attributes.
|
180 |
-
*
|
181 |
-
* @since 5.1.4
|
182 |
-
*
|
183 |
-
* @param mixed $value Which value will be validated.
|
184 |
-
*
|
185 |
-
* @return bool|null Sanitizes the value passed as a boolean or null.
|
186 |
-
*/
|
187 |
-
function tribe_null_or_truthy( $value = null ) {
|
188 |
-
if ( null === $value || 'null' === $value ) {
|
189 |
-
return null;
|
190 |
-
}
|
191 |
-
|
192 |
-
return tribe_is_truthy( $value );
|
193 |
-
}
|
194 |
-
}
|
195 |
-
|
196 |
-
if ( ! function_exists( 'tribe_null_or_number' ) ) {
|
197 |
-
/**
|
198 |
-
* Validation of Null or Numerical values for Shortcode Attributes.
|
199 |
-
* We don't use absint() since -1 is a common number used to indicate "all" or "infinite".
|
200 |
-
*
|
201 |
-
* @since TBD
|
202 |
-
*
|
203 |
-
* @param mixed $value Which value will be validated.
|
204 |
-
*
|
205 |
-
* @return int|null Sanitizes the value passed as an integer or null.
|
206 |
-
*/
|
207 |
-
function tribe_null_or_number( $value = null ) {
|
208 |
-
if ( null === $value || 'null' === $value ) {
|
209 |
-
return null;
|
210 |
-
}
|
211 |
-
|
212 |
-
return (int) $value;
|
213 |
-
}
|
214 |
-
}
|
215 |
-
|
216 |
if ( ! function_exists( 'tribe_is_truthy' ) ) {
|
217 |
/**
|
218 |
* Determines if the provided value should be regarded as 'true'.
|
@@ -286,11 +247,7 @@ if ( ! function_exists( 'tribe_sort_by_priority' ) ) {
|
|
286 |
$b_priority = $b->priority;
|
287 |
}
|
288 |
|
289 |
-
|
290 |
-
return 0;
|
291 |
-
}
|
292 |
-
|
293 |
-
return (int) $a_priority > (int) $b_priority ? 1 : -1;
|
294 |
}
|
295 |
}
|
296 |
|
@@ -332,21 +289,21 @@ if ( ! function_exists( 'tribe_normalize_terms_list' ) ) {
|
|
332 |
|
333 |
return $normalized;
|
334 |
}
|
335 |
-
}
|
336 |
|
337 |
-
if ( ! function_exists( 'tribe_upload_image' ) ) {
|
338 |
-
|
339 |
-
|
340 |
-
|
341 |
-
|
342 |
-
|
343 |
-
|
344 |
-
|
345 |
-
|
346 |
-
|
347 |
-
|
348 |
|
349 |
-
|
|
|
350 |
}
|
351 |
}
|
352 |
|
@@ -688,15 +645,6 @@ if ( ! function_exists( 'tribe_register_rest_route' ) ) {
|
|
688 |
*/
|
689 |
$args = apply_filters( 'tribe_register_rest_route_args', $args, $namespace, $route, $override );
|
690 |
|
691 |
-
// Compatibility with version 5.5 of WordPress to avoid notices.
|
692 |
-
if (
|
693 |
-
! empty( $args['callback'] )
|
694 |
-
&& is_callable( $args['callback'] )
|
695 |
-
&& ! isset( $args['permission_callback'] )
|
696 |
-
) {
|
697 |
-
$args['permission_callback'] = '__return_true';
|
698 |
-
}
|
699 |
-
|
700 |
return register_rest_route( $namespace, $route, $args, $override );
|
701 |
}
|
702 |
}
|
@@ -759,33 +707,29 @@ if ( ! function_exists( 'tribe_get_least_version_ever_installed' ) ) {
|
|
759 |
* @return string|boolean The SemVer version string or false if no info found.
|
760 |
*/
|
761 |
function tribe_get_least_version_ever_installed( $class ) {
|
762 |
-
|
763 |
-
$class = get_class( $class );
|
764 |
-
|
765 |
-
if ( false === $class ) {
|
766 |
-
return false;
|
767 |
-
}
|
768 |
-
}
|
769 |
|
770 |
-
|
|
|
|
|
|
|
771 |
|
772 |
-
|
773 |
-
|
774 |
-
|
775 |
-
$history = array_filter( $history );
|
776 |
-
$history = array_unique( $history );
|
777 |
|
778 |
-
|
779 |
-
|
780 |
-
|
781 |
|
782 |
-
|
|
|
783 |
}
|
784 |
-
}
|
785 |
|
786 |
-
|
787 |
-
|
788 |
-
|
|
|
789 |
}
|
790 |
|
791 |
// No version set.
|
@@ -812,33 +756,29 @@ if ( ! function_exists( 'tribe_get_greatest_version_ever_installed' ) ) {
|
|
812 |
* @return string|boolean The SemVer version string or false if no info found.
|
813 |
*/
|
814 |
function tribe_get_greatest_version_ever_installed( $class ) {
|
815 |
-
|
816 |
-
$class = get_class( $class );
|
817 |
-
|
818 |
-
if ( false === $class ) {
|
819 |
-
return false;
|
820 |
-
}
|
821 |
-
}
|
822 |
|
823 |
-
|
|
|
|
|
|
|
824 |
|
825 |
-
|
826 |
-
|
827 |
-
|
828 |
-
$history = array_filter( $history );
|
829 |
-
$history = array_unique( $history );
|
830 |
|
831 |
-
|
832 |
-
|
833 |
-
|
834 |
|
835 |
-
|
|
|
836 |
}
|
837 |
-
}
|
838 |
|
839 |
-
|
840 |
-
|
841 |
-
|
|
|
842 |
}
|
843 |
|
844 |
// No version set.
|
@@ -846,43 +786,6 @@ if ( ! function_exists( 'tribe_get_greatest_version_ever_installed' ) ) {
|
|
846 |
}
|
847 |
}
|
848 |
|
849 |
-
/**
|
850 |
-
* Gets the plugin version history for a given main class.
|
851 |
-
*
|
852 |
-
* Important to note we cannot setup instances to get these values, we need to
|
853 |
-
* use static mapping here, since generating a full instance will effectively
|
854 |
-
* activate parts of the plugin behind the scenes.
|
855 |
-
*
|
856 |
-
* @since 4.12.14
|
857 |
-
*
|
858 |
-
* @param string $class Which plugin main class we are looking for.
|
859 |
-
*
|
860 |
-
* @return array|false
|
861 |
-
*/
|
862 |
-
function tribe_plugin_version_history( $class ) {
|
863 |
-
if ( ! is_string( $class ) ) {
|
864 |
-
$class = get_class( $class );
|
865 |
-
|
866 |
-
if ( false === $class ) {
|
867 |
-
return false;
|
868 |
-
}
|
869 |
-
}
|
870 |
-
|
871 |
-
$map = [
|
872 |
-
'Tribe__Events__Main' => 'previous_ecp_versions',
|
873 |
-
'Tribe__Tickets__Main' => 'previous_event_tickets_versions',
|
874 |
-
'tickets.main' => 'previous_event_tickets_versions',
|
875 |
-
'Tribe__Tickets_Plus__Main' => 'previous_event_tickets_plus_versions',
|
876 |
-
'tickets-plus.main' => 'previous_event_tickets_plus_versions',
|
877 |
-
];
|
878 |
-
|
879 |
-
if ( ! isset( $map[ $class ] ) ) {
|
880 |
-
return false;
|
881 |
-
}
|
882 |
-
|
883 |
-
return (array) Tribe__Settings_Manager::get_option( $map[ $class ] );
|
884 |
-
}
|
885 |
-
|
886 |
if ( ! function_exists( 'tribe_get_first_ever_installed_version' ) ) {
|
887 |
/**
|
888 |
* Gets the initially-recorded version number installed for the specified class of a plugin having a
|
@@ -900,37 +803,33 @@ if ( ! function_exists( 'tribe_get_first_ever_installed_version' ) ) {
|
|
900 |
* @return string|boolean The SemVer version string or false if no info found.
|
901 |
*/
|
902 |
function tribe_get_first_ever_installed_version( $class ) {
|
903 |
-
|
904 |
-
$class = get_class( $class );
|
905 |
-
|
906 |
-
if ( false === $class ) {
|
907 |
-
return false;
|
908 |
-
}
|
909 |
-
}
|
910 |
|
911 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
912 |
|
913 |
-
|
914 |
-
|
915 |
-
|
916 |
-
|
917 |
-
! empty( $history )
|
918 |
-
&& empty( $history[0] )
|
919 |
-
) {
|
920 |
-
array_shift( $history );
|
921 |
}
|
922 |
|
923 |
-
//
|
924 |
-
if (
|
925 |
-
return $
|
926 |
}
|
927 |
}
|
928 |
|
929 |
-
// Fall back to the current plugin version.
|
930 |
-
if ( defined( $class . '::VERSION' ) ) {
|
931 |
-
return $class::VERSION;
|
932 |
-
}
|
933 |
-
|
934 |
// No version set.
|
935 |
return false;
|
936 |
}
|
@@ -955,9 +854,11 @@ if ( ! function_exists( 'tribe_get_currently_installed_version' ) ) {
|
|
955 |
function tribe_get_currently_installed_version( $class ) {
|
956 |
$instance = tribe_get_class_instance( $class );
|
957 |
|
958 |
-
|
959 |
-
|
960 |
-
|
|
|
|
|
961 |
}
|
962 |
|
963 |
// No version set.
|
@@ -1154,78 +1055,3 @@ if ( ! function_exists( 'tribe_get_query_var' ) ) {
|
|
1154 |
);
|
1155 |
}
|
1156 |
}
|
1157 |
-
|
1158 |
-
if ( ! function_exists( 'tribe_without_filters' ) ) {
|
1159 |
-
/**
|
1160 |
-
* Runs a callback or Closure taking care to detach and reattach a set of filters.
|
1161 |
-
*
|
1162 |
-
* The purpose of this function is to make sure a certain callback will run in a "clean" filter environment where
|
1163 |
-
* a set of filters (and actions) has been suspended to avoid side effects from applying to it.
|
1164 |
-
* The function guarantees the existing filters will be detached and re-attached only to run the callback, avoiding
|
1165 |
-
* issues where some piece of code might detach some filters and not re-attach them due to errors.
|
1166 |
-
*
|
1167 |
-
* @since 4.12.10
|
1168 |
-
*
|
1169 |
-
* @param array<string> $filters A set of filter, or actions, handles to detach before running the callback and
|
1170 |
-
* re-attach after.
|
1171 |
-
* @param callable $do The callback, or Closure, that should run in the context where the specified set of filters
|
1172 |
-
* has been "suspended".
|
1173 |
-
*
|
1174 |
-
* @return mixed The result of the callback function.
|
1175 |
-
*/
|
1176 |
-
function tribe_without_filters( array $filters, callable $do ) {
|
1177 |
-
$filter_backups = [];
|
1178 |
-
// If none of the filters to skip has anything attached to it, then skip it.
|
1179 |
-
$hooked_filters = array_filter( $filters, 'has_filter' );
|
1180 |
-
|
1181 |
-
if ( empty( $hooked_filters ) ) {
|
1182 |
-
// No filter has functions attached to it, just return the callback invocation.
|
1183 |
-
return $do();
|
1184 |
-
}
|
1185 |
-
|
1186 |
-
foreach ( $hooked_filters as $tag ) {
|
1187 |
-
$filter_backups[ $tag ] = $GLOBALS['wp_filter'][ $tag ];
|
1188 |
-
// A `null` entry will be parsed, from filter API functions, as a filter that has nothing on it.
|
1189 |
-
$GLOBALS['wp_filter'][ $tag ] = null;
|
1190 |
-
}
|
1191 |
-
|
1192 |
-
$result = $do();
|
1193 |
-
|
1194 |
-
foreach ( $filter_backups as $tag => $filter_backup ) {
|
1195 |
-
$GLOBALS['wp_filter'][ $tag ] = $filter_backup;
|
1196 |
-
}
|
1197 |
-
|
1198 |
-
return $result;
|
1199 |
-
}
|
1200 |
-
|
1201 |
-
/**
|
1202 |
-
* Runs a callbacks while suspending, removing and re-adding, a filter or action.
|
1203 |
-
*
|
1204 |
-
* The function will infer the priority of the filter, required for its correct detachment and re-attachment, on
|
1205 |
-
* its own.
|
1206 |
-
*
|
1207 |
-
* @since 4.12.12
|
1208 |
-
*
|
1209 |
-
* @param string $filter_tag The filter tag to suspend.
|
1210 |
-
* @param callable $filter_callback The filter_callback currently attached to the filter.
|
1211 |
-
* @param callable $do The filter_callback that will be run detaching the `$filter_callback`.
|
1212 |
-
* @param int $args The number of arguments that should be used to re-attach the filtering callback to the filter.
|
1213 |
-
*
|
1214 |
-
* @return mixed The return value of the `$do` callback.
|
1215 |
-
*/
|
1216 |
-
function tribe_suspending_filter( $filter_tag, callable $filter_callback, callable $do, $args = 1 ) {
|
1217 |
-
$priority = has_filter( $filter_tag, $filter_callback );
|
1218 |
-
|
1219 |
-
if ( false !== $priority ) {
|
1220 |
-
remove_filter( $filter_tag, $filter_callback, $priority );
|
1221 |
-
}
|
1222 |
-
|
1223 |
-
$result = $do();
|
1224 |
-
|
1225 |
-
if ( false !== $priority ) {
|
1226 |
-
add_filter( $filter_tag, $filter_callback, $priority, $args );
|
1227 |
-
}
|
1228 |
-
|
1229 |
-
return $result;
|
1230 |
-
}
|
1231 |
-
}
|
174 |
}
|
175 |
}
|
176 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
177 |
if ( ! function_exists( 'tribe_is_truthy' ) ) {
|
178 |
/**
|
179 |
* Determines if the provided value should be regarded as 'true'.
|
247 |
$b_priority = $b->priority;
|
248 |
}
|
249 |
|
250 |
+
return (int) $a_priority === (int) $b_priority ? 0 : (int) $a_priority > (int) $b_priority;
|
|
|
|
|
|
|
|
|
251 |
}
|
252 |
}
|
253 |
|
289 |
|
290 |
return $normalized;
|
291 |
}
|
|
|
292 |
|
293 |
+
if ( ! function_exists( 'tribe_upload_image' ) ) {
|
294 |
+
/**
|
295 |
+
* @see Tribe__Image__Uploader::upload_and_get_attachment_id()
|
296 |
+
*
|
297 |
+
* @param string|int $image The path to an image file, an image URL or an attachment post ID.
|
298 |
+
*
|
299 |
+
* @return int|bool The attachment post ID if the uploading and attachment is successful or the ID refers to an attachment;
|
300 |
+
* `false` otherwise.
|
301 |
+
*/
|
302 |
+
function tribe_upload_image( $image ) {
|
303 |
+
$uploader = new Tribe__Image__Uploader( $image );
|
304 |
|
305 |
+
return $uploader->upload_and_get_attachment_id();
|
306 |
+
}
|
307 |
}
|
308 |
}
|
309 |
|
645 |
*/
|
646 |
$args = apply_filters( 'tribe_register_rest_route_args', $args, $namespace, $route, $override );
|
647 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
648 |
return register_rest_route( $namespace, $route, $args, $override );
|
649 |
}
|
650 |
}
|
707 |
* @return string|boolean The SemVer version string or false if no info found.
|
708 |
*/
|
709 |
function tribe_get_least_version_ever_installed( $class ) {
|
710 |
+
$instance = tribe_get_class_instance( $class );
|
|
|
|
|
|
|
|
|
|
|
|
|
711 |
|
712 |
+
if ( $instance ) {
|
713 |
+
// Try for the version history first.
|
714 |
+
if ( ! empty( $instance->version_history_slug ) ) {
|
715 |
+
$history = (array) Tribe__Settings_Manager::get_option( $instance->version_history_slug );
|
716 |
|
717 |
+
// '0' may be logged as a version number, which isn't useful, so we remove it
|
718 |
+
$history = array_filter( $history );
|
719 |
+
$history = array_unique( $history );
|
|
|
|
|
720 |
|
721 |
+
if ( ! empty( $history ) ) {
|
722 |
+
// Sort the array so smallest version number is first (likely how the array is stored anyway)
|
723 |
+
usort( $history, 'version_compare' );
|
724 |
|
725 |
+
return array_shift( $history );
|
726 |
+
}
|
727 |
}
|
|
|
728 |
|
729 |
+
// Fall back to the current plugin version.
|
730 |
+
if ( defined( get_class( $instance ) . '::VERSION' ) ) {
|
731 |
+
return $instance::VERSION;
|
732 |
+
}
|
733 |
}
|
734 |
|
735 |
// No version set.
|
756 |
* @return string|boolean The SemVer version string or false if no info found.
|
757 |
*/
|
758 |
function tribe_get_greatest_version_ever_installed( $class ) {
|
759 |
+
$instance = tribe_get_class_instance( $class );
|
|
|
|
|
|
|
|
|
|
|
|
|
760 |
|
761 |
+
if ( $instance ) {
|
762 |
+
// Try for the version history first.
|
763 |
+
if ( ! empty( $instance->version_history_slug ) ) {
|
764 |
+
$history = (array) Tribe__Settings_Manager::get_option( $instance->version_history_slug );
|
765 |
|
766 |
+
// '0' may be logged as a version number, which isn't useful, so we remove it
|
767 |
+
$history = array_filter( $history );
|
768 |
+
$history = array_unique( $history );
|
|
|
|
|
769 |
|
770 |
+
if ( ! empty( $history ) ) {
|
771 |
+
// Sort the array so smallest version number is first (likely how the array is stored anyway)
|
772 |
+
usort( $history, 'version_compare' );
|
773 |
|
774 |
+
return array_pop( $history );
|
775 |
+
}
|
776 |
}
|
|
|
777 |
|
778 |
+
// Fall back to the current plugin version.
|
779 |
+
if ( defined( get_class( $instance ) . '::VERSION' ) ) {
|
780 |
+
return $instance::VERSION;
|
781 |
+
}
|
782 |
}
|
783 |
|
784 |
// No version set.
|
786 |
}
|
787 |
}
|
788 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
789 |
if ( ! function_exists( 'tribe_get_first_ever_installed_version' ) ) {
|
790 |
/**
|
791 |
* Gets the initially-recorded version number installed for the specified class of a plugin having a
|
803 |
* @return string|boolean The SemVer version string or false if no info found.
|
804 |
*/
|
805 |
function tribe_get_first_ever_installed_version( $class ) {
|
806 |
+
$instance = tribe_get_class_instance( $class );
|
|
|
|
|
|
|
|
|
|
|
|
|
807 |
|
808 |
+
if ( $instance ) {
|
809 |
+
// Try for the version history first.
|
810 |
+
if ( ! empty( $instance->version_history_slug ) ) {
|
811 |
+
$history = (array) Tribe__Settings_Manager::get_option( $instance->version_history_slug );
|
812 |
+
|
813 |
+
// '0' may be logged as a version number, which isn't useful, so we remove it
|
814 |
+
while (
|
815 |
+
! empty( $history )
|
816 |
+
&& empty( $history[0] )
|
817 |
+
) {
|
818 |
+
array_shift( $history );
|
819 |
+
}
|
820 |
|
821 |
+
// Found it so return it
|
822 |
+
if ( ! empty( $history[0] ) ) {
|
823 |
+
return $history[0];
|
824 |
+
}
|
|
|
|
|
|
|
|
|
825 |
}
|
826 |
|
827 |
+
// Fall back to the current plugin version.
|
828 |
+
if ( defined( get_class( $instance ) . '::VERSION' ) ) {
|
829 |
+
return $instance::VERSION;
|
830 |
}
|
831 |
}
|
832 |
|
|
|
|
|
|
|
|
|
|
|
833 |
// No version set.
|
834 |
return false;
|
835 |
}
|
854 |
function tribe_get_currently_installed_version( $class ) {
|
855 |
$instance = tribe_get_class_instance( $class );
|
856 |
|
857 |
+
if ( $instance ) {
|
858 |
+
// First try for class constant (different logic from the other similar functions).
|
859 |
+
if ( defined( get_class( $instance ) . '::VERSION' ) ) {
|
860 |
+
return $instance::VERSION;
|
861 |
+
}
|
862 |
}
|
863 |
|
864 |
// No version set.
|
1055 |
);
|
1056 |
}
|
1057 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
common/src/resources/css/app-shop.min.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
|
1 |
+
#tribe-app-shop{max-width:960px}#tribe-app-shop .addon-grid{width:100%}#tribe-app-shop .header h1{display:inline-block}#tribe-app-shop .header .button{margin-top:10px}#tribe-app-shop .tribe-addon{background-color:#fff;border-bottom:1px solid #dfdfdf;display:inline-block;margin:0 15px 15px 0;overflow:hidden;padding:0;position:relative;vertical-align:top;width:300px;border-radius:3px 3px 3px 3px;box-sizing:border-box}#tribe-app-shop .tribe-addon h4{font-size:1.17em;margin:15px 0}#tribe-app-shop .tribe-addon h4 a{text-decoration:none}#tribe-app-shop .tribe-addon .button{bottom:15px;display:block;position:absolute}#tribe-app-shop .tribe-addon .button-disabled{padding-left:3px}#tribe-app-shop .tribe-addon .button-disabled .dashicons{font-size:28px;padding-right:9px}#tribe-app-shop .tribe-addon .caption{padding:0 15px 45px}#tribe-app-shop .tribe-addon .thumb img{height:228px;max-width:100%;width:300px}#tribe-app-shop .tribe-addon.first{margin:20px 0;overflow:hidden;padding:0;width:937px}#tribe-app-shop .tribe-addon.first h4{font-size:20px;line-height:1.4;margin:15px 0 0}#tribe-app-shop .tribe-addon.first .caption{display:inline-block;padding-left:20px;width:600px}#tribe-app-shop .tribe-addon.first .thumb{float:left;height:228px;width:300px}#tribe-app-shop .tribe-installed-headline{margin-bottom:20px}
|
common/src/resources/css/app/elements.min.css
CHANGED
@@ -8,7 +8,7 @@
|
|
8 |
.tribe-common__plugin-block-hook .block-editor-inner-blocks .editor-block-list__layout,.tribe-common__plugin-block-hook .editor-inner-blocks .editor-block-list__layout{margin:0}.tribe-common__plugin-block-hook .block-editor-inner-blocks .editor-block-list__layout .editor-block-list__block,.tribe-common__plugin-block-hook .editor-inner-blocks .editor-block-list__layout .editor-block-list__block{margin:0;max-width:100%!important;padding:0}.tribe-common__plugin-block-hook .block-editor-inner-blocks .editor-block-list__layout .editor-block-list__block.is-hovered>.editor-block-list__block-edit:before,.tribe-common__plugin-block-hook .block-editor-inner-blocks .editor-block-list__layout .editor-block-list__block.is-selected-parent>.editor-block-list__block-edit:before,.tribe-common__plugin-block-hook .block-editor-inner-blocks .editor-block-list__layout .editor-block-list__block.is-selected>.editor-block-list__block-edit:before,.tribe-common__plugin-block-hook .editor-inner-blocks .editor-block-list__layout .editor-block-list__block.is-hovered>.editor-block-list__block-edit:before,.tribe-common__plugin-block-hook .editor-inner-blocks .editor-block-list__layout .editor-block-list__block.is-selected-parent>.editor-block-list__block-edit:before,.tribe-common__plugin-block-hook .editor-inner-blocks .editor-block-list__layout .editor-block-list__block.is-selected>.editor-block-list__block-edit:before{outline:none}.tribe-common__plugin-block-hook .block-editor-inner-blocks .editor-block-list__layout .editor-block-list__block .editor-block-list__block-edit,.tribe-common__plugin-block-hook .editor-inner-blocks .editor-block-list__layout .editor-block-list__block .editor-block-list__block-edit{margin:0}.tribe-common__plugin-block-hook .block-editor-inner-blocks .editor-block-list__layout .editor-block-list__block .editor-block-list__block-edit:before,.tribe-common__plugin-block-hook .editor-inner-blocks .editor-block-list__layout .editor-block-list__block .editor-block-list__block-edit:before{outline:none}.tribe-common__plugin-block-hook .block-editor-inner-blocks .editor-block-list__layout .editor-block-list__block .editor-block-list__block-edit .editor-block-contextual-toolbar,.tribe-common__plugin-block-hook .editor-inner-blocks .editor-block-list__layout .editor-block-list__block .editor-block-list__block-edit .editor-block-contextual-toolbar{display:none}.tribe-common__plugin-block-hook .block-editor-inner-blocks .editor-block-list__layout .editor-block-list__block,.tribe-common__plugin-block-hook .editor-inner-blocks .editor-block-list__layout .editor-block-list__block{outline:none}
|
9 |
.tribe-common-form-select{display:-webkit-box;display:flex}.tribe-common-form-select>div{-webkit-box-flex:0;flex:0 0 auto;min-width:193px}.tribe-common-form-select__toggle{background-color:#fff;border-radius:2px;border:2px solid #eaebec}.tribe-common-form-select__toggle button{-webkit-box-align:center;align-items:center;background-color:#fefffe;border:none;color:#545d66;display:-webkit-box;display:flex;font-family:Helvetica,sans-serif;font-size:16px;font-weight:400;-webkit-box-pack:center;justify-content:center;line-height:1.5;padding:6px 10px;text-align:left;text-decoration:none;width:100%}.tribe-common-form-select__toggle button>span{-webkit-box-flex:1;flex:1}.tribe-common-form-select__options__option{background:transparent;border:0;color:#555d66;cursor:pointer;display:block;line-height:20px;padding:5px 12px;text-align:left;width:100%}.tribe-common-form-select__options__option:hover{background-color:#009fd4;color:#fff}
|
10 |
input.tribe-editor__input[type=number],input.tribe-editor__input[type=text]{color:#000;font-size:16px;line-height:24px;border:1px solid #e1e3e6;padding:7px 15px;margin:0;height:40px}input.tribe-editor__input[type=number]:focus,input.tribe-editor__input[type=text]:focus{color:#000;box-shadow:none;outline:none}input.tribe-editor__input[type=number]:disabled,input.tribe-editor__input[type=text]:disabled{color:#aeb4bb}
|
11 |
-
.tribe-editor__timepicker{display:inline-block}.tribe-editor__timepicker__toggle{background-color:#fff;border:1px solid #e1e3e6;border-radius:2px;display:-webkit-box;display:flex;-webkit-box-align:center;align-items:center;-webkit-box-pack:center;justify-content:center}.tribe-editor__timepicker__toggle input.tribe-editor__timepicker__input[type=text]{font-family:Helvetica,sans-serif;font-size:14px;line-height:1.5;padding:6px 0 6px 10px;border:none;width:80px}.tribe-editor__timepicker__toggle button.tribe-editor__timepicker__toggle-btn{padding:10px}.tribe-editor__timepicker__toggle button.tribe-editor__timepicker__toggle-btn:disabled>svg.dashicon{fill:#aeb4bb}.tribe-editor__timepicker__toggle button.tribe-editor__timepicker__all-day-btn{color:#545d66;line-height:20px;padding:6px 10px;text-decoration:none;display:-webkit-box;display:flex;-webkit-box-align:center;align-items:center;-webkit-box-pack:center;justify-content:center}.tribe-editor__timepicker__content.components-popover .components-popover__content{min-width:
|
12 |
.DayPicker{display:inline-block;font-size:1rem}.DayPicker-wrapper{position:relative;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-direction:row;padding-bottom:1em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.DayPicker-Months{display:-webkit-box;display:flex;flex-wrap:wrap;-webkit-box-pack:center;justify-content:center}.DayPicker-Month{display:table;margin:0 1em;margin-top:1em;border-spacing:0;border-collapse:collapse;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.DayPicker-NavButton{position:absolute;top:1em;right:1.5em;left:auto;display:inline-block;margin-top:2px;width:1.25em;height:1.25em;background-position:50%;background-size:50%;background-repeat:no-repeat;color:#8b9898;cursor:pointer}.DayPicker-NavButton:hover{opacity:.8}.DayPicker-NavButton--prev{margin-right:1.5em;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAwCAYAAAB5R9gVAAAABGdBTUEAALGPC/xhBQAAAVVJREFUWAnN2G0KgjAYwPHpGfRkaZeqvgQaK+hY3SUHrk1YzNLay/OiEFp92I+/Mp2F2Mh2lLISWnflFjzH263RQjzMZ19wgs73ez0o1WmtW+dgA01VxrE3p6l2GLsnBy1VYQOtVSEH/atCCgqpQgKKqYIOiq2CBkqtggLKqQIKgqgCBjpJ2Y5CdJ+zrT9A7HHSTA1dxUdHgzCqJIEwq0SDsKsEg6iqBIEoq/wEcVRZBXFV+QJxV5mBtlDFB5VjYTaGZ2sf4R9PM7U9ZU+lLuaetPP/5Die3ToO1+u+MKtHs06qODB2zBnI/jBd4MPQm1VkY79Tb18gB+C62FdBFsZR6yeIo1YQiLJWMIiqVjQIu1YSCLNWFgijVjYIuhYYCKoWKAiiFgoopxYaKLUWOii2FgkophYp6F3r42W5A9s9OcgNvva8xQaysKXlFytoqdYmQH6tF3toSUo0INq9AAAAAElFTkSuQmCC")}.DayPicker-NavButton--next{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAwCAYAAAB5R9gVAAAABGdBTUEAALGPC/xhBQAAAXRJREFUWAnN119ugjAcwPHWzJ1gnmxzB/BBE0n24m4xfNkTaOL7wOtsl3AXMMb+Vjaa1BG00N8fSEibPpAP3xAKKs2yjzTPH9RAjhEo9WzPr/Vm8zgE0+gXATAxxuxtqeJ9t5tIwv5AtQAApsfT6TPdbp+kUBcgVwvO51KqVhMkXKsVJFXrOkigVhCIs1Y4iKlWZxB1rX4gwlpRIIpa8SDkWmggrFq4IIRaJKCYWnSgnrXIQV1r8YD+1Vrn+bReagysIFfLABRt31v8oBu1xEBttfRbltmfjgEcWh9snUS2kNdBK6WN1vrOWxObWsz+fjxevsxmB1GQDfINWiev83nhaoiB/CoOU438oPrhXS0WpQ9xc1ZQWxWHqUYe0I0qrKCQKjygDlXIQV2r0IF6ViEBxVTBBSFUQQNhVYkHIVeJAtkNsbQ7c1LtzP6FsObhb2rCKv7NBIGoq4SDmKoEgTirXAcJVGkFSVVpgoSrXICGUMUH/QBZNSUy5XWUhwAAAABJRU5ErkJggg==")}.DayPicker-NavButton--interactionDisabled{display:none}.DayPicker-Caption{display:table-caption;margin-bottom:.5em;padding:0 .5em;text-align:left}.DayPicker-Caption>div{font-weight:500;font-size:1.15em}.DayPicker-Weekdays{display:table-header-group;margin-top:1em}.DayPicker-WeekdaysRow{display:table-row}.DayPicker-Weekday{display:table-cell;padding:.5em;color:#8b9898;text-align:center;font-size:.875em}.DayPicker-Weekday abbr[title]{border-bottom:none;text-decoration:none}.DayPicker-Body{display:table-row-group}.DayPicker-Week{display:table-row}.DayPicker-Day{border-radius:50%;text-align:center}.DayPicker-Day,.DayPicker-WeekNumber{display:table-cell;padding:.5em;vertical-align:middle;cursor:pointer}.DayPicker-WeekNumber{min-width:1em;border-right:1px solid #eaecec;color:#8b9898;text-align:right;font-size:.75em}.DayPicker--interactionDisabled .DayPicker-Day{cursor:default}.DayPicker-Footer{padding-top:.5em}.DayPicker-TodayButton{border:none;background-color:transparent;background-image:none;box-shadow:none;color:#4a90e2;font-size:.875em;cursor:pointer}.DayPicker-Day--today{color:#d0021b;font-weight:700}.DayPicker-Day--outside{color:#8b9898;cursor:default}.DayPicker-Day--disabled{color:#dce0e0;cursor:default}.DayPicker-Day--sunday{background-color:#f7f8f8}.DayPicker-Day--sunday:not(.DayPicker-Day--today){color:#dce0e0}.DayPicker-Day--selected:not(.DayPicker-Day--disabled):not(.DayPicker-Day--outside){position:relative;background-color:#4a90e2;color:#f0f8ff}.DayPicker-Day--selected:not(.DayPicker-Day--disabled):not(.DayPicker-Day--outside):hover{background-color:#51a0fa}.DayPicker:not(.DayPicker--interactionDisabled) .DayPicker-Day:not(.DayPicker-Day--disabled):not(.DayPicker-Day--selected):not(.DayPicker-Day--outside):hover{background-color:#f0f8ff}.DayPickerInput{display:inline-block}.DayPickerInput-OverlayWrapper{position:relative}.DayPickerInput-Overlay{position:absolute;left:0;z-index:1;background:#fff;box-shadow:0 2px 5px rgba(0,0,0,.15)}
|
13 |
.tribe-editor__day-picker-input.DayPickerInput>input{border:1px solid #e1e3e6;color:#545d66;font-size:16px;line-height:24px;padding:7px 15px;width:100%;height:40px}.tribe-editor__day-picker-input.DayPickerInput>input:disabled{color:#aeb4bb}.tribe-editor__day-picker-input .DayPickerInput-Overlay{padding:20px;z-index:10}.tribe-editor__day-picker-input .DayPicker{width:100%}.tribe-editor__day-picker-input .DayPicker-Month{margin:0}.tribe-editor__day-picker-input .DayPicker-Caption>div,.tribe-editor__day-picker-input .DayPicker-Day,.tribe-editor__day-picker-input .DayPicker-Weekday{color:#545d66;font-family:Helvetica,"sans-serif";font-weight:400}.tribe-editor__day-picker-input .DayPicker-Caption>div{font-size:16px;margin-bottom:12px;text-align:center}.tribe-editor__day-picker-input .DayPicker-Weekday{font-size:12px}.tribe-editor__day-picker-input .DayPicker-Day{font-size:14px}.tribe-editor__day-picker-input .DayPicker-Day:hover{color:#007bb4;background-color:#fff}.tribe-editor__day-picker-input .DayPicker-Day--today{color:#545d66}.tribe-editor__day-picker-input .DayPicker-Day--disabled{pointer-events:none;color:#ccc}.tribe-editor__day-picker-input .DayPicker-Day--selected:not(.DayPicker-Day--outside){border-radius:0;background-color:#009fd4;color:#fff}.tribe-editor__day-picker-input .DayPicker-Day--selected:not(.DayPicker-Day--outside):hover{background-color:#007bb4;color:#fff}.tribe-editor__day-picker-input .DayPicker-NavButton--prev{left:0;top:0}.tribe-editor__day-picker-input .DayPicker-NavButton--next{right:0;top:0}.tribe-editor__day-picker-input .DayPicker:not(.DayPicker--interactionDisabled) .DayPicker-Day:not(.DayPicker-Day--disabled):not(.DayPicker-Day--selected):not(.DayPicker-Day--outside):hover{background-color:#fff}.tribe-editor__day-picker-input .DayPicker-Day--selected:not(.DayPicker-Day--start):not(.DayPicker-Day--end):not(.DayPicker-Day--outside){background-color:#e7f5fa;color:#545d66}.tribe-editor__day-picker-input .DayPicker-Day--selected:not(.DayPicker-Day--start):not(.DayPicker-Day--end):not(.DayPicker-Day--outside):hover{color:#007bb4}
|
14 |
.tribe-editor__creatable-select .tribe-editor__creatable-select__control{height:40px;border:1px solid #e1e3e6;border-radius:3px;background-color:#fff}.tribe-editor__creatable-select .tribe-editor__creatable-select__control:hover{border:1px solid #e1e3e6}.tribe-editor__creatable-select .tribe-editor__creatable-select__control--is-focused{box-shadow:none}.tribe-editor__creatable-select .tribe-editor__creatable-select__value-container{padding:2px 5px 2px 15px}.tribe-editor__creatable-select .tribe-editor__creatable-select__single-value{margin:0;max-width:calc(100% - 15px);font-size:16px;line-height:1.5}.tribe-editor__creatable-select .tribe-editor__creatable-select__input{font-size:16px}.tribe-editor__creatable-select .tribe-editor__creatable-select__input>input{margin:0;line-height:1.5}.tribe-editor__creatable-select .tribe-editor__creatable-select__input>input,.tribe-editor__creatable-select .tribe-editor__creatable-select__input>input:focus{box-shadow:none}.tribe-editor__creatable-select svg.tribe-editor__creatable-select__dropdown-indicator{fill:#555d66}.tribe-editor__creatable-select .tribe-editor__creatable-select__menu{margin:0;border:1px solid #e1e3e6;border-top:none;border-radius:0;border-bottom-left-radius:3px;border-bottom-right-radius:3px;box-shadow:none;-webkit-transform:translateY(-7px);transform:translateY(-7px)}.tribe-editor__creatable-select .tribe-editor__creatable-select__menu-list{padding:0}.tribe-editor__creatable-select .tribe-editor__creatable-select__option{font-size:16px;line-height:1.5;padding:3px 15px}.tribe-editor__creatable-select .tribe-editor__creatable-select__option--is-focused{background-color:#e7f5fa}.tribe-editor__creatable-select .tribe-editor__creatable-select__option--is-selected{background-color:#11a0d2}
|
8 |
.tribe-common__plugin-block-hook .block-editor-inner-blocks .editor-block-list__layout,.tribe-common__plugin-block-hook .editor-inner-blocks .editor-block-list__layout{margin:0}.tribe-common__plugin-block-hook .block-editor-inner-blocks .editor-block-list__layout .editor-block-list__block,.tribe-common__plugin-block-hook .editor-inner-blocks .editor-block-list__layout .editor-block-list__block{margin:0;max-width:100%!important;padding:0}.tribe-common__plugin-block-hook .block-editor-inner-blocks .editor-block-list__layout .editor-block-list__block.is-hovered>.editor-block-list__block-edit:before,.tribe-common__plugin-block-hook .block-editor-inner-blocks .editor-block-list__layout .editor-block-list__block.is-selected-parent>.editor-block-list__block-edit:before,.tribe-common__plugin-block-hook .block-editor-inner-blocks .editor-block-list__layout .editor-block-list__block.is-selected>.editor-block-list__block-edit:before,.tribe-common__plugin-block-hook .editor-inner-blocks .editor-block-list__layout .editor-block-list__block.is-hovered>.editor-block-list__block-edit:before,.tribe-common__plugin-block-hook .editor-inner-blocks .editor-block-list__layout .editor-block-list__block.is-selected-parent>.editor-block-list__block-edit:before,.tribe-common__plugin-block-hook .editor-inner-blocks .editor-block-list__layout .editor-block-list__block.is-selected>.editor-block-list__block-edit:before{outline:none}.tribe-common__plugin-block-hook .block-editor-inner-blocks .editor-block-list__layout .editor-block-list__block .editor-block-list__block-edit,.tribe-common__plugin-block-hook .editor-inner-blocks .editor-block-list__layout .editor-block-list__block .editor-block-list__block-edit{margin:0}.tribe-common__plugin-block-hook .block-editor-inner-blocks .editor-block-list__layout .editor-block-list__block .editor-block-list__block-edit:before,.tribe-common__plugin-block-hook .editor-inner-blocks .editor-block-list__layout .editor-block-list__block .editor-block-list__block-edit:before{outline:none}.tribe-common__plugin-block-hook .block-editor-inner-blocks .editor-block-list__layout .editor-block-list__block .editor-block-list__block-edit .editor-block-contextual-toolbar,.tribe-common__plugin-block-hook .editor-inner-blocks .editor-block-list__layout .editor-block-list__block .editor-block-list__block-edit .editor-block-contextual-toolbar{display:none}.tribe-common__plugin-block-hook .block-editor-inner-blocks .editor-block-list__layout .editor-block-list__block,.tribe-common__plugin-block-hook .editor-inner-blocks .editor-block-list__layout .editor-block-list__block{outline:none}
|
9 |
.tribe-common-form-select{display:-webkit-box;display:flex}.tribe-common-form-select>div{-webkit-box-flex:0;flex:0 0 auto;min-width:193px}.tribe-common-form-select__toggle{background-color:#fff;border-radius:2px;border:2px solid #eaebec}.tribe-common-form-select__toggle button{-webkit-box-align:center;align-items:center;background-color:#fefffe;border:none;color:#545d66;display:-webkit-box;display:flex;font-family:Helvetica,sans-serif;font-size:16px;font-weight:400;-webkit-box-pack:center;justify-content:center;line-height:1.5;padding:6px 10px;text-align:left;text-decoration:none;width:100%}.tribe-common-form-select__toggle button>span{-webkit-box-flex:1;flex:1}.tribe-common-form-select__options__option{background:transparent;border:0;color:#555d66;cursor:pointer;display:block;line-height:20px;padding:5px 12px;text-align:left;width:100%}.tribe-common-form-select__options__option:hover{background-color:#009fd4;color:#fff}
|
10 |
input.tribe-editor__input[type=number],input.tribe-editor__input[type=text]{color:#000;font-size:16px;line-height:24px;border:1px solid #e1e3e6;padding:7px 15px;margin:0;height:40px}input.tribe-editor__input[type=number]:focus,input.tribe-editor__input[type=text]:focus{color:#000;box-shadow:none;outline:none}input.tribe-editor__input[type=number]:disabled,input.tribe-editor__input[type=text]:disabled{color:#aeb4bb}
|
11 |
+
.tribe-editor__timepicker{display:inline-block}.tribe-editor__timepicker__toggle{background-color:#fff;border:1px solid #e1e3e6;border-radius:2px;display:-webkit-box;display:flex;-webkit-box-align:center;align-items:center;-webkit-box-pack:center;justify-content:center}.tribe-editor__timepicker__toggle input.tribe-editor__timepicker__input[type=text]{font-family:Helvetica,sans-serif;font-size:14px;line-height:1.5;padding:6px 0 6px 10px;border:none;width:80px}.tribe-editor__timepicker__toggle button.tribe-editor__timepicker__toggle-btn{padding:10px}.tribe-editor__timepicker__toggle button.tribe-editor__timepicker__toggle-btn:disabled>svg.dashicon{fill:#aeb4bb}.tribe-editor__timepicker__toggle button.tribe-editor__timepicker__all-day-btn{color:#545d66;line-height:20px;padding:6px 10px;text-decoration:none;display:-webkit-box;display:flex;-webkit-box-align:center;align-items:center;-webkit-box-pack:center;justify-content:center}.tribe-editor__timepicker__content.components-popover .components-popover__content{min-width:110px}.tribe-editor__timepicker__content .tribe-editor__timepicker__items{height:250px;overflow:auto}.tribe-editor__timepicker__content .tribe-editor__timepicker__items .components-placeholder{height:inherit}.tribe-editor__timepicker__content .tribe-editor__timepicker__item{display:block;width:100%;color:#555d66;padding:5px 12px;cursor:pointer;border-bottom:1px solid #e2e4e7;line-height:20px;background:transparent;text-align:left}.tribe-editor__timepicker__content .tribe-editor__timepicker__item:focus,.tribe-editor__timepicker__content .tribe-editor__timepicker__item:hover{background-color:#e7f5fa}.tribe-editor__timepicker__content .tribe-editor__timepicker__item--current,.tribe-editor__timepicker__content .tribe-editor__timepicker__item--current:focus,.tribe-editor__timepicker__content .tribe-editor__timepicker__item--current:hover{color:#fff;background-color:#009fd4}
|
12 |
.DayPicker{display:inline-block;font-size:1rem}.DayPicker-wrapper{position:relative;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-direction:row;padding-bottom:1em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.DayPicker-Months{display:-webkit-box;display:flex;flex-wrap:wrap;-webkit-box-pack:center;justify-content:center}.DayPicker-Month{display:table;margin:0 1em;margin-top:1em;border-spacing:0;border-collapse:collapse;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.DayPicker-NavButton{position:absolute;top:1em;right:1.5em;left:auto;display:inline-block;margin-top:2px;width:1.25em;height:1.25em;background-position:50%;background-size:50%;background-repeat:no-repeat;color:#8b9898;cursor:pointer}.DayPicker-NavButton:hover{opacity:.8}.DayPicker-NavButton--prev{margin-right:1.5em;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAwCAYAAAB5R9gVAAAABGdBTUEAALGPC/xhBQAAAVVJREFUWAnN2G0KgjAYwPHpGfRkaZeqvgQaK+hY3SUHrk1YzNLay/OiEFp92I+/Mp2F2Mh2lLISWnflFjzH263RQjzMZ19wgs73ez0o1WmtW+dgA01VxrE3p6l2GLsnBy1VYQOtVSEH/atCCgqpQgKKqYIOiq2CBkqtggLKqQIKgqgCBjpJ2Y5CdJ+zrT9A7HHSTA1dxUdHgzCqJIEwq0SDsKsEg6iqBIEoq/wEcVRZBXFV+QJxV5mBtlDFB5VjYTaGZ2sf4R9PM7U9ZU+lLuaetPP/5Die3ToO1+u+MKtHs06qODB2zBnI/jBd4MPQm1VkY79Tb18gB+C62FdBFsZR6yeIo1YQiLJWMIiqVjQIu1YSCLNWFgijVjYIuhYYCKoWKAiiFgoopxYaKLUWOii2FgkophYp6F3r42W5A9s9OcgNvva8xQaysKXlFytoqdYmQH6tF3toSUo0INq9AAAAAElFTkSuQmCC")}.DayPicker-NavButton--next{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAwCAYAAAB5R9gVAAAABGdBTUEAALGPC/xhBQAAAXRJREFUWAnN119ugjAcwPHWzJ1gnmxzB/BBE0n24m4xfNkTaOL7wOtsl3AXMMb+Vjaa1BG00N8fSEibPpAP3xAKKs2yjzTPH9RAjhEo9WzPr/Vm8zgE0+gXATAxxuxtqeJ9t5tIwv5AtQAApsfT6TPdbp+kUBcgVwvO51KqVhMkXKsVJFXrOkigVhCIs1Y4iKlWZxB1rX4gwlpRIIpa8SDkWmggrFq4IIRaJKCYWnSgnrXIQV1r8YD+1Vrn+bReagysIFfLABRt31v8oBu1xEBttfRbltmfjgEcWh9snUS2kNdBK6WN1vrOWxObWsz+fjxevsxmB1GQDfINWiev83nhaoiB/CoOU438oPrhXS0WpQ9xc1ZQWxWHqUYe0I0qrKCQKjygDlXIQV2r0IF6ViEBxVTBBSFUQQNhVYkHIVeJAtkNsbQ7c1LtzP6FsObhb2rCKv7NBIGoq4SDmKoEgTirXAcJVGkFSVVpgoSrXICGUMUH/QBZNSUy5XWUhwAAAABJRU5ErkJggg==")}.DayPicker-NavButton--interactionDisabled{display:none}.DayPicker-Caption{display:table-caption;margin-bottom:.5em;padding:0 .5em;text-align:left}.DayPicker-Caption>div{font-weight:500;font-size:1.15em}.DayPicker-Weekdays{display:table-header-group;margin-top:1em}.DayPicker-WeekdaysRow{display:table-row}.DayPicker-Weekday{display:table-cell;padding:.5em;color:#8b9898;text-align:center;font-size:.875em}.DayPicker-Weekday abbr[title]{border-bottom:none;text-decoration:none}.DayPicker-Body{display:table-row-group}.DayPicker-Week{display:table-row}.DayPicker-Day{border-radius:50%;text-align:center}.DayPicker-Day,.DayPicker-WeekNumber{display:table-cell;padding:.5em;vertical-align:middle;cursor:pointer}.DayPicker-WeekNumber{min-width:1em;border-right:1px solid #eaecec;color:#8b9898;text-align:right;font-size:.75em}.DayPicker--interactionDisabled .DayPicker-Day{cursor:default}.DayPicker-Footer{padding-top:.5em}.DayPicker-TodayButton{border:none;background-color:transparent;background-image:none;box-shadow:none;color:#4a90e2;font-size:.875em;cursor:pointer}.DayPicker-Day--today{color:#d0021b;font-weight:700}.DayPicker-Day--outside{color:#8b9898;cursor:default}.DayPicker-Day--disabled{color:#dce0e0;cursor:default}.DayPicker-Day--sunday{background-color:#f7f8f8}.DayPicker-Day--sunday:not(.DayPicker-Day--today){color:#dce0e0}.DayPicker-Day--selected:not(.DayPicker-Day--disabled):not(.DayPicker-Day--outside){position:relative;background-color:#4a90e2;color:#f0f8ff}.DayPicker-Day--selected:not(.DayPicker-Day--disabled):not(.DayPicker-Day--outside):hover{background-color:#51a0fa}.DayPicker:not(.DayPicker--interactionDisabled) .DayPicker-Day:not(.DayPicker-Day--disabled):not(.DayPicker-Day--selected):not(.DayPicker-Day--outside):hover{background-color:#f0f8ff}.DayPickerInput{display:inline-block}.DayPickerInput-OverlayWrapper{position:relative}.DayPickerInput-Overlay{position:absolute;left:0;z-index:1;background:#fff;box-shadow:0 2px 5px rgba(0,0,0,.15)}
|
13 |
.tribe-editor__day-picker-input.DayPickerInput>input{border:1px solid #e1e3e6;color:#545d66;font-size:16px;line-height:24px;padding:7px 15px;width:100%;height:40px}.tribe-editor__day-picker-input.DayPickerInput>input:disabled{color:#aeb4bb}.tribe-editor__day-picker-input .DayPickerInput-Overlay{padding:20px;z-index:10}.tribe-editor__day-picker-input .DayPicker{width:100%}.tribe-editor__day-picker-input .DayPicker-Month{margin:0}.tribe-editor__day-picker-input .DayPicker-Caption>div,.tribe-editor__day-picker-input .DayPicker-Day,.tribe-editor__day-picker-input .DayPicker-Weekday{color:#545d66;font-family:Helvetica,"sans-serif";font-weight:400}.tribe-editor__day-picker-input .DayPicker-Caption>div{font-size:16px;margin-bottom:12px;text-align:center}.tribe-editor__day-picker-input .DayPicker-Weekday{font-size:12px}.tribe-editor__day-picker-input .DayPicker-Day{font-size:14px}.tribe-editor__day-picker-input .DayPicker-Day:hover{color:#007bb4;background-color:#fff}.tribe-editor__day-picker-input .DayPicker-Day--today{color:#545d66}.tribe-editor__day-picker-input .DayPicker-Day--disabled{pointer-events:none;color:#ccc}.tribe-editor__day-picker-input .DayPicker-Day--selected:not(.DayPicker-Day--outside){border-radius:0;background-color:#009fd4;color:#fff}.tribe-editor__day-picker-input .DayPicker-Day--selected:not(.DayPicker-Day--outside):hover{background-color:#007bb4;color:#fff}.tribe-editor__day-picker-input .DayPicker-NavButton--prev{left:0;top:0}.tribe-editor__day-picker-input .DayPicker-NavButton--next{right:0;top:0}.tribe-editor__day-picker-input .DayPicker:not(.DayPicker--interactionDisabled) .DayPicker-Day:not(.DayPicker-Day--disabled):not(.DayPicker-Day--selected):not(.DayPicker-Day--outside):hover{background-color:#fff}.tribe-editor__day-picker-input .DayPicker-Day--selected:not(.DayPicker-Day--start):not(.DayPicker-Day--end):not(.DayPicker-Day--outside){background-color:#e7f5fa;color:#545d66}.tribe-editor__day-picker-input .DayPicker-Day--selected:not(.DayPicker-Day--start):not(.DayPicker-Day--end):not(.DayPicker-Day--outside):hover{color:#007bb4}
|
14 |
.tribe-editor__creatable-select .tribe-editor__creatable-select__control{height:40px;border:1px solid #e1e3e6;border-radius:3px;background-color:#fff}.tribe-editor__creatable-select .tribe-editor__creatable-select__control:hover{border:1px solid #e1e3e6}.tribe-editor__creatable-select .tribe-editor__creatable-select__control--is-focused{box-shadow:none}.tribe-editor__creatable-select .tribe-editor__creatable-select__value-container{padding:2px 5px 2px 15px}.tribe-editor__creatable-select .tribe-editor__creatable-select__single-value{margin:0;max-width:calc(100% - 15px);font-size:16px;line-height:1.5}.tribe-editor__creatable-select .tribe-editor__creatable-select__input{font-size:16px}.tribe-editor__creatable-select .tribe-editor__creatable-select__input>input{margin:0;line-height:1.5}.tribe-editor__creatable-select .tribe-editor__creatable-select__input>input,.tribe-editor__creatable-select .tribe-editor__creatable-select__input>input:focus{box-shadow:none}.tribe-editor__creatable-select svg.tribe-editor__creatable-select__dropdown-indicator{fill:#555d66}.tribe-editor__creatable-select .tribe-editor__creatable-select__menu{margin:0;border:1px solid #e1e3e6;border-top:none;border-radius:0;border-bottom-left-radius:3px;border-bottom-right-radius:3px;box-shadow:none;-webkit-transform:translateY(-7px);transform:translateY(-7px)}.tribe-editor__creatable-select .tribe-editor__creatable-select__menu-list{padding:0}.tribe-editor__creatable-select .tribe-editor__creatable-select__option{font-size:16px;line-height:1.5;padding:3px 15px}.tribe-editor__creatable-select .tribe-editor__creatable-select__option--is-focused{background-color:#e7f5fa}.tribe-editor__creatable-select .tribe-editor__creatable-select__option--is-selected{background-color:#11a0d2}
|
common/src/resources/css/common-full.min.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.tribe-common figure{line-height:0}.tribe-common figcaption{line-height:normal}.tribe-common a{background-color:transparent;-webkit-text-decoration-skip:objects}.tribe-common abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.tribe-common code,.tribe-common kbd,.tribe-common pre,.tribe-common samp{font-family:monospace;font-size:1em}.tribe-common b,.tribe-common strong{font-weight:inherit;font-weight:bolder}.tribe-common dfn{font-style:italic}.tribe-common mark{background-color:#ff0;color:#000}.tribe-common small{font-size:80%}.tribe-common sub,.tribe-common sup{font-size:75%;line-height:0}.tribe-common hr{border:0;height:0}.tribe-common button,.tribe-common input[type=button],.tribe-common input[type=email],.tribe-common input[type=password],.tribe-common input[type=reset],.tribe-common input[type=search],.tribe-common input[type=submit],.tribe-common input[type=text],.tribe-common input[type=url],.tribe-common textarea{-webkit-appearance:none;-moz-appearance:none;appearance:none}.tribe-common button,.tribe-common input,.tribe-common optgroup,.tribe-common select,.tribe-common textarea{color:inherit;font:inherit;line-height:normal;-webkit-font-smoothing:antialiased}.tribe-common button,.tribe-common input,.tribe-common select,.tribe-common textarea{outline:0;border-radius:0}.tribe-common select:-moz-focusring{color:transparent;text-shadow:0 0 0 #000}.tribe-common optgroup{font-weight:700}.tribe-common h1,.tribe-common h2,.tribe-common h3,.tribe-common h4,.tribe-common h5,.tribe-common h6,.tribe-common p{font-weight:400;text-rendering:optimizeLegibility}#top .main_color .tribe-common button[disabled],#top.tribe-theme-enfold .tribe-common button[disabled]{opacity:1}.tribe-theme-twentynineteen .tribe-common h1:before,.tribe-theme-twentynineteen .tribe-common h2:before{content:none}.tribe-theme-twentynineteen .tribe-common button,.tribe-theme-twentynineteen .tribe-common input[type=button],.tribe-theme-twentynineteen .tribe-common input[type=reset],.tribe-theme-twentynineteen .tribe-common input[type=submit]{outline:none}.tribe-theme-twentynineteen .tribe-common td,.tribe-theme-twentynineteen .tribe-common th{word-break:normal}.tribe-theme-twentyseventeen .tribe-common h5{letter-spacing:normal;text-transform:none}.tribe-theme-twentyseventeen .tribe-common input[type=text]{border-radius:0}.tribe-theme-twentytwenty .tribe-common{background-color:#fff;letter-spacing:normal}.tribe-theme-twentytwenty .tribe-common input,.tribe-theme-twentytwenty .tribe-common textarea{letter-spacing:normal}.tribe-theme-twentytwenty .tribe-common *{word-break:normal}.tribe-theme-twentytwentyone.tribe-common .tribe-common .button:not(:hover):not(:active):not(.has-background),.tribe-theme-twentytwentyone.tribe-common .tribe-common .wp-block-button .wp-block-button__link:not(:hover):not(:active):not(.has-background),.tribe-theme-twentytwentyone.tribe-common .tribe-common .wp-block-file a.wp-block-file__button:not(:hover):not(:active):not(.has-background),.tribe-theme-twentytwentyone.tribe-common .tribe-common .wp-block-search .wp-block-search__button:not(:hover):not(:active):not(.has-background),.tribe-theme-twentytwentyone.tribe-common .tribe-common button:not(:hover):not(:active):not(.has-background),.tribe-theme-twentytwentyone.tribe-common .tribe-common input[type=reset]:not(:hover):not(:active):not(.has-background),.tribe-theme-twentytwentyone.tribe-common .tribe-common input[type=submit]:not(:hover):not(:active):not(.has-background){background-color:transparent;background-color:initial}.tribe-common .tribe-common-form-control-checkbox,.tribe-common .tribe-common-form-control-radio{line-height:0}.tribe-common .tribe-common-form-control-checkbox__label,.tribe-common .tribe-common-form-control-radio__label{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:14px;line-height:1.62;font-weight:400}.tribe-common .tribe-common-form-control-checkbox__label:hover,.tribe-common .tribe-common-form-control-radio__label:hover{opacity:.8}.tribe-common .tribe-common-form-control-checkbox__input,.tribe-common .tribe-common-form-control-radio__input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border:1px solid #141827;height:20px;position:relative;width:20px}.tribe-common .tribe-common-form-control-checkbox__input:active,.tribe-common .tribe-common-form-control-checkbox__input:focus,.tribe-common .tribe-common-form-control-checkbox__input:hover,.tribe-common .tribe-common-form-control-radio__input:active,.tribe-common .tribe-common-form-control-radio__input:focus,.tribe-common .tribe-common-form-control-radio__input:hover{border-color:#141827;opacity:.8}.tribe-common .tribe-common-form-control-checkbox__input:checked,.tribe-common .tribe-common-form-control-radio__input:checked{background-color:#141827}.tribe-common .tribe-common-form-control-checkbox__input{border-radius:4px}.tribe-common .tribe-common-form-control-checkbox__input:checked:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='9' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M10.6.1L3.9 6.8 1.4 4.3c-.1-.1-.3-.1-.4 0l-.8.8c-.1.1-.1.3 0 .4l3.4 3.4c.2.1.4.1.5 0l7.7-7.7c.1-.1.1-.3 0-.4L11 .1c-.1-.1-.3-.1-.4 0z' fill='%23fff'/%3E%3C/svg%3E");background-repeat:no-repeat;background-size:contain;content:"";display:block;height:9px;left:50%;margin:0;position:absolute;top:50%;transform:translate(-50%,-50%);width:12px}.tribe-common .tribe-common-form-control-checkbox__input:focus+.tribe-common-form-control-checkbox__label,.tribe-common .tribe-common-form-control-checkbox__input:hover+.tribe-common-form-control-checkbox__label{opacity:.8}.tribe-common .tribe-common-form-control-radio__input{border-radius:50%}.tribe-common .tribe-common-form-control-radio__input:checked:before{background-color:#fff;border-radius:50%;content:"";display:block;height:8px;left:50%;margin:0;position:absolute;top:50%;transform:translate(-50%,-50%);width:8px}.tribe-common .tribe-common-form-control-radio__input:focus+.tribe-common-form-control-radio__label,.tribe-common .tribe-common-form-control-radio__input:hover+.tribe-common-form-control-radio__label{opacity:.8}.tribe-theme-twentytwenty .tribe-common .tribe-common-form-control-checkbox__input:checked:before{margin:0}#top .main_color .tribe-common .tribe-common-form-control-checkbox__label,#top .main_color .tribe-common .tribe-common-form-control-radio__label,#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-checkbox__label,#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-radio__label{font-weight:400;font-size:14px}.tribe-common .tribe-common-form-control-slider{line-height:0}.tribe-common .tribe-common-form-control-slider__input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border:0}.tribe-common .tribe-common-form-control-slider__input::-webkit-slider-runnable-track{border:none;border-radius:5px;height:10px;margin:5px 0;padding:0;position:relative;transition:background-color .2s ease;background-color:#334aff}.tribe-common .tribe-common-form-control-slider__input::-moz-range-track{border:none;border-radius:5px;height:10px;margin:5px 0;padding:0;position:relative;transition:background-color .2s ease;background-color:#334aff}.tribe-common .tribe-common-form-control-slider__input::-ms-track{background-color:transparent;border-color:transparent;border-width:5px 0;color:transparent;height:10px}.tribe-common .tribe-common-form-control-slider__input::-ms-fill-lower,.tribe-common .tribe-common-form-control-slider__input::-ms-fill-upper{background-color:#334aff;border-radius:10px}.tribe-common .tribe-common-form-control-slider__input::-webkit-slider-thumb{background-color:#fff;border:1px solid #7d7d7d;border-radius:50%;box-shadow:0 2px 5px 0 rgba(0,0,0,.14);height:20px;width:20px;margin-top:-5px;-webkit-appearance:none;appearance:none}.tribe-common .tribe-common-form-control-slider__input::-moz-range-thumb{background-color:#fff;border:1px solid #7d7d7d;border-radius:50%;box-shadow:0 2px 5px 0 rgba(0,0,0,.14);height:20px;width:20px;margin-top:-5px}.tribe-common .tribe-common-form-control-slider__input::-ms-thumb{background-color:#fff;border:1px solid #7d7d7d;border-radius:50%;box-shadow:0 2px 5px 0 rgba(0,0,0,.14);height:20px;width:20px;margin-top:-5px;box-shadow:none;margin-top:-1px}.tribe-common .tribe-common-form-control-slider__label{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:12px;line-height:1.38;font-weight:400;color:#5d5d5d}#top .main_color .tribe-common .tribe-common-form-control-slider__label,#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-slider__label{font-weight:400;font-size:12px}.tribe-common .tribe-common-form-control-text__input{font-size:16px;border:0;border-bottom:1px solid #d5d5d5}.tribe-common--breakpoint-medium.tribe-common .tribe-common-form-control-text__input,.tribe-common .tribe-common-form-control-text__input{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;line-height:1.62;font-weight:400}.tribe-common--breakpoint-medium.tribe-common .tribe-common-form-control-text__input{font-size:14px;border:0}.tribe-common .tribe-common-form-control-text__input::-webkit-input-placeholder{color:#5d5d5d;font-style:normal;opacity:1}.tribe-common .tribe-common-form-control-text__input::-moz-placeholder{color:#5d5d5d;font-style:normal;opacity:1}.tribe-common .tribe-common-form-control-text__input:-ms-input-placeholder,.tribe-common .tribe-common-form-control-text__input::-ms-input-placeholder{color:#5d5d5d;font-style:normal;opacity:1}.tribe-common .tribe-common-form-control-text__input::placeholder{color:#5d5d5d;font-style:normal;opacity:1}.tribe-common .tribe-common-form-control-text__input:focus{border-bottom-color:#141827;outline:0}.tribe-theme-twentyseventeen .tribe-common .tribe-common-form-control-text__input{color:#141827}.tribe-theme-twentytwenty .tribe-common .tribe-common-form-control-text__input{line-height:inherit}#top .main_color .tribe-common .tribe-common-form-control-text__input,#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-text__input{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:16px;line-height:1.62;font-weight:400;background:#fff;border:0;border-bottom:1px solid #d5d5d5}#top .main_color .tribe-common .tribe-common-form-control-text__input:focus,#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-text__input:focus{border-bottom-color:#141827;box-shadow:none}#top .main_color .tribe-common.tribe-common--breakpoint-medium .tribe-common-form-control-text__input,#top.tribe-theme-enfold .tribe-common.tribe-common--breakpoint-medium .tribe-common-form-control-text__input{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:14px;line-height:1.62;font-weight:400;border:0}.tribe-common .tribe-common-form-control-toggle{line-height:0;position:relative}.tribe-common .tribe-common-form-control-toggle__input{border:none;border-radius:5px;height:10px;margin:5px 0;padding:0;position:relative;transition:background-color .2s ease;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#7d7d7d;width:40px}.tribe-common .tribe-common-form-control-toggle__input::-ms-check{display:none}.tribe-common .tribe-common-form-control-toggle__input+label:before{background-color:#fff;border:1px solid #7d7d7d;border-radius:50%;box-shadow:0 2px 5px 0 rgba(0,0,0,.14);height:20px;width:20px;content:"";left:0;position:absolute;top:0;transition:transform .2s ease}.tribe-common .tribe-common-form-control-toggle__input:checked{background-color:#334aff}.tribe-common .tribe-common-form-control-toggle__input:checked+label:before{transform:translateX(20px)}.tribe-common .tribe-common-form-control-toggle__label{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:12px;line-height:1.38;font-weight:400;color:#5d5d5d}#top .main_color .tribe-common .tribe-common-form-control-toggle__label,#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-toggle__label{font-weight:400;font-size:12px}.tribe-theme-twentytwenty .tribe-common .tribe-common-form-control-toggle__input{top:0}.tribe-theme-twentytwenty .tribe-common .tribe-common-form-control-toggle__input:checked:before{content:none}.tribe-theme-twentytwentyone .tribe-common .tribe-common-form-control-toggle__input:after{display:none}.tribe-common a,.tribe-common a:active,.tribe-common a:focus,.tribe-common a:hover,.tribe-common a:visited{color:#141827;outline:0;text-decoration:none}.site-footer .widget-area .tribe-common a,.tribe-theme-twentyseventeen .site-footer .widget-area .tribe-common a,.tribe-theme-twentyseventeen .tribe-common a{box-shadow:none}.site-footer .widget-area .tribe-common a:focus,.site-footer .widget-area .tribe-common a:hover,.tribe-theme-twentyseventeen .site-footer .widget-area .tribe-common a:focus,.tribe-theme-twentyseventeen .site-footer .widget-area .tribe-common a:hover,.tribe-theme-twentyseventeen .tribe-common a:focus,.tribe-theme-twentyseventeen .tribe-common a:hover{box-shadow:none;color:#141827}.tribe-theme-twentynineteen .entry .tribe-common a,.tribe-theme-twentynineteen .tribe-common a,.tribe-theme-twentytwentyone .entry .tribe-common a,.tribe-theme-twentytwentyone .tribe-common a{text-decoration:none}.main_color .sidebar .tribe-common a,.main_color .sidebar .tribe-common a:active,.main_color .sidebar .tribe-common a:focus,.main_color .sidebar .tribe-common a:hover,.main_color .sidebar .tribe-common a:visited,.tribe-theme-enfold .tribe-common a,.tribe-theme-enfold .tribe-common a:active,.tribe-theme-enfold .tribe-common a:focus,.tribe-theme-enfold .tribe-common a:hover,.tribe-theme-enfold .tribe-common a:visited{color:#141827}.tribe-common .tribe-common-anchor{border-bottom:2px solid transparent;transition:border-color .2s ease}.tribe-common .tribe-common-anchor:active,.tribe-common .tribe-common-anchor:focus,.tribe-common .tribe-common-anchor:hover{border-bottom:2px solid #141827}.tribe-common .tribe-common-anchor-alt{border-bottom:2px solid #334aff;color:#141827;transition:color .2s ease}.tribe-common .tribe-common-anchor-alt:active,.tribe-common .tribe-common-anchor-alt:focus,.tribe-common .tribe-common-anchor-alt:hover{border-bottom:2px solid #334aff;color:#334aff}.tribe-common .tribe-common-anchor-thin{border-bottom:1px solid transparent;transition:border-color .2s ease}.tribe-common .tribe-common-anchor-thin:active,.tribe-common .tribe-common-anchor-thin:focus,.tribe-common .tribe-common-anchor-thin:hover{border-bottom:1px solid #141827}.tribe-common .tribe-common-anchor-thin-alt{border-bottom:1px solid #334aff;color:#141827;transition:color .2s ease}.tribe-common .tribe-common-anchor-thin-alt:active,.tribe-common .tribe-common-anchor-thin-alt:focus,.tribe-common .tribe-common-anchor-thin-alt:hover{border-bottom:1px solid #334aff;color:#334aff}.tribe-theme-twentyseventeen .tribe-common .tribe-common-anchor-alt:focus,.tribe-theme-twentyseventeen .tribe-common .tribe-common-anchor-alt:hover,.tribe-theme-twentyseventeen .tribe-common .tribe-common-anchor-thin-alt:focus,.tribe-theme-twentyseventeen .tribe-common .tribe-common-anchor-thin-alt:hover{color:#334aff}.site-footer .widget-area .tribe-common .tribe-common-anchor,.site-footer .widget-area .tribe-common .tribe-common-anchor-thin,.tribe-theme-twentyseventeen .site-footer .widget-area .tribe-common .tribe-common-anchor,.tribe-theme-twentyseventeen .site-footer .widget-area .tribe-common .tribe-common-anchor-thin{transition:border-color .2s ease}.site-footer .widget-area .tribe-common .tribe-common-anchor-alt,.site-footer .widget-area .tribe-common .tribe-common-anchor-thin-alt,.tribe-theme-twentyseventeen .site-footer .widget-area .tribe-common .tribe-common-anchor-alt,.tribe-theme-twentyseventeen .site-footer .widget-area .tribe-common .tribe-common-anchor-thin-alt{transition:color .2s ease}.tribe-common .tribe-common-b1{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:14px;font-weight:400;line-height:1.62}.tribe-common--breakpoint-medium.tribe-common .tribe-common-b1{font-size:16px;line-height:1.62}.tribe-common .tribe-common-b1--bold{font-weight:700}.tribe-common .tribe-common-b2{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:12px;font-weight:400;line-height:1.38}.tribe-common--breakpoint-medium.tribe-common .tribe-common-b2{font-size:14px;line-height:1.62}.tribe-common .tribe-common-b2--bold{font-weight:700}.tribe-common .tribe-common-b3{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:11px;font-weight:400;line-height:1.5}.tribe-common--breakpoint-medium.tribe-common .tribe-common-b3{font-size:12px;line-height:1.38}.tribe-common .tribe-common-b3--bold{font-weight:700}.tribe-common--breakpoint-medium.tribe-common .tribe-common-b1--min-medium{font-size:16px;line-height:1.62}.tribe-common--breakpoint-medium.tribe-common .tribe-common-b2--min-medium{font-size:14px;line-height:1.62}.tribe-common--breakpoint-medium.tribe-common .tribe-common-b3--min-medium{font-size:12px;line-height:1.38}.tribe-common .tribe-common-cta{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:12px;line-height:1.38;font-weight:400;font-weight:700;border-bottom:2px solid transparent;transition:border-color .2s ease}.tribe-common .tribe-common-cta:active,.tribe-common .tribe-common-cta:focus,.tribe-common .tribe-common-cta:hover{border-bottom:2px solid #141827}.tribe-common .tribe-common-cta--alt{border-bottom:2px solid #334aff;color:#141827;transition:color .2s ease}.tribe-common .tribe-common-cta--alt:active,.tribe-common .tribe-common-cta--alt:focus,.tribe-common .tribe-common-cta--alt:hover{border-bottom:2px solid #334aff;color:#334aff}.tribe-common .tribe-common-cta--thin{border-bottom:1px solid transparent;transition:border-color .2s ease}.tribe-common .tribe-common-cta--thin:active,.tribe-common .tribe-common-cta--thin:focus,.tribe-common .tribe-common-cta--thin:hover{border-bottom:1px solid #141827}.tribe-common .tribe-common-cta--thin-alt{border-bottom:1px solid #334aff;color:#141827;transition:color .2s ease}.tribe-common .tribe-common-cta--thin-alt:active,.tribe-common .tribe-common-cta--thin-alt:focus,.tribe-common .tribe-common-cta--thin-alt:hover{border-bottom:1px solid #334aff;color:#334aff}.tribe-theme-twentyseventeen .tribe-common .tribe-common-cta--alt:focus,.tribe-theme-twentyseventeen .tribe-common .tribe-common-cta--alt:hover,.tribe-theme-twentyseventeen .tribe-common .tribe-common-cta--thin-alt:focus,.tribe-theme-twentyseventeen .tribe-common .tribe-common-cta--thin-alt:hover{color:#334aff}.tribe-common .tribe-common-h1{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700;font-size:28px;line-height:1.42}.tribe-common--breakpoint-medium.tribe-common .tribe-common-h1{font-size:42px;line-height:1.38}.tribe-common .tribe-common-h2{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700;font-size:24px;line-height:1.42}.tribe-common--breakpoint-medium.tribe-common .tribe-common-h2{font-size:32px;line-height:1.38}.tribe-common .tribe-common-h3{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700;font-size:22px;line-height:1.5}.tribe-common--breakpoint-medium.tribe-common .tribe-common-h3{font-size:28px;line-height:1.42}.tribe-common .tribe-common-h4{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700;font-size:20px;line-height:1.42}.tribe-common--breakpoint-medium.tribe-common .tribe-common-h4{font-size:24px;line-height:1.42}.tribe-common .tribe-common-h5{font-size:18px}.tribe-common .tribe-common-h5,.tribe-common .tribe-common-h6{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700;line-height:1.5}.tribe-common .tribe-common-h6{font-size:16px}.tribe-common--breakpoint-medium.tribe-common .tribe-common-h6{font-size:16px;line-height:1.62}.tribe-common .tribe-common-h7{font-size:14px;line-height:1.62}.tribe-common .tribe-common-h7,.tribe-common .tribe-common-h8{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700}.tribe-common .tribe-common-h8{font-size:12px;line-height:1.38}.tribe-common--breakpoint-medium.tribe-common .tribe-common-h3--min-medium{font-size:28px;line-height:1.42}.tribe-common--breakpoint-medium.tribe-common .tribe-common-h4--min-medium{font-size:24px;line-height:1.42}.tribe-common--breakpoint-medium.tribe-common .tribe-common-h5--min-medium{font-size:18px;line-height:1.5}.tribe-common--breakpoint-medium.tribe-common .tribe-common-h6--min-medium{font-size:16px;line-height:1.62}.tribe-common--breakpoint-medium.tribe-common .tribe-common-h7--min-medium{font-size:14px;line-height:1.62}.tribe-common .tribe-common-h--alt{font-weight:400}.tribe-theme-avada #main .tribe-common .tribe-common-h1{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700;font-size:28px;line-height:1.42}.tribe-theme-avada #main .tribe-common.tribe-common--breakpoint-medium .tribe-common-h1{font-size:42px;line-height:1.38}.tribe-theme-avada #main .tribe-common .tribe-common-h2{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700;font-size:24px;line-height:1.42}.tribe-theme-avada #main .tribe-common.tribe-common--breakpoint-medium .tribe-common-h2{font-size:32px;line-height:1.38}.tribe-theme-avada #main .tribe-common .tribe-common-h3{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700;font-size:22px;line-height:1.5}.tribe-theme-avada #main .tribe-common.tribe-common--breakpoint-medium .tribe-common-h3{font-size:28px;line-height:1.42}.tribe-theme-avada #main .tribe-common .tribe-common-h4{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700;font-size:20px;line-height:1.42}.tribe-theme-avada #main .tribe-common.tribe-common--breakpoint-medium .tribe-common-h4{font-size:24px;line-height:1.42}.tribe-theme-avada #main .tribe-common .tribe-common-h5{font-size:18px}.tribe-theme-avada #main .tribe-common .tribe-common-h5,.tribe-theme-avada #main .tribe-common .tribe-common-h6{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700;line-height:1.5}.tribe-theme-avada #main .tribe-common .tribe-common-h6{font-size:16px}.tribe-theme-avada #main .tribe-common.tribe-common--breakpoint-medium .tribe-common-h6{font-size:16px;line-height:1.62}.tribe-theme-avada #main .tribe-common .tribe-common-h7{font-size:14px;line-height:1.62}.tribe-theme-avada #main .tribe-common .tribe-common-h7,.tribe-theme-avada #main .tribe-common .tribe-common-h8{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700}.tribe-theme-avada #main .tribe-common .tribe-common-h8{font-size:12px;line-height:1.38}.tribe-theme-avada #main .tribe-common.tribe-common--breakpoint-medium .tribe-common-h3--min-medium{font-size:28px;line-height:1.42}.tribe-theme-avada #main .tribe-common.tribe-common--breakpoint-medium .tribe-common-h4--min-medium{font-size:24px;line-height:1.42}.tribe-theme-avada #main .tribe-common.tribe-common--breakpoint-medium .tribe-common-h5--min-medium{font-size:18px;line-height:1.5}.tribe-theme-avada #main .tribe-common.tribe-common--breakpoint-medium .tribe-common-h6--min-medium{font-size:16px;line-height:1.62}.tribe-theme-avada #main .tribe-common.tribe-common--breakpoint-medium .tribe-common-h7--min-medium{font-size:14px;line-height:1.62}.tribe-theme-avada #main .tribe-common .tribe-common-h--alt{font-weight:400}.tribe-common button{border:none}.tribe-common button,.tribe-common button:focus,.tribe-common button:hover,.tribe-theme-twentyseventeen .tribe-common button:focus,.tribe-theme-twentyseventeen .tribe-common button:hover{background-color:transparent}.tribe-theme-twentytwenty .tribe-common button{background-color:transparent;text-transform:inherit}.tribe-theme-twentytwenty .tribe-common button:focus,.tribe-theme-twentytwenty .tribe-common button:hover{text-decoration:none}.tribe-theme-twentytwentyone .tribe-common button:not(:hover):not(:active){background-color:inherit;color:inherit}.tribe-theme-enfold .tribe-common th{letter-spacing:0;text-transform:none}.tribe-common .tribe-common-c-btn-border,.tribe-common a.tribe-common-c-btn-border{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:14px;line-height:1.62;font-weight:400;font-weight:700;border:0;cursor:pointer;display:inline-block;height:auto;padding:0;text-decoration:none;width:auto;background-color:#fff;border:1px solid #334aff;border-radius:4px;text-align:center;transition:all .2s ease;color:#334aff;padding:11px 20px;width:100%}.tribe-common--breakpoint-medium.tribe-common .tribe-common-c-btn-border,.tribe-common--breakpoint-medium.tribe-common a.tribe-common-c-btn-border{width:auto}.tribe-common .tribe-common-c-btn-border:focus,.tribe-common .tribe-common-c-btn-border:hover,.tribe-common a.tribe-common-c-btn-border:focus,.tribe-common a.tribe-common-c-btn-border:hover{color:#fff;background-color:#334aff}.tribe-common .tribe-common-c-btn-border:active,.tribe-common a.tribe-common-c-btn-border:active{opacity:.9}.tribe-common .tribe-common-c-btn-border--secondary,.tribe-common a.tribe-common-c-btn-border--secondary{border-color:#141827;color:#141827}.tribe-common .tribe-common-c-btn-border--secondary:focus,.tribe-common .tribe-common-c-btn-border--secondary:hover,.tribe-common a.tribe-common-c-btn-border--secondary:focus,.tribe-common a.tribe-common-c-btn-border--secondary:hover{background-color:#141827}.tribe-common .tribe-common-c-btn-border--secondary:active,.tribe-common a.tribe-common-c-btn-border--secondary:active{opacity:.9}.tribe-common .tribe-common-c-btn-border--alt,.tribe-common a.tribe-common-c-btn-border--alt{border-color:#e4e4e4;color:#141827;font-weight:400}.tribe-common .tribe-common-c-btn-border--alt:focus,.tribe-common .tribe-common-c-btn-border--alt:hover,.tribe-common a.tribe-common-c-btn-border--alt:focus,.tribe-common a.tribe-common-c-btn-border--alt:hover{border-color:#141827;background-color:#fff;color:#141827}.tribe-common .tribe-common-c-btn-border--alt:active,.tribe-common a.tribe-common-c-btn-border--alt:active{opacity:.9}.tribe-theme-twentyseventeen .tribe-common .tribe-common-c-btn-border:focus,.tribe-theme-twentyseventeen .tribe-common .tribe-common-c-btn-border:hover{background-color:#334aff}.tribe-theme-twentyseventeen .tribe-common .tribe-common-c-btn-border--secondary:focus,.tribe-theme-twentyseventeen .tribe-common .tribe-common-c-btn-border--secondary:hover{background-color:#141827}.tribe-theme-twentyseventeen .tribe-common .tribe-common-c-btn-border--alt:focus,.tribe-theme-twentyseventeen .tribe-common .tribe-common-c-btn-border--alt:hover{background-color:#fff}.tribe-common .tribe-common-c-btn-border-small,.tribe-common a.tribe-common-c-btn-border-small{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:12px;line-height:1.38;font-weight:400;border:0;cursor:pointer;display:inline-block;height:auto;padding:0;text-decoration:none;width:auto;background-color:#fff;border:1px solid #d5d5d5;border-radius:4px;text-align:center;transition:color .2s ease,border-color .2s ease}.tribe-common .tribe-common-c-btn-border-small:focus,.tribe-common .tribe-common-c-btn-border-small:hover,.tribe-common a.tribe-common-c-btn-border-small:focus,.tribe-common a.tribe-common-c-btn-border-small:hover{background-color:#fff}.tribe-common .tribe-common-c-btn-border-small:active,.tribe-common a.tribe-common-c-btn-border-small:active{border-color:#141827}.tribe-common .tribe-common-c-btn-border-small,.tribe-common a.tribe-common-c-btn-border-small{color:#5d5d5d;padding:14px 20px;width:100%}.tribe-common--breakpoint-medium.tribe-common .tribe-common-c-btn-border-small,.tribe-common--breakpoint-medium.tribe-common a.tribe-common-c-btn-border-small{padding:6px 15px;width:auto}.tribe-common .tribe-common-c-btn-border-small:active,.tribe-common .tribe-common-c-btn-border-small:focus,.tribe-common .tribe-common-c-btn-border-small:hover,.tribe-common a.tribe-common-c-btn-border-small:active,.tribe-common a.tribe-common-c-btn-border-small:focus,.tribe-common a.tribe-common-c-btn-border-small:hover{color:#141827}.tribe-common .tribe-common-c-btn-border-small:disabled,.tribe-common a.tribe-common-c-btn-border-small:disabled{color:#d5d5d5}.tribe-theme-twentyseventeen .tribe-common .tribe-common-c-btn-border-small:hover{background-color:#fff}.tribe-common .tribe-common-c-btn-icon{border:0;cursor:pointer;display:inline-block;height:auto;padding:0;text-decoration:none;width:auto}.tribe-common .tribe-common-c-btn-icon--caret-left:active .tribe-common-c-btn-icon__icon-svg path,.tribe-common .tribe-common-c-btn-icon--caret-left:focus .tribe-common-c-btn-icon__icon-svg path,.tribe-common .tribe-common-c-btn-icon--caret-left:hover .tribe-common-c-btn-icon__icon-svg path,.tribe-common .tribe-common-c-btn-icon--caret-right:active .tribe-common-c-btn-icon__icon-svg path,.tribe-common .tribe-common-c-btn-icon--caret-right:focus .tribe-common-c-btn-icon__icon-svg path,.tribe-common .tribe-common-c-btn-icon--caret-right:hover .tribe-common-c-btn-icon__icon-svg path{fill:#5d5d5d}.tribe-common .tribe-common-c-btn-icon--caret-left:disabled .tribe-common-c-btn-icon__icon-svg path,.tribe-common .tribe-common-c-btn-icon--caret-right:disabled .tribe-common-c-btn-icon__icon-svg path{fill:#d5d5d5}.tribe-common .tribe-common-c-btn-icon--caret-left .tribe-common-c-btn-icon__icon-svg path,.tribe-common .tribe-common-c-btn-icon--caret-right .tribe-common-c-btn-icon__icon-svg path{fill:#bababa}.tribe-common .tribe-common-c-btn-icon--border{align-items:center;background-color:#fff;border:1px solid #d5d5d5;display:inline-flex;height:56px;justify-content:center;transition:none;width:56px}.tribe-common .tribe-common-c-btn-icon--border:focus,.tribe-common .tribe-common-c-btn-icon--border:hover{background-color:#fff}.tribe-common .tribe-common-c-btn-icon--border:active{border-color:#141827}.tribe-theme-twentyseventeen .tribe-common .tribe-common-c-btn-icon--border:hover{background-color:#fff}.tribe-common .tribe-common-c-btn,.tribe-common a.tribe-common-c-btn{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:14px;line-height:1.62;font-weight:400;font-weight:700;border:0;cursor:pointer;display:inline-block;height:auto;padding:0;text-decoration:none;width:auto;border-radius:4px;color:#fff;text-align:center;transition:background-color .2s ease;background-color:#334aff;padding:11px 20px;width:100%}.tribe-common--breakpoint-medium.tribe-common .tribe-common-c-btn,.tribe-common--breakpoint-medium.tribe-common a.tribe-common-c-btn{width:auto}.tribe-common .tribe-common-c-btn:focus,.tribe-common .tribe-common-c-btn:hover,.tribe-common a.tribe-common-c-btn:focus,.tribe-common a.tribe-common-c-btn:hover{background-color:rgba(51,74,255,.8)}.tribe-common .tribe-common-c-btn:active,.tribe-common a.tribe-common-c-btn:active{background-color:rgba(51,74,255,.9)}.tribe-common .tribe-common-c-btn:disabled,.tribe-common a.tribe-common-c-btn:disabled{background-color:rgba(51,74,255,.07)}.tribe-theme-twentyseventeen .tribe-common .tribe-common-c-btn:focus,.tribe-theme-twentyseventeen .tribe-common .tribe-common-c-btn:hover{background-color:rgba(51,74,255,.8);color:#fff}.tribe-theme-twentytwenty .tribe-common .tribe-common-c-btn{background-color:#334aff}.tribe-theme-twentytwenty .tribe-common .tribe-common-c-btn:focus,.tribe-theme-twentytwenty .tribe-common .tribe-common-c-btn:hover{background-color:rgba(51,74,255,.8);color:#fff}.tribe-theme-twentytwentyone .tribe-common .tribe-common-c-btn:not(:hover):not(:active){background-color:#334aff;color:#fff}.tribe-common .tribe-common-c-loader__dot circle{animation-name:a;animation-duration:2.24s;animation-iteration-count:infinite;animation-direction:normal;fill:currentColor;opacity:.07}.tribe-common .tribe-common-c-loader__dot--first circle{animation-delay:.45s}.tribe-common .tribe-common-c-loader__dot--second circle{animation-delay:1.05s}.tribe-common .tribe-common-c-loader__dot--third circle{animation-delay:1.35s}@keyframes a{50%{opacity:1}}.tribe-common .tribe-common-c-svgicon{color:#334aff}.tribe-common .tribe-common-c-svgicon--featured path{fill:currentColor}.tribe-common .tribe-common-c-svgicon--recurring path{fill:#141827;stroke:#141827}.tribe-common .tribe-common-c-svgicon--close-alt path,.tribe-common .tribe-common-c-svgicon--close path{stroke:#bababa}.tribe-common .tribe-common-c-svgicon--messages-not-found path{stroke:#141827}.tribe-common .tribe-common-c-svgicon--messages-not-found .tribe-common-c-svgicon__svg-stroke{stroke:currentColor}.tribe-common .tribe-common-c-svgicon__svg-fill{fill:#141827}.tribe-common .tribe-common-c-svgicon__svg-stroke{stroke:#141827}
|
1 |
+
.tribe-common figure{line-height:0}.tribe-common figcaption{line-height:normal}.tribe-common a{background-color:transparent;-webkit-text-decoration-skip:objects}.tribe-common abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.tribe-common code,.tribe-common kbd,.tribe-common pre,.tribe-common samp{font-family:monospace;font-size:1em}.tribe-common b,.tribe-common strong{font-weight:inherit;font-weight:bolder}.tribe-common dfn{font-style:italic}.tribe-common mark{background-color:#ff0;color:#000}.tribe-common small{font-size:80%}.tribe-common sub,.tribe-common sup{font-size:75%;line-height:0}.tribe-common hr{border:0;height:0}.tribe-common button,.tribe-common input[type=button],.tribe-common input[type=email],.tribe-common input[type=password],.tribe-common input[type=reset],.tribe-common input[type=search],.tribe-common input[type=submit],.tribe-common input[type=text],.tribe-common input[type=url],.tribe-common textarea{-webkit-appearance:none;-moz-appearance:none;appearance:none}.tribe-common button,.tribe-common input,.tribe-common optgroup,.tribe-common select,.tribe-common textarea{color:inherit;font:inherit;line-height:normal;-webkit-font-smoothing:antialiased}.tribe-common button,.tribe-common input,.tribe-common select,.tribe-common textarea{outline:0;border-radius:0}.tribe-common select:-moz-focusring{color:transparent;text-shadow:0 0 0 #000}.tribe-common optgroup{font-weight:700}.tribe-common h1,.tribe-common h2,.tribe-common h3,.tribe-common h4,.tribe-common h5,.tribe-common h6,.tribe-common p{font-weight:400;text-rendering:optimizeLegibility}#top .main_color .tribe-common button[disabled],#top.tribe-theme-enfold .tribe-common button[disabled]{opacity:1}.tribe-theme-twentynineteen .tribe-common h1:before,.tribe-theme-twentynineteen .tribe-common h2:before{content:none}.tribe-theme-twentynineteen .tribe-common button,.tribe-theme-twentynineteen .tribe-common input[type=button],.tribe-theme-twentynineteen .tribe-common input[type=reset],.tribe-theme-twentynineteen .tribe-common input[type=submit]{outline:none}.tribe-theme-twentynineteen .tribe-common td,.tribe-theme-twentynineteen .tribe-common th{word-break:normal}.tribe-theme-twentyseventeen .tribe-common h5{letter-spacing:normal;text-transform:none}.tribe-theme-twentyseventeen .tribe-common input[type=text]{border-radius:0}.tribe-theme-twentytwenty .tribe-common{background-color:#fff;letter-spacing:normal}.tribe-theme-twentytwenty .tribe-common input,.tribe-theme-twentytwenty .tribe-common textarea{letter-spacing:normal}.tribe-theme-twentytwenty .tribe-common *{word-break:normal}.tribe-common .tribe-common-form-control-checkbox,.tribe-common .tribe-common-form-control-radio{line-height:0}.tribe-common .tribe-common-form-control-checkbox__label,.tribe-common .tribe-common-form-control-radio__label{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:14px;line-height:1.62;font-weight:400;color:#5d5d5d}.tribe-common .tribe-common-form-control-checkbox__input,.tribe-common .tribe-common-form-control-radio__input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border:1px solid #141827;height:20px;position:relative;width:20px}.tribe-common .tribe-common-form-control-checkbox__input:active,.tribe-common .tribe-common-form-control-checkbox__input:focus,.tribe-common .tribe-common-form-control-checkbox__input:hover,.tribe-common .tribe-common-form-control-radio__input:active,.tribe-common .tribe-common-form-control-radio__input:focus,.tribe-common .tribe-common-form-control-radio__input:hover{border:1px solid #141827}.tribe-common .tribe-common-form-control-checkbox__input:checked,.tribe-common .tribe-common-form-control-radio__input:checked{background-color:#141827}.tribe-common .tribe-common-form-control-checkbox__input:checked:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='9' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M10.6.1L3.9 6.8 1.4 4.3c-.1-.1-.3-.1-.4 0l-.8.8c-.1.1-.1.3 0 .4l3.4 3.4c.2.1.4.1.5 0l7.7-7.7c.1-.1.1-.3 0-.4L11 .1c-.1-.1-.3-.1-.4 0z' fill='%23FFF'/%3E%3C/svg%3E");background-repeat:no-repeat;background-size:contain;content:"";display:block;height:9px;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);width:12px}.tribe-common .tribe-common-form-control-radio__input{border-radius:50%}.tribe-common .tribe-common-form-control-radio__input:checked:before{background-color:#fff;border-radius:50%;content:"";display:block;height:8px;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);width:8px}#top .main_color .tribe-common .tribe-common-form-control-checkbox__label,#top .main_color .tribe-common .tribe-common-form-control-radio__label,#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-checkbox__label,#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-radio__label{font-weight:400;font-size:14px}.tribe-common .tribe-common-form-control-slider{line-height:0}.tribe-common .tribe-common-form-control-slider__input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border:0}.tribe-common .tribe-common-form-control-slider__input::-webkit-slider-runnable-track{border:none;border-radius:5px;height:10px;margin:5px 0;padding:0;position:relative;transition:background-color .2s ease;background-color:#334aff}.tribe-common .tribe-common-form-control-slider__input::-moz-range-track{border:none;border-radius:5px;height:10px;margin:5px 0;padding:0;position:relative;transition:background-color .2s ease;background-color:#334aff}.tribe-common .tribe-common-form-control-slider__input::-ms-track{background-color:transparent;border-color:transparent;border-width:5px 0;color:transparent;height:10px}.tribe-common .tribe-common-form-control-slider__input::-ms-fill-lower,.tribe-common .tribe-common-form-control-slider__input::-ms-fill-upper{background-color:#334aff;border-radius:10px}.tribe-common .tribe-common-form-control-slider__input::-webkit-slider-thumb{background-color:#fff;border:1px solid #d5d5d5;border-radius:50%;box-shadow:0 2px 5px 0 rgba(0,0,0,.14);height:20px;width:20px;margin-top:-5px;-webkit-appearance:none;appearance:none}.tribe-common .tribe-common-form-control-slider__input::-moz-range-thumb{background-color:#fff;border:1px solid #d5d5d5;border-radius:50%;box-shadow:0 2px 5px 0 rgba(0,0,0,.14);height:20px;width:20px;margin-top:-5px}.tribe-common .tribe-common-form-control-slider__input::-ms-thumb{background-color:#fff;border:1px solid #d5d5d5;border-radius:50%;box-shadow:0 2px 5px 0 rgba(0,0,0,.14);height:20px;width:20px;margin-top:-5px;box-shadow:none;margin-top:-1px}.tribe-common .tribe-common-form-control-slider__label{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:12px;line-height:1.38;font-weight:400;color:#5d5d5d}#top .main_color .tribe-common .tribe-common-form-control-slider__label,#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-slider__label{font-weight:400;font-size:12px}.tribe-common .tribe-common-form-control-text__input{font-size:16px;border:0;border-bottom:1px solid #d5d5d5}.tribe-common--breakpoint-medium.tribe-common .tribe-common-form-control-text__input,.tribe-common .tribe-common-form-control-text__input{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;line-height:1.62;font-weight:400}.tribe-common--breakpoint-medium.tribe-common .tribe-common-form-control-text__input{font-size:14px;border:0}.tribe-common .tribe-common-form-control-text__input::-webkit-input-placeholder{color:#5d5d5d;font-style:normal;opacity:1}.tribe-common .tribe-common-form-control-text__input::-moz-placeholder{color:#5d5d5d;font-style:normal;opacity:1}.tribe-common .tribe-common-form-control-text__input:-ms-input-placeholder,.tribe-common .tribe-common-form-control-text__input::-ms-input-placeholder{color:#5d5d5d;font-style:normal;opacity:1}.tribe-common .tribe-common-form-control-text__input::placeholder{color:#5d5d5d;font-style:normal;opacity:1}.tribe-common .tribe-common-form-control-text__input:focus{border-bottom-color:#141827;outline:0}.tribe-theme-twentyseventeen .tribe-common .tribe-common-form-control-text__input{color:#141827}.tribe-theme-twentytwenty .tribe-common .tribe-common-form-control-text__input{line-height:inherit}#top .main_color .tribe-common .tribe-common-form-control-text__input,#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-text__input{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:16px;line-height:1.62;font-weight:400;background:#fff;border:0;border-bottom:1px solid #d5d5d5}#top .main_color .tribe-common .tribe-common-form-control-text__input:focus,#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-text__input:focus{border-bottom-color:#141827;box-shadow:none}#top .main_color .tribe-common.tribe-common--breakpoint-medium .tribe-common-form-control-text__input,#top.tribe-theme-enfold .tribe-common.tribe-common--breakpoint-medium .tribe-common-form-control-text__input{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:14px;line-height:1.62;font-weight:400;border:0}.tribe-common .tribe-common-form-control-toggle{line-height:0}.tribe-common .tribe-common-form-control-toggle__input{border:none;border-radius:5px;height:10px;margin:5px 0;padding:0;position:relative;transition:background-color .2s ease;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#d5d5d5;width:40px}.tribe-common .tribe-common-form-control-toggle__input:after{background-color:#fff;border:1px solid #d5d5d5;border-radius:50%;box-shadow:0 2px 5px 0 rgba(0,0,0,.14);height:20px;width:20px;content:"";left:0;position:absolute;top:-5px;transition:transform .2s ease}.tribe-common .tribe-common-form-control-toggle__input:checked{background-color:#334aff}.tribe-common .tribe-common-form-control-toggle__input:checked:after{transform:translateX(20px)}.tribe-common .tribe-common-form-control-toggle__label{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:12px;line-height:1.38;font-weight:400;color:#5d5d5d}#top .main_color .tribe-common .tribe-common-form-control-toggle__label,#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-toggle__label{font-weight:400;font-size:12px}.tribe-common a,.tribe-common a:active,.tribe-common a:focus,.tribe-common a:hover,.tribe-common a:visited{color:#141827;outline:0;text-decoration:none}.tribe-theme-twentyseventeen .tribe-common a{box-shadow:none}.tribe-theme-twentyseventeen .tribe-common a:focus,.tribe-theme-twentyseventeen .tribe-common a:hover{box-shadow:none;color:#141827}.tribe-theme-twentynineteen .entry .tribe-common a,.tribe-theme-twentynineteen .tribe-common a{text-decoration:none}.tribe-common .tribe-common-anchor{border-bottom:2px solid transparent;transition:border-color .2s ease}.tribe-common .tribe-common-anchor:active,.tribe-common .tribe-common-anchor:focus,.tribe-common .tribe-common-anchor:hover{border-bottom:2px solid #141827}.tribe-common .tribe-common-anchor-alt{border-bottom:2px solid #334aff;color:#141827;transition:color .2s ease}.tribe-common .tribe-common-anchor-alt:active,.tribe-common .tribe-common-anchor-alt:focus,.tribe-common .tribe-common-anchor-alt:hover{border-bottom:2px solid #334aff;color:#334aff}.tribe-common .tribe-common-anchor-thin{border-bottom:1px solid transparent;transition:border-color .2s ease}.tribe-common .tribe-common-anchor-thin:active,.tribe-common .tribe-common-anchor-thin:focus,.tribe-common .tribe-common-anchor-thin:hover{border-bottom:1px solid #141827}.tribe-common .tribe-common-anchor-thin-alt{border-bottom:1px solid #334aff;color:#141827;transition:color .2s ease}.tribe-common .tribe-common-anchor-thin-alt:active,.tribe-common .tribe-common-anchor-thin-alt:focus,.tribe-common .tribe-common-anchor-thin-alt:hover{border-bottom:1px solid #334aff;color:#334aff}.tribe-theme-twentyseventeen .tribe-common .tribe-common-anchor-alt:focus,.tribe-theme-twentyseventeen .tribe-common .tribe-common-anchor-alt:hover,.tribe-theme-twentyseventeen .tribe-common .tribe-common-anchor-thin-alt:focus,.tribe-theme-twentyseventeen .tribe-common .tribe-common-anchor-thin-alt:hover{color:#334aff}.tribe-common .tribe-common-b1{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:14px;font-weight:400;line-height:1.62}.tribe-common--breakpoint-medium.tribe-common .tribe-common-b1{font-size:16px;line-height:1.62}.tribe-common .tribe-common-b1--bold{font-weight:700}.tribe-common .tribe-common-b2{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:12px;font-weight:400;line-height:1.38}.tribe-common--breakpoint-medium.tribe-common .tribe-common-b2{font-size:14px;line-height:1.62}.tribe-common .tribe-common-b2--bold{font-weight:700}.tribe-common .tribe-common-b3{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:11px;font-weight:400;line-height:1.5}.tribe-common--breakpoint-medium.tribe-common .tribe-common-b3{font-size:12px;line-height:1.38}.tribe-common .tribe-common-b3--bold{font-weight:700}.tribe-common--breakpoint-medium.tribe-common .tribe-common-b1--min-medium{font-size:16px;line-height:1.62}.tribe-common--breakpoint-medium.tribe-common .tribe-common-b2--min-medium{font-size:14px;line-height:1.62}.tribe-common--breakpoint-medium.tribe-common .tribe-common-b3--min-medium{font-size:12px;line-height:1.38}.tribe-common .tribe-common-cta{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:12px;line-height:1.38;font-weight:400;font-weight:700;border-bottom:2px solid transparent;transition:border-color .2s ease}.tribe-common .tribe-common-cta:active,.tribe-common .tribe-common-cta:focus,.tribe-common .tribe-common-cta:hover{border-bottom:2px solid #141827}.tribe-common .tribe-common-cta--alt{border-bottom:2px solid #334aff;color:#141827;transition:color .2s ease}.tribe-common .tribe-common-cta--alt:active,.tribe-common .tribe-common-cta--alt:focus,.tribe-common .tribe-common-cta--alt:hover{border-bottom:2px solid #334aff;color:#334aff}.tribe-common .tribe-common-cta--thin{border-bottom:1px solid transparent;transition:border-color .2s ease}.tribe-common .tribe-common-cta--thin:active,.tribe-common .tribe-common-cta--thin:focus,.tribe-common .tribe-common-cta--thin:hover{border-bottom:1px solid #141827}.tribe-common .tribe-common-cta--thin-alt{border-bottom:1px solid #334aff;color:#141827;transition:color .2s ease}.tribe-common .tribe-common-cta--thin-alt:active,.tribe-common .tribe-common-cta--thin-alt:focus,.tribe-common .tribe-common-cta--thin-alt:hover{border-bottom:1px solid #334aff;color:#334aff}.tribe-theme-twentyseventeen .tribe-common .tribe-common-cta--alt:focus,.tribe-theme-twentyseventeen .tribe-common .tribe-common-cta--alt:hover,.tribe-theme-twentyseventeen .tribe-common .tribe-common-cta--thin-alt:focus,.tribe-theme-twentyseventeen .tribe-common .tribe-common-cta--thin-alt:hover{color:#334aff}.tribe-common .tribe-common-h1{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700;font-size:28px;line-height:1.42}.tribe-common--breakpoint-medium.tribe-common .tribe-common-h1{font-size:42px;line-height:1.38}.tribe-common .tribe-common-h2{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700;font-size:24px;line-height:1.42}.tribe-common--breakpoint-medium.tribe-common .tribe-common-h2{font-size:32px;line-height:1.38}.tribe-common .tribe-common-h3{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700;font-size:22px;line-height:1.5}.tribe-common--breakpoint-medium.tribe-common .tribe-common-h3{font-size:28px;line-height:1.42}.tribe-common .tribe-common-h4{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700;font-size:20px;line-height:1.42}.tribe-common--breakpoint-medium.tribe-common .tribe-common-h4{font-size:24px;line-height:1.42}.tribe-common .tribe-common-h5{font-size:18px}.tribe-common .tribe-common-h5,.tribe-common .tribe-common-h6{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700;line-height:1.5}.tribe-common .tribe-common-h6{font-size:16px}.tribe-common--breakpoint-medium.tribe-common .tribe-common-h6{font-size:16px;line-height:1.62}.tribe-common .tribe-common-h7{font-size:14px;line-height:1.62}.tribe-common .tribe-common-h7,.tribe-common .tribe-common-h8{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700}.tribe-common .tribe-common-h8{font-size:12px;line-height:1.38}.tribe-common--breakpoint-medium.tribe-common .tribe-common-h3--min-medium{font-size:28px;line-height:1.42}.tribe-common--breakpoint-medium.tribe-common .tribe-common-h4--min-medium{font-size:24px;line-height:1.42}.tribe-common--breakpoint-medium.tribe-common .tribe-common-h5--min-medium{font-size:18px;line-height:1.5}.tribe-common--breakpoint-medium.tribe-common .tribe-common-h6--min-medium{font-size:16px;line-height:1.62}.tribe-common--breakpoint-medium.tribe-common .tribe-common-h7--min-medium{font-size:14px;line-height:1.62}.tribe-common .tribe-common-h--alt{font-weight:400}.tribe-theme-avada #main .tribe-common .tribe-common-h1{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700;font-size:28px;line-height:1.42}.tribe-theme-avada #main .tribe-common.tribe-common--breakpoint-medium .tribe-common-h1{font-size:42px;line-height:1.38}.tribe-theme-avada #main .tribe-common .tribe-common-h2{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700;font-size:24px;line-height:1.42}.tribe-theme-avada #main .tribe-common.tribe-common--breakpoint-medium .tribe-common-h2{font-size:32px;line-height:1.38}.tribe-theme-avada #main .tribe-common .tribe-common-h3{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700;font-size:22px;line-height:1.5}.tribe-theme-avada #main .tribe-common.tribe-common--breakpoint-medium .tribe-common-h3{font-size:28px;line-height:1.42}.tribe-theme-avada #main .tribe-common .tribe-common-h4{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700;font-size:20px;line-height:1.42}.tribe-theme-avada #main .tribe-common.tribe-common--breakpoint-medium .tribe-common-h4{font-size:24px;line-height:1.42}.tribe-theme-avada #main .tribe-common .tribe-common-h5{font-size:18px}.tribe-theme-avada #main .tribe-common .tribe-common-h5,.tribe-theme-avada #main .tribe-common .tribe-common-h6{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700;line-height:1.5}.tribe-theme-avada #main .tribe-common .tribe-common-h6{font-size:16px}.tribe-theme-avada #main .tribe-common.tribe-common--breakpoint-medium .tribe-common-h6{font-size:16px;line-height:1.62}.tribe-theme-avada #main .tribe-common .tribe-common-h7{font-size:14px;line-height:1.62}.tribe-theme-avada #main .tribe-common .tribe-common-h7,.tribe-theme-avada #main .tribe-common .tribe-common-h8{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700}.tribe-theme-avada #main .tribe-common .tribe-common-h8{font-size:12px;line-height:1.38}.tribe-theme-avada #main .tribe-common.tribe-common--breakpoint-medium .tribe-common-h3--min-medium{font-size:28px;line-height:1.42}.tribe-theme-avada #main .tribe-common.tribe-common--breakpoint-medium .tribe-common-h4--min-medium{font-size:24px;line-height:1.42}.tribe-theme-avada #main .tribe-common.tribe-common--breakpoint-medium .tribe-common-h5--min-medium{font-size:18px;line-height:1.5}.tribe-theme-avada #main .tribe-common.tribe-common--breakpoint-medium .tribe-common-h6--min-medium{font-size:16px;line-height:1.62}.tribe-theme-avada #main .tribe-common.tribe-common--breakpoint-medium .tribe-common-h7--min-medium{font-size:14px;line-height:1.62}.tribe-theme-avada #main .tribe-common .tribe-common-h--alt{font-weight:400}.tribe-common button{border:none}.tribe-common button,.tribe-common button:focus,.tribe-common button:hover,.tribe-theme-twentyseventeen .tribe-common button:focus,.tribe-theme-twentyseventeen .tribe-common button:hover{background-color:transparent}.tribe-theme-twentytwenty .tribe-common button{background-color:transparent;text-transform:inherit}.tribe-theme-twentytwenty .tribe-common button:focus,.tribe-theme-twentytwenty .tribe-common button:hover{text-decoration:none}.tribe-common .tribe-common-svgicon--featured{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='16' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0 0h16v20l-7.902-5.122L0 20z' fill='%23334AFF'/%3E%3C/svg%3E")}.tribe-theme-enfold .tribe-common th{letter-spacing:0;text-transform:none}.tribe-common .tribe-common-c-btn-border,.tribe-common a.tribe-common-c-btn-border{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:12px;line-height:1.38;font-weight:400;border:0;cursor:pointer;display:inline-block;height:auto;padding:0;text-decoration:none;width:auto;background-color:#fff;border:1px solid #d5d5d5;border-radius:4px;text-align:center;transition:color .2s ease,border-color .2s ease;color:#5d5d5d;padding:14px 20px}.tribe-common .tribe-common-c-btn-border:focus,.tribe-common .tribe-common-c-btn-border:hover,.tribe-common a.tribe-common-c-btn-border:focus,.tribe-common a.tribe-common-c-btn-border:hover{background-color:#fff}.tribe-common .tribe-common-c-btn-border:active,.tribe-common a.tribe-common-c-btn-border:active{border-color:#141827}.tribe-common--breakpoint-medium.tribe-common .tribe-common-c-btn-border,.tribe-common--breakpoint-medium.tribe-common a.tribe-common-c-btn-border{padding:6px 15px}.tribe-common .tribe-common-c-btn-border:active,.tribe-common .tribe-common-c-btn-border:focus,.tribe-common .tribe-common-c-btn-border:hover,.tribe-common a.tribe-common-c-btn-border:active,.tribe-common a.tribe-common-c-btn-border:focus,.tribe-common a.tribe-common-c-btn-border:hover{color:#141827}.tribe-common .tribe-common-c-btn-border:disabled,.tribe-common a.tribe-common-c-btn-border:disabled{color:#d5d5d5}.tribe-theme-twentyseventeen .tribe-common .tribe-common-c-btn-border:hover{background-color:#fff}.tribe-common .tribe-common-c-btn-icon{border:0;cursor:pointer;display:inline-block;height:auto;padding:0;text-decoration:none;width:auto}.tribe-common .tribe-common-c-btn-icon--border{background-color:#fff;border:1px solid #d5d5d5;align-items:center;display:inline-flex;height:56px;justify-content:center;transition:none;width:56px}.tribe-common .tribe-common-c-btn-icon--border:focus,.tribe-common .tribe-common-c-btn-icon--border:hover{background-color:#fff}.tribe-common .tribe-common-c-btn-icon--border:active{border-color:#141827}.tribe-theme-twentyseventeen .tribe-common .tribe-common-c-btn-icon--border:hover{background-color:#fff}.tribe-common .tribe-common-c-btn,.tribe-common a.tribe-common-c-btn{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:14px;line-height:1.62;font-weight:400;font-weight:700;border:0;cursor:pointer;display:inline-block;height:auto;padding:0;text-decoration:none;width:auto;border-radius:4px;color:#fff;text-align:center;transition:background-color .2s ease;background-color:#334aff;padding:11px 20px;width:100%}.tribe-common--breakpoint-medium.tribe-common .tribe-common-c-btn,.tribe-common--breakpoint-medium.tribe-common a.tribe-common-c-btn{width:auto}.tribe-common .tribe-common-c-btn:focus,.tribe-common .tribe-common-c-btn:hover,.tribe-common a.tribe-common-c-btn:focus,.tribe-common a.tribe-common-c-btn:hover{background-color:rgba(51,74,255,.8)}.tribe-common .tribe-common-c-btn:active,.tribe-common a.tribe-common-c-btn:active{background-color:rgba(51,74,255,.9)}.tribe-common .tribe-common-c-btn:disabled,.tribe-common a.tribe-common-c-btn:disabled{background-color:rgba(51,74,255,.07)}.tribe-theme-twentyseventeen .tribe-common .tribe-common-c-btn:focus,.tribe-theme-twentyseventeen .tribe-common .tribe-common-c-btn:hover{background-color:rgba(51,74,255,.8);color:#fff}.tribe-theme-twentytwenty .tribe-common .tribe-common-c-btn{background-color:#334aff}.tribe-theme-twentytwenty .tribe-common .tribe-common-c-btn:focus,.tribe-theme-twentytwenty .tribe-common .tribe-common-c-btn:hover{background-color:rgba(51,74,255,.8);color:#fff}.tribe-common .tribe-common-c-loader__dot{animation-name:a;animation-duration:2.24s;animation-iteration-count:infinite;animation-direction:normal}.tribe-common .tribe-common-c-loader__dot--first{animation-delay:.45s}.tribe-common .tribe-common-c-loader__dot--second{animation-delay:1.05s}.tribe-common .tribe-common-c-loader__dot--third{animation-delay:1.35s}@keyframes a{50%{background-color:#334aff}}
|
common/src/resources/css/common-skeleton.min.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.tribe-common{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-smoothing:antialiased}.tribe-common *{box-sizing:border-box}.tribe-common article,.tribe-common aside,.tribe-common details,.tribe-common figcaption,.tribe-common figure,.tribe-common footer,.tribe-common header,.tribe-common main,.tribe-common menu,.tribe-common nav,.tribe-common section,.tribe-common summary{display:block}.tribe-common svg:not(:root){overflow:hidden}.tribe-common audio,.tribe-common canvas,.tribe-common progress,.tribe-common video{display:inline-block}.tribe-common audio:not([controls]){display:none;height:0}.tribe-common progress{vertical-align:baseline}.tribe-common [hidden],.tribe-common template{display:none}.tribe-common pre{overflow:auto}.tribe-common sub,.tribe-common sup{position:relative;vertical-align:baseline}.tribe-common sup{top:-.5em}.tribe-common sub{bottom:-.25em}.tribe-common button,.tribe-common input,.tribe-common select,.tribe-common textarea{box-sizing:border-box;margin:0}.tribe-common input[type=number]::-webkit-inner-spin-button,.tribe-common input[type=number]::-webkit-outer-spin-button{height:auto}.tribe-common legend{color:inherit;display:table;max-width:100%;white-space:normal}.tribe-common textarea{resize:none;overflow:auto}.tribe-common button,.tribe-common input[type=button],.tribe-common input[type=reset],.tribe-common input[type=submit]{cursor:pointer;overflow:visible}.tribe-common button[disabled],.tribe-common input[disabled]{cursor:default}.tribe-common button::-moz-focus-inner,.tribe-common input::-moz-focus-inner{border:0;padding:0}.tribe-common a,.tribe-common abbr,.tribe-common acronym,.tribe-common address,.tribe-common applet,.tribe-common article,.tribe-common aside,.tribe-common audio,.tribe-common b,.tribe-common big,.tribe-common blockquote,.tribe-common canvas,.tribe-common caption,.tribe-common center,.tribe-common cite,.tribe-common code,.tribe-common dd,.tribe-common del,.tribe-common details,.tribe-common dfn,.tribe-common div,.tribe-common dl,.tribe-common dt,.tribe-common em,.tribe-common embed,.tribe-common fieldset,.tribe-common figcaption,.tribe-common figure,.tribe-common footer,.tribe-common form,.tribe-common h1,.tribe-common h2,.tribe-common h3,.tribe-common h4,.tribe-common h5,.tribe-common h6,.tribe-common header,.tribe-common i,.tribe-common iframe,.tribe-common img,.tribe-common ins,.tribe-common kbd,.tribe-common label,.tribe-common legend,.tribe-common li,.tribe-common main,.tribe-common mark,.tribe-common menu,.tribe-common nav,.tribe-common object,.tribe-common ol,.tribe-common output,.tribe-common p,.tribe-common pre,.tribe-common q,.tribe-common ruby,.tribe-common s,.tribe-common samp,.tribe-common section,.tribe-common small,.tribe-common span,.tribe-common strike,.tribe-common strong,.tribe-common sub,.tribe-common summary,.tribe-common sup,.tribe-common table,.tribe-common tbody,.tribe-common td,.tribe-common tfoot,.tribe-common th,.tribe-common thead,.tribe-common time,.tribe-common tr,.tribe-common tt,.tribe-common u,.tribe-common ul,.tribe-common var,.tribe-common video{margin:0;padding:0;border:0}.tribe-common ol,.tribe-common ul{list-style:none}.tribe-common img{-ms-interpolation-mode:bicubic;height:auto;max-width:100%;border-style:none}.tribe-common embed,.tribe-common iframe,.tribe-common video{max-width:100%;max-height:100%}.tribe-theme-avada input[type=text]{margin:0}.tribe-theme-divi .entry-content .tribe-common table,.tribe-theme-divibody.et-pb-preview #main-content .container .tribe-common table{border:0;margin:0}.tribe-theme-divi .entry-content .tribe-common td,.tribe-theme-divibody.et-pb-preview #main-content .container .tribe-common td{border:0}.tribe-theme-divi #content-area .tribe-common td,.tribe-theme-divi #content-area .tribe-common th,.tribe-theme-divi #content-area .tribe-common tr,.tribe-theme-divi #left-area .tribe-common ul{padding:0}#top .main_color .tribe-common button[disabled],#top.tribe-theme-enfold .tribe-common button[disabled]{cursor:default}#top .main_color .tribe-common form,#top .main_color .tribe-common input,#top.tribe-theme-enfold .tribe-common form,#top.tribe-theme-enfold .tribe-common input{margin:0}.entry-content-wrapper .tribe-common li,.entry-content .tribe-common ol,.entry-content .tribe-common ul,.tribe-theme-genesis .tribe-common ol,.tribe-theme-genesis .tribe-common ul{margin:0;padding:0}.tribe-theme-twentynineteen .tribe-common svg{fill:none}.tribe-theme-twentyseventeen .tribe-common div.tribe-dialog{z-index:5!important}.tribe-common .tribe-common-form-control-checkbox,.tribe-common .tribe-common-form-control-radio{display:flex;align-items:flex-start}.tribe-common .tribe-common-form-control-checkbox__label,.tribe-common .tribe-common-form-control-radio__label{cursor:pointer;margin-left:15px}.tribe-common .tribe-common-form-control-checkbox__input,.tribe-common .tribe-common-form-control-radio__input{cursor:pointer;flex:none;margin:1px 0 0}#top .main_color .tribe-common .tribe-common-form-control-checkbox__input,#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-checkbox__input{margin:1px 0 0}.tribe-theme-twentytwenty .tribe-common .tribe-common-form-control-checkbox__input{top:0}.tribe-theme-twentytwentyone .tribe-common .tribe-common-form-control-checkbox__input:checked:after{border:none}.tribe-theme-twentytwentyone .tribe-common .tribe-common-form-control-radio__input:checked:after{background-color:transparent}.tribe-common .tribe-common-form-control-checkbox-radio-group>*{margin-bottom:15px}.tribe-common .tribe-common-form-control-checkbox-radio-group>:last-child{margin-bottom:0}.tribe-common .tribe-common-form-control-slider__input{cursor:pointer;display:inline-block;margin:0;padding:0;width:120px;vertical-align:middle}.tribe-common .tribe-common-form-control-slider__label{cursor:pointer;display:inline-block;margin-left:11px;vertical-align:middle}.tribe-common .tribe-common-form-control-slider--vertical .tribe-common-form-control-slider__label{display:block;margin:0 0 6px}.tribe-common .tribe-common-form-control-text__label{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.tribe-common .tribe-common-form-control-text__input{height:auto;padding:12px 28px 12px 0;width:100%}.tribe-common--breakpoint-medium.tribe-common .tribe-common-form-control-text__input{padding:20px 20px 20px 40px}#top .main_color .tribe-common .tribe-common-form-control-text__input,#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-text__input{padding:12px 28px 12px 0;width:100%}#top .main_color .tribe-common.tribe-common--breakpoint-medium .tribe-common-form-control-text__input,#top.tribe-theme-enfold .tribe-common.tribe-common--breakpoint-medium .tribe-common-form-control-text__input{padding:20px 20px 20px 40px}.tribe-common .tribe-common-form-control-toggle__input,.tribe-common .tribe-common-form-control-toggle__label{cursor:pointer;display:inline-block;vertical-align:middle}.tribe-common .tribe-common-form-control-toggle__label{margin-left:11px}.tribe-common .tribe-common-form-control-toggle--vertical .tribe-common-form-control-toggle__label{display:block;margin:0 0 6px}#top .main_color .tribe-common .tribe-common-form-control-toggle__input,#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-toggle__input{display:inline-block;margin:5px 0}.tribe-common .tribe-common-g-col{min-width:0;width:100%}.tribe-common .tribe-common-g-row{display:flex;flex-wrap:wrap}.tribe-common .tribe-common-g-row--gutters{margin-left:-21px;margin-right:-21px}.tribe-common--breakpoint-medium.tribe-common .tribe-common-g-row--gutters{margin-left:-24px;margin-right:-24px}.tribe-common .tribe-common-g-row--gutters>.tribe-common-g-col{padding-left:21px;padding-right:21px}.tribe-common--breakpoint-medium.tribe-common .tribe-common-g-row--gutters>.tribe-common-g-col{padding-left:24px;padding-right:24px}.tribe-theme-twentynineteen .tribe-common .entry.tribe-common-g-row--gutters{margin-left:-21px;margin-right:-21px;padding:0}.tribe-theme-twentynineteen .tribe-common.tribe-common--breakpoint-medium .entry.tribe-common-g-row--gutters{margin-left:-24px;margin-right:-24px}.tribe-theme-twentynineteen .tribe-common .tribe-common-g-row--gutters>.entry.tribe-common-g-col{margin:0;padding-left:21px;padding-right:21px}.tribe-theme-twentynineteen .tribe-common.tribe-common--breakpoint-medium .tribe-common-g-row--gutters>.entry.tribe-common-g-col{padding-left:24px;padding-right:24px}.tribe-common a{cursor:pointer}.tribe-theme-divi #left-area .tribe-common ul,.tribe-theme-divi .entry-content .tribe-common ul,body.et-pb-preview.tribe-theme-divi #main-content .container .tribe-common ul{list-style-type:none;padding:0}.entry-content .tribe-common ol>li,.entry-content .tribe-common ul>li{list-style-type:none}.tribe-common button{padding:0}.tribe-common .tribe-common-l-container{max-width:1260px;margin-left:auto;margin-right:auto;padding-left:19.5px;padding-right:19.5px;width:100%}.tribe-common--breakpoint-medium.tribe-common .tribe-common-l-container{padding-left:42px;padding-right:42px}.tribe-common .tribe-common-a11y-hidden{display:none!important;visibility:hidden}.tribe-common .tribe-common-a11y-visual-hide{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.tribe-common .tribe-common-a11y-visual-show{clip:auto;height:auto;margin:0;position:static;width:auto}.tribe-common .tribe-common-c-btn-border,.tribe-common a.tribe-common-c-btn-border{padding:11px 20px;width:100%}.tribe-common--breakpoint-medium.tribe-common .tribe-common-c-btn-border,.tribe-common--breakpoint-medium.tribe-common a.tribe-common-c-btn-border{width:auto}.tribe-common .tribe-common-c-btn-border-small,.tribe-common a.tribe-common-c-btn-border-small{padding:14px 20px;width:100%}.tribe-common--breakpoint-medium.tribe-common .tribe-common-c-btn-border-small,.tribe-common--breakpoint-medium.tribe-common a.tribe-common-c-btn-border-small{padding:6px 15px;width:auto}.tribe-common .tribe-common-c-btn-icon:before{background-repeat:no-repeat;background-size:contain;content:"";display:block}.tribe-common .tribe-common-c-btn-icon--caret-left .tribe-common-c-btn-icon__icon-svg,.tribe-common .tribe-common-c-btn-icon--caret-right .tribe-common-c-btn-icon__icon-svg{width:11px}.tribe-common .tribe-common-c-btn-icon--caret-left .tribe-common-c-btn-icon__icon-svg path,.tribe-common .tribe-common-c-btn-icon--caret-right .tribe-common-c-btn-icon__icon-svg path{fill:currentColor}.tribe-common .tribe-common-c-btn,.tribe-common a.tribe-common-c-btn{padding:11px 20px;width:100%}.tribe-common--breakpoint-medium.tribe-common .tribe-common-c-btn,.tribe-common--breakpoint-medium.tribe-common a.tribe-common-c-btn{width:auto}.tribe-common .tribe-common-c-image{display:block;height:auto;margin-left:auto;margin-right:auto;width:100%}.tribe-common .tribe-common-c-image--bg{position:relative}.tribe-common .tribe-common-c-image__bg{background:50% no-repeat;background-size:cover;bottom:0;height:100%;left:0;position:absolute;right:0;top:0;width:100%}.tribe-common .tribe-common-c-loader{display:flex;padding-top:192px}.tribe-common--breakpoint-medium.tribe-common .tribe-common-c-loader{padding-top:288px}.tribe-common .tribe-common-c-loader__dot{width:15px}.tribe-common .tribe-common-c-loader__dot:not(:first-of-type){margin-left:8px}.tribe-common .tribe-common-c-loader__dot circle{fill:currentColor}.tribe-common .tribe-common-c-svgicon--featured{width:8px}.tribe-common .tribe-common-c-svgicon--recurring{width:12px}.tribe-common .tribe-common-c-svgicon--search{width:16px}.tribe-common .tribe-common-c-svgicon--location{width:10px}.tribe-common .tribe-common-c-svgicon--day,.tribe-common .tribe-common-c-svgicon--map,.tribe-common .tribe-common-c-svgicon--month,.tribe-common .tribe-common-c-svgicon--photo,.tribe-common .tribe-common-c-svgicon--week{height:100%;width:100%}.tribe-common .tribe-common-c-svgicon--close-alt path,.tribe-common .tribe-common-c-svgicon--close path{stroke:currentColor}.tribe-common .tribe-common-c-svgicon--hybrid circle,.tribe-common .tribe-common-c-svgicon--mail,.tribe-common .tribe-common-c-svgicon--map-pin,.tribe-common .tribe-common-c-svgicon--messages-not-found g,.tribe-common .tribe-common-c-svgicon--no-map,.tribe-common .tribe-common-c-svgicon--phone,.tribe-common .tribe-common-c-svgicon--virtual g,.tribe-common .tribe-common-c-svgicon--website{fill:none}.tribe-common .tribe-common-c-svgicon--messages-not-found{width:22px}.tribe-common .tribe-common-c-svgicon--messages-not-found path{stroke:currentColor}.tribe-common .tribe-common-c-svgicon--error{width:18px}.tribe-common .tribe-common-c-svgicon--error g,.tribe-common .tribe-common-c-svgicon--reset path{fill:none}.tribe-common .tribe-common-c-svgicon__svg-fill{fill:currentColor}.tribe-common .tribe-common-c-svgicon__svg-stroke{stroke:currentColor}
|
1 |
+
.tribe-common{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-smoothing:antialiased}.tribe-common *{box-sizing:border-box}.tribe-common article,.tribe-common aside,.tribe-common details,.tribe-common figcaption,.tribe-common figure,.tribe-common footer,.tribe-common header,.tribe-common main,.tribe-common menu,.tribe-common nav,.tribe-common section,.tribe-common summary{display:block}.tribe-common svg:not(:root){overflow:hidden}.tribe-common audio,.tribe-common canvas,.tribe-common progress,.tribe-common video{display:inline-block}.tribe-common audio:not([controls]){display:none;height:0}.tribe-common progress{vertical-align:baseline}.tribe-common [hidden],.tribe-common template{display:none}.tribe-common pre{overflow:auto}.tribe-common sub,.tribe-common sup{position:relative;vertical-align:baseline}.tribe-common sup{top:-.5em}.tribe-common sub{bottom:-.25em}.tribe-common button,.tribe-common input,.tribe-common select,.tribe-common textarea{box-sizing:border-box;margin:0}.tribe-common input[type=number]::-webkit-inner-spin-button,.tribe-common input[type=number]::-webkit-outer-spin-button{height:auto}.tribe-common legend{color:inherit;display:table;max-width:100%;white-space:normal}.tribe-common textarea{resize:none;overflow:auto}.tribe-common button,.tribe-common input[type=button],.tribe-common input[type=reset],.tribe-common input[type=submit]{cursor:pointer;overflow:visible}.tribe-common button[disabled],.tribe-common input[disabled]{cursor:default}.tribe-common button::-moz-focus-inner,.tribe-common input::-moz-focus-inner{border:0;padding:0}.tribe-common a,.tribe-common abbr,.tribe-common acronym,.tribe-common address,.tribe-common applet,.tribe-common article,.tribe-common aside,.tribe-common audio,.tribe-common b,.tribe-common big,.tribe-common blockquote,.tribe-common canvas,.tribe-common caption,.tribe-common center,.tribe-common cite,.tribe-common code,.tribe-common dd,.tribe-common del,.tribe-common details,.tribe-common dfn,.tribe-common div,.tribe-common dl,.tribe-common dt,.tribe-common em,.tribe-common embed,.tribe-common fieldset,.tribe-common figcaption,.tribe-common figure,.tribe-common footer,.tribe-common form,.tribe-common h1,.tribe-common h2,.tribe-common h3,.tribe-common h4,.tribe-common h5,.tribe-common h6,.tribe-common header,.tribe-common i,.tribe-common iframe,.tribe-common img,.tribe-common ins,.tribe-common kbd,.tribe-common label,.tribe-common legend,.tribe-common li,.tribe-common main,.tribe-common mark,.tribe-common menu,.tribe-common nav,.tribe-common object,.tribe-common ol,.tribe-common output,.tribe-common p,.tribe-common pre,.tribe-common q,.tribe-common ruby,.tribe-common s,.tribe-common samp,.tribe-common section,.tribe-common small,.tribe-common span,.tribe-common strike,.tribe-common strong,.tribe-common sub,.tribe-common summary,.tribe-common sup,.tribe-common table,.tribe-common tbody,.tribe-common td,.tribe-common tfoot,.tribe-common th,.tribe-common thead,.tribe-common time,.tribe-common tr,.tribe-common tt,.tribe-common u,.tribe-common ul,.tribe-common var,.tribe-common video{margin:0;padding:0;border:0}.tribe-common ol,.tribe-common ul{list-style:none}.tribe-common img{-ms-interpolation-mode:bicubic;height:auto;max-width:100%;border-style:none}.tribe-common embed,.tribe-common iframe,.tribe-common video{max-width:100%;max-height:100%}.tribe-theme-avada input[type=text]{margin:0}.tribe-theme-divi .entry-content .tribe-common table,.tribe-theme-divibody.et-pb-preview #main-content .container .tribe-common table{border:0;margin:0}.tribe-theme-divi .entry-content .tribe-common td,.tribe-theme-divibody.et-pb-preview #main-content .container .tribe-common td{border:0}.tribe-theme-divi #content-area .tribe-common td,.tribe-theme-divi #content-area .tribe-common th,.tribe-theme-divi #content-area .tribe-common tr,.tribe-theme-divi #left-area .tribe-common ul{padding:0}#top .main_color .tribe-common button[disabled],#top.tribe-theme-enfold .tribe-common button[disabled]{cursor:default}#top .main_color .tribe-common form,#top .main_color .tribe-common input,#top.tribe-theme-enfold .tribe-common form,#top.tribe-theme-enfold .tribe-common input{margin:0}.entry-content-wrapper .tribe-common li,.entry-content .tribe-common ol,.entry-content .tribe-common ul,.tribe-theme-genesis .tribe-common ol,.tribe-theme-genesis .tribe-common ul{margin:0;padding:0}.tribe-theme-twentyseventeen .tribe-common div.tribe-dialog{z-index:5!important}.tribe-common .tribe-common-form-control-checkbox__label,.tribe-common .tribe-common-form-control-radio__label{cursor:pointer;display:inline-block;margin-left:11px;vertical-align:middle}.tribe-common .tribe-common-form-control-checkbox__input,.tribe-common .tribe-common-form-control-radio__input{cursor:pointer;display:inline-block;margin:0;vertical-align:middle}#top .main_color .tribe-common .tribe-common-form-control-checkbox__input,#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-checkbox__input{display:inline-block}.tribe-common .tribe-common-form-control-checkbox-radio-group>*{margin-bottom:15px}.tribe-common .tribe-common-form-control-checkbox-radio-group>:last-child{margin-bottom:0}.tribe-common .tribe-common-form-control-slider__input{cursor:pointer;display:inline-block;margin:0;padding:0;width:120px;vertical-align:middle}.tribe-common .tribe-common-form-control-slider__label{cursor:pointer;display:inline-block;margin-left:11px;vertical-align:middle}.tribe-common .tribe-common-form-control-slider--vertical .tribe-common-form-control-slider__label{display:block;margin:0 0 6px}.tribe-common .tribe-common-form-control-text__label{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.tribe-common .tribe-common-form-control-text__input{height:auto;padding:12px 28px 12px 0;width:100%}.tribe-common--breakpoint-medium.tribe-common .tribe-common-form-control-text__input{padding:20px 20px 20px 40px}#top .main_color .tribe-common .tribe-common-form-control-text__input,#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-text__input{padding:12px 28px 12px 0;width:100%}#top .main_color .tribe-common.tribe-common--breakpoint-medium .tribe-common-form-control-text__input,#top.tribe-theme-enfold .tribe-common.tribe-common--breakpoint-medium .tribe-common-form-control-text__input{padding:20px 20px 20px 40px}.tribe-common .tribe-common-form-control-toggle__input,.tribe-common .tribe-common-form-control-toggle__label{cursor:pointer;display:inline-block;vertical-align:middle}.tribe-common .tribe-common-form-control-toggle__label{margin-left:11px}.tribe-common .tribe-common-form-control-toggle--vertical .tribe-common-form-control-toggle__label{display:block;margin:0 0 6px}#top .main_color .tribe-common .tribe-common-form-control-toggle__input,#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-toggle__input{display:inline-block;margin:5px 0}.tribe-common .tribe-common-g-col{min-width:0;width:100%}.tribe-common .tribe-common-g-row{display:flex;flex-wrap:wrap}.tribe-common .tribe-common-g-row--gutters{margin-left:-21px;margin-right:-21px}.tribe-common--breakpoint-medium.tribe-common .tribe-common-g-row--gutters{margin-left:-24px;margin-right:-24px}.tribe-common .tribe-common-g-row--gutters>.tribe-common-g-col{padding-left:21px;padding-right:21px}.tribe-common--breakpoint-medium.tribe-common .tribe-common-g-row--gutters>.tribe-common-g-col{padding-left:24px;padding-right:24px}.tribe-theme-twentynineteen .tribe-common .entry.tribe-common-g-row--gutters{margin-left:-21px;margin-right:-21px;padding:0}.tribe-theme-twentynineteen .tribe-common.tribe-common--breakpoint-medium .entry.tribe-common-g-row--gutters{margin-left:-24px;margin-right:-24px}.tribe-theme-twentynineteen .tribe-common .tribe-common-g-row--gutters>.entry.tribe-common-g-col{margin:0;padding-left:21px;padding-right:21px}.tribe-theme-twentynineteen .tribe-common.tribe-common--breakpoint-medium .tribe-common-g-row--gutters>.entry.tribe-common-g-col{padding-left:24px;padding-right:24px}.tribe-common a{cursor:pointer}.tribe-theme-divi #left-area .tribe-common ul,.tribe-theme-divi .entry-content .tribe-common ul,body.et-pb-preview.tribe-theme-divi #main-content .container .tribe-common ul{list-style-type:none;padding:0}.entry-content .tribe-common ol>li,.entry-content .tribe-common ul>li{list-style-type:none}.tribe-common button{padding:0}.tribe-common .tribe-common-l-container{max-width:1260px;margin-left:auto;margin-right:auto;padding-left:19.5px;padding-right:19.5px;width:100%}.tribe-common--breakpoint-medium.tribe-common .tribe-common-l-container{padding-left:42px;padding-right:42px}.tribe-common .tribe-common-svgicon{background-repeat:no-repeat;background-size:contain}.tribe-common .tribe-common-svgicon--close-secondary{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18'%3E%3Cpath d='M16 2L2 16m14 0L2 2' stroke='%23BABABA' fill='none' fill-rule='evenodd' stroke-linecap='square' stroke-width='2'/%3E%3C/svg%3E")}.tribe-common .tribe-common-svgicon--day{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='21' height='21' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0 .503v19.994c0 .278.19.503.424.503h20.152c.234 0 .424-.225.424-.503V.503C21 .225 20.81 0 20.576 0H.424C.19 0 0 .225 0 .503zm1.156.943h18.66v2.7H1.157v-2.7zm0 4.023h18.66V19.55H1.157V5.469zM14.18 14.53v1.747c0 .482.39.874.873.874H16.8a.873.873 0 0 0 .873-.874V14.53a.873.873 0 0 0-.873-.873h-1.747a.873.873 0 0 0-.873.873z' fill='%23141827'/%3E%3C/svg%3E")}.tribe-common .tribe-common-svgicon--list{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 22 22'%3E%3Cg fill='%23141827' fill-rule='evenodd'%3E%3Cpath fill-rule='nonzero' d='M0 .504v20.03c0 .278.19.503.425.503h20.188c.235 0 .425-.225.425-.504V.503c0-.277-.19-.503-.425-.503H.425C.19 0 0 .226 0 .504zm1.158.944h18.695v2.705H1.158V1.448zm0 2.705h18.695v15.432H1.158V4.153z'/%3E%3Cpath d='M13.39 5.731v2.13a1.07 1.07 0 0 0 1.076 1.064h2.154a1.07 1.07 0 0 0 1.077-1.065V5.731a1.07 1.07 0 0 0-1.077-1.064h-2.154A1.07 1.07 0 0 0 13.39 5.73z'/%3E%3Cpath fill-rule='nonzero' d='M8.84 8.937c.286 0 .52-.236.52-.523v-.425a.523.523 0 0 0-.52-.522H4.02a.523.523 0 0 0-.52.522v.425c0 .287.234.523.52.523h4.82zm2.064-2.8c.287 0 .521-.236.521-.523v-.425a.523.523 0 0 0-.52-.522H4.02a.523.523 0 0 0-.521.522v.425c0 .287.234.523.52.523h6.884z'/%3E%3Cpath d='M13.39 12.731v2.13a1.07 1.07 0 0 0 1.076 1.064h2.154a1.07 1.07 0 0 0 1.077-1.065v-2.129a1.07 1.07 0 0 0-1.077-1.064h-2.154a1.07 1.07 0 0 0-1.077 1.064z'/%3E%3Cpath fill-rule='nonzero' d='M8.84 15.937c.286 0 .52-.236.52-.523v-.425a.523.523 0 0 0-.52-.522H4.02a.523.523 0 0 0-.52.522v.425c0 .287.234.523.52.523h4.82zm2.064-2.8c.287 0 .521-.236.521-.523v-.425a.523.523 0 0 0-.52-.522H4.02a.523.523 0 0 0-.521.522v.425c0 .287.234.523.52.523h6.884z'/%3E%3C/g%3E%3C/svg%3E")}.tribe-common .tribe-common-svgicon--map{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 22 22'%3E%3Cg fill='%23141827' fill-rule='nonzero'%3E%3Cg stroke-width='.7'%3E%3Cpath stroke='%23141827' d='M10.67 17.21c.182-.225 4.46-5.527 4.46-8.18 0-2.728-2.085-4.947-4.648-4.947-2.563 0-4.649 2.22-4.649 4.946 0 2.654 4.279 7.956 4.46 8.18a.243.243 0 0 0 .189.092c.072 0 .14-.034.188-.092zM6.33 9.03c0-2.436 1.863-4.418 4.152-4.418 2.29 0 4.152 1.982 4.152 4.417 0 2.16-3.318 6.533-4.152 7.597C9.648 15.562 6.33 11.19 6.33 9.03z'/%3E%3Cpath stroke='%23000' d='M12.055 9.04c0-.911-.706-1.652-1.573-1.652-.868 0-1.574.74-1.574 1.652 0 .91.706 1.652 1.574 1.652.867 0 1.573-.741 1.573-1.652zm-2.85 0c0-.74.573-1.34 1.277-1.34s1.277.6 1.277 1.34c0 .74-.573 1.34-1.277 1.34s-1.277-.6-1.277-1.34z'/%3E%3C/g%3E%3Cpath d='M0 .504v20.03c0 .278.19.503.425.503h20.188c.235 0 .425-.225.425-.504V.503c0-.277-.19-.503-.425-.503H.425C.19 0 0 .226 0 .504zm1.158.944h18.695v2.705H1.158V1.448zm0 2.705h18.695v15.432H1.158V4.153z'/%3E%3C/g%3E%3C/svg%3E")}.tribe-common .tribe-common-svgicon--month{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='22' height='22' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M.637 1.063v19.879c0 .276.189.5.422.5h20.037c.232 0 .421-.224.421-.5V1.062c0-.275-.189-.5-.421-.5H1.059c-.233 0-.422.225-.422.5zM1.787 2H20.34v2.685H1.787V2zm0 4H20.34v14H1.787V6zM8 8.5v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5zm4 0v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5zm4 0v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5zm-8 4v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5zm4 0v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5zm4 0v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5zm-12 0v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5zm0 4v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5zm4 0v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5zm4 0v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5z' fill='%23141827'/%3E%3C/svg%3E")}.tribe-common .tribe-common-svgicon--no-map{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='92' height='92' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none'%3E%3Cg stroke='%23141827' stroke-width='2.5' transform='translate(2 2)'%3E%3Cpath d='M32.219 88S0 58.674 0 32.281C-.011 15.598 12.685 1.66 29.278.136c16.593-1.523 31.608 9.873 34.627 26.28M32.733 88s2.96-2.693 7.083-7.181' stroke-linecap='round'/%3E%3Ccircle cx='33' cy='33' r='8.905'/%3E%3Ccircle cx='65.127' cy='59.016' r='23.571'/%3E%3C/g%3E%3Cg transform='translate(64.857 47.048)'%3E%3Ccircle fill='%23111' cx='2.839' cy='26.495' r='2.839'/%3E%3Cpath d='M2.642 0v18.925' stroke='%23141827' stroke-width='2.25' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E")}.tribe-common .tribe-common-svgicon--photo{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 21 21'%3E%3Cg fill='%23141827'%3E%3Cpath d='M20.407 0H.577A.565.565 0 0 0 0 .564v19.872c0 .316.254.564.578.564h19.83a.565.565 0 0 0 .577-.564V.564A.565.565 0 0 0 20.407 0zm-.6 1.15v14.868l-2.226-3.427c-.646-.677-1.848-.677-2.495 0l-1.548 1.646-4.482-5.029a1.806 1.806 0 0 0-1.363-.586c-.508 0-1.016.225-1.34.609l-5.175 5.75V1.15h18.628zM1.177 19.85v-3.133l6.053-6.765a.588.588 0 0 1 .462-.203c.162 0 .37.068.485.203l4.921 5.525c.116.113.278.203.44.203.184.022.323-.068.438-.18l1.987-2.12c.185-.203.555-.203.763 0l3.103 4.352v2.14H1.178v-.022z'/%3E%3Cpath d='M14.955 9.041c1.16 0 2.122-.97 2.122-2.187 0-1.218-.94-2.187-2.122-2.187-1.181 0-2.122.97-2.122 2.187 0 1.218.963 2.187 2.122 2.187zm0-3.224c.547 0 1.006.473 1.006 1.037s-.459 1.037-1.006 1.037c-.547 0-1.006-.473-1.006-1.037s.46-1.037 1.006-1.037z'/%3E%3C/g%3E%3C/svg%3E")}.tribe-common .tribe-common-svgicon--week{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='21' height='21' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0 .503v19.994c0 .278.19.503.424.503h20.152c.234 0 .424-.225.424-.503V.503C21 .225 20.81 0 20.576 0H.424C.19 0 0 .225 0 .503zm1.156.943h18.66v2.7H1.157v-2.7zm0 4.023h18.66V19.55H1.157V5.469zm6.25 6.537v1.006c0 .278.224.503.502.503h1.006a.503.503 0 0 0 .503-.503v-1.006a.503.503 0 0 0-.503-.502H7.908a.503.503 0 0 0-.503.502zm4.022 0v1.006c0 .278.225.503.503.503h1.006a.503.503 0 0 0 .503-.503v-1.006a.503.503 0 0 0-.503-.502H11.93a.503.503 0 0 0-.503.502zm4.023 0v1.006c0 .278.225.503.503.503h1.006a.503.503 0 0 0 .503-.503v-1.006a.503.503 0 0 0-.503-.502h-1.006a.503.503 0 0 0-.503.502zm-12.069 0v1.006c0 .278.225.503.503.503h1.006a.503.503 0 0 0 .503-.503v-1.006a.503.503 0 0 0-.503-.502H3.885a.503.503 0 0 0-.503.502z' fill='%23141827'/%3E%3C/svg%3E")}.tribe-common .tribe-common-svgicon--featured{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='16' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0 0h16v20l-7.902-5.122L0 20z' fill='%23141827'/%3E%3C/svg%3E");height:10px;width:8px}.tribe-common .tribe-common-svgicon--recurring{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='20' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M13.333 3.826c0 .065 0 .13-.02.174 0 .022-.02.065-.02.087a.9.9 0 0 1-.197.37L10.45 7.37a.797.797 0 0 1-.592.26.797.797 0 0 1-.593-.26c-.316-.348-.316-.935 0-1.305l1.225-1.348H6.3c-2.547 0-4.64 2.283-4.64 5.11 0 1.369.474 2.651 1.363 3.608.316.348.316.935 0 1.304A.797.797 0 0 1 2.43 15a.797.797 0 0 1-.593-.26C.652 13.434 0 11.695 0 9.847c0-3.826 2.825-6.935 6.301-6.935h4.208L9.284 1.565c-.316-.348-.316-.935 0-1.304.316-.348.85-.348 1.185 0l2.647 2.913a.952.952 0 0 1 .198.37c0 .021.02.065.02.086v.196zM20 10.152c0 3.826-2.825 6.935-6.301 6.935H9.49l1.225 1.348c.336.348.336.935 0 1.304a.797.797 0 0 1-.593.261.83.83 0 0 1-.592-.26l-2.627-2.936a.948.948 0 0 1-.198-.37c0-.021-.02-.064-.02-.086-.02-.065-.02-.109-.02-.174 0-.065 0-.13.02-.174 0-.022.02-.065.02-.087a.9.9 0 0 1 .198-.37L9.55 12.63c.316-.347.849-.347 1.185 0 .336.348.336.935 0 1.305L9.51 15.283h4.208c2.548 0 4.641-2.283 4.641-5.11 0-1.369-.474-2.651-1.362-3.608a.97.97 0 0 1 0-1.304c.316-.348.849-.348 1.185 0C19.348 6.543 20 8.283 20 10.152z' fill='%23141827'/%3E%3C/svg%3E");height:10px;width:10px}.tribe-common .tribe-common-svgicon--search{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='20' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M20 18.711l-6.044-6.044a7.782 7.782 0 0 0 1.688-4.845c0-2.089-.822-4.044-2.288-5.533C11.866.822 9.91 0 7.822 0S3.778.822 2.29 2.289A7.801 7.801 0 0 0 0 7.822c0 2.09.822 4.045 2.289 5.534a7.801 7.801 0 0 0 5.533 2.288c1.778 0 3.467-.6 4.845-1.688L18.71 20 20 18.711zM3.578 12.067c-2.334-2.334-2.334-6.156 0-8.49a5.968 5.968 0 0 1 4.244-1.755c1.6 0 3.111.622 4.245 1.756 2.333 2.333 2.333 6.155 0 8.489a5.968 5.968 0 0 1-4.245 1.755c-1.6 0-3.11-.622-4.244-1.755z' fill='%235D5D5D'/%3E%3C/svg%3E")}.tribe-common .tribe-common-svgicon--filters{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='17' height='17'%3E%3Cg fill='none' fill-rule='evenodd' stroke='%235D5D5D' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' transform='translate(1 1)'%3E%3Cpath d='M3 3V0m0 15v-2'/%3E%3Ccircle cx='3' cy='9' r='3'/%3E%3Cpath d='M12 9v6'/%3E%3Ccircle cx='12' cy='3' r='3' transform='matrix(1 0 0 -1 0 6)'/%3E%3C/g%3E%3C/svg%3E")}.tribe-common .tribe-common-svgicon--close{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18'%3E%3Cpath d='M16 2L2 16m14 0L2 2' stroke='%235D5D5D' fill='none' fill-rule='evenodd' stroke-linecap='square' stroke-width='2'/%3E%3C/svg%3E")}.tribe-common .tribe-common-a11y-hidden{display:none!important;visibility:hidden}.tribe-common .tribe-common-a11y-visual-hide,.tribe-common .tribe-common-a11y-visual-show{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.tribe-common .tribe-common-c-btn-border,.tribe-common a.tribe-common-c-btn-border{padding:14px 20px;width:100%}.tribe-common--breakpoint-medium.tribe-common .tribe-common-c-btn-border,.tribe-common--breakpoint-medium.tribe-common a.tribe-common-c-btn-border{padding:6px 15px;width:auto}.tribe-common .tribe-common-c-btn-icon:before{background-repeat:no-repeat;background-size:contain;content:"";display:block}.tribe-common .tribe-common-c-btn-icon--caret-left:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11.916 17.841L10 19.757l-9.9-9.9L10-.041l1.916 1.916-7.983 7.984z' fill='%23BABABA'/%3E%3C/svg%3E");height:20px;width:12px}.tribe-common .tribe-common-c-btn-icon--caret-left:active:before,.tribe-common .tribe-common-c-btn-icon--caret-left:focus:before,.tribe-common .tribe-common-c-btn-icon--caret-left:hover:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11.916 17.841L10 19.757l-9.9-9.9L10-.041l1.916 1.916-7.983 7.984z' fill='%235D5D5D'/%3E%3C/svg%3E")}.tribe-common .tribe-common-c-btn-icon--caret-left:disabled:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11.916 17.841L10 19.757l-9.9-9.9L10-.041l1.916 1.916-7.983 7.984z' fill='%23D5D5D5'/%3E%3C/svg%3E")}.tribe-common .tribe-common-c-btn-icon--caret-right:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M.084 2.159L2 .243l9.9 9.9L2 20.041.084 18.126l7.983-7.984z' fill='%23BABABA'/%3E%3C/svg%3E");height:20px;width:12px}.tribe-common .tribe-common-c-btn-icon--caret-right:active:before,.tribe-common .tribe-common-c-btn-icon--caret-right:focus:before,.tribe-common .tribe-common-c-btn-icon--caret-right:hover:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M.084 2.159L2 .243l9.9 9.9L2 20.041.084 18.126l7.983-7.984z' fill='%235D5D5D'/%3E%3C/svg%3E")}.tribe-common .tribe-common-c-btn-icon--caret-right:disabled:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M.084 2.159L2 .243l9.9 9.9L2 20.041.084 18.126l7.983-7.984z' fill='%23D5D5D5'/%3E%3C/svg%3E")}.tribe-common .tribe-common-c-btn-icon--filters:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='17' height='17'%3E%3Cg fill='none' fill-rule='evenodd' stroke='%235D5D5D' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' transform='translate(1 1)'%3E%3Cpath d='M3 3V0m0 15v-2'/%3E%3Ccircle cx='3' cy='9' r='3'/%3E%3Cpath d='M12 9v6'/%3E%3Ccircle cx='12' cy='3' r='3' transform='matrix(1 0 0 -1 0 6)'/%3E%3C/g%3E%3C/svg%3E");height:20px;width:24px}.tribe-common .tribe-common-c-btn-icon--filters:active:before,.tribe-common .tribe-common-c-btn-icon--filters:focus:before,.tribe-common .tribe-common-c-btn-icon--filters:hover:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='17' height='17'%3E%3Cg fill='none' fill-rule='evenodd' stroke='%23141827' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' transform='translate(1 1)'%3E%3Cpath d='M3 3V0m0 15v-2'/%3E%3Ccircle cx='3' cy='9' r='3'/%3E%3Cpath d='M12 9v6'/%3E%3Ccircle cx='12' cy='3' r='3' transform='matrix(1 0 0 -1 0 6)'/%3E%3C/g%3E%3C/svg%3E")}.tribe-common .tribe-common-c-btn-icon--filters:disabled:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='17' height='17'%3E%3Cg fill='none' fill-rule='evenodd' stroke='%23D5D5D5' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' transform='translate(1 1)'%3E%3Cpath d='M3 3V0m0 15v-2'/%3E%3Ccircle cx='3' cy='9' r='3'/%3E%3Cpath d='M12 9v6'/%3E%3Ccircle cx='12' cy='3' r='3' transform='matrix(1 0 0 -1 0 6)'/%3E%3C/g%3E%3C/svg%3E")}.tribe-common .tribe-common-c-btn-icon--search:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='20' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M20 18.711l-6.044-6.044a7.782 7.782 0 0 0 1.688-4.845c0-2.089-.822-4.044-2.288-5.533C11.866.822 9.91 0 7.822 0S3.778.822 2.29 2.289A7.801 7.801 0 0 0 0 7.822c0 2.09.822 4.045 2.289 5.534a7.801 7.801 0 0 0 5.533 2.288c1.778 0 3.467-.6 4.845-1.688L18.71 20 20 18.711zM3.578 12.067c-2.334-2.334-2.334-6.156 0-8.49a5.968 5.968 0 0 1 4.244-1.755c1.6 0 3.111.622 4.245 1.756 2.333 2.333 2.333 6.155 0 8.489a5.968 5.968 0 0 1-4.245 1.755c-1.6 0-3.11-.622-4.244-1.755z' fill='%235D5D5D'/%3E%3C/svg%3E");height:20px;width:20px}.tribe-common .tribe-common-c-btn-icon--search:active:before,.tribe-common .tribe-common-c-btn-icon--search:focus:before,.tribe-common .tribe-common-c-btn-icon--search:hover:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='20' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M20 18.711l-6.044-6.044a7.782 7.782 0 0 0 1.688-4.845c0-2.089-.822-4.044-2.288-5.533C11.866.822 9.91 0 7.822 0S3.778.822 2.29 2.289A7.801 7.801 0 0 0 0 7.822c0 2.09.822 4.045 2.289 5.534a7.801 7.801 0 0 0 5.533 2.288c1.778 0 3.467-.6 4.845-1.688L18.71 20 20 18.711zM3.578 12.067c-2.334-2.334-2.334-6.156 0-8.49a5.968 5.968 0 0 1 4.244-1.755c1.6 0 3.111.622 4.245 1.756 2.333 2.333 2.333 6.155 0 8.489a5.968 5.968 0 0 1-4.245 1.755c-1.6 0-3.11-.622-4.244-1.755z' fill='%23141827'/%3E%3C/svg%3E")}.tribe-common .tribe-common-c-btn-icon--search:disabled:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='20' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M20 18.711l-6.044-6.044a7.782 7.782 0 0 0 1.688-4.845c0-2.089-.822-4.044-2.288-5.533C11.866.822 9.91 0 7.822 0S3.778.822 2.29 2.289A7.801 7.801 0 0 0 0 7.822c0 2.09.822 4.045 2.289 5.534a7.801 7.801 0 0 0 5.533 2.288c1.778 0 3.467-.6 4.845-1.688L18.71 20 20 18.711zM3.578 12.067c-2.334-2.334-2.334-6.156 0-8.49a5.968 5.968 0 0 1 4.244-1.755c1.6 0 3.111.622 4.245 1.756 2.333 2.333 2.333 6.155 0 8.489a5.968 5.968 0 0 1-4.245 1.755c-1.6 0-3.11-.622-4.244-1.755z' fill='%23D5D5D5'/%3E%3C/svg%3E")}.tribe-common .tribe-common-c-btn,.tribe-common a.tribe-common-c-btn{padding:11px 20px;width:100%}.tribe-common--breakpoint-medium.tribe-common .tribe-common-c-btn,.tribe-common--breakpoint-medium.tribe-common a.tribe-common-c-btn{width:auto}.tribe-common .tribe-common-c-image{display:block;height:auto;margin-left:auto;margin-right:auto;width:100%}.tribe-common .tribe-common-c-image--bg{position:relative}.tribe-common .tribe-common-c-image__bg{background:50% no-repeat;background-size:cover;bottom:0;height:100%;left:0;position:absolute;right:0;top:0;width:100%}.tribe-common .tribe-common-c-loader{display:flex;padding-top:192px}.tribe-common--breakpoint-medium.tribe-common .tribe-common-c-loader{padding-top:288px}.tribe-common .tribe-common-c-loader__dot{background-color:rgba(51,74,255,.07);height:15px;width:15px;border-radius:50%}.tribe-common .tribe-common-c-loader__dot:not(:first-of-type){margin-left:8px}
|
common/src/resources/css/datatables.min.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
table.dataTable{border-collapse:separate;border-spacing:0;clear:both;margin:0 auto;width:100%}table.dataTable thead td:active,table.dataTable thead th:active{outline:none}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc{cursor:pointer;*cursor:hand}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_asc_disabled,table.dataTable thead .sorting_desc,table.dataTable thead .sorting_desc_disabled{background-position:100%;background-repeat:no-repeat}table.dataTable thead .sorting{background-image:url(../../../vendor/datatables/DataTables-1.10.23/images/sort_both.png)}table.dataTable thead .sorting_asc{background-image:url(../../../vendor/datatables/DataTables-1.10.23/images/sort_asc.png)}table.dataTable thead .sorting_desc{background-image:url(../../../vendor/datatables/DataTables-1.10.23/images/sort_desc.png)}table.dataTable thead .sorting_asc_disabled{background-image:url(../../../vendor/datatables/DataTables-1.10.23/images/sort_asc_disabled.png)}table.dataTable thead .sorting_desc_disabled{background-image:url(../../../vendor/datatables/DataTables-1.10.23/images/sort_desc_disabled.png)}table.dataTable.widefat tfoot td input,table.dataTable.widefat tfoot th input,table.dataTable.widefat thead td input,table.dataTable.widefat thead th input{margin:0 0 0 8px;vertical-align:text-top}table.dataTable.widefat tfoot td.check-column,table.dataTable.widefat thead td.check-column{padding-top:4px;vertical-align:middle}table.dataTable.widefat tbody th.check-column,table.dataTable.widefat tfoot th.check-column,table.dataTable.widefat thead th.check-column{padding:11px 0 0 3px}table.dataTable .check-column{width:2.2em}table.dataTable.display tbody td,table.dataTable.display tbody th,table.dataTable.row-border tbody td,table.dataTable.row-border tbody th{border-top:1px solid #ddd}table.dataTable.display tbody tr:first-child td,table.dataTable.display tbody tr:first-child th,table.dataTable.row-border tbody tr:first-child td,table.dataTable.row-border tbody tr:first-child th{border-top:none}table.dataTable.cell-border tbody td,table.dataTable.cell-border tbody th{border-top:1px solid #ddd;border-right:1px solid #ddd}table.dataTable.cell-border tbody tr td:first-child,table.dataTable.cell-border tbody tr th:first-child{border-left:1px solid #ddd}table.dataTable.cell-border tbody tr:first-child td,table.dataTable.cell-border tbody tr:first-child th{border-top:none}table.dataTable.display tbody tr.odd,table.dataTable.stripe tbody tr.odd{background-color:#f9f9f9}table.dataTable.display tbody tr:hover,table.dataTable.hover tbody tr:hover{background-color:#f6f6f6}table.dataTable.display tbody tr>.sorting_1,table.dataTable.display tbody tr>.sorting_2,table.dataTable.display tbody tr>.sorting_3,table.dataTable.order-column tbody tr>.sorting_1,table.dataTable.order-column tbody tr>.sorting_2,table.dataTable.order-column tbody tr>.sorting_3{background-color:#fafafa}table.dataTable.display tbody tr.odd>.sorting_1,table.dataTable.order-column.stripe tbody tr.odd>.sorting_1{background-color:#f1f1f1}table.dataTable.display tbody tr.odd>.sorting_2,table.dataTable.order-column.stripe tbody tr.odd>.sorting_2{background-color:#f3f3f3}table.dataTable.display tbody tr.odd>.sorting_3,table.dataTable.order-column.stripe tbody tr.odd>.sorting_3{background-color:#f5f5f5}table.dataTable.display tbody tr.even>.sorting_1,table.dataTable.order-column.stripe tbody tr.even>.sorting_1{background-color:#fafafa}table.dataTable.display tbody tr.even>.sorting_2,table.dataTable.order-column.stripe tbody tr.even>.sorting_2{background-color:#fcfcfc}table.dataTable.display tbody tr.even>.sorting_3,table.dataTable.order-column.stripe tbody tr.even>.sorting_3{background-color:#fefefe}table.dataTable.display tbody tr:hover>.sorting_1,table.dataTable.order-column.hover tbody tr:hover>.sorting_1{background-color:#eaeaea}table.dataTable.display tbody tr:hover>.sorting_2,table.dataTable.order-column.hover tbody tr:hover>.sorting_2{background-color:#ececec}table.dataTable.display tbody tr:hover>.sorting_3,table.dataTable.order-column.hover tbody tr:hover>.sorting_3{background-color:#efefef}table.dataTable.no-footer{border-bottom:1px solid #111}table.dataTable.nowrap td,table.dataTable.nowrap th{white-space:nowrap}table.dataTable.compact thead td,table.dataTable.compact thead th{padding:4px 17px 4px 4px}table.dataTable.compact tbody td,table.dataTable.compact tbody th,table.dataTable.compact tfoot td,table.dataTable.compact tfoot th{padding:4px}table.dataTable td.dt-left,table.dataTable th.dt-left{text-align:left}table.dataTable td.dataTables_empty,table.dataTable td.dt-center,table.dataTable th.dt-center{text-align:center}table.dataTable td.dt-right,table.dataTable th.dt-right{text-align:right}table.dataTable td.dt-justify,table.dataTable th.dt-justify{text-align:justify}table.dataTable td.dt-nowrap,table.dataTable th.dt-nowrap{white-space:nowrap}table.dataTable tfoot td.dt-head-left,table.dataTable tfoot th.dt-head-left,table.dataTable thead td.dt-head-left,table.dataTable thead th.dt-head-left{text-align:left}table.dataTable tfoot td.dt-head-center,table.dataTable tfoot th.dt-head-center,table.dataTable thead td.dt-head-center,table.dataTable thead th.dt-head-center{text-align:center}table.dataTable tfoot td.dt-head-right,table.dataTable tfoot th.dt-head-right,table.dataTable thead td.dt-head-right,table.dataTable thead th.dt-head-right{text-align:right}table.dataTable tfoot td.dt-head-justify,table.dataTable tfoot th.dt-head-justify,table.dataTable thead td.dt-head-justify,table.dataTable thead th.dt-head-justify{text-align:justify}table.dataTable tfoot td.dt-head-nowrap,table.dataTable tfoot th.dt-head-nowrap,table.dataTable thead td.dt-head-nowrap,table.dataTable thead th.dt-head-nowrap{white-space:nowrap}table.dataTable tbody td.dt-body-left,table.dataTable tbody th.dt-body-left{text-align:left}table.dataTable tbody td.dt-body-center,table.dataTable tbody th.dt-body-center{text-align:center}table.dataTable tbody td.dt-body-right,table.dataTable tbody th.dt-body-right{text-align:right}table.dataTable tbody td.dt-body-justify,table.dataTable tbody th.dt-body-justify{text-align:justify}table.dataTable tbody td.dt-body-nowrap,table.dataTable tbody th.dt-body-nowrap{white-space:nowrap}table.dataTable,table.dataTable td,table.dataTable th{box-sizing:content-box}.dataTables_wrapper{clear:both;position:relative;zoom:1}.dataTables_wrapper .dataTables_length{float:left}.dataTables_wrapper .dataTables_filter{float:right;text-align:right}.dataTables_wrapper .dataTables_filter input{margin-left:.5em}.dataTables_wrapper .dataTables_info{clear:both;float:left;padding-top:.755em}.dataTables_wrapper .dataTables_paginate{float:right;padding-top:.25em;text-align:right}.dataTables_wrapper .dataTables_paginate .paginate_button{border:1px solid transparent;border-radius:3px;box-shadow:none;box-sizing:border-box;color:#555;cursor:pointer;display:inline-block;font-size:13px;height:28px;line-height:26px;margin:0 0 0 2px;padding:0 10px 1px;text-decoration:none;vertical-align:top;white-space:nowrap}.dataTables_wrapper .dataTables_paginate .paginate_button:active,.dataTables_wrapper .dataTables_paginate .paginate_button:hover{background:#fafafa;border-color:#999;color:#23282d}.dataTables_wrapper .dataTables_paginate .paginate_button.next,.dataTables_wrapper .dataTables_paginate .paginate_button.previous{background:transparent;border-color:transparent;box-shadow:none;color:#23282d}.dataTables_wrapper .dataTables_paginate .paginate_button.next.disabled,.dataTables_wrapper .dataTables_paginate .paginate_button.previous.disabled{background:transparent;border-color:transparent;box-shadow:none}.dataTables_wrapper .dataTables_paginate .paginate_button.next.disabled:hover,.dataTables_wrapper .dataTables_paginate .paginate_button.previous.disabled:hover{background:transparent;border-color:transparent;box-shadow:none;text-decoration:none}.dataTables_wrapper .dataTables_paginate .paginate_button.next:hover,.dataTables_wrapper .dataTables_paginate .paginate_button.previous:hover{color:#222;text-decoration:underline}.dataTables_wrapper .dataTables_paginate .paginate_button.current,.dataTables_wrapper .dataTables_paginate .paginate_button.current:hover{background:#fcfcfc;border-color:#999;box-shadow:0 1px 0 #ccc;color:#23282d;text-decoration:none}.dataTables_wrapper .dataTables_paginate .paginate_button.disabled,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover{background:#f7f7f7;border-color:#ddd;box-shadow:none;color:#a0a5aa;cursor:default;text-shadow:0 1px 0 #fff;transform:none}.dataTables_wrapper .dataTables_paginate .ellipsis{padding:0 1em}.dataTables_wrapper .dataTables_processing{position:absolute;top:50%;left:50%;width:100%;height:40px;margin-left:-50%;margin-top:-25px;padding-top:20px;text-align:center;font-size:1.2em;background-color:#fff;background:linear-gradient(90deg,hsla(0,0%,100%,0) 0,hsla(0,0%,100%,.9) 25%,hsla(0,0%,100%,.9) 75%,hsla(0,0%,100%,0))}.dataTables_wrapper .dataTables_filter,.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_length,.dataTables_wrapper .dataTables_paginate,.dataTables_wrapper .dataTables_processing{color:#333}.dataTables_wrapper .dataTables_scroll{clear:both}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody{*margin-top:-1px;-webkit-overflow-scrolling:touch}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody td,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody th{vertical-align:middle}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody th>div.dataTables_sizing,.dataTables_wrapper .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody td>div.dataTables_sizing{height:0;overflow:hidden;margin:0!important;padding:0!important}.dataTables_wrapper.no-footer .dataTables_scrollBody{border-bottom:1px solid #111}.dataTables_wrapper.no-footer div.dataTables_scrollBody table,.dataTables_wrapper.no-footer div.dataTables_scrollHead table{border-bottom:none}.dataTables_wrapper:after{visibility:hidden;display:block;content:"";clear:both;height:0}@media screen and (max-width:767px){.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_paginate{float:none;text-align:center}.dataTables_wrapper .dataTables_paginate{margin-top:.5em}}@media screen and (max-width:640px){.dataTables_wrapper .dataTables_filter,.dataTables_wrapper .dataTables_length{float:none;text-align:center}.dataTables_wrapper .dataTables_filter{margin-top:.5em}}
|
1 |
+
table.dataTable{border-collapse:separate;border-spacing:0;clear:both;margin:0 auto;width:100%}table.dataTable thead td:active,table.dataTable thead th:active{outline:none}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc{cursor:pointer;*cursor:hand}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_asc_disabled,table.dataTable thead .sorting_desc,table.dataTable thead .sorting_desc_disabled{background-position:100%;background-repeat:no-repeat}table.dataTable thead .sorting{background-image:url(../../../vendor/datatables/DataTables/images/sort_both.png)}table.dataTable thead .sorting_asc{background-image:url(../../../vendor/datatables/DataTables/images/sort_asc.png)}table.dataTable thead .sorting_desc{background-image:url(../../../vendor/datatables/DataTables/images/sort_desc.png)}table.dataTable thead .sorting_asc_disabled{background-image:url(../../../vendor/datatables/DataTables/images/sort_asc_disabled.png)}table.dataTable thead .sorting_desc_disabled{background-image:url(../../../vendor/datatables/DataTables/images/sort_desc_disabled.png)}table.dataTable.widefat tfoot td input,table.dataTable.widefat tfoot th input,table.dataTable.widefat thead td input,table.dataTable.widefat thead th input{margin:0 0 0 8px;vertical-align:text-top}table.dataTable.widefat tfoot td.check-column,table.dataTable.widefat thead td.check-column{padding-top:4px;vertical-align:middle}table.dataTable.widefat tbody th.check-column,table.dataTable.widefat tfoot th.check-column,table.dataTable.widefat thead th.check-column{padding:11px 0 0 3px}table.dataTable .check-column{width:2.2em}table.dataTable.display tbody td,table.dataTable.display tbody th,table.dataTable.row-border tbody td,table.dataTable.row-border tbody th{border-top:1px solid #ddd}table.dataTable.display tbody tr:first-child td,table.dataTable.display tbody tr:first-child th,table.dataTable.row-border tbody tr:first-child td,table.dataTable.row-border tbody tr:first-child th{border-top:none}table.dataTable.cell-border tbody td,table.dataTable.cell-border tbody th{border-top:1px solid #ddd;border-right:1px solid #ddd}table.dataTable.cell-border tbody tr td:first-child,table.dataTable.cell-border tbody tr th:first-child{border-left:1px solid #ddd}table.dataTable.cell-border tbody tr:first-child td,table.dataTable.cell-border tbody tr:first-child th{border-top:none}table.dataTable.display tbody tr.odd,table.dataTable.stripe tbody tr.odd{background-color:#f9f9f9}table.dataTable.display tbody tr:hover,table.dataTable.hover tbody tr:hover{background-color:#f6f6f6}table.dataTable.display tbody tr>.sorting_1,table.dataTable.display tbody tr>.sorting_2,table.dataTable.display tbody tr>.sorting_3,table.dataTable.order-column tbody tr>.sorting_1,table.dataTable.order-column tbody tr>.sorting_2,table.dataTable.order-column tbody tr>.sorting_3{background-color:#fafafa}table.dataTable.display tbody tr.odd>.sorting_1,table.dataTable.order-column.stripe tbody tr.odd>.sorting_1{background-color:#f1f1f1}table.dataTable.display tbody tr.odd>.sorting_2,table.dataTable.order-column.stripe tbody tr.odd>.sorting_2{background-color:#f3f3f3}table.dataTable.display tbody tr.odd>.sorting_3,table.dataTable.order-column.stripe tbody tr.odd>.sorting_3{background-color:#f5f5f5}table.dataTable.display tbody tr.even>.sorting_1,table.dataTable.order-column.stripe tbody tr.even>.sorting_1{background-color:#fafafa}table.dataTable.display tbody tr.even>.sorting_2,table.dataTable.order-column.stripe tbody tr.even>.sorting_2{background-color:#fcfcfc}table.dataTable.display tbody tr.even>.sorting_3,table.dataTable.order-column.stripe tbody tr.even>.sorting_3{background-color:#fefefe}table.dataTable.display tbody tr:hover>.sorting_1,table.dataTable.order-column.hover tbody tr:hover>.sorting_1{background-color:#eaeaea}table.dataTable.display tbody tr:hover>.sorting_2,table.dataTable.order-column.hover tbody tr:hover>.sorting_2{background-color:#ececec}table.dataTable.display tbody tr:hover>.sorting_3,table.dataTable.order-column.hover tbody tr:hover>.sorting_3{background-color:#efefef}table.dataTable.no-footer{border-bottom:1px solid #111}table.dataTable.nowrap td,table.dataTable.nowrap th{white-space:nowrap}table.dataTable.compact thead td,table.dataTable.compact thead th{padding:4px 17px 4px 4px}table.dataTable.compact tbody td,table.dataTable.compact tbody th,table.dataTable.compact tfoot td,table.dataTable.compact tfoot th{padding:4px}table.dataTable td.dt-left,table.dataTable th.dt-left{text-align:left}table.dataTable td.dataTables_empty,table.dataTable td.dt-center,table.dataTable th.dt-center{text-align:center}table.dataTable td.dt-right,table.dataTable th.dt-right{text-align:right}table.dataTable td.dt-justify,table.dataTable th.dt-justify{text-align:justify}table.dataTable td.dt-nowrap,table.dataTable th.dt-nowrap{white-space:nowrap}table.dataTable tfoot td.dt-head-left,table.dataTable tfoot th.dt-head-left,table.dataTable thead td.dt-head-left,table.dataTable thead th.dt-head-left{text-align:left}table.dataTable tfoot td.dt-head-center,table.dataTable tfoot th.dt-head-center,table.dataTable thead td.dt-head-center,table.dataTable thead th.dt-head-center{text-align:center}table.dataTable tfoot td.dt-head-right,table.dataTable tfoot th.dt-head-right,table.dataTable thead td.dt-head-right,table.dataTable thead th.dt-head-right{text-align:right}table.dataTable tfoot td.dt-head-justify,table.dataTable tfoot th.dt-head-justify,table.dataTable thead td.dt-head-justify,table.dataTable thead th.dt-head-justify{text-align:justify}table.dataTable tfoot td.dt-head-nowrap,table.dataTable tfoot th.dt-head-nowrap,table.dataTable thead td.dt-head-nowrap,table.dataTable thead th.dt-head-nowrap{white-space:nowrap}table.dataTable tbody td.dt-body-left,table.dataTable tbody th.dt-body-left{text-align:left}table.dataTable tbody td.dt-body-center,table.dataTable tbody th.dt-body-center{text-align:center}table.dataTable tbody td.dt-body-right,table.dataTable tbody th.dt-body-right{text-align:right}table.dataTable tbody td.dt-body-justify,table.dataTable tbody th.dt-body-justify{text-align:justify}table.dataTable tbody td.dt-body-nowrap,table.dataTable tbody th.dt-body-nowrap{white-space:nowrap}table.dataTable,table.dataTable td,table.dataTable th{box-sizing:content-box}.dataTables_wrapper{clear:both;position:relative;zoom:1}.dataTables_wrapper .dataTables_length{float:left}.dataTables_wrapper .dataTables_filter{float:right;text-align:right}.dataTables_wrapper .dataTables_filter input{margin-left:.5em}.dataTables_wrapper .dataTables_info{clear:both;float:left;padding-top:.755em}.dataTables_wrapper .dataTables_paginate{float:right;padding-top:.25em;text-align:right}.dataTables_wrapper .dataTables_paginate .paginate_button{border:1px solid transparent;border-radius:3px;box-shadow:none;box-sizing:border-box;color:#555;cursor:pointer;display:inline-block;font-size:13px;height:28px;line-height:26px;margin:0 0 0 2px;padding:0 10px 1px;text-decoration:none;vertical-align:top;white-space:nowrap}.dataTables_wrapper .dataTables_paginate .paginate_button:active,.dataTables_wrapper .dataTables_paginate .paginate_button:hover{background:#fafafa;border-color:#999;color:#23282d}.dataTables_wrapper .dataTables_paginate .paginate_button.next,.dataTables_wrapper .dataTables_paginate .paginate_button.previous{background:transparent;border-color:transparent;box-shadow:none;color:#23282d}.dataTables_wrapper .dataTables_paginate .paginate_button.next.disabled,.dataTables_wrapper .dataTables_paginate .paginate_button.previous.disabled{background:transparent;border-color:transparent;box-shadow:none}.dataTables_wrapper .dataTables_paginate .paginate_button.next.disabled:hover,.dataTables_wrapper .dataTables_paginate .paginate_button.previous.disabled:hover{background:transparent;border-color:transparent;box-shadow:none;text-decoration:none}.dataTables_wrapper .dataTables_paginate .paginate_button.next:hover,.dataTables_wrapper .dataTables_paginate .paginate_button.previous:hover{color:#222;text-decoration:underline}.dataTables_wrapper .dataTables_paginate .paginate_button.current,.dataTables_wrapper .dataTables_paginate .paginate_button.current:hover{background:#fcfcfc;border-color:#999;box-shadow:0 1px 0 #ccc;color:#23282d;text-decoration:none}.dataTables_wrapper .dataTables_paginate .paginate_button.disabled,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover{background:#f7f7f7;border-color:#ddd;box-shadow:none;color:#a0a5aa;cursor:default;text-shadow:0 1px 0 #fff;transform:none}.dataTables_wrapper .dataTables_paginate .ellipsis{padding:0 1em}.dataTables_wrapper .dataTables_processing{position:absolute;top:50%;left:50%;width:100%;height:40px;margin-left:-50%;margin-top:-25px;padding-top:20px;text-align:center;font-size:1.2em;background-color:#fff;background:linear-gradient(90deg,hsla(0,0%,100%,0) 0,hsla(0,0%,100%,.9) 25%,hsla(0,0%,100%,.9) 75%,hsla(0,0%,100%,0))}.dataTables_wrapper .dataTables_filter,.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_length,.dataTables_wrapper .dataTables_paginate,.dataTables_wrapper .dataTables_processing{color:#333}.dataTables_wrapper .dataTables_scroll{clear:both}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody{*margin-top:-1px;-webkit-overflow-scrolling:touch}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody td,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody th{vertical-align:middle}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody th>div.dataTables_sizing,.dataTables_wrapper .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody td>div.dataTables_sizing{height:0;overflow:hidden;margin:0!important;padding:0!important}.dataTables_wrapper.no-footer .dataTables_scrollBody{border-bottom:1px solid #111}.dataTables_wrapper.no-footer div.dataTables_scrollBody table,.dataTables_wrapper.no-footer div.dataTables_scrollHead table{border-bottom:none}.dataTables_wrapper:after{visibility:hidden;display:block;content:"";clear:both;height:0}@media screen and (max-width:767px){.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_paginate{float:none;text-align:center}.dataTables_wrapper .dataTables_paginate{margin-top:.5em}}@media screen and (max-width:640px){.dataTables_wrapper .dataTables_filter,.dataTables_wrapper .dataTables_length{float:none;text-align:center}.dataTables_wrapper .dataTables_filter{margin-top:.5em}}
|
common/src/resources/css/dialog.min.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.tribe-common .tribe-dialog{--tribe-dialog-background-color:#fff;--tribe-dialog-close-background:#fff;--tribe-dialog-close-border-color:#bababa;--tribe-dialog-close-border-width:1px;--tribe-dialog-close-color:#bababa;--tribe-dialog-close-height:12px;--tribe-dialog-close-height-desktop:16px;--tribe-dialog-overlay-color:transparent;--tribe-modal-overlay-color:rgba(20,24,39,.9);--tribe-dialog-border-radius:4px;--tribe-dialog-padding:16px;--tribe-dialog-padding-top:24px;--tribe-dialog-padding-side:28px}.tribe-common div.tribe-dialog{align-items:center;display:flex;height:100vh;justify-content:center;left:0;position:fixed;top:0;width:100vw;z-index:1}.tribe-common div.tribe-dialog[aria-hidden=true]{display:none}.tribe-common .tribe-dialog__overlay{background-color:var(--tribe-dialog-overlay-color);height:100vh;left:0;opacity:.9;position:fixed;top:0;width:100vw;z-index:1}.tribe-common .tribe-dialog__wrapper{background-color:var(--tribe-dialog-background-color);border-radius:var(--tribe-dialog-border-radius);box-shadow:0 2px 54px 0 var(--tribe-modal-overlay-color);width:800px;overflow-y:scroll;padding:var(--tribe-dialog-padding);max-height:100vh;max-width:100vw;z-index:2;-webkit-transform:translateZ(0);-webkit-perspective:1000}.tribe-common .tribe-dialog__wrapper div[role=document]{align-items:flex-end;display:flex;flex-flow:column;justify-content:space-between;position:relative}.tribe-common .tribe-dialog__close-button{background:var(--tribe-dialog-close-background);background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18'%3E%3Cpath d='M16 2L2 16m14 0L2 2' stroke='%
|
1 |
+
.tribe-common .tribe-dialog{--tribe-dialog-background-color:#fff;--tribe-dialog-close-background:#fff;--tribe-dialog-close-border-color:#bababa;--tribe-dialog-close-border-width:1px;--tribe-dialog-close-color:#bababa;--tribe-dialog-close-height:12px;--tribe-dialog-close-height-desktop:16px;--tribe-dialog-overlay-color:transparent;--tribe-modal-overlay-color:rgba(20,24,39,.9);--tribe-dialog-border-radius:4px;--tribe-dialog-padding:16px;--tribe-dialog-padding-top:24px;--tribe-dialog-padding-side:28px}.tribe-common div.tribe-dialog{align-items:center;display:flex;height:100vh;justify-content:center;left:0;position:fixed;top:0;width:100vw;z-index:1}.tribe-common div.tribe-dialog[aria-hidden=true]{display:none}.tribe-common .tribe-dialog__overlay{background-color:var(--tribe-dialog-overlay-color);height:100vh;left:0;opacity:.9;position:fixed;top:0;width:100vw;z-index:1}.tribe-common .tribe-dialog__wrapper{background-color:var(--tribe-dialog-background-color);border-radius:var(--tribe-dialog-border-radius);box-shadow:0 2px 54px 0 var(--tribe-modal-overlay-color);width:800px;overflow-y:scroll;padding:var(--tribe-dialog-padding);max-height:100vh;max-width:100vw;z-index:2;-webkit-transform:translateZ(0);-webkit-perspective:1000}.tribe-common .tribe-dialog__wrapper div[role=document]{align-items:flex-end;display:flex;flex-flow:column;justify-content:space-between;position:relative}.tribe-common .tribe-dialog__close-button{background:var(--tribe-dialog-close-background);background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18'%3E%3Cpath d='M16 2L2 16m14 0L2 2' stroke='%23BABABA' fill='none' fill-rule='evenodd' stroke-linecap='square' stroke-width='2'/%3E%3C/svg%3E");background-repeat:no-repeat;background-size:contain;cursor:pointer;display:inline-block;font-size:14px;height:var(--tribe-dialog-close-height);line-height:var(--tribe-dialog-close-height);padding:0;position:absolute;width:var(--tribe-dialog-close-height);z-index:1}.tribe-common .tribe-dialog__close-button:focus,.tribe-common .tribe-dialog__close-button:hover{background:var(--tribe-dialog-close-background);background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18'%3E%3Cpath d='M16 2L2 16m14 0L2 2' stroke='%235D5D5D' fill='none' fill-rule='evenodd' stroke-linecap='square' stroke-width='2'/%3E%3C/svg%3E");background-size:contain;outline:none}.tribe-common .tribe-dialog__close-button--hidden{display:none}.tribe-common .tribe-dialog__close-button--round{border-radius:50%}.tribe-common .tribe-dialog__close-button--border{border:var(--tribe-dialog-close-border-width) solid var(--tribe-dialog-close-border-color)}.tribe-common h2.tribe-dialog__title{align-self:flex-start;margin:0 0 22px;padding-right:calc(var(--tribe-dialog-close-height) + .5em);padding-top:0}.tribe-common .tribe-dialog__content{color:#141827;font-size:14px;line-height:1.64em;padding-right:calc(var(--tribe-dialog-close-height) + .5em);padding-top:calc(var(--tribe-dialog-close-height) + .5em);width:100%}.tribe-common .tribe-dialog__title+.tribe-dialog__content{padding:0}.tribe-common .tribe-modal__overlay{background-color:var(--tribe-modal-overlay-color)}.tribe-common .tribe-confirm__content{padding-right:0}.tribe-common .tribe-dialog__button_wrap{display:flex;flex-flow:row wrap;justify-content:flex-end}#top .main_color .tribe-common div.tribe-dialog,#top.tribe-theme-enfold .tribe-common div.tribe-dialog,.tribe-theme-avada .tribe-common div.tribe-dialog,.tribe-theme-divi .tribe-common div.tribe-dialog{z-index:99999}@media screen and (min-width:768px){.tribe-common .tribe-dialog__wrapper{max-height:calc(100vh - 160px);padding:var(--tribe-dialog-padding-top) var(--tribe-dialog-padding-side)}.tribe-common .tribe-dialog__close-button{height:var(--tribe-dialog-close-height-desktop);line-height:var(--tribe-dialog-close-height-desktop);width:var(--tribe-dialog-close-height-desktop)}}@media screen and (max-width:768px){.tribe-common .tribe-dialog__content:last-of-type{padding-bottom:36px}}
|
common/src/resources/css/tribe-common-admin.min.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.invalid input,input:out-of-range{border:2px solid red!important}.valid input{border:1px solid green}.clearfix{zoom:1}.placeholder{color:#999;cursor:text;padding:4px}input::-moz-placeholder,textarea::-moz-placeholder{color:#999}input:-ms-input-placeholder,input::-ms-input-placeholder,textarea:-ms-input-placeholder,textarea::-ms-input-placeholder{color:#999}input::placeholder,textarea::placeholder{color:#999}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#999}.bubble{background-color:#f9f9f9;border:1px solid #dfdfdf;border-radius:3px;border-spacing:0;padding:10px}.tribe-sticky-tooltip{color:#bbb}td.tribe_message{padding-bottom:10px!important}#tribe_thanks{float:left;margin:5px 0 0;width:200px}.tribe_brand{font-family:Georgia,serif!important;font-size:17px!important;font-weight:400;margin:8px 0}.tribe-rating{color:#3d54ff}.tribe-rating:hover{color:#1c39bb}#tribe-upgrade{background:#f6f6f6;border:1px solid #ccc;border-radius:5px;margin:20px 0 30px;padding:0 20px 20px}#tribe-upgrade .message{background-color:#ffffe0;border:1px solid #e6db55;border-radius:3px;padding:6px 12px}table.plugins .tribe-plugin-update-message{background:#d54e21;color:#fff;display:inline-table;margin:6px 0;padding:10px 12px}table.plugins .tribe-plugin-update-message h4{display:inline;font-weight:700;margin-right:8px}table.plugins .tribe-plugin-update-message h4:after{content:" \00BB "}table.plugins .tribe-plugin-update-message a{color:#fff;text-decoration:underline}.tribe-settings-form{max-width:1000px}.tribe-settings-form fieldset{clear:both;display:inline-block;padding:10px 0}.tribe-settings-form fieldset.tribe-field-license_key legend{width:auto}.tribe-settings-form legend{float:left;font-weight:700;margin-right:20px;width:220px}.tribe-settings-form .tribe-field-wrap{float:left;max-width:500px}.tribe-settings-form .tribe-field-wrap :first-child{margin-top:0}.tribe-settings-form .tribe-field-checkbox_list label,.tribe-settings-form .tribe-field-radio label{display:block;margin:5px 0 5px 20px;text-indent:-20px}.tribe-settings-form .tribe-field-checkbox_list label>p,.tribe-settings-form .tribe-field-radio label>p{text-indent:0;margin-left:1px}.tribe-settings-form .tribe-field-checkbox_list label input,.tribe-settings-form .tribe-field-radio label input{margin-right:5px}.tribe-settings-form .tribe-settings-form-wrap .description,.tribe-settings-form .tribe-settings-form-wrap fieldset,.tribe-settings-form fieldset[id^=tribe-field-geoloc_]{padding-left:12px}.tribe-settings-form .tribe-settings-form-wrap fieldset .description{margin-left:0;max-width:450px;padding-left:0}.tribe-settings-form .tribe-settings-form-wrap fieldset .tribe-style-selection{margin-bottom:18px}.tribe-settings-form .tribe-settings-form-wrap #tribe-field-stylesheetOption .description{color:#999;margin-left:1px}.tribe-settings-form .tribe-settings-form-wrap h3{background-color:#f9f9f9;margin-bottom:10px;padding:6px 0 6px 12px}.tribe-settings-form .tribe-settings-form-wrap .contained,.tribe-settings-form .tribe-settings-form-wrap .system-info,.tribe-settings-form .tribe-settings-form-wrap .tribe-sysinfo-optin-msg,.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 red}.tribe_settings .tribe-field-description{margin-bottom:0;position:relative;top:-12px}.tribe_settings #ical-link{top:-14px}#modern-tribe-info{background-color:#f9f9f9;border:1px solid #ccc;border-radius:4px;margin:20px 0;padding:8px 20px 12px}#modern-tribe-info img{margin:10px 0}#modern-tribe-info ul{list-style:disc;margin-left:20px}#modern-tribe-info ul ul{list-style:circle}.tribe-field-inline-dropdown{margin-left:0;margin-right:0}.tribe-field-inline-text{line-height:28px;margin:0 2px}.tribe-field-textarea.tribe-size-small textarea{height:60px;width:180px}.tribe-field-textarea.tribe-size-medium textarea{height:80px;width:300px}.tribe-field-textarea.tribe-size-large textarea{height:120px;width:450px}.tribe-field-email.tribe-size-small input,.tribe-field-license_key.tribe-size-small input,.tribe-field-text.tribe-size-small input{width:50px}.tribe-field-email.tribe-size-medium input,.tribe-field-license_key.tribe-size-medium input,.tribe-field-text.tribe-size-medium input{width:225px}.tribe-field-email.tribe-size-large input,.tribe-field-license_key.tribe-size-large input,.tribe-field-text.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-wrapped_html.tribe-size-large .tribe-field-wrap{max-width:600px}.tribe-field-wrapped_html.tribe-size-large .tribe-field-wrap .description{max-width:100%}.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}.tribe-field-wrap .tooltip:first-child{font-style:normal}.tribe-field.indent{margin-left:252px;width:75%}.tribe-field.indent legend{font-weight:400;width:auto}.tribe-field.indent .tribe-field-wrap{padding-right:12px}.tribe-field.indent.tribe-field-radio .tribe-field-wrap{clear:left;margin-top:12px}.tribe-field.light-bordered{background-color:#fff;border:1px solid #d3d3d3}.ajax-loading-license,.invalid-key,.valid-key{display:none;margin:0 5px}.ajax-loading-license{position:relative;top:5px}.key-validity{display:inline-block}.invalid-key,.optin-fail{color:red}.optin-success,.valid-key{color:green}.valid-key.service-msg{color:#b72}#additional-field-table{margin-bottom:20px}.tribe-admin-box-left{float:left;width:20%}.tribe-admin-box-left,.tribe-admin-box-right{background-color:#f9f9f9;border:1px solid #ccc;border-radius:4px;margin:20px 0;padding:0 20px 15px}.tribe-admin-box-right{float:right;width:68%}.ajax-loader{float:right;margin:10px}.tribe-arrangeable-item{border:1px solid #d3d3d3;border-radius:3px}.tribe-arrangeable-item .ui-state-default{border:none}.tribe-arrangeable-item-top{padding:6px}.tribe-arrangeable-item-top:hover{cursor:move}.tribe-arrangeable-action{float:right}.tribe-arrangeable-child{background-color:#f9f9f9;border-top:1px solid #d3d3d3;display:none;padding:25px}.tribe-arrangeable-child label{display:block;margin:0 0 7px}.tribe_events_active_filter_type_options{margin:10px 0}.tribe_events_active_filter_type_options label{margin:7px 0}#event_organizer td small,.OrganizerInfo td small{display:block;margin:0;max-width:250px}#event_organizer .organizer-email,.OrganizerInfo .organizer-email{vertical-align:top}.tribe-table-field-label{max-width:100%;width:200px}#tribe-help-general,#tribe-help-sidebar{float:left;margin-top:20px}#tribe-help-general p{margin-left:15px}#tribe-help-general ul{list-style-type:square}#tribe-help-general ol,#tribe-help-general ul{margin-bottom:20px;margin-left:35px}#tribe-help-general h3{background-color:#f9f9f9;margin-bottom:10px;padding:6px 0 6px 12px}#tribe-help-general h3~h3{margin-top:2.25em}#tribe-help-general h3+p{margin:0 0 20px;padding-left:12px}#tribe-help-general{width:65%}.tribe-help-section{padding-bottom:10px}.tribe-section-type-box{background-color:#f9f9f9;border:1px solid #ccc;border-radius:4px;padding:8px 20px 12px}.tribe-section-type-box img{height:auto;margin:10px 0;max-width:300px}.tribe-section-type-box ul{list-style:disc;margin-left:20px}.tribe-section-type-box ul ul{list-style:circle}#tribe-log-controls{padding-bottom:1rem;padding-left:12px}#tribe-log-controls>div{display:inline-block;padding-right:1rem}#tribe-log-controls .working{opacity:1;transition:opacity .2s}#tribe-log-controls .working.hidden{opacity:0;transition:opacity .2s}#tribe-log-viewer,#tribe-system-info dl.support-stats,.template-updates-wrapper{background:#000;border-radius:2px;color:#888;max-height:400px;overflow:scroll;padding:10px}#tribe-system-info dl.support-stats dt,.template-updates-wrapper dt{clear:both;float:left;font-weight:700;text-transform:uppercase;width:25%}#tribe-system-info dl.support-stats dd,.template-updates-wrapper dd{margin-left:25%;padding-left:10px}.system-info-copy .system-info-copy-btn{padding:6px}.system-info-copy .system-info-copy-btn .dashicons{padding-right:10px}.template-updates-wrapper p{margin-top:0}#tribe-help-sidebar{margin:20px 0 0 3%;max-width:225px;width:32%}.tribe-help-plugin-info{border:1px solid #ccc;padding:0 12px 12px}.tribe-help-plugin-info dd,.tribe-help-plugin-info dt{display:inline;margin:0}.tribe-help-plugin-info dt{font-weight:700}.tribe-help-plugin-info dd:after{content:"";display:block;height:.4em}.tribe-help-plugin-info dd:last-child:after{height:0}.tribe-help-plugin-info+.tribe-help-plugin-info{margin-top:20px}.tribe-help-plugin-info>div{line-height:2em}.tribe-help-plugin-info .star-rating{display:inline-block;margin-left:3px;position:relative;top:-2px}.tribe-help-plugin-info .tribe-list-addons{color:#21a6cb;font-size:24px;list-style:circle inside;margin-bottom:10px;margin-top:10px;padding-left:4px}.tribe-help-plugin-info .tribe-list-addons a{font-size:13px;left:-5px;position:relative;top:-5px}.tribe-help-plugin-info .tribe-list-addons .tribe-active-addon{list-style:disc inside}.ui-widget-overlay{background:#666;filter:Alpha(Opacity=50);opacity:.5}.ui-widget-shadow{background:#000;border-radius:5px;filter:Alpha(Opacity=20);margin:-5px 0 0 -5px;opacity:.2;padding:5px}.ui-resizable{position:relative}.ui-resizable-handle{display:block;font-size:.1px;position:absolute;z-index:99999}.ui-resizable-autohide .ui-resizable-handle,.ui-resizable-disabled .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;left:0;top:-5px;width:100%}.ui-resizable-s{bottom:-5px;cursor:s-resize;height:7px;left:0;width:100%}.ui-resizable-e{cursor:e-resize;height:100%;right:-5px;top:0;width:7px}.ui-resizable-w{cursor:w-resize;height:100%;left:-5px;top:0;width:7px}.ui-resizable-se{bottom:1px;cursor:se-resize;height:12px;right:1px;width:12px}.ui-resizable-sw{bottom:-5px;cursor:sw-resize;height:9px;left:-5px;width:9px}.ui-resizable-nw{cursor:nw-resize;height:9px;left:-5px;top:-5px;width:9px}.ui-resizable-ne{cursor:ne-resize;height:9px;right:-5px;top:-5px;width:9px}.ui-dialog{padding:.2em;position:relative;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{height:18px;margin:-10px 0 0;padding:1px;position:absolute;right:.3em;top:50%;width:19px}.ui-dialog .ui-dialog-titlebar-close span{display:block;margin-left:-8px;margin-top:-8px}.ui-dialog .ui-dialog-titlebar-close:focus,.ui-dialog .ui-dialog-titlebar-close:hover{padding:0}.ui-dialog .ui-dialog-content{background:none;border:0;overflow:auto;padding:.5em 1em;zoom:1}.ui-dialog .ui-dialog-buttonpane{background-image:none;border-width:1px 0 0;margin:.5em 0 0;padding:.3em 1em .5em!important;text-align:right}.ui-dialog .ui-dialog-buttonpane button{cursor:pointer;line-height:1.4em;margin:.5em .4em!important;overflow:visible;padding:.2em .6em .3em;text-shadow:none;width:auto}.ui-dialog .ui-resizable-se{bottom:3px;height:14px;right:3px;width:14px}.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-div{display:none}#tribe-loading{background:#fff;background:hsla(0,0%,100%,.8);display:none;height:100%;left:0;position:absolute;top:0;transition:all 1s linear;width:100%;z-index:4}#tribe-loading span{background:url(../images/tribe-loading.gif) 0 0 no-repeat;background-size:32px 32px;height:32px;left:50%;margin:-16px 0 0 -16px;position:absolute;top:50%;width:32px}.tribe_update_page{max-width:850px}.tribe-half-column{float:left;margin-bottom:30px;margin-right:5%;width:45%}.tribe-row:after,.tribe-row:before{content:"";display:table}.tribe-row,.tribe-row:after{clear:both}.tribe-row .tribe-half-column:last-child{margin-right:0;width:50%}.tribe_update_page h2{font-size:30px;line-height:1.2;margin-bottom:20px}.tribe_update_page h3{font-size:24px;font-weight:400;line-height:24px;margin-top:0}.tribe_update_page h4{font-size:18px;font-weight:600;line-height:18px;margin:0}.tribe_update_page p{font-size:15px}p.tribe-update-message{font-size:18px;font-weight:400}.tribe_update_page h4:before{content:"\f145";font-family:dashicons;font-size:34px;line-height:1;margin-right:5px;position:relative;top:5px}a.tribe-rating-link{text-decoration:none}.tribe-update-links{margin-top:30px}.tribe_update_page li:before{content:"\2022";padding-right:3px}.tribe_update_page .rss-widget{margin:1em 0}.tribe_update_page a.rsswidget{font-size:14px;font-weight:400;line-height:1}.tribe_update_page .rss-widget li:before{display:none}.tribe-events-widget-admin-form__input-section p{margin:0}.tribe-events-widget-admin-form__input-section h4{margin:.5em 0}.tribe-update-bar{display:inline-block}.tribe-update-bar .progress{border:1px solid #ccc;float:left;margin-right:1rem;padding:1px;width:18rem}.tribe-update-bar .progress .bar{background:#ffba00;height:1rem;width:1%;background:#7ad03a}#tribe-dialog-wrapper>div{padding:1rem}#tribe-dialog-wrapper>div .stage{display:none}#tribe-dialog-wrapper #heading{background:#fff}#tribe-dialog-wrapper label{display:block}#tribe-dialog-wrapper .select-single-container{border:1px solid #888;overflow-y:scroll;height:300px}#tribe-dialog-wrapper .select-single-container label{opacity:1;padding:3px 5px;transition:opacity .2s}#tribe-dialog-wrapper .select-single-container label:nth-child(odd){background:#fff}#tribe-dialog-wrapper .select-single-container label.selected{background:#0073aa;color:#fff;font-weight:700}#tribe-dialog-wrapper .select-single-container label input{display:none}#tribe-dialog-wrapper .select-single-container.updating label{opacity:.35;transition:opacity .2s}.ui-front{z-index:1000000}.wp-list-table.plugins .column-description .update-message{color:#d54e21}.api-check{padding:1em;min-height:100px}.api-check+.notice-dismiss:hover:before{color:#fff}.api-check:after,.api-check:before{content:"";display:table}.api-check:after{clear:both}.api-check .tribe-mascot{bottom:0;display:none;padding:0 1rem 0 0;position:absolute;right:0;top:0}.api-check .tribe-mascot img{display:inline-block;max-height:150px;max-width:150px;height:100%;width:auto;vertical-align:middle}.api-check p{line-height:1.7;margin-bottom:1em}.api-check a{text-decoration:none}.api-check a:hover{text-decoration:underline}.api-check .plugin-list{display:inline;font-weight:600;margin:0;padding:0}.api-check .plugin-list span.plugin-invalid:after{content:", "}.api-check .plugin-list span.plugin-invalid:last-of-type:after{content:""}.tribe-marketing-notice{padding:1em}.tribe-marketing-notice+.notice-dismiss:hover:before{color:#fff}.tribe-marketing-notice:after,.tribe-marketing-notice:before{content:"";display:table}.tribe-marketing-notice:after{clear:both}.tribe-marketing-notice .tribe-marketing-notice__icon{display:none;flex-shrink:0;padding:0;position:static}.tribe-marketing-notice .tribe-marketing-notice__icon img{display:inline-block;max-height:100%;max-width:none;vertical-align:middle;width:100%}.tribe-marketing-notice h3{margin-bottom:.5em;margin-top:.5em}.tribe-marketing-notice p{line-height:1.7;margin-bottom:.5em}.tribe-marketing-notice a{text-decoration:none}.tribe-marketing-notice a:hover{text-decoration:underline}#wpcontent .notice-tribe-banner{align-items:center;background:#161b7d;border:0;box-shadow:none;display:flex;justify-content:flex-start;margin:0 0 16px;padding-right:0}.notice-tribe-banner .tribe-marketing-notice__icon{width:47px}.notice-tribe-banner .tribe-marketing-notice__content{margin-left:0;padding:1em 0}.notice-tribe-banner h3{color:#fff;display:block;font-size:.875rem;line-height:1.25;margin:0 0 .25rem}.notice-tribe-banner a{border-bottom:1px solid #fff;line-height:1.25;margin:0;text-decoration:none}.notice-tribe-banner a:hover{text-decoration:none}.notice-tribe-banner a,.notice-tribe-banner p{color:#fff;display:inline-block;font-size:.875rem;line-height:1.25}.notice-tribe-banner p{display:inline-block;margin:0;padding:0}.notice-tribe-banner .tribe-marketing-notice{align-items:center;display:flex;justify-content:flex-start;margin:0 auto;min-height:65px;padding:0 .75rem;width:100%}.events_page_tribe-app-shop .notice-tribe-banner .tribe-marketing-notice,.tribe-welcome .notice-tribe-banner .tribe-marketing-notice,.tribe_events_page_tribe-app-shop .notice-tribe-banner .tribe-marketing-notice{max-width:100%}.notice-tribe-banner .notice-dismiss{position:static}.notice-tribe-banner .notice-dismiss:before{color:#eaf1ff}.tribe-dropdown,.tribe-ea-dropdown{max-width:100%;width:auto}.tribe-dropdown.select2-container .selection,.tribe-ea-dropdown.select2-container .selection{margin-top:inherit}.tribe-dropdown .select2-selection--single,.tribe-ea-dropdown .select2-selection--single{height:32px}.tribe-dropdown .select2-selection--single .select2-selection__clear,.tribe-ea-dropdown .select2-selection--single .select2-selection__clear{line-height:28px}.tribe-dropdown .select2-selection--single .select2-selection__rendered,.tribe-ea-dropdown .select2-selection--single .select2-selection__rendered{line-height:32px;padding-right:28px}.tribe-dropdown.select2-container--focus .select2-selection--single,.tribe-ea-dropdown.select2-container--focus .select2-selection--single{border-color:#5897fb;box-shadow:0 0 5px rgba(0,0,0,.1)}.tribe-dropdown.select2-container--open .select2-search__field,.tribe-ea-dropdown.select2-container--open .select2-search__field{padding:0}.tribe-dropdown.select2-container--open .select2-dropdown--below,.tribe-ea-dropdown.select2-container--open .select2-dropdown--below{margin-top:-1px;border-top:1px solid #aaa}.tribe-dropdown.select2-container--open .select2-dropdown--above,.tribe-ea-dropdown.select2-container--open .select2-dropdown--above{margin-bottom:-16px;border-bottom:1px solid #aaa}.tribe-dropdown.select2-container--open .select2-selection--single,.tribe-ea-dropdown.select2-container--open .select2-selection--single{border-bottom-left-radius:0;border-bottom-right-radius:0;border-color:#aaa}.tribe-dropdown.select2-container--open .select2-selection__arrow b,.tribe-ea-dropdown.select2-container--open .select2-selection__arrow b{transform:rotate(180deg)}.tribe-dropdown.select2-selection--single,.tribe-ea-dropdown.select2-selection--single{background-image:none;border-radius:3px;border:1px solid #ccc;overflow:hidden}.tribe-dropdown.select2-selection--single>.select2-selection__rendered,.tribe-ea-dropdown.select2-selection--single>.select2-selection__rendered{white-space:normal}.tribe-dropdown.select2-selection--single .select2-selection__arrow,.tribe-ea-dropdown.select2-selection--single .select2-selection__arrow{background-image:none;background:transparent;border-left:0;top:2px;width:26px}.tribe-dropdown.select2-selection--single .select2-selection__arrow b,.tribe-ea-dropdown.select2-selection--single .select2-selection__arrow b{background:#fff url("data:image/svg+xml;charset=US-ASCII,%3Csvg%20width%3D%2220%22%20height%3D%2220%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M5%206l5%205%205-5%202%201-7%207-7-7%202-1z%22%20fill%3D%22%23555%22%2F%3E%3C%2Fsvg%3E") no-repeat right 5px top 55%;background-size:auto;background-size:16px 16px;border:0;top:0;bottom:0;left:0;right:0;display:block;width:auto;height:auto;margin:0;padding:0}.tribe-dropdown .select2-selection--multiple .select2-selection__rendered,.tribe-ea-dropdown .select2-selection--multiple .select2-selection__rendered{background-image:none;border-radius:3px;border:1px solid #ccc;min-height:25px}.tribe-dropdown .select2-selection--multiple .select2-selection__rendered .select2-search--inline,.tribe-ea-dropdown .select2-selection--multiple .select2-selection__rendered .select2-search--inline{line-height:25px}.tribe-dropdown .select2-selection--multiple .select2-selection__rendered .select2-search--inline input,.tribe-ea-dropdown .select2-selection--multiple .select2-selection__rendered .select2-search--inline input{padding-top:0;padding-bottom:0}.tribe-dropdown .select2-selection--multiple .select2-selection__rendered .select2-selection__choice,.tribe-ea-dropdown .select2-selection--multiple .select2-selection__rendered .select2-selection__choice{margin-top:2px;padding-top:0;padding-bottom:0;line-height:19px}.tribe-dropdown .select2-selection--multiple .select2-selection__rendered .select2-selection__choice div,.tribe-ea-dropdown .select2-selection--multiple .select2-selection__rendered .select2-selection__choice div{line-height:inherit}.tribe-dropdown .select2-selection--multiple .select2-selection__rendered .select2-selection__choice__remove,.tribe-ea-dropdown .select2-selection--multiple .select2-selection__rendered .select2-selection__choice__remove{top:3px;left:4px;transition-property:border,color}.select2-results .select2-results__option{color:#939393;font-weight:400;margin-bottom:0}.select2-results .select2-results__option[aria-disabled=true]{background-color:#e0e0e0}.select2-results.select2-results__option--highlighted{background-color:#efefef;color:#a1a1a1;cursor:default;display:block}.wp-core-ui .button-red{background-color:#a00;border-bottom-color:#8d1f21;border-color:#9b2124;box-shadow:inset 0 1px 0 rgba(120,200,230,.5);color:#fff;text-decoration:none;text-shadow:0 1px 0 rgba(0,0,0,.1)}.wp-core-ui .button-red.focus,.wp-core-ui .button-red.hover,.wp-core-ui .button-red:focus,.wp-core-ui .button-red:hover{background-color:#a00;border-color:#7f1c1f;box-shadow:inset 0 1px 0 rgba(120,200,230,.6);color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.3)}.wp-core-ui .button-red.focus,.wp-core-ui .button-red:focus{border-color:#500f0e;box-shadow:inset 0 1px 0 rgba(120,200,230,.6),1px 1px 2px rgba(0,0,0,.4)}.wp-core-ui .button-red.active,.wp-core-ui .button-red.active:focus,.wp-core-ui .button-red.active:hover,.wp-core-ui .button-red:active{background:#7f1c1f;border-color:#601312 #ae2426 #ae2426;box-shadow:inset 0 1px 0 rgba(0,0,0,.1);color:hsla(0,0%,100%,.95);text-shadow:0 1px 0 rgba(0,0,0,.1)}.wp-core-ui .button-red-disabled,.wp-core-ui .button-red:disabled,.wp-core-ui .button-red[disabled]{color:#e79496!important;background:#ba292b!important;border-color:#7f1c1f!important;box-shadow:none!important;text-shadow:0 -1px 0 rgba(0,0,0,.1)!important;cursor:default}.ticket_form .select2-container .select2-selection--single .select2-selection__arrow{display:none}.clear{zoom:1}.clear:after,.clear:before{content:" ";display:table}.clear:after{clear:both}.checkmark:after{content:"";display:block;width:8px;height:15px;border:solid #0ab152;border-width:0 3px 3px 0;transform:rotate(45deg)}.checkmark.checkmark-right:after{float:right;margin-right:2em}.checkmark.checkmark-left:after{float:left;margin-left:2em}.checkmark.no-checkmark:after{display:none}.complete,.ok,.on,.yes,[data-status=complete],[data-status=ok],[data-status=on],[data-status=yes]{color:#0ab152}.incomplete,.ko,.no,.off,[data-status=incomplete],[data-status=ko],[data-status=no],[data-status=off]{color:#ff2500}.plugin-card-event-tickets-plus .column-downloaded,.plugin-card-event-tickets-plus .column-rating,.plugin-card-event-tickets-plus .column-updated,.plugin-card-event-tickets .column-downloaded,.plugin-card-event-tickets .column-rating,.plugin-card-event-tickets .column-updated,.plugin-card-events-calendar-pro .column-downloaded,.plugin-card-events-calendar-pro .column-rating,.plugin-card-events-calendar-pro .column-updated,.plugin-card-events-community-tickets .column-downloaded,.plugin-card-events-community-tickets .column-rating,.plugin-card-events-community-tickets .column-updated,.plugin-card-events-community .column-downloaded,.plugin-card-events-community .column-rating,.plugin-card-events-community .column-updated,.plugin-card-image-widget-plus .column-downloaded,.plugin-card-image-widget-plus .column-rating,.plugin-card-image-widget-plus .column-updated,.plugin-card-image-widget .column-downloaded,.plugin-card-image-widget .column-rating,.plugin-card-image-widget .column-updated,.plugin-card-the-events-calendar .column-downloaded,.plugin-card-the-events-calendar .column-rating,.plugin-card-the-events-calendar .column-updated,.plugin-card-tribe-eventbrite .column-downloaded,.plugin-card-tribe-eventbrite .column-rating,.plugin-card-tribe-eventbrite .column-updated,.plugin-card-tribe-filterbar .column-downloaded,.plugin-card-tribe-filterbar .column-rating,.plugin-card-tribe-filterbar .column-updated{display:none}body.tribe-welcome{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background-color:#fff}body.tribe-welcome .update-nag{display:none}body.tribe-welcome #wpcontent{padding:0}body.tribe-welcome .tribe_settings{margin:0}body.tribe-welcome #wpfooter,body.tribe-welcome .tribe_settings>h1{display:none}body.tribe-welcome #wpbody-content{padding-bottom:25px}body.tribe-welcome .tribe-dependency-error{display:none}.tribe-events-admin-content-wrapper{font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-style:normal;margin:0 auto;padding:20px;width:calc(100% - 40px)}.tribe-events-admin-card{background:#fff;border:1px solid #e1e1e4;box-sizing:border-box;border-radius:16px;display:block;margin:0 auto 36px;padding:27px;text-align:center}.tribe-events-admin-card--1up{width:100%}.tribe-events-admin-video{-webkit-mask-image:-webkit-radial-gradient(circle,#fff 100%,#000 0);-webkit-transform:rotate(.000001deg);border-radius:16px;height:200px;margin-bottom:72px;overflow:hidden}.tribe-events-admin-video iframe{width:100%}.tribe-events-admin-card--2up .tribe-events-admin-card__title{max-width:260px}.tribe-events-admin-card--3up .tribe-events-admin-card__description{height:71px}.tribe-events-admin-card--3up .tribe-events-admin-card__image{margin-bottom:28px}.tribe-events-admin-card--promo-blue{background-color:#3d54ff;background-image:url(../images/welcome/promo.jpg)}.tribe-events-admin-card--promo-blue .tribe-events-admin-card__description{color:#fff;font-size:16px;text-align:left;margin-bottom:16px}.tribe-events-admin-card--promo-blue .tribe-events-admin-card__title{text-align:left;color:#fff}.tribe-events-admin-graphic{position:absolute;top:106px;right:0;z-index:-1}.tribe-events-admin-graphic--desktop-only{display:none}.tribe-events-admin-graphic--mobile-only{display:block}.tribe-events-admin-card__form{position:relative}input[type=email].tribe-events-admin-card__input{background:#fff;border:1px solid #e1e1e4;box-sizing:border-box;border-radius:16px;font-size:14px;height:54px}input[type=email].tribe-events-admin-card__input::-webkit-input-placeholder{color:rgba(15,16,49,.72);letter-spacing:.5px;padding-left:10px}input[type=email].tribe-events-admin-card__input::-moz-placeholder{color:rgba(15,16,49,.72);letter-spacing:.5px;padding-left:10px}input[type=email].tribe-events-admin-card__input:-ms-input-placeholder,input[type=email].tribe-events-admin-card__input::-ms-input-placeholder{color:rgba(15,16,49,.72);letter-spacing:.5px;padding-left:10px}input[type=email].tribe-events-admin-card__input::placeholder{color:rgba(15,16,49,.72);letter-spacing:.5px;padding-left:10px}.tribe-events-admin-card__button{background-color:#fff;border:none;color:#3d54ff;font-size:14px;font-weight:700;letter-spacing:1px;line-height:16px;position:absolute;right:20px;text-transform:uppercase;top:17px}.tribe-events-admin-card__button:hover{color:#161b7d}.tribe-events-admin-card__description{color:#000;font-size:14px;font-style:normal;font-weight:400;line-height:22px;margin-top:16px}.tribe-events-admin-card__image{display:block;margin:0 auto;height:100px}.tribe-events-admin-card__link{color:#3d54ff;display:inline-block;font-size:16px;font-style:normal;font-weight:700;line-height:18px;margin-top:24px;position:relative;text-decoration:none}.tribe-events-admin-card__link:hover{color:#161b7d}.tribe-events-admin-card__link:after{border-style:solid;border-width:0 0 1px;bottom:-4px;content:"";left:0;position:absolute;width:100%}.tribe-events-admin-card__title{color:#0f1031;font-size:20px;font-weight:700;line-height:23px;margin:auto}.tribe-events-admin-card-grid{max-width:1048px}.tribe-events-admin-quick-nav{background:#fff;border-radius:16px;border:1px solid #e1e1e4;box-sizing:border-box;display:block;margin:40px 0 78px;padding:18px 23px 2px}.tribe-events-admin-quick-nav__link{color:#3d54ff;font-size:16px;font-weight:700;line-height:18px;text-align:center;text-decoration:none}.tribe-events-admin-quick-nav__link:hover{color:#161b7d}.tribe-events-admin-quick-nav__link-item{display:block;padding-bottom:19px}.tribe-events-admin-quick-nav__links{display:inline}.tribe-events-admin-quick-nav__title{color:rgba(15,16,49,.72);display:inline-block;font-size:14px;font-weight:400;line-height:16px;padding-bottom:14px;text-transform:uppercase}.tribe-events-admin-section-header{color:#000;font-size:24px;font-weight:700;line-height:28px;margin:21px 0 24px}.tribe-events-admin-title{padding-top:14px}.tribe-events-admin-title__description{color:#0f1031;font-size:16px;font-weight:400;line-height:24px;max-width:584px;padding-top:15px}.tribe-events-admin-title__heading{color:#0f1031;display:inline-block;font-size:24px;font-weight:700;line-height:28px;margin:5px 0 0}.tribe-events-admin-title__logo{margin-right:8px;vertical-align:top;width:34px}.tribe-events-admin-notice{background-color:#3d54ff;height:65px}.tribe-events-admin-notice .tribe-events-admin-content-wrapper{padding-top:8px;padding-bottom:0}.tribe-events-admin-notice p{color:#fff;display:inline-block;font-family:Helvetica;font-size:16px;line-height:18px;margin-top:0;padding-bottom:12px;padding-left:16px;vertical-align:middle;width:calc(100% - 60px)}.tribe-events-admin-notice__logo{display:inline-block}.tribe-events-admin-tickets .tribe-events-admin-section-header{font-size:28px;line-height:32px}.tribe-events-admin-tickets .tribe-events-admin-graphic--desktop-only{width:365px}.tribe-events-admin-tickets .tribe-events-admin-graphic--mobile-only{width:300px;top:230px}.tribe-events-admin-tickets .tribe-events-admin-title__heading{margin-top:0}.tribe-events-admin-tickets .tribe-events-admin-title__logo{margin-right:4px;width:32px}body.tribe-welcome #fs_connect{border:1px solid #e1e1e4;box-sizing:border-box;border-radius:16px;margin-left:22px;box-shadow:none}body.tribe-welcome #fs_connect .fs-actions{background-color:transparent}body.tribe-welcome #fs_connect .fs-permissions{border-top:1px solid #e1e1e4;margin:0 16px}body.tribe-welcome #fs_connect button{background-color:#3d54ff;border-color:#3d54ff}body.tribe-welcome #fs_connect .button-secondary{border-color:#3d54ff;color:#3d54ff;background:#fff}body.tribe-welcome #fs_connect a{color:#3d54ff}body.tribe-welcome #fs_connect a:focus{box-shadow:none;outline:none}body.tribe-welcome #fs_connect a:hover{color:#161b7d}@media only screen and (-o-min-device-pixel-ratio:2/1),only screen and (-webkit-min-device-pixel-ratio:2),only screen and (min--moz-device-pixel-ratio:2),only screen and (min-device-pixel-ratio:2){#tribe-loading span{background-image:url(../images/tribe-loading@2x.gif)}}@media screen and (max-width:782px){.tribe-half-column,.tribe-row .tribe-half-column:last-child{margin:0 0 20px;width:100%}input[type=email]{width:100%}}@media screen and (max-width:782px){.events-cal .subsubsub{float:none}.events-cal .search-box{width:98%}.events-cal #search-submit{width:100%}.events-cal .tablenav.top{display:none}}@media screen and (min-width:500px){.api-check .tribe-mascot{display:block}.api-check .notice-content{margin-right:180px}}@media screen and (min-width:320px){.tribe-marketing-notice .tribe-marketing-notice__icon{display:block}.notice-tribe-banner .tribe-marketing-notice__content{margin-left:22px}}@media screen and (min-width:600px) and (max-width:782px){.tribe-marketing-notice .tribe-marketing-notice__content{margin-left:145px}.notice-tribe-banner .tribe-marketing-notice__content{margin-left:22px;padding:0}}@media screen and (min-width:782px){.tribe-marketing-notice .tribe-marketing-notice__content{margin-left:130px}.notice-tribe-banner .tribe-marketing-notice__content{margin-left:22px;padding:0}.events_page_tribe-app-shop .notice-tribe-banner .tribe-marketing-notice,.tribe-welcome .notice-tribe-banner .tribe-marketing-notice,.tribe_events_page_tribe-app-shop .notice-tribe-banner .tribe-marketing-notice{max-width:642px}}@media screen and (min-width:400px){.notice-tribe-banner .tribe-marketing-notice__icon{width:67px}}@media screen and (min-width:800px){.notice-tribe-banner h3{display:inline-block;font-size:1rem;margin:0 .5rem 0 0}.notice-tribe-banner a{line-height:1.5}.notice-tribe-banner a,.notice-tribe-banner p{font-size:1rem}.notice-tribe-banner p{margin:0 .5rem 0 0}.notice-tribe-banner .tribe-marketing-notice__cta{display:inline-block;margin-left:.5rem}}@media screen and (min-width:1215px){.events_page_tribe-app-shop .notice-tribe-banner .tribe-marketing-notice,.tribe_events_page_tribe-app-shop .notice-tribe-banner .tribe-marketing-notice{max-width:992px}.tribe-welcome .notice-tribe-banner .tribe-marketing-notice{max-width:1036px}}@media screen and (min-width:710px){.tribe-events-admin-content-wrapper{width:670px}.tribe-events-admin-card--1up{display:inline-block;width:calc(50% - 18px);margin-left:32px}.tribe-events-admin-card--1up .tribe-events-admin-card__description{height:71px}.tribe-events-admin-card--1up .tribe-events-admin-card__image{margin-bottom:28px}.tribe-events-admin-card--2up{display:inline-block;width:calc(50% - 20px)}.tribe-events-admin-card--2up.tribe-events-admin-card--first{margin-right:36px}.tribe-events-admin-card--2up.tribe-events-admin-card--last{margin-right:0}.tribe-events-admin-card--2up .tribe-events-admin-card__image{height:100px;margin-bottom:12px}.tribe-events-admin-card--2up .tribe-events-admin-card__title{max-width:340px;margin-bottom:27px}.tribe-events-admin-card--3up{display:inline-block;margin-bottom:32px;width:calc(50% - 18px)}.tribe-events-admin-card--3up.tribe-events-admin-card--first{margin-right:32px}.tribe-events-admin-card--3up.tribe-events-admin-card--middle{margin-right:0}.tribe-events-admin-card--promo-blue{display:block;margin-left:0;min-height:170px;width:100%}.tribe-events-admin-card--promo-blue .tribe-events-admin-card__description{float:left;max-width:300px}.tribe-events-admin-graphic{top:0;max-width:250px}.tribe-events-admin-graphic--desktop-only{display:block}.tribe-events-admin-graphic--mobile-only{display:none}.tribe-events-admin-card__form{float:right;width:300px}input[type=email].tribe-events-admin-card__input{width:300px}.tribe-events-admin-card__title{font-size:20px;line-height:23px}.tribe-events-admin-section-header{font-size:28px;line-height:32px;margin-bottom:21px}.tribe-events-admin-title{padding-top:50px}.tribe-events-admin-title__description{padding-top:15px}.tribe-events-admin-title__heading{font-size:48px;line-height:55px;margin:0}.tribe-events-admin-title__logo{margin-right:14px;padding-top:5px;width:40px}.tribe-events-admin-tickets .tribe-events-admin-card__title{font-size:18px}.tribe-events-admin-tickets .tribe-events-admin-card--2up .tribe-events-admin-card__title{font-size:18px;height:66px}.tribe-events-admin-tickets .tribe-events-admin-title__logo{margin-right:8px;padding-top:4px;width:60px}}@media screen and (min-width:1217px){.tribe-events-admin-content-wrapper{width:100%;max-width:1060px}.tribe-events-admin-card--1up{margin:0 0 36px;padding:33px 44px 30px;text-align:left;width:1012px}.tribe-events-admin-card--1up .tribe-events-admin-card__description{height:auto}.tribe-events-admin-card--1up .tribe-events-admin-card__image{float:left;margin:0 48px 10px 0}.tribe-events-admin-card--2up{margin-right:36px;width:486px}.tribe-events-admin-card--3up{width:310px}.tribe-events-admin-card--3up.tribe-events-admin-card--first,.tribe-events-admin-card--3up.tribe-events-admin-card--middle{margin-right:36px}.tribe-events-admin-card--3up.tribe-events-admin-card--last{margin-right:0}.tribe-events-admin-card--promo-blue{min-height:150px}.tribe-events-admin-card--promo-blue .tribe-events-admin-card__description{max-width:450px}.tribe-events-admin-graphic{max-width:none}.tribe-events-admin-card__form,input[type=email].tribe-events-admin-card__input{width:365px}.tribe-events-admin-quick-nav{display:inline-block;border-radius:100px;margin:24px 0 94px;max-width:1010px;padding:0 36px 0 0;height:54px}.tribe-events-admin-quick-nav__link-item{display:inline-block;padding:18px 10px 0}.tribe-events-admin-quick-nav__title{padding:19px 6px 17px 32px}.tribe-events-admin-tickets .tribe-events-admin-card--2up .tribe-events-admin-card__title{height:auto}}
|
1 |
+
.invalid input{border:2px solid red!important}.valid input{border:1px solid green}.clearfix{zoom:1}.placeholder{color:#999;cursor:text;padding:4px}input::-moz-placeholder,textarea::-moz-placeholder{color:#999}input:-ms-input-placeholder,input::-ms-input-placeholder,textarea:-ms-input-placeholder,textarea::-ms-input-placeholder{color:#999}input::placeholder,textarea::placeholder{color:#999}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#999}.bubble{background-color:#f9f9f9;border:1px solid #dfdfdf;border-radius:3px;border-spacing:0;padding:10px}.tribe-sticky-tooltip{color:#bbb}td.tribe_message{padding-bottom:10px!important}#tribe_thanks{float:left;margin:5px 0 0;width:200px}.tribe_brand{font-family:Georgia,serif!important;font-size:17px!important;font-weight:400;margin:8px 0}#tribe-upgrade{background:#f6f6f6;border:1px solid #ccc;border-radius:5px;margin:20px 0 30px;padding:0 20px 20px}#tribe-upgrade .message{background-color:#ffffe0;border:1px solid #e6db55;border-radius:3px;padding:6px 12px}table.plugins .tribe-plugin-update-message{background:#d54e21;color:#fff;display:inline-table;margin:6px 0;padding:10px 12px}table.plugins .tribe-plugin-update-message h4{display:inline;font-weight:700;margin-right:8px}table.plugins .tribe-plugin-update-message h4:after{content:" \00BB "}table.plugins .tribe-plugin-update-message a{color:#fff;text-decoration:underline}.tribe-settings-form{max-width:1000px}.tribe-settings-form fieldset{clear:both;display:inline-block;padding:10px 0}.tribe-settings-form fieldset.tribe-field-license_key legend{width:auto}.tribe-settings-form legend{float:left;font-weight:700;margin-right:20px;width:220px}.tribe-settings-form .tribe-field-wrap{float:left;max-width:500px}.tribe-settings-form .tribe-field-wrap :first-child{margin-top:0}.tribe-settings-form .tribe-field-checkbox_list label,.tribe-settings-form .tribe-field-radio label{display:block;margin:5px 0 5px 20px;text-indent:-20px}.tribe-settings-form .tribe-field-checkbox_list label>p,.tribe-settings-form .tribe-field-radio label>p{text-indent:0;margin-left:1px}.tribe-settings-form .tribe-field-checkbox_list label input,.tribe-settings-form .tribe-field-radio label input{margin-right:5px}.tribe-settings-form .tribe-settings-form-wrap .description,.tribe-settings-form .tribe-settings-form-wrap fieldset,.tribe-settings-form fieldset[id^=tribe-field-geoloc_]{padding-left:12px}.tribe-settings-form .tribe-settings-form-wrap fieldset .description{margin-left:0;max-width:450px;padding-left:0}.tribe-settings-form .tribe-settings-form-wrap fieldset .tribe-style-selection{margin-bottom:18px}.tribe-settings-form .tribe-settings-form-wrap #tribe-field-stylesheetOption .description{color:#999;margin-left:1px}.tribe-settings-form .tribe-settings-form-wrap h3{background-color:#f9f9f9;margin-bottom:10px;padding:6px 0 6px 12px}.tribe-settings-form .tribe-settings-form-wrap .contained,.tribe-settings-form .tribe-settings-form-wrap .system-info,.tribe-settings-form .tribe-settings-form-wrap .tribe-sysinfo-optin-msg,.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 red}.tribe_settings .tribe-field-description{margin-bottom:0;position:relative;top:-12px}.tribe_settings #ical-link{top:-14px}#modern-tribe-info{background-color:#f9f9f9;border:1px solid #ccc;border-radius:4px;margin:20px 0;padding:8px 20px 12px}#modern-tribe-info img{height:18px;margin:10px 0;width:250px}#modern-tribe-info ul{list-style:disc;margin-left:20px}#modern-tribe-info ul ul{list-style:circle}.tribe-field-inline-dropdown{margin-left:0;margin-right:0}.tribe-field-inline-text{line-height:28px;margin:0 2px}.tribe-field-textarea.tribe-size-small textarea{height:60px;width:180px}.tribe-field-textarea.tribe-size-medium textarea{height:80px;width:300px}.tribe-field-textarea.tribe-size-large textarea{height:120px;width:450px}.tribe-field-email.tribe-size-small input,.tribe-field-license_key.tribe-size-small input,.tribe-field-text.tribe-size-small input{width:50px}.tribe-field-email.tribe-size-medium input,.tribe-field-license_key.tribe-size-medium input,.tribe-field-text.tribe-size-medium input{width:225px}.tribe-field-email.tribe-size-large input,.tribe-field-license_key.tribe-size-large input,.tribe-field-text.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-wrapped_html.tribe-size-large .tribe-field-wrap{max-width:600px}.tribe-field-wrapped_html.tribe-size-large .tribe-field-wrap .description{max-width:100%}.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}.tribe-field-wrap .tooltip:first-child{font-style:normal}.tribe-field.indent{margin-left:252px;width:75%}.tribe-field.indent legend{font-weight:400;width:auto}.tribe-field.indent .tribe-field-wrap{padding-right:12px}.tribe-field.indent.tribe-field-radio .tribe-field-wrap{clear:left;margin-top:12px}.tribe-field.light-bordered{background-color:#fff;border:1px solid #d3d3d3}.ajax-loading-license,.invalid-key,.valid-key{display:none;margin:0 5px}.ajax-loading-license{position:relative;top:5px}.key-validity{display:inline-block}.invalid-key,.optin-fail{color:red}.optin-success,.valid-key{color:green}.valid-key.service-msg{color:#b72}#additional-field-table{margin-bottom:20px}.tribe-admin-box-left{float:left;width:20%}.tribe-admin-box-left,.tribe-admin-box-right{background-color:#f9f9f9;border:1px solid #ccc;border-radius:4px;margin:20px 0;padding:0 20px 15px}.tribe-admin-box-right{float:right;width:68%}.ajax-loader{float:right;margin:10px}.tribe-arrangeable-item{border:1px solid #d3d3d3;border-radius:3px}.tribe-arrangeable-item .ui-state-default{border:none}.tribe-arrangeable-item-top{padding:6px}.tribe-arrangeable-item-top:hover{cursor:move}.tribe-arrangeable-action{float:right}.tribe-arrangeable-child{background-color:#f9f9f9;border-top:1px solid #d3d3d3;display:none;padding:25px}.tribe-arrangeable-child label{display:block;margin:0 0 7px}.tribe_events_active_filter_type_options{margin:10px 0}.tribe_events_active_filter_type_options label{margin:7px 0}#event_organizer td small,.OrganizerInfo td small{display:block;margin:0;max-width:250px}#event_organizer .organizer-email,.OrganizerInfo .organizer-email{vertical-align:top}.tribe-table-field-label{max-width:100%;width:200px}#tribe-help-general,#tribe-help-sidebar{float:left;margin-top:20px}#tribe-help-general p{margin-left:15px}#tribe-help-general ul{list-style-type:square}#tribe-help-general ol,#tribe-help-general ul{margin-bottom:20px;margin-left:35px}#tribe-help-general h3{background-color:#f9f9f9;margin-bottom:10px;padding:6px 0 6px 12px}#tribe-help-general h3~h3{margin-top:2.25em}#tribe-help-general h3+p{margin:0 0 20px;padding-left:12px}#tribe-help-general{width:65%}.tribe-help-section{padding-bottom:10px}.tribe-section-type-box{background-color:#f9f9f9;border:1px solid #ccc;border-radius:4px;padding:8px 20px 12px}.tribe-section-type-box img{height:auto;margin:10px 0;max-width:300px}.tribe-section-type-box ul{list-style:disc;margin-left:20px}.tribe-section-type-box ul ul{list-style:circle}#tribe-log-controls{padding-bottom:1rem;padding-left:12px}#tribe-log-controls>div{display:inline-block;padding-right:1rem}#tribe-log-controls .working{opacity:1;transition:opacity .2s}#tribe-log-controls .working.hidden{opacity:0;transition:opacity .2s}#tribe-log-viewer,#tribe-system-info dl.support-stats,.template-updates-wrapper{background:#000;border-radius:2px;color:#888;max-height:400px;overflow:scroll;padding:10px}#tribe-system-info dl.support-stats dt,.template-updates-wrapper dt{clear:both;float:left;font-weight:700;text-transform:uppercase;width:25%}#tribe-system-info dl.support-stats dd,.template-updates-wrapper dd{margin-left:25%;padding-left:10px}.system-info-copy .system-info-copy-btn{padding:6px}.system-info-copy .system-info-copy-btn .dashicons{padding-right:10px}.template-updates-wrapper p{margin-top:0}#tribe-help-sidebar{margin:20px 0 0 3%;max-width:225px;width:32%}.tribe-help-plugin-info{border:1px solid #ccc;padding:0 12px 12px}.tribe-help-plugin-info dd,.tribe-help-plugin-info dt{display:inline;margin:0}.tribe-help-plugin-info dt{font-weight:700}.tribe-help-plugin-info dd:after{content:"";display:block;height:.4em}.tribe-help-plugin-info dd:last-child:after{height:0}.tribe-help-plugin-info+.tribe-help-plugin-info{margin-top:20px}.tribe-help-plugin-info>div{line-height:2em}.tribe-help-plugin-info .star-rating{display:inline-block;margin-left:3px;position:relative;top:-2px}.tribe-help-plugin-info .tribe-list-addons{color:#21a6cb;font-size:24px;list-style:circle inside;margin-bottom:10px;margin-top:10px;padding-left:4px}.tribe-help-plugin-info .tribe-list-addons a{font-size:13px;left:-5px;position:relative;top:-5px}.tribe-help-plugin-info .tribe-list-addons .tribe-active-addon{list-style:disc inside}.ui-widget-overlay{background:#666;filter:Alpha(Opacity=50);opacity:.5}.ui-widget-shadow{background:#000;border-radius:5px;filter:Alpha(Opacity=20);margin:-5px 0 0 -5px;opacity:.2;padding:5px}.ui-resizable{position:relative}.ui-resizable-handle{display:block;font-size:.1px;position:absolute;z-index:99999}.ui-resizable-autohide .ui-resizable-handle,.ui-resizable-disabled .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;left:0;top:-5px;width:100%}.ui-resizable-s{bottom:-5px;cursor:s-resize;height:7px;left:0;width:100%}.ui-resizable-e{cursor:e-resize;height:100%;right:-5px;top:0;width:7px}.ui-resizable-w{cursor:w-resize;height:100%;left:-5px;top:0;width:7px}.ui-resizable-se{bottom:1px;cursor:se-resize;height:12px;right:1px;width:12px}.ui-resizable-sw{bottom:-5px;cursor:sw-resize;height:9px;left:-5px;width:9px}.ui-resizable-nw{cursor:nw-resize;height:9px;left:-5px;top:-5px;width:9px}.ui-resizable-ne{cursor:ne-resize;height:9px;right:-5px;top:-5px;width:9px}.ui-dialog{padding:.2em;position:relative;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{height:18px;margin:-10px 0 0;padding:1px;position:absolute;right:.3em;top:50%;width:19px}.ui-dialog .ui-dialog-titlebar-close span{display:block;margin-left:-8px;margin-top:-8px}.ui-dialog .ui-dialog-titlebar-close:focus,.ui-dialog .ui-dialog-titlebar-close:hover{padding:0}.ui-dialog .ui-dialog-content{background:none;border:0;overflow:auto;padding:.5em 1em;zoom:1}.ui-dialog .ui-dialog-buttonpane{background-image:none;border-width:1px 0 0;margin:.5em 0 0;padding:.3em 1em .5em!important;text-align:right}.ui-dialog .ui-dialog-buttonpane button{cursor:pointer;line-height:1.4em;margin:.5em .4em!important;overflow:visible;padding:.2em .6em .3em;text-shadow:none;width:auto}.ui-dialog .ui-resizable-se{bottom:3px;height:14px;right:3px;width:14px}.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-div{display:none}#tribe-loading{background:#fff;background:hsla(0,0%,100%,.8);display:none;height:100%;left:0;position:absolute;top:0;transition:all 1s linear;width:100%;z-index:4}#tribe-loading span{background:url(../images/tribe-loading.gif) 0 0 no-repeat;background-size:32px 32px;height:32px;left:50%;margin:-16px 0 0 -16px;position:absolute;top:50%;width:32px}.tribe_update_page,.tribe_welcome_page{max-width:850px}.tribe_welcome_page.wrap h1{font-size:3em;line-height:1.2;margin-top:1em}.tribe_welcome_page.wrap h1:before{color:#555d66;content:"\f145";font-family:dashicons;font-size:.9em;line-height:1;margin-right:5px;position:relative;top:4px}.tribe-half-column{float:left;margin-bottom:30px;margin-right:5%;width:45%}.tribe-row:after,.tribe-row:before{content:"";display:table}.tribe-row,.tribe-row:after{clear:both}.tribe-row .tribe-half-column:last-child{margin-right:0;width:50%}.tribe_welcome_page .tribe-half-column h4,.tribe_welcome_page h2{font-size:24px;line-height:1.2;margin-bottom:20px}.tribe_update_page h2{font-size:30px;line-height:1.2;margin-bottom:20px}.tribe_update_page h3,.tribe_welcome_page h3{font-size:24px;font-weight:400;line-height:24px;margin-top:0}.tribe_update_page h4,.tribe_welcome_page h4{font-size:18px;font-weight:600;line-height:18px;margin:0}.tribe_update_page p,.tribe_welcome_page p{font-size:15px}.tribe_welcome_page li{font-size:14px;margin-bottom:10px}p.tribe-welcome-message{font-size:18px;font-weight:400}.tribe_welcome_page .tribe-half-column h4{margin-top:1em}.tribe_welcome_page .tribe-half-column h4:before{color:#555d66;content:"\f145";font-family:dashicons;font-size:21px;line-height:1;margin-right:10px;position:relative;top:2px}.tribe_welcome_page .tribe-half-column h4[data-tribe-icon=dashicons-sos]:before{content:"\f468"}.tribe_welcome_page .tribe-half-column h4[data-tribe-icon=dashicons-welcome-learn-more]:before{content:"\f118"}.tribe_welcome_page .tribe-half-column h4[data-tribe-icon=dashicons-megaphone]:before{content:"\f488"}.tribe_welcome_page .tribe-half-column h4[data-tribe-icon=dashicons-heart]:before{content:"\f487"}.tribe_update_page h4:before{content:"\f145";font-family:dashicons;font-size:34px;line-height:1;margin-right:5px;position:relative;top:5px}.tribe-welcome-video-wrapper{height:0;margin-bottom:40px;padding-bottom:56.25%;padding-top:25px;position:relative}.tribe-welcome-video-wrapper iframe{height:100%;left:0;position:absolute;top:0;width:100%}a.tribe-rating-link{text-decoration:none}.tribe-update-links,.tribe-welcome-links{margin-top:30px}.tribe_update_page li:before,.tribe_welcome_page li:before{content:"\2022";padding-right:3px}.tribe_update_page .rss-widget{margin:1em 0}.tribe_update_page a.rsswidget{font-size:14px;font-weight:400;line-height:1}.tribe_update_page .rss-widget li:before{display:none}.tribe-update-bar{display:inline-block}.tribe-update-bar .progress{border:1px solid #ccc;float:left;margin-right:1rem;padding:1px;width:18rem}.tribe-update-bar .progress .bar{background:#ffba00;height:1rem;width:1%;background:#7ad03a}#tribe-dialog-wrapper>div{padding:1rem}#tribe-dialog-wrapper>div .stage{display:none}#tribe-dialog-wrapper #heading{background:#fff}#tribe-dialog-wrapper label{display:block}#tribe-dialog-wrapper .select-single-container{border:1px solid #888;overflow-y:scroll;height:300px}#tribe-dialog-wrapper .select-single-container label{opacity:1;padding:3px 5px;transition:opacity .2s}#tribe-dialog-wrapper .select-single-container label:nth-child(odd){background:#fff}#tribe-dialog-wrapper .select-single-container label.selected{background:#0073aa;color:#fff;font-weight:700}#tribe-dialog-wrapper .select-single-container label input{display:none}#tribe-dialog-wrapper .select-single-container.updating label{opacity:.35;transition:opacity .2s}.ui-front{z-index:1000000}.wp-list-table.plugins .column-description .update-message{color:#d54e21}.api-check{padding:1em;min-height:100px}.api-check+.notice-dismiss:hover:before{color:#fff}.api-check:after,.api-check:before{content:"";display:table}.api-check:after{clear:both}.api-check .tribe-mascot{bottom:0;display:none;padding:0 1rem 0 0;position:absolute;right:0;top:0}.api-check .tribe-mascot img{display:inline-block;max-height:150px;max-width:150px;height:100%;width:auto;vertical-align:middle}.api-check p{line-height:1.7;margin-bottom:1em}.api-check a{text-decoration:none}.api-check a:hover{text-decoration:underline}.api-check .plugin-list{display:inline;font-weight:600;margin:0;padding:0}.api-check .plugin-list span.plugin-invalid:after{content:", "}.api-check .plugin-list span.plugin-invalid:last-of-type:after{content:""}.tribe-marketing-notice{padding:1em}.tribe-marketing-notice+.notice-dismiss:hover:before{color:#fff}.tribe-marketing-notice:after,.tribe-marketing-notice:before{content:"";display:table}.tribe-marketing-notice:after{clear:both}.tribe-marketing-notice .tribe-notice-icon{bottom:0;display:none;padding:1rem;position:absolute;left:0;top:0;width:125px}.tribe-marketing-notice .tribe-notice-icon:before{content:"";display:inline-block;height:100%;width:1%;vertical-align:middle}.tribe-marketing-notice .tribe-notice-icon img{display:inline-block;max-height:100%;max-width:96%;vertical-align:middle}.tribe-marketing-notice h3{margin-bottom:.5em;margin-top:.5em}.tribe-marketing-notice p{line-height:1.7;margin-bottom:.5em}.tribe-marketing-notice a{text-decoration:none}.tribe-marketing-notice a:hover{text-decoration:underline}.tribe-marketing-notice.tribe-bf-2018-tec .button.button-primary{margin:10px 10px 0 0}.tribe-dropdown,.tribe-ea-dropdown{max-width:100%;width:auto}.tribe-dropdown.select2-container .selection,.tribe-ea-dropdown.select2-container .selection{margin-top:inherit}.tribe-dropdown .select2-selection--single,.tribe-ea-dropdown .select2-selection--single{height:32px}.tribe-dropdown .select2-selection--single .select2-selection__clear,.tribe-ea-dropdown .select2-selection--single .select2-selection__clear{line-height:28px}.tribe-dropdown .select2-selection--single .select2-selection__rendered,.tribe-ea-dropdown .select2-selection--single .select2-selection__rendered{line-height:32px;padding-right:28px}.tribe-dropdown.select2-container--focus .select2-selection--single,.tribe-ea-dropdown.select2-container--focus .select2-selection--single{border-color:#5897fb;box-shadow:0 0 5px rgba(0,0,0,.1)}.tribe-dropdown.select2-container--open .select2-search__field,.tribe-ea-dropdown.select2-container--open .select2-search__field{padding:0}.tribe-dropdown.select2-container--open .select2-dropdown--below,.tribe-ea-dropdown.select2-container--open .select2-dropdown--below{margin-top:-1px;border-top:1px solid #aaa}.tribe-dropdown.select2-container--open .select2-dropdown--above,.tribe-ea-dropdown.select2-container--open .select2-dropdown--above{margin-bottom:-16px;border-bottom:1px solid #aaa}.tribe-dropdown.select2-container--open .select2-selection--single,.tribe-ea-dropdown.select2-container--open .select2-selection--single{border-bottom-left-radius:0;border-bottom-right-radius:0;border-color:#aaa}.tribe-dropdown.select2-container--open .select2-selection__arrow b,.tribe-ea-dropdown.select2-container--open .select2-selection__arrow b{transform:rotate(180deg)}.tribe-dropdown.select2-selection--single,.tribe-ea-dropdown.select2-selection--single{background-image:none;border-radius:3px;border:1px solid #ccc;overflow:hidden}.tribe-dropdown.select2-selection--single>.select2-selection__rendered,.tribe-ea-dropdown.select2-selection--single>.select2-selection__rendered{white-space:normal}.tribe-dropdown.select2-selection--single .select2-selection__arrow,.tribe-ea-dropdown.select2-selection--single .select2-selection__arrow{background-image:none;background:transparent;border-left:0;top:2px;width:26px}.tribe-dropdown.select2-selection--single .select2-selection__arrow b,.tribe-ea-dropdown.select2-selection--single .select2-selection__arrow b{background:#fff url("data:image/svg+xml;charset=US-ASCII,%3Csvg%20width%3D%2220%22%20height%3D%2220%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M5%206l5%205%205-5%202%201-7%207-7-7%202-1z%22%20fill%3D%22%23555%22%2F%3E%3C%2Fsvg%3E") no-repeat right 5px top 55%;background-size:auto;background-size:16px 16px;border:0;top:0;bottom:0;left:0;right:0;display:block;width:auto;height:auto;margin:0;padding:0}.tribe-dropdown .select2-selection--multiple .select2-selection__rendered,.tribe-ea-dropdown .select2-selection--multiple .select2-selection__rendered{background-image:none;border-radius:3px;border:1px solid #ccc;min-height:25px}.tribe-dropdown .select2-selection--multiple .select2-selection__rendered .select2-search--inline,.tribe-ea-dropdown .select2-selection--multiple .select2-selection__rendered .select2-search--inline{line-height:25px}.tribe-dropdown .select2-selection--multiple .select2-selection__rendered .select2-search--inline input,.tribe-ea-dropdown .select2-selection--multiple .select2-selection__rendered .select2-search--inline input{padding-top:0;padding-bottom:0}.tribe-dropdown .select2-selection--multiple .select2-selection__rendered .select2-selection__choice,.tribe-ea-dropdown .select2-selection--multiple .select2-selection__rendered .select2-selection__choice{margin-top:2px;padding-top:0;padding-bottom:0;line-height:19px}.tribe-dropdown .select2-selection--multiple .select2-selection__rendered .select2-selection__choice div,.tribe-ea-dropdown .select2-selection--multiple .select2-selection__rendered .select2-selection__choice div{line-height:inherit}.tribe-dropdown .select2-selection--multiple .select2-selection__rendered .select2-selection__choice__remove,.tribe-ea-dropdown .select2-selection--multiple .select2-selection__rendered .select2-selection__choice__remove{top:3px;left:4px;transition-property:border,color}.select2-results .select2-results__option{color:#939393;font-weight:400;margin-bottom:0}.select2-results .select2-results__option[aria-disabled=true]{background-color:#e0e0e0}.select2-results.select2-results__option--highlighted{background-color:#efefef;color:#a1a1a1;cursor:default;display:block}.wp-core-ui .button-red{background-color:#a00;border-bottom-color:#8d1f21;border-color:#9b2124;box-shadow:inset 0 1px 0 rgba(120,200,230,.5);color:#fff;text-decoration:none;text-shadow:0 1px 0 rgba(0,0,0,.1)}.wp-core-ui .button-red.focus,.wp-core-ui .button-red.hover,.wp-core-ui .button-red:focus,.wp-core-ui .button-red:hover{background-color:#a00;border-color:#7f1c1f;box-shadow:inset 0 1px 0 rgba(120,200,230,.6);color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.3)}.wp-core-ui .button-red.focus,.wp-core-ui .button-red:focus{border-color:#500f0e;box-shadow:inset 0 1px 0 rgba(120,200,230,.6),1px 1px 2px rgba(0,0,0,.4)}.wp-core-ui .button-red.active,.wp-core-ui .button-red.active:focus,.wp-core-ui .button-red.active:hover,.wp-core-ui .button-red:active{background:#7f1c1f;border-color:#601312 #ae2426 #ae2426;box-shadow:inset 0 1px 0 rgba(0,0,0,.1);color:hsla(0,0%,100%,.95);text-shadow:0 1px 0 rgba(0,0,0,.1)}.wp-core-ui .button-red-disabled,.wp-core-ui .button-red:disabled,.wp-core-ui .button-red[disabled]{color:#e79496!important;background:#ba292b!important;border-color:#7f1c1f!important;box-shadow:none!important;text-shadow:0 -1px 0 rgba(0,0,0,.1)!important;cursor:default}.ticket_form .select2-container .select2-selection--single .select2-selection__arrow{display:none}.clear{zoom:1}.clear:after,.clear:before{content:" ";display:table}.clear:after{clear:both}.checkmark:after{content:"";display:block;width:8px;height:15px;border:solid #0ab152;border-width:0 3px 3px 0;transform:rotate(45deg)}.checkmark.checkmark-right:after{float:right;margin-right:2em}.checkmark.checkmark-left:after{float:left;margin-left:2em}.checkmark.no-checkmark:after{display:none}.complete,.ok,.on,.yes,[data-status=complete],[data-status=ok],[data-status=on],[data-status=yes]{color:#0ab152}.incomplete,.ko,.no,.off,[data-status=incomplete],[data-status=ko],[data-status=no],[data-status=off]{color:#ff2500}.plugin-card-event-tickets-plus .column-downloaded,.plugin-card-event-tickets-plus .column-rating,.plugin-card-event-tickets-plus .column-updated,.plugin-card-event-tickets .column-downloaded,.plugin-card-event-tickets .column-rating,.plugin-card-event-tickets .column-updated,.plugin-card-events-calendar-pro .column-downloaded,.plugin-card-events-calendar-pro .column-rating,.plugin-card-events-calendar-pro .column-updated,.plugin-card-events-community-tickets .column-downloaded,.plugin-card-events-community-tickets .column-rating,.plugin-card-events-community-tickets .column-updated,.plugin-card-events-community .column-downloaded,.plugin-card-events-community .column-rating,.plugin-card-events-community .column-updated,.plugin-card-image-widget-plus .column-downloaded,.plugin-card-image-widget-plus .column-rating,.plugin-card-image-widget-plus .column-updated,.plugin-card-image-widget .column-downloaded,.plugin-card-image-widget .column-rating,.plugin-card-image-widget .column-updated,.plugin-card-the-events-calendar .column-downloaded,.plugin-card-the-events-calendar .column-rating,.plugin-card-the-events-calendar .column-updated,.plugin-card-tribe-eventbrite .column-downloaded,.plugin-card-tribe-eventbrite .column-rating,.plugin-card-tribe-eventbrite .column-updated,.plugin-card-tribe-filterbar .column-downloaded,.plugin-card-tribe-filterbar .column-rating,.plugin-card-tribe-filterbar .column-updated{display:none}@media only screen and (-o-min-device-pixel-ratio:2/1),only screen and (-webkit-min-device-pixel-ratio:2),only screen and (min--moz-device-pixel-ratio:2),only screen and (min-device-pixel-ratio:2){#tribe-loading span{background-image:url(../images/tribe-loading@2x.gif)}}@media screen and (max-width:782px){.tribe-half-column,.tribe-row .tribe-half-column:last-child{margin:0 0 20px;width:100%}input[type=email]{width:100%}}@media screen and (max-width:782px){.events-cal .subsubsub{float:none}.events-cal .search-box{width:98%}.events-cal #search-submit{width:100%}.events-cal .tablenav.top{display:none}}@media screen and (min-width:500px){.api-check .tribe-mascot{display:block}.api-check .notice-content{margin-right:180px}}@media screen and (min-width:600px) and (max-width:782px){.tribe-marketing-notice .tribe-notice-icon{width:135px}.tribe-marketing-notice .tribe-notice-content{margin-left:145px}}@media screen and (min-width:600px){.tribe-marketing-notice .tribe-notice-icon{display:block}}@media screen and (min-width:782px){.tribe-marketing-notice .tribe-notice-content{margin-left:130px}}@media screen and (max-width:956px){.tribe-marketing-notice.tribe-bf-2018-tec .button.button-primary{margin:0 0 10px}.tribe-marketing-notice.tribe-bf-2018-tec em{clear:both;display:block}}
|
common/src/resources/images/app-shop-banner.jpg
ADDED
Binary file
|
common/src/resources/images/app-shop-community-tickets.jpg
ADDED
Binary file
|
common/src/resources/images/app-shop-community.jpg
ADDED
Binary file
|
common/src/resources/images/app-shop-eventbrite.jpg
ADDED
Binary file
|
common/src/resources/images/app-shop-filter-bar.jpg
ADDED
Binary file
|
common/src/resources/images/app-shop-ical.jpg
ADDED
Binary file
|
common/src/resources/images/app-shop-image-widget-plus.jpg
ADDED
Binary file
|
common/src/resources/images/app-shop-pro.jpg
ADDED
Binary file
|
common/src/resources/images/app-shop-promoter.jpg
ADDED
Binary file
|
common/src/resources/images/app-shop-tickets-plus.jpg
ADDED
Binary file
|
common/src/resources/images/donate-link-screenshot.png
CHANGED
Binary file
|
common/src/resources/images/gutenberg-admin-notice-TEC.png
CHANGED
Binary file
|
common/src/resources/images/gutenberg-admin-notice-tickets.png
CHANGED
Binary file
|
common/src/resources/images/header/all-solutions.jpg
DELETED
Binary file
|
common/src/resources/images/header/bundles.jpg
DELETED
Binary file
|
common/src/resources/images/header/extensions.jpg
DELETED
Binary file
|
common/src/resources/images/header/welcome-desktop-et.jpg
DELETED
Binary file
|
common/src/resources/images/header/welcome-desktop-etplus.jpg
DELETED
Binary file
|
common/src/resources/images/header/welcome-desktop.jpg
DELETED
Binary file
|
common/src/resources/images/header/welcome-mobile-et.jpg
DELETED
Binary file
|
common/src/resources/images/header/welcome-mobile-etplus.jpg
DELETED
Binary file
|
common/src/resources/images/header/welcome-mobile.jpg
DELETED
Binary file
|
common/src/resources/images/icons/caret-down.svg
CHANGED
@@ -1 +1 @@
|
|
1 |
-
<svg
|
1 |
+
<svg width="12" height="8" xmlns="http://www.w3.org/2000/svg"><path d="M1.21.85L6 5.64 10.79.85 11.94 2 6 7.94.06 2z" fill="#141827" fill-rule="nonzero"/></svg>
|
common/src/resources/images/icons/caret-up.svg
CHANGED
@@ -1 +1 @@
|
|
1 |
-
<svg
|
1 |
+
<svg width="12" height="8" xmlns="http://www.w3.org/2000/svg"><path d="M1.21 7.15L6 2.36l4.79 4.79L11.94 6 6 .06.06 6z" fill="#141827" fill-rule="nonzero"/></svg>
|
common/src/resources/images/icons/horns-white.svg
DELETED
@@ -1 +0,0 @@
|
|
1 |
-
<svg fill="none" height="46" viewBox="0 0 37 46" width="37" xmlns="http://www.w3.org/2000/svg"><g stroke="#fff" stroke-linecap="round" stroke-width="2.25"><path d="m27.2161 19.5106c.1047-4.2905-1.1512-6.0698-3.7676-6.0698-2.6163 0-3.827 2.5473-3.5357 5.9545"/><path d="m27.6405 20.0339c0-3.2122.3778-15.48837 3.8955-15.50929 2.9087-.01763 4.1759 5.78649 4.1759 16.38229 0 10.5955-1.0247 19.9527-12.5277 23.128-11.2161 3.0959-21.14822-5.3731-18.32276-13.8498 3.23374-9.7018 23.18836-13.412 24.72666-8.3688 1.0523 3.4503-8.4009 10.2174-13.4245 9.9386-3.4856-.1937-4.2208-3.4538.1047-3.7673 4.3256-.3141 7.5349 1.779 5.8607 8.0582"/><path d="m19.2975 20.1038c.3254-3.9173-1.0116-8.5991-4.766-8.1375-3.3532.4121-3.5758 5.2963-2.6292 10.0038"/><path d="m2.48356 24.2201c-1.92733-9.6366-2.638836-22.75983 1.81843-23.228818 4.06506-.427867 6.44271 11.667118 7.18151 17.996118"/></g></svg>
|
|
common/src/resources/images/icons/horns.svg
DELETED
@@ -1 +0,0 @@
|
|
1 |
-
<svg fill="none" height="46" viewBox="0 0 37 46" width="37" xmlns="http://www.w3.org/2000/svg"><g stroke="#0f1031" stroke-linecap="round" stroke-width="2.25"><path d="m27.2161 19.5106c.1047-4.2905-1.1512-6.0698-3.7676-6.0698-2.6163 0-3.827 2.5473-3.5357 5.9545"/><path d="m27.6405 20.0339c0-3.2122.3778-15.48837 3.8955-15.50929 2.9087-.01763 4.1759 5.78649 4.1759 16.38229 0 10.5955-1.0247 19.9527-12.5277 23.128-11.2161 3.0959-21.14822-5.3731-18.32276-13.8498 3.23374-9.7018 23.18836-13.412 24.72666-8.3688 1.0523 3.4503-8.4009 10.2174-13.4245 9.9386-3.4856-.1937-4.2208-3.4538.1047-3.7673 4.3256-.3141 7.5349 1.779 5.8607 8.0582"/><path d="m19.2975 20.1038c.3254-3.9173-1.0116-8.5991-4.766-8.1375-3.3532.4121-3.5758 5.2963-2.6292 10.0038"/><path d="m2.48356 24.2201c-1.92733-9.6366-2.638836-22.75983 1.81843-23.228818 4.06506-.427867 6.44271 11.667118 7.18151 17.996118"/></g></svg>
|
|
common/src/resources/images/icons/list.svg
CHANGED
@@ -1 +1 @@
|
|
1 |
-
<svg
|
1 |
+
<svg width="21" height="18" xmlns="http://www.w3.org/2000/svg"><g fill="#141827" fill-rule="nonzero"><path d="M19.883 3.272c.342 0 .622-.21.622-.467v-.464c0-.257-.28-.467-.622-.467H7.127c-.342 0-.622.21-.622.467v.464c0 .257.28.467.622.467h12.756zM1.838 4.207a1.75 1.75 0 1 0 0-3.5 1.75 1.75 0 0 0 0 3.5zM19.883 9.98c.342 0 .622-.21.622-.466v-.465c0-.257-.28-.467-.622-.467H7.127c-.342 0-.622.21-.622.467v.465c0 .256.28.466.622.466h12.756zM1.838 10.916a1.75 1.75 0 1 0 0-3.5 1.75 1.75 0 0 0 0 3.5z"/><g><path d="M19.883 16.689c.342 0 .622-.21.622-.467v-.465c0-.256-.28-.466-.622-.466H7.127c-.342 0-.622.21-.622.466v.465c0 .257.28.467.622.467h12.756zM1.838 17.624a1.75 1.75 0 1 0 0-3.5 1.75 1.75 0 0 0 0 3.5z"/></g></g></svg>
|
common/src/resources/images/icons/map.svg
CHANGED
@@ -1 +1 @@
|
|
1 |
-
<svg
|
1 |
+
<svg width="22" height="21" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd"><path stroke="#141827" stroke-linejoin="round" d="M13.921 11.632H17.5l3.588 8.421H1l3.488-8.421h4.016"/><path d="M11.32 15.506c.2-.248 4.93-6.108 4.93-9.04 0-3.015-2.305-5.468-5.138-5.468-2.833 0-5.138 2.453-5.138 5.467 0 2.933 4.729 8.793 4.93 9.041a.268.268 0 0 0 .208.101c.08 0 .155-.037.207-.101zm-4.797-9.04c0-2.693 2.058-4.883 4.589-4.883 2.53 0 4.588 2.19 4.588 4.882 0 2.387-3.667 7.22-4.588 8.397-.922-1.177-4.589-6.009-4.589-8.397z" stroke="#141827" stroke-width=".4" fill="#141827" fill-rule="nonzero"/><path d="M12.85 6.477c0-1.007-.78-1.826-1.738-1.826-.96 0-1.74.819-1.74 1.826 0 1.007.78 1.826 1.74 1.826.959 0 1.739-.82 1.739-1.826zm-3.15 0c0-.817.633-1.482 1.412-1.482.778 0 1.41.665 1.41 1.482s-.632 1.482-1.41 1.482c-.779 0-1.412-.665-1.412-1.482z" stroke="#000" stroke-width=".7" fill="#000" fill-rule="nonzero"/></g></svg>
|
common/src/resources/images/icons/photo.svg
CHANGED
@@ -1 +1 @@
|
|
1 |
-
<svg
|
1 |
+
<svg width="20" height="17" xmlns="http://www.w3.org/2000/svg"><g fill="#141827" fill-rule="nonzero"><path d="M19.348.11H.634a.509.509 0 0 0-.52.508v15.017c0 .284.23.508.52.508h18.714c.29 0 .52-.224.52-.508V.618a.509.509 0 0 0-.52-.508zm-.54 1.035v10.837l-2.87-3.084c-.583-.61-1.664-.61-2.246 0l-1.393 1.481-4.034-4.525a1.625 1.625 0 0 0-1.227-.528 1.6 1.6 0 0 0-1.206.548l-4.657 5.175V1.145h17.632zM1.174 15.108v-2.496l5.448-6.089a.529.529 0 0 1 .415-.182c.146 0 .333.06.437.182l4.429 4.972c.104.102.25.183.395.183.166.02.291-.06.395-.162l1.788-1.908c.167-.183.5-.183.686 0l3.66 3.917v1.603H1.175v-.02z"/><path d="M14.19 5.757c1.044 0 1.91-.872 1.91-1.968s-.846-1.969-1.91-1.969c-1.062 0-1.909.873-1.909 1.969s.866 1.968 1.91 1.968zm0-2.902c.493 0 .907.427.907.934 0 .507-.414.933-.906.933-.492 0-.906-.426-.906-.933 0-.507.414-.934.906-.934z"/></g></svg>
|
common/src/resources/images/icons/sale-burst.svg
DELETED
@@ -1,12 +0,0 @@
|
|
1 |
-
<svg width="67" height="55" viewBox="0 0 67 55" fill="none" xmlns="http://www.w3.org/2000/svg">
|
2 |
-
<path d="M8.22008 40.7031C13.0328 40.2609 15.4192 37.5595 15.4462 34.2657C15.5014 27.5429 5.18804 30.406 5.2113 27.5711C5.22016 26.4912 6.14006 25.7052 7.75327 25.557C9.58157 25.389 11.5123 25.8321 12.9531 27.0486L15.1007 23.9915C13.3396 22.5076 10.9807 21.8611 8.1307 22.123C3.90948 22.5108 1.30798 25.2319 1.2834 28.2288C1.22781 35.0056 11.5703 31.87 11.5446 35.0019C11.5359 36.0548 10.5334 37.0912 8.40931 37.2864C5.93573 37.5137 3.9823 36.5601 2.72948 35.3532L0.607727 38.5428C2.28764 40.0881 4.75169 41.0218 8.22008 40.7031Z" fill="#FF4B33"/>
|
3 |
-
<path d="M35.4754 37.8749L28.7132 20.5015L23.9274 20.9412L16.8698 39.5846L21.1985 39.1868L22.3528 36.0321L30.0424 35.3256L31.1466 38.2727L35.4754 37.8749ZM29.0215 32.047L23.4291 32.5609L26.2889 24.5552L29.0215 32.047Z" fill="#B9C1FF"/>
|
4 |
-
<path d="M49.2036 36.6135L49.2313 33.2386L41.6492 33.9353L41.7692 19.3018L37.9244 19.6551L37.7767 37.6635L49.2036 36.6135Z" fill="#FF8A6A"/>
|
5 |
-
<path d="M65.2724 35.137L65.3001 31.7621L56.4275 32.5774L56.4611 28.4735L65.1455 27.6755L65.1732 24.3006L56.4888 25.0986L56.5198 21.3188L65.3924 20.5035L65.4201 17.1286L52.7296 18.2947L52.5819 36.3031L65.2724 35.137Z" fill="#50B078"/>
|
6 |
-
<path d="M25.9998 16L19.9998 10" stroke="#FFCF48" stroke-linecap="round" stroke-linejoin="round"/>
|
7 |
-
<path d="M39.9998 14.5646L43.3786 8" stroke="#FFCF48" stroke-linecap="round" stroke-linejoin="round"/>
|
8 |
-
<path d="M31.0486 1L32.277 15.7414" stroke="#FFCF48" stroke-linecap="round" stroke-linejoin="round"/>
|
9 |
-
<path d="M35.9998 44L37.2548 53.8469" stroke="#FFCF48" stroke-linecap="round" stroke-linejoin="round"/>
|
10 |
-
<path d="M44.9998 43L49.344 47.3442" stroke="#FFCF48" stroke-linecap="round" stroke-linejoin="round"/>
|
11 |
-
<path d="M24.8613 44L20.9998 50.7577" stroke="#FFCF48" stroke-linecap="round" stroke-linejoin="round"/>
|
12 |
-
</svg>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
common/src/resources/images/logo/bundle-community-manager.svg
DELETED
@@ -1 +0,0 @@
|
|
1 |
-
<svg height="90" viewBox="0 0 82 90" width="82" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd" transform="translate(.5)"><path d="m16.166104 79.284389c.3708501.4419619.3438096 1.0853796-.0430249 1.4948051l-.095639.0901309-13.24592059 11.1146471c-.47595899.399377-1.18555904.3372951-1.58493606-.1386639-.37085008-.441962-.34380952-1.0853797.04302492-1.4948052l.09563902-.0901309 13.24592061-11.1146471c.475959-.399377 1.185559-.337295 1.584936.138664zm4.0940823-78.409389c2.8978653 0 4.6500531.48498444 5.6203928 1.62734799.7317536.8614804.8805731 1.6126957.8393969 3.30264202l-.0375106 1.14254537c.0349442.10865188.0538162.22451136.0538162.34477863v61.09667779c0 .2318748-.0716488.4580855-.2051424.6476782l-5.3510953 7.5998332c-.4481142.6364291-1.3916011.6364291-1.8397152 0l-5.3510954-7.5998332c-.1334935-.1895927-.2051424-.4158034-.2051424-.6476782v-61.09667779c0-.12026727.018872-.23612675.0538162-.34477863-.0029085-.16099378-.0095182-.34706954-.0198508-.60635055-.0827705-2.07700073.0168082-2.8912084.8217371-3.83883684.9703397-1.14236355 2.7225275-1.62734799 5.6203929-1.62734799zm2.8238137 64.56-2.0482194 2.4341832c-.4199479.4990507-1.1652581.5318175-1.6279773.098727l-.0946072-.0999355-1.6741961-1.9949747-1.5956427 2.174 2.8114401 3.9926803c.1929588-.531028.6783178-.9217276 1.261425-.9774469l.1439639-.006843c.6458963 0 1.1961157.4096419 1.4050266.9832944l2.7771444-3.9466848zm1.402-57.018h-8.452l-.0006427 55.84.6396365-.8705335c.4315602-.5879618 1.2999064-.6161728 1.7687199-.0574626l1.7332863 2.0669961 2.2786653-2.7063178c.4892851-.5814486 1.3888968-.5143501 1.7959194.0984207l.0665304.1137795.1692422.3321176zm-4.2258137-5.292c-2.2984275 0-3.4733866.3252145-3.9055337.83397355-.2575894.30325536-.3317166.70903233-.3035709 1.8352911l.0122756.37273535h8.393l.0129335-.37273535c.0281457-1.12625877-.0459815-1.53203574-.3035709-1.8352911-.413358-.48663909-1.50634-.80534706-3.6120787-.83214088z" fill="#0f1031" fill-rule="nonzero" transform="matrix(.76604444 .64278761 -.64278761 .76604444 60.044424 .631355)"/><path d="m23.8582322 31.5772348-6.1519432-.1756295 13.9557856-12.8356873-6.1077287 11.4711817 6.1519431.1756294-13.0936047 13.9029739z" fill="#3d54ff"/></g></svg>
|
|
common/src/resources/images/logo/bundle-event-importer.svg
DELETED
@@ -1 +0,0 @@
|
|
1 |
-
<svg height="58" viewBox="0 0 82 58" width="82" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd" transform="translate(0 .621371)"><path d="m54.5499727 35.892875-6.1519431-.1756294 13.9557856-12.8356873-6.1077288 11.4711816 6.1519432.1756295-13.0936047 13.9029739z" fill="#3d54ff"/><path d="m80.806757 18.575839v-5.2197597c.0608-3.58079976-2.8287998-6.51439959-6.4095996-6.50886299l-38.0199978.0632634c-3.5095998.0048-6.3607996 2.83759983-6.3887996 6.34879959v5.3165597z" fill="#3d54ff"/><path d="m69.2570784.875c.579899 0 1.0573199.43876095 1.1183987 1.00241886l.0066013.12258114-.0000784 3.721 4.0137695.00009226c4.1295049-.00508862 7.4763557 3.31298198 7.536273 7.39406274v34.4822886c0 4.951091-3.9435308 8.9807941-8.8609743 9.1206633l-.2643494.003755-34.8154202-.0011827c-4.9506294-.0011503-8.9803381-3.9438619-9.1215169-8.8608608l-.0038263-.2643258-.0000344-.4550164c-.000047-.6213203.5035946-1.125038 1.1249149-1.125085.579899-.0000438 1.0573531.438681 1.1184745 1.0023343l.0066106.1225807.0000343.4547931c.0010186 3.717737 2.9521143 6.7461415 6.6393116 6.8715397l.2363314.0040403 34.8151587.0011826c3.7179936 0 6.7465789-2.9507499 6.8712773-6.6381407l.0039944-.2363445-.0001096-34.2603965c.048885-2.8790665-2.2166747-5.25123402-5.0696074-5.36185425l-.2150442-.0040287-4.0152675-.00009725.0000784 3.8969994c0 .6213204-.5036796 1.125-1.125 1.125-.579899 0-1.0573198-.4387609-1.1183986-1.0024188l-.0066014-.1225812-.0000784-3.8969994-24.856.002.00056 3.8949994c0 .6213204-.5036796 1.125-1.125 1.125-.579899 0-1.0573198-.4387609-1.1183986-1.0024188l-.0066014-.1225812-.00056-3.8939994-4.6473017.00081677c-2.8776329.00393567-5.2421775 2.38458263-5.2653383 5.28437753l.0015494 20.4982622c.000047.6213203-.5035946 1.125038-1.124915 1.125085-.6213203.0000469-1.125038-.5035946-1.125085-1.124915l-.0015136-20.5073182c.0323403-4.05546953 3.2628794-7.38688902 7.2721805-7.52128305l.2414732-.00420742 4.6489505-.00081783.00056-3.724c0-.62132034.5036797-1.125 1.125-1.125.579899 0 1.0573199.43876095 1.1183987 1.00241886l.0066013.12258114-.00056 3.723 24.856-.002.0000784-3.721c0-.62132034.5036797-1.125 1.125-1.125zm-32.7472495 33.9052027.0981235.0874196 5.6568542 5.6568543c.4079584.4079584.4370983 1.0512845.0874197 1.4928668l-.0874197.0981234-5.6568542 5.6568543c-.4393399.4393398-1.1516505.4393398-1.5909903 0-.4079584-.4079584-.4370983-1.0512845-.0874197-1.4928669l.0874197-.0981234 3.7360379-3.7373308-26.753.0009717c-.6213203 0-1.125-.5036797-1.125-1.125 0-.579899.4387609-1.0573199 1.0024189-1.1183987l.1225811-.0066013 26.751-.0009717-3.7340379-3.7353874c-.4079584-.4079584-.4370983-1.0512845-.0874197-1.4928669l.0874197-.0981234c.4079584-.4079584 1.0512845-.4370983 1.4928668-.0874196zm-17.2375755-14.7844889.0981234.0874196 5.6568543 5.6568543c.4079584.4079584.4370983 1.0512845.0874197 1.4928668l-.0874197.0981234-5.6568543 5.6568543c-.4393398.4393398-1.1516504.4393398-1.5909902 0-.4079584-.4079584-.4370983-1.0512845-.0874197-1.4928668l.0874197-.0981235 3.7346134-3.7368419-19.514.0004828c-.62132034 0-1.125-.5036796-1.125-1.125 0-.579899.43876095-1.0573198 1.00241886-1.1183986l.12258114-.0066014 19.514-.0004828-3.7346134-3.7358763c-.4079584-.4079584-.4370983-1.0512845-.0874197-1.4928668l.0874197-.0981235c.4079584-.4079584 1.0512845-.4370983 1.4928668-.0874196z" fill="#0f1031" fill-rule="nonzero"/></g></svg>
|
|
common/src/resources/images/logo/bundle-event-marketing.svg
DELETED
@@ -1 +0,0 @@
|
|
1 |
-
<svg height="52" viewBox="0 0 92 52" width="92" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd" transform="translate(.541964)"><ellipse cx="55.312756" cy="26.233071" fill="#3d54ff" rx="6.78526" ry="24.233071"/><path d="m55.3127556.875c4.6468233 0 7.7721095 10.8009582 7.9057955 24.4443852l.0044643.9136855c0 14.0717361-3.1601737 25.3580707-7.9102598 25.3580707-.3387437 0-.6694017-.0573974-.9914047-.1691092-.0621771-.0018485-.1248904-.0097015-.1874528-.0230875l-.118476-.0321427-24.9680302-8.2383286c-.3307922.84953-.7681367 1.6531315-1.3008316 2.3926729-2.0199708 2.8043298-5.2605904 4.5014718-8.7834108 4.5014718-5.9747425 0-10.81822829-4.8434858-10.81822829-10.8182283 0-.9725824.12865869-1.9284968.37930192-2.8488153l-6.87674901-2.2689039c-.42261628-.139453-.71952888-.5130005-.76607948-.9482387l-.00639464-.1201014v-11.6318739c0-.4292027.24362438-.8168951.62099737-1.0058235l.11711448-.0505584 52.36794795-19.17918113c.0636163-.02329875.1279786-.04049318.1924449-.05188114.3684676-.14762954.7484792-.22401243 1.1392509-.22401243zm0 2.25c-.1469428 0-.2943753.02984478-.4418238.08828681-.0011879.00098924-.0022241.00150333-.0032614.00201597l-.0687942.02881504c-2.5825566 1.186272-5.1463804 11.08396368-5.1463804 22.98895288l.0011777.4419232c.0666028 12.4941993 2.9462923 22.6661475 5.6590821 22.6661475 2.6808745 0 5.524745-9.9340161 5.6555681-22.2261528l.0046917-.8819179c0-12.6953747-2.9155549-23.1080707-5.6602598-23.1080707zm-4.3289118 1.51920879-47.8588438 17.52679121v10.033l47.967457 15.8295467c-2.2328112-4.2667187-3.5981217-11.9696395-3.685497-20.8867905l-.0044642-.9136855c0-9.1562388 1.3379806-17.13317122 3.581348-21.58886191zm-40.5889226 34.56018101c0 4.7321018 3.8361265 8.5682283 8.5682283 8.5682283 2.7915395 0 5.3562106-1.3431417 6.957722-3.5665233.3990864-.5540525.7304033-1.1531115.9865702-1.7850796l-16.2428317-5.3588626c-.1782798.692864-.2696888 1.4108585-.2696888 2.1422372zm58.9409659-2.9328057c.3446466-.5169698 1.0431246-.6566654 1.5600943-.3120189l11.631874 7.7545827.0983319.0734884c.4351113.3634818.535357 1.0041008.2136869 1.4866059-.3446465.5169698-1.0431245.6566654-1.5600943.3120188l-11.6318739-7.7545826-.0983319-.0734884c-.4351113-.3634818-.535357-1.0041008-.213687-1.4866059zm19.5567103-11.1635134c.6213203 0 1.125.5036797 1.125 1.125 0 .579899-.438761 1.0573199-1.0024189 1.1183987l-.1225811.0066013h-17.2168395c-.6213203 0-1.125-.5036796-1.125-1.125 0-.579899.438761-1.0573198 1.0024189-1.1183986l.1225811-.0066014zm-4.5334232-17.91617145c.3216701.48250512.2214243 1.12312409-.213687 1.48660587l-.0983319.07348843-11.6318739 7.75458265c-.5169698.3446465-1.2154478.2049509-1.5600943-.3120189-.3216701-.4825051-.2214244-1.1231241.2136869-1.4866058l.0983319-.0734885 11.631874-7.75458261c.5169698-.34464652 1.2154478-.20495091 1.5600943.31201886z" fill="#0f1031" fill-rule="nonzero"/><path d="m34.8083209 24.7045451-6.1519431-.1756295 13.9557856-12.8356873-6.1077288 11.4711817 6.1519432.1756294-13.0936047 13.902974z" fill="#3d54ff"/></g></svg>
|
|
common/src/resources/images/logo/bundle-ultimate.svg
DELETED
@@ -1 +0,0 @@
|
|
1 |
-
<svg height="67" viewBox="0 0 81 67" width="81" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd" transform="translate(.333276 .621371)"><path d="m47.3924388 1.04445636c.307782-.27449544.7457226-.36091188 1.1394035-.21504976l30.3585616 11.2481066.120035.0523673c.6145741.3110445.8145343 1.1149037.3864763 1.6810475l-5.5433234 7.3303483.0005673 31.6959015c0 .4653648-.2865266.8826957-.7208205 1.0498876l-30.8441152 11.8741834c-.1163572.0447945-.2340936.0689555-.3498728.0747736h-.1757061c-.0771862-.0038787-.1552422-.0159099-.2331795-.0367721l-.1166933-.0380015-30.8441152-11.8741834c-.3948127-.1519926-.66750355-.5107117-.71382079-.9243127l-.00730374-.1255749v-14.8549478c0-.6213203.50398363-1.1249999 1.12530403-1.1249999.5798989 0 1.0573198.4387609 1.1183986 1.0024188l.0066013.1225811-.0008359 14.08177 28.594 11.008-.0004082-29.1417237-7.2138088 8.6294166c-.2789592.333672-.7220239.4737771-1.1366091.3697046l-.1233287-.0385977-30.50267225-11.4986712c-.74732682-.2817218-.9713011-1.2307209-.42879823-1.8168567l8.79547038-9.5035688c.0842052-.108375.1913363-.203446.3215624-.2780003.0076969-.0030233.0143821-.0068518.0211053-.0106113.0468355-.026763.0975103-.0501085.151181-.0704171l-.0995905.0432547c.0045879-.0022623.0091899-.0044926.0138055-.0066908.0198392-.009435.0401859-.0184141.0607891-.0267895.0096208-.0038897.0189978-.0075454.0284192-.0110737l30.5844747-11.57409878 6.1313129-6.99441622zm24.211153 21.27081994-28.594 9.331.0006113 31.4257237 28.594-11.007zm-60.2935918-.2572763-7.237 7.818 28.19 10.627 7.6245918-9.1197237zm29.4855918-11.3757237-26.4335918 10.0027237 27.522 8.961 27.454-8.958-26.2924082-9.9177237.0003789 13.9822282c0 .6213204-.5036796 1.125-1.1249999 1.125-.579899 0-1.0573199-.4387609-1.1183987-1.0024188l-.0066013-.1225812zm7.6809064-7.4742763-4.7479064 5.41627632 28.61 10.78999998 4.3509064-5.7532763z" fill="#0f1031" fill-rule="nonzero"/><path d="m57.2011536 42.4514426-5.7125187-.1781849 12.9589438-13.0224498-5.6714624 11.6380903 5.7125186.1781848-12.1583472 14.1052657z" fill="#3d54ff" transform="matrix(.9945219 -.10452846 .10452846 .9945219 -4.094644 6.292702)"/></g></svg>
|
|
common/src/resources/images/logo/bundle-virtual-events.svg
DELETED
@@ -1 +0,0 @@
|
|
1 |
-
<svg height="49" viewBox="0 0 72 49" width="72" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd" transform="translate(1.5 1)"><g fill-rule="nonzero" stroke="#0f1031" stroke-linecap="round" stroke-width="2.25"><path d="m68.340879.76204803c-12.1833605 12.53145647-12.1833605 32.98821247 0 45.51966897" stroke-linejoin="round" transform="matrix(-1 0 0 1 127.544238 0)"/><path d="m54.7200013 9.16151076c-7.7051523 7.92529954-7.7051523 20.79544404.065856 28.78848114" transform="matrix(-1 0 0 1 103.7352 0)"/><path d="m9.93651509.76204803c-12.1833605 12.53145647-12.1833605 32.98821247 0 45.51966897" stroke-linejoin="round"/><path d="m19.6674066 9.16151076c-7.7051523 7.92529954-7.7051523 20.79544404.065856 28.78848114"/></g><path d="m33.72188 22.9017711-6.1519432-.1756295 13.9557856-12.83568733-6.1077287 11.47118173 6.1519431.1756294-13.0936047 13.9029739z" fill="#3d54ff"/></g></svg>
|
|
common/src/resources/images/logo/community-events.svg
DELETED
@@ -1 +0,0 @@
|
|
1 |
-
<svg height="67" viewBox="0 0 77 67" width="77" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd" transform="translate(.711207 -.5)"><path d="m74.8415213 21.289469v-6.3639746c.0692026-4.0756679-3.2197412-7.41469247-7.295409-7.40836384l-43.2743778.07197956c-3.994628.00546336-7.2398649 3.22975738-7.2717345 7.22620648v6.4741524z" fill="#3d54ff"/><g fill-rule="nonzero"><path d="m61.6956722.875c.579899 0 1.0573199.43876095 1.1183987 1.00241886l.0066013.12258114-.0006364 4.391 4.7246775-.00013573c4.6198495-.00573816 8.3631847 3.71029753 8.4223303 8.27990323v40.3335803c0 5.0396027-4.0860433 9.1248847-9.1256432 9.1248847l-29.8162643-.0019166c-.6213203-.0001106-1.1249102-.50388-1.1247996-1.1252003.0001107-.6213204.5038801-1.1249103 1.1252004-1.1247996l29.8158933.0019165c3.7178559.0000517 6.7464776-2.9510376 6.8711016-6.6385471l.0039895-.2363518-.0001198-40.3267165c-.0636494-3.2652541-2.6757554-5.91789171-5.9413141-6.03286708l-.2288661-.00387998-4.7261855.00012996.0006364 4.5907612c0 .6213203-.5036796 1.125-1.125 1.125-.579899 0-1.0573199-.438761-1.1183986-1.0024189l-.0066014-.1225811-.0006364-4.5907612-28.601.003.0001237 4.5877612c0 .6213203-.5036797 1.125-1.125 1.125-.579899 0-1.0573199-.438761-1.1183986-1.0024189l-.0066014-.1225811-.0001237-4.5877612-5.4457627.00106368c-3.2864001.00449474-5.9982604 2.66139402-6.1424447 5.94492952l-.0058285.2248247.0036423 8.2162692c.0002754.6213203-.5031809 1.1252232-1.1245012 1.1254986-.5798989.0002571-1.0575143-.4382922-1.1188429-1.001923l-.0066557-.1225782-.0036066-8.2257389c.0361866-4.5378008 3.6550217-8.26463866 8.1417171-8.40706572l.2548725-.00421514 5.4474104-.00106474.0001237-4.394c0-.62132034.5036797-1.125 1.125-1.125.579899 0 1.0573199.43876095 1.1183987 1.00241886l.0066013.12258114-.0001237 4.394 28.601-.003.0006364-4.391c0-.62132034.5036797-1.125 1.125-1.125z" fill="#0f1031"/><path d="m40.8449849 50.9309813c4.3023976 0 6.8121296-2.0555899 6.8121296-5.0433661 0-2.1990032-1.027795-3.4658203-2.8204607-4.0155711 1.6970568-.5975552 2.5097319-1.8643723 2.5097319-3.776549 0-2.7726563-2.2707098-4.7565396-6.3340854-4.7565396-4.2545932 0-6.6209119 2.2229054-6.6209119 5.5692147v.3346309h2.3424165v-.2629243c0-2.0794922 1.5297414-3.5614291 4.2067888-3.5614291 2.6531452 0 3.9916689 1.2190126 3.9916689 2.9160695 0 1.7687634-1.0755994 2.748754-3.4419181 2.748754h-2.2707098v1.8643723h2.2707098c2.3902209 0 3.6809402.6453597 3.6809402 2.7009496 0 1.9121768-1.6731546 3.1789938-4.350202 3.1789938-2.9877762 0-4.3502021-1.1234038-4.3502021-3.6809402v-.3346309h-2.3902209v.454142c0 3.8721579 2.0316878 5.6648235 6.7643252 5.6648235zm18.7643723-.3346309v-2.2468076h-3.6092336v-14.747663h-1.9121767c-.3346309 1.8643723-1.1712082 2.7009496-3.1550916 2.7965584v1.8165679h2.748754v10.1345367h-3.6092335v2.2468076z" fill="#0f1031"/><path d="m15.5738029 44.9682963c8.276296 0 14.9855596 6.7092636 14.9855596 14.9855596 0 8.2762961-29.97111922 8.2762961-29.97111922 0 0-8.276296 6.70926357-14.9855596 14.98555962-14.9855596zm0-15.299452c4.138148 0 7.4927798 3.3546318 7.4927798 7.4927798s-3.3546318 7.4927798-7.4927798 7.4927798-7.49277982-3.3546318-7.49277982-7.4927798 3.35463182-7.4927798 7.49277982-7.4927798z" stroke="#0f1031" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.25"/></g></g></svg>
|
|
common/src/resources/images/logo/community-tickets.svg
DELETED
@@ -1 +0,0 @@
|
|
1 |
-
<svg height="67" viewBox="0 0 102 67" width="102" xmlns="http://www.w3.org/2000/svg"><g fill="none" transform="translate(-.583333 -.5)"><path d="m78.250003 1.68749998h23.125v17.25167472c-6.4042793 0-11.4874238 4.3644744-11.4874238 9.7483253 0 5.2803174 4.885384 9.580086 11.1193198 9.743509l.368104.003991v17.2525h-23.125z" fill="#3d54ff"/><path d="m53.0625 35.5252579-7.5309985 5.5813985 2.9810188-8.8871522-7.6354319-5.4376582 9.3733695.0888363 2.8120421-8.9420561 2.8120421 8.9420561 9.3733695-.0888363-7.6354319 5.4376582 2.9810188 8.8871522z" fill="#3d54ff" stroke="#3d54ff" stroke-linecap="round" stroke-linejoin="round"/><path d="m17.5377923 27.1401612c4.8678117 0 8.8139528 3.9461411 8.8139528 8.8139528 0 3.0779232-1.5776862 5.787358-3.9684813 7.3637273 6.749305 2.0683245 11.6574341 8.3504554 11.6574341 15.7789413 0 9.9929828-33.00581123 9.9929828-33.00581123 0 0-7.4281204 4.90764622-13.7099987 11.65740943-15.7801056-2.3907705-1.575205-3.96845663-4.2846398-3.96845663-7.362563 0-4.8678117 3.94614113-8.8139528 8.81395283-8.8139528zm0 17.7037158c-7.87166243 0-14.25290563 6.3812432-14.25290563 14.2529056 0 6.9929828 28.50581123 6.9929828 28.50581123 0 0-7.8716624-6.3812432-14.2529056-14.2529056-14.2529056zm83.8372107-44.343877c.579899 0 1.05732.43876095 1.118399 1.00241886l.006601.12258114v17.2516747c0 .6213203-.50368 1.125-1.125 1.125-5.5599533 0-10.0113363 3.8965715-10.0113363 8.6233253 0 4.7267556 4.4513827 8.6233275 10.0113363 8.6233275.579899 0 1.05732.4387609 1.118399 1.0024188l.006601.1225812v17.2516725c0 .579899-.438761 1.0573199-1.002419 1.1183987l-.122581.0066013h-59.1769428c-.6213204 0-1.125-.5036797-1.125-1.125 0-.579899.4387609-1.0573199 1.0024188-1.1183987l.1225812-.0066013 58.0519398-.001v-15.047l-.104604-.0077284c-6.0686844-.5363362-10.8719712-5.0001862-11.0278251-10.5413299l-.0039042-.2779417c0-5.6691977 4.8619005-10.2739944 11.0317293-10.8192694l.104604-.0087306v-15.048l-56.1395437.00073624-.0559684.01043813-.0569038.00763849-.1225811.00660135-25.125003-.00041421.000003 18.4314452c0 .579899-.438761 1.0573199-1.0024189 1.1183987l-.1225811.0066013c-.579899 0-1.0573199-.4387609-1.1183987-1.0024188l-.0066013-.1225812v-19.55603099c0-.57989899.4387609-1.05731986 1.0024188-1.11839865l.1225812-.00660135 26.0145466.00026377.1128722-.01807663.1225812-.00660135zm-83.8372107 28.8901612c-3.6251711 0-6.5639528 2.9387818-6.5639528 6.5639528 0 3.6251711 2.9387817 6.5639528 6.5639528 6.5639528 3.625171 0 6.5639528-2.9387817 6.5639528-6.5639528 0-3.625171-2.9387818-6.5639528-6.5639528-6.5639528z" fill="#0f1031"/></g></svg>
|
|
common/src/resources/images/logo/event-aggregator.svg
DELETED
@@ -1 +0,0 @@
|
|
1 |
-
<svg height="66" viewBox="0 0 61 66" width="61" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd" transform="translate(-.416667 -.5)"><path d="m40.8675453 32.7054452c0 6.3505556-5.1485926 11.5-11.5 11.5s-11.5-5.1494444-11.5-11.5c0-6.3514074 5.1485926-11.5 11.5-11.5s11.5 5.1485926 11.5 11.5z" fill="#3d54ff"/><path d="m25.4572683 46.6690582c.5417718.2067997.8313352.7869677.6873903 1.3353477l-.0375468.1168758-3.6053197 9.4451814c.6114218.4460757 1.1178676 1.0533201 1.4477892 1.794239.9754446 2.1916322.0497319 4.7463892-2.067823 5.8173411l-.2019909.0959983c-2.2599403 1.0058468-4.9062357-.0100622-5.9129688-2.2694674-1.0060164-2.2603211.0103415-4.9075209 2.2695237-5.9135055.7726638-.3438947 1.5905744-.4514296 2.3726833-.3537496l3.5960391-9.4184173.0498814-.1121676c.2580709-.504817.8605704-.7444757 1.4023422-.5376759zm-6.5058688 12.4775234c-1.1239812.5004943-1.6297932 1.8179292-1.1291977 2.9426689.5009821 1.1243509 1.8177701 1.6298639 2.9426689 1.1291976 1.1243509-.5009821 1.6298639-1.8177701 1.1291976-2.9426688-.5004943-1.1239812-1.8179291-1.6297932-2.9426688-1.1291977zm23.9143274-17.7047718.1124491.0625458.1067333.0766707 3.5255349 2.8532991c.2661032-.2004134.5588805-.3740724.8761726-.5153584 2.2600746-1.0059066 4.9072744.0104512 5.913259 2.2696335 1.0059272 2.2601207-.0099818 4.9064161-2.2698139 5.9133393-2.2599403 1.0058469-4.9062357-.0100621-5.9129688-2.2694673-.535669-1.2035429-.4979555-2.5167734-.0045438-3.6335217l-3.5433915-2.8691685-.0911194-.0822616c-.3996568-.4021384-.4402686-1.0492802-.0753829-1.4999922.3350992-.4139191.903427-.5278186 1.3630714-.3057187zm5.5359671 4.5326702c-1.1239812.5004943-1.6297932 1.8179292-1.1291977 2.9426689.5009821 1.1243509 1.8177701 1.6298639 2.9426689 1.1291976 1.1243509-.5009821 1.6298639-1.8177701 1.1291976-2.9426688-.5004943-1.1239812-1.8179291-1.6297932-2.9426688-1.1291977zm-19.0341487-25.8940348c6.9727277 0 12.625 5.6522723 12.625 12.625 0 6.9721573-5.6525536 12.625-12.625 12.625-6.9724465 0-12.625-5.6528427-12.625-12.625 0-6.9727277 5.6522722-12.625 12.625-12.625zm0 2.25c-5.7300871 0-10.375 4.644913-10.375 10.375 0 5.7295423 4.64522 10.375 10.375 10.375s10.375-4.6454577 10.375-10.375c0-5.730087-4.644913-10.375-10.375-10.375zm-20.03375364 7.3223853c.1294572.2908649.22542824.5881257.28957122.887465l4.19648672.2453153.1219871.0137426c.5591337.0938637.96929.5960725.9354533 1.1749835-.0338366.578911-.4997072 1.0299171-1.0659686 1.0580028l-.1227575-.0005624-4.16436799-.2440202c-.36687077 1.1944044-1.2288906 2.2297647-2.46021815 2.7784127-2.25994032 1.0058469-4.90623569-.0100621-5.91296887-2.2694674-1.0060164-2.260321.01034148-4.9075208 2.26952373-5.9135054 2.26007461-1.0059067 4.90727442.0104512 5.91325904 2.2696335zm-4.99818188-.2141205c-1.12398116.5004943-1.62979311 1.8179291-1.12919764 2.9426689.47920027 1.075466 1.70480895 1.5847364 2.79493754 1.1888276l.1473045-.0594399c1.12477773-.5011722 1.63029074-1.8179602 1.12962447-2.942859-.50049428-1.1239811-1.81792915-1.6297931-2.94266887-1.1291976zm56.12806832-15.3831417c.9754445 2.1916322.0497319 4.7463892-2.067823 5.8173411l-.2019909.0959983c-1.7598415.7832644-3.7539654.3405532-5.0257254-.9606363l-.1035332.0693546-9.8360809 5.7953494-.1089637.0565387c-.5166383.2335075-1.1370176.0449039-1.4313935-.4547217-.2943758-.4996255-.1587056-1.1336882.2959214-1.4724434l.1022616-.0679138 9.8360809-5.7953494.1336737-.0673528c-.5856888-2.1014067.4409857-4.3714777 2.494314-5.2857982 2.2600746-1.0059066 4.9072744.0104513 5.913259 2.2696335zm-33.269029-10.45292895c.9754445 2.19163222.0497318 4.74638918-2.067823 5.81734107l-.0622371.02981376 2.1739678 7.80431992.027911.1284187c.087519.5564266-.254024 1.1023807-.8098092 1.2571805-.5586354.1555936-1.1362749-.1389814-1.34635-.6655831l-.0392492-.1163151-2.2171364-7.96070198c-1.6213732-.09168051-3.1355056-1.06489344-3.8420567-2.65060179-1.0060164-2.26032104.0103415-4.90752085 2.2695238-5.91350546 2.2600746-1.00590664 4.9072744.01045124 5.913259 2.26963348zm28.2708471 10.23880845c-1.1239811.5004943-1.6297931 1.8179292-1.1291976 2.9426689.5009821 1.1243509 1.8177701 1.6298639 2.9426689 1.1291976 1.1243509-.5009821 1.6298639-1.8177701 1.1291976-2.9426688-.5004943-1.1239812-1.8179291-1.6297932-2.9426689-1.1291977zm-33.269029-10.45292892c-1.1239811.50049428-1.6297931 1.81792915-1.1291976 2.94266886.5009821 1.12435091 1.8177701 1.62986391 2.9426688 1.12919765 1.124351-.50098211 1.629864-1.81777009 1.1291977-2.94266887-.5004943-1.12398116-1.8179292-1.62979312-2.9426689-1.12919764z" fill="#0f1031" fill-rule="nonzero"/></g></svg>
|
|
common/src/resources/images/logo/event-tickets-plus.svg
DELETED
@@ -1 +0,0 @@
|
|
1 |
-
<svg height="67" viewBox="0 0 76 67" width="76" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd" transform="translate(-.25 -.5)"><path d="m55.4232228 54.6290323c5.5258264-2.2808563 15.9120306-9.7902273 20.0122611-15.9354839 0 0-2.7593983-2.4560374-8.2781947-7.3681122-1.4362714 1.8251315-3.6822418 3.0006262-6.20824 3.0006262-4.3367349 0-7.8530952-3.4641902-7.8530952-7.7365836 0-2.1366012 2.3001694-5.4713494 2.3001694-5.4713494l-7.0245087-6.7471617c-1.8842759 2.7470879-5.7718154 7.2560065-10.7362338 10.8903476-2.2856982 1.6733093-4.7996765 3.161223-7.4515194 4.2064266" fill="#3d54ff"/><path d="m13.3613573 1.0892253.1022508.08390325 7.8582716 7.24963971c.4559776.42066164.4853575 1.13105276.0656727 1.58792954-.910328.991-1.424321 2.286368-1.424321 3.6651578 0 2.9852928 2.4020202 5.4026907 5.3614752 5.4026907 1.5287566 0 2.9516941-.6462975 3.9614119-1.7622393.4197125-.463867 1.1372283-.4962526 1.5970231-.072083l4.0314611 3.7191016c.4566752.4212918.4853591 1.1330246.0640673 1.5896998-.4212917.4566751-1.1330246.4853591-1.5896998.0640673l-3.2589702-3.0070927-.0126383.0117496c-1.2619098 1.0300574-2.8302025 1.6368713-4.49745 1.7011159l-.2952051.0056808c-4.2053213 0-7.6114752-3.4279601-7.6114752-7.6526907 0-1.5148196.4409717-2.9627855 1.243144-4.19142417l.0756246-.11243143-6.252-5.768-.0507102.05898686c-6.19704059 7.12997144-9.73706645 14.65255774-10.05665616 21.21398004l-.0160203.4174958c-.1592231 5.6718615 2.12909135 8.2677919 6.17951953 8.8717275 8.72286193 1.2990644 17.62526753-2.2088685 27.36705703-9.4259677l.4863378-.3625488c5.0243311-3.9405374 8.425436-7.1914804 10.7128826-10.6298395.3602938-.5415732 1.095183-.6593421 1.6042454-.2825743l.0986236.0819683 7.2550676 6.7483797c.4771371.4438142.4785815 1.1989054.0031458 1.6445418l-.1895585.1829126c-1.2594567 1.2796322-1.979765 3.0088312-1.979765 4.8571816 0 3.7916451 3.0209663 6.8590103 6.7384935 6.8590103 2.1062854 0 4.0500404-.9898481 5.3208086-2.654282.3763367-.4929205 1.0727727-.5828034 1.5595119-.2246501l.1008986.0836213 7.2394458 6.7341866c.3996899.3717945.4747985.9768687.1781409 1.4351016-5.848702 9.0342139-21.0855424 18.0715836-29.43311 18.8938765-7.46882.7357302-12.5693608-.3149189-18.3679456-4.2136769l-.4029883-.2747061-.4260156-.2977198c-4.1531035-2.9353506-11.3263271-8.9208233-21.55414966-17.9798245-3.11510435-1.6244837-4.8853553-4.9234439-4.7397635-10.1097296.2105659-7.5310454 4.29433312-16.07185364 11.45926996-23.98646606.3897776-.43056042 1.036169-.48914899 1.4945915-.15575984zm35.1566427 14.9847747-.0393128.0560283c-2.314865 3.1347987-5.4846329 6.1236048-9.8686821 9.5986992l-.5502373.4334376c-9.8583677 7.410401-18.9952143 11.2655479-28.12070087 10.4039234l1.93687507 1.6930889c8.0436058 7.0064779 13.6881454 11.6008732 16.909901 13.7670648 5.3327096 3.5855203 9.9135694 4.5291214 16.8919426 3.8417036 7.3555009-.7245674 21.0878558-8.7179968 27.0345947-16.8205865l.2006197-.2803593-5.686-5.289-.1740108.1710426c-1.5664239 1.4792858-3.6183085 2.3612657-5.8192988 2.4351632l-.3010277.0050484c-4.9679092 0-8.9884935-4.0823364-8.9884935-9.1090103 0-2.1250345.7227329-4.1372324 2.0097166-5.7420408l.0501142-.0612031z" fill="#0f1031" fill-rule="nonzero"/><g fill="#fff"><path d="m56.5487652 43.6984442c-.9436647 1.022274-.8778888 2.6138383.146461 3.5556596 1.0252269.9418213 2.6222656.8753604 3.5659303-.1469136.9445418-1.022274.8787659-2.6138383-.1464609-3.5547851-1.0252269-.9409468-2.6213886-.8762349-3.5659304.1460391"/><path d="m48.9787884 36.9891838c-.9445526 1.022204-.8778989 2.6136593.1464626 3.5545417 1.0252386.9426313 2.6222954.8761749 3.5659709-.1460291.9445525-1.022204.8778988-2.6136594-.1473397-3.5554162-1.0252386-.9408824-2.6214183-.8753005-3.5650938.1469036"/><path d="m41.4081051 30.2796268c-.9436648 1.0223556-.8778889 2.6140471.146461 3.555069 1.0252269.9418965 2.6222655.8754303 3.5659303-.1469253.9445418-1.0214811.8787659-2.6140471-.146461-3.5550691s-2.6213885-.8754303-3.5659303.1469254"/></g><g fill-rule="nonzero" transform="translate(14.508153 41.717014)"><path d="m24.8571858 12.4286363c0 6.8638264-5.5641157 12.4279421-12.4288098 12.4279421-6.8638265 0-12.42794218-5.5641157-12.42794218-12.4279421 0-6.86382651 5.56411568-12.42880983 12.42794218-12.42880983 6.8646941 0 12.4288098 5.56498332 12.4288098 12.42880983" fill="#ffcf48"/><path d="m11.8486251 12.5235551-4.34596214-.1240712 9.85888764-9.06760848-4.3147275 8.10367078 4.3459622.1240712-9.24981088 9.8215795z" fill="#161b7d"/></g></g></svg>
|
|
common/src/resources/images/logo/event-tickets.svg
DELETED
@@ -1 +0,0 @@
|
|
1 |
-
<svg height="68" viewBox="0 0 88 68" width="88" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd" transform="translate(-.166667 -.5)"><path d="m64.6649022 63.5660377c6.4641742-2.6681714 18.6140735-11.4527187 23.4105695-18.6415094 0 0-3.2279753-2.8731004-9.6839258-8.6193011-1.6801666 2.1350595-4.3075282 3.5101665-7.2624695 3.5101665-5.0731616 0-9.1866396-4.0524489-9.1866396-9.050343 0-2.4994203 2.6907641-6.4004465 2.6907641-6.4004465l-8.2173497-7.8929061c-2.2042474 3.2135745-6.751935 8.4881585-12.5593679 12.7396519-2.6738357 1.9574561-5.6147159 3.6980344-8.7168717 4.9207255" fill="#3d54ff"/><path d="m15.348282 1.0892253.1022508.08390325 9.1926951 8.48071061c.4559776.42066164.4853575 1.13105274.0656726 1.58792954-1.0970094 1.1942249-1.7165355 2.7555581-1.7165355 4.4167794 0 3.5974646 2.8951671 6.5111664 6.4629522 6.5111664 1.8429507 0 3.5587617-.7793205 4.7757622-2.1243515.4197125-.463867 1.1372283-.4962526 1.5970231-.072083l4.7160488 4.3506471c.4566752.4212918.4853591 1.1330246.0640674 1.5896998-.4212918.4566752-1.1330246.4853591-1.5896998.0640674l-3.9365189-3.6306943-.0562788.0490947c-1.4657196 1.2274603-3.3042235 1.9490629-5.2605658 2.0181545l-.3098382.0054653c-4.8136514 0-8.7129522-3.924264-8.7129522-8.7611664 0-1.7840454.5340713-3.4868239 1.5029229-4.9187234l.1007121-.1438247-7.58-6.993-.105346.12083894c-7.34172891 8.41571886-11.5336549 17.31110346-11.89698278 25.07431636l-.01670869.44661c-.18903315 6.7337583 2.5597919 9.8521053 7.39169417 10.572562 10.2814553 1.5311801 20.7559781-2.6049464 32.2099273-11.101918l.5193244-.3874329c5.8923371-4.6213066 9.8832538-8.4360208 12.5732117-12.4794118.3602939-.5415732 1.095183-.6593422 1.6042454-.2825744l.0986236.0819684 8.4870602 7.894331c.4771371.4438142.4785815 1.1989053.0031458 1.6445417l-.2272554.2193483c-1.5082155 1.5323759-2.3708361 3.6032151-2.3708361 5.8159925 0 4.5403703 3.6188338 8.2147856 8.0738037 8.2147856 2.5243536 0 4.8539727-1.1863475 6.3761839-3.1801181.3763367-.4929204 1.0727728-.5828034 1.559512-.2246501l.1008985.0836213 8.4687858 7.8777278c.3996898.3717945.4747984.9768687.1781408 1.4351016-6.8098013 10.5187785-24.581548 21.0596676-34.2895482 22.0159725-8.5143128.8387184-14.3700386-.3134778-20.9412654-4.61854l-.4204443-.2790843c-4.4736588-3.0079258-12.6764804-9.7812113-24.64715891-20.3459864l-1.52977053-1.3525177c-3.59672521-1.8638994-5.63597739-5.6615045-5.46739593-11.6667304.24490965-8.7593749 5.0024832-18.7093846 13.35584547-27.93676876.3897776-.43056042 1.036169-.48914899 1.4945915-.15575984zm41.211718 17.0877747-.1111948.1555625c-2.7082981 3.6907788-6.4351558 7.2078569-11.6112495 11.3078604l-.5994071.4720449-1.0954571.8127036c-11.2935589 8.2666706-21.7845075 12.4501927-32.2619309 11.2585712l2.6481662 2.3167518c8.9378418 7.7875315 15.3533522 13.0383268 19.2256987 15.7386487l.6429751.4406562c6.2778195 4.220978 11.680685 5.3339022 19.8857066 4.5256511 8.713033-.8582937 24.9744624-10.3494585 31.8920653-19.9346036l.2026275-.2858468-6.91-6.428-.0547173.0581293c-1.8332265 1.8638339-4.3067442 2.9801038-6.969569 3.0664232l-.3338064.0054052c-5.7053519 0-10.3238037-4.6893864-10.3238037-10.4647856 0-2.4571896.8407531-4.7826815 2.3367599-6.6320772l.1451365-.1730949z" fill="#0f1031" fill-rule="nonzero"/><g fill="#fff"><path d="m65.9815744 50.7793121c-1.1039097 1.1958677-1.0269643 3.0576976.1713318 4.1594508 1.199322 1.1017532 3.0675559 1.0240065 4.1714656-.1718612 1.1049357-1.1958677 1.0279903-3.0576976-.1713317-4.1584278-1.199322-1.1007303-3.06653-1.0250295-4.1714657.1708382"/><path d="m57.1261298 42.9307433c-1.1049482 1.1957858-1.026976 3.0574883.1713337 4.1581432 1.1993356 1.1027007 3.0675907 1.0249593 4.171513-.1708266 1.1049483-1.1957858 1.0269761-3.0574883-.1723596-4.1591661-1.1993356-1.1006549-3.0665648-1.0239364-4.1704871.1718495"/><path d="m48.2698588 35.0818275c-1.1039098 1.1959633-1.0269644 3.0579419.1713317 4.1587601 1.199322 1.1018412 3.0675559 1.0240882 4.1714656-.171875 1.1049357-1.1949401 1.0279903-3.0579419-.1713317-4.15876-1.199322-1.1008182-3.0665299-1.0240883-4.1714656.1718749"/></g></g></svg>
|
|
common/src/resources/images/logo/eventbrite-tickets.svg
DELETED
@@ -1 +0,0 @@
|
|
1 |
-
<svg height="66" viewBox="0 0 81 66" width="81" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd" transform="translate(1.333333 1)"><path d="m54.5205941 1.74658203h17.5v13.80133977c-4.8628341 0-8.80494 3.4915795-8.80494 7.7986611 0 4.2242531 3.7919443 7.664068 8.5254349 7.7948063l.2795051.0031928v13.8020017h-17.5z" fill="#3d54ff" fill-rule="nonzero" transform="matrix(.93969262 -.34202014 .34202014 .93969262 -4.169318 23.047789)"/><path d="m72.6465025 9.30087199c.579899 0 1.0573199.43876094 1.1183986 1.00241881l.0066014.1225812v13.8013397c0 .6213204-.5036797 1.125-1.125 1.125-3.6857613 0-6.6736611 2.9878999-6.6736611 6.6736611 0 3.6857613 2.9878998 6.6736612 6.6736611 6.6736612.579899 0 1.0573199.4387609 1.1183986 1.0024188l.0066014.1225812v13.8013397c0 .579899-.438761 1.0573199-1.0024189 1.1183987l-.1225811.0066013h-50.2773957c-.6213203 0-1.125-.5036797-1.125-1.125 0-.579899.438761-1.0573199 1.0024189-1.1183987l.1225811-.0066013 49.1518932-.0008737v-11.622l-.1701087-.0218364c-4.2297842-.6152037-7.4977173-4.1974481-7.6242454-8.5671793l-.0038045-.2631115c0-4.488366 3.31367-8.202783 7.6280499-8.8302907l.1701087-.0225821v-11.623l-15.3100763.000872c-.579899 0-1.0573199-.438761-1.1183987-1.0024189l-.0066013-.1225811c0-.579899.4387609-1.05731988 1.0024188-1.11839867l.1225812-.00660134zm-24.2266765 0c.6213204 0 1.125.50367965 1.125 1.12500001 0 .579899-.4387609 1.0573199-1.0024188 1.1183986l-.1225812.0066014-41.648826-.000872v11.623l.17111373.0225821c4.22978417.6152037 7.49771727 4.1974481 7.62424527 8.5671793l.0038046.2631114c0 4.4883661-3.31367 8.2027831-7.62804987 8.8302908l-.17111373.0218364v11.622l7.85006.0008737c.5798989 0 1.0573198.4387609 1.1183986 1.0024189l.0066014.1225811c0 .579899-.438761 1.0573199-1.0024189 1.1183987l-.1225811.0066013h-8.97455751c-.57989898 0-1.05731986-.4387609-1.11839865-1.0024189l-.00660135-.1225811v-13.8013397c0-.6213204.50367966-1.125 1.125-1.125 3.68576126 0 6.67366111-2.9878999 6.67366111-6.6736612 0-3.6857612-2.98789985-6.6736611-6.67366111-6.6736611-.57989898 0-1.05731986-.4387609-1.11839865-1.0024188l-.00660135-.1225812v-13.8013397c0-.579899.43876095-1.05731988 1.00241886-1.11839867l.12258114-.00660134z" fill="#0f1031" fill-rule="nonzero" transform="matrix(.93969262 -.34202014 .34202014 .93969262 -8.592671 15.320289)"/><path d="m39.4227214 29.0818054c-.0138535-.027535-.0151129-.0362961-.0201506-.0425541-.0176317-.021277-.0365228-.0425541-.0566734-.0625795-1.6246378-1.6345771-3.5880567-2.3567447-5.8889972-2.1639998-.6221481.0513152-1.2228863.207764-1.8059927.4280439-2.6548346 1.0125366-4.4469738 3.4869309-4.5705172 6.3092672-.0011381.0300382.0076778.0600764.0139748.1026305 4.1144897-1.5244372 8.2163854-3.0463711 12.3283563-4.5708082m7.7327723 2.7272155c-6.0804275 2.2541143-12.1532985 4.5057255-18.2450606 6.7648461.0377823.0450573.0617111.0775986.0919369.1088884.7405326.782244 1.6183408 1.3679883 2.6271275 1.7572329.7909089.3066397 1.6145625.4643401 2.4634043.4781076.541546.0087611 1.0805731-.0362961 1.6082655-.1602036 2.135958-.5031393 3.7379264-1.7046661 4.7870142-3.6246058.0642299-.1176495.0629705-.1189011.2052837-.1051336 1.9898665.186487 3.9809924.3729739 5.9721183.5619641.0264476.0025032.0541546.0100127.0931963.0175222-.0138535.0500637-.0251882.0951209-.0390417.1389266-1.1737694 3.7322426-3.9507666 6.7247952-7.6068314 8.1979171-.5717717.2290411-1.157397.4180312-1.7568757.5669705-.5516213.1351718-1.1082801.2428085-1.6750142.3041365-.4244209.0463088-.8501012.0750954-1.2783003.0813533-1.0113056.0175223-2.0100171-.0813533-2.9973938-.2966269-1.8702226-.4067669-3.5754626-1.1777466-5.1056448-2.3217002-1.9394901-1.4518449-3.3638819-3.2991923-4.2794723-5.5332812-.2556601-.6245436-.4596844-1.2653579-.6158511-1.9211913-.1372756-.5819895-.2392877-1.1714886-.2921829-1.7672456-.1964679-2.1752641.1146062-4.2791876.9835985-6.285487 1.4067601-3.2428708 3.7530393-5.5620678 7.0174279-6.9600943.5553994-.2365506 1.1284306-.4242891 1.7140559-.5782348.6473363-.1702163 1.3034884-.3041364 1.9709753-.3667159 3.3966265-.3216588 6.4846978.5056425 9.2327286 2.5156967 2.1132885 1.5469657 3.5993914 3.572039 4.5023877 6.0176467.2266937.6082729.4042704 1.2328165.5264331 1.8723792.0289664.1414297.0541546.284111.0806021.4255407.0062971.033793.0088159.0700891.015113.1113916" fill="#3d54ff" transform="matrix(.93969262 -.34202014 .34202014 .93969262 -9.5202 13.706105)"/></g></svg>
|
|
common/src/resources/images/logo/events-calendar-pro.svg
DELETED
@@ -1 +0,0 @@
|
|
1 |
-
<svg height="67" viewBox="0 0 65 67" width="65" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd" transform="translate(-.083333 .5)"><path d="m57.719639 22.0140549.098758-5.1993865c.0608-3.5807998-2.8287999-6.5143996-6.4095996-6.5088942l-38.0199978.0632946c-3.50959977.0048-6.3607996 2.8375998-6.3887996 6.3487996l.00535317 4.9246862z" fill="#3d54ff" transform="matrix(.93969262 -.34202014 .34202014 .93969262 -3.572474 12.059322)"/><path d="m41.8709796.79985313.0481285.1129308 1.3111163 3.60546649 4.1279014-1.50998336c3.8782903-1.41839592 8.1584347.55468219 9.616637 4.38629145l.0827741.22742014 6.0734585 17.60866845c4.6744103 12.7791106-1.8951829 26.9283747-14.6738058 31.6026067-.583509.213439-1.2295631-.0865621-1.443002-.6700711-.213439-.583509.086562-1.229563.670071-1.443002 7.4211035-2.7145302 12.5376777-8.9458645 14.1535005-16.1264745-2.3270203 1.7997797-5.9765636 2.7982696-10.4020816 2.6781539l-.276107-.009373-.0307752.0622619-.1034889.220136c-.1261403.2806233-.2734198.6497602-.4652347 1.162224l-1.1002072 3.0042827-.1059195.2813519c-.4660805 1.2319987-.9137948 2.3311881-1.3946775 3.3995043-2.2610539 5.0230972-4.9595444 8.6769799-8.5585351 10.7270504-.0985038.0561101-.2019039.0957121-.3070022.1196829-.0571177.0338609-.1187813.0631161-.1839852.0869694l-15.223439 5.5690151c-1.0578999.375541-2.2154057-.1372418-2.6576538-1.1504499l-.0557966-.1412301-13.82607143-38.9480742c-1.3533538-3.8126351.55073319-7.9962152 4.27544303-9.4954516l.230306-.08841 3.9036912-1.4280995-1.2843148-3.5297097c-.2125041-.5838502.0885314-1.22942281.6723815-1.44192688.5449268-.19833714 1.1436208.05067573 1.3937984.55945078l.0481285.1129308 1.2830064 3.526255 23.449-8.57899998-1.3134247-3.60892117c-.2125041-.58385014.0885314-1.22942278.6723815-1.44192686.5449268-.19833713 1.1436208.05067573 1.3937984.55945074zm6.4634105 4.25171422-.2033115.06978459-4.1308542 1.51089848 1.2939383 3.55341978c.212504.5838501-.0885314 1.2294227-.6723816 1.4419268-.5449268.1983372-1.1436207-.0506757-1.3937984-.5594507l-.0481284-.1129308-1.2926299-3.54996508-23.448 8.57899998 1.3220481 3.6326312c.2125041.5838501-.0885314 1.2294228-.6723815 1.4419268-.5449268.1983372-1.1436208-.0506757-1.3937984-.5594507l-.0481285-.1129308-1.3217397-3.6291765-3.8999427 1.4272393c-2.64705304.9675505-4.05305717 3.8383997-3.22792268 6.5077585l.06979557.2102819 13.78375191 38.8290254 15.0858328-5.5186506c.0447842-.0163832.0899369-.0297419.1352342-.04018.0046574-.0024847.0098658-.0055062.0151073-.0084919 3.0983222-1.7648778 5.5370009-5.0669632 7.6204642-9.6955298.4600522-1.0220397.8910022-2.080071 1.3419601-3.2720957l.4286631-1.1546435.6018315-1.6563671.3670011-.9898645c.8076951-2.13374 1.0996628-2.4593581 2.1515156-2.4017858 7.1725442.3942944 11.6769292-2.256562 11.558089-5.9063904-.0021749-.0667957.0015189-.1324207.0106168-.1963791-.076918-2.1824594-.4781874-4.389684-1.2316975-6.5579058l-.1245728-.3493103-6.0807328-17.62826323c-.9387889-2.72223528-3.8789619-4.1762194-6.595829-3.30413042z" fill="#0f1031" fill-rule="nonzero"/><path d="m28.3550086 43.5878639c1.4327742-.5240411 3.0176537.2118795 3.5414213 1.6439019.5247929 1.4325005-.2118795 3.0176537-1.6439019 3.5414212-1.4317488.5245193-3.0176537-.2118795-3.5414212-1.6439018-.5237676-1.4320224.2118795-3.0176537 1.6439018-3.5414213zm12.6184789-4.6169544c1.4327741-.5240411 3.0179273.2126313 3.5416948 1.6446536.5240412 1.4327742-.2118795 3.0176537-1.6439018 3.5414213-1.4320224.5237675-3.0176537-.2118795-3.5414213-1.6439019-.5245193-1.4317487.2118795-3.0176537 1.6436283-3.542173zm-16.7622262-6.1826679c1.4327754-.5240379 3.0179285.2126345 3.5421775 1.6436303.5240379 1.4327753-.2126345 3.0179285-1.6443821 3.5424511-1.4320236.5237642-3.0179285-.2126346-3.5416993-1.6446557-.5237643-1.4320236.2118828-3.0176549 1.6439039-3.5414257zm12.3700116-4.525554c1.4327742-.5240411 3.0179273.2126313 3.5416949 1.6446536.5240411 1.4327742-.2126313 3.0179273-1.6446537 3.5416949-1.4320223.5237675-3.0179272-.2126313-3.5416948-1.6446536-.5237675-1.4320224.2126312-3.0179273 1.6446536-3.5416949zm12.3693065-4.5253861c1.4327741-.5240412 3.0179273.2126312 3.5416948 1.6446536.5240412 1.4327741-.2126312 3.0179273-1.6446536 3.5416948-1.4320224.5237676-3.0176537-.2118795-3.5414212-1.6439018-.5237676-1.4320224.2126312-3.0179273 1.64438-3.5424466z" fill="#334aff"/><g fill-rule="nonzero" transform="translate(.841539 37.606341)"><path d="m23.709931 11.8550069c0 6.5470345-5.3073103 11.8543448-11.8551724 11.8543448-6.54703446 0-11.85434481-5.3073103-11.85434481-11.8543448 0-6.54703449 5.30731035-11.85517242 11.85434481-11.85517242 6.5478621 0 11.8551724 5.30813793 11.8551724 11.85517242" fill="#ffcf48"/><path d="m11.3017655 11.9455448-4.14537929-.1183448 9.40386209-8.64910345-4.1155862 7.72965515 4.1453793.1183449-8.82289657 9.3682758z" fill="#161b7d"/></g></g></svg>
|
|
common/src/resources/images/logo/filterbar.svg
DELETED
@@ -1 +0,0 @@
|
|
1 |
-
<svg height="68" viewBox="0 0 68 68" width="68" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd" transform="translate(.25 .5)"><path d="m0 2.2037037 9.54577706 10.8333333h47.77430774l8.8836189-10.8333333z"/><path d="m0 2.2037037 9.54577706 10.8333333h47.77430774l8.8836189-10.8333333z"/><g transform="translate(.203704)"><path d="m43.1948338 43.5825617-18.8208527 15.5568205-.7102561 6.711698h20.5013253v-13.2104372z" fill="#3d54ff" transform="matrix(1 0 0 -1 0 109.433642)"/><path d="m65.0532859.22857154c1.5060415 0 2.3602503 1.69094636 1.5076349 2.91436363l-.0878749.11686326-22.1940459 26.12720157.000143 35.6586541c0 1.4854715-1.6382186 2.3248218-2.8288362 1.5671454l-.1174925-.0811263-.114045-.0919845-17.5813789-15.2951001c-.3597268-.3116105-.5828067-.7494026-.627939-1.218433l-.0085026-.1771653-.0009488-20.3629903-22.20828245-26.1458779c-.91679441-1.1303931-.22353585-2.78135563 1.14304687-2.98967799l.14373409-.01632393.14830738-.00554864zm-.8692859 2.24942846h-61.089l7.3045402 8.5978116.0363615-.0045395.1225812-.0066014h38.3762249c.6213204 0 1.125.5036797 1.125 1.125 0 .579899-.4387609 1.0573199-1.0024188 1.1183987l-.1225812.0066013-36.6343787-.0000992 12.5370751 14.7587418c.1911732.2352902.320234.5128597.378377.807015l.0263052.178278.0088624.1810253-.0009488 20.3253684 16.779 14.597.000143-34.9223684c0-.3198466.0827727-.6326301.2435943-.9145186l.0868931-.1382594.09977-.1324481z" fill="#0f1031" fill-rule="nonzero"/><path d="m25.009627 43.490743h17.847279" stroke="#0f1031" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.25"/></g></g></svg>
|
|
common/src/resources/images/logo/image-widget-plus.svg
DELETED
@@ -1 +0,0 @@
|
|
1 |
-
<svg height="67" viewBox="0 0 91 67" width="91" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd" transform="translate(.083333 -.5)"><path d="m55.7078071 53.8617021 15.0717717-11.540375c.7023576-.5377914 1.6745762-.550297 2.3905343-.0307493l15.9454856 11.5711243v6.8151261c-.4969459 2.2538176-1.0608695 3.6961769-1.6917706 4.327078-.6309011.6309012-1.944205 1.0657693-3.9399118 1.3046044h-14.8770184z" fill="#3d54ff"/><path d="m84.1155987.875c3.307572 0 6.0028057 2.62173207 6.1209605 5.90045566l.0040395.22454434v54.3085106c0 3.307572-2.6217321 6.0028057-5.9004556 6.1209605l-.2245444.0040395h-77.1155987c-3.307572 0-6.00280567-2.621732-6.12096046-5.9004556l-.00403954-.2245444v-54.3085106c0-3.307572 2.62173207-6.00280567 5.90045566-6.12096046l.22454434-.00403954zm-52.8120625 33.9700069-.1317052.097278-28.046831 22.6507151v3.7155106c0 2.0732252 1.62815979 3.7661733 3.67559301 3.8699579l.19940699.0050421 58.764-.0005106-32.1310826-30.1493436c-.6424102-.6028009-1.6106146-.6728028-2.3293812-.1886495zm52.8120625-31.7200069h-77.1155987c-2.07322517 0-3.76617325 1.62815979-3.86995787 3.67559301l-.00504213.19940699v47.701l26.6331306-21.5091297c1.5447682-1.2476127 3.7486049-1.2123979 5.2504736.0551141l.1639164.1459033 33.8784794 31.7906229h15.0645987c2.0732252 0 3.7661733-1.6281598 3.8699579-3.675593l.0050421-.199407v-54.3085106c0-2.07322517-1.6281598-3.76617325-3.675593-3.86995787zm-27.3117019 13.2835199c4.4182781 0 8 3.581722 8 8s-3.5817219 8-8 8c-4.4182779 0-8-3.581722-8-8s3.5817221-8 8-8zm.0000001 2.25c-3.1756374 0-5.7500001 2.5743627-5.7500001 5.75s2.5743627 5.75 5.7500001 5.75c3.1756373 0 5.7499999-2.5743627 5.7499999-5.75 0-3.1756374-2.5743626-5.75-5.7499999-5.75z" fill="#0f1031" fill-rule="nonzero"/></g></svg>
|
|
common/src/resources/images/logo/promoter.svg
DELETED
@@ -1 +0,0 @@
|
|
1 |
-
<svg height="68" viewBox="0 0 69 68" width="69" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd" transform="translate(-.333333 -.5)"><path d="m2 2h32.6483832c1.2146253 0 2.2756467.81031839 2.579303 1.96979125l7.5354717 28.81968245h-33.9766577" fill="#3d54ff"/><path d="m42.0995814 15.6842105h22.7228536l-6.8033246 15.2525374 8.9808896 15.5369363h-33.0635728l-2.8574798-11.8309985" fill="#3d54ff"/><path d="m34.6483832.875c1.6575134 0 3.1172732 1.06612992 3.6129129 2.62127715l.0547999.18892801 2.8756685 10.99873884 25.1716846.0002665-7.2234491 16.1937895 9.5930777 16.5956842h-35.5656575l-3.6036557-13.5597402h-17.155l9.4876598 32.7732407c.1727631.5968181-.1710014 1.220687-.7678195 1.3934501-.5570302.1612456-1.1376247-.1274618-1.3530244-.651908l-.0404257-.1159115-18.8263256-65.03791046-.02319694-.11955349-.01064504-.13093739.00094996-.07729456.01239462-.12140511.02327021-.11105203.02776887-.09066835.04386668-.10608478.05268117-.09803882.06231218-.0926188.06231824-.0764367.09244251-.09202274.1184835-.09217454.07436852-.04589153.08342874-.04279676.10840036-.0432734.1268599-.03478587.13865084-.0209112.09681658-.00395877zm28.6326168 15.808944h-21.5662355l4.1368031 15.8209436-7.1165805 12.9671124 26.5310129.001-8.3680241-14.4775905zm-28.6326168-13.559h-31.15261869l8.26199999 28.539056h31.5472355l-7.165611-27.40919272c-.1618922-.61816467-.7059243-1.06660963-1.3512693-1.12365489z" fill="#0f1031" fill-rule="nonzero"/><path d="m24.2190974 12.6825928h-3.7176953l1.1608071 3.8478527h3.7048788c1.2248896 0 1.9105714-.7440115 1.5681882-1.8985424-.3497069-1.1790395-1.4867119-1.9493103-2.7161788-1.9493103zm-9.4512403-3.71830709h8.9578057c4.0225446 0 6.9804056 2.59003549 7.8885449 5.69387659.9008156 3.0767066-.5355458 5.6159743-4.5196409 5.6159743h-4.3035917l1.7485344 5.7954123h-4.5461894z" fill="#fff"/></g></svg>
|
|
common/src/resources/images/logo/tec-brand.svg
DELETED
@@ -1 +0,0 @@
|
|
1 |
-
<svg width="391" height="83" xmlns="http://www.w3.org/2000/svg"><g fill="#0F1031" fill-rule="evenodd"><path d="M36.274 53.661c-2.682 1.088-5.163 1.675-6.967 1.578-2.337-.13-3.335-1.161-3.339-1.549-.002-.276.87-1.14 3.56-1.336.421-.03.866-.05 1.325-.05 1.838 0 3.883.303 5.42 1.357m5.017 23.7c-9.832 2.712-20.223.21-26.474-6.378-4.424-4.662-5.907-10.497-4.07-16.007 3.694-11.087 21.402-17.742 32.718-17.742.122 0 .243.001.363.003 4.217.054 7.137 1.073 7.621 2.661.272.89-.37 2.445-1.716 4.16-2.374 3.03-5.983 5.773-9.653 7.786-2.327-2.553-6.06-3.714-10.833-3.37-5.314.385-7.187 2.964-7.168 5.25.02 2.49 2.436 5.145 7.013 5.4 2.77.15 6.08-.702 9.403-2.157.488 1.914.337 4.425-.46 7.42a1.946 1.946 0 003.758 1.001c1.085-4.068 1.165-7.48.245-10.19 4.34-2.436 8.351-5.671 10.757-8.738 2.257-2.878 3.056-5.468 2.376-7.697-.494-1.62-1.656-2.903-3.408-3.814.133-14.618 2.725-24.716 5.058-24.73h.014c.343 0 .806.077 1.375.642 1.895 1.884 4.153 8.069 4.153 26.836 0 18.518-1.585 34.284-21.072 39.664M22.728 34.17c-.002-.05.004-.097-.002-.147l-.026-.216c-.28-3.992.2-7.138 1.417-8.825.604-.838 1.363-1.286 2.387-1.412 1.428-.173 2.59.196 3.565 1.133 1.89 1.816 2.992 5.743 2.887 10.04-3.239.798-6.556 1.937-9.707 3.402a41.867 41.867 0 01-.52-3.976m16.758-6.778c.716-.78 1.63-1.159 2.796-1.159 1.853 0 2.658.606 3.103 1.062 1.064 1.09 1.638 3.205 1.717 6.284a25.888 25.888 0 00-3.62-.235c-1.757 0-3.67.152-5.669.443-.086-2.822.503-5.121 1.673-6.395m21.465-19.29c-1.167-1.16-2.592-1.774-4.122-1.774h-.034c-5.126.031-6.894 7.679-7.779 13.428-.259 1.688-.46 3.41-.615 5.076-.077-.085-.152-.173-.231-.255-1.448-1.482-3.429-2.234-5.888-2.234-2.252 0-4.21.835-5.662 2.417a8.55 8.55 0 00-1.091 1.534c-.642-1.688-1.539-3.216-2.764-4.395-1.822-1.75-4.15-2.508-6.737-2.19-2.085.256-3.837 1.292-5.068 2.997l-.014.023C18.815 12.097 14.762-.741 7.69-.007 5.95.176 4.413 1.113 3.244 2.7-2.21 10.116.35 32.17 2.721 44.03a1.947 1.947 0 002.29 1.526 1.945 1.945 0 001.525-2.29C2.564 23.407 3.45 8.987 6.38 5.007c.688-.935 1.31-1.1 1.719-1.144C12 3.456 16.81 17.095 18.84 34.31c.163 2.132.486 4.128.797 5.68.001.007.005.013.006.02-5.846 3.37-10.67 7.978-12.589 13.736-2.306 6.917-.505 14.177 4.94 19.915 5.316 5.602 13.159 8.665 21.392 8.665 2.962 0 5.976-.398 8.939-1.215 22.098-6.1 23.928-24.017 23.928-43.414 0-16.596-1.684-26-5.301-29.596M102.82 29.566H85.49a.375.375 0 00-.375.375v2.973c0 .207.168.375.375.375h6.618v19.186c0 .206.168.375.375.375h3.378a.376.376 0 00.375-.375V33.289h6.584a.375.375 0 00.375-.375v-2.973a.375.375 0 00-.375-.375M114.822 35.377c-1.917 0-3.924.8-5.402 2.146V29.94a.376.376 0 00-.375-.375h-3.04a.376.376 0 00-.375.375v22.534c0 .207.168.375.375.375h3.04a.375.375 0 00.375-.375V40.944c.808-1.055 2.388-2.114 4.118-2.114 2.177 0 3.105.939 3.105 3.138v10.507c0 .207.168.375.375.375h3.04a.376.376 0 00.376-.375v-11.52c0-3.649-1.94-5.578-5.612-5.578M131.824 38.627c2.857 0 4.343 2.053 4.565 4.114h-9.145c.314-2.061 1.84-4.114 4.58-4.114m0-3.25c-4.875 0-8.55 3.836-8.55 8.922 0 5.273 3.627 8.956 8.82 8.956 2.763 0 5.12-.878 6.816-2.539a.373.373 0 00.044-.485l-1.42-1.994a.376.376 0 00-.276-.157.393.393 0 00-.298.113c-1.087 1.118-2.835 1.812-4.561 1.812-3.276 0-4.797-2.306-5.117-4.317h12.481a.376.376 0 00.375-.375v-.744c0-5.412-3.419-9.192-8.314-9.192M164.3 29.566h-15.135a.376.376 0 00-.375.375v22.534c0 .206.169.375.375.375H164.3a.376.376 0 00.375-.375v-2.973a.375.375 0 00-.375-.375h-11.382V42.85h11.145a.376.376 0 00.375-.375v-2.973a.375.375 0 00-.375-.375h-11.145V33.29H164.3a.375.375 0 00.375-.375v-2.973a.375.375 0 00-.375-.375M183.119 35.783h-3.278a.374.374 0 00-.348.236l-4.753 11.93-4.752-11.93a.373.373 0 00-.349-.236h-3.243a.375.375 0 00-.346.517l6.722 16.318c.058.14.194.232.346.232h3.278a.374.374 0 00.346-.232l6.723-16.318a.374.374 0 00-.346-.517M192.484 38.627c2.857 0 4.344 2.053 4.565 4.114h-9.145c.314-2.061 1.84-4.114 4.58-4.114m0-3.25c-4.874 0-8.55 3.836-8.55 8.922 0 5.273 3.627 8.956 8.82 8.956 2.763 0 5.12-.878 6.817-2.539a.373.373 0 00.043-.485l-1.419-1.994a.376.376 0 00-.277-.157.394.394 0 00-.297.113c-1.088 1.118-2.836 1.812-4.562 1.812-3.277 0-4.798-2.306-5.117-4.317h12.481a.376.376 0 00.375-.375v-.744c0-5.412-3.418-9.192-8.314-9.192M212.797 35.377c-2.702 0-4.603 1.414-5.402 2.143v-1.362a.375.375 0 00-.375-.375h-3.04a.375.375 0 00-.375.375v16.317c0 .207.168.375.375.375h3.04a.375.375 0 00.375-.375V40.944c.808-1.055 2.388-2.114 4.118-2.114 2.147 0 3.105.988 3.105 3.206v10.439c0 .207.168.375.375.375h3.04a.376.376 0 00.376-.375V41.023c0-3.693-1.94-5.646-5.612-5.646M230.45 49.416a.373.373 0 00-.277-.247.389.389 0 00-.357.115c-.225.25-.751.519-1.377.519-1.125 0-1.212-1.239-1.212-1.619v-8.982h2.936a.376.376 0 00.375-.375v-2.67a.376.376 0 00-.375-.375h-2.936v-4.084a.375.375 0 00-.375-.375h-3.04a.375.375 0 00-.375.375v4.084h-2.328a.376.376 0 00-.375.375v2.67c0 .206.168.375.375.375h2.328v9.658c0 2.834 1.512 4.395 4.26 4.395 1.493 0 2.616-.376 3.433-1.15a.375.375 0 00.097-.392l-.777-2.297zM240.62 42.346c-2.046-.477-3.494-.9-3.494-2 0-1.081 1.137-1.753 2.97-1.753 1.83 0 3.612.73 4.54 1.857.071.087.177.136.29.136h.023a.374.374 0 00.294-.174l1.35-2.128a.376.376 0 00-.057-.473c-1.675-1.592-3.913-2.434-6.474-2.434-4.53 0-6.591 2.699-6.591 5.206 0 3.804 3.496 4.614 6.306 5.264 2.002.453 3.659.936 3.659 2.27 0 1.225-1.173 1.956-3.138 1.956-2.178 0-4.22-1.145-5.197-2.21a.373.373 0 00-.276-.122l-.03.002a.38.38 0 00-.284.169l-1.453 2.23a.375.375 0 00.047.467c1.697 1.73 4.137 2.646 7.058 2.646 4.23 0 6.963-2.11 6.963-5.374 0-4.062-3.607-4.878-6.506-5.535M267.394 32.951c2.36 0 4.568 1.188 5.762 3.1.101.163.321.224.495.134l2.871-1.52a.376.376 0 00.136-.54c-2.181-3.271-5.298-4.93-9.264-4.93-6.801 0-11.93 5.171-11.93 12.03 0 6.858 5.129 12.03 11.93 12.03 3.925 0 7.04-1.658 9.263-4.928a.377.377 0 00-.135-.542l-2.872-1.52a.384.384 0 00-.494.133c-1.195 1.913-3.402 3.1-5.762 3.1-4.246 0-7.1-3.324-7.1-8.273 0-5.026 2.788-8.274 7.1-8.274M289.688 46.253v2.512c-.814 1.01-2.238 1.612-3.814 1.612-1.988 0-3.375-1.18-3.375-2.868 0-1.689 1.387-2.869 3.375-2.869 1.576 0 3 .603 3.814 1.613m-3.138-10.876c-2.737 0-5.076.934-6.952 2.777a.376.376 0 00-.054.467l1.317 2.095a.375.375 0 00.582.065c1.38-1.38 2.896-2.052 4.633-2.052 2.194 0 3.612 1.125 3.612 2.868v1.8c-1.255-1.07-2.967-1.635-4.963-1.635-2.914 0-6.05 1.788-6.05 5.713 0 3.755 3.117 5.78 6.05 5.78 1.944 0 3.656-.583 4.963-1.688v.908c0 .207.168.375.375.375h3.04a.375.375 0 00.375-.375V41.462c0-3.867-2.525-6.085-6.928-6.085M301.347 29.566h-3.04a.375.375 0 00-.375.375v22.534c0 .206.168.375.375.375h3.04a.376.376 0 00.375-.375V29.941a.375.375 0 00-.375-.375M313.678 38.627c2.857 0 4.343 2.053 4.565 4.114h-9.145c.314-2.061 1.84-4.114 4.58-4.114m0-3.25c-4.875 0-8.55 3.836-8.55 8.922 0 5.273 3.627 8.956 8.82 8.956 2.763 0 5.119-.878 6.816-2.539a.373.373 0 00.044-.485l-1.42-1.994a.376.376 0 00-.276-.157.401.401 0 00-.298.113c-1.087 1.118-2.835 1.812-4.561 1.812-3.276 0-4.797-2.306-5.117-4.317h12.481a.376.376 0 00.375-.375v-.744c0-5.412-3.419-9.192-8.314-9.192M333.99 35.377c-2.702 0-4.603 1.414-5.402 2.143v-1.362a.375.375 0 00-.375-.375h-3.04a.375.375 0 00-.375.375v16.317c0 .207.168.375.375.375h3.04a.375.375 0 00.375-.375V40.944c.808-1.055 2.388-2.114 4.118-2.114 2.147 0 3.105.988 3.105 3.206v10.439c0 .207.168.375.375.375h3.04a.376.376 0 00.376-.375V41.023c0-3.693-1.94-5.646-5.612-5.646M355.043 40.966V47.7c-.846 1.239-2.55 2.103-4.152 2.103-2.726 0-4.558-2.199-4.558-5.47 0-3.292 1.832-5.503 4.558-5.503 1.563 0 3.304.897 4.152 2.136m3.415-11.4h-3.04a.375.375 0 00-.375.375v7.57c-1.352-1.378-3.107-2.134-4.963-2.134-4.589 0-7.672 3.6-7.672 8.956 0 5.337 3.083 8.922 7.672 8.922 1.827 0 3.625-.766 4.963-2.107v1.327c0 .206.168.375.375.375h3.04a.376.376 0 00.375-.375V29.941a.375.375 0 00-.375-.375M373.354 46.253v2.512c-.814 1.01-2.238 1.612-3.814 1.612-1.988 0-3.375-1.
|
|