Completed
Branch FET-9856-direct-instantiation (95869d)
by
unknown
112:23 queued 94:16
created
caffeinated/admin/extend/about/templates/ee4-overview.template.php 1 patch
Spacing   +5 added lines, -5 removed lines patch added patch discarded remove patch
@@ -1,8 +1,8 @@  discard block
 block discarded – undo
1 1
 <div class="changelog">
2 2
 	<h2 class="about-headline-callout"><?php esc_html_e('Welcome to Event Espresso 4!', 'event_espresso'); ?></h2>
3
-	<p><?php echo sprintf( esc_html__('Manage your events from your WordPress dashboard. Reduce your admin, reduce your costs, make your life easier! This is the Caffeinated/Regular version of Event Espresso, but we also have a hosted version called %sEvent Smart%s for customers that want to cut back on their hosting and security expenses.', 'event_espresso'),'<a href="https://eventsmart.com//?utm_source=ee4_decaf&amp;utm_medium=link&amp;utm_campaign=espresso_about_tab&amp;utm_content=EE4+Caffeinated">','</a>'); ?></p>
3
+	<p><?php echo sprintf(esc_html__('Manage your events from your WordPress dashboard. Reduce your admin, reduce your costs, make your life easier! This is the Caffeinated/Regular version of Event Espresso, but we also have a hosted version called %sEvent Smart%s for customers that want to cut back on their hosting and security expenses.', 'event_espresso'), '<a href="https://eventsmart.com//?utm_source=ee4_decaf&amp;utm_medium=link&amp;utm_campaign=espresso_about_tab&amp;utm_content=EE4+Caffeinated">', '</a>'); ?></p>
4 4
 	<h2><?php esc_html_e('Powering 40,000+ event websites; $100 million in ticket sales per year!', 'event_espresso'); ?></h2>
5
-	<p><?php echo sprintf( esc_html__('Event Espresso is a %sWordPress event manager%s which makes it easy for you to register attendees for classes, workshops, events, trainings, conferences or concerts, all from your WordPress website. Event Espresso events are created from the WordPress admin area. You can create signup forms to collect information about your attendees, accept payments, and create reports. The lite version of the plugin provides everything that you need to manage your event using WordPress.', 'event_espresso'),'<a href="http://eventespresso.com/?utm_source=wordpress_org&amp;utm_medium=link&amp;utm_campaign=espresso_about_tab&amp;utm_content=EE4+Decaf" rel="nofollow">','</a>'); ?></p>
5
+	<p><?php echo sprintf(esc_html__('Event Espresso is a %sWordPress event manager%s which makes it easy for you to register attendees for classes, workshops, events, trainings, conferences or concerts, all from your WordPress website. Event Espresso events are created from the WordPress admin area. You can create signup forms to collect information about your attendees, accept payments, and create reports. The lite version of the plugin provides everything that you need to manage your event using WordPress.', 'event_espresso'), '<a href="http://eventespresso.com/?utm_source=wordpress_org&amp;utm_medium=link&amp;utm_campaign=espresso_about_tab&amp;utm_content=EE4+Decaf" rel="nofollow">', '</a>'); ?></p>
6 6
 	<div class="feature-section col three-col about-updates">
7 7
 		<div class="col-1">
8 8
 			<img src="<?php echo EE_GLOBAL_ASSETS_URL; ?>images/screenshots/publish_meta_box.jpg">
@@ -60,11 +60,11 @@  discard block
 block discarded – undo
60 60
 	<h2 class="about-headline-callout"><?php esc_html_e('People Like You Manage Event Registration with WordPress', 'event_espresso'); ?></h2>
61 61
 	<div class="feature-section col two-col">
62 62
 		<div class="grid_6">
63
-			<p><?php echo sprintf( esc_html__('Trusted by thousands, Event Espresso is the best WordPress event online registration and ticketing manager plugin–and the best supported with full-time support. Turn your existing blog or website into a %sfully-featured event management website%s and a new way to make money. With Event Espresso you get it all; everything from custom registration forms and emails, seating limits, multiple price options, and discount codes to printable tickets.', 'event_espresso'),'<strong>','</strong>'); ?></p>
63
+			<p><?php echo sprintf(esc_html__('Trusted by thousands, Event Espresso is the best WordPress event online registration and ticketing manager plugin–and the best supported with full-time support. Turn your existing blog or website into a %sfully-featured event management website%s and a new way to make money. With Event Espresso you get it all; everything from custom registration forms and emails, seating limits, multiple price options, and discount codes to printable tickets.', 'event_espresso'), '<strong>', '</strong>'); ?></p>
64 64
 			<p><?php esc_html_e('Event Espresso works perfectly for classes, workshops, fundraisers, sporting, trainings, conferences, networking, religion, social, non-profit, and nearly any other type of event.', 'event_espresso'); ?></p>
65 65
 		</div>
66 66
 			<div class="grid_6">
67
-			<p><?php echo sprintf( esc_html__('Our online event registration software can %smake your organization more profitable and efficient%s by helping you save money on registration and ticketing fees, reduce the countless hours of time you spend manually processing registrations, create a “green” and paperless event registration process and you will be open for business to accept registrations and payment 24/7.', 'event_espresso'),'<strong>','</strong>'); ?></p>
67
+			<p><?php echo sprintf(esc_html__('Our online event registration software can %smake your organization more profitable and efficient%s by helping you save money on registration and ticketing fees, reduce the countless hours of time you spend manually processing registrations, create a “green” and paperless event registration process and you will be open for business to accept registrations and payment 24/7.', 'event_espresso'), '<strong>', '</strong>'); ?></p>
68 68
 			<p><?php esc_html_e('If you\'re doing event registration and ticketing any other way, then you’re wasting time and money. We offer packages and prices to fit any budget, so get started with your online event registration and ticketing management system today.', 'event_espresso'); ?></p>
69 69
 		</div>
70 70
 	</div>
@@ -74,7 +74,7 @@  discard block
 block discarded – undo
74 74
 			<h3><?php esc_html_e('Turn your blog into a complete event registration and management system', 'event_espresso'); ?></h3>
75 75
 			<p><?php esc_html_e('Create a beautiful event page with ticket selection, venue details, and an integrated single page checkout system. With WordPress, Event Espresso, and Espresso Arabica 2014 (based on the "Twenty Fourteen" theme by WordPress), your events will certainly sell out faster than ever!', 'event_espresso'); ?></p>
76 76
 			<p><?php esc_html_e('With a striking design that does not compromise the simplicity of WordPress and Event Espresso 4, Espresso Arabica 2014 will be the best event theme on the market.', 'event_espresso'); ?></p>
77
-			<p><?php echo sprintf( esc_html__('%sLearn more >>%s', 'event_espresso'), '<a href="http://eventespresso.com/wiki/setup-event-espresso-arabica-theme/">', '</a>' ); ?></p>
77
+			<p><?php echo sprintf(esc_html__('%sLearn more >>%s', 'event_espresso'), '<a href="http://eventespresso.com/wiki/setup-event-espresso-arabica-theme/">', '</a>'); ?></p>
78 78
 		</div>
79 79
 		<div><img src="<?php echo EE_GLOBAL_ASSETS_URL; ?>images/screenshots/single-event-page.jpg"></div>
80 80
 	</div>
Please login to merge, or discard this patch.
admin_pages/about/templates/reviews.template.php 1 patch
Spacing   +8 added lines, -8 removed lines patch added patch discarded remove patch
@@ -1,5 +1,5 @@  discard block
 block discarded – undo
1
-<h2 style="text-align: left;"><?php esc_html_e( 'Who uses Event Espresso?', 'event_espresso'); ?></h2>
2
-<p><?php echo sprintf( esc_html__('Event Espresso is used by over 40,000 event organizers across the world. They host %sconferences%s, %sart classes%s, training courses, concerts, fundraisers, workshops, %sfilm festivals%s, %spaint and wine%s, and more.', 'event_espresso'), '<a href="https://eventespresso.com/use-cases/conferences/?utm_source=wordpress_org&amp;utm_medium=link&amp;utm_campaign=decaf_about_page&amp;utm_content=Decaf+vs+Regular">', '</a>', '<a href="https://eventespresso.com/use-cases/art-classes/?utm_source=wordpress_org&amp;utm_medium=link&amp;utm_campaign=decaf_about_page&amp;utm_content=Decaf+vs+Regular">', '</a>','<a href="https://eventespresso.com/use-cases/film-festival-ticketing-software/?utm_source=wordpress_org&amp;utm_medium=link&amp;utm_campaign=decaf_about_page&amp;utm_content=Decaf+vs+Regular">','</a>','<a href="https://eventespresso.com/use-cases/paint-wine-party-ticketing-software/?utm_source=wordpress_org&amp;utm_medium=link&amp;utm_campaign=decaf_about_page&amp;utm_content=Decaf+vs+Regular">','</a>');?></p>
1
+<h2 style="text-align: left;"><?php esc_html_e('Who uses Event Espresso?', 'event_espresso'); ?></h2>
2
+<p><?php echo sprintf(esc_html__('Event Espresso is used by over 40,000 event organizers across the world. They host %sconferences%s, %sart classes%s, training courses, concerts, fundraisers, workshops, %sfilm festivals%s, %spaint and wine%s, and more.', 'event_espresso'), '<a href="https://eventespresso.com/use-cases/conferences/?utm_source=wordpress_org&amp;utm_medium=link&amp;utm_campaign=decaf_about_page&amp;utm_content=Decaf+vs+Regular">', '</a>', '<a href="https://eventespresso.com/use-cases/art-classes/?utm_source=wordpress_org&amp;utm_medium=link&amp;utm_campaign=decaf_about_page&amp;utm_content=Decaf+vs+Regular">', '</a>', '<a href="https://eventespresso.com/use-cases/film-festival-ticketing-software/?utm_source=wordpress_org&amp;utm_medium=link&amp;utm_campaign=decaf_about_page&amp;utm_content=Decaf+vs+Regular">', '</a>', '<a href="https://eventespresso.com/use-cases/paint-wine-party-ticketing-software/?utm_source=wordpress_org&amp;utm_medium=link&amp;utm_campaign=decaf_about_page&amp;utm_content=Decaf+vs+Regular">', '</a>'); ?></p>
3 3
 
4 4
 <div class="changelog">
5 5
 	<h2 class="about-headline-callout"><?php _e('Rave Reviews About Event Espresso 4', 'event_espresso'); ?></h2>
@@ -61,9 +61,9 @@  discard block
 block discarded – undo
61 61
 		
62 62
 	</div>
63 63
 	<?php
64
-		if ( !defined('EE_CAF_URL') ) {
64
+		if ( ! defined('EE_CAF_URL')) {
65 65
 			?>
66
-			<div align="right"><a href="https://eventespresso.com/pricing/?utm_source=wordpress_org&amp;utm_medium=link&amp;utm_campaign=decaf_about_page&amp;utm_content=reviews+tab" target="_blank" class="button button-primary button-hero"><span class="dashicons dashicons-cart"></span><?php esc_html_e( 'Upgrade Now!', 'event_espresso' ) ?></a></div>
66
+			<div align="right"><a href="https://eventespresso.com/pricing/?utm_source=wordpress_org&amp;utm_medium=link&amp;utm_campaign=decaf_about_page&amp;utm_content=reviews+tab" target="_blank" class="button button-primary button-hero"><span class="dashicons dashicons-cart"></span><?php esc_html_e('Upgrade Now!', 'event_espresso') ?></a></div>
67 67
 			<?php
68 68
 		}
69 69
 	?>
@@ -124,9 +124,9 @@  discard block
 block discarded – undo
124 124
 		
125 125
 	</div>
126 126
 	<?php
127
-		if ( !defined('EE_CAF_URL') ) {
127
+		if ( ! defined('EE_CAF_URL')) {
128 128
 			?>
129
-			<div align="right"><a href="https://eventespresso.com/pricing/?utm_source=wordpress_org&amp;utm_medium=link&amp;utm_campaign=decaf_about_page&amp;utm_content=reviews+tab" target="_blank" class="button button-primary button-hero"><span class="dashicons dashicons-cart"></span><?php esc_html_e( 'Upgrade Now!', 'event_espresso' ) ?></a></div>
129
+			<div align="right"><a href="https://eventespresso.com/pricing/?utm_source=wordpress_org&amp;utm_medium=link&amp;utm_campaign=decaf_about_page&amp;utm_content=reviews+tab" target="_blank" class="button button-primary button-hero"><span class="dashicons dashicons-cart"></span><?php esc_html_e('Upgrade Now!', 'event_espresso') ?></a></div>
130 130
 			<?php
131 131
 		}
132 132
 	?>
@@ -179,9 +179,9 @@  discard block
 block discarded – undo
179 179
 		</div>
180 180
 	</div>
181 181
 	<?php
182
-		if ( !defined('EE_CAF_URL') ) {
182
+		if ( ! defined('EE_CAF_URL')) {
183 183
 			?>
184
-			<div align="right"><a href="https://eventespresso.com/pricing/?utm_source=wordpress_org&amp;utm_medium=link&amp;utm_campaign=decaf_about_page&amp;utm_content=reviews+tab" target="_blank" class="button button-primary button-hero"><span class="dashicons dashicons-cart"></span><?php esc_html_e( 'Upgrade Now!', 'event_espresso' ) ?></a></div>
184
+			<div align="right"><a href="https://eventespresso.com/pricing/?utm_source=wordpress_org&amp;utm_medium=link&amp;utm_campaign=decaf_about_page&amp;utm_content=reviews+tab" target="_blank" class="button button-primary button-hero"><span class="dashicons dashicons-cart"></span><?php esc_html_e('Upgrade Now!', 'event_espresso') ?></a></div>
185 185
 			<?php
186 186
 		}
187 187
 	?>
Please login to merge, or discard this patch.
admin_pages/about/templates/ee4-overview.template.php 1 patch
Spacing   +7 added lines, -7 removed lines patch added patch discarded remove patch
@@ -1,10 +1,10 @@  discard block
 block discarded – undo
1 1
 <div class="changelog">
2 2
 	<?php
3 3
 	//maintenance mode on?
4
-	if ( EE_Maintenance_Mode::instance()->level() == EE_Maintenance_Mode::level_2_complete_maintenance ) {
4
+	if (EE_Maintenance_Mode::instance()->level() == EE_Maintenance_Mode::level_2_complete_maintenance) {
5 5
 		?>
6 6
 		<div class="ee-attention">
7
-			<h2 class="ee-maintenance-mode-callout"><?php  esc_html_e('Event Espresso is in full maintenance mode.' , 'event_espresso'); ?></h2>
7
+			<h2 class="ee-maintenance-mode-callout"><?php  esc_html_e('Event Espresso is in full maintenance mode.', 'event_espresso'); ?></h2>
8 8
 			<p>
9 9
 				<?php
10 10
 				printf(
@@ -20,9 +20,9 @@  discard block
 block discarded – undo
20 20
 	?>
21 21
 
22 22
 	<h2 class="about-headline-callout"><?php esc_html_e('Welcome to the Decaf (free) Version of Event Espresso 4!', 'event_espresso'); ?></h2>
23
-	<p><?php echo sprintf( esc_html__('Manage your events from your WordPress dashboard. Reduce your admin, reduce your costs, make your life easier! This is the Decaf version of Event Espresso, but we also have a premium version called %sEvent Espreso 4 Regular%s and a hosted version called %sEvent Smart%s (SaaS).', 'event_espresso'),'<a href="?page=espresso_about&action=decafvpro">','</a>','<a href="https://eventsmart.com//?utm_source=ee4_decaf&amp;utm_medium=link&amp;utm_campaign=espresso_about_tab&amp;utm_content=EE4+Decaf">','</a>'); ?></p>
23
+	<p><?php echo sprintf(esc_html__('Manage your events from your WordPress dashboard. Reduce your admin, reduce your costs, make your life easier! This is the Decaf version of Event Espresso, but we also have a premium version called %sEvent Espreso 4 Regular%s and a hosted version called %sEvent Smart%s (SaaS).', 'event_espresso'), '<a href="?page=espresso_about&action=decafvpro">', '</a>', '<a href="https://eventsmart.com//?utm_source=ee4_decaf&amp;utm_medium=link&amp;utm_campaign=espresso_about_tab&amp;utm_content=EE4+Decaf">', '</a>'); ?></p>
24 24
 	<h2><?php esc_html_e('Powering 40,000+ event websites; $100 million in ticket sales per year!', 'event_espresso'); ?></h2>
25
-	<p><?php echo sprintf( esc_html__('Event Espresso is a %sWordPress event manager%s which makes it easy for you to register attendees for classes, workshops, events, trainings, conferences or concerts, all from your WordPress website. Event Espresso events are created from the WordPress admin area. You can create signup forms to collect information about your attendees, accept payments, and create reports. The Decaf (free) version of the plugin provides everything that you need to manage your event using WordPress.', 'event_espresso'),'<a href="http://eventespresso.com/?utm_source=wordpress_org&amp;utm_medium=link&amp;utm_campaign=plugin_description_tab&amp;utm_content=EE4+Decaf">','</a>'); ?></p>
25
+	<p><?php echo sprintf(esc_html__('Event Espresso is a %sWordPress event manager%s which makes it easy for you to register attendees for classes, workshops, events, trainings, conferences or concerts, all from your WordPress website. Event Espresso events are created from the WordPress admin area. You can create signup forms to collect information about your attendees, accept payments, and create reports. The Decaf (free) version of the plugin provides everything that you need to manage your event using WordPress.', 'event_espresso'), '<a href="http://eventespresso.com/?utm_source=wordpress_org&amp;utm_medium=link&amp;utm_campaign=plugin_description_tab&amp;utm_content=EE4+Decaf">', '</a>'); ?></p>
26 26
 	<div class="feature-section col three-col about-updates">
27 27
 		<div class="col-1">
28 28
 			<img src="<?php echo EE_GLOBAL_ASSETS_URL; ?>images/screenshots/publish_meta_box.jpg">
@@ -80,11 +80,11 @@  discard block
 block discarded – undo
80 80
 	<h2 class="about-headline-callout"><?php esc_html_e('People Like You Manage Event Registration with WordPress', 'event_espresso'); ?></h2>
81 81
 	<div class="feature-section col two-col">
82 82
 		<div class="grid_6">
83
-			<p><?php echo sprintf( esc_html__('Trusted by thousands, Event Espresso is the best WordPress event online registration and ticketing manager plugin–and the best supported with full-time support. Turn your existing blog or website into a %sfully-featured event management website%s and a new way to make money. With Event Espresso you get it all; everything from custom registration forms and emails, seating limits, multiple price options, and discount codes to printable tickets.', 'event_espresso'),'<strong>','</strong>'); ?></p>
83
+			<p><?php echo sprintf(esc_html__('Trusted by thousands, Event Espresso is the best WordPress event online registration and ticketing manager plugin–and the best supported with full-time support. Turn your existing blog or website into a %sfully-featured event management website%s and a new way to make money. With Event Espresso you get it all; everything from custom registration forms and emails, seating limits, multiple price options, and discount codes to printable tickets.', 'event_espresso'), '<strong>', '</strong>'); ?></p>
84 84
 			<p><?php esc_html_e('Event Espresso works perfectly for classes, workshops, fundraisers, sporting, trainings, conferences, networking, religion, social, non-profit, and nearly any other type of event.', 'event_espresso'); ?></p>
85 85
 		</div>
86 86
 			<div class="grid_6">
87
-			<p><?php echo sprintf( esc_html__('Our online event registration software can %smake your organization more profitable and efficient%s by helping you save money on registration and ticketing fees, reduce the countless hours of time you spend manually processing registrations, create a “green” and paperless event registration process and you will be open for business to accept registrations and payment 24/7.', 'event_espresso'),'<strong>','</strong>'); ?></p>
87
+			<p><?php echo sprintf(esc_html__('Our online event registration software can %smake your organization more profitable and efficient%s by helping you save money on registration and ticketing fees, reduce the countless hours of time you spend manually processing registrations, create a “green” and paperless event registration process and you will be open for business to accept registrations and payment 24/7.', 'event_espresso'), '<strong>', '</strong>'); ?></p>
88 88
 			<p><?php esc_html_e('If you\'re doing event registration and ticketing any other way, then you’re wasting time and money. We offer packages and prices to fit any budget, so get started with your online event registration and ticketing management system today.', 'event_espresso'); ?></p>
89 89
 		</div>
90 90
 	</div>
@@ -94,7 +94,7 @@  discard block
 block discarded – undo
94 94
 			<h3><?php esc_html_e('Turn your blog into a complete event registration and management system', 'event_espresso'); ?></h3>
95 95
 			<p><?php esc_html_e('Create a beautiful event page with ticket selection, venue details, and an integrated single page checkout system. With WordPress, Event Espresso, and Espresso Arabica 2014 (based on the "Twenty Fourteen" theme by WordPress), your events will certainly sell out faster than ever!', 'event_espresso'); ?></p>
96 96
 			<p><?php esc_html_e('With a striking design that does not compromise the simplicity of WordPress and Event Espresso 4, Espresso Arabica 2014 will be the best event theme on the market.', 'event_espresso'); ?></p>
97
-			<p><?php echo sprintf( esc_html__('%sLearn more >>%s', 'event_espresso'), '<a href="http://eventespresso.com/wiki/setup-event-espresso-arabica-theme/">', '</a>' ); ?></p>
97
+			<p><?php echo sprintf(esc_html__('%sLearn more >>%s', 'event_espresso'), '<a href="http://eventespresso.com/wiki/setup-event-espresso-arabica-theme/">', '</a>'); ?></p>
98 98
 		</div>
99 99
 		<div><img src="<?php echo EE_GLOBAL_ASSETS_URL; ?>images/screenshots/single-event-page.jpg"></div>
100 100
 	</div>
Please login to merge, or discard this patch.
admin_pages/about/templates/decafvpro.template.php 1 patch
Spacing   +12 added lines, -12 removed lines patch added patch discarded remove patch
@@ -1,4 +1,4 @@  discard block
 block discarded – undo
1
-<p><?php echo sprintf( esc_html__('We offer a free version of Event Espresso 4 called Decaf which is a good fit for basic events. Need more features like custom registration forms and advanced email notifications? %sUpgrade to Event Espresso 4 (Regular)%s.', 'event_espresso'),'<a href="https://eventespresso.com/pricing/?ee_ver=ee4&utm_source=wordpress_org&amp;utm_medium=link&amp;utm_campaign=decaf_about_page&amp;utm_content=Decaf+vs+Regular">','</a>');?><br>
1
+<p><?php echo sprintf(esc_html__('We offer a free version of Event Espresso 4 called Decaf which is a good fit for basic events. Need more features like custom registration forms and advanced email notifications? %sUpgrade to Event Espresso 4 (Regular)%s.', 'event_espresso'), '<a href="https://eventespresso.com/pricing/?ee_ver=ee4&utm_source=wordpress_org&amp;utm_medium=link&amp;utm_campaign=decaf_about_page&amp;utm_content=Decaf+vs+Regular">', '</a>'); ?><br>
2 2
 
3 3
 <?php
4 4
 
@@ -8,43 +8,43 @@  discard block
 block discarded – undo
8 8
 
9 9
 $features = array(
10 10
 	'pricing-options' => array(
11
-		'label'   	=> esc_html__( 'Handle multiple dates and pricing options', 'event_espresso' ),
11
+		'label'   	=> esc_html__('Handle multiple dates and pricing options', 'event_espresso'),
12 12
 		'decaf'     	=> '<span class="dashicons dashicons-no-alt"></span>',
13 13
 		'regular'	=> '<span class="dashicons dashicons-yes"></span></i>',
14 14
 		'class'		=> 'alternate'
15 15
 	),
16 16
 	'custom-registration' => array(
17
-		'label'  	=> esc_html__( 'Create custom registration forms', 'event_espresso' ),
17
+		'label'  	=> esc_html__('Create custom registration forms', 'event_espresso'),
18 18
 		'decaf'     	=> '<span class="dashicons dashicons-no-alt"></span>',
19 19
 		'regular' 	=> '<span class="dashicons dashicons-yes"></span></i>',
20 20
 		'class'		=> 'none'
21 21
 	),
22 22
 	'advanced-notifications' => array(
23
-		'label'       => esc_html__( 'Customize advanced email notifications', 'event_espresso' ),
23
+		'label'       => esc_html__('Customize advanced email notifications', 'event_espresso'),
24 24
 		'decaf'     => '<span class="dashicons dashicons-no-alt"></span>',
25 25
 		'regular' => '<span class="dashicons dashicons-yes"></span></i>',
26 26
 		'class'		=> 'alternate'
27 27
 	),
28 28
 	'manage-taxes'    => array(
29
-		'label'       => esc_html__( 'Manage taxes', 'event_espresso' ),
29
+		'label'       => esc_html__('Manage taxes', 'event_espresso'),
30 30
 		'decaf'     => '<span class="dashicons dashicons-no-alt"></span>',
31 31
 		'regular' => '<span class="dashicons dashicons-yes"></span></i>',
32 32
 		'class'		=> 'none'
33 33
 	),
34 34
 	'typography'       => array(
35
-		'label'       => esc_html__( 'Additional payment methods available', 'event_espresso' ),
35
+		'label'       => esc_html__('Additional payment methods available', 'event_espresso'),
36 36
 		'decaf'     => '<span class="dashicons dashicons-no-alt"></span>',
37 37
 		'regular' => '<span class="dashicons dashicons-yes"></span></i>',
38 38
 		'class'		=> 'alternate'
39 39
 	),
40 40
 	'add-on-compatibility' => array(
41
-		'label'       => esc_html__( 'Compatibility with add-ons', 'event_espresso' ),
41
+		'label'       => esc_html__('Compatibility with add-ons', 'event_espresso'),
42 42
 		'decaf'     => '<span class="dashicons dashicons-no-alt"></span>',
43 43
 		'regular' => '<span class="dashicons dashicons-yes"></span></i>',
44 44
 		'class'		=> 'none'
45 45
 	),
46 46
 	'best-support' => array(
47
-		'label'       => esc_html__( 'Best in class support', 'event_espresso' ),
47
+		'label'       => esc_html__('Best in class support', 'event_espresso'),
48 48
 		'decaf'     => '<span class="dashicons dashicons-no-alt"></span>',
49 49
 		'regular' => '<span class="dashicons dashicons-yes"></span></i>',
50 50
 		'class'		=> 'alternate'
@@ -56,12 +56,12 @@  discard block
 block discarded – undo
56 56
         <thead>
57 57
         <tr>
58 58
             <th></th>
59
-            <th><?php esc_html_e( 'Decaf', 'event_espresso' ) ?></th>
60
-            <th><?php esc_html_e( 'Regular', 'event_espresso' ) ?></th>
59
+            <th><?php esc_html_e('Decaf', 'event_espresso') ?></th>
60
+            <th><?php esc_html_e('Regular', 'event_espresso') ?></th>
61 61
         </tr>
62 62
         </thead>
63 63
         <tbody>
64
-		<?php foreach ( $features as $feature ): ?>
64
+		<?php foreach ($features as $feature): ?>
65 65
             <tr class="<?php echo $feature['class']; ?>">
66 66
                 <td class="feature">
67 67
                     <h3>
@@ -78,7 +78,7 @@  discard block
 block discarded – undo
78 78
 		<?php endforeach; ?>
79 79
         <tr>
80 80
             <td></td>
81
-            <td colspan="2" class="text-right"><a href="https://eventespresso.com/pricing/?utm_source=wordpress_org&amp;utm_medium=link&amp;utm_campaign=decaf_about_page&amp;utm_content=Decaf+vs+Regular" target="_blank" class="button button-primary button-hero"><span class="dashicons dashicons-cart"></span><?php esc_html_e( 'Upgrade Now!', 'event_espresso' ) ?></a></td>
81
+            <td colspan="2" class="text-right"><a href="https://eventespresso.com/pricing/?utm_source=wordpress_org&amp;utm_medium=link&amp;utm_campaign=decaf_about_page&amp;utm_content=Decaf+vs+Regular" target="_blank" class="button button-primary button-hero"><span class="dashicons dashicons-cart"></span><?php esc_html_e('Upgrade Now!', 'event_espresso') ?></a></td>
82 82
         </tr>
83 83
         </tbody>
84 84
     </table>
Please login to merge, or discard this patch.
admin_pages/about/About_Admin_Page.core.php 1 patch
Spacing   +30 added lines, -30 removed lines patch added patch discarded remove patch
@@ -1,5 +1,5 @@  discard block
 block discarded – undo
1 1
 <?php
2
-if (!defined('EVENT_ESPRESSO_VERSION') )
2
+if ( ! defined('EVENT_ESPRESSO_VERSION'))
3 3
 	exit('NO direct script access allowed');
4 4
 
5 5
 /**
@@ -139,11 +139,11 @@  discard block
 block discarded – undo
139 139
 		//Copied from _whats_new()
140 140
 		$steps = EE_Maintenance_Mode::instance()->level() != EE_Maintenance_Mode::level_2_complete_maintenance ? $this->_get_started_steps() : FALSE;
141 141
 		$steps = $steps !== FALSE ? $steps : '';
142
-		$this->_admin_page_title = sprintf( esc_html__('Welcome to Event Espresso %s', 'event_espresso'), EVENT_ESPRESSO_VERSION );
142
+		$this->_admin_page_title = sprintf(esc_html__('Welcome to Event Espresso %s', 'event_espresso'), EVENT_ESPRESSO_VERSION);
143 143
 		$settings_message = $steps;
144
-		$this->_template_args['admin_page_subtitle'] = esc_html__('Thank you for choosing Event Espresso, the most powerful, and free, Event Management plugin for WordPress.', 'event_espresso' ) . $settings_message;
145
-		$template = EE_ABOUT_TEMPLATE_PATH . 'ee4-overview.template.php';
146
-		$this->_template_args['about_admin_page_content'] = EEH_Template::display_template( $template, $this->_template_args, TRUE );
144
+		$this->_template_args['admin_page_subtitle'] = esc_html__('Thank you for choosing Event Espresso, the most powerful, and free, Event Management plugin for WordPress.', 'event_espresso').$settings_message;
145
+		$template = EE_ABOUT_TEMPLATE_PATH.'ee4-overview.template.php';
146
+		$this->_template_args['about_admin_page_content'] = EEH_Template::display_template($template, $this->_template_args, TRUE);
147 147
 		$this->display_about_admin_page();
148 148
 	}
149 149
 
@@ -151,36 +151,36 @@  discard block
 block discarded – undo
151 151
 
152 152
 	protected function _get_started_steps() {
153 153
 		$steps = '<h2>'.esc_html__('Getting Started').'</h2>';
154
-		$step_one = '<p>'.sprintf( esc_html__('%sStep 1%s: Visit your %sOrganization Settings%s and add/update your details.', 'event_espresso'), '<strong>', '</strong>', '<a href="admin.php?page=espresso_general_settings">', '</a>') .'</strong></p>';
155
-		$step_two = '<p>'.sprintf( esc_html__('%sStep 2%s: Setup your %sPayment Methods%s.', 'event_espresso'), '<strong>', '</strong>', '<a href="admin.php?page=espresso_payment_settings">', '</a>') .'</strong></p>';
156
-		$step_three = '<p>'.sprintf( esc_html__('%sStep 3%s: Create your %sFirst Event%s.', 'event_espresso'), '<strong>', '</strong>', '<a href="admin.php?page=espresso_events&action=create_new">', '</a>') .'</strong></p>';
154
+		$step_one = '<p>'.sprintf(esc_html__('%sStep 1%s: Visit your %sOrganization Settings%s and add/update your details.', 'event_espresso'), '<strong>', '</strong>', '<a href="admin.php?page=espresso_general_settings">', '</a>').'</strong></p>';
155
+		$step_two = '<p>'.sprintf(esc_html__('%sStep 2%s: Setup your %sPayment Methods%s.', 'event_espresso'), '<strong>', '</strong>', '<a href="admin.php?page=espresso_payment_settings">', '</a>').'</strong></p>';
156
+		$step_three = '<p>'.sprintf(esc_html__('%sStep 3%s: Create your %sFirst Event%s.', 'event_espresso'), '<strong>', '</strong>', '<a href="admin.php?page=espresso_events&action=create_new">', '</a>').'</strong></p>';
157 157
 
158 158
 		//done?
159 159
 		$done_step_one = EE_Registry::instance()->CFG->organization->address_1 == '123 Onna Road' ? FALSE : TRUE;
160
-		$active_invoice_pm = EEM_Payment_Method::instance()->get_one_active( EEM_Payment_Method::scope_cart, array( array( 'PMD_type' => 'Invoice' ) ) );
161
-		$active_pms_count = EEM_Payment_Method::instance()->count_active( EEM_Payment_Method::scope_cart );
160
+		$active_invoice_pm = EEM_Payment_Method::instance()->get_one_active(EEM_Payment_Method::scope_cart, array(array('PMD_type' => 'Invoice')));
161
+		$active_pms_count = EEM_Payment_Method::instance()->count_active(EEM_Payment_Method::scope_cart);
162 162
 		//done step two if a non-invoice paymetn method is active; or there is more than one PM active, or
163 163
 		//if only the invoice is active but it's clearly been updated
164
-		$done_step_two = $active_pms_count > 1  ||
165
-						 ( $active_pms_count === 1 && ! $active_invoice_pm )	||
166
-						 ( $active_invoice_pm instanceof EE_Payment_Method && (
167
-								 $active_invoice_pm->get_extra_meta( 'pdf_payee_name', TRUE, '' ) ||
168
-								 $active_invoice_pm->get_extra_meta( 'pdf_payee_email', TRUE, '' ) ||
169
-								 $active_invoice_pm->get_extra_meta( 'pdf_payee_tax_number', TRUE, '' ) ||
170
-								 $active_invoice_pm->get_extra_meta( 'pdf_payee_address', TRUE, '' ) ||
171
-								 $active_invoice_pm->get_extra_meta( 'page_extra_info', TRUE, '' )
164
+		$done_step_two = $active_pms_count > 1 ||
165
+						 ($active_pms_count === 1 && ! $active_invoice_pm) ||
166
+						 ($active_invoice_pm instanceof EE_Payment_Method && (
167
+								 $active_invoice_pm->get_extra_meta('pdf_payee_name', TRUE, '') ||
168
+								 $active_invoice_pm->get_extra_meta('pdf_payee_email', TRUE, '') ||
169
+								 $active_invoice_pm->get_extra_meta('pdf_payee_tax_number', TRUE, '') ||
170
+								 $active_invoice_pm->get_extra_meta('pdf_payee_address', TRUE, '') ||
171
+								 $active_invoice_pm->get_extra_meta('page_extra_info', TRUE, '')
172 172
 								)
173 173
 				);
174 174
 		$done_step_three = EE_Registry::instance()->load_model('Event')->count() > 0 ? TRUE : FALSE;
175 175
 
176 176
 		//if ALL steps are done, let's just return FALSE so we don't display anything
177
-		if ( $done_step_one && $done_step_two && $done_step_three )
177
+		if ($done_step_one && $done_step_two && $done_step_three)
178 178
 			return FALSE;
179 179
 
180 180
 		//now let's put it together
181
-		$steps .= sprintf( '%s' . $step_one . '%s', $done_step_one ? '<strike>' : '', $done_step_one ? '</strike>': '' );
182
-		$steps .= sprintf( '%s' . $step_two . '%s', $done_step_two ? '<strike>' : '', $done_step_two ? '</strike>': '' );
183
-		$steps .= sprintf( '%s' . $step_three . '%s', $done_step_three ? '<strike>' : '', $done_step_three ? '</strike>': '' );
181
+		$steps .= sprintf('%s'.$step_one.'%s', $done_step_one ? '<strike>' : '', $done_step_one ? '</strike>' : '');
182
+		$steps .= sprintf('%s'.$step_two.'%s', $done_step_two ? '<strike>' : '', $done_step_two ? '</strike>' : '');
183
+		$steps .= sprintf('%s'.$step_three.'%s', $done_step_three ? '<strike>' : '', $done_step_three ? '</strike>' : '');
184 184
 
185 185
 		return $steps;
186 186
 	}
@@ -188,27 +188,27 @@  discard block
 block discarded – undo
188 188
 
189 189
 
190 190
 	protected function _credits() {
191
-		$this->_template_args['admin_page_title'] = sprintf( __('Welcome to Event Espresso %s', 'event_espresso'), EVENT_ESPRESSO_VERSION );
191
+		$this->_template_args['admin_page_title'] = sprintf(__('Welcome to Event Espresso %s', 'event_espresso'), EVENT_ESPRESSO_VERSION);
192 192
 		$this->_template_args['admin_page_subtitle'] = __('Thank you for choosing Event Espresso Decaf, the most powerful, and free, Event Management plugin for WordPress.', 'event_espresso');
193
-		$template = EE_ABOUT_TEMPLATE_PATH . 'credits.template.php';
194
-		$this->_template_args['about_admin_page_content'] = EEH_Template::display_template( $template, $this->_template_args, TRUE );
193
+		$template = EE_ABOUT_TEMPLATE_PATH.'credits.template.php';
194
+		$this->_template_args['about_admin_page_content'] = EEH_Template::display_template($template, $this->_template_args, TRUE);
195 195
 		$this->display_about_admin_page();
196 196
 	}
197 197
 
198 198
 	
199 199
 	protected function _decafvpro() {
200
-		$this->_template_args['admin_page_title'] = sprintf( __('Welcome to Event Espresso %s', 'event_espresso'), EVENT_ESPRESSO_VERSION );
200
+		$this->_template_args['admin_page_title'] = sprintf(__('Welcome to Event Espresso %s', 'event_espresso'), EVENT_ESPRESSO_VERSION);
201 201
 		$this->_template_args['admin_page_subtitle'] = sprintf(__('Event Espresso lets you focus on doing %swhat you love%s — %sorganizing your events%s', 'event_espresso'), '<em>', '</em>', '<strong>', '</strong>');
202
-		$template = EE_ABOUT_TEMPLATE_PATH . 'decafvpro.template.php';
203
-		$this->_template_args['about_admin_page_content'] = EEH_Template::display_template( $template, $this->_template_args, TRUE );
202
+		$template = EE_ABOUT_TEMPLATE_PATH.'decafvpro.template.php';
203
+		$this->_template_args['about_admin_page_content'] = EEH_Template::display_template($template, $this->_template_args, TRUE);
204 204
 		$this->display_about_admin_page();
205 205
 	}
206 206
 
207 207
 	protected function _reviews() {
208 208
 		$this->_template_args['admin_page_title'] = __('Rave Reviews About Event Espresso 4', 'event_espresso');
209 209
 		$this->_template_args['admin_page_subtitle'] = __('At Event Espresso, customer satisfaction is our ultimate goal.', 'event_espresso');
210
-		$template = EE_ABOUT_TEMPLATE_PATH . 'reviews.template.php';
211
-		$this->_template_args['about_admin_page_content'] = EEH_Template::display_template( $template, $this->_template_args, TRUE );
210
+		$template = EE_ABOUT_TEMPLATE_PATH.'reviews.template.php';
211
+		$this->_template_args['about_admin_page_content'] = EEH_Template::display_template($template, $this->_template_args, TRUE);
212 212
 		$this->display_about_admin_page();
213 213
 	}
214 214
 
Please login to merge, or discard this patch.
core/EE_Front_Controller.core.php 2 patches
Indentation   +482 added lines, -482 removed lines patch added patch discarded remove patch
@@ -3,7 +3,7 @@  discard block
 block discarded – undo
3 3
 use EventEspresso\widgets\EspressoWidget;
4 4
 
5 5
 if ( ! defined('EVENT_ESPRESSO_VERSION')) {
6
-    exit('No direct script access allowed');
6
+	exit('No direct script access allowed');
7 7
 }
8 8
 
9 9
 /**
@@ -26,385 +26,385 @@  discard block
 block discarded – undo
26 26
 final class EE_Front_Controller
27 27
 {
28 28
 
29
-    /**
30
-     * @var string $_template_path
31
-     */
32
-    private $_template_path;
33
-
34
-    /**
35
-     * @var string $_template
36
-     */
37
-    private $_template;
38
-
39
-    /**
40
-     * @type EE_Registry $Registry
41
-     */
42
-    protected $Registry;
43
-
44
-    /**
45
-     * @type EE_Request_Handler $Request_Handler
46
-     */
47
-    protected $Request_Handler;
48
-
49
-    /**
50
-     * @type EE_Module_Request_Router $Module_Request_Router
51
-     */
52
-    protected $Module_Request_Router;
53
-
54
-
55
-    /**
56
-     *    class constructor
57
-     *    should fire after shortcode, module, addon, or other plugin's default priority init phases have run
58
-     *
59
-     * @access    public
60
-     * @param \EE_Registry              $Registry
61
-     * @param \EE_Request_Handler       $Request_Handler
62
-     * @param \EE_Module_Request_Router $Module_Request_Router
63
-     */
64
-    public function __construct(
65
-        EE_Registry $Registry,
66
-        EE_Request_Handler $Request_Handler,
67
-        EE_Module_Request_Router $Module_Request_Router
68
-    ) {
69
-        $this->Registry              = $Registry;
70
-        $this->Request_Handler       = $Request_Handler;
71
-        $this->Module_Request_Router = $Module_Request_Router;
72
-        // determine how to integrate WP_Query with the EE models
73
-        add_action('AHEE__EE_System__initialize', array($this, 'employ_CPT_Strategy'));
74
-        // load other resources and begin to actually run shortcodes and modules
75
-        add_action('wp_loaded', array($this, 'wp_loaded'), 5);
76
-        // analyse the incoming WP request
77
-        add_action('parse_request', array($this, 'get_request'), 1, 1);
78
-        // process request with module factory
79
-        add_action('pre_get_posts', array($this, 'pre_get_posts'), 10, 1);
80
-        // before headers sent
81
-        add_action('wp', array($this, 'wp'), 5);
82
-        // primarily used to process any content shortcodes
83
-        add_action('template_redirect', array($this, 'templateRedirect'), 999);
84
-        // header
85
-        add_action('wp_head', array($this, 'header_meta_tag'), 5);
86
-        add_action('wp_print_scripts', array($this, 'wp_print_scripts'), 10);
87
-        add_filter('template_include', array($this, 'template_include'), 1);
88
-        // display errors
89
-        add_action('loop_start', array($this, 'display_errors'), 2);
90
-        // the content
91
-        // add_filter( 'the_content', array( $this, 'the_content' ), 5, 1 );
92
-        //exclude our private cpt comments
93
-        add_filter('comments_clauses', array($this, 'filter_wp_comments'), 10, 1);
94
-        //make sure any ajax requests will respect the url schema when requests are made against admin-ajax.php (http:// or https://)
95
-        add_filter('admin_url', array($this, 'maybe_force_admin_ajax_ssl'), 200, 1);
96
-        // action hook EE
97
-        do_action('AHEE__EE_Front_Controller__construct__done', $this);
98
-        // for checking that browser cookies are enabled
99
-        if (apply_filters('FHEE__EE_Front_Controller____construct__set_test_cookie', true)) {
100
-            setcookie('ee_cookie_test', uniqid('ect',true), time() + DAY_IN_SECONDS, '/');
101
-        }
102
-    }
103
-
104
-
105
-    /**
106
-     * @return EE_Request_Handler
107
-     */
108
-    public function Request_Handler()
109
-    {
110
-        return $this->Request_Handler;
111
-    }
112
-
113
-
114
-    /**
115
-     * @return EE_Module_Request_Router
116
-     */
117
-    public function Module_Request_Router()
118
-    {
119
-        return $this->Module_Request_Router;
120
-    }
121
-
122
-
123
-
124
-    /**
125
-     * @return LegacyShortcodesManager
126
-     */
127
-    public function getLegacyShortcodesManager()
128
-    {
129
-        return EE_Config::getLegacyShortcodesManager();
130
-    }
131
-
132
-
133
-
134
-
135
-
136
-    /***********************************************        INIT ACTION HOOK         ***********************************************/
137
-
138
-
139
-
140
-    /**
141
-     * filter_wp_comments
142
-     * This simply makes sure that any "private" EE CPTs do not have their comments show up in any wp comment
143
-     * widgets/queries done on frontend
144
-     *
145
-     * @param  array $clauses array of comment clauses setup by WP_Comment_Query
146
-     * @return array array of comment clauses with modifications.
147
-     */
148
-    public function filter_wp_comments($clauses)
149
-    {
150
-        global $wpdb;
151
-        if (strpos($clauses['join'], $wpdb->posts) !== false) {
152
-            $cpts = EE_Register_CPTs::get_private_CPTs();
153
-            foreach ($cpts as $cpt => $details) {
154
-                $clauses['where'] .= $wpdb->prepare(" AND $wpdb->posts.post_type != %s", $cpt);
155
-            }
156
-        }
157
-        return $clauses;
158
-    }
159
-
160
-
161
-    /**
162
-     *    employ_CPT_Strategy
163
-     *
164
-     * @access    public
165
-     * @return    void
166
-     */
167
-    public function employ_CPT_Strategy()
168
-    {
169
-        if (apply_filters('FHEE__EE_Front_Controller__employ_CPT_Strategy', true)) {
170
-            $this->Registry->load_core('CPT_Strategy');
171
-        }
172
-    }
173
-
174
-
175
-    /**
176
-     * this just makes sure that if the site is using ssl that we force that for any admin ajax calls from frontend
177
-     *
178
-     * @param  string $url incoming url
179
-     * @return string         final assembled url
180
-     */
181
-    public function maybe_force_admin_ajax_ssl($url)
182
-    {
183
-        if (is_ssl() && preg_match('/admin-ajax.php/', $url)) {
184
-            $url = str_replace('http://', 'https://', $url);
185
-        }
186
-        return $url;
187
-    }
188
-
189
-
190
-
191
-
192
-
193
-
194
-    /***********************************************        WP_LOADED ACTION HOOK         ***********************************************/
195
-
196
-
197
-    /**
198
-     *    wp_loaded - should fire after shortcode, module, addon, or other plugin's have been registered and their
199
-     *    default priority init phases have run
200
-     *
201
-     * @access    public
202
-     * @return    void
203
-     */
204
-    public function wp_loaded()
205
-    {
206
-    }
207
-
208
-
209
-
210
-
211
-
212
-    /***********************************************        PARSE_REQUEST HOOK         ***********************************************/
213
-    /**
214
-     *    _get_request
215
-     *
216
-     * @access public
217
-     * @param WP $WP
218
-     * @return void
219
-     */
220
-    public function get_request(WP $WP)
221
-    {
222
-        do_action('AHEE__EE_Front_Controller__get_request__start');
223
-        $this->Request_Handler->parse_request($WP);
224
-        do_action('AHEE__EE_Front_Controller__get_request__complete');
225
-    }
226
-
227
-
228
-
229
-    /**
230
-     *    pre_get_posts - basically a module factory for instantiating modules and selecting the final view template
231
-     *
232
-     * @access    public
233
-     * @param   WP_Query $WP_Query
234
-     * @return    void
235
-     */
236
-    public function pre_get_posts($WP_Query)
237
-    {
238
-        // only load Module_Request_Router if this is the main query
239
-        if (
240
-            $this->Module_Request_Router instanceof EE_Module_Request_Router
241
-            && $WP_Query->is_main_query()
242
-        ) {
243
-            // cycle thru module routes
244
-            while ($route = $this->Module_Request_Router->get_route($WP_Query)) {
245
-                // determine module and method for route
246
-                $module = $this->Module_Request_Router->resolve_route($route[0], $route[1]);
247
-                if ($module instanceof EED_Module) {
248
-                    // get registered view for route
249
-                    $this->_template_path = $this->Module_Request_Router->get_view($route);
250
-                    // grab module name
251
-                    $module_name = $module->module_name();
252
-                    // map the module to the module objects
253
-                    $this->Registry->modules->{$module_name} = $module;
254
-                }
255
-            }
256
-        }
257
-    }
258
-
259
-
260
-
261
-
262
-
263
-    /***********************************************        WP HOOK         ***********************************************/
264
-
265
-
266
-    /**
267
-     *    wp - basically last chance to do stuff before headers sent
268
-     *
269
-     * @access    public
270
-     * @return    void
271
-     */
272
-    public function wp()
273
-    {
274
-    }
275
-
276
-
277
-
278
-    /***********************     GET_HEADER && WP_HEAD HOOK     ***********************/
279
-
280
-
281
-
282
-    /**
283
-     * callback for the "template_redirect" hook point
284
-     * checks sidebars for EE widgets
285
-     * loads resources and assets accordingly
286
-     *
287
-     * @return void
288
-     */
289
-    public function templateRedirect()
290
-    {
291
-        global $wp_query;
292
-        if (empty($wp_query->posts)){
293
-            return;
294
-        }
295
-        // if we already know this is an espresso page, then load assets
296
-        $load_assets = $this->Request_Handler->is_espresso_page();
297
-        // if we are already loading assets then just move along, otherwise check for widgets
298
-        $load_assets = $load_assets ? $load_assets : $this->espresso_widgets_in_active_sidebars();
299
-        if ( $load_assets){
300
-            add_action('wp_enqueue_scripts', array($this, 'enqueueStyle'), 10);
301
-            add_action('wp_print_footer_scripts', array($this, 'enqueueScripts'), 10);
302
-        }
303
-    }
304
-
305
-
306
-
307
-    /**
308
-     * builds list of active widgets then scans active sidebars looking for them
309
-     * returns true is an EE widget is found in an active sidebar
310
-     * Please Note: this does NOT mean that the sidebar or widget
311
-     * is actually in use in a given template, as that is unfortunately not known
312
-     * until a sidebar and it's widgets are actually loaded
313
-     *
314
-     * @return boolean
315
-     */
316
-    private function espresso_widgets_in_active_sidebars()
317
-    {
318
-        $espresso_widgets = array();
319
-        foreach ($this->Registry->widgets as $widget_class => $widget) {
320
-            $id_base = EspressoWidget::getIdBase($widget_class);
321
-            if (is_active_widget(false, false, $id_base)) {
322
-                $espresso_widgets[] = $id_base;
323
-            }
324
-        }
325
-        $all_sidebar_widgets = wp_get_sidebars_widgets();
326
-        foreach ($all_sidebar_widgets as $sidebar_name => $sidebar_widgets) {
327
-            if (is_array($sidebar_widgets) && ! empty($sidebar_widgets)) {
328
-                foreach ($sidebar_widgets as $sidebar_widget) {
329
-                    foreach ($espresso_widgets as $espresso_widget) {
330
-                        if (strpos($sidebar_widget, $espresso_widget) !== false) {
331
-                            return true;
332
-                        }
333
-                    }
334
-                }
335
-            }
336
-        }
337
-        return false;
338
-    }
339
-
340
-
341
-
342
-
343
-    /**
344
-     *    header_meta_tag
345
-     *
346
-     * @access    public
347
-     * @return    void
348
-     */
349
-    public function header_meta_tag()
350
-    {
351
-        print(
352
-            apply_filters(
353
-                'FHEE__EE_Front_Controller__header_meta_tag',
354
-                '<meta name="generator" content="Event Espresso Version ' . EVENT_ESPRESSO_VERSION . "\" />\n")
355
-        );
356
-
357
-        //let's exclude all event type taxonomy term archive pages from search engine indexing
358
-        //@see https://events.codebasehq.com/projects/event-espresso/tickets/10249
359
-        //also exclude all critical pages from indexing
360
-        if (
361
-            (
362
-                is_tax('espresso_event_type')
363
-                && get_option( 'blog_public' ) !== '0'
364
-            )
365
-            || is_page(EE_Registry::instance()->CFG->core->get_critical_pages_array())
366
-        ) {
367
-            print(
368
-                apply_filters(
369
-                    'FHEE__EE_Front_Controller__header_meta_tag__noindex_for_event_type',
370
-                    '<meta name="robots" content="noindex,follow" />' . "\n"
371
-                )
372
-            );
373
-        }
374
-    }
375
-
376
-
377
-
378
-    /**
379
-     * wp_print_scripts
380
-     *
381
-     * @return void
382
-     */
383
-    public function wp_print_scripts()
384
-    {
385
-        global $post;
386
-        if (
387
-            isset($post->EE_Event)
388
-            && $post->EE_Event instanceof EE_Event
389
-            && get_post_type() === 'espresso_events'
390
-            && is_singular()
391
-        ) {
392
-            \EEH_Schema::add_json_linked_data_for_event($post->EE_Event);
393
-        }
394
-    }
395
-
396
-
397
-
398
-    public function enqueueStyle()
399
-    {
400
-        wp_enqueue_style('espresso_default');
401
-        wp_enqueue_style('espresso_custom_css');
402
-    }
403
-
404
-
405
-
406
-
407
-    /***********************************************        THE_CONTENT FILTER HOOK         **********************************************
29
+	/**
30
+	 * @var string $_template_path
31
+	 */
32
+	private $_template_path;
33
+
34
+	/**
35
+	 * @var string $_template
36
+	 */
37
+	private $_template;
38
+
39
+	/**
40
+	 * @type EE_Registry $Registry
41
+	 */
42
+	protected $Registry;
43
+
44
+	/**
45
+	 * @type EE_Request_Handler $Request_Handler
46
+	 */
47
+	protected $Request_Handler;
48
+
49
+	/**
50
+	 * @type EE_Module_Request_Router $Module_Request_Router
51
+	 */
52
+	protected $Module_Request_Router;
53
+
54
+
55
+	/**
56
+	 *    class constructor
57
+	 *    should fire after shortcode, module, addon, or other plugin's default priority init phases have run
58
+	 *
59
+	 * @access    public
60
+	 * @param \EE_Registry              $Registry
61
+	 * @param \EE_Request_Handler       $Request_Handler
62
+	 * @param \EE_Module_Request_Router $Module_Request_Router
63
+	 */
64
+	public function __construct(
65
+		EE_Registry $Registry,
66
+		EE_Request_Handler $Request_Handler,
67
+		EE_Module_Request_Router $Module_Request_Router
68
+	) {
69
+		$this->Registry              = $Registry;
70
+		$this->Request_Handler       = $Request_Handler;
71
+		$this->Module_Request_Router = $Module_Request_Router;
72
+		// determine how to integrate WP_Query with the EE models
73
+		add_action('AHEE__EE_System__initialize', array($this, 'employ_CPT_Strategy'));
74
+		// load other resources and begin to actually run shortcodes and modules
75
+		add_action('wp_loaded', array($this, 'wp_loaded'), 5);
76
+		// analyse the incoming WP request
77
+		add_action('parse_request', array($this, 'get_request'), 1, 1);
78
+		// process request with module factory
79
+		add_action('pre_get_posts', array($this, 'pre_get_posts'), 10, 1);
80
+		// before headers sent
81
+		add_action('wp', array($this, 'wp'), 5);
82
+		// primarily used to process any content shortcodes
83
+		add_action('template_redirect', array($this, 'templateRedirect'), 999);
84
+		// header
85
+		add_action('wp_head', array($this, 'header_meta_tag'), 5);
86
+		add_action('wp_print_scripts', array($this, 'wp_print_scripts'), 10);
87
+		add_filter('template_include', array($this, 'template_include'), 1);
88
+		// display errors
89
+		add_action('loop_start', array($this, 'display_errors'), 2);
90
+		// the content
91
+		// add_filter( 'the_content', array( $this, 'the_content' ), 5, 1 );
92
+		//exclude our private cpt comments
93
+		add_filter('comments_clauses', array($this, 'filter_wp_comments'), 10, 1);
94
+		//make sure any ajax requests will respect the url schema when requests are made against admin-ajax.php (http:// or https://)
95
+		add_filter('admin_url', array($this, 'maybe_force_admin_ajax_ssl'), 200, 1);
96
+		// action hook EE
97
+		do_action('AHEE__EE_Front_Controller__construct__done', $this);
98
+		// for checking that browser cookies are enabled
99
+		if (apply_filters('FHEE__EE_Front_Controller____construct__set_test_cookie', true)) {
100
+			setcookie('ee_cookie_test', uniqid('ect',true), time() + DAY_IN_SECONDS, '/');
101
+		}
102
+	}
103
+
104
+
105
+	/**
106
+	 * @return EE_Request_Handler
107
+	 */
108
+	public function Request_Handler()
109
+	{
110
+		return $this->Request_Handler;
111
+	}
112
+
113
+
114
+	/**
115
+	 * @return EE_Module_Request_Router
116
+	 */
117
+	public function Module_Request_Router()
118
+	{
119
+		return $this->Module_Request_Router;
120
+	}
121
+
122
+
123
+
124
+	/**
125
+	 * @return LegacyShortcodesManager
126
+	 */
127
+	public function getLegacyShortcodesManager()
128
+	{
129
+		return EE_Config::getLegacyShortcodesManager();
130
+	}
131
+
132
+
133
+
134
+
135
+
136
+	/***********************************************        INIT ACTION HOOK         ***********************************************/
137
+
138
+
139
+
140
+	/**
141
+	 * filter_wp_comments
142
+	 * This simply makes sure that any "private" EE CPTs do not have their comments show up in any wp comment
143
+	 * widgets/queries done on frontend
144
+	 *
145
+	 * @param  array $clauses array of comment clauses setup by WP_Comment_Query
146
+	 * @return array array of comment clauses with modifications.
147
+	 */
148
+	public function filter_wp_comments($clauses)
149
+	{
150
+		global $wpdb;
151
+		if (strpos($clauses['join'], $wpdb->posts) !== false) {
152
+			$cpts = EE_Register_CPTs::get_private_CPTs();
153
+			foreach ($cpts as $cpt => $details) {
154
+				$clauses['where'] .= $wpdb->prepare(" AND $wpdb->posts.post_type != %s", $cpt);
155
+			}
156
+		}
157
+		return $clauses;
158
+	}
159
+
160
+
161
+	/**
162
+	 *    employ_CPT_Strategy
163
+	 *
164
+	 * @access    public
165
+	 * @return    void
166
+	 */
167
+	public function employ_CPT_Strategy()
168
+	{
169
+		if (apply_filters('FHEE__EE_Front_Controller__employ_CPT_Strategy', true)) {
170
+			$this->Registry->load_core('CPT_Strategy');
171
+		}
172
+	}
173
+
174
+
175
+	/**
176
+	 * this just makes sure that if the site is using ssl that we force that for any admin ajax calls from frontend
177
+	 *
178
+	 * @param  string $url incoming url
179
+	 * @return string         final assembled url
180
+	 */
181
+	public function maybe_force_admin_ajax_ssl($url)
182
+	{
183
+		if (is_ssl() && preg_match('/admin-ajax.php/', $url)) {
184
+			$url = str_replace('http://', 'https://', $url);
185
+		}
186
+		return $url;
187
+	}
188
+
189
+
190
+
191
+
192
+
193
+
194
+	/***********************************************        WP_LOADED ACTION HOOK         ***********************************************/
195
+
196
+
197
+	/**
198
+	 *    wp_loaded - should fire after shortcode, module, addon, or other plugin's have been registered and their
199
+	 *    default priority init phases have run
200
+	 *
201
+	 * @access    public
202
+	 * @return    void
203
+	 */
204
+	public function wp_loaded()
205
+	{
206
+	}
207
+
208
+
209
+
210
+
211
+
212
+	/***********************************************        PARSE_REQUEST HOOK         ***********************************************/
213
+	/**
214
+	 *    _get_request
215
+	 *
216
+	 * @access public
217
+	 * @param WP $WP
218
+	 * @return void
219
+	 */
220
+	public function get_request(WP $WP)
221
+	{
222
+		do_action('AHEE__EE_Front_Controller__get_request__start');
223
+		$this->Request_Handler->parse_request($WP);
224
+		do_action('AHEE__EE_Front_Controller__get_request__complete');
225
+	}
226
+
227
+
228
+
229
+	/**
230
+	 *    pre_get_posts - basically a module factory for instantiating modules and selecting the final view template
231
+	 *
232
+	 * @access    public
233
+	 * @param   WP_Query $WP_Query
234
+	 * @return    void
235
+	 */
236
+	public function pre_get_posts($WP_Query)
237
+	{
238
+		// only load Module_Request_Router if this is the main query
239
+		if (
240
+			$this->Module_Request_Router instanceof EE_Module_Request_Router
241
+			&& $WP_Query->is_main_query()
242
+		) {
243
+			// cycle thru module routes
244
+			while ($route = $this->Module_Request_Router->get_route($WP_Query)) {
245
+				// determine module and method for route
246
+				$module = $this->Module_Request_Router->resolve_route($route[0], $route[1]);
247
+				if ($module instanceof EED_Module) {
248
+					// get registered view for route
249
+					$this->_template_path = $this->Module_Request_Router->get_view($route);
250
+					// grab module name
251
+					$module_name = $module->module_name();
252
+					// map the module to the module objects
253
+					$this->Registry->modules->{$module_name} = $module;
254
+				}
255
+			}
256
+		}
257
+	}
258
+
259
+
260
+
261
+
262
+
263
+	/***********************************************        WP HOOK         ***********************************************/
264
+
265
+
266
+	/**
267
+	 *    wp - basically last chance to do stuff before headers sent
268
+	 *
269
+	 * @access    public
270
+	 * @return    void
271
+	 */
272
+	public function wp()
273
+	{
274
+	}
275
+
276
+
277
+
278
+	/***********************     GET_HEADER && WP_HEAD HOOK     ***********************/
279
+
280
+
281
+
282
+	/**
283
+	 * callback for the "template_redirect" hook point
284
+	 * checks sidebars for EE widgets
285
+	 * loads resources and assets accordingly
286
+	 *
287
+	 * @return void
288
+	 */
289
+	public function templateRedirect()
290
+	{
291
+		global $wp_query;
292
+		if (empty($wp_query->posts)){
293
+			return;
294
+		}
295
+		// if we already know this is an espresso page, then load assets
296
+		$load_assets = $this->Request_Handler->is_espresso_page();
297
+		// if we are already loading assets then just move along, otherwise check for widgets
298
+		$load_assets = $load_assets ? $load_assets : $this->espresso_widgets_in_active_sidebars();
299
+		if ( $load_assets){
300
+			add_action('wp_enqueue_scripts', array($this, 'enqueueStyle'), 10);
301
+			add_action('wp_print_footer_scripts', array($this, 'enqueueScripts'), 10);
302
+		}
303
+	}
304
+
305
+
306
+
307
+	/**
308
+	 * builds list of active widgets then scans active sidebars looking for them
309
+	 * returns true is an EE widget is found in an active sidebar
310
+	 * Please Note: this does NOT mean that the sidebar or widget
311
+	 * is actually in use in a given template, as that is unfortunately not known
312
+	 * until a sidebar and it's widgets are actually loaded
313
+	 *
314
+	 * @return boolean
315
+	 */
316
+	private function espresso_widgets_in_active_sidebars()
317
+	{
318
+		$espresso_widgets = array();
319
+		foreach ($this->Registry->widgets as $widget_class => $widget) {
320
+			$id_base = EspressoWidget::getIdBase($widget_class);
321
+			if (is_active_widget(false, false, $id_base)) {
322
+				$espresso_widgets[] = $id_base;
323
+			}
324
+		}
325
+		$all_sidebar_widgets = wp_get_sidebars_widgets();
326
+		foreach ($all_sidebar_widgets as $sidebar_name => $sidebar_widgets) {
327
+			if (is_array($sidebar_widgets) && ! empty($sidebar_widgets)) {
328
+				foreach ($sidebar_widgets as $sidebar_widget) {
329
+					foreach ($espresso_widgets as $espresso_widget) {
330
+						if (strpos($sidebar_widget, $espresso_widget) !== false) {
331
+							return true;
332
+						}
333
+					}
334
+				}
335
+			}
336
+		}
337
+		return false;
338
+	}
339
+
340
+
341
+
342
+
343
+	/**
344
+	 *    header_meta_tag
345
+	 *
346
+	 * @access    public
347
+	 * @return    void
348
+	 */
349
+	public function header_meta_tag()
350
+	{
351
+		print(
352
+			apply_filters(
353
+				'FHEE__EE_Front_Controller__header_meta_tag',
354
+				'<meta name="generator" content="Event Espresso Version ' . EVENT_ESPRESSO_VERSION . "\" />\n")
355
+		);
356
+
357
+		//let's exclude all event type taxonomy term archive pages from search engine indexing
358
+		//@see https://events.codebasehq.com/projects/event-espresso/tickets/10249
359
+		//also exclude all critical pages from indexing
360
+		if (
361
+			(
362
+				is_tax('espresso_event_type')
363
+				&& get_option( 'blog_public' ) !== '0'
364
+			)
365
+			|| is_page(EE_Registry::instance()->CFG->core->get_critical_pages_array())
366
+		) {
367
+			print(
368
+				apply_filters(
369
+					'FHEE__EE_Front_Controller__header_meta_tag__noindex_for_event_type',
370
+					'<meta name="robots" content="noindex,follow" />' . "\n"
371
+				)
372
+			);
373
+		}
374
+	}
375
+
376
+
377
+
378
+	/**
379
+	 * wp_print_scripts
380
+	 *
381
+	 * @return void
382
+	 */
383
+	public function wp_print_scripts()
384
+	{
385
+		global $post;
386
+		if (
387
+			isset($post->EE_Event)
388
+			&& $post->EE_Event instanceof EE_Event
389
+			&& get_post_type() === 'espresso_events'
390
+			&& is_singular()
391
+		) {
392
+			\EEH_Schema::add_json_linked_data_for_event($post->EE_Event);
393
+		}
394
+	}
395
+
396
+
397
+
398
+	public function enqueueStyle()
399
+	{
400
+		wp_enqueue_style('espresso_default');
401
+		wp_enqueue_style('espresso_custom_css');
402
+	}
403
+
404
+
405
+
406
+
407
+	/***********************************************        THE_CONTENT FILTER HOOK         **********************************************
408 408
 
409 409
 
410 410
 
@@ -415,108 +415,108 @@  discard block
 block discarded – undo
415 415
     //  * @param   $the_content
416 416
     //  * @return    string
417 417
     //  */
418
-    // public function the_content( $the_content ) {
419
-    // 	// nothing gets loaded at this point unless other systems turn this hookpoint on by using:  add_filter( 'FHEE_run_EE_the_content', '__return_true' );
420
-    // 	if ( apply_filters( 'FHEE_run_EE_the_content', FALSE ) ) {
421
-    // 	}
422
-    // 	return $the_content;
423
-    // }
424
-
425
-
426
-
427
-    /***********************************************        WP_FOOTER         ***********************************************/
428
-
429
-
430
-
431
-    public function enqueueScripts()
432
-    {
433
-        wp_enqueue_script('espresso_core');
434
-    }
435
-
436
-
437
-
438
-    /**
439
-     * display_errors
440
-     *
441
-     * @access public
442
-     * @return void
443
-     * @throws DomainException
444
-     */
445
-    public function display_errors()
446
-    {
447
-        static $shown_already = false;
448
-        do_action('AHEE__EE_Front_Controller__display_errors__begin');
449
-        if (
450
-            ! $shown_already
451
-            && apply_filters('FHEE__EE_Front_Controller__display_errors', true)
452
-            && is_main_query()
453
-            && ! is_feed()
454
-            && in_the_loop()
455
-            && $this->Request_Handler->is_espresso_page()
456
-        ) {
457
-            echo EE_Error::get_notices();
458
-            $shown_already = true;
459
-            EEH_Template::display_template(EE_TEMPLATES . 'espresso-ajax-notices.template.php');
460
-        }
461
-        do_action('AHEE__EE_Front_Controller__display_errors__end');
462
-    }
463
-
464
-
465
-
466
-
467
-
468
-    /***********************************************        UTILITIES         ***********************************************/
469
-    /**
470
-     *    template_include
471
-     *
472
-     * @access    public
473
-     * @param   string $template_include_path
474
-     * @return    string
475
-     */
476
-    public function template_include($template_include_path = null)
477
-    {
478
-        if ($this->Request_Handler->is_espresso_page()) {
479
-            $this->_template_path = ! empty($this->_template_path) ? basename($this->_template_path) : basename($template_include_path);
480
-            $template_path        = EEH_Template::locate_template($this->_template_path, array(), false);
481
-            $this->_template_path = ! empty($template_path) ? $template_path : $template_include_path;
482
-            $this->_template      = basename($this->_template_path);
483
-            return $this->_template_path;
484
-        }
485
-        return $template_include_path;
486
-    }
487
-
488
-
489
-    /**
490
-     *    get_selected_template
491
-     *
492
-     * @access    public
493
-     * @param bool $with_path
494
-     * @return    string
495
-     */
496
-    public function get_selected_template($with_path = false)
497
-    {
498
-        return $with_path ? $this->_template_path : $this->_template;
499
-    }
500
-
501
-
502
-
503
-    /**
504
-     * @deprecated 4.9.26
505
-     * @param string $shortcode_class
506
-     * @param \WP    $wp
507
-     */
508
-    public function initialize_shortcode($shortcode_class = '', WP $wp = null)
509
-    {
510
-        \EE_Error::doing_it_wrong(
511
-            __METHOD__,
512
-            __(
513
-                'Usage is deprecated. Please use \EventEspresso\core\services\shortcodes\LegacyShortcodesManager::initializeShortcode() instead.',
514
-                'event_espresso'
515
-            ),
516
-            '4.9.26'
517
-        );
518
-        $this->getLegacyShortcodesManager()->initializeShortcode($shortcode_class, $wp);
519
-    }
418
+	// public function the_content( $the_content ) {
419
+	// 	// nothing gets loaded at this point unless other systems turn this hookpoint on by using:  add_filter( 'FHEE_run_EE_the_content', '__return_true' );
420
+	// 	if ( apply_filters( 'FHEE_run_EE_the_content', FALSE ) ) {
421
+	// 	}
422
+	// 	return $the_content;
423
+	// }
424
+
425
+
426
+
427
+	/***********************************************        WP_FOOTER         ***********************************************/
428
+
429
+
430
+
431
+	public function enqueueScripts()
432
+	{
433
+		wp_enqueue_script('espresso_core');
434
+	}
435
+
436
+
437
+
438
+	/**
439
+	 * display_errors
440
+	 *
441
+	 * @access public
442
+	 * @return void
443
+	 * @throws DomainException
444
+	 */
445
+	public function display_errors()
446
+	{
447
+		static $shown_already = false;
448
+		do_action('AHEE__EE_Front_Controller__display_errors__begin');
449
+		if (
450
+			! $shown_already
451
+			&& apply_filters('FHEE__EE_Front_Controller__display_errors', true)
452
+			&& is_main_query()
453
+			&& ! is_feed()
454
+			&& in_the_loop()
455
+			&& $this->Request_Handler->is_espresso_page()
456
+		) {
457
+			echo EE_Error::get_notices();
458
+			$shown_already = true;
459
+			EEH_Template::display_template(EE_TEMPLATES . 'espresso-ajax-notices.template.php');
460
+		}
461
+		do_action('AHEE__EE_Front_Controller__display_errors__end');
462
+	}
463
+
464
+
465
+
466
+
467
+
468
+	/***********************************************        UTILITIES         ***********************************************/
469
+	/**
470
+	 *    template_include
471
+	 *
472
+	 * @access    public
473
+	 * @param   string $template_include_path
474
+	 * @return    string
475
+	 */
476
+	public function template_include($template_include_path = null)
477
+	{
478
+		if ($this->Request_Handler->is_espresso_page()) {
479
+			$this->_template_path = ! empty($this->_template_path) ? basename($this->_template_path) : basename($template_include_path);
480
+			$template_path        = EEH_Template::locate_template($this->_template_path, array(), false);
481
+			$this->_template_path = ! empty($template_path) ? $template_path : $template_include_path;
482
+			$this->_template      = basename($this->_template_path);
483
+			return $this->_template_path;
484
+		}
485
+		return $template_include_path;
486
+	}
487
+
488
+
489
+	/**
490
+	 *    get_selected_template
491
+	 *
492
+	 * @access    public
493
+	 * @param bool $with_path
494
+	 * @return    string
495
+	 */
496
+	public function get_selected_template($with_path = false)
497
+	{
498
+		return $with_path ? $this->_template_path : $this->_template;
499
+	}
500
+
501
+
502
+
503
+	/**
504
+	 * @deprecated 4.9.26
505
+	 * @param string $shortcode_class
506
+	 * @param \WP    $wp
507
+	 */
508
+	public function initialize_shortcode($shortcode_class = '', WP $wp = null)
509
+	{
510
+		\EE_Error::doing_it_wrong(
511
+			__METHOD__,
512
+			__(
513
+				'Usage is deprecated. Please use \EventEspresso\core\services\shortcodes\LegacyShortcodesManager::initializeShortcode() instead.',
514
+				'event_espresso'
515
+			),
516
+			'4.9.26'
517
+		);
518
+		$this->getLegacyShortcodesManager()->initializeShortcode($shortcode_class, $wp);
519
+	}
520 520
 
521 521
 }
522 522
 // End of file EE_Front_Controller.core.php
Please login to merge, or discard this patch.
Spacing   +7 added lines, -7 removed lines patch added patch discarded remove patch
@@ -97,7 +97,7 @@  discard block
 block discarded – undo
97 97
         do_action('AHEE__EE_Front_Controller__construct__done', $this);
98 98
         // for checking that browser cookies are enabled
99 99
         if (apply_filters('FHEE__EE_Front_Controller____construct__set_test_cookie', true)) {
100
-            setcookie('ee_cookie_test', uniqid('ect',true), time() + DAY_IN_SECONDS, '/');
100
+            setcookie('ee_cookie_test', uniqid('ect', true), time() + DAY_IN_SECONDS, '/');
101 101
         }
102 102
     }
103 103
 
@@ -289,14 +289,14 @@  discard block
 block discarded – undo
289 289
     public function templateRedirect()
290 290
     {
291 291
         global $wp_query;
292
-        if (empty($wp_query->posts)){
292
+        if (empty($wp_query->posts)) {
293 293
             return;
294 294
         }
295 295
         // if we already know this is an espresso page, then load assets
296 296
         $load_assets = $this->Request_Handler->is_espresso_page();
297 297
         // if we are already loading assets then just move along, otherwise check for widgets
298 298
         $load_assets = $load_assets ? $load_assets : $this->espresso_widgets_in_active_sidebars();
299
-        if ( $load_assets){
299
+        if ($load_assets) {
300 300
             add_action('wp_enqueue_scripts', array($this, 'enqueueStyle'), 10);
301 301
             add_action('wp_print_footer_scripts', array($this, 'enqueueScripts'), 10);
302 302
         }
@@ -351,7 +351,7 @@  discard block
 block discarded – undo
351 351
         print(
352 352
             apply_filters(
353 353
                 'FHEE__EE_Front_Controller__header_meta_tag',
354
-                '<meta name="generator" content="Event Espresso Version ' . EVENT_ESPRESSO_VERSION . "\" />\n")
354
+                '<meta name="generator" content="Event Espresso Version '.EVENT_ESPRESSO_VERSION."\" />\n")
355 355
         );
356 356
 
357 357
         //let's exclude all event type taxonomy term archive pages from search engine indexing
@@ -360,14 +360,14 @@  discard block
 block discarded – undo
360 360
         if (
361 361
             (
362 362
                 is_tax('espresso_event_type')
363
-                && get_option( 'blog_public' ) !== '0'
363
+                && get_option('blog_public') !== '0'
364 364
             )
365 365
             || is_page(EE_Registry::instance()->CFG->core->get_critical_pages_array())
366 366
         ) {
367 367
             print(
368 368
                 apply_filters(
369 369
                     'FHEE__EE_Front_Controller__header_meta_tag__noindex_for_event_type',
370
-                    '<meta name="robots" content="noindex,follow" />' . "\n"
370
+                    '<meta name="robots" content="noindex,follow" />'."\n"
371 371
                 )
372 372
             );
373 373
         }
@@ -456,7 +456,7 @@  discard block
 block discarded – undo
456 456
         ) {
457 457
             echo EE_Error::get_notices();
458 458
             $shown_already = true;
459
-            EEH_Template::display_template(EE_TEMPLATES . 'espresso-ajax-notices.template.php');
459
+            EEH_Template::display_template(EE_TEMPLATES.'espresso-ajax-notices.template.php');
460 460
         }
461 461
         do_action('AHEE__EE_Front_Controller__display_errors__end');
462 462
     }
Please login to merge, or discard this patch.
core/libraries/plugin_api/EE_Register_Payment_Method.lib.php 2 patches
Indentation   +107 added lines, -107 removed lines patch added patch discarded remove patch
@@ -18,122 +18,122 @@
 block discarded – undo
18 18
 class EE_Register_Payment_Method implements EEI_Plugin_API
19 19
 {
20 20
 
21
-    /**
22
-     * Holds values for registered payment methods
23
-     *
24
-     * @var array
25
-     */
26
-    protected static $_settings = array();
21
+	/**
22
+	 * Holds values for registered payment methods
23
+	 *
24
+	 * @var array
25
+	 */
26
+	protected static $_settings = array();
27 27
 
28 28
 
29 29
 
30
-    /**
31
-     * Method for registering new EE_PMT_Base children
32
-     *
33
-     * @since    4.5.0
34
-     * @param string  $payment_method_id    a unique identifier for this set of modules Required.
35
-     * @param  array  $setup_args           an array of arguments provided for registering modules Required.{
36
-     * @type string[] $payment_method_paths each element is the folder containing the EE_PMT_Base child class
37
-     *                                      (eg, 'public_html/wp-content/plugins/my_plugin/Payomatic/' which contains
38
-     *                                      the files EE_PMT_Payomatic.pm.php)
39
-     *                                      }
40
-     * @throws EE_Error
41
-     * @type array payment_method_paths    an array of full server paths to folders containing any EE_PMT_Base
42
-     *       children, or to the EED_Module files themselves
43
-     * @return void
44
-     */
45
-    public static function register($payment_method_id = null, $setup_args = array())
46
-    {
47
-        //required fields MUST be present, so let's make sure they are.
48
-        if (empty($payment_method_id) || ! is_array($setup_args) || empty($setup_args['payment_method_paths'])) {
49
-            throw new EE_Error(
50
-                esc_html__(
51
-                    'In order to register Payment Methods with EE_Register_Payment_Method::register(), you must include a "payment_method_id" (a unique identifier for this set of modules), and an array containing the following keys: "payment_method_paths" (an array of full server paths to folders that contain modules, or to the module files themselves)',
52
-                    'event_espresso'
53
-                )
54
-            );
55
-        }
56
-        //make sure we don't register twice
57
-        if (isset(self::$_settings[$payment_method_id])) {
58
-            return;
59
-        }
60
-        //make sure this was called in the right place!
61
-        if (
62
-            ! did_action('AHEE__EE_System__load_espresso_addons')
63
-            || did_action('AHEE__EE_System__register_shortcodes_modules_and_widgets')
64
-        ) {
65
-            EE_Error::doing_it_wrong(
66
-                __METHOD__,
67
-                esc_html__(
68
-                    'An attempt to register modules has failed because it was not registered at the correct time.  Please use the "AHEE__EE_System__register_shortcodes_modules_and_widgets" hook to register modules.',
69
-                    'event_espresso'
70
-                ),
71
-                '4.3.0'
72
-            );
73
-        }
74
-        //setup $_settings array from incoming values.
75
-        self::$_settings[$payment_method_id] = array(
76
-            // array of full server paths to any EE_PMT_Base children used
77
-            'payment_method_paths' => isset($setup_args['payment_method_paths'])
78
-                ? (array)$setup_args['payment_method_paths']
79
-                : array(),
80
-        );
81
-        // add to list of modules to be registered
82
-        add_filter(
83
-            'FHEE__EE_Payment_Method_Manager__register_payment_methods__payment_methods_to_register',
84
-            array('EE_Register_Payment_Method', 'add_payment_methods')
85
-        );
86
-        /**
87
-         * If EE_Payment_Method_Manager::register_payment_methods has already been called,
88
-         * we need it to be called again (because it's missing the payment method we JUST registered here).
89
-         * We are assuming EE_Register_payment_method::register() will be called only once
90
-         * per payment method from an addon, so going with that assumption we should always do this.
91
-         * If that assumption is false, we should verify this newly-registered payment method
92
-         * isn't on the EE_Payment_Method_Manager::_payment_method_types array before calling this
93
-         * (this code should be changed to improve performance)
94
-         */
95
-        if (did_action('FHEE__EE_Payment_Method_Manager__register_payment_methods__registered_payment_methods')) {
96
-            EE_Registry::instance()->load_lib('Payment_Method_Manager');
97
-            EE_Payment_Method_Manager::instance()->maybe_register_payment_methods(true);
98
-        }
99
-    }
30
+	/**
31
+	 * Method for registering new EE_PMT_Base children
32
+	 *
33
+	 * @since    4.5.0
34
+	 * @param string  $payment_method_id    a unique identifier for this set of modules Required.
35
+	 * @param  array  $setup_args           an array of arguments provided for registering modules Required.{
36
+	 * @type string[] $payment_method_paths each element is the folder containing the EE_PMT_Base child class
37
+	 *                                      (eg, 'public_html/wp-content/plugins/my_plugin/Payomatic/' which contains
38
+	 *                                      the files EE_PMT_Payomatic.pm.php)
39
+	 *                                      }
40
+	 * @throws EE_Error
41
+	 * @type array payment_method_paths    an array of full server paths to folders containing any EE_PMT_Base
42
+	 *       children, or to the EED_Module files themselves
43
+	 * @return void
44
+	 */
45
+	public static function register($payment_method_id = null, $setup_args = array())
46
+	{
47
+		//required fields MUST be present, so let's make sure they are.
48
+		if (empty($payment_method_id) || ! is_array($setup_args) || empty($setup_args['payment_method_paths'])) {
49
+			throw new EE_Error(
50
+				esc_html__(
51
+					'In order to register Payment Methods with EE_Register_Payment_Method::register(), you must include a "payment_method_id" (a unique identifier for this set of modules), and an array containing the following keys: "payment_method_paths" (an array of full server paths to folders that contain modules, or to the module files themselves)',
52
+					'event_espresso'
53
+				)
54
+			);
55
+		}
56
+		//make sure we don't register twice
57
+		if (isset(self::$_settings[$payment_method_id])) {
58
+			return;
59
+		}
60
+		//make sure this was called in the right place!
61
+		if (
62
+			! did_action('AHEE__EE_System__load_espresso_addons')
63
+			|| did_action('AHEE__EE_System__register_shortcodes_modules_and_widgets')
64
+		) {
65
+			EE_Error::doing_it_wrong(
66
+				__METHOD__,
67
+				esc_html__(
68
+					'An attempt to register modules has failed because it was not registered at the correct time.  Please use the "AHEE__EE_System__register_shortcodes_modules_and_widgets" hook to register modules.',
69
+					'event_espresso'
70
+				),
71
+				'4.3.0'
72
+			);
73
+		}
74
+		//setup $_settings array from incoming values.
75
+		self::$_settings[$payment_method_id] = array(
76
+			// array of full server paths to any EE_PMT_Base children used
77
+			'payment_method_paths' => isset($setup_args['payment_method_paths'])
78
+				? (array)$setup_args['payment_method_paths']
79
+				: array(),
80
+		);
81
+		// add to list of modules to be registered
82
+		add_filter(
83
+			'FHEE__EE_Payment_Method_Manager__register_payment_methods__payment_methods_to_register',
84
+			array('EE_Register_Payment_Method', 'add_payment_methods')
85
+		);
86
+		/**
87
+		 * If EE_Payment_Method_Manager::register_payment_methods has already been called,
88
+		 * we need it to be called again (because it's missing the payment method we JUST registered here).
89
+		 * We are assuming EE_Register_payment_method::register() will be called only once
90
+		 * per payment method from an addon, so going with that assumption we should always do this.
91
+		 * If that assumption is false, we should verify this newly-registered payment method
92
+		 * isn't on the EE_Payment_Method_Manager::_payment_method_types array before calling this
93
+		 * (this code should be changed to improve performance)
94
+		 */
95
+		if (did_action('FHEE__EE_Payment_Method_Manager__register_payment_methods__registered_payment_methods')) {
96
+			EE_Registry::instance()->load_lib('Payment_Method_Manager');
97
+			EE_Payment_Method_Manager::instance()->maybe_register_payment_methods(true);
98
+		}
99
+	}
100 100
 
101 101
 
102 102
 
103
-    /**
104
-     * Filters the list of payment methods to add ours.
105
-     * and they're just full filepaths to FOLDERS containing a payment method class file. Eg.
106
-     *
107
-     * @param array $payment_method_folders array of paths to all payment methods that require registering
108
-     * @return array
109
-     */
110
-    public static function add_payment_methods($payment_method_folders)
111
-    {
112
-        foreach (self::$_settings as $settings) {
113
-            $payment_method_folders = array_merge(
114
-                $payment_method_folders,
115
-                $settings['payment_method_paths']
116
-            );
117
-        }
118
-        return $payment_method_folders;
119
-    }
103
+	/**
104
+	 * Filters the list of payment methods to add ours.
105
+	 * and they're just full filepaths to FOLDERS containing a payment method class file. Eg.
106
+	 *
107
+	 * @param array $payment_method_folders array of paths to all payment methods that require registering
108
+	 * @return array
109
+	 */
110
+	public static function add_payment_methods($payment_method_folders)
111
+	{
112
+		foreach (self::$_settings as $settings) {
113
+			$payment_method_folders = array_merge(
114
+				$payment_method_folders,
115
+				$settings['payment_method_paths']
116
+			);
117
+		}
118
+		return $payment_method_folders;
119
+	}
120 120
 
121 121
 
122 122
 
123
-    /**
124
-     * This deregisters a module that was previously registered with a specific $module_id.
125
-     *
126
-     * @since    4.3.0
127
-     *
128
-     * @param string $module_id the name for the module that was previously registered
129
-     * @return void
130
-     */
131
-    public static function deregister($module_id = null)
132
-    {
133
-        if (isset(self::$_settings[$module_id])) {
134
-            unset(self::$_settings[$module_id]);
135
-        }
136
-    }
123
+	/**
124
+	 * This deregisters a module that was previously registered with a specific $module_id.
125
+	 *
126
+	 * @since    4.3.0
127
+	 *
128
+	 * @param string $module_id the name for the module that was previously registered
129
+	 * @return void
130
+	 */
131
+	public static function deregister($module_id = null)
132
+	{
133
+		if (isset(self::$_settings[$module_id])) {
134
+			unset(self::$_settings[$module_id]);
135
+		}
136
+	}
137 137
 
138 138
 }
139 139
 // End of file EE_Register_Payment_Method.lib.php
Please login to merge, or discard this patch.
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -75,7 +75,7 @@
 block discarded – undo
75 75
         self::$_settings[$payment_method_id] = array(
76 76
             // array of full server paths to any EE_PMT_Base children used
77 77
             'payment_method_paths' => isset($setup_args['payment_method_paths'])
78
-                ? (array)$setup_args['payment_method_paths']
78
+                ? (array) $setup_args['payment_method_paths']
79 79
                 : array(),
80 80
         );
81 81
         // add to list of modules to be registered
Please login to merge, or discard this patch.
core/libraries/payment_methods/EE_Payment_Method_Manager.lib.php 2 patches
Indentation   +419 added lines, -419 removed lines patch added patch discarded remove patch
@@ -17,420 +17,420 @@  discard block
 block discarded – undo
17 17
 class EE_Payment_Method_Manager
18 18
 {
19 19
 
20
-    /**
21
-     * @var EE_Payment_Method_Manager $_instance
22
-     */
23
-    private static $_instance;
24
-
25
-    /**
26
-     * @var array keys are class names without 'EE_PMT_', values are their filepaths
27
-     */
28
-    protected $_payment_method_types = array();
29
-
30
-
31
-
32
-    /**
33
-     * @singleton method used to instantiate class object
34
-     * @return EE_Payment_Method_Manager instance
35
-     */
36
-    public static function instance()
37
-    {
38
-        // check if class object is instantiated, and instantiated properly
39
-        if (! self::$_instance instanceof EE_Payment_Method_Manager) {
40
-            self::$_instance = new self();
41
-        }
42
-        EE_Registry::instance()->load_lib('PMT_Base');
43
-        return self::$_instance;
44
-    }
45
-
46
-
47
-
48
-    /**
49
-     * Resets the instance and returns a new one
50
-     *
51
-     * @return EE_Payment_Method_Manager
52
-     */
53
-    public static function reset()
54
-    {
55
-        self::$_instance = null;
56
-        return self::instance();
57
-    }
58
-
59
-
60
-
61
-    /**
62
-     * If necessary, re-register payment methods
63
-     *
64
-     * @param boolean $force_recheck whether to recheck for payment method types,
65
-     *                               or just re-use the PMTs we found last time we checked during this request (if
66
-     *                               we have not yet checked during this request, then we need to check anyways)
67
-     */
68
-    public function maybe_register_payment_methods($force_recheck = false)
69
-    {
70
-        if (! $this->_payment_method_types || $force_recheck) {
71
-            $this->_register_payment_methods();
72
-            //if in admin lets ensure caps are set.
73
-            if (is_admin()) {
74
-                add_filter('FHEE__EE_Capabilities__init_caps_map__caps', array($this, 'add_payment_method_caps'));
75
-                EE_Registry::instance()->CAP->init_caps();
76
-            }
77
-        }
78
-    }
79
-
80
-
81
-
82
-    /**
83
-     * register_payment_methods
84
-     *
85
-     * @return array
86
-     */
87
-    protected function _register_payment_methods()
88
-    {
89
-        // grab list of installed modules
90
-        $pm_to_register = glob(EE_PAYMENT_METHODS . '*', GLOB_ONLYDIR);
91
-        // filter list of modules to register
92
-        $pm_to_register = apply_filters(
93
-            'FHEE__EE_Payment_Method_Manager__register_payment_methods__payment_methods_to_register',
94
-            $pm_to_register
95
-        );
96
-        // loop through folders
97
-        foreach ($pm_to_register as $pm_path) {
98
-            $this->register_payment_method($pm_path);
99
-        }
100
-        do_action('FHEE__EE_Payment_Method_Manager__register_payment_methods__registered_payment_methods');
101
-        // filter list of installed modules
102
-        //keep them organized alphabetically by the payment method type's name
103
-        ksort($this->_payment_method_types);
104
-        return apply_filters(
105
-            'FHEE__EE_Payment_Method_Manager__register_payment_methods__installed_payment_methods',
106
-            $this->_payment_method_types
107
-        );
108
-    }
109
-
110
-
111
-
112
-    /**
113
-     * register_payment_method- makes core aware of this payment method
114
-     *
115
-     * @param string $payment_method_path - full path up to and including payment method folder
116
-     * @return boolean
117
-     */
118
-    public function register_payment_method($payment_method_path = '')
119
-    {
120
-        do_action('AHEE__EE_Payment_Method_Manager__register_payment_method__begin', $payment_method_path);
121
-        $module_ext = '.pm.php';
122
-        // make all separators match
123
-        $payment_method_path = rtrim(str_replace('/\\', DS, $payment_method_path), DS);
124
-        // grab and sanitize module name
125
-        $module_dir = basename($payment_method_path);
126
-        // create classname from module directory name
127
-        $module = str_replace(array('_', ' '), array(' ', '_'), $module_dir);
128
-        // add class prefix
129
-        $module_class = 'EE_PMT_' . $module;
130
-        // does the module exist ?
131
-        if (! is_readable($payment_method_path . DS . $module_class . $module_ext)) {
132
-            $msg = sprintf(
133
-                esc_html__(
134
-                    'The requested %s payment method file could not be found or is not readable due to file permissions.',
135
-                    'event_espresso'
136
-                ), $module
137
-            );
138
-            EE_Error::add_error($msg . '||' . $msg, __FILE__, __FUNCTION__, __LINE__);
139
-            return false;
140
-        }
141
-        // load the module class file
142
-        require_once($payment_method_path . DS . $module_class . $module_ext);
143
-        // verify that class exists
144
-        if (! class_exists($module_class)) {
145
-            $msg = sprintf(
146
-                esc_html__('The requested %s module class does not exist.', 'event_espresso'),
147
-                $module_class
148
-            );
149
-            EE_Error::add_error($msg . '||' . $msg, __FILE__, __FUNCTION__, __LINE__);
150
-            return false;
151
-        }
152
-        // add to array of registered modules
153
-        $this->_payment_method_types[$module] = $payment_method_path . DS . $module_class . $module_ext;
154
-        return true;
155
-    }
156
-
157
-
158
-
159
-    /**
160
-     * Checks if a payment method has been registered, and if so includes it
161
-     *
162
-     * @param string  $payment_method_name like 'PayPal_Pro', (ie classname without the prefix 'EEPM_')
163
-     * @param boolean $force_recheck       whether to force re-checking for new payment method types
164
-     * @return boolean
165
-     */
166
-    public function payment_method_type_exists($payment_method_name, $force_recheck = false)
167
-    {
168
-        if (
169
-            $force_recheck
170
-            || ! is_array($this->_payment_method_types)
171
-            || ! isset($this->_payment_method_types[$payment_method_name])
172
-        ) {
173
-            $this->maybe_register_payment_methods($force_recheck);
174
-        }
175
-        if (isset($this->_payment_method_types[$payment_method_name])) {
176
-            require_once($this->_payment_method_types[$payment_method_name]);
177
-            return true;
178
-        }
179
-        return false;
180
-    }
181
-
182
-
183
-
184
-    /**
185
-     * Returns all the class names of the various payment method types
186
-     *
187
-     * @param boolean $with_prefixes TRUE: get payment method type class names; false just their 'names'
188
-     *                               (what you'd find in wp_esp_payment_method.PMD_type)
189
-     * @param boolean $force_recheck whether to force re-checking for new payment method types
190
-     * @return array
191
-     */
192
-    public function payment_method_type_names($with_prefixes = false, $force_recheck = false)
193
-    {
194
-        $this->maybe_register_payment_methods($force_recheck);
195
-        if ($with_prefixes) {
196
-            $classnames = array_keys($this->_payment_method_types);
197
-            $payment_methods = array();
198
-            foreach ($classnames as $classname) {
199
-                $payment_methods[] = $this->payment_method_class_from_type($classname);
200
-            }
201
-            return $payment_methods;
202
-        }
203
-        return array_keys($this->_payment_method_types);
204
-    }
205
-
206
-
207
-
208
-    /**
209
-     * Gets an object of each payment method type, none of which are bound to a
210
-     * payment method instance
211
-     *
212
-     * @param boolean $force_recheck whether to force re-checking for new payment method types
213
-     * @return EE_PMT_Base[]
214
-     */
215
-    public function payment_method_types($force_recheck = false)
216
-    {
217
-        $this->maybe_register_payment_methods($force_recheck);
218
-        $payment_method_objects = array();
219
-        foreach ($this->payment_method_type_names(true) as $classname) {
220
-            $payment_method_objects[] = new $classname;
221
-        }
222
-        return $payment_method_objects;
223
-    }
224
-
225
-
226
-
227
-    /**
228
-     * Changes the payment method's classname into the payment method type's name
229
-     * (as used on the payment method's table's PMD_type field)
230
-     *
231
-     * @param string $classname
232
-     * @return string
233
-     */
234
-    public function payment_method_type_sans_class_prefix($classname)
235
-    {
236
-        return str_replace('EE_PMT_', '', $classname);
237
-    }
238
-
239
-
240
-
241
-    /**
242
-     * Does the opposite of payment-method_type_sans_prefix
243
-     *
244
-     * @param string $type
245
-     * @return string
246
-     */
247
-    public function payment_method_class_from_type($type)
248
-    {
249
-        $this->maybe_register_payment_methods();
250
-        return 'EE_PMT_' . $type;
251
-    }
252
-
253
-
254
-
255
-    /**
256
-     * Activates a payment method of the given type.
257
-     *
258
-     * @param string $payment_method_type the PMT_type; for EE_PMT_Invoice this would be 'Invoice'
259
-     * @return EE_Payment_Method
260
-     * @throws EE_Error
261
-     */
262
-    public function activate_a_payment_method_of_type($payment_method_type)
263
-    {
264
-        $payment_method = EEM_Payment_Method::instance()->get_one_of_type($payment_method_type);
265
-        if (! $payment_method instanceof EE_Payment_Method) {
266
-            $pm_type_class = $this->payment_method_class_from_type($payment_method_type);
267
-            if (class_exists($pm_type_class)) {
268
-                /** @var $pm_type_obj EE_PMT_Base */
269
-                $pm_type_obj = new $pm_type_class;
270
-                $payment_method = EEM_Payment_Method::instance()->get_one_by_slug($pm_type_obj->system_name());
271
-                if (! $payment_method) {
272
-                    $payment_method = $this->create_payment_method_of_type($pm_type_obj);
273
-                }
274
-                $payment_method->set_type($payment_method_type);
275
-                $this->initialize_payment_method($payment_method);
276
-            } else {
277
-                throw new EE_Error(
278
-                    sprintf(
279
-                        esc_html__(
280
-                            'There is no payment method of type %1$s, so it could not be activated',
281
-                            'event_espresso'
282
-                        ),
283
-                        $pm_type_class
284
-                    )
285
-                );
286
-            }
287
-        }
288
-        $payment_method->set_active();
289
-        $payment_method->save();
290
-        if ($payment_method->type() === 'Invoice') {
291
-            /** @type EE_Message_Resource_Manager $message_resource_manager */
292
-            $message_resource_manager = EE_Registry::instance()->load_lib('Message_Resource_Manager');
293
-            $message_resource_manager->ensure_message_type_is_active('invoice', 'html');
294
-            $message_resource_manager->ensure_messenger_is_active('pdf');
295
-            EE_Error::add_persistent_admin_notice(
296
-                'invoice_pm_requirements_notice',
297
-                sprintf(
298
-                    esc_html__(
299
-                        'The Invoice payment method has been activated. It requires the invoice message type, html messenger, and pdf messenger be activated as well for the %1$smessages system%2$s, so it has been automatically verified that they are also active.',
300
-                        'event_espresso'
301
-                    ),
302
-                    '<a href="' . admin_url('admin.php?page=espresso_messages') . '">',
303
-                    '</a>'
304
-                ),
305
-                true
306
-            );
307
-        }
308
-        return $payment_method;
309
-    }
310
-
311
-
312
-
313
-    /**
314
-     * Creates a payment method of the specified type. Does not save it.
315
-     *
316
-     * @global WP_User    $current_user
317
-     * @param EE_PMT_Base $pm_type_obj
318
-     * @return EE_Payment_Method
319
-     * @throws EE_Error
320
-     */
321
-    public function create_payment_method_of_type($pm_type_obj)
322
-    {
323
-        global $current_user;
324
-        $payment_method = EE_Payment_Method::new_instance(
325
-            array(
326
-                'PMD_type'       => $pm_type_obj->system_name(),
327
-                'PMD_name'       => $pm_type_obj->pretty_name(),
328
-                'PMD_admin_name' => $pm_type_obj->pretty_name(),
329
-                'PMD_slug'       => $pm_type_obj->system_name(),//automatically converted to slug
330
-                'PMD_wp_user'    => $current_user->ID,
331
-                'PMD_order'      => EEM_Payment_Method::instance()->count(
332
-                        array(array('PMD_type' => array('!=', 'Admin_Only')))
333
-                    ) * 10,
334
-            )
335
-        );
336
-        return $payment_method;
337
-    }
338
-
339
-
340
-
341
-    /**
342
-     * Sets the initial payment method properties (including extra meta)
343
-     *
344
-     * @param EE_Payment_Method $payment_method
345
-     * @return EE_Payment_Method
346
-     * @throws EE_Error
347
-     */
348
-    public function initialize_payment_method($payment_method)
349
-    {
350
-        $pm_type_obj = $payment_method->type_obj();
351
-        $payment_method->set_description($pm_type_obj->default_description());
352
-        if (! $payment_method->button_url()) {
353
-            $payment_method->set_button_url($pm_type_obj->default_button_url());
354
-        }
355
-        //now add setup its default extra meta properties
356
-        $extra_metas = $pm_type_obj->settings_form()->extra_meta_inputs();
357
-        if (! empty($extra_metas)) {
358
-            //verify the payment method has an ID before adding extra meta
359
-            if (! $payment_method->ID()) {
360
-                $payment_method->save();
361
-            }
362
-            foreach ($extra_metas as $meta_name => $input) {
363
-                $payment_method->update_extra_meta($meta_name, $input->raw_value());
364
-            }
365
-        }
366
-        return $payment_method;
367
-    }
368
-
369
-
370
-
371
-    /**
372
-     * Makes sure the payment method is related to the specified payment method
373
-     *
374
-     * @deprecated in 4.9.40 because the currency payment method table is being deprecated
375
-     * @param EE_Payment_Method $payment_method
376
-     * @return EE_Payment_Method
377
-     * @throws EE_Error
378
-     */
379
-    public function set_usable_currencies_on_payment_method($payment_method)
380
-    {
381
-        EE_Error::doing_it_wrong(
382
-            'EE_Payment_Method_Manager::set_usable_currencies_on_payment_method',
383
-            esc_html__(
384
-                'We no longer define what currencies are usable by payment methods. Its not used nor efficient.',
385
-                'event_espresso'
386
-            ),
387
-            '4.9.40'
388
-        );
389
-        return $payment_method;
390
-    }
391
-
392
-
393
-
394
-    /**
395
-     * Deactivates a payment method of the given payment method slug.
396
-     *
397
-     * @param string $payment_method_slug The slug for the payment method to deactivate.
398
-     * @return int count of rows updated.
399
-     * @throws EE_Error
400
-     */
401
-    public function deactivate_payment_method($payment_method_slug)
402
-    {
403
-        EE_Log::instance()->log(
404
-            __FILE__,
405
-            __FUNCTION__,
406
-            sprintf(
407
-                esc_html__(
408
-                    'Payment method with slug %1$s is being deactivated by site admin',
409
-                    'event_espresso'
410
-                ),
411
-                $payment_method_slug
412
-            ),
413
-            'payment_method_change'
414
-        );
415
-        $count_updated = EEM_Payment_Method::instance()->update(
416
-            array('PMD_scope' => array()),
417
-            array(array('PMD_slug' => $payment_method_slug))
418
-        );
419
-        return $count_updated;
420
-    }
421
-
422
-
423
-
424
-    /**
425
-     * callback for FHEE__EE_Capabilities__init_caps_map__caps filter to add dynamic payment method
426
-     * access caps.
427
-     *
428
-     * @param array $caps capabilities being filtered
429
-     * @return array
430
-     */
431
-    public function add_payment_method_caps($caps)
432
-    {
433
-        /* add dynamic caps from payment methods
20
+	/**
21
+	 * @var EE_Payment_Method_Manager $_instance
22
+	 */
23
+	private static $_instance;
24
+
25
+	/**
26
+	 * @var array keys are class names without 'EE_PMT_', values are their filepaths
27
+	 */
28
+	protected $_payment_method_types = array();
29
+
30
+
31
+
32
+	/**
33
+	 * @singleton method used to instantiate class object
34
+	 * @return EE_Payment_Method_Manager instance
35
+	 */
36
+	public static function instance()
37
+	{
38
+		// check if class object is instantiated, and instantiated properly
39
+		if (! self::$_instance instanceof EE_Payment_Method_Manager) {
40
+			self::$_instance = new self();
41
+		}
42
+		EE_Registry::instance()->load_lib('PMT_Base');
43
+		return self::$_instance;
44
+	}
45
+
46
+
47
+
48
+	/**
49
+	 * Resets the instance and returns a new one
50
+	 *
51
+	 * @return EE_Payment_Method_Manager
52
+	 */
53
+	public static function reset()
54
+	{
55
+		self::$_instance = null;
56
+		return self::instance();
57
+	}
58
+
59
+
60
+
61
+	/**
62
+	 * If necessary, re-register payment methods
63
+	 *
64
+	 * @param boolean $force_recheck whether to recheck for payment method types,
65
+	 *                               or just re-use the PMTs we found last time we checked during this request (if
66
+	 *                               we have not yet checked during this request, then we need to check anyways)
67
+	 */
68
+	public function maybe_register_payment_methods($force_recheck = false)
69
+	{
70
+		if (! $this->_payment_method_types || $force_recheck) {
71
+			$this->_register_payment_methods();
72
+			//if in admin lets ensure caps are set.
73
+			if (is_admin()) {
74
+				add_filter('FHEE__EE_Capabilities__init_caps_map__caps', array($this, 'add_payment_method_caps'));
75
+				EE_Registry::instance()->CAP->init_caps();
76
+			}
77
+		}
78
+	}
79
+
80
+
81
+
82
+	/**
83
+	 * register_payment_methods
84
+	 *
85
+	 * @return array
86
+	 */
87
+	protected function _register_payment_methods()
88
+	{
89
+		// grab list of installed modules
90
+		$pm_to_register = glob(EE_PAYMENT_METHODS . '*', GLOB_ONLYDIR);
91
+		// filter list of modules to register
92
+		$pm_to_register = apply_filters(
93
+			'FHEE__EE_Payment_Method_Manager__register_payment_methods__payment_methods_to_register',
94
+			$pm_to_register
95
+		);
96
+		// loop through folders
97
+		foreach ($pm_to_register as $pm_path) {
98
+			$this->register_payment_method($pm_path);
99
+		}
100
+		do_action('FHEE__EE_Payment_Method_Manager__register_payment_methods__registered_payment_methods');
101
+		// filter list of installed modules
102
+		//keep them organized alphabetically by the payment method type's name
103
+		ksort($this->_payment_method_types);
104
+		return apply_filters(
105
+			'FHEE__EE_Payment_Method_Manager__register_payment_methods__installed_payment_methods',
106
+			$this->_payment_method_types
107
+		);
108
+	}
109
+
110
+
111
+
112
+	/**
113
+	 * register_payment_method- makes core aware of this payment method
114
+	 *
115
+	 * @param string $payment_method_path - full path up to and including payment method folder
116
+	 * @return boolean
117
+	 */
118
+	public function register_payment_method($payment_method_path = '')
119
+	{
120
+		do_action('AHEE__EE_Payment_Method_Manager__register_payment_method__begin', $payment_method_path);
121
+		$module_ext = '.pm.php';
122
+		// make all separators match
123
+		$payment_method_path = rtrim(str_replace('/\\', DS, $payment_method_path), DS);
124
+		// grab and sanitize module name
125
+		$module_dir = basename($payment_method_path);
126
+		// create classname from module directory name
127
+		$module = str_replace(array('_', ' '), array(' ', '_'), $module_dir);
128
+		// add class prefix
129
+		$module_class = 'EE_PMT_' . $module;
130
+		// does the module exist ?
131
+		if (! is_readable($payment_method_path . DS . $module_class . $module_ext)) {
132
+			$msg = sprintf(
133
+				esc_html__(
134
+					'The requested %s payment method file could not be found or is not readable due to file permissions.',
135
+					'event_espresso'
136
+				), $module
137
+			);
138
+			EE_Error::add_error($msg . '||' . $msg, __FILE__, __FUNCTION__, __LINE__);
139
+			return false;
140
+		}
141
+		// load the module class file
142
+		require_once($payment_method_path . DS . $module_class . $module_ext);
143
+		// verify that class exists
144
+		if (! class_exists($module_class)) {
145
+			$msg = sprintf(
146
+				esc_html__('The requested %s module class does not exist.', 'event_espresso'),
147
+				$module_class
148
+			);
149
+			EE_Error::add_error($msg . '||' . $msg, __FILE__, __FUNCTION__, __LINE__);
150
+			return false;
151
+		}
152
+		// add to array of registered modules
153
+		$this->_payment_method_types[$module] = $payment_method_path . DS . $module_class . $module_ext;
154
+		return true;
155
+	}
156
+
157
+
158
+
159
+	/**
160
+	 * Checks if a payment method has been registered, and if so includes it
161
+	 *
162
+	 * @param string  $payment_method_name like 'PayPal_Pro', (ie classname without the prefix 'EEPM_')
163
+	 * @param boolean $force_recheck       whether to force re-checking for new payment method types
164
+	 * @return boolean
165
+	 */
166
+	public function payment_method_type_exists($payment_method_name, $force_recheck = false)
167
+	{
168
+		if (
169
+			$force_recheck
170
+			|| ! is_array($this->_payment_method_types)
171
+			|| ! isset($this->_payment_method_types[$payment_method_name])
172
+		) {
173
+			$this->maybe_register_payment_methods($force_recheck);
174
+		}
175
+		if (isset($this->_payment_method_types[$payment_method_name])) {
176
+			require_once($this->_payment_method_types[$payment_method_name]);
177
+			return true;
178
+		}
179
+		return false;
180
+	}
181
+
182
+
183
+
184
+	/**
185
+	 * Returns all the class names of the various payment method types
186
+	 *
187
+	 * @param boolean $with_prefixes TRUE: get payment method type class names; false just their 'names'
188
+	 *                               (what you'd find in wp_esp_payment_method.PMD_type)
189
+	 * @param boolean $force_recheck whether to force re-checking for new payment method types
190
+	 * @return array
191
+	 */
192
+	public function payment_method_type_names($with_prefixes = false, $force_recheck = false)
193
+	{
194
+		$this->maybe_register_payment_methods($force_recheck);
195
+		if ($with_prefixes) {
196
+			$classnames = array_keys($this->_payment_method_types);
197
+			$payment_methods = array();
198
+			foreach ($classnames as $classname) {
199
+				$payment_methods[] = $this->payment_method_class_from_type($classname);
200
+			}
201
+			return $payment_methods;
202
+		}
203
+		return array_keys($this->_payment_method_types);
204
+	}
205
+
206
+
207
+
208
+	/**
209
+	 * Gets an object of each payment method type, none of which are bound to a
210
+	 * payment method instance
211
+	 *
212
+	 * @param boolean $force_recheck whether to force re-checking for new payment method types
213
+	 * @return EE_PMT_Base[]
214
+	 */
215
+	public function payment_method_types($force_recheck = false)
216
+	{
217
+		$this->maybe_register_payment_methods($force_recheck);
218
+		$payment_method_objects = array();
219
+		foreach ($this->payment_method_type_names(true) as $classname) {
220
+			$payment_method_objects[] = new $classname;
221
+		}
222
+		return $payment_method_objects;
223
+	}
224
+
225
+
226
+
227
+	/**
228
+	 * Changes the payment method's classname into the payment method type's name
229
+	 * (as used on the payment method's table's PMD_type field)
230
+	 *
231
+	 * @param string $classname
232
+	 * @return string
233
+	 */
234
+	public function payment_method_type_sans_class_prefix($classname)
235
+	{
236
+		return str_replace('EE_PMT_', '', $classname);
237
+	}
238
+
239
+
240
+
241
+	/**
242
+	 * Does the opposite of payment-method_type_sans_prefix
243
+	 *
244
+	 * @param string $type
245
+	 * @return string
246
+	 */
247
+	public function payment_method_class_from_type($type)
248
+	{
249
+		$this->maybe_register_payment_methods();
250
+		return 'EE_PMT_' . $type;
251
+	}
252
+
253
+
254
+
255
+	/**
256
+	 * Activates a payment method of the given type.
257
+	 *
258
+	 * @param string $payment_method_type the PMT_type; for EE_PMT_Invoice this would be 'Invoice'
259
+	 * @return EE_Payment_Method
260
+	 * @throws EE_Error
261
+	 */
262
+	public function activate_a_payment_method_of_type($payment_method_type)
263
+	{
264
+		$payment_method = EEM_Payment_Method::instance()->get_one_of_type($payment_method_type);
265
+		if (! $payment_method instanceof EE_Payment_Method) {
266
+			$pm_type_class = $this->payment_method_class_from_type($payment_method_type);
267
+			if (class_exists($pm_type_class)) {
268
+				/** @var $pm_type_obj EE_PMT_Base */
269
+				$pm_type_obj = new $pm_type_class;
270
+				$payment_method = EEM_Payment_Method::instance()->get_one_by_slug($pm_type_obj->system_name());
271
+				if (! $payment_method) {
272
+					$payment_method = $this->create_payment_method_of_type($pm_type_obj);
273
+				}
274
+				$payment_method->set_type($payment_method_type);
275
+				$this->initialize_payment_method($payment_method);
276
+			} else {
277
+				throw new EE_Error(
278
+					sprintf(
279
+						esc_html__(
280
+							'There is no payment method of type %1$s, so it could not be activated',
281
+							'event_espresso'
282
+						),
283
+						$pm_type_class
284
+					)
285
+				);
286
+			}
287
+		}
288
+		$payment_method->set_active();
289
+		$payment_method->save();
290
+		if ($payment_method->type() === 'Invoice') {
291
+			/** @type EE_Message_Resource_Manager $message_resource_manager */
292
+			$message_resource_manager = EE_Registry::instance()->load_lib('Message_Resource_Manager');
293
+			$message_resource_manager->ensure_message_type_is_active('invoice', 'html');
294
+			$message_resource_manager->ensure_messenger_is_active('pdf');
295
+			EE_Error::add_persistent_admin_notice(
296
+				'invoice_pm_requirements_notice',
297
+				sprintf(
298
+					esc_html__(
299
+						'The Invoice payment method has been activated. It requires the invoice message type, html messenger, and pdf messenger be activated as well for the %1$smessages system%2$s, so it has been automatically verified that they are also active.',
300
+						'event_espresso'
301
+					),
302
+					'<a href="' . admin_url('admin.php?page=espresso_messages') . '">',
303
+					'</a>'
304
+				),
305
+				true
306
+			);
307
+		}
308
+		return $payment_method;
309
+	}
310
+
311
+
312
+
313
+	/**
314
+	 * Creates a payment method of the specified type. Does not save it.
315
+	 *
316
+	 * @global WP_User    $current_user
317
+	 * @param EE_PMT_Base $pm_type_obj
318
+	 * @return EE_Payment_Method
319
+	 * @throws EE_Error
320
+	 */
321
+	public function create_payment_method_of_type($pm_type_obj)
322
+	{
323
+		global $current_user;
324
+		$payment_method = EE_Payment_Method::new_instance(
325
+			array(
326
+				'PMD_type'       => $pm_type_obj->system_name(),
327
+				'PMD_name'       => $pm_type_obj->pretty_name(),
328
+				'PMD_admin_name' => $pm_type_obj->pretty_name(),
329
+				'PMD_slug'       => $pm_type_obj->system_name(),//automatically converted to slug
330
+				'PMD_wp_user'    => $current_user->ID,
331
+				'PMD_order'      => EEM_Payment_Method::instance()->count(
332
+						array(array('PMD_type' => array('!=', 'Admin_Only')))
333
+					) * 10,
334
+			)
335
+		);
336
+		return $payment_method;
337
+	}
338
+
339
+
340
+
341
+	/**
342
+	 * Sets the initial payment method properties (including extra meta)
343
+	 *
344
+	 * @param EE_Payment_Method $payment_method
345
+	 * @return EE_Payment_Method
346
+	 * @throws EE_Error
347
+	 */
348
+	public function initialize_payment_method($payment_method)
349
+	{
350
+		$pm_type_obj = $payment_method->type_obj();
351
+		$payment_method->set_description($pm_type_obj->default_description());
352
+		if (! $payment_method->button_url()) {
353
+			$payment_method->set_button_url($pm_type_obj->default_button_url());
354
+		}
355
+		//now add setup its default extra meta properties
356
+		$extra_metas = $pm_type_obj->settings_form()->extra_meta_inputs();
357
+		if (! empty($extra_metas)) {
358
+			//verify the payment method has an ID before adding extra meta
359
+			if (! $payment_method->ID()) {
360
+				$payment_method->save();
361
+			}
362
+			foreach ($extra_metas as $meta_name => $input) {
363
+				$payment_method->update_extra_meta($meta_name, $input->raw_value());
364
+			}
365
+		}
366
+		return $payment_method;
367
+	}
368
+
369
+
370
+
371
+	/**
372
+	 * Makes sure the payment method is related to the specified payment method
373
+	 *
374
+	 * @deprecated in 4.9.40 because the currency payment method table is being deprecated
375
+	 * @param EE_Payment_Method $payment_method
376
+	 * @return EE_Payment_Method
377
+	 * @throws EE_Error
378
+	 */
379
+	public function set_usable_currencies_on_payment_method($payment_method)
380
+	{
381
+		EE_Error::doing_it_wrong(
382
+			'EE_Payment_Method_Manager::set_usable_currencies_on_payment_method',
383
+			esc_html__(
384
+				'We no longer define what currencies are usable by payment methods. Its not used nor efficient.',
385
+				'event_espresso'
386
+			),
387
+			'4.9.40'
388
+		);
389
+		return $payment_method;
390
+	}
391
+
392
+
393
+
394
+	/**
395
+	 * Deactivates a payment method of the given payment method slug.
396
+	 *
397
+	 * @param string $payment_method_slug The slug for the payment method to deactivate.
398
+	 * @return int count of rows updated.
399
+	 * @throws EE_Error
400
+	 */
401
+	public function deactivate_payment_method($payment_method_slug)
402
+	{
403
+		EE_Log::instance()->log(
404
+			__FILE__,
405
+			__FUNCTION__,
406
+			sprintf(
407
+				esc_html__(
408
+					'Payment method with slug %1$s is being deactivated by site admin',
409
+					'event_espresso'
410
+				),
411
+				$payment_method_slug
412
+			),
413
+			'payment_method_change'
414
+		);
415
+		$count_updated = EEM_Payment_Method::instance()->update(
416
+			array('PMD_scope' => array()),
417
+			array(array('PMD_slug' => $payment_method_slug))
418
+		);
419
+		return $count_updated;
420
+	}
421
+
422
+
423
+
424
+	/**
425
+	 * callback for FHEE__EE_Capabilities__init_caps_map__caps filter to add dynamic payment method
426
+	 * access caps.
427
+	 *
428
+	 * @param array $caps capabilities being filtered
429
+	 * @return array
430
+	 */
431
+	public function add_payment_method_caps($caps)
432
+	{
433
+		/* add dynamic caps from payment methods
434 434
          * at the time of writing, october 20 2014, these are the caps added:
435 435
          * ee_payment_method_admin_only
436 436
          * ee_payment_method_aim
@@ -444,10 +444,10 @@  discard block
 block discarded – undo
444 444
          * their related capability automatically added too, so long as they are
445 445
          * registered properly using EE_Register_Payment_Method::register()
446 446
          */
447
-        foreach ($this->payment_method_types() as $payment_method_type_obj) {
448
-            $caps['administrator'][] = $payment_method_type_obj->cap_name();
449
-        }
450
-        return $caps;
451
-    }
447
+		foreach ($this->payment_method_types() as $payment_method_type_obj) {
448
+			$caps['administrator'][] = $payment_method_type_obj->cap_name();
449
+		}
450
+		return $caps;
451
+	}
452 452
 
453 453
 }
Please login to merge, or discard this patch.
Spacing   +18 added lines, -18 removed lines patch added patch discarded remove patch
@@ -36,7 +36,7 @@  discard block
 block discarded – undo
36 36
     public static function instance()
37 37
     {
38 38
         // check if class object is instantiated, and instantiated properly
39
-        if (! self::$_instance instanceof EE_Payment_Method_Manager) {
39
+        if ( ! self::$_instance instanceof EE_Payment_Method_Manager) {
40 40
             self::$_instance = new self();
41 41
         }
42 42
         EE_Registry::instance()->load_lib('PMT_Base');
@@ -67,7 +67,7 @@  discard block
 block discarded – undo
67 67
      */
68 68
     public function maybe_register_payment_methods($force_recheck = false)
69 69
     {
70
-        if (! $this->_payment_method_types || $force_recheck) {
70
+        if ( ! $this->_payment_method_types || $force_recheck) {
71 71
             $this->_register_payment_methods();
72 72
             //if in admin lets ensure caps are set.
73 73
             if (is_admin()) {
@@ -87,7 +87,7 @@  discard block
 block discarded – undo
87 87
     protected function _register_payment_methods()
88 88
     {
89 89
         // grab list of installed modules
90
-        $pm_to_register = glob(EE_PAYMENT_METHODS . '*', GLOB_ONLYDIR);
90
+        $pm_to_register = glob(EE_PAYMENT_METHODS.'*', GLOB_ONLYDIR);
91 91
         // filter list of modules to register
92 92
         $pm_to_register = apply_filters(
93 93
             'FHEE__EE_Payment_Method_Manager__register_payment_methods__payment_methods_to_register',
@@ -126,31 +126,31 @@  discard block
 block discarded – undo
126 126
         // create classname from module directory name
127 127
         $module = str_replace(array('_', ' '), array(' ', '_'), $module_dir);
128 128
         // add class prefix
129
-        $module_class = 'EE_PMT_' . $module;
129
+        $module_class = 'EE_PMT_'.$module;
130 130
         // does the module exist ?
131
-        if (! is_readable($payment_method_path . DS . $module_class . $module_ext)) {
131
+        if ( ! is_readable($payment_method_path.DS.$module_class.$module_ext)) {
132 132
             $msg = sprintf(
133 133
                 esc_html__(
134 134
                     'The requested %s payment method file could not be found or is not readable due to file permissions.',
135 135
                     'event_espresso'
136 136
                 ), $module
137 137
             );
138
-            EE_Error::add_error($msg . '||' . $msg, __FILE__, __FUNCTION__, __LINE__);
138
+            EE_Error::add_error($msg.'||'.$msg, __FILE__, __FUNCTION__, __LINE__);
139 139
             return false;
140 140
         }
141 141
         // load the module class file
142
-        require_once($payment_method_path . DS . $module_class . $module_ext);
142
+        require_once($payment_method_path.DS.$module_class.$module_ext);
143 143
         // verify that class exists
144
-        if (! class_exists($module_class)) {
144
+        if ( ! class_exists($module_class)) {
145 145
             $msg = sprintf(
146 146
                 esc_html__('The requested %s module class does not exist.', 'event_espresso'),
147 147
                 $module_class
148 148
             );
149
-            EE_Error::add_error($msg . '||' . $msg, __FILE__, __FUNCTION__, __LINE__);
149
+            EE_Error::add_error($msg.'||'.$msg, __FILE__, __FUNCTION__, __LINE__);
150 150
             return false;
151 151
         }
152 152
         // add to array of registered modules
153
-        $this->_payment_method_types[$module] = $payment_method_path . DS . $module_class . $module_ext;
153
+        $this->_payment_method_types[$module] = $payment_method_path.DS.$module_class.$module_ext;
154 154
         return true;
155 155
     }
156 156
 
@@ -247,7 +247,7 @@  discard block
 block discarded – undo
247 247
     public function payment_method_class_from_type($type)
248 248
     {
249 249
         $this->maybe_register_payment_methods();
250
-        return 'EE_PMT_' . $type;
250
+        return 'EE_PMT_'.$type;
251 251
     }
252 252
 
253 253
 
@@ -262,13 +262,13 @@  discard block
 block discarded – undo
262 262
     public function activate_a_payment_method_of_type($payment_method_type)
263 263
     {
264 264
         $payment_method = EEM_Payment_Method::instance()->get_one_of_type($payment_method_type);
265
-        if (! $payment_method instanceof EE_Payment_Method) {
265
+        if ( ! $payment_method instanceof EE_Payment_Method) {
266 266
             $pm_type_class = $this->payment_method_class_from_type($payment_method_type);
267 267
             if (class_exists($pm_type_class)) {
268 268
                 /** @var $pm_type_obj EE_PMT_Base */
269 269
                 $pm_type_obj = new $pm_type_class;
270 270
                 $payment_method = EEM_Payment_Method::instance()->get_one_by_slug($pm_type_obj->system_name());
271
-                if (! $payment_method) {
271
+                if ( ! $payment_method) {
272 272
                     $payment_method = $this->create_payment_method_of_type($pm_type_obj);
273 273
                 }
274 274
                 $payment_method->set_type($payment_method_type);
@@ -299,7 +299,7 @@  discard block
 block discarded – undo
299 299
                         'The Invoice payment method has been activated. It requires the invoice message type, html messenger, and pdf messenger be activated as well for the %1$smessages system%2$s, so it has been automatically verified that they are also active.',
300 300
                         'event_espresso'
301 301
                     ),
302
-                    '<a href="' . admin_url('admin.php?page=espresso_messages') . '">',
302
+                    '<a href="'.admin_url('admin.php?page=espresso_messages').'">',
303 303
                     '</a>'
304 304
                 ),
305 305
                 true
@@ -326,7 +326,7 @@  discard block
 block discarded – undo
326 326
                 'PMD_type'       => $pm_type_obj->system_name(),
327 327
                 'PMD_name'       => $pm_type_obj->pretty_name(),
328 328
                 'PMD_admin_name' => $pm_type_obj->pretty_name(),
329
-                'PMD_slug'       => $pm_type_obj->system_name(),//automatically converted to slug
329
+                'PMD_slug'       => $pm_type_obj->system_name(), //automatically converted to slug
330 330
                 'PMD_wp_user'    => $current_user->ID,
331 331
                 'PMD_order'      => EEM_Payment_Method::instance()->count(
332 332
                         array(array('PMD_type' => array('!=', 'Admin_Only')))
@@ -349,14 +349,14 @@  discard block
 block discarded – undo
349 349
     {
350 350
         $pm_type_obj = $payment_method->type_obj();
351 351
         $payment_method->set_description($pm_type_obj->default_description());
352
-        if (! $payment_method->button_url()) {
352
+        if ( ! $payment_method->button_url()) {
353 353
             $payment_method->set_button_url($pm_type_obj->default_button_url());
354 354
         }
355 355
         //now add setup its default extra meta properties
356 356
         $extra_metas = $pm_type_obj->settings_form()->extra_meta_inputs();
357
-        if (! empty($extra_metas)) {
357
+        if ( ! empty($extra_metas)) {
358 358
             //verify the payment method has an ID before adding extra meta
359
-            if (! $payment_method->ID()) {
359
+            if ( ! $payment_method->ID()) {
360 360
                 $payment_method->save();
361 361
             }
362 362
             foreach ($extra_metas as $meta_name => $input) {
Please login to merge, or discard this patch.
core/EE_System.core.php 2 patches
Spacing   +10 added lines, -10 removed lines patch added patch discarded remove patch
@@ -185,7 +185,7 @@  discard block
 block discarded – undo
185 185
     {
186 186
         // set autoloaders for all of the classes implementing EEI_Plugin_API
187 187
         // which provide helpers for EE plugin authors to more easily register certain components with EE.
188
-        EEH_Autoloader::instance()->register_autoloaders_for_each_file_in_folder(EE_LIBRARIES . 'plugin_api');
188
+        EEH_Autoloader::instance()->register_autoloaders_for_each_file_in_folder(EE_LIBRARIES.'plugin_api');
189 189
         //load and setup EE_Capabilities
190 190
         $this->registry->load_core('Capabilities');
191 191
         //caps need to be initialized on every request so that capability maps are set.
@@ -208,7 +208,7 @@  discard block
 block discarded – undo
208 208
                 && $_GET['activate'] === 'true'
209 209
             )
210 210
         ) {
211
-            include_once EE_THIRD_PARTY . 'wp-api-basic-auth' . DS . 'basic-auth.php';
211
+            include_once EE_THIRD_PARTY.'wp-api-basic-auth'.DS.'basic-auth.php';
212 212
         }
213 213
         do_action('AHEE__EE_System__load_espresso_addons__complete');
214 214
     }
@@ -690,7 +690,7 @@  discard block
 block discarded – undo
690 690
     private function _parse_model_names()
691 691
     {
692 692
         //get all the files in the EE_MODELS folder that end in .model.php
693
-        $models = glob(EE_MODELS . '*.model.php');
693
+        $models = glob(EE_MODELS.'*.model.php');
694 694
         $model_names = array();
695 695
         $non_abstract_db_models = array();
696 696
         foreach ($models as $model) {
@@ -718,8 +718,8 @@  discard block
 block discarded – undo
718 718
      */
719 719
     private function _maybe_brew_regular()
720 720
     {
721
-        if (( ! defined('EE_DECAF') || EE_DECAF !== true) && is_readable(EE_CAFF_PATH . 'brewing_regular.php')) {
722
-            require_once EE_CAFF_PATH . 'brewing_regular.php';
721
+        if (( ! defined('EE_DECAF') || EE_DECAF !== true) && is_readable(EE_CAFF_PATH.'brewing_regular.php')) {
722
+            require_once EE_CAFF_PATH.'brewing_regular.php';
723 723
         }
724 724
     }
725 725
 
@@ -769,8 +769,8 @@  discard block
 block discarded – undo
769 769
                 'event_espresso');
770 770
             $msg .= '<ul>';
771 771
             foreach ($class_names as $class_name) {
772
-                $msg .= '<li><b>Event Espresso - ' . str_replace(array('EE_', 'EEM_', 'EED_', 'EES_', 'EEW_'), '',
773
-                        $class_name) . '</b></li>';
772
+                $msg .= '<li><b>Event Espresso - '.str_replace(array('EE_', 'EEM_', 'EED_', 'EES_', 'EEW_'), '',
773
+                        $class_name).'</b></li>';
774 774
             }
775 775
             $msg .= '</ul>';
776 776
             $msg .= __('Compatibility issues can be avoided and/or resolved by keeping addons and plugins updated to the latest version.',
@@ -921,8 +921,8 @@  discard block
 block discarded – undo
921 921
         $this->registry->load_core('Session');
922 922
         do_action('AHEE__EE_System__core_loaded_and_ready');
923 923
         // load_espresso_template_tags
924
-        if (is_readable(EE_PUBLIC . 'template_tags.php')) {
925
-            require_once(EE_PUBLIC . 'template_tags.php');
924
+        if (is_readable(EE_PUBLIC.'template_tags.php')) {
925
+            require_once(EE_PUBLIC.'template_tags.php');
926 926
         }
927 927
         do_action('AHEE__EE_System__set_hooks_for_shortcodes_modules_and_addons');
928 928
         $this->registry->create('EventEspresso\core\services\assets\Registry', array(), true);
@@ -1068,7 +1068,7 @@  discard block
 block discarded – undo
1068 1068
             'href'  => $events_admin_url,
1069 1069
             'meta'  => array(
1070 1070
                 'title' => __('Event Espresso', 'event_espresso'),
1071
-                'class' => $menu_class . 'first',
1071
+                'class' => $menu_class.'first',
1072 1072
             ),
1073 1073
         ));
1074 1074
         //Events
Please login to merge, or discard this patch.
Indentation   +1406 added lines, -1406 removed lines patch added patch discarded remove patch
@@ -2,7 +2,7 @@  discard block
 block discarded – undo
2 2
 use EventEspresso\core\services\shortcodes\ShortcodesManager;
3 3
 
4 4
 if ( ! defined('EVENT_ESPRESSO_VERSION')) {
5
-    exit('No direct script access allowed');
5
+	exit('No direct script access allowed');
6 6
 }
7 7
 
8 8
 
@@ -19,1411 +19,1411 @@  discard block
 block discarded – undo
19 19
 {
20 20
 
21 21
 
22
-    /**
23
-     * indicates this is a 'normal' request. Ie, not activation, nor upgrade, nor activation.
24
-     * So examples of this would be a normal GET request on the frontend or backend, or a POST, etc
25
-     */
26
-    const req_type_normal = 0;
27
-
28
-    /**
29
-     * Indicates this is a brand new installation of EE so we should install
30
-     * tables and default data etc
31
-     */
32
-    const req_type_new_activation = 1;
33
-
34
-    /**
35
-     * we've detected that EE has been reactivated (or EE was activated during maintenance mode,
36
-     * and we just exited maintenance mode). We MUST check the database is setup properly
37
-     * and that default data is setup too
38
-     */
39
-    const req_type_reactivation = 2;
40
-
41
-    /**
42
-     * indicates that EE has been upgraded since its previous request.
43
-     * We may have data migration scripts to call and will want to trigger maintenance mode
44
-     */
45
-    const req_type_upgrade = 3;
46
-
47
-    /**
48
-     * TODO  will detect that EE has been DOWNGRADED. We probably don't want to run in this case...
49
-     */
50
-    const req_type_downgrade = 4;
51
-
52
-    /**
53
-     * @deprecated since version 4.6.0.dev.006
54
-     * Now whenever a new_activation is detected the request type is still just
55
-     * new_activation (same for reactivation, upgrade, downgrade etc), but if we'r ein maintenance mode
56
-     * EE_System::initialize_db_if_no_migrations_required and EE_Addon::initialize_db_if_no_migrations_required
57
-     * will instead enqueue that EE plugin's db initialization for when we're taken out of maintenance mode.
58
-     * (Specifically, when the migration manager indicates migrations are finished
59
-     * EE_Data_Migration_Manager::initialize_db_for_enqueued_ee_plugins() will be called)
60
-     */
61
-    const req_type_activation_but_not_installed = 5;
62
-
63
-    /**
64
-     * option prefix for recording the activation history (like core's "espresso_db_update") of addons
65
-     */
66
-    const addon_activation_history_option_prefix = 'ee_addon_activation_history_';
67
-
68
-
69
-    /**
70
-     *    instance of the EE_System object
71
-     *
72
-     * @var    $_instance
73
-     * @access    private
74
-     */
75
-    private static $_instance = null;
76
-
77
-    /**
78
-     * @type  EE_Registry $Registry
79
-     * @access    protected
80
-     */
81
-    protected $registry;
82
-
83
-    /**
84
-     * Stores which type of request this is, options being one of the constants on EE_System starting with req_type_*.
85
-     * It can be a brand-new activation, a reactivation, an upgrade, a downgrade, or a normal request.
86
-     *
87
-     * @var int
88
-     */
89
-    private $_req_type;
90
-
91
-    /**
92
-     * Whether or not there was a non-micro version change in EE core version during this request
93
-     *
94
-     * @var boolean
95
-     */
96
-    private $_major_version_change = false;
97
-
98
-
99
-
100
-    /**
101
-     * @singleton method used to instantiate class object
102
-     * @access    public
103
-     * @param  \EE_Registry $Registry
104
-     * @return \EE_System
105
-     */
106
-    public static function instance(EE_Registry $Registry = null)
107
-    {
108
-        // check if class object is instantiated
109
-        if ( ! self::$_instance instanceof EE_System) {
110
-            self::$_instance = new self($Registry);
111
-        }
112
-        return self::$_instance;
113
-    }
114
-
115
-
116
-
117
-    /**
118
-     * resets the instance and returns it
119
-     *
120
-     * @return EE_System
121
-     */
122
-    public static function reset()
123
-    {
124
-        self::$_instance->_req_type = null;
125
-        //make sure none of the old hooks are left hanging around
126
-        remove_all_actions('AHEE__EE_System__perform_activations_upgrades_and_migrations');
127
-        //we need to reset the migration manager in order for it to detect DMSs properly
128
-        EE_Data_Migration_Manager::reset();
129
-        self::instance()->detect_activations_or_upgrades();
130
-        self::instance()->perform_activations_upgrades_and_migrations();
131
-        return self::instance();
132
-    }
133
-
134
-
135
-
136
-    /**
137
-     *    sets hooks for running rest of system
138
-     *    provides "AHEE__EE_System__construct__complete" hook for EE Addons to use as their starting point
139
-     *    starting EE Addons from any other point may lead to problems
140
-     *
141
-     * @access private
142
-     * @param  \EE_Registry $Registry
143
-     */
144
-    private function __construct(EE_Registry $Registry)
145
-    {
146
-        $this->registry = $Registry;
147
-        do_action('AHEE__EE_System__construct__begin', $this);
148
-        // allow addons to load first so that they can register autoloaders, set hooks for running DMS's, etc
149
-        add_action('AHEE__EE_Bootstrap__load_espresso_addons', array($this, 'load_espresso_addons'));
150
-        // when an ee addon is activated, we want to call the core hook(s) again
151
-        // because the newly-activated addon didn't get a chance to run at all
152
-        add_action('activate_plugin', array($this, 'load_espresso_addons'), 1);
153
-        // detect whether install or upgrade
154
-        add_action('AHEE__EE_Bootstrap__detect_activations_or_upgrades', array($this, 'detect_activations_or_upgrades'),
155
-            3);
156
-        // load EE_Config, EE_Textdomain, etc
157
-        add_action('AHEE__EE_Bootstrap__load_core_configuration', array($this, 'load_core_configuration'), 5);
158
-        // load EE_Config, EE_Textdomain, etc
159
-        add_action('AHEE__EE_Bootstrap__register_shortcodes_modules_and_widgets',
160
-            array($this, 'register_shortcodes_modules_and_widgets'), 7);
161
-        // you wanna get going? I wanna get going... let's get going!
162
-        add_action('AHEE__EE_Bootstrap__brew_espresso', array($this, 'brew_espresso'), 9);
163
-        //other housekeeping
164
-        //exclude EE critical pages from wp_list_pages
165
-        add_filter('wp_list_pages_excludes', array($this, 'remove_pages_from_wp_list_pages'), 10);
166
-        // ALL EE Addons should use the following hook point to attach their initial setup too
167
-        // it's extremely important for EE Addons to register any class autoloaders so that they can be available when the EE_Config loads
168
-        do_action('AHEE__EE_System__construct__complete', $this);
169
-    }
170
-
171
-
172
-
173
-    /**
174
-     * load_espresso_addons
175
-     * allow addons to load first so that they can set hooks for running DMS's, etc
176
-     * this is hooked into both:
177
-     *    'AHEE__EE_Bootstrap__load_core_configuration'
178
-     *        which runs during the WP 'plugins_loaded' action at priority 5
179
-     *    and the WP 'activate_plugin' hookpoint
180
-     *
181
-     * @access public
182
-     * @return void
183
-     */
184
-    public function load_espresso_addons()
185
-    {
186
-        // set autoloaders for all of the classes implementing EEI_Plugin_API
187
-        // which provide helpers for EE plugin authors to more easily register certain components with EE.
188
-        EEH_Autoloader::instance()->register_autoloaders_for_each_file_in_folder(EE_LIBRARIES . 'plugin_api');
189
-        //load and setup EE_Capabilities
190
-        $this->registry->load_core('Capabilities');
191
-        //caps need to be initialized on every request so that capability maps are set.
192
-        //@see https://events.codebasehq.com/projects/event-espresso/tickets/8674
193
-        $this->registry->CAP->init_caps();
194
-        do_action('AHEE__EE_System__load_espresso_addons');
195
-        //if the WP API basic auth plugin isn't already loaded, load it now.
196
-        //We want it for mobile apps. Just include the entire plugin
197
-        //also, don't load the basic auth when a plugin is getting activated, because
198
-        //it could be the basic auth plugin, and it doesn't check if its methods are already defined
199
-        //and causes a fatal error
200
-        if ( ! function_exists('json_basic_auth_handler')
201
-             && ! function_exists('json_basic_auth_error')
202
-             && ! (
203
-                isset($_GET['action'])
204
-                && in_array($_GET['action'], array('activate', 'activate-selected'))
205
-            )
206
-             && ! (
207
-                isset($_GET['activate'])
208
-                && $_GET['activate'] === 'true'
209
-            )
210
-        ) {
211
-            include_once EE_THIRD_PARTY . 'wp-api-basic-auth' . DS . 'basic-auth.php';
212
-        }
213
-        do_action('AHEE__EE_System__load_espresso_addons__complete');
214
-    }
215
-
216
-
217
-
218
-    /**
219
-     * detect_activations_or_upgrades
220
-     * Checks for activation or upgrade of core first;
221
-     * then also checks if any registered addons have been activated or upgraded
222
-     * This is hooked into 'AHEE__EE_Bootstrap__detect_activations_or_upgrades'
223
-     * which runs during the WP 'plugins_loaded' action at priority 3
224
-     *
225
-     * @access public
226
-     * @return void
227
-     */
228
-    public function detect_activations_or_upgrades()
229
-    {
230
-        //first off: let's make sure to handle core
231
-        $this->detect_if_activation_or_upgrade();
232
-        foreach ($this->registry->addons as $addon) {
233
-            //detect teh request type for that addon
234
-            $addon->detect_activation_or_upgrade();
235
-        }
236
-    }
237
-
238
-
239
-
240
-    /**
241
-     * detect_if_activation_or_upgrade
242
-     * Takes care of detecting whether this is a brand new install or code upgrade,
243
-     * and either setting up the DB or setting up maintenance mode etc.
244
-     *
245
-     * @access public
246
-     * @return void
247
-     */
248
-    public function detect_if_activation_or_upgrade()
249
-    {
250
-        do_action('AHEE__EE_System___detect_if_activation_or_upgrade__begin');
251
-        // load M-Mode class
252
-        $this->registry->load_core('Maintenance_Mode');
253
-        // check if db has been updated, or if its a brand-new installation
254
-        $espresso_db_update = $this->fix_espresso_db_upgrade_option();
255
-        $request_type = $this->detect_req_type($espresso_db_update);
256
-        //EEH_Debug_Tools::printr( $request_type, '$request_type', __FILE__, __LINE__ );
257
-        switch ($request_type) {
258
-            case EE_System::req_type_new_activation:
259
-                do_action('AHEE__EE_System__detect_if_activation_or_upgrade__new_activation');
260
-                $this->_handle_core_version_change($espresso_db_update);
261
-                break;
262
-            case EE_System::req_type_reactivation:
263
-                do_action('AHEE__EE_System__detect_if_activation_or_upgrade__reactivation');
264
-                $this->_handle_core_version_change($espresso_db_update);
265
-                break;
266
-            case EE_System::req_type_upgrade:
267
-                do_action('AHEE__EE_System__detect_if_activation_or_upgrade__upgrade');
268
-                //migrations may be required now that we've upgraded
269
-                EE_Maintenance_Mode::instance()->set_maintenance_mode_if_db_old();
270
-                $this->_handle_core_version_change($espresso_db_update);
271
-                //				echo "done upgrade";die;
272
-                break;
273
-            case EE_System::req_type_downgrade:
274
-                do_action('AHEE__EE_System__detect_if_activation_or_upgrade__downgrade');
275
-                //its possible migrations are no longer required
276
-                EE_Maintenance_Mode::instance()->set_maintenance_mode_if_db_old();
277
-                $this->_handle_core_version_change($espresso_db_update);
278
-                break;
279
-            case EE_System::req_type_normal:
280
-            default:
281
-                //				$this->_maybe_redirect_to_ee_about();
282
-                break;
283
-        }
284
-        do_action('AHEE__EE_System__detect_if_activation_or_upgrade__complete');
285
-    }
286
-
287
-
288
-
289
-    /**
290
-     * Updates the list of installed versions and sets hooks for
291
-     * initializing the database later during the request
292
-     *
293
-     * @param array $espresso_db_update
294
-     */
295
-    protected function _handle_core_version_change($espresso_db_update)
296
-    {
297
-        $this->update_list_of_installed_versions($espresso_db_update);
298
-        //get ready to verify the DB is ok (provided we aren't in maintenance mode, of course)
299
-        add_action('AHEE__EE_System__perform_activations_upgrades_and_migrations',
300
-            array($this, 'initialize_db_if_no_migrations_required'));
301
-    }
302
-
303
-
304
-
305
-    /**
306
-     * standardizes the wp option 'espresso_db_upgrade' which actually stores
307
-     * information about what versions of EE have been installed and activated,
308
-     * NOT necessarily the state of the database
309
-     *
310
-     * @param null $espresso_db_update
311
-     * @internal param array $espresso_db_update_value the value of the WordPress option. If not supplied, fetches it
312
-     *           from the options table
313
-     * @return array the correct value of 'espresso_db_upgrade', after saving it, if it needed correction
314
-     */
315
-    private function fix_espresso_db_upgrade_option($espresso_db_update = null)
316
-    {
317
-        do_action('FHEE__EE_System__manage_fix_espresso_db_upgrade_option__begin', $espresso_db_update);
318
-        if ( ! $espresso_db_update) {
319
-            $espresso_db_update = get_option('espresso_db_update');
320
-        }
321
-        // check that option is an array
322
-        if ( ! is_array($espresso_db_update)) {
323
-            // if option is FALSE, then it never existed
324
-            if ($espresso_db_update === false) {
325
-                // make $espresso_db_update an array and save option with autoload OFF
326
-                $espresso_db_update = array();
327
-                add_option('espresso_db_update', $espresso_db_update, '', 'no');
328
-            } else {
329
-                // option is NOT FALSE but also is NOT an array, so make it an array and save it
330
-                $espresso_db_update = array($espresso_db_update => array());
331
-                update_option('espresso_db_update', $espresso_db_update);
332
-            }
333
-        } else {
334
-            $corrected_db_update = array();
335
-            //if IS an array, but is it an array where KEYS are version numbers, and values are arrays?
336
-            foreach ($espresso_db_update as $should_be_version_string => $should_be_array) {
337
-                if (is_int($should_be_version_string) && ! is_array($should_be_array)) {
338
-                    //the key is an int, and the value IS NOT an array
339
-                    //so it must be numerically-indexed, where values are versions installed...
340
-                    //fix it!
341
-                    $version_string = $should_be_array;
342
-                    $corrected_db_update[$version_string] = array('unknown-date');
343
-                } else {
344
-                    //ok it checks out
345
-                    $corrected_db_update[$should_be_version_string] = $should_be_array;
346
-                }
347
-            }
348
-            $espresso_db_update = $corrected_db_update;
349
-            update_option('espresso_db_update', $espresso_db_update);
350
-        }
351
-        do_action('FHEE__EE_System__manage_fix_espresso_db_upgrade_option__complete', $espresso_db_update);
352
-        return $espresso_db_update;
353
-    }
354
-
355
-
356
-
357
-    /**
358
-     * Does the traditional work of setting up the plugin's database and adding default data.
359
-     * If migration script/process did not exist, this is what would happen on every activation/reactivation/upgrade.
360
-     * NOTE: if we're in maintenance mode (which would be the case if we detect there are data
361
-     * migration scripts that need to be run and a version change happens), enqueues core for database initialization,
362
-     * so that it will be done when migrations are finished
363
-     *
364
-     * @param boolean $initialize_addons_too if true, we double-check addons' database tables etc too;
365
-     * @param boolean $verify_schema         if true will re-check the database tables have the correct schema.
366
-     *                                       This is a resource-intensive job
367
-     *                                       so we prefer to only do it when necessary
368
-     * @return void
369
-     */
370
-    public function initialize_db_if_no_migrations_required($initialize_addons_too = false, $verify_schema = true)
371
-    {
372
-        $request_type = $this->detect_req_type();
373
-        //only initialize system if we're not in maintenance mode.
374
-        if (EE_Maintenance_Mode::instance()->level() != EE_Maintenance_Mode::level_2_complete_maintenance) {
375
-            update_option('ee_flush_rewrite_rules', true);
376
-            if ($verify_schema) {
377
-                EEH_Activation::initialize_db_and_folders();
378
-            }
379
-            EEH_Activation::initialize_db_content();
380
-            EEH_Activation::system_initialization();
381
-            if ($initialize_addons_too) {
382
-                $this->initialize_addons();
383
-            }
384
-        } else {
385
-            EE_Data_Migration_Manager::instance()->enqueue_db_initialization_for('Core');
386
-        }
387
-        if ($request_type === EE_System::req_type_new_activation
388
-            || $request_type === EE_System::req_type_reactivation
389
-            || (
390
-                $request_type === EE_System::req_type_upgrade
391
-                && $this->is_major_version_change()
392
-            )
393
-        ) {
394
-            add_action('AHEE__EE_System__initialize_last', array($this, 'redirect_to_about_ee'), 9);
395
-        }
396
-    }
397
-
398
-
399
-
400
-    /**
401
-     * Initializes the db for all registered addons
402
-     */
403
-    public function initialize_addons()
404
-    {
405
-        //foreach registered addon, make sure its db is up-to-date too
406
-        foreach ($this->registry->addons as $addon) {
407
-            $addon->initialize_db_if_no_migrations_required();
408
-        }
409
-    }
410
-
411
-
412
-
413
-    /**
414
-     * Adds the current code version to the saved wp option which stores a list of all ee versions ever installed.
415
-     *
416
-     * @param    array  $version_history
417
-     * @param    string $current_version_to_add version to be added to the version history
418
-     * @return    boolean success as to whether or not this option was changed
419
-     */
420
-    public function update_list_of_installed_versions($version_history = null, $current_version_to_add = null)
421
-    {
422
-        if ( ! $version_history) {
423
-            $version_history = $this->fix_espresso_db_upgrade_option($version_history);
424
-        }
425
-        if ($current_version_to_add == null) {
426
-            $current_version_to_add = espresso_version();
427
-        }
428
-        $version_history[$current_version_to_add][] = date('Y-m-d H:i:s', time());
429
-        // re-save
430
-        return update_option('espresso_db_update', $version_history);
431
-    }
432
-
433
-
434
-
435
-    /**
436
-     * Detects if the current version indicated in the has existed in the list of
437
-     * previously-installed versions of EE (espresso_db_update). Does NOT modify it (ie, no side-effect)
438
-     *
439
-     * @param array $espresso_db_update array from the wp option stored under the name 'espresso_db_update'.
440
-     *                                  If not supplied, fetches it from the options table.
441
-     *                                  Also, caches its result so later parts of the code can also know whether
442
-     *                                  there's been an update or not. This way we can add the current version to
443
-     *                                  espresso_db_update, but still know if this is a new install or not
444
-     * @return int one of the constants on EE_System::req_type_
445
-     */
446
-    public function detect_req_type($espresso_db_update = null)
447
-    {
448
-        if ($this->_req_type === null) {
449
-            $espresso_db_update = ! empty($espresso_db_update) ? $espresso_db_update
450
-                : $this->fix_espresso_db_upgrade_option();
451
-            $this->_req_type = $this->detect_req_type_given_activation_history($espresso_db_update,
452
-                'ee_espresso_activation', espresso_version());
453
-            $this->_major_version_change = $this->_detect_major_version_change($espresso_db_update);
454
-        }
455
-        return $this->_req_type;
456
-    }
457
-
458
-
459
-
460
-    /**
461
-     * Returns whether or not there was a non-micro version change (ie, change in either
462
-     * the first or second number in the version. Eg 4.9.0.rc.001 to 4.10.0.rc.000,
463
-     * but not 4.9.0.rc.0001 to 4.9.1.rc.0001
464
-     *
465
-     * @param $activation_history
466
-     * @return bool
467
-     */
468
-    protected function _detect_major_version_change($activation_history)
469
-    {
470
-        $previous_version = EE_System::_get_most_recently_active_version_from_activation_history($activation_history);
471
-        $previous_version_parts = explode('.', $previous_version);
472
-        $current_version_parts = explode('.', espresso_version());
473
-        return isset($previous_version_parts[0], $previous_version_parts[1], $current_version_parts[0], $current_version_parts[1])
474
-               && ($previous_version_parts[0] !== $current_version_parts[0]
475
-                   || $previous_version_parts[1] !== $current_version_parts[1]
476
-               );
477
-    }
478
-
479
-
480
-
481
-    /**
482
-     * Returns true if either the major or minor version of EE changed during this request.
483
-     * Eg 4.9.0.rc.001 to 4.10.0.rc.000, but not 4.9.0.rc.0001 to 4.9.1.rc.0001
484
-     *
485
-     * @return bool
486
-     */
487
-    public function is_major_version_change()
488
-    {
489
-        return $this->_major_version_change;
490
-    }
491
-
492
-
493
-
494
-    /**
495
-     * Determines the request type for any ee addon, given three piece of info: the current array of activation
496
-     * histories (for core that' 'espresso_db_update' wp option); the name of the wordpress option which is temporarily
497
-     * set upon activation of the plugin (for core it's 'ee_espresso_activation'); and the version that this plugin was
498
-     * just activated to (for core that will always be espresso_version())
499
-     *
500
-     * @param array  $activation_history_for_addon     the option's value which stores the activation history for this
501
-     *                                                 ee plugin. for core that's 'espresso_db_update'
502
-     * @param string $activation_indicator_option_name the name of the wordpress option that is temporarily set to
503
-     *                                                 indicate that this plugin was just activated
504
-     * @param string $version_to_upgrade_to            the version that was just upgraded to (for core that will be
505
-     *                                                 espresso_version())
506
-     * @return int one of the constants on EE_System::req_type_*
507
-     */
508
-    public static function detect_req_type_given_activation_history(
509
-        $activation_history_for_addon,
510
-        $activation_indicator_option_name,
511
-        $version_to_upgrade_to
512
-    ) {
513
-        $version_is_higher = self::_new_version_is_higher($activation_history_for_addon, $version_to_upgrade_to);
514
-        if ($activation_history_for_addon) {
515
-            //it exists, so this isn't a completely new install
516
-            //check if this version already in that list of previously installed versions
517
-            if ( ! isset($activation_history_for_addon[$version_to_upgrade_to])) {
518
-                //it a version we haven't seen before
519
-                if ($version_is_higher === 1) {
520
-                    $req_type = EE_System::req_type_upgrade;
521
-                } else {
522
-                    $req_type = EE_System::req_type_downgrade;
523
-                }
524
-                delete_option($activation_indicator_option_name);
525
-            } else {
526
-                // its not an update. maybe a reactivation?
527
-                if (get_option($activation_indicator_option_name, false)) {
528
-                    if ($version_is_higher === -1) {
529
-                        $req_type = EE_System::req_type_downgrade;
530
-                    } elseif ($version_is_higher === 0) {
531
-                        //we've seen this version before, but it's an activation. must be a reactivation
532
-                        $req_type = EE_System::req_type_reactivation;
533
-                    } else {//$version_is_higher === 1
534
-                        $req_type = EE_System::req_type_upgrade;
535
-                    }
536
-                    delete_option($activation_indicator_option_name);
537
-                } else {
538
-                    //we've seen this version before and the activation indicate doesn't show it was just activated
539
-                    if ($version_is_higher === -1) {
540
-                        $req_type = EE_System::req_type_downgrade;
541
-                    } elseif ($version_is_higher === 0) {
542
-                        //we've seen this version before and it's not an activation. its normal request
543
-                        $req_type = EE_System::req_type_normal;
544
-                    } else {//$version_is_higher === 1
545
-                        $req_type = EE_System::req_type_upgrade;
546
-                    }
547
-                }
548
-            }
549
-        } else {
550
-            //brand new install
551
-            $req_type = EE_System::req_type_new_activation;
552
-            delete_option($activation_indicator_option_name);
553
-        }
554
-        return $req_type;
555
-    }
556
-
557
-
558
-
559
-    /**
560
-     * Detects if the $version_to_upgrade_to is higher than the most recent version in
561
-     * the $activation_history_for_addon
562
-     *
563
-     * @param array  $activation_history_for_addon (keys are versions, values are arrays of times activated,
564
-     *                                             sometimes containing 'unknown-date'
565
-     * @param string $version_to_upgrade_to        (current version)
566
-     * @return int results of version_compare( $version_to_upgrade_to, $most_recently_active_version ).
567
-     *                                             ie, -1 if $version_to_upgrade_to is LOWER (downgrade);
568
-     *                                             0 if $version_to_upgrade_to MATCHES (reactivation or normal request);
569
-     *                                             1 if $version_to_upgrade_to is HIGHER (upgrade) ;
570
-     */
571
-    protected static function _new_version_is_higher($activation_history_for_addon, $version_to_upgrade_to)
572
-    {
573
-        //find the most recently-activated version
574
-        $most_recently_active_version = EE_System::_get_most_recently_active_version_from_activation_history($activation_history_for_addon);
575
-        return version_compare($version_to_upgrade_to, $most_recently_active_version);
576
-    }
577
-
578
-
579
-
580
-    /**
581
-     * Gets the most recently active version listed in the activation history,
582
-     * and if none are found (ie, it's a brand new install) returns '0.0.0.dev.000'.
583
-     *
584
-     * @param array $activation_history  (keys are versions, values are arrays of times activated,
585
-     *                                   sometimes containing 'unknown-date'
586
-     * @return string
587
-     */
588
-    protected static function _get_most_recently_active_version_from_activation_history($activation_history)
589
-    {
590
-        $most_recently_active_version_activation = '1970-01-01 00:00:00';
591
-        $most_recently_active_version = '0.0.0.dev.000';
592
-        if (is_array($activation_history)) {
593
-            foreach ($activation_history as $version => $times_activated) {
594
-                //check there is a record of when this version was activated. Otherwise,
595
-                //mark it as unknown
596
-                if ( ! $times_activated) {
597
-                    $times_activated = array('unknown-date');
598
-                }
599
-                if (is_string($times_activated)) {
600
-                    $times_activated = array($times_activated);
601
-                }
602
-                foreach ($times_activated as $an_activation) {
603
-                    if ($an_activation != 'unknown-date' && $an_activation > $most_recently_active_version_activation) {
604
-                        $most_recently_active_version = $version;
605
-                        $most_recently_active_version_activation = $an_activation == 'unknown-date'
606
-                            ? '1970-01-01 00:00:00' : $an_activation;
607
-                    }
608
-                }
609
-            }
610
-        }
611
-        return $most_recently_active_version;
612
-    }
613
-
614
-
615
-
616
-    /**
617
-     * This redirects to the about EE page after activation
618
-     *
619
-     * @return void
620
-     */
621
-    public function redirect_to_about_ee()
622
-    {
623
-        $notices = EE_Error::get_notices(false);
624
-        //if current user is an admin and it's not an ajax or rest request
625
-        if (
626
-            ! (defined('DOING_AJAX') && DOING_AJAX)
627
-            && ! (defined('REST_REQUEST') && REST_REQUEST)
628
-            && ! isset($notices['errors'])
629
-            && apply_filters(
630
-                'FHEE__EE_System__redirect_to_about_ee__do_redirect',
631
-                $this->registry->CAP->current_user_can('manage_options', 'espresso_about_default')
632
-            )
633
-        ) {
634
-            $query_params = array('page' => 'espresso_about');
635
-            if (EE_System::instance()->detect_req_type() == EE_System::req_type_new_activation) {
636
-                $query_params['new_activation'] = true;
637
-            }
638
-            if (EE_System::instance()->detect_req_type() == EE_System::req_type_reactivation) {
639
-                $query_params['reactivation'] = true;
640
-            }
641
-            $url = add_query_arg($query_params, admin_url('admin.php'));
642
-            wp_safe_redirect($url);
643
-            exit();
644
-        }
645
-    }
646
-
647
-
648
-
649
-    /**
650
-     * load_core_configuration
651
-     * this is hooked into 'AHEE__EE_Bootstrap__load_core_configuration'
652
-     * which runs during the WP 'plugins_loaded' action at priority 5
653
-     *
654
-     * @return void
655
-     */
656
-    public function load_core_configuration()
657
-    {
658
-        do_action('AHEE__EE_System__load_core_configuration__begin', $this);
659
-        $this->registry->load_core('EE_Load_Textdomain');
660
-        //load textdomain
661
-        EE_Load_Textdomain::load_textdomain();
662
-        // load and setup EE_Config and EE_Network_Config
663
-        $this->registry->load_core('Config');
664
-        $this->registry->load_core('Network_Config');
665
-        // setup autoloaders
666
-        // enable logging?
667
-        if ($this->registry->CFG->admin->use_full_logging) {
668
-            $this->registry->load_core('Log');
669
-        }
670
-        // check for activation errors
671
-        $activation_errors = get_option('ee_plugin_activation_errors', false);
672
-        if ($activation_errors) {
673
-            EE_Error::add_error($activation_errors, __FILE__, __FUNCTION__, __LINE__);
674
-            update_option('ee_plugin_activation_errors', false);
675
-        }
676
-        // get model names
677
-        $this->_parse_model_names();
678
-        //load caf stuff a chance to play during the activation process too.
679
-        $this->_maybe_brew_regular();
680
-        do_action('AHEE__EE_System__load_core_configuration__complete', $this);
681
-    }
682
-
683
-
684
-
685
-    /**
686
-     * cycles through all of the models/*.model.php files, and assembles an array of model names
687
-     *
688
-     * @return void
689
-     */
690
-    private function _parse_model_names()
691
-    {
692
-        //get all the files in the EE_MODELS folder that end in .model.php
693
-        $models = glob(EE_MODELS . '*.model.php');
694
-        $model_names = array();
695
-        $non_abstract_db_models = array();
696
-        foreach ($models as $model) {
697
-            // get model classname
698
-            $classname = EEH_File::get_classname_from_filepath_with_standard_filename($model);
699
-            $short_name = str_replace('EEM_', '', $classname);
700
-            $reflectionClass = new ReflectionClass($classname);
701
-            if ($reflectionClass->isSubclassOf('EEM_Base') && ! $reflectionClass->isAbstract()) {
702
-                $non_abstract_db_models[$short_name] = $classname;
703
-            }
704
-            $model_names[$short_name] = $classname;
705
-        }
706
-        $this->registry->models = apply_filters('FHEE__EE_System__parse_model_names', $model_names);
707
-        $this->registry->non_abstract_db_models = apply_filters('FHEE__EE_System__parse_implemented_model_names',
708
-            $non_abstract_db_models);
709
-    }
710
-
711
-
712
-
713
-    /**
714
-     * The purpose of this method is to simply check for a file named "caffeinated/brewing_regular.php" for any hooks
715
-     * that need to be setup before our EE_System launches.
716
-     *
717
-     * @return void
718
-     */
719
-    private function _maybe_brew_regular()
720
-    {
721
-        if (( ! defined('EE_DECAF') || EE_DECAF !== true) && is_readable(EE_CAFF_PATH . 'brewing_regular.php')) {
722
-            require_once EE_CAFF_PATH . 'brewing_regular.php';
723
-        }
724
-    }
725
-
726
-
727
-
728
-    /**
729
-     * register_shortcodes_modules_and_widgets
730
-     * generate lists of shortcodes and modules, then verify paths and classes
731
-     * This is hooked into 'AHEE__EE_Bootstrap__register_shortcodes_modules_and_widgets'
732
-     * which runs during the WP 'plugins_loaded' action at priority 7
733
-     *
734
-     * @access public
735
-     * @return void
736
-     */
737
-    public function register_shortcodes_modules_and_widgets()
738
-    {
739
-        try {
740
-            // load, register, and add shortcodes the new way
741
-            new ShortcodesManager(
742
-            // and the old way, but we'll put it under control of the new system
743
-                EE_Config::getLegacyShortcodesManager()
744
-            );
745
-        } catch (Exception $exception) {
746
-            new ExceptionStackTraceDisplay($exception);
747
-        }
748
-        do_action('AHEE__EE_System__register_shortcodes_modules_and_widgets');
749
-        // check for addons using old hookpoint
750
-        if (has_action('AHEE__EE_System__register_shortcodes_modules_and_addons')) {
751
-            $this->_incompatible_addon_error();
752
-        }
753
-    }
754
-
755
-
756
-
757
-    /**
758
-     * _incompatible_addon_error
759
-     *
760
-     * @access public
761
-     * @return void
762
-     */
763
-    private function _incompatible_addon_error()
764
-    {
765
-        // get array of classes hooking into here
766
-        $class_names = EEH_Class_Tools::get_class_names_for_all_callbacks_on_hook('AHEE__EE_System__register_shortcodes_modules_and_addons');
767
-        if ( ! empty($class_names)) {
768
-            $msg = __('The following plugins, addons, or modules appear to be incompatible with this version of Event Espresso and were automatically deactivated to avoid fatal errors:',
769
-                'event_espresso');
770
-            $msg .= '<ul>';
771
-            foreach ($class_names as $class_name) {
772
-                $msg .= '<li><b>Event Espresso - ' . str_replace(array('EE_', 'EEM_', 'EED_', 'EES_', 'EEW_'), '',
773
-                        $class_name) . '</b></li>';
774
-            }
775
-            $msg .= '</ul>';
776
-            $msg .= __('Compatibility issues can be avoided and/or resolved by keeping addons and plugins updated to the latest version.',
777
-                'event_espresso');
778
-            // save list of incompatible addons to wp-options for later use
779
-            add_option('ee_incompatible_addons', $class_names, '', 'no');
780
-            if (is_admin()) {
781
-                EE_Error::add_error($msg, __FILE__, __FUNCTION__, __LINE__);
782
-            }
783
-        }
784
-    }
785
-
786
-
787
-
788
-    /**
789
-     * brew_espresso
790
-     * begins the process of setting hooks for initializing EE in the correct order
791
-     * This is happening on the 'AHEE__EE_Bootstrap__brew_espresso' hookpoint
792
-     * which runs during the WP 'plugins_loaded' action at priority 9
793
-     *
794
-     * @return void
795
-     */
796
-    public function brew_espresso()
797
-    {
798
-        do_action('AHEE__EE_System__brew_espresso__begin', $this);
799
-        // load some final core systems
800
-        add_action('init', array($this, 'set_hooks_for_core'), 1);
801
-        add_action('init', array($this, 'perform_activations_upgrades_and_migrations'), 3);
802
-        add_action('init', array($this, 'load_CPTs_and_session'), 5);
803
-        add_action('init', array($this, 'load_controllers'), 7);
804
-        add_action('init', array($this, 'core_loaded_and_ready'), 9);
805
-        add_action('init', array($this, 'initialize'), 10);
806
-        add_action('init', array($this, 'initialize_last'), 100);
807
-        add_action('admin_bar_menu', array($this, 'espresso_toolbar_items'), 100);
808
-        if (is_admin() && apply_filters('FHEE__EE_System__brew_espresso__load_pue', true)) {
809
-            // pew pew pew
810
-            $this->registry->load_core('PUE');
811
-            do_action('AHEE__EE_System__brew_espresso__after_pue_init');
812
-        }
813
-        do_action('AHEE__EE_System__brew_espresso__complete', $this);
814
-    }
815
-
816
-
817
-
818
-    /**
819
-     *    set_hooks_for_core
820
-     *
821
-     * @access public
822
-     * @return    void
823
-     */
824
-    public function set_hooks_for_core()
825
-    {
826
-        $this->_deactivate_incompatible_addons();
827
-        do_action('AHEE__EE_System__set_hooks_for_core');
828
-    }
829
-
830
-
831
-
832
-    /**
833
-     * Using the information gathered in EE_System::_incompatible_addon_error,
834
-     * deactivates any addons considered incompatible with the current version of EE
835
-     */
836
-    private function _deactivate_incompatible_addons()
837
-    {
838
-        $incompatible_addons = get_option('ee_incompatible_addons', array());
839
-        if ( ! empty($incompatible_addons)) {
840
-            $active_plugins = get_option('active_plugins', array());
841
-            foreach ($active_plugins as $active_plugin) {
842
-                foreach ($incompatible_addons as $incompatible_addon) {
843
-                    if (strpos($active_plugin, $incompatible_addon) !== false) {
844
-                        unset($_GET['activate']);
845
-                        espresso_deactivate_plugin($active_plugin);
846
-                    }
847
-                }
848
-            }
849
-        }
850
-    }
851
-
852
-
853
-
854
-    /**
855
-     *    perform_activations_upgrades_and_migrations
856
-     *
857
-     * @access public
858
-     * @return    void
859
-     */
860
-    public function perform_activations_upgrades_and_migrations()
861
-    {
862
-        //first check if we had previously attempted to setup EE's directories but failed
863
-        if (EEH_Activation::upload_directories_incomplete()) {
864
-            EEH_Activation::create_upload_directories();
865
-        }
866
-        do_action('AHEE__EE_System__perform_activations_upgrades_and_migrations');
867
-    }
868
-
869
-
870
-
871
-    /**
872
-     *    load_CPTs_and_session
873
-     *
874
-     * @access public
875
-     * @return    void
876
-     */
877
-    public function load_CPTs_and_session()
878
-    {
879
-        do_action('AHEE__EE_System__load_CPTs_and_session__start');
880
-        // register Custom Post Types
881
-        $this->registry->load_core('Register_CPTs');
882
-        do_action('AHEE__EE_System__load_CPTs_and_session__complete');
883
-    }
884
-
885
-
886
-
887
-    /**
888
-     * load_controllers
889
-     * this is the best place to load any additional controllers that needs access to EE core.
890
-     * it is expected that all basic core EE systems, that are not dependant on the current request are loaded at this
891
-     * time
892
-     *
893
-     * @access public
894
-     * @return void
895
-     */
896
-    public function load_controllers()
897
-    {
898
-        do_action('AHEE__EE_System__load_controllers__start');
899
-        // let's get it started
900
-        if ( ! is_admin() && ! EE_Maintenance_Mode::instance()->level()) {
901
-            do_action('AHEE__EE_System__load_controllers__load_front_controllers');
902
-            $this->registry->load_core('Front_Controller');
903
-        } else if ( ! EE_FRONT_AJAX) {
904
-            do_action('AHEE__EE_System__load_controllers__load_admin_controllers');
905
-            EE_Registry::instance()->load_core('Admin');
906
-        }
907
-        do_action('AHEE__EE_System__load_controllers__complete');
908
-    }
909
-
910
-
911
-
912
-    /**
913
-     * core_loaded_and_ready
914
-     * all of the basic EE core should be loaded at this point and available regardless of M-Mode
915
-     *
916
-     * @access public
917
-     * @return void
918
-     */
919
-    public function core_loaded_and_ready()
920
-    {
921
-        $this->registry->load_core('Session');
922
-        do_action('AHEE__EE_System__core_loaded_and_ready');
923
-        // load_espresso_template_tags
924
-        if (is_readable(EE_PUBLIC . 'template_tags.php')) {
925
-            require_once(EE_PUBLIC . 'template_tags.php');
926
-        }
927
-        do_action('AHEE__EE_System__set_hooks_for_shortcodes_modules_and_addons');
928
-        $this->registry->create('EventEspresso\core\services\assets\Registry', array(), true);
929
-    }
930
-
931
-
932
-
933
-    /**
934
-     * initialize
935
-     * this is the best place to begin initializing client code
936
-     *
937
-     * @access public
938
-     * @return void
939
-     */
940
-    public function initialize()
941
-    {
942
-        do_action('AHEE__EE_System__initialize');
943
-    }
944
-
945
-
946
-
947
-    /**
948
-     * initialize_last
949
-     * this is run really late during the WP init hookpoint, and ensures that mostly everything else that needs to
950
-     * initialize has done so
951
-     *
952
-     * @access public
953
-     * @return void
954
-     */
955
-    public function initialize_last()
956
-    {
957
-        do_action('AHEE__EE_System__initialize_last');
958
-    }
959
-
960
-
961
-
962
-    /**
963
-     * set_hooks_for_shortcodes_modules_and_addons
964
-     * this is the best place for other systems to set callbacks for hooking into other parts of EE
965
-     * this happens at the very beginning of the wp_loaded hookpoint
966
-     *
967
-     * @access public
968
-     * @return void
969
-     */
970
-    public function set_hooks_for_shortcodes_modules_and_addons()
971
-    {
972
-        //		do_action( 'AHEE__EE_System__set_hooks_for_shortcodes_modules_and_addons' );
973
-    }
974
-
975
-
976
-
977
-    /**
978
-     * do_not_cache
979
-     * sets no cache headers and defines no cache constants for WP plugins
980
-     *
981
-     * @access public
982
-     * @return void
983
-     */
984
-    public static function do_not_cache()
985
-    {
986
-        // set no cache constants
987
-        if ( ! defined('DONOTCACHEPAGE')) {
988
-            define('DONOTCACHEPAGE', true);
989
-        }
990
-        if ( ! defined('DONOTCACHCEOBJECT')) {
991
-            define('DONOTCACHCEOBJECT', true);
992
-        }
993
-        if ( ! defined('DONOTCACHEDB')) {
994
-            define('DONOTCACHEDB', true);
995
-        }
996
-        // add no cache headers
997
-        add_action('send_headers', array('EE_System', 'nocache_headers'), 10);
998
-        // plus a little extra for nginx and Google Chrome
999
-        add_filter('nocache_headers', array('EE_System', 'extra_nocache_headers'), 10, 1);
1000
-        // prevent browsers from prefetching of the rel='next' link, because it may contain content that interferes with the registration process
1001
-        remove_action('wp_head', 'adjacent_posts_rel_link_wp_head');
1002
-    }
1003
-
1004
-
1005
-
1006
-    /**
1007
-     *    extra_nocache_headers
1008
-     *
1009
-     * @access    public
1010
-     * @param $headers
1011
-     * @return    array
1012
-     */
1013
-    public static function extra_nocache_headers($headers)
1014
-    {
1015
-        // for NGINX
1016
-        $headers['X-Accel-Expires'] = 0;
1017
-        // plus extra for Google Chrome since it doesn't seem to respect "no-cache", but WILL respect "no-store"
1018
-        $headers['Cache-Control'] = 'no-store, no-cache, must-revalidate, max-age=0';
1019
-        return $headers;
1020
-    }
1021
-
1022
-
1023
-
1024
-    /**
1025
-     *    nocache_headers
1026
-     *
1027
-     * @access    public
1028
-     * @return    void
1029
-     */
1030
-    public static function nocache_headers()
1031
-    {
1032
-        nocache_headers();
1033
-    }
1034
-
1035
-
1036
-
1037
-    /**
1038
-     *    espresso_toolbar_items
1039
-     *
1040
-     * @access public
1041
-     * @param  WP_Admin_Bar $admin_bar
1042
-     * @return void
1043
-     */
1044
-    public function espresso_toolbar_items(WP_Admin_Bar $admin_bar)
1045
-    {
1046
-        // if in full M-Mode, or its an AJAX request, or user is NOT an admin
1047
-        if (EE_Maintenance_Mode::instance()->level() == EE_Maintenance_Mode::level_2_complete_maintenance
1048
-            || defined('DOING_AJAX')
1049
-            || ! $this->registry->CAP->current_user_can('ee_read_ee', 'ee_admin_bar_menu_top_level')
1050
-        ) {
1051
-            return;
1052
-        }
1053
-        do_action('AHEE_log', __FILE__, __FUNCTION__, '');
1054
-        $menu_class = 'espresso_menu_item_class';
1055
-        //we don't use the constants EVENTS_ADMIN_URL or REG_ADMIN_URL
1056
-        //because they're only defined in each of their respective constructors
1057
-        //and this might be a frontend request, in which case they aren't available
1058
-        $events_admin_url = admin_url("admin.php?page=espresso_events");
1059
-        $reg_admin_url = admin_url("admin.php?page=espresso_registrations");
1060
-        $extensions_admin_url = admin_url("admin.php?page=espresso_packages");
1061
-        //Top Level
1062
-        $admin_bar->add_menu(array(
1063
-            'id'    => 'espresso-toolbar',
1064
-            'title' => '<span class="ee-icon ee-icon-ee-cup-thick ee-icon-size-20"></span><span class="ab-label">'
1065
-                       . _x('Event Espresso', 'admin bar menu group label', 'event_espresso')
1066
-                       . '</span>',
1067
-            'href'  => $events_admin_url,
1068
-            'meta'  => array(
1069
-                'title' => __('Event Espresso', 'event_espresso'),
1070
-                'class' => $menu_class . 'first',
1071
-            ),
1072
-        ));
1073
-        //Events
1074
-        if ($this->registry->CAP->current_user_can('ee_read_events', 'ee_admin_bar_menu_espresso-toolbar-events')) {
1075
-            $admin_bar->add_menu(array(
1076
-                'id'     => 'espresso-toolbar-events',
1077
-                'parent' => 'espresso-toolbar',
1078
-                'title'  => __('Events', 'event_espresso'),
1079
-                'href'   => $events_admin_url,
1080
-                'meta'   => array(
1081
-                    'title'  => __('Events', 'event_espresso'),
1082
-                    'target' => '',
1083
-                    'class'  => $menu_class,
1084
-                ),
1085
-            ));
1086
-        }
1087
-        if ($this->registry->CAP->current_user_can('ee_edit_events', 'ee_admin_bar_menu_espresso-toolbar-events-new')) {
1088
-            //Events Add New
1089
-            $admin_bar->add_menu(array(
1090
-                'id'     => 'espresso-toolbar-events-new',
1091
-                'parent' => 'espresso-toolbar-events',
1092
-                'title'  => __('Add New', 'event_espresso'),
1093
-                'href'   => EEH_URL::add_query_args_and_nonce(array('action' => 'create_new'), $events_admin_url),
1094
-                'meta'   => array(
1095
-                    'title'  => __('Add New', 'event_espresso'),
1096
-                    'target' => '',
1097
-                    'class'  => $menu_class,
1098
-                ),
1099
-            ));
1100
-        }
1101
-        if (is_single() && (get_post_type() == 'espresso_events')) {
1102
-            //Current post
1103
-            global $post;
1104
-            if ($this->registry->CAP->current_user_can('ee_edit_event',
1105
-                'ee_admin_bar_menu_espresso-toolbar-events-edit', $post->ID)
1106
-            ) {
1107
-                //Events Edit Current Event
1108
-                $admin_bar->add_menu(array(
1109
-                    'id'     => 'espresso-toolbar-events-edit',
1110
-                    'parent' => 'espresso-toolbar-events',
1111
-                    'title'  => __('Edit Event', 'event_espresso'),
1112
-                    'href'   => EEH_URL::add_query_args_and_nonce(array('action' => 'edit', 'post' => $post->ID),
1113
-                        $events_admin_url),
1114
-                    'meta'   => array(
1115
-                        'title'  => __('Edit Event', 'event_espresso'),
1116
-                        'target' => '',
1117
-                        'class'  => $menu_class,
1118
-                    ),
1119
-                ));
1120
-            }
1121
-        }
1122
-        //Events View
1123
-        if ($this->registry->CAP->current_user_can('ee_read_events',
1124
-            'ee_admin_bar_menu_espresso-toolbar-events-view')
1125
-        ) {
1126
-            $admin_bar->add_menu(array(
1127
-                'id'     => 'espresso-toolbar-events-view',
1128
-                'parent' => 'espresso-toolbar-events',
1129
-                'title'  => __('View', 'event_espresso'),
1130
-                'href'   => $events_admin_url,
1131
-                'meta'   => array(
1132
-                    'title'  => __('View', 'event_espresso'),
1133
-                    'target' => '',
1134
-                    'class'  => $menu_class,
1135
-                ),
1136
-            ));
1137
-        }
1138
-        if ($this->registry->CAP->current_user_can('ee_read_events', 'ee_admin_bar_menu_espresso-toolbar-events-all')) {
1139
-            //Events View All
1140
-            $admin_bar->add_menu(array(
1141
-                'id'     => 'espresso-toolbar-events-all',
1142
-                'parent' => 'espresso-toolbar-events-view',
1143
-                'title'  => __('All', 'event_espresso'),
1144
-                'href'   => $events_admin_url,
1145
-                'meta'   => array(
1146
-                    'title'  => __('All', 'event_espresso'),
1147
-                    'target' => '',
1148
-                    'class'  => $menu_class,
1149
-                ),
1150
-            ));
1151
-        }
1152
-        if ($this->registry->CAP->current_user_can('ee_read_events',
1153
-            'ee_admin_bar_menu_espresso-toolbar-events-today')
1154
-        ) {
1155
-            //Events View Today
1156
-            $admin_bar->add_menu(array(
1157
-                'id'     => 'espresso-toolbar-events-today',
1158
-                'parent' => 'espresso-toolbar-events-view',
1159
-                'title'  => __('Today', 'event_espresso'),
1160
-                'href'   => EEH_URL::add_query_args_and_nonce(array('action' => 'default', 'status' => 'today'),
1161
-                    $events_admin_url),
1162
-                'meta'   => array(
1163
-                    'title'  => __('Today', 'event_espresso'),
1164
-                    'target' => '',
1165
-                    'class'  => $menu_class,
1166
-                ),
1167
-            ));
1168
-        }
1169
-        if ($this->registry->CAP->current_user_can('ee_read_events',
1170
-            'ee_admin_bar_menu_espresso-toolbar-events-month')
1171
-        ) {
1172
-            //Events View This Month
1173
-            $admin_bar->add_menu(array(
1174
-                'id'     => 'espresso-toolbar-events-month',
1175
-                'parent' => 'espresso-toolbar-events-view',
1176
-                'title'  => __('This Month', 'event_espresso'),
1177
-                'href'   => EEH_URL::add_query_args_and_nonce(array('action' => 'default', 'status' => 'month'),
1178
-                    $events_admin_url),
1179
-                'meta'   => array(
1180
-                    'title'  => __('This Month', 'event_espresso'),
1181
-                    'target' => '',
1182
-                    'class'  => $menu_class,
1183
-                ),
1184
-            ));
1185
-        }
1186
-        //Registration Overview
1187
-        if ($this->registry->CAP->current_user_can('ee_read_registrations',
1188
-            'ee_admin_bar_menu_espresso-toolbar-registrations')
1189
-        ) {
1190
-            $admin_bar->add_menu(array(
1191
-                'id'     => 'espresso-toolbar-registrations',
1192
-                'parent' => 'espresso-toolbar',
1193
-                'title'  => __('Registrations', 'event_espresso'),
1194
-                'href'   => $reg_admin_url,
1195
-                'meta'   => array(
1196
-                    'title'  => __('Registrations', 'event_espresso'),
1197
-                    'target' => '',
1198
-                    'class'  => $menu_class,
1199
-                ),
1200
-            ));
1201
-        }
1202
-        //Registration Overview Today
1203
-        if ($this->registry->CAP->current_user_can('ee_read_registrations',
1204
-            'ee_admin_bar_menu_espresso-toolbar-registrations-today')
1205
-        ) {
1206
-            $admin_bar->add_menu(array(
1207
-                'id'     => 'espresso-toolbar-registrations-today',
1208
-                'parent' => 'espresso-toolbar-registrations',
1209
-                'title'  => __('Today', 'event_espresso'),
1210
-                'href'   => EEH_URL::add_query_args_and_nonce(array('action' => 'default', 'status' => 'today'),
1211
-                    $reg_admin_url),
1212
-                'meta'   => array(
1213
-                    'title'  => __('Today', 'event_espresso'),
1214
-                    'target' => '',
1215
-                    'class'  => $menu_class,
1216
-                ),
1217
-            ));
1218
-        }
1219
-        //Registration Overview Today Completed
1220
-        if ($this->registry->CAP->current_user_can('ee_read_registrations',
1221
-            'ee_admin_bar_menu_espresso-toolbar-registrations-today-approved')
1222
-        ) {
1223
-            $admin_bar->add_menu(array(
1224
-                'id'     => 'espresso-toolbar-registrations-today-approved',
1225
-                'parent' => 'espresso-toolbar-registrations-today',
1226
-                'title'  => __('Approved', 'event_espresso'),
1227
-                'href'   => EEH_URL::add_query_args_and_nonce(array(
1228
-                    'action'      => 'default',
1229
-                    'status'      => 'today',
1230
-                    '_reg_status' => EEM_Registration::status_id_approved,
1231
-                ), $reg_admin_url),
1232
-                'meta'   => array(
1233
-                    'title'  => __('Approved', 'event_espresso'),
1234
-                    'target' => '',
1235
-                    'class'  => $menu_class,
1236
-                ),
1237
-            ));
1238
-        }
1239
-        //Registration Overview Today Pending\
1240
-        if ($this->registry->CAP->current_user_can('ee_read_registrations',
1241
-            'ee_admin_bar_menu_espresso-toolbar-registrations-today-pending')
1242
-        ) {
1243
-            $admin_bar->add_menu(array(
1244
-                'id'     => 'espresso-toolbar-registrations-today-pending',
1245
-                'parent' => 'espresso-toolbar-registrations-today',
1246
-                'title'  => __('Pending', 'event_espresso'),
1247
-                'href'   => EEH_URL::add_query_args_and_nonce(array(
1248
-                    'action'     => 'default',
1249
-                    'status'     => 'today',
1250
-                    'reg_status' => EEM_Registration::status_id_pending_payment,
1251
-                ), $reg_admin_url),
1252
-                'meta'   => array(
1253
-                    'title'  => __('Pending Payment', 'event_espresso'),
1254
-                    'target' => '',
1255
-                    'class'  => $menu_class,
1256
-                ),
1257
-            ));
1258
-        }
1259
-        //Registration Overview Today Incomplete
1260
-        if ($this->registry->CAP->current_user_can('ee_read_registrations',
1261
-            'ee_admin_bar_menu_espresso-toolbar-registrations-today-not-approved')
1262
-        ) {
1263
-            $admin_bar->add_menu(array(
1264
-                'id'     => 'espresso-toolbar-registrations-today-not-approved',
1265
-                'parent' => 'espresso-toolbar-registrations-today',
1266
-                'title'  => __('Not Approved', 'event_espresso'),
1267
-                'href'   => EEH_URL::add_query_args_and_nonce(array(
1268
-                    'action'      => 'default',
1269
-                    'status'      => 'today',
1270
-                    '_reg_status' => EEM_Registration::status_id_not_approved,
1271
-                ), $reg_admin_url),
1272
-                'meta'   => array(
1273
-                    'title'  => __('Not Approved', 'event_espresso'),
1274
-                    'target' => '',
1275
-                    'class'  => $menu_class,
1276
-                ),
1277
-            ));
1278
-        }
1279
-        //Registration Overview Today Incomplete
1280
-        if ($this->registry->CAP->current_user_can('ee_read_registrations',
1281
-            'ee_admin_bar_menu_espresso-toolbar-registrations-today-cancelled')
1282
-        ) {
1283
-            $admin_bar->add_menu(array(
1284
-                'id'     => 'espresso-toolbar-registrations-today-cancelled',
1285
-                'parent' => 'espresso-toolbar-registrations-today',
1286
-                'title'  => __('Cancelled', 'event_espresso'),
1287
-                'href'   => EEH_URL::add_query_args_and_nonce(array(
1288
-                    'action'      => 'default',
1289
-                    'status'      => 'today',
1290
-                    '_reg_status' => EEM_Registration::status_id_cancelled,
1291
-                ), $reg_admin_url),
1292
-                'meta'   => array(
1293
-                    'title'  => __('Cancelled', 'event_espresso'),
1294
-                    'target' => '',
1295
-                    'class'  => $menu_class,
1296
-                ),
1297
-            ));
1298
-        }
1299
-        //Registration Overview This Month
1300
-        if ($this->registry->CAP->current_user_can('ee_read_registrations',
1301
-            'ee_admin_bar_menu_espresso-toolbar-registrations-month')
1302
-        ) {
1303
-            $admin_bar->add_menu(array(
1304
-                'id'     => 'espresso-toolbar-registrations-month',
1305
-                'parent' => 'espresso-toolbar-registrations',
1306
-                'title'  => __('This Month', 'event_espresso'),
1307
-                'href'   => EEH_URL::add_query_args_and_nonce(array('action' => 'default', 'status' => 'month'),
1308
-                    $reg_admin_url),
1309
-                'meta'   => array(
1310
-                    'title'  => __('This Month', 'event_espresso'),
1311
-                    'target' => '',
1312
-                    'class'  => $menu_class,
1313
-                ),
1314
-            ));
1315
-        }
1316
-        //Registration Overview This Month Approved
1317
-        if ($this->registry->CAP->current_user_can('ee_read_registrations',
1318
-            'ee_admin_bar_menu_espresso-toolbar-registrations-month-approved')
1319
-        ) {
1320
-            $admin_bar->add_menu(array(
1321
-                'id'     => 'espresso-toolbar-registrations-month-approved',
1322
-                'parent' => 'espresso-toolbar-registrations-month',
1323
-                'title'  => __('Approved', 'event_espresso'),
1324
-                'href'   => EEH_URL::add_query_args_and_nonce(array(
1325
-                    'action'      => 'default',
1326
-                    'status'      => 'month',
1327
-                    '_reg_status' => EEM_Registration::status_id_approved,
1328
-                ), $reg_admin_url),
1329
-                'meta'   => array(
1330
-                    'title'  => __('Approved', 'event_espresso'),
1331
-                    'target' => '',
1332
-                    'class'  => $menu_class,
1333
-                ),
1334
-            ));
1335
-        }
1336
-        //Registration Overview This Month Pending
1337
-        if ($this->registry->CAP->current_user_can('ee_read_registrations',
1338
-            'ee_admin_bar_menu_espresso-toolbar-registrations-month-pending')
1339
-        ) {
1340
-            $admin_bar->add_menu(array(
1341
-                'id'     => 'espresso-toolbar-registrations-month-pending',
1342
-                'parent' => 'espresso-toolbar-registrations-month',
1343
-                'title'  => __('Pending', 'event_espresso'),
1344
-                'href'   => EEH_URL::add_query_args_and_nonce(array(
1345
-                    'action'      => 'default',
1346
-                    'status'      => 'month',
1347
-                    '_reg_status' => EEM_Registration::status_id_pending_payment,
1348
-                ), $reg_admin_url),
1349
-                'meta'   => array(
1350
-                    'title'  => __('Pending', 'event_espresso'),
1351
-                    'target' => '',
1352
-                    'class'  => $menu_class,
1353
-                ),
1354
-            ));
1355
-        }
1356
-        //Registration Overview This Month Not Approved
1357
-        if ($this->registry->CAP->current_user_can('ee_read_registrations',
1358
-            'ee_admin_bar_menu_espresso-toolbar-registrations-month-not-approved')
1359
-        ) {
1360
-            $admin_bar->add_menu(array(
1361
-                'id'     => 'espresso-toolbar-registrations-month-not-approved',
1362
-                'parent' => 'espresso-toolbar-registrations-month',
1363
-                'title'  => __('Not Approved', 'event_espresso'),
1364
-                'href'   => EEH_URL::add_query_args_and_nonce(array(
1365
-                    'action'      => 'default',
1366
-                    'status'      => 'month',
1367
-                    '_reg_status' => EEM_Registration::status_id_not_approved,
1368
-                ), $reg_admin_url),
1369
-                'meta'   => array(
1370
-                    'title'  => __('Not Approved', 'event_espresso'),
1371
-                    'target' => '',
1372
-                    'class'  => $menu_class,
1373
-                ),
1374
-            ));
1375
-        }
1376
-        //Registration Overview This Month Cancelled
1377
-        if ($this->registry->CAP->current_user_can('ee_read_registrations',
1378
-            'ee_admin_bar_menu_espresso-toolbar-registrations-month-cancelled')
1379
-        ) {
1380
-            $admin_bar->add_menu(array(
1381
-                'id'     => 'espresso-toolbar-registrations-month-cancelled',
1382
-                'parent' => 'espresso-toolbar-registrations-month',
1383
-                'title'  => __('Cancelled', 'event_espresso'),
1384
-                'href'   => EEH_URL::add_query_args_and_nonce(array(
1385
-                    'action'      => 'default',
1386
-                    'status'      => 'month',
1387
-                    '_reg_status' => EEM_Registration::status_id_cancelled,
1388
-                ), $reg_admin_url),
1389
-                'meta'   => array(
1390
-                    'title'  => __('Cancelled', 'event_espresso'),
1391
-                    'target' => '',
1392
-                    'class'  => $menu_class,
1393
-                ),
1394
-            ));
1395
-        }
1396
-        //Extensions & Services
1397
-        if ($this->registry->CAP->current_user_can('ee_read_ee',
1398
-            'ee_admin_bar_menu_espresso-toolbar-extensions-and-services')
1399
-        ) {
1400
-            $admin_bar->add_menu(array(
1401
-                'id'     => 'espresso-toolbar-extensions-and-services',
1402
-                'parent' => 'espresso-toolbar',
1403
-                'title'  => __('Extensions & Services', 'event_espresso'),
1404
-                'href'   => $extensions_admin_url,
1405
-                'meta'   => array(
1406
-                    'title'  => __('Extensions & Services', 'event_espresso'),
1407
-                    'target' => '',
1408
-                    'class'  => $menu_class,
1409
-                ),
1410
-            ));
1411
-        }
1412
-    }
1413
-
1414
-
1415
-
1416
-    /**
1417
-     * simply hooks into "wp_list_pages_exclude" filter (for wp_list_pages method) and makes sure EE critical pages are
1418
-     * never returned with the function.
1419
-     *
1420
-     * @param  array $exclude_array any existing pages being excluded are in this array.
1421
-     * @return array
1422
-     */
1423
-    public function remove_pages_from_wp_list_pages($exclude_array)
1424
-    {
1425
-        return array_merge($exclude_array, $this->registry->CFG->core->get_critical_pages_array());
1426
-    }
22
+	/**
23
+	 * indicates this is a 'normal' request. Ie, not activation, nor upgrade, nor activation.
24
+	 * So examples of this would be a normal GET request on the frontend or backend, or a POST, etc
25
+	 */
26
+	const req_type_normal = 0;
27
+
28
+	/**
29
+	 * Indicates this is a brand new installation of EE so we should install
30
+	 * tables and default data etc
31
+	 */
32
+	const req_type_new_activation = 1;
33
+
34
+	/**
35
+	 * we've detected that EE has been reactivated (or EE was activated during maintenance mode,
36
+	 * and we just exited maintenance mode). We MUST check the database is setup properly
37
+	 * and that default data is setup too
38
+	 */
39
+	const req_type_reactivation = 2;
40
+
41
+	/**
42
+	 * indicates that EE has been upgraded since its previous request.
43
+	 * We may have data migration scripts to call and will want to trigger maintenance mode
44
+	 */
45
+	const req_type_upgrade = 3;
46
+
47
+	/**
48
+	 * TODO  will detect that EE has been DOWNGRADED. We probably don't want to run in this case...
49
+	 */
50
+	const req_type_downgrade = 4;
51
+
52
+	/**
53
+	 * @deprecated since version 4.6.0.dev.006
54
+	 * Now whenever a new_activation is detected the request type is still just
55
+	 * new_activation (same for reactivation, upgrade, downgrade etc), but if we'r ein maintenance mode
56
+	 * EE_System::initialize_db_if_no_migrations_required and EE_Addon::initialize_db_if_no_migrations_required
57
+	 * will instead enqueue that EE plugin's db initialization for when we're taken out of maintenance mode.
58
+	 * (Specifically, when the migration manager indicates migrations are finished
59
+	 * EE_Data_Migration_Manager::initialize_db_for_enqueued_ee_plugins() will be called)
60
+	 */
61
+	const req_type_activation_but_not_installed = 5;
62
+
63
+	/**
64
+	 * option prefix for recording the activation history (like core's "espresso_db_update") of addons
65
+	 */
66
+	const addon_activation_history_option_prefix = 'ee_addon_activation_history_';
67
+
68
+
69
+	/**
70
+	 *    instance of the EE_System object
71
+	 *
72
+	 * @var    $_instance
73
+	 * @access    private
74
+	 */
75
+	private static $_instance = null;
76
+
77
+	/**
78
+	 * @type  EE_Registry $Registry
79
+	 * @access    protected
80
+	 */
81
+	protected $registry;
82
+
83
+	/**
84
+	 * Stores which type of request this is, options being one of the constants on EE_System starting with req_type_*.
85
+	 * It can be a brand-new activation, a reactivation, an upgrade, a downgrade, or a normal request.
86
+	 *
87
+	 * @var int
88
+	 */
89
+	private $_req_type;
90
+
91
+	/**
92
+	 * Whether or not there was a non-micro version change in EE core version during this request
93
+	 *
94
+	 * @var boolean
95
+	 */
96
+	private $_major_version_change = false;
97
+
98
+
99
+
100
+	/**
101
+	 * @singleton method used to instantiate class object
102
+	 * @access    public
103
+	 * @param  \EE_Registry $Registry
104
+	 * @return \EE_System
105
+	 */
106
+	public static function instance(EE_Registry $Registry = null)
107
+	{
108
+		// check if class object is instantiated
109
+		if ( ! self::$_instance instanceof EE_System) {
110
+			self::$_instance = new self($Registry);
111
+		}
112
+		return self::$_instance;
113
+	}
114
+
115
+
116
+
117
+	/**
118
+	 * resets the instance and returns it
119
+	 *
120
+	 * @return EE_System
121
+	 */
122
+	public static function reset()
123
+	{
124
+		self::$_instance->_req_type = null;
125
+		//make sure none of the old hooks are left hanging around
126
+		remove_all_actions('AHEE__EE_System__perform_activations_upgrades_and_migrations');
127
+		//we need to reset the migration manager in order for it to detect DMSs properly
128
+		EE_Data_Migration_Manager::reset();
129
+		self::instance()->detect_activations_or_upgrades();
130
+		self::instance()->perform_activations_upgrades_and_migrations();
131
+		return self::instance();
132
+	}
133
+
134
+
135
+
136
+	/**
137
+	 *    sets hooks for running rest of system
138
+	 *    provides "AHEE__EE_System__construct__complete" hook for EE Addons to use as their starting point
139
+	 *    starting EE Addons from any other point may lead to problems
140
+	 *
141
+	 * @access private
142
+	 * @param  \EE_Registry $Registry
143
+	 */
144
+	private function __construct(EE_Registry $Registry)
145
+	{
146
+		$this->registry = $Registry;
147
+		do_action('AHEE__EE_System__construct__begin', $this);
148
+		// allow addons to load first so that they can register autoloaders, set hooks for running DMS's, etc
149
+		add_action('AHEE__EE_Bootstrap__load_espresso_addons', array($this, 'load_espresso_addons'));
150
+		// when an ee addon is activated, we want to call the core hook(s) again
151
+		// because the newly-activated addon didn't get a chance to run at all
152
+		add_action('activate_plugin', array($this, 'load_espresso_addons'), 1);
153
+		// detect whether install or upgrade
154
+		add_action('AHEE__EE_Bootstrap__detect_activations_or_upgrades', array($this, 'detect_activations_or_upgrades'),
155
+			3);
156
+		// load EE_Config, EE_Textdomain, etc
157
+		add_action('AHEE__EE_Bootstrap__load_core_configuration', array($this, 'load_core_configuration'), 5);
158
+		// load EE_Config, EE_Textdomain, etc
159
+		add_action('AHEE__EE_Bootstrap__register_shortcodes_modules_and_widgets',
160
+			array($this, 'register_shortcodes_modules_and_widgets'), 7);
161
+		// you wanna get going? I wanna get going... let's get going!
162
+		add_action('AHEE__EE_Bootstrap__brew_espresso', array($this, 'brew_espresso'), 9);
163
+		//other housekeeping
164
+		//exclude EE critical pages from wp_list_pages
165
+		add_filter('wp_list_pages_excludes', array($this, 'remove_pages_from_wp_list_pages'), 10);
166
+		// ALL EE Addons should use the following hook point to attach their initial setup too
167
+		// it's extremely important for EE Addons to register any class autoloaders so that they can be available when the EE_Config loads
168
+		do_action('AHEE__EE_System__construct__complete', $this);
169
+	}
170
+
171
+
172
+
173
+	/**
174
+	 * load_espresso_addons
175
+	 * allow addons to load first so that they can set hooks for running DMS's, etc
176
+	 * this is hooked into both:
177
+	 *    'AHEE__EE_Bootstrap__load_core_configuration'
178
+	 *        which runs during the WP 'plugins_loaded' action at priority 5
179
+	 *    and the WP 'activate_plugin' hookpoint
180
+	 *
181
+	 * @access public
182
+	 * @return void
183
+	 */
184
+	public function load_espresso_addons()
185
+	{
186
+		// set autoloaders for all of the classes implementing EEI_Plugin_API
187
+		// which provide helpers for EE plugin authors to more easily register certain components with EE.
188
+		EEH_Autoloader::instance()->register_autoloaders_for_each_file_in_folder(EE_LIBRARIES . 'plugin_api');
189
+		//load and setup EE_Capabilities
190
+		$this->registry->load_core('Capabilities');
191
+		//caps need to be initialized on every request so that capability maps are set.
192
+		//@see https://events.codebasehq.com/projects/event-espresso/tickets/8674
193
+		$this->registry->CAP->init_caps();
194
+		do_action('AHEE__EE_System__load_espresso_addons');
195
+		//if the WP API basic auth plugin isn't already loaded, load it now.
196
+		//We want it for mobile apps. Just include the entire plugin
197
+		//also, don't load the basic auth when a plugin is getting activated, because
198
+		//it could be the basic auth plugin, and it doesn't check if its methods are already defined
199
+		//and causes a fatal error
200
+		if ( ! function_exists('json_basic_auth_handler')
201
+			 && ! function_exists('json_basic_auth_error')
202
+			 && ! (
203
+				isset($_GET['action'])
204
+				&& in_array($_GET['action'], array('activate', 'activate-selected'))
205
+			)
206
+			 && ! (
207
+				isset($_GET['activate'])
208
+				&& $_GET['activate'] === 'true'
209
+			)
210
+		) {
211
+			include_once EE_THIRD_PARTY . 'wp-api-basic-auth' . DS . 'basic-auth.php';
212
+		}
213
+		do_action('AHEE__EE_System__load_espresso_addons__complete');
214
+	}
215
+
216
+
217
+
218
+	/**
219
+	 * detect_activations_or_upgrades
220
+	 * Checks for activation or upgrade of core first;
221
+	 * then also checks if any registered addons have been activated or upgraded
222
+	 * This is hooked into 'AHEE__EE_Bootstrap__detect_activations_or_upgrades'
223
+	 * which runs during the WP 'plugins_loaded' action at priority 3
224
+	 *
225
+	 * @access public
226
+	 * @return void
227
+	 */
228
+	public function detect_activations_or_upgrades()
229
+	{
230
+		//first off: let's make sure to handle core
231
+		$this->detect_if_activation_or_upgrade();
232
+		foreach ($this->registry->addons as $addon) {
233
+			//detect teh request type for that addon
234
+			$addon->detect_activation_or_upgrade();
235
+		}
236
+	}
237
+
238
+
239
+
240
+	/**
241
+	 * detect_if_activation_or_upgrade
242
+	 * Takes care of detecting whether this is a brand new install or code upgrade,
243
+	 * and either setting up the DB or setting up maintenance mode etc.
244
+	 *
245
+	 * @access public
246
+	 * @return void
247
+	 */
248
+	public function detect_if_activation_or_upgrade()
249
+	{
250
+		do_action('AHEE__EE_System___detect_if_activation_or_upgrade__begin');
251
+		// load M-Mode class
252
+		$this->registry->load_core('Maintenance_Mode');
253
+		// check if db has been updated, or if its a brand-new installation
254
+		$espresso_db_update = $this->fix_espresso_db_upgrade_option();
255
+		$request_type = $this->detect_req_type($espresso_db_update);
256
+		//EEH_Debug_Tools::printr( $request_type, '$request_type', __FILE__, __LINE__ );
257
+		switch ($request_type) {
258
+			case EE_System::req_type_new_activation:
259
+				do_action('AHEE__EE_System__detect_if_activation_or_upgrade__new_activation');
260
+				$this->_handle_core_version_change($espresso_db_update);
261
+				break;
262
+			case EE_System::req_type_reactivation:
263
+				do_action('AHEE__EE_System__detect_if_activation_or_upgrade__reactivation');
264
+				$this->_handle_core_version_change($espresso_db_update);
265
+				break;
266
+			case EE_System::req_type_upgrade:
267
+				do_action('AHEE__EE_System__detect_if_activation_or_upgrade__upgrade');
268
+				//migrations may be required now that we've upgraded
269
+				EE_Maintenance_Mode::instance()->set_maintenance_mode_if_db_old();
270
+				$this->_handle_core_version_change($espresso_db_update);
271
+				//				echo "done upgrade";die;
272
+				break;
273
+			case EE_System::req_type_downgrade:
274
+				do_action('AHEE__EE_System__detect_if_activation_or_upgrade__downgrade');
275
+				//its possible migrations are no longer required
276
+				EE_Maintenance_Mode::instance()->set_maintenance_mode_if_db_old();
277
+				$this->_handle_core_version_change($espresso_db_update);
278
+				break;
279
+			case EE_System::req_type_normal:
280
+			default:
281
+				//				$this->_maybe_redirect_to_ee_about();
282
+				break;
283
+		}
284
+		do_action('AHEE__EE_System__detect_if_activation_or_upgrade__complete');
285
+	}
286
+
287
+
288
+
289
+	/**
290
+	 * Updates the list of installed versions and sets hooks for
291
+	 * initializing the database later during the request
292
+	 *
293
+	 * @param array $espresso_db_update
294
+	 */
295
+	protected function _handle_core_version_change($espresso_db_update)
296
+	{
297
+		$this->update_list_of_installed_versions($espresso_db_update);
298
+		//get ready to verify the DB is ok (provided we aren't in maintenance mode, of course)
299
+		add_action('AHEE__EE_System__perform_activations_upgrades_and_migrations',
300
+			array($this, 'initialize_db_if_no_migrations_required'));
301
+	}
302
+
303
+
304
+
305
+	/**
306
+	 * standardizes the wp option 'espresso_db_upgrade' which actually stores
307
+	 * information about what versions of EE have been installed and activated,
308
+	 * NOT necessarily the state of the database
309
+	 *
310
+	 * @param null $espresso_db_update
311
+	 * @internal param array $espresso_db_update_value the value of the WordPress option. If not supplied, fetches it
312
+	 *           from the options table
313
+	 * @return array the correct value of 'espresso_db_upgrade', after saving it, if it needed correction
314
+	 */
315
+	private function fix_espresso_db_upgrade_option($espresso_db_update = null)
316
+	{
317
+		do_action('FHEE__EE_System__manage_fix_espresso_db_upgrade_option__begin', $espresso_db_update);
318
+		if ( ! $espresso_db_update) {
319
+			$espresso_db_update = get_option('espresso_db_update');
320
+		}
321
+		// check that option is an array
322
+		if ( ! is_array($espresso_db_update)) {
323
+			// if option is FALSE, then it never existed
324
+			if ($espresso_db_update === false) {
325
+				// make $espresso_db_update an array and save option with autoload OFF
326
+				$espresso_db_update = array();
327
+				add_option('espresso_db_update', $espresso_db_update, '', 'no');
328
+			} else {
329
+				// option is NOT FALSE but also is NOT an array, so make it an array and save it
330
+				$espresso_db_update = array($espresso_db_update => array());
331
+				update_option('espresso_db_update', $espresso_db_update);
332
+			}
333
+		} else {
334
+			$corrected_db_update = array();
335
+			//if IS an array, but is it an array where KEYS are version numbers, and values are arrays?
336
+			foreach ($espresso_db_update as $should_be_version_string => $should_be_array) {
337
+				if (is_int($should_be_version_string) && ! is_array($should_be_array)) {
338
+					//the key is an int, and the value IS NOT an array
339
+					//so it must be numerically-indexed, where values are versions installed...
340
+					//fix it!
341
+					$version_string = $should_be_array;
342
+					$corrected_db_update[$version_string] = array('unknown-date');
343
+				} else {
344
+					//ok it checks out
345
+					$corrected_db_update[$should_be_version_string] = $should_be_array;
346
+				}
347
+			}
348
+			$espresso_db_update = $corrected_db_update;
349
+			update_option('espresso_db_update', $espresso_db_update);
350
+		}
351
+		do_action('FHEE__EE_System__manage_fix_espresso_db_upgrade_option__complete', $espresso_db_update);
352
+		return $espresso_db_update;
353
+	}
354
+
355
+
356
+
357
+	/**
358
+	 * Does the traditional work of setting up the plugin's database and adding default data.
359
+	 * If migration script/process did not exist, this is what would happen on every activation/reactivation/upgrade.
360
+	 * NOTE: if we're in maintenance mode (which would be the case if we detect there are data
361
+	 * migration scripts that need to be run and a version change happens), enqueues core for database initialization,
362
+	 * so that it will be done when migrations are finished
363
+	 *
364
+	 * @param boolean $initialize_addons_too if true, we double-check addons' database tables etc too;
365
+	 * @param boolean $verify_schema         if true will re-check the database tables have the correct schema.
366
+	 *                                       This is a resource-intensive job
367
+	 *                                       so we prefer to only do it when necessary
368
+	 * @return void
369
+	 */
370
+	public function initialize_db_if_no_migrations_required($initialize_addons_too = false, $verify_schema = true)
371
+	{
372
+		$request_type = $this->detect_req_type();
373
+		//only initialize system if we're not in maintenance mode.
374
+		if (EE_Maintenance_Mode::instance()->level() != EE_Maintenance_Mode::level_2_complete_maintenance) {
375
+			update_option('ee_flush_rewrite_rules', true);
376
+			if ($verify_schema) {
377
+				EEH_Activation::initialize_db_and_folders();
378
+			}
379
+			EEH_Activation::initialize_db_content();
380
+			EEH_Activation::system_initialization();
381
+			if ($initialize_addons_too) {
382
+				$this->initialize_addons();
383
+			}
384
+		} else {
385
+			EE_Data_Migration_Manager::instance()->enqueue_db_initialization_for('Core');
386
+		}
387
+		if ($request_type === EE_System::req_type_new_activation
388
+			|| $request_type === EE_System::req_type_reactivation
389
+			|| (
390
+				$request_type === EE_System::req_type_upgrade
391
+				&& $this->is_major_version_change()
392
+			)
393
+		) {
394
+			add_action('AHEE__EE_System__initialize_last', array($this, 'redirect_to_about_ee'), 9);
395
+		}
396
+	}
397
+
398
+
399
+
400
+	/**
401
+	 * Initializes the db for all registered addons
402
+	 */
403
+	public function initialize_addons()
404
+	{
405
+		//foreach registered addon, make sure its db is up-to-date too
406
+		foreach ($this->registry->addons as $addon) {
407
+			$addon->initialize_db_if_no_migrations_required();
408
+		}
409
+	}
410
+
411
+
412
+
413
+	/**
414
+	 * Adds the current code version to the saved wp option which stores a list of all ee versions ever installed.
415
+	 *
416
+	 * @param    array  $version_history
417
+	 * @param    string $current_version_to_add version to be added to the version history
418
+	 * @return    boolean success as to whether or not this option was changed
419
+	 */
420
+	public function update_list_of_installed_versions($version_history = null, $current_version_to_add = null)
421
+	{
422
+		if ( ! $version_history) {
423
+			$version_history = $this->fix_espresso_db_upgrade_option($version_history);
424
+		}
425
+		if ($current_version_to_add == null) {
426
+			$current_version_to_add = espresso_version();
427
+		}
428
+		$version_history[$current_version_to_add][] = date('Y-m-d H:i:s', time());
429
+		// re-save
430
+		return update_option('espresso_db_update', $version_history);
431
+	}
432
+
433
+
434
+
435
+	/**
436
+	 * Detects if the current version indicated in the has existed in the list of
437
+	 * previously-installed versions of EE (espresso_db_update). Does NOT modify it (ie, no side-effect)
438
+	 *
439
+	 * @param array $espresso_db_update array from the wp option stored under the name 'espresso_db_update'.
440
+	 *                                  If not supplied, fetches it from the options table.
441
+	 *                                  Also, caches its result so later parts of the code can also know whether
442
+	 *                                  there's been an update or not. This way we can add the current version to
443
+	 *                                  espresso_db_update, but still know if this is a new install or not
444
+	 * @return int one of the constants on EE_System::req_type_
445
+	 */
446
+	public function detect_req_type($espresso_db_update = null)
447
+	{
448
+		if ($this->_req_type === null) {
449
+			$espresso_db_update = ! empty($espresso_db_update) ? $espresso_db_update
450
+				: $this->fix_espresso_db_upgrade_option();
451
+			$this->_req_type = $this->detect_req_type_given_activation_history($espresso_db_update,
452
+				'ee_espresso_activation', espresso_version());
453
+			$this->_major_version_change = $this->_detect_major_version_change($espresso_db_update);
454
+		}
455
+		return $this->_req_type;
456
+	}
457
+
458
+
459
+
460
+	/**
461
+	 * Returns whether or not there was a non-micro version change (ie, change in either
462
+	 * the first or second number in the version. Eg 4.9.0.rc.001 to 4.10.0.rc.000,
463
+	 * but not 4.9.0.rc.0001 to 4.9.1.rc.0001
464
+	 *
465
+	 * @param $activation_history
466
+	 * @return bool
467
+	 */
468
+	protected function _detect_major_version_change($activation_history)
469
+	{
470
+		$previous_version = EE_System::_get_most_recently_active_version_from_activation_history($activation_history);
471
+		$previous_version_parts = explode('.', $previous_version);
472
+		$current_version_parts = explode('.', espresso_version());
473
+		return isset($previous_version_parts[0], $previous_version_parts[1], $current_version_parts[0], $current_version_parts[1])
474
+			   && ($previous_version_parts[0] !== $current_version_parts[0]
475
+				   || $previous_version_parts[1] !== $current_version_parts[1]
476
+			   );
477
+	}
478
+
479
+
480
+
481
+	/**
482
+	 * Returns true if either the major or minor version of EE changed during this request.
483
+	 * Eg 4.9.0.rc.001 to 4.10.0.rc.000, but not 4.9.0.rc.0001 to 4.9.1.rc.0001
484
+	 *
485
+	 * @return bool
486
+	 */
487
+	public function is_major_version_change()
488
+	{
489
+		return $this->_major_version_change;
490
+	}
491
+
492
+
493
+
494
+	/**
495
+	 * Determines the request type for any ee addon, given three piece of info: the current array of activation
496
+	 * histories (for core that' 'espresso_db_update' wp option); the name of the wordpress option which is temporarily
497
+	 * set upon activation of the plugin (for core it's 'ee_espresso_activation'); and the version that this plugin was
498
+	 * just activated to (for core that will always be espresso_version())
499
+	 *
500
+	 * @param array  $activation_history_for_addon     the option's value which stores the activation history for this
501
+	 *                                                 ee plugin. for core that's 'espresso_db_update'
502
+	 * @param string $activation_indicator_option_name the name of the wordpress option that is temporarily set to
503
+	 *                                                 indicate that this plugin was just activated
504
+	 * @param string $version_to_upgrade_to            the version that was just upgraded to (for core that will be
505
+	 *                                                 espresso_version())
506
+	 * @return int one of the constants on EE_System::req_type_*
507
+	 */
508
+	public static function detect_req_type_given_activation_history(
509
+		$activation_history_for_addon,
510
+		$activation_indicator_option_name,
511
+		$version_to_upgrade_to
512
+	) {
513
+		$version_is_higher = self::_new_version_is_higher($activation_history_for_addon, $version_to_upgrade_to);
514
+		if ($activation_history_for_addon) {
515
+			//it exists, so this isn't a completely new install
516
+			//check if this version already in that list of previously installed versions
517
+			if ( ! isset($activation_history_for_addon[$version_to_upgrade_to])) {
518
+				//it a version we haven't seen before
519
+				if ($version_is_higher === 1) {
520
+					$req_type = EE_System::req_type_upgrade;
521
+				} else {
522
+					$req_type = EE_System::req_type_downgrade;
523
+				}
524
+				delete_option($activation_indicator_option_name);
525
+			} else {
526
+				// its not an update. maybe a reactivation?
527
+				if (get_option($activation_indicator_option_name, false)) {
528
+					if ($version_is_higher === -1) {
529
+						$req_type = EE_System::req_type_downgrade;
530
+					} elseif ($version_is_higher === 0) {
531
+						//we've seen this version before, but it's an activation. must be a reactivation
532
+						$req_type = EE_System::req_type_reactivation;
533
+					} else {//$version_is_higher === 1
534
+						$req_type = EE_System::req_type_upgrade;
535
+					}
536
+					delete_option($activation_indicator_option_name);
537
+				} else {
538
+					//we've seen this version before and the activation indicate doesn't show it was just activated
539
+					if ($version_is_higher === -1) {
540
+						$req_type = EE_System::req_type_downgrade;
541
+					} elseif ($version_is_higher === 0) {
542
+						//we've seen this version before and it's not an activation. its normal request
543
+						$req_type = EE_System::req_type_normal;
544
+					} else {//$version_is_higher === 1
545
+						$req_type = EE_System::req_type_upgrade;
546
+					}
547
+				}
548
+			}
549
+		} else {
550
+			//brand new install
551
+			$req_type = EE_System::req_type_new_activation;
552
+			delete_option($activation_indicator_option_name);
553
+		}
554
+		return $req_type;
555
+	}
556
+
557
+
558
+
559
+	/**
560
+	 * Detects if the $version_to_upgrade_to is higher than the most recent version in
561
+	 * the $activation_history_for_addon
562
+	 *
563
+	 * @param array  $activation_history_for_addon (keys are versions, values are arrays of times activated,
564
+	 *                                             sometimes containing 'unknown-date'
565
+	 * @param string $version_to_upgrade_to        (current version)
566
+	 * @return int results of version_compare( $version_to_upgrade_to, $most_recently_active_version ).
567
+	 *                                             ie, -1 if $version_to_upgrade_to is LOWER (downgrade);
568
+	 *                                             0 if $version_to_upgrade_to MATCHES (reactivation or normal request);
569
+	 *                                             1 if $version_to_upgrade_to is HIGHER (upgrade) ;
570
+	 */
571
+	protected static function _new_version_is_higher($activation_history_for_addon, $version_to_upgrade_to)
572
+	{
573
+		//find the most recently-activated version
574
+		$most_recently_active_version = EE_System::_get_most_recently_active_version_from_activation_history($activation_history_for_addon);
575
+		return version_compare($version_to_upgrade_to, $most_recently_active_version);
576
+	}
577
+
578
+
579
+
580
+	/**
581
+	 * Gets the most recently active version listed in the activation history,
582
+	 * and if none are found (ie, it's a brand new install) returns '0.0.0.dev.000'.
583
+	 *
584
+	 * @param array $activation_history  (keys are versions, values are arrays of times activated,
585
+	 *                                   sometimes containing 'unknown-date'
586
+	 * @return string
587
+	 */
588
+	protected static function _get_most_recently_active_version_from_activation_history($activation_history)
589
+	{
590
+		$most_recently_active_version_activation = '1970-01-01 00:00:00';
591
+		$most_recently_active_version = '0.0.0.dev.000';
592
+		if (is_array($activation_history)) {
593
+			foreach ($activation_history as $version => $times_activated) {
594
+				//check there is a record of when this version was activated. Otherwise,
595
+				//mark it as unknown
596
+				if ( ! $times_activated) {
597
+					$times_activated = array('unknown-date');
598
+				}
599
+				if (is_string($times_activated)) {
600
+					$times_activated = array($times_activated);
601
+				}
602
+				foreach ($times_activated as $an_activation) {
603
+					if ($an_activation != 'unknown-date' && $an_activation > $most_recently_active_version_activation) {
604
+						$most_recently_active_version = $version;
605
+						$most_recently_active_version_activation = $an_activation == 'unknown-date'
606
+							? '1970-01-01 00:00:00' : $an_activation;
607
+					}
608
+				}
609
+			}
610
+		}
611
+		return $most_recently_active_version;
612
+	}
613
+
614
+
615
+
616
+	/**
617
+	 * This redirects to the about EE page after activation
618
+	 *
619
+	 * @return void
620
+	 */
621
+	public function redirect_to_about_ee()
622
+	{
623
+		$notices = EE_Error::get_notices(false);
624
+		//if current user is an admin and it's not an ajax or rest request
625
+		if (
626
+			! (defined('DOING_AJAX') && DOING_AJAX)
627
+			&& ! (defined('REST_REQUEST') && REST_REQUEST)
628
+			&& ! isset($notices['errors'])
629
+			&& apply_filters(
630
+				'FHEE__EE_System__redirect_to_about_ee__do_redirect',
631
+				$this->registry->CAP->current_user_can('manage_options', 'espresso_about_default')
632
+			)
633
+		) {
634
+			$query_params = array('page' => 'espresso_about');
635
+			if (EE_System::instance()->detect_req_type() == EE_System::req_type_new_activation) {
636
+				$query_params['new_activation'] = true;
637
+			}
638
+			if (EE_System::instance()->detect_req_type() == EE_System::req_type_reactivation) {
639
+				$query_params['reactivation'] = true;
640
+			}
641
+			$url = add_query_arg($query_params, admin_url('admin.php'));
642
+			wp_safe_redirect($url);
643
+			exit();
644
+		}
645
+	}
646
+
647
+
648
+
649
+	/**
650
+	 * load_core_configuration
651
+	 * this is hooked into 'AHEE__EE_Bootstrap__load_core_configuration'
652
+	 * which runs during the WP 'plugins_loaded' action at priority 5
653
+	 *
654
+	 * @return void
655
+	 */
656
+	public function load_core_configuration()
657
+	{
658
+		do_action('AHEE__EE_System__load_core_configuration__begin', $this);
659
+		$this->registry->load_core('EE_Load_Textdomain');
660
+		//load textdomain
661
+		EE_Load_Textdomain::load_textdomain();
662
+		// load and setup EE_Config and EE_Network_Config
663
+		$this->registry->load_core('Config');
664
+		$this->registry->load_core('Network_Config');
665
+		// setup autoloaders
666
+		// enable logging?
667
+		if ($this->registry->CFG->admin->use_full_logging) {
668
+			$this->registry->load_core('Log');
669
+		}
670
+		// check for activation errors
671
+		$activation_errors = get_option('ee_plugin_activation_errors', false);
672
+		if ($activation_errors) {
673
+			EE_Error::add_error($activation_errors, __FILE__, __FUNCTION__, __LINE__);
674
+			update_option('ee_plugin_activation_errors', false);
675
+		}
676
+		// get model names
677
+		$this->_parse_model_names();
678
+		//load caf stuff a chance to play during the activation process too.
679
+		$this->_maybe_brew_regular();
680
+		do_action('AHEE__EE_System__load_core_configuration__complete', $this);
681
+	}
682
+
683
+
684
+
685
+	/**
686
+	 * cycles through all of the models/*.model.php files, and assembles an array of model names
687
+	 *
688
+	 * @return void
689
+	 */
690
+	private function _parse_model_names()
691
+	{
692
+		//get all the files in the EE_MODELS folder that end in .model.php
693
+		$models = glob(EE_MODELS . '*.model.php');
694
+		$model_names = array();
695
+		$non_abstract_db_models = array();
696
+		foreach ($models as $model) {
697
+			// get model classname
698
+			$classname = EEH_File::get_classname_from_filepath_with_standard_filename($model);
699
+			$short_name = str_replace('EEM_', '', $classname);
700
+			$reflectionClass = new ReflectionClass($classname);
701
+			if ($reflectionClass->isSubclassOf('EEM_Base') && ! $reflectionClass->isAbstract()) {
702
+				$non_abstract_db_models[$short_name] = $classname;
703
+			}
704
+			$model_names[$short_name] = $classname;
705
+		}
706
+		$this->registry->models = apply_filters('FHEE__EE_System__parse_model_names', $model_names);
707
+		$this->registry->non_abstract_db_models = apply_filters('FHEE__EE_System__parse_implemented_model_names',
708
+			$non_abstract_db_models);
709
+	}
710
+
711
+
712
+
713
+	/**
714
+	 * The purpose of this method is to simply check for a file named "caffeinated/brewing_regular.php" for any hooks
715
+	 * that need to be setup before our EE_System launches.
716
+	 *
717
+	 * @return void
718
+	 */
719
+	private function _maybe_brew_regular()
720
+	{
721
+		if (( ! defined('EE_DECAF') || EE_DECAF !== true) && is_readable(EE_CAFF_PATH . 'brewing_regular.php')) {
722
+			require_once EE_CAFF_PATH . 'brewing_regular.php';
723
+		}
724
+	}
725
+
726
+
727
+
728
+	/**
729
+	 * register_shortcodes_modules_and_widgets
730
+	 * generate lists of shortcodes and modules, then verify paths and classes
731
+	 * This is hooked into 'AHEE__EE_Bootstrap__register_shortcodes_modules_and_widgets'
732
+	 * which runs during the WP 'plugins_loaded' action at priority 7
733
+	 *
734
+	 * @access public
735
+	 * @return void
736
+	 */
737
+	public function register_shortcodes_modules_and_widgets()
738
+	{
739
+		try {
740
+			// load, register, and add shortcodes the new way
741
+			new ShortcodesManager(
742
+			// and the old way, but we'll put it under control of the new system
743
+				EE_Config::getLegacyShortcodesManager()
744
+			);
745
+		} catch (Exception $exception) {
746
+			new ExceptionStackTraceDisplay($exception);
747
+		}
748
+		do_action('AHEE__EE_System__register_shortcodes_modules_and_widgets');
749
+		// check for addons using old hookpoint
750
+		if (has_action('AHEE__EE_System__register_shortcodes_modules_and_addons')) {
751
+			$this->_incompatible_addon_error();
752
+		}
753
+	}
754
+
755
+
756
+
757
+	/**
758
+	 * _incompatible_addon_error
759
+	 *
760
+	 * @access public
761
+	 * @return void
762
+	 */
763
+	private function _incompatible_addon_error()
764
+	{
765
+		// get array of classes hooking into here
766
+		$class_names = EEH_Class_Tools::get_class_names_for_all_callbacks_on_hook('AHEE__EE_System__register_shortcodes_modules_and_addons');
767
+		if ( ! empty($class_names)) {
768
+			$msg = __('The following plugins, addons, or modules appear to be incompatible with this version of Event Espresso and were automatically deactivated to avoid fatal errors:',
769
+				'event_espresso');
770
+			$msg .= '<ul>';
771
+			foreach ($class_names as $class_name) {
772
+				$msg .= '<li><b>Event Espresso - ' . str_replace(array('EE_', 'EEM_', 'EED_', 'EES_', 'EEW_'), '',
773
+						$class_name) . '</b></li>';
774
+			}
775
+			$msg .= '</ul>';
776
+			$msg .= __('Compatibility issues can be avoided and/or resolved by keeping addons and plugins updated to the latest version.',
777
+				'event_espresso');
778
+			// save list of incompatible addons to wp-options for later use
779
+			add_option('ee_incompatible_addons', $class_names, '', 'no');
780
+			if (is_admin()) {
781
+				EE_Error::add_error($msg, __FILE__, __FUNCTION__, __LINE__);
782
+			}
783
+		}
784
+	}
785
+
786
+
787
+
788
+	/**
789
+	 * brew_espresso
790
+	 * begins the process of setting hooks for initializing EE in the correct order
791
+	 * This is happening on the 'AHEE__EE_Bootstrap__brew_espresso' hookpoint
792
+	 * which runs during the WP 'plugins_loaded' action at priority 9
793
+	 *
794
+	 * @return void
795
+	 */
796
+	public function brew_espresso()
797
+	{
798
+		do_action('AHEE__EE_System__brew_espresso__begin', $this);
799
+		// load some final core systems
800
+		add_action('init', array($this, 'set_hooks_for_core'), 1);
801
+		add_action('init', array($this, 'perform_activations_upgrades_and_migrations'), 3);
802
+		add_action('init', array($this, 'load_CPTs_and_session'), 5);
803
+		add_action('init', array($this, 'load_controllers'), 7);
804
+		add_action('init', array($this, 'core_loaded_and_ready'), 9);
805
+		add_action('init', array($this, 'initialize'), 10);
806
+		add_action('init', array($this, 'initialize_last'), 100);
807
+		add_action('admin_bar_menu', array($this, 'espresso_toolbar_items'), 100);
808
+		if (is_admin() && apply_filters('FHEE__EE_System__brew_espresso__load_pue', true)) {
809
+			// pew pew pew
810
+			$this->registry->load_core('PUE');
811
+			do_action('AHEE__EE_System__brew_espresso__after_pue_init');
812
+		}
813
+		do_action('AHEE__EE_System__brew_espresso__complete', $this);
814
+	}
815
+
816
+
817
+
818
+	/**
819
+	 *    set_hooks_for_core
820
+	 *
821
+	 * @access public
822
+	 * @return    void
823
+	 */
824
+	public function set_hooks_for_core()
825
+	{
826
+		$this->_deactivate_incompatible_addons();
827
+		do_action('AHEE__EE_System__set_hooks_for_core');
828
+	}
829
+
830
+
831
+
832
+	/**
833
+	 * Using the information gathered in EE_System::_incompatible_addon_error,
834
+	 * deactivates any addons considered incompatible with the current version of EE
835
+	 */
836
+	private function _deactivate_incompatible_addons()
837
+	{
838
+		$incompatible_addons = get_option('ee_incompatible_addons', array());
839
+		if ( ! empty($incompatible_addons)) {
840
+			$active_plugins = get_option('active_plugins', array());
841
+			foreach ($active_plugins as $active_plugin) {
842
+				foreach ($incompatible_addons as $incompatible_addon) {
843
+					if (strpos($active_plugin, $incompatible_addon) !== false) {
844
+						unset($_GET['activate']);
845
+						espresso_deactivate_plugin($active_plugin);
846
+					}
847
+				}
848
+			}
849
+		}
850
+	}
851
+
852
+
853
+
854
+	/**
855
+	 *    perform_activations_upgrades_and_migrations
856
+	 *
857
+	 * @access public
858
+	 * @return    void
859
+	 */
860
+	public function perform_activations_upgrades_and_migrations()
861
+	{
862
+		//first check if we had previously attempted to setup EE's directories but failed
863
+		if (EEH_Activation::upload_directories_incomplete()) {
864
+			EEH_Activation::create_upload_directories();
865
+		}
866
+		do_action('AHEE__EE_System__perform_activations_upgrades_and_migrations');
867
+	}
868
+
869
+
870
+
871
+	/**
872
+	 *    load_CPTs_and_session
873
+	 *
874
+	 * @access public
875
+	 * @return    void
876
+	 */
877
+	public function load_CPTs_and_session()
878
+	{
879
+		do_action('AHEE__EE_System__load_CPTs_and_session__start');
880
+		// register Custom Post Types
881
+		$this->registry->load_core('Register_CPTs');
882
+		do_action('AHEE__EE_System__load_CPTs_and_session__complete');
883
+	}
884
+
885
+
886
+
887
+	/**
888
+	 * load_controllers
889
+	 * this is the best place to load any additional controllers that needs access to EE core.
890
+	 * it is expected that all basic core EE systems, that are not dependant on the current request are loaded at this
891
+	 * time
892
+	 *
893
+	 * @access public
894
+	 * @return void
895
+	 */
896
+	public function load_controllers()
897
+	{
898
+		do_action('AHEE__EE_System__load_controllers__start');
899
+		// let's get it started
900
+		if ( ! is_admin() && ! EE_Maintenance_Mode::instance()->level()) {
901
+			do_action('AHEE__EE_System__load_controllers__load_front_controllers');
902
+			$this->registry->load_core('Front_Controller');
903
+		} else if ( ! EE_FRONT_AJAX) {
904
+			do_action('AHEE__EE_System__load_controllers__load_admin_controllers');
905
+			EE_Registry::instance()->load_core('Admin');
906
+		}
907
+		do_action('AHEE__EE_System__load_controllers__complete');
908
+	}
909
+
910
+
911
+
912
+	/**
913
+	 * core_loaded_and_ready
914
+	 * all of the basic EE core should be loaded at this point and available regardless of M-Mode
915
+	 *
916
+	 * @access public
917
+	 * @return void
918
+	 */
919
+	public function core_loaded_and_ready()
920
+	{
921
+		$this->registry->load_core('Session');
922
+		do_action('AHEE__EE_System__core_loaded_and_ready');
923
+		// load_espresso_template_tags
924
+		if (is_readable(EE_PUBLIC . 'template_tags.php')) {
925
+			require_once(EE_PUBLIC . 'template_tags.php');
926
+		}
927
+		do_action('AHEE__EE_System__set_hooks_for_shortcodes_modules_and_addons');
928
+		$this->registry->create('EventEspresso\core\services\assets\Registry', array(), true);
929
+	}
930
+
931
+
932
+
933
+	/**
934
+	 * initialize
935
+	 * this is the best place to begin initializing client code
936
+	 *
937
+	 * @access public
938
+	 * @return void
939
+	 */
940
+	public function initialize()
941
+	{
942
+		do_action('AHEE__EE_System__initialize');
943
+	}
944
+
945
+
946
+
947
+	/**
948
+	 * initialize_last
949
+	 * this is run really late during the WP init hookpoint, and ensures that mostly everything else that needs to
950
+	 * initialize has done so
951
+	 *
952
+	 * @access public
953
+	 * @return void
954
+	 */
955
+	public function initialize_last()
956
+	{
957
+		do_action('AHEE__EE_System__initialize_last');
958
+	}
959
+
960
+
961
+
962
+	/**
963
+	 * set_hooks_for_shortcodes_modules_and_addons
964
+	 * this is the best place for other systems to set callbacks for hooking into other parts of EE
965
+	 * this happens at the very beginning of the wp_loaded hookpoint
966
+	 *
967
+	 * @access public
968
+	 * @return void
969
+	 */
970
+	public function set_hooks_for_shortcodes_modules_and_addons()
971
+	{
972
+		//		do_action( 'AHEE__EE_System__set_hooks_for_shortcodes_modules_and_addons' );
973
+	}
974
+
975
+
976
+
977
+	/**
978
+	 * do_not_cache
979
+	 * sets no cache headers and defines no cache constants for WP plugins
980
+	 *
981
+	 * @access public
982
+	 * @return void
983
+	 */
984
+	public static function do_not_cache()
985
+	{
986
+		// set no cache constants
987
+		if ( ! defined('DONOTCACHEPAGE')) {
988
+			define('DONOTCACHEPAGE', true);
989
+		}
990
+		if ( ! defined('DONOTCACHCEOBJECT')) {
991
+			define('DONOTCACHCEOBJECT', true);
992
+		}
993
+		if ( ! defined('DONOTCACHEDB')) {
994
+			define('DONOTCACHEDB', true);
995
+		}
996
+		// add no cache headers
997
+		add_action('send_headers', array('EE_System', 'nocache_headers'), 10);
998
+		// plus a little extra for nginx and Google Chrome
999
+		add_filter('nocache_headers', array('EE_System', 'extra_nocache_headers'), 10, 1);
1000
+		// prevent browsers from prefetching of the rel='next' link, because it may contain content that interferes with the registration process
1001
+		remove_action('wp_head', 'adjacent_posts_rel_link_wp_head');
1002
+	}
1003
+
1004
+
1005
+
1006
+	/**
1007
+	 *    extra_nocache_headers
1008
+	 *
1009
+	 * @access    public
1010
+	 * @param $headers
1011
+	 * @return    array
1012
+	 */
1013
+	public static function extra_nocache_headers($headers)
1014
+	{
1015
+		// for NGINX
1016
+		$headers['X-Accel-Expires'] = 0;
1017
+		// plus extra for Google Chrome since it doesn't seem to respect "no-cache", but WILL respect "no-store"
1018
+		$headers['Cache-Control'] = 'no-store, no-cache, must-revalidate, max-age=0';
1019
+		return $headers;
1020
+	}
1021
+
1022
+
1023
+
1024
+	/**
1025
+	 *    nocache_headers
1026
+	 *
1027
+	 * @access    public
1028
+	 * @return    void
1029
+	 */
1030
+	public static function nocache_headers()
1031
+	{
1032
+		nocache_headers();
1033
+	}
1034
+
1035
+
1036
+
1037
+	/**
1038
+	 *    espresso_toolbar_items
1039
+	 *
1040
+	 * @access public
1041
+	 * @param  WP_Admin_Bar $admin_bar
1042
+	 * @return void
1043
+	 */
1044
+	public function espresso_toolbar_items(WP_Admin_Bar $admin_bar)
1045
+	{
1046
+		// if in full M-Mode, or its an AJAX request, or user is NOT an admin
1047
+		if (EE_Maintenance_Mode::instance()->level() == EE_Maintenance_Mode::level_2_complete_maintenance
1048
+			|| defined('DOING_AJAX')
1049
+			|| ! $this->registry->CAP->current_user_can('ee_read_ee', 'ee_admin_bar_menu_top_level')
1050
+		) {
1051
+			return;
1052
+		}
1053
+		do_action('AHEE_log', __FILE__, __FUNCTION__, '');
1054
+		$menu_class = 'espresso_menu_item_class';
1055
+		//we don't use the constants EVENTS_ADMIN_URL or REG_ADMIN_URL
1056
+		//because they're only defined in each of their respective constructors
1057
+		//and this might be a frontend request, in which case they aren't available
1058
+		$events_admin_url = admin_url("admin.php?page=espresso_events");
1059
+		$reg_admin_url = admin_url("admin.php?page=espresso_registrations");
1060
+		$extensions_admin_url = admin_url("admin.php?page=espresso_packages");
1061
+		//Top Level
1062
+		$admin_bar->add_menu(array(
1063
+			'id'    => 'espresso-toolbar',
1064
+			'title' => '<span class="ee-icon ee-icon-ee-cup-thick ee-icon-size-20"></span><span class="ab-label">'
1065
+					   . _x('Event Espresso', 'admin bar menu group label', 'event_espresso')
1066
+					   . '</span>',
1067
+			'href'  => $events_admin_url,
1068
+			'meta'  => array(
1069
+				'title' => __('Event Espresso', 'event_espresso'),
1070
+				'class' => $menu_class . 'first',
1071
+			),
1072
+		));
1073
+		//Events
1074
+		if ($this->registry->CAP->current_user_can('ee_read_events', 'ee_admin_bar_menu_espresso-toolbar-events')) {
1075
+			$admin_bar->add_menu(array(
1076
+				'id'     => 'espresso-toolbar-events',
1077
+				'parent' => 'espresso-toolbar',
1078
+				'title'  => __('Events', 'event_espresso'),
1079
+				'href'   => $events_admin_url,
1080
+				'meta'   => array(
1081
+					'title'  => __('Events', 'event_espresso'),
1082
+					'target' => '',
1083
+					'class'  => $menu_class,
1084
+				),
1085
+			));
1086
+		}
1087
+		if ($this->registry->CAP->current_user_can('ee_edit_events', 'ee_admin_bar_menu_espresso-toolbar-events-new')) {
1088
+			//Events Add New
1089
+			$admin_bar->add_menu(array(
1090
+				'id'     => 'espresso-toolbar-events-new',
1091
+				'parent' => 'espresso-toolbar-events',
1092
+				'title'  => __('Add New', 'event_espresso'),
1093
+				'href'   => EEH_URL::add_query_args_and_nonce(array('action' => 'create_new'), $events_admin_url),
1094
+				'meta'   => array(
1095
+					'title'  => __('Add New', 'event_espresso'),
1096
+					'target' => '',
1097
+					'class'  => $menu_class,
1098
+				),
1099
+			));
1100
+		}
1101
+		if (is_single() && (get_post_type() == 'espresso_events')) {
1102
+			//Current post
1103
+			global $post;
1104
+			if ($this->registry->CAP->current_user_can('ee_edit_event',
1105
+				'ee_admin_bar_menu_espresso-toolbar-events-edit', $post->ID)
1106
+			) {
1107
+				//Events Edit Current Event
1108
+				$admin_bar->add_menu(array(
1109
+					'id'     => 'espresso-toolbar-events-edit',
1110
+					'parent' => 'espresso-toolbar-events',
1111
+					'title'  => __('Edit Event', 'event_espresso'),
1112
+					'href'   => EEH_URL::add_query_args_and_nonce(array('action' => 'edit', 'post' => $post->ID),
1113
+						$events_admin_url),
1114
+					'meta'   => array(
1115
+						'title'  => __('Edit Event', 'event_espresso'),
1116
+						'target' => '',
1117
+						'class'  => $menu_class,
1118
+					),
1119
+				));
1120
+			}
1121
+		}
1122
+		//Events View
1123
+		if ($this->registry->CAP->current_user_can('ee_read_events',
1124
+			'ee_admin_bar_menu_espresso-toolbar-events-view')
1125
+		) {
1126
+			$admin_bar->add_menu(array(
1127
+				'id'     => 'espresso-toolbar-events-view',
1128
+				'parent' => 'espresso-toolbar-events',
1129
+				'title'  => __('View', 'event_espresso'),
1130
+				'href'   => $events_admin_url,
1131
+				'meta'   => array(
1132
+					'title'  => __('View', 'event_espresso'),
1133
+					'target' => '',
1134
+					'class'  => $menu_class,
1135
+				),
1136
+			));
1137
+		}
1138
+		if ($this->registry->CAP->current_user_can('ee_read_events', 'ee_admin_bar_menu_espresso-toolbar-events-all')) {
1139
+			//Events View All
1140
+			$admin_bar->add_menu(array(
1141
+				'id'     => 'espresso-toolbar-events-all',
1142
+				'parent' => 'espresso-toolbar-events-view',
1143
+				'title'  => __('All', 'event_espresso'),
1144
+				'href'   => $events_admin_url,
1145
+				'meta'   => array(
1146
+					'title'  => __('All', 'event_espresso'),
1147
+					'target' => '',
1148
+					'class'  => $menu_class,
1149
+				),
1150
+			));
1151
+		}
1152
+		if ($this->registry->CAP->current_user_can('ee_read_events',
1153
+			'ee_admin_bar_menu_espresso-toolbar-events-today')
1154
+		) {
1155
+			//Events View Today
1156
+			$admin_bar->add_menu(array(
1157
+				'id'     => 'espresso-toolbar-events-today',
1158
+				'parent' => 'espresso-toolbar-events-view',
1159
+				'title'  => __('Today', 'event_espresso'),
1160
+				'href'   => EEH_URL::add_query_args_and_nonce(array('action' => 'default', 'status' => 'today'),
1161
+					$events_admin_url),
1162
+				'meta'   => array(
1163
+					'title'  => __('Today', 'event_espresso'),
1164
+					'target' => '',
1165
+					'class'  => $menu_class,
1166
+				),
1167
+			));
1168
+		}
1169
+		if ($this->registry->CAP->current_user_can('ee_read_events',
1170
+			'ee_admin_bar_menu_espresso-toolbar-events-month')
1171
+		) {
1172
+			//Events View This Month
1173
+			$admin_bar->add_menu(array(
1174
+				'id'     => 'espresso-toolbar-events-month',
1175
+				'parent' => 'espresso-toolbar-events-view',
1176
+				'title'  => __('This Month', 'event_espresso'),
1177
+				'href'   => EEH_URL::add_query_args_and_nonce(array('action' => 'default', 'status' => 'month'),
1178
+					$events_admin_url),
1179
+				'meta'   => array(
1180
+					'title'  => __('This Month', 'event_espresso'),
1181
+					'target' => '',
1182
+					'class'  => $menu_class,
1183
+				),
1184
+			));
1185
+		}
1186
+		//Registration Overview
1187
+		if ($this->registry->CAP->current_user_can('ee_read_registrations',
1188
+			'ee_admin_bar_menu_espresso-toolbar-registrations')
1189
+		) {
1190
+			$admin_bar->add_menu(array(
1191
+				'id'     => 'espresso-toolbar-registrations',
1192
+				'parent' => 'espresso-toolbar',
1193
+				'title'  => __('Registrations', 'event_espresso'),
1194
+				'href'   => $reg_admin_url,
1195
+				'meta'   => array(
1196
+					'title'  => __('Registrations', 'event_espresso'),
1197
+					'target' => '',
1198
+					'class'  => $menu_class,
1199
+				),
1200
+			));
1201
+		}
1202
+		//Registration Overview Today
1203
+		if ($this->registry->CAP->current_user_can('ee_read_registrations',
1204
+			'ee_admin_bar_menu_espresso-toolbar-registrations-today')
1205
+		) {
1206
+			$admin_bar->add_menu(array(
1207
+				'id'     => 'espresso-toolbar-registrations-today',
1208
+				'parent' => 'espresso-toolbar-registrations',
1209
+				'title'  => __('Today', 'event_espresso'),
1210
+				'href'   => EEH_URL::add_query_args_and_nonce(array('action' => 'default', 'status' => 'today'),
1211
+					$reg_admin_url),
1212
+				'meta'   => array(
1213
+					'title'  => __('Today', 'event_espresso'),
1214
+					'target' => '',
1215
+					'class'  => $menu_class,
1216
+				),
1217
+			));
1218
+		}
1219
+		//Registration Overview Today Completed
1220
+		if ($this->registry->CAP->current_user_can('ee_read_registrations',
1221
+			'ee_admin_bar_menu_espresso-toolbar-registrations-today-approved')
1222
+		) {
1223
+			$admin_bar->add_menu(array(
1224
+				'id'     => 'espresso-toolbar-registrations-today-approved',
1225
+				'parent' => 'espresso-toolbar-registrations-today',
1226
+				'title'  => __('Approved', 'event_espresso'),
1227
+				'href'   => EEH_URL::add_query_args_and_nonce(array(
1228
+					'action'      => 'default',
1229
+					'status'      => 'today',
1230
+					'_reg_status' => EEM_Registration::status_id_approved,
1231
+				), $reg_admin_url),
1232
+				'meta'   => array(
1233
+					'title'  => __('Approved', 'event_espresso'),
1234
+					'target' => '',
1235
+					'class'  => $menu_class,
1236
+				),
1237
+			));
1238
+		}
1239
+		//Registration Overview Today Pending\
1240
+		if ($this->registry->CAP->current_user_can('ee_read_registrations',
1241
+			'ee_admin_bar_menu_espresso-toolbar-registrations-today-pending')
1242
+		) {
1243
+			$admin_bar->add_menu(array(
1244
+				'id'     => 'espresso-toolbar-registrations-today-pending',
1245
+				'parent' => 'espresso-toolbar-registrations-today',
1246
+				'title'  => __('Pending', 'event_espresso'),
1247
+				'href'   => EEH_URL::add_query_args_and_nonce(array(
1248
+					'action'     => 'default',
1249
+					'status'     => 'today',
1250
+					'reg_status' => EEM_Registration::status_id_pending_payment,
1251
+				), $reg_admin_url),
1252
+				'meta'   => array(
1253
+					'title'  => __('Pending Payment', 'event_espresso'),
1254
+					'target' => '',
1255
+					'class'  => $menu_class,
1256
+				),
1257
+			));
1258
+		}
1259
+		//Registration Overview Today Incomplete
1260
+		if ($this->registry->CAP->current_user_can('ee_read_registrations',
1261
+			'ee_admin_bar_menu_espresso-toolbar-registrations-today-not-approved')
1262
+		) {
1263
+			$admin_bar->add_menu(array(
1264
+				'id'     => 'espresso-toolbar-registrations-today-not-approved',
1265
+				'parent' => 'espresso-toolbar-registrations-today',
1266
+				'title'  => __('Not Approved', 'event_espresso'),
1267
+				'href'   => EEH_URL::add_query_args_and_nonce(array(
1268
+					'action'      => 'default',
1269
+					'status'      => 'today',
1270
+					'_reg_status' => EEM_Registration::status_id_not_approved,
1271
+				), $reg_admin_url),
1272
+				'meta'   => array(
1273
+					'title'  => __('Not Approved', 'event_espresso'),
1274
+					'target' => '',
1275
+					'class'  => $menu_class,
1276
+				),
1277
+			));
1278
+		}
1279
+		//Registration Overview Today Incomplete
1280
+		if ($this->registry->CAP->current_user_can('ee_read_registrations',
1281
+			'ee_admin_bar_menu_espresso-toolbar-registrations-today-cancelled')
1282
+		) {
1283
+			$admin_bar->add_menu(array(
1284
+				'id'     => 'espresso-toolbar-registrations-today-cancelled',
1285
+				'parent' => 'espresso-toolbar-registrations-today',
1286
+				'title'  => __('Cancelled', 'event_espresso'),
1287
+				'href'   => EEH_URL::add_query_args_and_nonce(array(
1288
+					'action'      => 'default',
1289
+					'status'      => 'today',
1290
+					'_reg_status' => EEM_Registration::status_id_cancelled,
1291
+				), $reg_admin_url),
1292
+				'meta'   => array(
1293
+					'title'  => __('Cancelled', 'event_espresso'),
1294
+					'target' => '',
1295
+					'class'  => $menu_class,
1296
+				),
1297
+			));
1298
+		}
1299
+		//Registration Overview This Month
1300
+		if ($this->registry->CAP->current_user_can('ee_read_registrations',
1301
+			'ee_admin_bar_menu_espresso-toolbar-registrations-month')
1302
+		) {
1303
+			$admin_bar->add_menu(array(
1304
+				'id'     => 'espresso-toolbar-registrations-month',
1305
+				'parent' => 'espresso-toolbar-registrations',
1306
+				'title'  => __('This Month', 'event_espresso'),
1307
+				'href'   => EEH_URL::add_query_args_and_nonce(array('action' => 'default', 'status' => 'month'),
1308
+					$reg_admin_url),
1309
+				'meta'   => array(
1310
+					'title'  => __('This Month', 'event_espresso'),
1311
+					'target' => '',
1312
+					'class'  => $menu_class,
1313
+				),
1314
+			));
1315
+		}
1316
+		//Registration Overview This Month Approved
1317
+		if ($this->registry->CAP->current_user_can('ee_read_registrations',
1318
+			'ee_admin_bar_menu_espresso-toolbar-registrations-month-approved')
1319
+		) {
1320
+			$admin_bar->add_menu(array(
1321
+				'id'     => 'espresso-toolbar-registrations-month-approved',
1322
+				'parent' => 'espresso-toolbar-registrations-month',
1323
+				'title'  => __('Approved', 'event_espresso'),
1324
+				'href'   => EEH_URL::add_query_args_and_nonce(array(
1325
+					'action'      => 'default',
1326
+					'status'      => 'month',
1327
+					'_reg_status' => EEM_Registration::status_id_approved,
1328
+				), $reg_admin_url),
1329
+				'meta'   => array(
1330
+					'title'  => __('Approved', 'event_espresso'),
1331
+					'target' => '',
1332
+					'class'  => $menu_class,
1333
+				),
1334
+			));
1335
+		}
1336
+		//Registration Overview This Month Pending
1337
+		if ($this->registry->CAP->current_user_can('ee_read_registrations',
1338
+			'ee_admin_bar_menu_espresso-toolbar-registrations-month-pending')
1339
+		) {
1340
+			$admin_bar->add_menu(array(
1341
+				'id'     => 'espresso-toolbar-registrations-month-pending',
1342
+				'parent' => 'espresso-toolbar-registrations-month',
1343
+				'title'  => __('Pending', 'event_espresso'),
1344
+				'href'   => EEH_URL::add_query_args_and_nonce(array(
1345
+					'action'      => 'default',
1346
+					'status'      => 'month',
1347
+					'_reg_status' => EEM_Registration::status_id_pending_payment,
1348
+				), $reg_admin_url),
1349
+				'meta'   => array(
1350
+					'title'  => __('Pending', 'event_espresso'),
1351
+					'target' => '',
1352
+					'class'  => $menu_class,
1353
+				),
1354
+			));
1355
+		}
1356
+		//Registration Overview This Month Not Approved
1357
+		if ($this->registry->CAP->current_user_can('ee_read_registrations',
1358
+			'ee_admin_bar_menu_espresso-toolbar-registrations-month-not-approved')
1359
+		) {
1360
+			$admin_bar->add_menu(array(
1361
+				'id'     => 'espresso-toolbar-registrations-month-not-approved',
1362
+				'parent' => 'espresso-toolbar-registrations-month',
1363
+				'title'  => __('Not Approved', 'event_espresso'),
1364
+				'href'   => EEH_URL::add_query_args_and_nonce(array(
1365
+					'action'      => 'default',
1366
+					'status'      => 'month',
1367
+					'_reg_status' => EEM_Registration::status_id_not_approved,
1368
+				), $reg_admin_url),
1369
+				'meta'   => array(
1370
+					'title'  => __('Not Approved', 'event_espresso'),
1371
+					'target' => '',
1372
+					'class'  => $menu_class,
1373
+				),
1374
+			));
1375
+		}
1376
+		//Registration Overview This Month Cancelled
1377
+		if ($this->registry->CAP->current_user_can('ee_read_registrations',
1378
+			'ee_admin_bar_menu_espresso-toolbar-registrations-month-cancelled')
1379
+		) {
1380
+			$admin_bar->add_menu(array(
1381
+				'id'     => 'espresso-toolbar-registrations-month-cancelled',
1382
+				'parent' => 'espresso-toolbar-registrations-month',
1383
+				'title'  => __('Cancelled', 'event_espresso'),
1384
+				'href'   => EEH_URL::add_query_args_and_nonce(array(
1385
+					'action'      => 'default',
1386
+					'status'      => 'month',
1387
+					'_reg_status' => EEM_Registration::status_id_cancelled,
1388
+				), $reg_admin_url),
1389
+				'meta'   => array(
1390
+					'title'  => __('Cancelled', 'event_espresso'),
1391
+					'target' => '',
1392
+					'class'  => $menu_class,
1393
+				),
1394
+			));
1395
+		}
1396
+		//Extensions & Services
1397
+		if ($this->registry->CAP->current_user_can('ee_read_ee',
1398
+			'ee_admin_bar_menu_espresso-toolbar-extensions-and-services')
1399
+		) {
1400
+			$admin_bar->add_menu(array(
1401
+				'id'     => 'espresso-toolbar-extensions-and-services',
1402
+				'parent' => 'espresso-toolbar',
1403
+				'title'  => __('Extensions & Services', 'event_espresso'),
1404
+				'href'   => $extensions_admin_url,
1405
+				'meta'   => array(
1406
+					'title'  => __('Extensions & Services', 'event_espresso'),
1407
+					'target' => '',
1408
+					'class'  => $menu_class,
1409
+				),
1410
+			));
1411
+		}
1412
+	}
1413
+
1414
+
1415
+
1416
+	/**
1417
+	 * simply hooks into "wp_list_pages_exclude" filter (for wp_list_pages method) and makes sure EE critical pages are
1418
+	 * never returned with the function.
1419
+	 *
1420
+	 * @param  array $exclude_array any existing pages being excluded are in this array.
1421
+	 * @return array
1422
+	 */
1423
+	public function remove_pages_from_wp_list_pages($exclude_array)
1424
+	{
1425
+		return array_merge($exclude_array, $this->registry->CFG->core->get_critical_pages_array());
1426
+	}
1427 1427
 
1428 1428
 
1429 1429
 
Please login to merge, or discard this patch.