@@ -41,7 +41,7 @@ |
||
41 | 41 | </li> |
42 | 42 | <li> |
43 | 43 | <?php esc_html_e('Messenger', 'event_espresso'); ?><br /> |
44 | - <?php printf( esc_html__('This column displays a number of different elements for the listed template. First is the messenger that this template is delivered by. The messenger title is linked to the editor for the first %1$scontext%2$s listed (context is labelled "recipients" for payment message types)', 'event_espresso'), '<em>', '</em>'); ?><br /> |
|
44 | + <?php printf(esc_html__('This column displays a number of different elements for the listed template. First is the messenger that this template is delivered by. The messenger title is linked to the editor for the first %1$scontext%2$s listed (context is labelled "recipients" for payment message types)', 'event_espresso'), '<em>', '</em>'); ?><br /> |
|
45 | 45 | <?php esc_html_e('Below the Messenger title, is a list of different contexts. The context label varies for each message type but it is usually labelled "Recipients". You can click on each context title to go to the specific template for that context and edit it as desired.', 'event_espresso'); ?> |
46 | 46 | </li> |
47 | 47 | </ul> |
@@ -1,7 +1,7 @@ |
||
1 | 1 | <h2><?php esc_html_e('What are Message Types?', 'event_espresso'); ?></h2> |
2 | -<p><?php printf( esc_html__('Message Types are the %1$skinds%2$s of messages that get delivered. Think of them as the "type" of package that is being delivered by the messenger. For example, Event Espresso comes with two Message Types attached to the Email messenger: Registration Confirmation (which is triggered by frontend event registrations), and Payment Confirmation (which is triggered by frontend payments).', 'event_espresso'), '<em>', '</em>'); ?></p> |
|
2 | +<p><?php printf(esc_html__('Message Types are the %1$skinds%2$s of messages that get delivered. Think of them as the "type" of package that is being delivered by the messenger. For example, Event Espresso comes with two Message Types attached to the Email messenger: Registration Confirmation (which is triggered by frontend event registrations), and Payment Confirmation (which is triggered by frontend payments).', 'event_espresso'), '<em>', '</em>'); ?></p> |
|
3 | 3 | <p><?php esc_html_e('Future iterations of Event Espresso 4.0 (premium versions), will include more and more different message types that can be attached to the various messengers that are available', 'event_espresso'); ?></p> |
4 | 4 | |
5 | 5 | <h3><?php esc_html_e('Contexts', 'event_espresso'); ?></h3> |
6 | -<p><?php printf( esc_html__('Each message type (or %1$skind%1$s of message remember!) has different contexts for messages created for that message type. Contexts are dynamic but generally speaking they tend to represent recipients. So for example, Registration Confirmation message type has three types of recipients for every time a registration confirmation is triggered: Event Administrator, Primary Registrant, and Registrant (which may be multiple messages if there are more than one attendee per event). Whereas the Payment Message Type only has two recipients (Event Administrator, Primary Registrant [the one making the payment]).', 'event_espresso' ), '<em>', '</em>'); ?></p> |
|
6 | +<p><?php printf(esc_html__('Each message type (or %1$skind%1$s of message remember!) has different contexts for messages created for that message type. Contexts are dynamic but generally speaking they tend to represent recipients. So for example, Registration Confirmation message type has three types of recipients for every time a registration confirmation is triggered: Event Administrator, Primary Registrant, and Registrant (which may be multiple messages if there are more than one attendee per event). Whereas the Payment Message Type only has two recipients (Event Administrator, Primary Registrant [the one making the payment]).', 'event_espresso'), '<em>', '</em>'); ?></p> |
|
7 | 7 | <p><?php esc_html_e('You will most likely never see the word "context" in any of the Messages system labelling because they are dynamic per message type. Usually, contexts will be labelled "Recipients" but there may be cases down the road where a message type might use contexts to represent something totally different', 'event_espresso'); ?></p> |
8 | 8 | \ No newline at end of file |
@@ -1,6 +1,6 @@ discard block |
||
1 | 1 | <?php |
2 | 2 | |
3 | -if (!defined('EVENT_ESPRESSO_VERSION')) { |
|
3 | +if ( ! defined('EVENT_ESPRESSO_VERSION')) { |
|
4 | 4 | exit('No direct script access allowed'); |
5 | 5 | } |
6 | 6 | |
@@ -13,7 +13,7 @@ discard block |
||
13 | 13 | * @author Brent Christensen |
14 | 14 | * |
15 | 15 | */ |
16 | -class EE_DMS_4_6_0_state_system_question extends EE_Data_Migration_Script_Stage_Table{ |
|
16 | +class EE_DMS_4_6_0_state_system_question extends EE_Data_Migration_Script_Stage_Table { |
|
17 | 17 | |
18 | 18 | |
19 | 19 | |
@@ -24,7 +24,7 @@ discard block |
||
24 | 24 | */ |
25 | 25 | public function __construct() { |
26 | 26 | global $wpdb; |
27 | - $this->_pretty_name = __( 'State - System Question', 'event_espresso' ); |
|
27 | + $this->_pretty_name = __('State - System Question', 'event_espresso'); |
|
28 | 28 | $this->_old_table = $wpdb->prefix.'esp_question'; |
29 | 29 | $this->_extra_where_sql = "WHERE QST_system = 'state'"; |
30 | 30 | parent::__construct(); |
@@ -37,21 +37,21 @@ discard block |
||
37 | 37 | * @param array $question an associative array where keys are column names and values are their values. |
38 | 38 | * @return null |
39 | 39 | */ |
40 | - protected function _migrate_old_row( $question ) { |
|
41 | - if ( $question['QST_ID'] && $question['QST_system'] == 'state' ) { |
|
40 | + protected function _migrate_old_row($question) { |
|
41 | + if ($question['QST_ID'] && $question['QST_system'] == 'state') { |
|
42 | 42 | global $wpdb; |
43 | 43 | $success = $wpdb->update( |
44 | 44 | $this->_old_table, |
45 | - array( 'QST_type' => 'STATE' ), // data |
|
46 | - array( 'QST_ID' => $question['QST_ID'] ), // where |
|
47 | - array( '%s' ), // data format |
|
48 | - array( '%d' ) // where format |
|
45 | + array('QST_type' => 'STATE'), // data |
|
46 | + array('QST_ID' => $question['QST_ID']), // where |
|
47 | + array('%s'), // data format |
|
48 | + array('%d') // where format |
|
49 | 49 | ); |
50 | - if ( ! $success ) { |
|
50 | + if ( ! $success) { |
|
51 | 51 | $this->add_error( |
52 | 52 | sprintf( |
53 | - __( 'Could not update question system name "%1$s" for question ID=%2$d because "%3$s"', 'event_espresso' ), |
|
54 | - wp_json_encode( $question['QST_system'] ), |
|
53 | + __('Could not update question system name "%1$s" for question ID=%2$d because "%3$s"', 'event_espresso'), |
|
54 | + wp_json_encode($question['QST_system']), |
|
55 | 55 | $question['QST_ID'], |
56 | 56 | $wpdb->last_error |
57 | 57 | ) |
@@ -26,7 +26,7 @@ discard block |
||
26 | 26 | */ |
27 | 27 | public function __construct() { |
28 | 28 | global $wpdb; |
29 | - $this->_pretty_name = __( 'Question Types', 'event_espresso' ); |
|
29 | + $this->_pretty_name = __('Question Types', 'event_espresso'); |
|
30 | 30 | $this->_old_table = $wpdb->prefix.'esp_question'; |
31 | 31 | $this->_question_type_conversions = array( |
32 | 32 | 'MULTIPLE' => 'CHECKBOX', |
@@ -35,8 +35,8 @@ discard block |
||
35 | 35 | //when fetching rows, because we automatically use a limit and offset |
36 | 36 | //rows counted before migrating any rows, need to ALSO be counted after a bunch of rows were counted |
37 | 37 | //so we need to include both the migrated rows as well as the non-migrated rows |
38 | - $QST_types_to_count = array_merge( array_keys( $this->_question_type_conversions ), $this->_question_type_conversions ); |
|
39 | - $this->_extra_where_sql = "WHERE QST_type IN ('" . implode( "', '", $QST_types_to_count ) . "')" ; |
|
38 | + $QST_types_to_count = array_merge(array_keys($this->_question_type_conversions), $this->_question_type_conversions); |
|
39 | + $this->_extra_where_sql = "WHERE QST_type IN ('".implode("', '", $QST_types_to_count)."')"; |
|
40 | 40 | parent::__construct(); |
41 | 41 | } |
42 | 42 | |
@@ -44,21 +44,21 @@ discard block |
||
44 | 44 | * @param array $question an associative array where keys are column names and values are their values. |
45 | 45 | * @return null |
46 | 46 | */ |
47 | - protected function _migrate_old_row( $question ) { |
|
47 | + protected function _migrate_old_row($question) { |
|
48 | 48 | global $wpdb; |
49 | - if ( $question['QST_ID'] && isset( $this->_question_type_conversions[ $question['QST_type'] ] )) { |
|
49 | + if ($question['QST_ID'] && isset($this->_question_type_conversions[$question['QST_type']])) { |
|
50 | 50 | $success = $wpdb->update( |
51 | 51 | $this->_old_table, |
52 | - array( 'QST_type' => $this->_question_type_conversions[ $question['QST_type'] ] ), // data |
|
53 | - array( 'QST_ID' => $question['QST_ID'] ), // where |
|
54 | - array( '%s' ), // data format |
|
55 | - array( '%d' ) // where format |
|
52 | + array('QST_type' => $this->_question_type_conversions[$question['QST_type']]), // data |
|
53 | + array('QST_ID' => $question['QST_ID']), // where |
|
54 | + array('%s'), // data format |
|
55 | + array('%d') // where format |
|
56 | 56 | ); |
57 | - if ( ! $success ) { |
|
57 | + if ( ! $success) { |
|
58 | 58 | $this->add_error( |
59 | 59 | sprintf( |
60 | - __( 'Could not update question type %1$s for question ID=%2$d because "%3$s"', 'event_espresso' ), |
|
61 | - wp_json_encode( $question['QST_type'] ), |
|
60 | + __('Could not update question type %1$s for question ID=%2$d because "%3$s"', 'event_espresso'), |
|
61 | + wp_json_encode($question['QST_type']), |
|
62 | 62 | $question['QST_ID'], |
63 | 63 | $wpdb->last_error |
64 | 64 | ) |
@@ -1,6 +1,6 @@ discard block |
||
1 | 1 | <?php |
2 | 2 | |
3 | -if (!defined('EVENT_ESPRESSO_VERSION')) { |
|
3 | +if ( ! defined('EVENT_ESPRESSO_VERSION')) { |
|
4 | 4 | exit('No direct script access allowed'); |
5 | 5 | } |
6 | 6 | |
@@ -13,7 +13,7 @@ discard block |
||
13 | 13 | * @author Brent Christensen |
14 | 14 | * |
15 | 15 | */ |
16 | -class EE_DMS_4_6_0_country_system_question extends EE_Data_Migration_Script_Stage_Table{ |
|
16 | +class EE_DMS_4_6_0_country_system_question extends EE_Data_Migration_Script_Stage_Table { |
|
17 | 17 | |
18 | 18 | |
19 | 19 | |
@@ -24,7 +24,7 @@ discard block |
||
24 | 24 | */ |
25 | 25 | public function __construct() { |
26 | 26 | global $wpdb; |
27 | - $this->_pretty_name = __( 'Country - System Question', 'event_espresso' ); |
|
27 | + $this->_pretty_name = __('Country - System Question', 'event_espresso'); |
|
28 | 28 | $this->_old_table = $wpdb->prefix.'esp_question'; |
29 | 29 | $this->_extra_where_sql = "WHERE QST_system = 'country'"; |
30 | 30 | parent::__construct(); |
@@ -37,21 +37,21 @@ discard block |
||
37 | 37 | * @param array $question an associative array where keys are column names and values are their values. |
38 | 38 | * @return null |
39 | 39 | */ |
40 | - protected function _migrate_old_row( $question ) { |
|
41 | - if ( $question['QST_ID'] && $question['QST_system'] == 'country' ) { |
|
40 | + protected function _migrate_old_row($question) { |
|
41 | + if ($question['QST_ID'] && $question['QST_system'] == 'country') { |
|
42 | 42 | global $wpdb; |
43 | 43 | $success = $wpdb->update( |
44 | 44 | $this->_old_table, |
45 | - array( 'QST_type' => 'COUNTRY' ), // data |
|
46 | - array( 'QST_ID' => $question['QST_ID'] ), // where |
|
47 | - array( '%s' ), // data format |
|
48 | - array( '%d' ) // where format |
|
45 | + array('QST_type' => 'COUNTRY'), // data |
|
46 | + array('QST_ID' => $question['QST_ID']), // where |
|
47 | + array('%s'), // data format |
|
48 | + array('%d') // where format |
|
49 | 49 | ); |
50 | - if ( ! $success ) { |
|
50 | + if ( ! $success) { |
|
51 | 51 | $this->add_error( |
52 | 52 | sprintf( |
53 | - __( 'Could not update question system name "%1$s" for question ID=%2$d because "%3$s"', 'event_espresso' ), |
|
54 | - wp_json_encode( $question['QST_system'] ), |
|
53 | + __('Could not update question system name "%1$s" for question ID=%2$d because "%3$s"', 'event_espresso'), |
|
54 | + wp_json_encode($question['QST_system']), |
|
55 | 55 | $question['QST_ID'], |
56 | 56 | $wpdb->last_error |
57 | 57 | ) |
@@ -1,5 +1,5 @@ discard block |
||
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 | |
@@ -14,7 +14,7 @@ discard block |
||
14 | 14 | * Migrates 4.1-4.5-style gateway settings (which were stores in EE_Config) |
15 | 15 | * to 4.6-style payment methods (which have their database table) |
16 | 16 | */ |
17 | -class EE_DMS_4_6_0_gateways extends EE_Data_Migration_Script_Stage{ |
|
17 | +class EE_DMS_4_6_0_gateways extends EE_Data_Migration_Script_Stage { |
|
18 | 18 | |
19 | 19 | protected $_new_table_name; |
20 | 20 | protected $_extra_meta_table_name; |
@@ -73,11 +73,11 @@ discard block |
||
73 | 73 | */ |
74 | 74 | protected function _migration_step($num_items_to_migrate = 50) { |
75 | 75 | $items_actually_migrated = 0; |
76 | - $gateways_to_deal_with = array_slice(EE_Config::instance()->gateway->payment_settings,$this->count_records_migrated(),$num_items_to_migrate); |
|
77 | - foreach($gateways_to_deal_with as $old_gateway_slug => $old_gateway_settings){ |
|
76 | + $gateways_to_deal_with = array_slice(EE_Config::instance()->gateway->payment_settings, $this->count_records_migrated(), $num_items_to_migrate); |
|
77 | + foreach ($gateways_to_deal_with as $old_gateway_slug => $old_gateway_settings) { |
|
78 | 78 | |
79 | - if( in_array( $old_gateway_slug, $this->_gateway_we_know_to_migrate ) ) { |
|
80 | - if( ! $old_gateway_settings){ |
|
79 | + if (in_array($old_gateway_slug, $this->_gateway_we_know_to_migrate)) { |
|
80 | + if ( ! $old_gateway_settings) { |
|
81 | 81 | //no settings existed for this gateway anyways... weird... |
82 | 82 | $items_actually_migrated++; |
83 | 83 | continue; |
@@ -86,16 +86,16 @@ discard block |
||
86 | 86 | $success = $this->_convert_gateway_settings( |
87 | 87 | $old_gateway_slug, |
88 | 88 | $old_gateway_settings, |
89 | - isset( EE_Config::instance()->gateway->active_gateways[ $old_gateway_slug ] ) ); |
|
90 | - if( $success ) { |
|
91 | - EE_Config::instance()->gateway->payment_settings[ $old_gateway_slug ] = 'Deprecated'; |
|
89 | + isset(EE_Config::instance()->gateway->active_gateways[$old_gateway_slug]) ); |
|
90 | + if ($success) { |
|
91 | + EE_Config::instance()->gateway->payment_settings[$old_gateway_slug] = 'Deprecated'; |
|
92 | 92 | } |
93 | 93 | } |
94 | 94 | $items_actually_migrated++; |
95 | 95 | } |
96 | 96 | |
97 | - EE_Config::instance()->update_espresso_config(false,false); |
|
98 | - if($this->count_records_migrated() + $items_actually_migrated >= $this->count_records_to_migrate()){ |
|
97 | + EE_Config::instance()->update_espresso_config(false, false); |
|
98 | + if ($this->count_records_migrated() + $items_actually_migrated >= $this->count_records_to_migrate()) { |
|
99 | 99 | $this->set_completed(); |
100 | 100 | } |
101 | 101 | return $items_actually_migrated; |
@@ -108,22 +108,22 @@ discard block |
||
108 | 108 | * @param boolean $active indicates the gateway is currently active |
109 | 109 | * @return boolean success |
110 | 110 | */ |
111 | - protected function _convert_gateway_settings($old_gateway_slug,$old_gateway_settings,$active){ |
|
112 | - switch($old_gateway_slug){ |
|
111 | + protected function _convert_gateway_settings($old_gateway_slug, $old_gateway_settings, $active) { |
|
112 | + switch ($old_gateway_slug) { |
|
113 | 113 | case 'Aim': |
114 | 114 | $extra_meta_key_values = array( |
115 | 115 | 'login_id'=>$old_gateway_settings['authnet_aim_login_id'], |
116 | 116 | 'transaction_key'=>$old_gateway_settings['authnet_aim_transaction_key'], |
117 | 117 | 'test_transactions'=>$old_gateway_settings['test_transactions'] |
118 | 118 | ); |
119 | - $desc = __( 'Please provide the following billing information.', 'event_espresso' ); |
|
119 | + $desc = __('Please provide the following billing information.', 'event_espresso'); |
|
120 | 120 | break; |
121 | 121 | case 'Bank': |
122 | 122 | $extra_meta_key_values = array( |
123 | 123 | 'page_title'=>$old_gateway_settings['page_title'], |
124 | 124 | 'payment_instructions'=> |
125 | - sprintf( __('%1$s<br/>Name on Bank Account: %2$s<br/>Bank Account Number: %3$s<br/>Bank Name: %4$s<br/>Bank Address:%5$s', 'event_espresso'), $old_gateway_settings['bank_instructions'] , $old_gateway_settings['account_name'], $old_gateway_settings['account_number'], $old_gateway_settings['bank_name'], $old_gateway_settings['bank_address'] ) ); |
|
126 | - $desc = __( 'Make payment using an electronic funds transfer from your bank.', 'event_espresso' ); |
|
125 | + sprintf(__('%1$s<br/>Name on Bank Account: %2$s<br/>Bank Account Number: %3$s<br/>Bank Name: %4$s<br/>Bank Address:%5$s', 'event_espresso'), $old_gateway_settings['bank_instructions'], $old_gateway_settings['account_name'], $old_gateway_settings['account_number'], $old_gateway_settings['bank_name'], $old_gateway_settings['bank_address']) ); |
|
126 | + $desc = __('Make payment using an electronic funds transfer from your bank.', 'event_espresso'); |
|
127 | 127 | break; |
128 | 128 | case 'Check': |
129 | 129 | $extra_meta_key_values = array( |
@@ -131,7 +131,7 @@ discard block |
||
131 | 131 | 'payment_instructions'=>$old_gateway_settings['check_instructions'], |
132 | 132 | 'address_to_send_payment'=>$old_gateway_settings['payment_address'] |
133 | 133 | ); |
134 | - $desc = __( 'On the next page you will be given instructions on how to make a payment by check.', 'event_espresso' ); |
|
134 | + $desc = __('On the next page you will be given instructions on how to make a payment by check.', 'event_espresso'); |
|
135 | 135 | break; |
136 | 136 | case 'Invoice': |
137 | 137 | $extra_meta_key_values = array( |
@@ -139,23 +139,23 @@ discard block |
||
139 | 139 | 'pdf_payee_email' => $old_gateway_settings['template_invoice_email'], |
140 | 140 | 'pdf_payee_tax_number' => $old_gateway_settings['template_invoice_tax_number'], |
141 | 141 | 'pdf_payee_address' => $old_gateway_settings['template_invoice_address'], |
142 | - 'pdf_instructions' => $old_gateway_settings[ 'template_payment_instructions' ], |
|
143 | - 'pdf_logo_image' => $old_gateway_settings[ 'invoice_logo_url' ], |
|
144 | - 'page_confirmation_text' => isset( $old_gateway_settings[ 'page_instructions' ] ) ? $old_gateway_settings[ 'page_instructions' ] : '', |
|
145 | - 'page_extra_info' => isset( $old_gateway_settings[ 'payment_address' ] ) ? $old_gateway_settings[ 'payment_address' ] : '', |
|
142 | + 'pdf_instructions' => $old_gateway_settings['template_payment_instructions'], |
|
143 | + 'pdf_logo_image' => $old_gateway_settings['invoice_logo_url'], |
|
144 | + 'page_confirmation_text' => isset($old_gateway_settings['page_instructions']) ? $old_gateway_settings['page_instructions'] : '', |
|
145 | + 'page_extra_info' => isset($old_gateway_settings['payment_address']) ? $old_gateway_settings['payment_address'] : '', |
|
146 | 146 | 'legacy_invoice_css' => $old_gateway_settings['invoice_css'] |
147 | 147 | ); |
148 | 148 | //if they didnt want the invoiec gateway to show, pretend it was inactive |
149 | - if( ! $old_gateway_settings['show'] ){ |
|
149 | + if ( ! $old_gateway_settings['show']) { |
|
150 | 150 | $active = FALSE; |
151 | 151 | } |
152 | - $desc = __( 'On the next page you will be able to access your invoice and instructions on how to pay it.', 'event_espresso' ); |
|
152 | + $desc = __('On the next page you will be able to access your invoice and instructions on how to pay it.', 'event_espresso'); |
|
153 | 153 | break; |
154 | 154 | case 'Mijireh': |
155 | 155 | $extra_meta_key_values = array( |
156 | - 'access_key' => $old_gateway_settings[ 'access_key' ] |
|
156 | + 'access_key' => $old_gateway_settings['access_key'] |
|
157 | 157 | ); |
158 | - $desc = __( 'On the next page you will be able to enter your billing information to make the payment.', 'event_espresso' ); |
|
158 | + $desc = __('On the next page you will be able to enter your billing information to make the payment.', 'event_espresso'); |
|
159 | 159 | break; |
160 | 160 | case 'Paypal_Pro': |
161 | 161 | $extra_meta_key_values = array( |
@@ -164,31 +164,31 @@ discard block |
||
164 | 164 | 'signature'=>$old_gateway_settings['signature'], |
165 | 165 | 'credit_card_types'=>$old_gateway_settings['credit_cards'], |
166 | 166 | ); |
167 | - $desc = __( 'Please provide the following billing information.', 'event_espresso' ); |
|
167 | + $desc = __('Please provide the following billing information.', 'event_espresso'); |
|
168 | 168 | break; |
169 | 169 | case 'Paypal_Standard': |
170 | 170 | $extra_meta_key_values = array( |
171 | - 'paypal_id' => $old_gateway_settings[ 'paypal_id' ], |
|
172 | - 'image_url' => $old_gateway_settings[ 'image_url' ], |
|
173 | - 'shipping_details' => isset( $old_gateway_settings[ 'no_shipping' ] ) ? $old_gateway_settings[ 'no_shipping' ] : false, |
|
171 | + 'paypal_id' => $old_gateway_settings['paypal_id'], |
|
172 | + 'image_url' => $old_gateway_settings['image_url'], |
|
173 | + 'shipping_details' => isset($old_gateway_settings['no_shipping']) ? $old_gateway_settings['no_shipping'] : false, |
|
174 | 174 | |
175 | 175 | ); |
176 | - $desc = sprintf( __( 'After clicking \'Finalize Registration\', you will be forwarded to PayPal to make your payment. Make sure you return to this site in order to properly finalize your registration.', 'event_espresso' ), '<strong>','</strong>' ); |
|
176 | + $desc = sprintf(__('After clicking \'Finalize Registration\', you will be forwarded to PayPal to make your payment. Make sure you return to this site in order to properly finalize your registration.', 'event_espresso'), '<strong>', '</strong>'); |
|
177 | 177 | break; |
178 | 178 | default: |
179 | 179 | //if we don't recognize the payment method, just put everything in it into extra meta. At least this way its preserved somewhere |
180 | 180 | $extra_meta_key_values = $old_gateway_settings; |
181 | 181 | $desc = ''; |
182 | 182 | } |
183 | - $pretty_name = isset( $old_gateway_settings[ 'display_name' ] ) ? $old_gateway_settings[ 'display_name' ] : $old_gateway_slug; |
|
184 | - $offline_gateways = array( 'Bank', 'Check', 'Invoice' ); |
|
185 | - if( $active && in_array( $old_gateway_slug, $offline_gateways ) ) { |
|
186 | - $scope = array( 'CART', 'ADMIN'); |
|
187 | - }elseif( $active && ! in_array( $old_gateway_slug, $offline_gateways ) ) { |
|
188 | - $scope = array( 'CART' ); |
|
189 | - }elseif( ! $active && in_array($old_gateway_slug,$offline_gateways ) ) { |
|
190 | - $scope = array( 'ADMIN' ); |
|
191 | - }else{ |
|
183 | + $pretty_name = isset($old_gateway_settings['display_name']) ? $old_gateway_settings['display_name'] : $old_gateway_slug; |
|
184 | + $offline_gateways = array('Bank', 'Check', 'Invoice'); |
|
185 | + if ($active && in_array($old_gateway_slug, $offline_gateways)) { |
|
186 | + $scope = array('CART', 'ADMIN'); |
|
187 | + }elseif ($active && ! in_array($old_gateway_slug, $offline_gateways)) { |
|
188 | + $scope = array('CART'); |
|
189 | + }elseif ( ! $active && in_array($old_gateway_slug, $offline_gateways)) { |
|
190 | + $scope = array('ADMIN'); |
|
191 | + } else { |
|
192 | 192 | $scope = array(); |
193 | 193 | } |
194 | 194 | $payment_method_col_values = array( |
@@ -196,25 +196,25 @@ discard block |
||
196 | 196 | 'PMD_name' => $pretty_name, |
197 | 197 | 'PMD_desc' => $desc, |
198 | 198 | 'PMD_admin_name' => $pretty_name, |
199 | - 'PMD_slug' => sanitize_key( $old_gateway_slug ), |
|
200 | - 'PMD_debug_mode' => isset( $old_gateway_settings[ 'use_sandbox' ] ) ? $old_gateway_settings['use_sandbox'] : FALSE, |
|
201 | - 'PMD_button_url' => isset( $old_gateway_settings[ 'button_url' ] ) ? $old_gateway_settings[ 'button_url' ] : NULL, |
|
202 | - 'PMD_scope' => serialize( $scope ) |
|
199 | + 'PMD_slug' => sanitize_key($old_gateway_slug), |
|
200 | + 'PMD_debug_mode' => isset($old_gateway_settings['use_sandbox']) ? $old_gateway_settings['use_sandbox'] : FALSE, |
|
201 | + 'PMD_button_url' => isset($old_gateway_settings['button_url']) ? $old_gateway_settings['button_url'] : NULL, |
|
202 | + 'PMD_scope' => serialize($scope) |
|
203 | 203 | ); |
204 | 204 | $db_types = array( |
205 | - '%s',//PMD_type |
|
206 | - '%s',//PMD_name |
|
207 | - '%s',//PMD_desc |
|
208 | - '%s',//PMD_admin_name |
|
209 | - '%s',//PMD_slug |
|
210 | - '%d',//PMD_debug_mode |
|
211 | - '%s',//PMD_button_url |
|
212 | - '%s',//PMD_scope |
|
205 | + '%s', //PMD_type |
|
206 | + '%s', //PMD_name |
|
207 | + '%s', //PMD_desc |
|
208 | + '%s', //PMD_admin_name |
|
209 | + '%s', //PMD_slug |
|
210 | + '%d', //PMD_debug_mode |
|
211 | + '%s', //PMD_button_url |
|
212 | + '%s', //PMD_scope |
|
213 | 213 | ); |
214 | 214 | global $wpdb; |
215 | 215 | //first: check if it already exists |
216 | - $id = $wpdb->get_var( $wpdb->prepare( "SELECT PMD_ID FROM {$this->_new_table_name} WHERE PMD_slug=%s", $payment_method_col_values[ 'PMD_slug' ] ) ); |
|
217 | - if( $id ){ |
|
216 | + $id = $wpdb->get_var($wpdb->prepare("SELECT PMD_ID FROM {$this->_new_table_name} WHERE PMD_slug=%s", $payment_method_col_values['PMD_slug'])); |
|
217 | + if ($id) { |
|
218 | 218 | //just update that payment method instead of creating a new one |
219 | 219 | $success = $wpdb->update( |
220 | 220 | $this->_new_table_name, |
@@ -224,27 +224,27 @@ discard block |
||
224 | 224 | ), |
225 | 225 | $db_types, |
226 | 226 | array( |
227 | - '%d',//PMD_ID |
|
227 | + '%d', //PMD_ID |
|
228 | 228 | )); |
229 | - if( ! $success ){ |
|
230 | - $this->add_error(sprintf(__('Could not update payment method %d with properties %s because %s', "event_espresso"),$id,wp_json_encode($payment_method_col_values),$wpdb->last_error)); |
|
229 | + if ( ! $success) { |
|
230 | + $this->add_error(sprintf(__('Could not update payment method %d with properties %s because %s', "event_espresso"), $id, wp_json_encode($payment_method_col_values), $wpdb->last_error)); |
|
231 | 231 | } |
232 | - }else{ |
|
232 | + } else { |
|
233 | 233 | $success = $wpdb->insert( |
234 | 234 | $this->_new_table_name, |
235 | 235 | $payment_method_col_values, |
236 | 236 | $db_types); |
237 | - if ( ! $success ) { |
|
237 | + if ( ! $success) { |
|
238 | 238 | $this->add_error($wpdb->last_error); |
239 | 239 | return false; |
240 | - }else{ |
|
240 | + } else { |
|
241 | 241 | $id = $wpdb->insert_id; |
242 | 242 | } |
243 | 243 | } |
244 | 244 | |
245 | - if( $id ){ |
|
246 | - $this->_convert_extra_meta_values( $id, $extra_meta_key_values ); |
|
247 | - $this->get_migration_script()->set_mapping( 'EE_Gateway_Config', $old_gateway_slug, $this->_new_table_name, $id ); |
|
245 | + if ($id) { |
|
246 | + $this->_convert_extra_meta_values($id, $extra_meta_key_values); |
|
247 | + $this->get_migration_script()->set_mapping('EE_Gateway_Config', $old_gateway_slug, $this->_new_table_name, $id); |
|
248 | 248 | return true; |
249 | 249 | } |
250 | 250 | return false; |
@@ -258,26 +258,26 @@ discard block |
||
258 | 258 | * @param int $id |
259 | 259 | * @param array $extra_meta_key_values |
260 | 260 | */ |
261 | - private function _convert_extra_meta_values($id,$extra_meta_key_values){ |
|
261 | + private function _convert_extra_meta_values($id, $extra_meta_key_values) { |
|
262 | 262 | global $wpdb; |
263 | - foreach( $extra_meta_key_values as $key => $value ){ |
|
263 | + foreach ($extra_meta_key_values as $key => $value) { |
|
264 | 264 | $exm_args = array( |
265 | 265 | 'OBJ_ID'=>$id, |
266 | 266 | 'EXM_type'=>'Payment_Method', |
267 | 267 | 'EXM_key'=>$key, |
268 | - 'EXM_value'=> maybe_serialize($value ) |
|
268 | + 'EXM_value'=> maybe_serialize($value) |
|
269 | 269 | ); |
270 | 270 | $success = $wpdb->insert( |
271 | 271 | $this->_extra_meta_table_name, |
272 | 272 | $exm_args, |
273 | 273 | array( |
274 | - '%d',//OBJ_ID |
|
275 | - '%s',//EXM_type |
|
276 | - '%s',//EXM_key |
|
277 | - '%s',//EXM_value |
|
274 | + '%d', //OBJ_ID |
|
275 | + '%s', //EXM_type |
|
276 | + '%s', //EXM_key |
|
277 | + '%s', //EXM_value |
|
278 | 278 | )); |
279 | - if( ! $success ){ |
|
280 | - $this->add_error(sprintf(__('Could not insert extra meta key with values %s. %s', "event_espresso"),wp_json_encode($exm_args),$wpdb->last_error)); |
|
279 | + if ( ! $success) { |
|
280 | + $this->add_error(sprintf(__('Could not insert extra meta key with values %s. %s', "event_espresso"), wp_json_encode($exm_args), $wpdb->last_error)); |
|
281 | 281 | } |
282 | 282 | } |
283 | 283 | } |
@@ -184,11 +184,11 @@ discard block |
||
184 | 184 | $offline_gateways = array( 'Bank', 'Check', 'Invoice' ); |
185 | 185 | if( $active && in_array( $old_gateway_slug, $offline_gateways ) ) { |
186 | 186 | $scope = array( 'CART', 'ADMIN'); |
187 | - }elseif( $active && ! in_array( $old_gateway_slug, $offline_gateways ) ) { |
|
187 | + } elseif( $active && ! in_array( $old_gateway_slug, $offline_gateways ) ) { |
|
188 | 188 | $scope = array( 'CART' ); |
189 | - }elseif( ! $active && in_array($old_gateway_slug,$offline_gateways ) ) { |
|
189 | + } elseif( ! $active && in_array($old_gateway_slug,$offline_gateways ) ) { |
|
190 | 190 | $scope = array( 'ADMIN' ); |
191 | - }else{ |
|
191 | + } else{ |
|
192 | 192 | $scope = array(); |
193 | 193 | } |
194 | 194 | $payment_method_col_values = array( |
@@ -229,7 +229,7 @@ discard block |
||
229 | 229 | if( ! $success ){ |
230 | 230 | $this->add_error(sprintf(__('Could not update payment method %d with properties %s because %s', "event_espresso"),$id,wp_json_encode($payment_method_col_values),$wpdb->last_error)); |
231 | 231 | } |
232 | - }else{ |
|
232 | + } else{ |
|
233 | 233 | $success = $wpdb->insert( |
234 | 234 | $this->_new_table_name, |
235 | 235 | $payment_method_col_values, |
@@ -237,7 +237,7 @@ discard block |
||
237 | 237 | if ( ! $success ) { |
238 | 238 | $this->add_error($wpdb->last_error); |
239 | 239 | return false; |
240 | - }else{ |
|
240 | + } else{ |
|
241 | 241 | $id = $wpdb->insert_id; |
242 | 242 | } |
243 | 243 | } |
@@ -1,6 +1,6 @@ discard block |
||
1 | 1 | <?php |
2 | 2 | |
3 | -if (!defined('EVENT_ESPRESSO_VERSION')) { |
|
3 | +if ( ! defined('EVENT_ESPRESSO_VERSION')) { |
|
4 | 4 | exit('No direct script access allowed'); |
5 | 5 | } |
6 | 6 | |
@@ -13,7 +13,7 @@ discard block |
||
13 | 13 | * @author Brent Christensen |
14 | 14 | * |
15 | 15 | */ |
16 | -class EE_DMS_4_9_0_Email_System_Question extends EE_Data_Migration_Script_Stage_Table{ |
|
16 | +class EE_DMS_4_9_0_Email_System_Question extends EE_Data_Migration_Script_Stage_Table { |
|
17 | 17 | |
18 | 18 | |
19 | 19 | |
@@ -24,7 +24,7 @@ discard block |
||
24 | 24 | */ |
25 | 25 | public function __construct() { |
26 | 26 | global $wpdb; |
27 | - $this->_pretty_name = __( 'Email - System Question', 'event_espresso' ); |
|
27 | + $this->_pretty_name = __('Email - System Question', 'event_espresso'); |
|
28 | 28 | $this->_old_table = $wpdb->prefix.'esp_question'; |
29 | 29 | $this->_extra_where_sql = "WHERE QST_system = 'email'"; |
30 | 30 | parent::__construct(); |
@@ -37,21 +37,21 @@ discard block |
||
37 | 37 | * @param array $question an associative array where keys are column names and values are their values. |
38 | 38 | * @return null |
39 | 39 | */ |
40 | - protected function _migrate_old_row( $question ) { |
|
41 | - if ( $question['QST_ID'] && $question['QST_system'] == 'email' ) { |
|
40 | + protected function _migrate_old_row($question) { |
|
41 | + if ($question['QST_ID'] && $question['QST_system'] == 'email') { |
|
42 | 42 | global $wpdb; |
43 | 43 | $success = $wpdb->update( |
44 | 44 | $this->_old_table, |
45 | - array( 'QST_type' => 'EMAIL' ), // data |
|
46 | - array( 'QST_ID' => $question['QST_ID'] ), // where |
|
47 | - array( '%s' ), // data format |
|
48 | - array( '%d' ) // where format |
|
45 | + array('QST_type' => 'EMAIL'), // data |
|
46 | + array('QST_ID' => $question['QST_ID']), // where |
|
47 | + array('%s'), // data format |
|
48 | + array('%d') // where format |
|
49 | 49 | ); |
50 | - if ( ! $success ) { |
|
50 | + if ( ! $success) { |
|
51 | 51 | $this->add_error( |
52 | 52 | sprintf( |
53 | - __( 'Could not update question system name "%1$s" for question ID=%2$d because "%3$s"', 'event_espresso' ), |
|
54 | - wp_json_encode( $question['QST_system'] ), |
|
53 | + __('Could not update question system name "%1$s" for question ID=%2$d because "%3$s"', 'event_espresso'), |
|
54 | + wp_json_encode($question['QST_system']), |
|
55 | 55 | $question['QST_ID'], |
56 | 56 | $wpdb->last_error |
57 | 57 | ) |
@@ -17,7 +17,7 @@ discard block |
||
17 | 17 | <?php else : ?> |
18 | 18 | <p class="clearfix"> |
19 | 19 | <span class="admin-side-mbox-label-spn lt-grey-txt float-left"><?php _e('Name', |
20 | - 'event_espresso'); ?></span><?php echo $prime_reg_fname . ' ' . $prime_reg_lname; ?> |
|
20 | + 'event_espresso'); ?></span><?php echo $prime_reg_fname . ' ' . $prime_reg_lname; ?> |
|
21 | 21 | </p> |
22 | 22 | <p class="clearfix"> |
23 | 23 | <span class="admin-side-mbox-label-spn lt-grey-txt float-left"><?php _e('Email', 'event_espresso'); ?></span><a |
@@ -25,7 +25,7 @@ discard block |
||
25 | 25 | </p> |
26 | 26 | <p class="clearfix"> |
27 | 27 | <span class="admin-side-mbox-label-spn lt-grey-txt float-left"><?php _e('Phone #', |
28 | - 'event_espresso'); ?></span><?php echo $prime_reg_phone; ?> |
|
28 | + 'event_espresso'); ?></span><?php echo $prime_reg_phone; ?> |
|
29 | 29 | </p> |
30 | 30 | <p class="clearfix"> |
31 | 31 | <span class="admin-side-mbox-label-spn lt-grey-txt float-left"><?php _e('Address', 'event_espresso'); ?></span> |
@@ -36,13 +36,13 @@ discard block |
||
36 | 36 | </div> <!-- end #admin-side-mbox-primary-registrant-dv --> |
37 | 37 | |
38 | 38 | <?php |
39 | - /** only show if logged in user has access */ |
|
40 | - if ( EE_Registry::instance()->CAP->current_user_can( |
|
41 | - 'ee_edit_contact', |
|
42 | - 'view_or_edit_contact_button', |
|
43 | - $ATT_ID |
|
44 | - ) |
|
45 | - ) : ?> |
|
39 | + /** only show if logged in user has access */ |
|
40 | + if ( EE_Registry::instance()->CAP->current_user_can( |
|
41 | + 'ee_edit_contact', |
|
42 | + 'view_or_edit_contact_button', |
|
43 | + $ATT_ID |
|
44 | + ) |
|
45 | + ) : ?> |
|
46 | 46 | <p style="text-align:right;"> |
47 | 47 | <a class="button button-small" href="<?php echo $edit_attendee_url; ?>" |
48 | 48 | title="<?php esc_attr_e('View details for this contact.', 'event_espresso'); ?>"> |
@@ -17,7 +17,7 @@ discard block |
||
17 | 17 | <?php else : ?> |
18 | 18 | <p class="clearfix"> |
19 | 19 | <span class="admin-side-mbox-label-spn lt-grey-txt float-left"><?php _e('Name', |
20 | - 'event_espresso'); ?></span><?php echo $prime_reg_fname . ' ' . $prime_reg_lname; ?> |
|
20 | + 'event_espresso'); ?></span><?php echo $prime_reg_fname.' '.$prime_reg_lname; ?> |
|
21 | 21 | </p> |
22 | 22 | <p class="clearfix"> |
23 | 23 | <span class="admin-side-mbox-label-spn lt-grey-txt float-left"><?php _e('Email', 'event_espresso'); ?></span><a |
@@ -37,7 +37,7 @@ discard block |
||
37 | 37 | |
38 | 38 | <?php |
39 | 39 | /** only show if logged in user has access */ |
40 | - if ( EE_Registry::instance()->CAP->current_user_can( |
|
40 | + if (EE_Registry::instance()->CAP->current_user_can( |
|
41 | 41 | 'ee_edit_contact', |
42 | 42 | 'view_or_edit_contact_button', |
43 | 43 | $ATT_ID |
@@ -50,4 +50,4 @@ discard block |
||
50 | 50 | </a> |
51 | 51 | </p> |
52 | 52 | <?php endif; ?> |
53 | -<?php endif; //end no attendee check?> |
|
53 | +<?php endif; //end no attendee check?> |
@@ -14,10 +14,13 @@ |
||
14 | 14 | <?php echo $no_attendee_message; ?> |
15 | 15 | </p> |
16 | 16 | </div> <!-- end #admin-side-mbox-primary-registrant-dv --> |
17 | -<?php else : ?> |
|
17 | +<?php else { |
|
18 | + : ?> |
|
18 | 19 | <p class="clearfix"> |
19 | 20 | <span class="admin-side-mbox-label-spn lt-grey-txt float-left"><?php _e('Name', |
20 | - 'event_espresso'); ?></span><?php echo $prime_reg_fname . ' ' . $prime_reg_lname; ?> |
|
21 | + 'event_espresso'); |
|
22 | +} |
|
23 | +?></span><?php echo $prime_reg_fname . ' ' . $prime_reg_lname; ?> |
|
21 | 24 | </p> |
22 | 25 | <p class="clearfix"> |
23 | 26 | <span class="admin-side-mbox-label-spn lt-grey-txt float-left"><?php _e('Email', 'event_espresso'); ?></span><a |
@@ -529,7 +529,7 @@ |
||
529 | 529 | /** |
530 | 530 | * This returns an array of counts of datetimes in the database for each Datetime status that can be queried. |
531 | 531 | * |
532 | - * @param array $stati_to_include If included you can restrict the statuses we return counts for by including the |
|
532 | + * @param string[] $stati_to_include If included you can restrict the statuses we return counts for by including the |
|
533 | 533 | * stati you want counts for as values in the array. An empty array returns counts |
534 | 534 | * for all valid stati. |
535 | 535 | * @param array $query_params If included can be used to refine the conditions for returning the count (i.e. |
@@ -482,9 +482,9 @@ |
||
482 | 482 | $query_params['order_by'] = array('DTT_EVT_start' => 'DESC'); |
483 | 483 | $query_interval = EEH_DTT_Helper::get_sql_query_interval_for_offset($this->get_timezone(), 'DTT_EVT_start'); |
484 | 484 | $columns_to_select = array( |
485 | - 'dtt_year' => array('YEAR(' . $query_interval . ')', '%s'), |
|
486 | - 'dtt_month' => array('MONTHNAME(' . $query_interval . ')', '%s'), |
|
487 | - 'dtt_month_num' => array('MONTH(' . $query_interval . ')', '%s'), |
|
485 | + 'dtt_year' => array('YEAR('.$query_interval.')', '%s'), |
|
486 | + 'dtt_month' => array('MONTHNAME('.$query_interval.')', '%s'), |
|
487 | + 'dtt_month_num' => array('MONTH('.$query_interval.')', '%s'), |
|
488 | 488 | ); |
489 | 489 | return $this->_get_all_wpdb_results($query_params, OBJECT, $columns_to_select); |
490 | 490 | } |
@@ -1,5 +1,5 @@ discard block |
||
1 | 1 | <?php if ( ! defined('EVENT_ESPRESSO_VERSION')) { |
2 | - exit('No direct script access allowed'); |
|
2 | + exit('No direct script access allowed'); |
|
3 | 3 | } |
4 | 4 | /** |
5 | 5 | * Class Datetime Model |
@@ -11,595 +11,595 @@ discard block |
||
11 | 11 | class EEM_Datetime extends EEM_Soft_Delete_Base |
12 | 12 | { |
13 | 13 | |
14 | - /** |
|
15 | - * @var EEM_Datetime $_instance |
|
16 | - */ |
|
17 | - protected static $_instance; |
|
18 | - |
|
19 | - |
|
20 | - |
|
21 | - /** |
|
22 | - * private constructor to prevent direct creation |
|
23 | - * |
|
24 | - * @Constructor |
|
25 | - * @access private |
|
26 | - * @param string $timezone string representing the timezone we want to set for returned Date Time Strings (and any |
|
27 | - * incoming timezone data that gets saved). Note this just sends the timezone info to the |
|
28 | - * date time model field objects. Default is NULL (and will be assumed using the set |
|
29 | - * timezone in the 'timezone_string' wp option) |
|
30 | - * @throws \EE_Error |
|
31 | - */ |
|
32 | - protected function __construct($timezone) |
|
33 | - { |
|
34 | - $this->singular_item = __('Datetime', 'event_espresso'); |
|
35 | - $this->plural_item = __('Datetimes', 'event_espresso'); |
|
36 | - $this->_tables = array( |
|
37 | - 'Datetime' => new EE_Primary_Table('esp_datetime', 'DTT_ID'), |
|
38 | - ); |
|
39 | - $this->_fields = array( |
|
40 | - 'Datetime' => array( |
|
41 | - 'DTT_ID' => new EE_Primary_Key_Int_Field('DTT_ID', __('Datetime ID', 'event_espresso')), |
|
42 | - 'EVT_ID' => new EE_Foreign_Key_Int_Field( |
|
43 | - 'EVT_ID', __('Event ID', 'event_espresso'), false, 0, 'Event' |
|
44 | - ), |
|
45 | - 'DTT_name' => new EE_Plain_Text_Field( |
|
46 | - 'DTT_name', __('Datetime Name', 'event_espresso'), false, '' |
|
47 | - ), |
|
48 | - 'DTT_description' => new EE_Post_Content_Field( |
|
49 | - 'DTT_description', __('Description for Datetime', 'event_espresso'), false, '' |
|
50 | - ), |
|
51 | - 'DTT_EVT_start' => new EE_Datetime_Field( |
|
52 | - 'DTT_EVT_start', __('Start time/date of Event', 'event_espresso'), false, EE_Datetime_Field::now, |
|
53 | - $timezone |
|
54 | - ), |
|
55 | - 'DTT_EVT_end' => new EE_Datetime_Field( |
|
56 | - 'DTT_EVT_end', __('End time/date of Event', 'event_espresso'), false, EE_Datetime_Field::now, |
|
57 | - $timezone |
|
58 | - ), |
|
59 | - 'DTT_reg_limit' => new EE_Infinite_Integer_Field( |
|
60 | - 'DTT_reg_limit', __('Registration Limit for this time', 'event_espresso'), true, EE_INF), |
|
61 | - 'DTT_sold' => new EE_Integer_Field( |
|
62 | - 'DTT_sold', __('How many sales for this Datetime that have occurred', 'event_espresso'), true, 0 |
|
63 | - ), |
|
64 | - 'DTT_reserved' => new EE_Integer_Field('DTT_reserved', |
|
65 | - __('Quantity of tickets reserved, but not yet fully purchased', 'event_espresso'), false, 0 |
|
66 | - ), |
|
67 | - 'DTT_is_primary' => new EE_Boolean_Field( |
|
68 | - 'DTT_is_primary', __('Flag indicating datetime is primary one for event', 'event_espresso'), |
|
69 | - false, false |
|
70 | - ), |
|
71 | - 'DTT_order' => new EE_Integer_Field( |
|
72 | - 'DTT_order', __('The order in which the Datetime is displayed', 'event_espresso'), false, 0 |
|
73 | - ), |
|
74 | - 'DTT_parent' => new EE_Integer_Field( |
|
75 | - 'DTT_parent', __('Indicates what DTT_ID is the parent of this DTT_ID'), true, 0 |
|
76 | - ), |
|
77 | - 'DTT_deleted' => new EE_Trashed_Flag_Field( |
|
78 | - 'DTT_deleted', __('Flag indicating datetime is archived', 'event_espresso'), false, false |
|
79 | - ), |
|
80 | - ), |
|
81 | - ); |
|
82 | - $this->_model_relations = array( |
|
83 | - 'Ticket' => new EE_HABTM_Relation('Datetime_Ticket'), |
|
84 | - 'Event' => new EE_Belongs_To_Relation(), |
|
85 | - 'Checkin' => new EE_Has_Many_Relation(), |
|
86 | - ); |
|
87 | - $this->_model_chain_to_wp_user = 'Event'; |
|
88 | - //this model is generally available for reading |
|
89 | - $this->_cap_restriction_generators[EEM_Base::caps_read] = new EE_Restriction_Generator_Event_Related_Public('Event'); |
|
90 | - $this->_cap_restriction_generators[EEM_Base::caps_read_admin] = new EE_Restriction_Generator_Event_Related_Protected('Event'); |
|
91 | - $this->_cap_restriction_generators[EEM_Base::caps_edit] = new EE_Restriction_Generator_Event_Related_Protected('Event'); |
|
92 | - $this->_cap_restriction_generators[EEM_Base::caps_delete] = new EE_Restriction_Generator_Event_Related_Protected('Event', |
|
93 | - EEM_Base::caps_edit); |
|
94 | - parent::__construct($timezone); |
|
95 | - } |
|
96 | - |
|
97 | - |
|
98 | - |
|
99 | - /** |
|
100 | - * create new blank datetime |
|
101 | - * |
|
102 | - * @access public |
|
103 | - * @return EE_Datetime[] array on success, FALSE on fail |
|
104 | - * @throws \EE_Error |
|
105 | - */ |
|
106 | - public function create_new_blank_datetime() |
|
107 | - { |
|
108 | - //makes sure timezone is always set. |
|
109 | - $timezone_string = $this->get_timezone(); |
|
110 | - $blank_datetime = EE_Datetime::new_instance( |
|
111 | - array( |
|
112 | - 'DTT_EVT_start' => $this->current_time_for_query('DTT_EVT_start', true) + MONTH_IN_SECONDS, |
|
113 | - 'DTT_EVT_end' => $this->current_time_for_query('DTT_EVT_end', true) + MONTH_IN_SECONDS, |
|
114 | - 'DTT_order' => 1, |
|
115 | - 'DTT_reg_limit' => EE_INF, |
|
116 | - ), |
|
117 | - $timezone_string |
|
118 | - ); |
|
119 | - $blank_datetime->set_start_time($this->convert_datetime_for_query('DTT_EVT_start', '8am', 'ga', |
|
120 | - $timezone_string)); |
|
121 | - $blank_datetime->set_end_time($this->convert_datetime_for_query('DTT_EVT_end', '5pm', 'ga', $timezone_string)); |
|
122 | - return array($blank_datetime); |
|
123 | - } |
|
124 | - |
|
125 | - |
|
126 | - |
|
127 | - /** |
|
128 | - * get event start date from db |
|
129 | - * |
|
130 | - * @access public |
|
131 | - * @param int $EVT_ID |
|
132 | - * @return EE_Datetime[] array on success, FALSE on fail |
|
133 | - * @throws \EE_Error |
|
134 | - */ |
|
135 | - public function get_all_event_dates($EVT_ID = 0) |
|
136 | - { |
|
137 | - if ( ! $EVT_ID) { // on add_new_event event_id gets set to 0 |
|
138 | - return $this->create_new_blank_datetime(); |
|
139 | - } |
|
140 | - $results = $this->get_datetimes_for_event_ordered_by_DTT_order($EVT_ID); |
|
141 | - if (empty($results)) { |
|
142 | - return $this->create_new_blank_datetime(); |
|
143 | - } |
|
144 | - return $results; |
|
145 | - } |
|
146 | - |
|
147 | - |
|
148 | - |
|
149 | - /** |
|
150 | - * get all datetimes attached to an event ordered by the DTT_order field |
|
151 | - * |
|
152 | - * @public |
|
153 | - * @param int $EVT_ID event id |
|
154 | - * @param boolean $include_expired |
|
155 | - * @param boolean $include_deleted |
|
156 | - * @param int $limit If included then limit the count of results by |
|
157 | - * the given number |
|
158 | - * @return EE_Datetime[] |
|
159 | - * @throws \EE_Error |
|
160 | - */ |
|
161 | - public function get_datetimes_for_event_ordered_by_DTT_order( |
|
162 | - $EVT_ID, |
|
163 | - $include_expired = true, |
|
164 | - $include_deleted = true, |
|
165 | - $limit = null |
|
166 | - ) { |
|
167 | - //sanitize EVT_ID |
|
168 | - $EVT_ID = absint($EVT_ID); |
|
169 | - $old_assumption = $this->get_assumption_concerning_values_already_prepared_by_model_object(); |
|
170 | - $this->assume_values_already_prepared_by_model_object(EEM_Base::prepared_for_use_in_db); |
|
171 | - $where_params = array('Event.EVT_ID' => $EVT_ID); |
|
172 | - $query_params = ! empty($limit) |
|
173 | - ? array( |
|
174 | - $where_params, |
|
175 | - 'limit' => $limit, |
|
176 | - 'order_by' => array('DTT_order' => 'ASC'), |
|
177 | - 'default_where_conditions' => 'none', |
|
178 | - ) |
|
179 | - : array( |
|
180 | - $where_params, |
|
181 | - 'order_by' => array('DTT_order' => 'ASC'), |
|
182 | - 'default_where_conditions' => 'none', |
|
183 | - ); |
|
184 | - if ( ! $include_expired) { |
|
185 | - $query_params[0]['DTT_EVT_end'] = array('>=', current_time('mysql', true)); |
|
186 | - } |
|
187 | - if ($include_deleted) { |
|
188 | - $query_params[0]['DTT_deleted'] = array('IN', array(true, false)); |
|
189 | - } |
|
190 | - /** @var EE_Datetime[] $result */ |
|
191 | - $result = $this->get_all($query_params); |
|
192 | - $this->assume_values_already_prepared_by_model_object($old_assumption); |
|
193 | - return $result; |
|
194 | - } |
|
195 | - |
|
196 | - |
|
197 | - |
|
198 | - /** |
|
199 | - * Gets the datetimes for the event (with the given limit), and orders them by "importance". By importance, we mean |
|
200 | - * that the primary datetimes are most important (DEPRECATED FOR NOW), and then the earlier datetimes are the most |
|
201 | - * important. Maybe we'll want this to take into account datetimes that haven't already passed, but we don't yet. |
|
202 | - * |
|
203 | - * @param int $EVT_ID |
|
204 | - * @param int $limit |
|
205 | - * @return EE_Datetime[]|EE_Base_Class[] |
|
206 | - * @throws \EE_Error |
|
207 | - */ |
|
208 | - public function get_datetimes_for_event_ordered_by_importance($EVT_ID = 0, $limit = null) |
|
209 | - { |
|
210 | - return $this->get_all( |
|
211 | - array( |
|
212 | - array('Event.EVT_ID' => $EVT_ID), |
|
213 | - 'limit' => $limit, |
|
214 | - 'order_by' => array('DTT_EVT_start' => 'ASC'), |
|
215 | - 'default_where_conditions' => 'none', |
|
216 | - ) |
|
217 | - ); |
|
218 | - } |
|
219 | - |
|
220 | - |
|
221 | - |
|
222 | - /** |
|
223 | - * @param int $EVT_ID |
|
224 | - * @param boolean $include_expired |
|
225 | - * @param boolean $include_deleted |
|
226 | - * @return EE_Datetime |
|
227 | - * @throws \EE_Error |
|
228 | - */ |
|
229 | - public function get_oldest_datetime_for_event($EVT_ID, $include_expired = false, $include_deleted = false) |
|
230 | - { |
|
231 | - $results = $this->get_datetimes_for_event_ordered_by_start_time($EVT_ID, $include_expired, $include_deleted, 1); |
|
232 | - if ($results) { |
|
233 | - return array_shift($results); |
|
234 | - } else { |
|
235 | - return null; |
|
236 | - } |
|
237 | - } |
|
238 | - |
|
239 | - |
|
240 | - |
|
241 | - /** |
|
242 | - * Gets the 'primary' datetime for an event. |
|
243 | - * |
|
244 | - * @param int $EVT_ID |
|
245 | - * @param bool $try_to_exclude_expired |
|
246 | - * @param bool $try_to_exclude_deleted |
|
247 | - * @return \EE_Datetime |
|
248 | - * @throws \EE_Error |
|
249 | - */ |
|
250 | - public function get_primary_datetime_for_event( |
|
251 | - $EVT_ID, |
|
252 | - $try_to_exclude_expired = true, |
|
253 | - $try_to_exclude_deleted = true |
|
254 | - ) { |
|
255 | - if ($try_to_exclude_expired) { |
|
256 | - $non_expired = $this->get_oldest_datetime_for_event($EVT_ID, false, false); |
|
257 | - if ($non_expired) { |
|
258 | - return $non_expired; |
|
259 | - } |
|
260 | - } |
|
261 | - if ($try_to_exclude_deleted) { |
|
262 | - $expired_even = $this->get_oldest_datetime_for_event($EVT_ID, true); |
|
263 | - if ($expired_even) { |
|
264 | - return $expired_even; |
|
265 | - } |
|
266 | - } |
|
267 | - return $this->get_oldest_datetime_for_event($EVT_ID, true, true); |
|
268 | - } |
|
269 | - |
|
270 | - |
|
271 | - |
|
272 | - /** |
|
273 | - * Gets ALL the datetimes for an event (including trashed ones, for now), ordered |
|
274 | - * only by start date |
|
275 | - * |
|
276 | - * @param int $EVT_ID |
|
277 | - * @param boolean $include_expired |
|
278 | - * @param boolean $include_deleted |
|
279 | - * @param int $limit |
|
280 | - * @return EE_Datetime[] |
|
281 | - * @throws \EE_Error |
|
282 | - */ |
|
283 | - public function get_datetimes_for_event_ordered_by_start_time( |
|
284 | - $EVT_ID, |
|
285 | - $include_expired = true, |
|
286 | - $include_deleted = true, |
|
287 | - $limit = null |
|
288 | - ) { |
|
289 | - //sanitize EVT_ID |
|
290 | - $EVT_ID = absint($EVT_ID); |
|
291 | - $old_assumption = $this->get_assumption_concerning_values_already_prepared_by_model_object(); |
|
292 | - $this->assume_values_already_prepared_by_model_object(EEM_Base::prepared_for_use_in_db); |
|
293 | - $query_params = array(array('Event.EVT_ID' => $EVT_ID), 'order_by' => array('DTT_EVT_start' => 'asc')); |
|
294 | - if ( ! $include_expired) { |
|
295 | - $query_params[0]['DTT_EVT_end'] = array('>=', current_time('mysql', true)); |
|
296 | - } |
|
297 | - if ($include_deleted) { |
|
298 | - $query_params[0]['DTT_deleted'] = array('IN', array(true, false)); |
|
299 | - } |
|
300 | - if ($limit) { |
|
301 | - $query_params['limit'] = $limit; |
|
302 | - } |
|
303 | - /** @var EE_Datetime[] $result */ |
|
304 | - $result = $this->get_all($query_params); |
|
305 | - $this->assume_values_already_prepared_by_model_object($old_assumption); |
|
306 | - return $result; |
|
307 | - } |
|
308 | - |
|
309 | - |
|
310 | - |
|
311 | - /** |
|
312 | - * Gets ALL the datetimes for an ticket (including trashed ones, for now), ordered |
|
313 | - * only by start date |
|
314 | - * |
|
315 | - * @param int $TKT_ID |
|
316 | - * @param boolean $include_expired |
|
317 | - * @param boolean $include_deleted |
|
318 | - * @param int $limit |
|
319 | - * @return EE_Datetime[] |
|
320 | - * @throws \EE_Error |
|
321 | - */ |
|
322 | - public function get_datetimes_for_ticket_ordered_by_start_time( |
|
323 | - $TKT_ID, |
|
324 | - $include_expired = true, |
|
325 | - $include_deleted = true, |
|
326 | - $limit = null |
|
327 | - ) { |
|
328 | - //sanitize TKT_ID |
|
329 | - $TKT_ID = absint($TKT_ID); |
|
330 | - $old_assumption = $this->get_assumption_concerning_values_already_prepared_by_model_object(); |
|
331 | - $this->assume_values_already_prepared_by_model_object(EEM_Base::prepared_for_use_in_db); |
|
332 | - $query_params = array(array('Ticket.TKT_ID' => $TKT_ID), 'order_by' => array('DTT_EVT_start' => 'asc')); |
|
333 | - if ( ! $include_expired) { |
|
334 | - $query_params[0]['DTT_EVT_end'] = array('>=', current_time('mysql', true)); |
|
335 | - } |
|
336 | - if ($include_deleted) { |
|
337 | - $query_params[0]['DTT_deleted'] = array('IN', array(true, false)); |
|
338 | - } |
|
339 | - if ($limit) { |
|
340 | - $query_params['limit'] = $limit; |
|
341 | - } |
|
342 | - /** @var EE_Datetime[] $result */ |
|
343 | - $result = $this->get_all($query_params); |
|
344 | - $this->assume_values_already_prepared_by_model_object($old_assumption); |
|
345 | - return $result; |
|
346 | - } |
|
347 | - |
|
348 | - |
|
349 | - |
|
350 | - /** |
|
351 | - * Gets all the datetimes for a ticket (including trashed ones, for now), ordered by the DTT_order for the |
|
352 | - * datetimes. |
|
353 | - * |
|
354 | - * @param int $TKT_ID ID of ticket to retrieve the datetimes for |
|
355 | - * @param boolean $include_expired whether to include expired datetimes or not |
|
356 | - * @param boolean $include_deleted whether to include trashed datetimes or not. |
|
357 | - * @param int|null $limit if null, no limit, if int then limit results by |
|
358 | - * that number |
|
359 | - * @return EE_Datetime[] |
|
360 | - * @throws \EE_Error |
|
361 | - */ |
|
362 | - public function get_datetimes_for_ticket_ordered_by_DTT_order( |
|
363 | - $TKT_ID, |
|
364 | - $include_expired = true, |
|
365 | - $include_deleted = true, |
|
366 | - $limit = null |
|
367 | - ) { |
|
368 | - //sanitize id. |
|
369 | - $TKT_ID = absint($TKT_ID); |
|
370 | - $old_assumption = $this->get_assumption_concerning_values_already_prepared_by_model_object(); |
|
371 | - $this->assume_values_already_prepared_by_model_object(EEM_Base::prepared_for_use_in_db); |
|
372 | - $where_params = array('Ticket.TKT_ID' => $TKT_ID); |
|
373 | - $query_params = array($where_params, 'order_by' => array('DTT_order' => 'ASC')); |
|
374 | - if ( ! $include_expired) { |
|
375 | - $query_params[0]['DTT_EVT_end'] = array('>=', current_time('mysql', true)); |
|
376 | - } |
|
377 | - if ($include_deleted) { |
|
378 | - $query_params[0]['DTT_deleted'] = array('IN', array(true, false)); |
|
379 | - } |
|
380 | - if ($limit) { |
|
381 | - $query_params['limit'] = $limit; |
|
382 | - } |
|
383 | - /** @var EE_Datetime[] $result */ |
|
384 | - $result = $this->get_all($query_params); |
|
385 | - $this->assume_values_already_prepared_by_model_object($old_assumption); |
|
386 | - return $result; |
|
387 | - } |
|
388 | - |
|
389 | - |
|
390 | - |
|
391 | - /** |
|
392 | - * Gets the most important datetime for a particular event (ie, the primary event usually. But if for some WACK |
|
393 | - * reason it doesn't exist, we consider the earliest event the most important) |
|
394 | - * |
|
395 | - * @param int $EVT_ID |
|
396 | - * @return EE_Datetime |
|
397 | - * @throws \EE_Error |
|
398 | - */ |
|
399 | - public function get_most_important_datetime_for_event($EVT_ID) |
|
400 | - { |
|
401 | - $results = $this->get_datetimes_for_event_ordered_by_importance($EVT_ID, 1); |
|
402 | - if ($results) { |
|
403 | - return array_shift($results); |
|
404 | - } else { |
|
405 | - return null; |
|
406 | - } |
|
407 | - } |
|
408 | - |
|
409 | - |
|
410 | - |
|
411 | - /** |
|
412 | - * This returns a wpdb->results Array of all DTT month and years matching the incoming query params and |
|
413 | - * grouped by month and year. |
|
414 | - * |
|
415 | - * @param array $where_params Array of query_params as described in the comments for EEM_Base::get_all() |
|
416 | - * @param string $evt_active_status A string representing the evt active status to filter the months by. |
|
417 | - * Can be: |
|
418 | - * - '' = no filter |
|
419 | - * - upcoming = Published events with at least one upcoming datetime. |
|
420 | - * - expired = Events with all datetimes expired. |
|
421 | - * - active = Events that are published and have at least one datetime that |
|
422 | - * starts before now and ends after now. |
|
423 | - * - inactive = Events that are either not published. |
|
424 | - * @return EE_Base_Class[] |
|
425 | - * @throws \EE_Error |
|
426 | - */ |
|
427 | - public function get_dtt_months_and_years($where_params, $evt_active_status = '') |
|
428 | - { |
|
429 | - $current_time_for_DTT_EVT_start = $this->current_time_for_query('DTT_EVT_start'); |
|
430 | - $current_time_for_DTT_EVT_end = $this->current_time_for_query('DTT_EVT_end'); |
|
431 | - switch ($evt_active_status) { |
|
432 | - case 'upcoming' : |
|
433 | - $where_params['Event.status'] = 'publish'; |
|
434 | - //if there are already query_params matching DTT_EVT_start then we need to modify that to add them. |
|
435 | - if (isset($where_params['DTT_EVT_start'])) { |
|
436 | - $where_params['DTT_EVT_start*****'] = $where_params['DTT_EVT_start']; |
|
437 | - } |
|
438 | - $where_params['DTT_EVT_start'] = array('>', $current_time_for_DTT_EVT_start); |
|
439 | - break; |
|
440 | - case 'expired' : |
|
441 | - if (isset($where_params['Event.status'])) { |
|
442 | - unset($where_params['Event.status']); |
|
443 | - } |
|
444 | - //get events to exclude |
|
445 | - $exclude_query[0] = array_merge($where_params, |
|
446 | - array('DTT_EVT_end' => array('>', $current_time_for_DTT_EVT_end))); |
|
447 | - //first get all events that have datetimes where its not expired. |
|
448 | - $event_ids = $this->_get_all_wpdb_results($exclude_query, OBJECT_K, 'Datetime.EVT_ID'); |
|
449 | - $event_ids = array_keys($event_ids); |
|
450 | - if (isset($where_params['DTT_EVT_end'])) { |
|
451 | - $where_params['DTT_EVT_end****'] = $where_params['DTT_EVT_end']; |
|
452 | - } |
|
453 | - $where_params['DTT_EVT_end'] = array('<', $current_time_for_DTT_EVT_end); |
|
454 | - $where_params['Event.EVT_ID'] = array('NOT IN', $event_ids); |
|
455 | - break; |
|
456 | - case 'active' : |
|
457 | - $where_params['Event.status'] = 'publish'; |
|
458 | - if (isset($where_params['DTT_EVT_start'])) { |
|
459 | - $where_params['Datetime.DTT_EVT_start******'] = $where_params['DTT_EVT_start']; |
|
460 | - } |
|
461 | - if (isset($where_params['Datetime.DTT_EVT_end'])) { |
|
462 | - $where_params['Datetime.DTT_EVT_end*****'] = $where_params['DTT_EVT_end']; |
|
463 | - } |
|
464 | - $where_params['DTT_EVT_start'] = array('<', $current_time_for_DTT_EVT_start); |
|
465 | - $where_params['DTT_EVT_end'] = array('>', $current_time_for_DTT_EVT_end); |
|
466 | - break; |
|
467 | - case 'inactive' : |
|
468 | - if (isset($where_params['Event.status'])) { |
|
469 | - unset($where_params['Event.status']); |
|
470 | - } |
|
471 | - if (isset($where_params['OR'])) { |
|
472 | - $where_params['AND']['OR'] = $where_params['OR']; |
|
473 | - } |
|
474 | - if (isset($where_params['DTT_EVT_end'])) { |
|
475 | - $where_params['AND']['DTT_EVT_end****'] = $where_params['DTT_EVT_end']; |
|
476 | - unset($where_params['DTT_EVT_end']); |
|
477 | - } |
|
478 | - if (isset($where_params['DTT_EVT_start'])) { |
|
479 | - $where_params['AND']['DTT_EVT_start'] = $where_params['DTT_EVT_start']; |
|
480 | - unset($where_params['DTT_EVT_start']); |
|
481 | - } |
|
482 | - $where_params['AND']['Event.status'] = array('!=', 'publish'); |
|
483 | - break; |
|
484 | - } |
|
485 | - $query_params[0] = $where_params; |
|
486 | - $query_params['group_by'] = array('dtt_year', 'dtt_month'); |
|
487 | - $query_params['order_by'] = array('DTT_EVT_start' => 'DESC'); |
|
488 | - $query_interval = EEH_DTT_Helper::get_sql_query_interval_for_offset($this->get_timezone(), 'DTT_EVT_start'); |
|
489 | - $columns_to_select = array( |
|
490 | - 'dtt_year' => array('YEAR(' . $query_interval . ')', '%s'), |
|
491 | - 'dtt_month' => array('MONTHNAME(' . $query_interval . ')', '%s'), |
|
492 | - 'dtt_month_num' => array('MONTH(' . $query_interval . ')', '%s'), |
|
493 | - ); |
|
494 | - return $this->_get_all_wpdb_results($query_params, OBJECT, $columns_to_select); |
|
495 | - } |
|
496 | - |
|
497 | - |
|
498 | - |
|
499 | - /** |
|
500 | - * Updates the DTT_sold attribute on each datetime (based on the registrations |
|
501 | - * for the tickets for each datetime) |
|
502 | - * |
|
503 | - * @param EE_Base_Class[]|EE_Datetime[] $datetimes |
|
504 | - * @throws \EE_Error |
|
505 | - */ |
|
506 | - public function update_sold($datetimes) |
|
507 | - { |
|
508 | - EE_Error::doing_it_wrong( |
|
509 | - __FUNCTION__, |
|
510 | - esc_html__( |
|
511 | - 'Please use \EEM_Ticket::update_tickets_sold() instead which will in turn correctly update both the Ticket AND Datetime counts.', |
|
512 | - 'event_espresso' |
|
513 | - ), |
|
514 | - '4.9.32.rc.005' |
|
515 | - ); |
|
516 | - foreach ($datetimes as $datetime) { |
|
517 | - $datetime->update_sold(); |
|
518 | - } |
|
519 | - } |
|
520 | - |
|
521 | - |
|
522 | - |
|
523 | - /** |
|
524 | - * Gets the total number of tickets available at a particular datetime |
|
525 | - * (does NOT take into account the datetime's spaces available) |
|
526 | - * |
|
527 | - * @param int $DTT_ID |
|
528 | - * @param array $query_params |
|
529 | - * @return int of tickets available. If sold out, return less than 1. If infinite, returns EE_INF, IF there are NO |
|
530 | - * tickets attached to datetime then FALSE is returned. |
|
531 | - */ |
|
532 | - public function sum_tickets_currently_available_at_datetime($DTT_ID, array $query_params = array()) |
|
533 | - { |
|
534 | - $datetime = $this->get_one_by_ID($DTT_ID); |
|
535 | - if ($datetime instanceof EE_Datetime) { |
|
536 | - return $datetime->tickets_remaining($query_params); |
|
537 | - } |
|
538 | - return 0; |
|
539 | - } |
|
540 | - |
|
541 | - |
|
542 | - |
|
543 | - /** |
|
544 | - * This returns an array of counts of datetimes in the database for each Datetime status that can be queried. |
|
545 | - * |
|
546 | - * @param array $stati_to_include If included you can restrict the statuses we return counts for by including the |
|
547 | - * stati you want counts for as values in the array. An empty array returns counts |
|
548 | - * for all valid stati. |
|
549 | - * @param array $query_params If included can be used to refine the conditions for returning the count (i.e. |
|
550 | - * only for Datetimes connected to a specific event, or specific ticket. |
|
551 | - * @return array The value returned is an array indexed by Datetime Status and the values are the counts. The |
|
552 | - * @throws \EE_Error |
|
553 | - * stati used as index keys are: EE_Datetime::active EE_Datetime::upcoming EE_Datetime::expired |
|
554 | - */ |
|
555 | - public function get_datetime_counts_by_status(array $stati_to_include = array(), array $query_params = array()) |
|
556 | - { |
|
557 | - //only accept where conditions for this query. |
|
558 | - $_where = isset($query_params[0]) ? $query_params[0] : array(); |
|
559 | - $status_query_args = array( |
|
560 | - EE_Datetime::active => array_merge( |
|
561 | - $_where, |
|
562 | - array('DTT_EVT_start' => array('<', time()), 'DTT_EVT_end' => array('>', time())) |
|
563 | - ), |
|
564 | - EE_Datetime::upcoming => array_merge( |
|
565 | - $_where, |
|
566 | - array('DTT_EVT_start' => array('>', time())) |
|
567 | - ), |
|
568 | - EE_Datetime::expired => array_merge( |
|
569 | - $_where, |
|
570 | - array('DTT_EVT_end' => array('<', time())) |
|
571 | - ), |
|
572 | - ); |
|
573 | - if ( ! empty($stati_to_include)) { |
|
574 | - foreach (array_keys($status_query_args) as $status) { |
|
575 | - if ( ! in_array($status, $stati_to_include, true)) { |
|
576 | - unset($status_query_args[$status]); |
|
577 | - } |
|
578 | - } |
|
579 | - } |
|
580 | - //loop through and query counts for each stati. |
|
581 | - $status_query_results = array(); |
|
582 | - foreach ($status_query_args as $status => $status_where_conditions) { |
|
583 | - $status_query_results[$status] = EEM_Datetime::count(array($status_where_conditions), 'DTT_ID', true); |
|
584 | - } |
|
585 | - return $status_query_results; |
|
586 | - } |
|
587 | - |
|
588 | - |
|
589 | - |
|
590 | - /** |
|
591 | - * Returns the specific count for a given Datetime status matching any given query_params. |
|
592 | - * |
|
593 | - * @param string $status Valid string representation for Datetime status requested. (Defaults to Active). |
|
594 | - * @param array $query_params |
|
595 | - * @return int |
|
596 | - * @throws \EE_Error |
|
597 | - */ |
|
598 | - public function get_datetime_count_for_status($status = EE_Datetime::active, array $query_params = array()) |
|
599 | - { |
|
600 | - $count = $this->get_datetime_counts_by_status(array($status), $query_params); |
|
601 | - return ! empty($count[$status]) ? $count[$status] : 0; |
|
602 | - } |
|
14 | + /** |
|
15 | + * @var EEM_Datetime $_instance |
|
16 | + */ |
|
17 | + protected static $_instance; |
|
18 | + |
|
19 | + |
|
20 | + |
|
21 | + /** |
|
22 | + * private constructor to prevent direct creation |
|
23 | + * |
|
24 | + * @Constructor |
|
25 | + * @access private |
|
26 | + * @param string $timezone string representing the timezone we want to set for returned Date Time Strings (and any |
|
27 | + * incoming timezone data that gets saved). Note this just sends the timezone info to the |
|
28 | + * date time model field objects. Default is NULL (and will be assumed using the set |
|
29 | + * timezone in the 'timezone_string' wp option) |
|
30 | + * @throws \EE_Error |
|
31 | + */ |
|
32 | + protected function __construct($timezone) |
|
33 | + { |
|
34 | + $this->singular_item = __('Datetime', 'event_espresso'); |
|
35 | + $this->plural_item = __('Datetimes', 'event_espresso'); |
|
36 | + $this->_tables = array( |
|
37 | + 'Datetime' => new EE_Primary_Table('esp_datetime', 'DTT_ID'), |
|
38 | + ); |
|
39 | + $this->_fields = array( |
|
40 | + 'Datetime' => array( |
|
41 | + 'DTT_ID' => new EE_Primary_Key_Int_Field('DTT_ID', __('Datetime ID', 'event_espresso')), |
|
42 | + 'EVT_ID' => new EE_Foreign_Key_Int_Field( |
|
43 | + 'EVT_ID', __('Event ID', 'event_espresso'), false, 0, 'Event' |
|
44 | + ), |
|
45 | + 'DTT_name' => new EE_Plain_Text_Field( |
|
46 | + 'DTT_name', __('Datetime Name', 'event_espresso'), false, '' |
|
47 | + ), |
|
48 | + 'DTT_description' => new EE_Post_Content_Field( |
|
49 | + 'DTT_description', __('Description for Datetime', 'event_espresso'), false, '' |
|
50 | + ), |
|
51 | + 'DTT_EVT_start' => new EE_Datetime_Field( |
|
52 | + 'DTT_EVT_start', __('Start time/date of Event', 'event_espresso'), false, EE_Datetime_Field::now, |
|
53 | + $timezone |
|
54 | + ), |
|
55 | + 'DTT_EVT_end' => new EE_Datetime_Field( |
|
56 | + 'DTT_EVT_end', __('End time/date of Event', 'event_espresso'), false, EE_Datetime_Field::now, |
|
57 | + $timezone |
|
58 | + ), |
|
59 | + 'DTT_reg_limit' => new EE_Infinite_Integer_Field( |
|
60 | + 'DTT_reg_limit', __('Registration Limit for this time', 'event_espresso'), true, EE_INF), |
|
61 | + 'DTT_sold' => new EE_Integer_Field( |
|
62 | + 'DTT_sold', __('How many sales for this Datetime that have occurred', 'event_espresso'), true, 0 |
|
63 | + ), |
|
64 | + 'DTT_reserved' => new EE_Integer_Field('DTT_reserved', |
|
65 | + __('Quantity of tickets reserved, but not yet fully purchased', 'event_espresso'), false, 0 |
|
66 | + ), |
|
67 | + 'DTT_is_primary' => new EE_Boolean_Field( |
|
68 | + 'DTT_is_primary', __('Flag indicating datetime is primary one for event', 'event_espresso'), |
|
69 | + false, false |
|
70 | + ), |
|
71 | + 'DTT_order' => new EE_Integer_Field( |
|
72 | + 'DTT_order', __('The order in which the Datetime is displayed', 'event_espresso'), false, 0 |
|
73 | + ), |
|
74 | + 'DTT_parent' => new EE_Integer_Field( |
|
75 | + 'DTT_parent', __('Indicates what DTT_ID is the parent of this DTT_ID'), true, 0 |
|
76 | + ), |
|
77 | + 'DTT_deleted' => new EE_Trashed_Flag_Field( |
|
78 | + 'DTT_deleted', __('Flag indicating datetime is archived', 'event_espresso'), false, false |
|
79 | + ), |
|
80 | + ), |
|
81 | + ); |
|
82 | + $this->_model_relations = array( |
|
83 | + 'Ticket' => new EE_HABTM_Relation('Datetime_Ticket'), |
|
84 | + 'Event' => new EE_Belongs_To_Relation(), |
|
85 | + 'Checkin' => new EE_Has_Many_Relation(), |
|
86 | + ); |
|
87 | + $this->_model_chain_to_wp_user = 'Event'; |
|
88 | + //this model is generally available for reading |
|
89 | + $this->_cap_restriction_generators[EEM_Base::caps_read] = new EE_Restriction_Generator_Event_Related_Public('Event'); |
|
90 | + $this->_cap_restriction_generators[EEM_Base::caps_read_admin] = new EE_Restriction_Generator_Event_Related_Protected('Event'); |
|
91 | + $this->_cap_restriction_generators[EEM_Base::caps_edit] = new EE_Restriction_Generator_Event_Related_Protected('Event'); |
|
92 | + $this->_cap_restriction_generators[EEM_Base::caps_delete] = new EE_Restriction_Generator_Event_Related_Protected('Event', |
|
93 | + EEM_Base::caps_edit); |
|
94 | + parent::__construct($timezone); |
|
95 | + } |
|
96 | + |
|
97 | + |
|
98 | + |
|
99 | + /** |
|
100 | + * create new blank datetime |
|
101 | + * |
|
102 | + * @access public |
|
103 | + * @return EE_Datetime[] array on success, FALSE on fail |
|
104 | + * @throws \EE_Error |
|
105 | + */ |
|
106 | + public function create_new_blank_datetime() |
|
107 | + { |
|
108 | + //makes sure timezone is always set. |
|
109 | + $timezone_string = $this->get_timezone(); |
|
110 | + $blank_datetime = EE_Datetime::new_instance( |
|
111 | + array( |
|
112 | + 'DTT_EVT_start' => $this->current_time_for_query('DTT_EVT_start', true) + MONTH_IN_SECONDS, |
|
113 | + 'DTT_EVT_end' => $this->current_time_for_query('DTT_EVT_end', true) + MONTH_IN_SECONDS, |
|
114 | + 'DTT_order' => 1, |
|
115 | + 'DTT_reg_limit' => EE_INF, |
|
116 | + ), |
|
117 | + $timezone_string |
|
118 | + ); |
|
119 | + $blank_datetime->set_start_time($this->convert_datetime_for_query('DTT_EVT_start', '8am', 'ga', |
|
120 | + $timezone_string)); |
|
121 | + $blank_datetime->set_end_time($this->convert_datetime_for_query('DTT_EVT_end', '5pm', 'ga', $timezone_string)); |
|
122 | + return array($blank_datetime); |
|
123 | + } |
|
124 | + |
|
125 | + |
|
126 | + |
|
127 | + /** |
|
128 | + * get event start date from db |
|
129 | + * |
|
130 | + * @access public |
|
131 | + * @param int $EVT_ID |
|
132 | + * @return EE_Datetime[] array on success, FALSE on fail |
|
133 | + * @throws \EE_Error |
|
134 | + */ |
|
135 | + public function get_all_event_dates($EVT_ID = 0) |
|
136 | + { |
|
137 | + if ( ! $EVT_ID) { // on add_new_event event_id gets set to 0 |
|
138 | + return $this->create_new_blank_datetime(); |
|
139 | + } |
|
140 | + $results = $this->get_datetimes_for_event_ordered_by_DTT_order($EVT_ID); |
|
141 | + if (empty($results)) { |
|
142 | + return $this->create_new_blank_datetime(); |
|
143 | + } |
|
144 | + return $results; |
|
145 | + } |
|
146 | + |
|
147 | + |
|
148 | + |
|
149 | + /** |
|
150 | + * get all datetimes attached to an event ordered by the DTT_order field |
|
151 | + * |
|
152 | + * @public |
|
153 | + * @param int $EVT_ID event id |
|
154 | + * @param boolean $include_expired |
|
155 | + * @param boolean $include_deleted |
|
156 | + * @param int $limit If included then limit the count of results by |
|
157 | + * the given number |
|
158 | + * @return EE_Datetime[] |
|
159 | + * @throws \EE_Error |
|
160 | + */ |
|
161 | + public function get_datetimes_for_event_ordered_by_DTT_order( |
|
162 | + $EVT_ID, |
|
163 | + $include_expired = true, |
|
164 | + $include_deleted = true, |
|
165 | + $limit = null |
|
166 | + ) { |
|
167 | + //sanitize EVT_ID |
|
168 | + $EVT_ID = absint($EVT_ID); |
|
169 | + $old_assumption = $this->get_assumption_concerning_values_already_prepared_by_model_object(); |
|
170 | + $this->assume_values_already_prepared_by_model_object(EEM_Base::prepared_for_use_in_db); |
|
171 | + $where_params = array('Event.EVT_ID' => $EVT_ID); |
|
172 | + $query_params = ! empty($limit) |
|
173 | + ? array( |
|
174 | + $where_params, |
|
175 | + 'limit' => $limit, |
|
176 | + 'order_by' => array('DTT_order' => 'ASC'), |
|
177 | + 'default_where_conditions' => 'none', |
|
178 | + ) |
|
179 | + : array( |
|
180 | + $where_params, |
|
181 | + 'order_by' => array('DTT_order' => 'ASC'), |
|
182 | + 'default_where_conditions' => 'none', |
|
183 | + ); |
|
184 | + if ( ! $include_expired) { |
|
185 | + $query_params[0]['DTT_EVT_end'] = array('>=', current_time('mysql', true)); |
|
186 | + } |
|
187 | + if ($include_deleted) { |
|
188 | + $query_params[0]['DTT_deleted'] = array('IN', array(true, false)); |
|
189 | + } |
|
190 | + /** @var EE_Datetime[] $result */ |
|
191 | + $result = $this->get_all($query_params); |
|
192 | + $this->assume_values_already_prepared_by_model_object($old_assumption); |
|
193 | + return $result; |
|
194 | + } |
|
195 | + |
|
196 | + |
|
197 | + |
|
198 | + /** |
|
199 | + * Gets the datetimes for the event (with the given limit), and orders them by "importance". By importance, we mean |
|
200 | + * that the primary datetimes are most important (DEPRECATED FOR NOW), and then the earlier datetimes are the most |
|
201 | + * important. Maybe we'll want this to take into account datetimes that haven't already passed, but we don't yet. |
|
202 | + * |
|
203 | + * @param int $EVT_ID |
|
204 | + * @param int $limit |
|
205 | + * @return EE_Datetime[]|EE_Base_Class[] |
|
206 | + * @throws \EE_Error |
|
207 | + */ |
|
208 | + public function get_datetimes_for_event_ordered_by_importance($EVT_ID = 0, $limit = null) |
|
209 | + { |
|
210 | + return $this->get_all( |
|
211 | + array( |
|
212 | + array('Event.EVT_ID' => $EVT_ID), |
|
213 | + 'limit' => $limit, |
|
214 | + 'order_by' => array('DTT_EVT_start' => 'ASC'), |
|
215 | + 'default_where_conditions' => 'none', |
|
216 | + ) |
|
217 | + ); |
|
218 | + } |
|
219 | + |
|
220 | + |
|
221 | + |
|
222 | + /** |
|
223 | + * @param int $EVT_ID |
|
224 | + * @param boolean $include_expired |
|
225 | + * @param boolean $include_deleted |
|
226 | + * @return EE_Datetime |
|
227 | + * @throws \EE_Error |
|
228 | + */ |
|
229 | + public function get_oldest_datetime_for_event($EVT_ID, $include_expired = false, $include_deleted = false) |
|
230 | + { |
|
231 | + $results = $this->get_datetimes_for_event_ordered_by_start_time($EVT_ID, $include_expired, $include_deleted, 1); |
|
232 | + if ($results) { |
|
233 | + return array_shift($results); |
|
234 | + } else { |
|
235 | + return null; |
|
236 | + } |
|
237 | + } |
|
238 | + |
|
239 | + |
|
240 | + |
|
241 | + /** |
|
242 | + * Gets the 'primary' datetime for an event. |
|
243 | + * |
|
244 | + * @param int $EVT_ID |
|
245 | + * @param bool $try_to_exclude_expired |
|
246 | + * @param bool $try_to_exclude_deleted |
|
247 | + * @return \EE_Datetime |
|
248 | + * @throws \EE_Error |
|
249 | + */ |
|
250 | + public function get_primary_datetime_for_event( |
|
251 | + $EVT_ID, |
|
252 | + $try_to_exclude_expired = true, |
|
253 | + $try_to_exclude_deleted = true |
|
254 | + ) { |
|
255 | + if ($try_to_exclude_expired) { |
|
256 | + $non_expired = $this->get_oldest_datetime_for_event($EVT_ID, false, false); |
|
257 | + if ($non_expired) { |
|
258 | + return $non_expired; |
|
259 | + } |
|
260 | + } |
|
261 | + if ($try_to_exclude_deleted) { |
|
262 | + $expired_even = $this->get_oldest_datetime_for_event($EVT_ID, true); |
|
263 | + if ($expired_even) { |
|
264 | + return $expired_even; |
|
265 | + } |
|
266 | + } |
|
267 | + return $this->get_oldest_datetime_for_event($EVT_ID, true, true); |
|
268 | + } |
|
269 | + |
|
270 | + |
|
271 | + |
|
272 | + /** |
|
273 | + * Gets ALL the datetimes for an event (including trashed ones, for now), ordered |
|
274 | + * only by start date |
|
275 | + * |
|
276 | + * @param int $EVT_ID |
|
277 | + * @param boolean $include_expired |
|
278 | + * @param boolean $include_deleted |
|
279 | + * @param int $limit |
|
280 | + * @return EE_Datetime[] |
|
281 | + * @throws \EE_Error |
|
282 | + */ |
|
283 | + public function get_datetimes_for_event_ordered_by_start_time( |
|
284 | + $EVT_ID, |
|
285 | + $include_expired = true, |
|
286 | + $include_deleted = true, |
|
287 | + $limit = null |
|
288 | + ) { |
|
289 | + //sanitize EVT_ID |
|
290 | + $EVT_ID = absint($EVT_ID); |
|
291 | + $old_assumption = $this->get_assumption_concerning_values_already_prepared_by_model_object(); |
|
292 | + $this->assume_values_already_prepared_by_model_object(EEM_Base::prepared_for_use_in_db); |
|
293 | + $query_params = array(array('Event.EVT_ID' => $EVT_ID), 'order_by' => array('DTT_EVT_start' => 'asc')); |
|
294 | + if ( ! $include_expired) { |
|
295 | + $query_params[0]['DTT_EVT_end'] = array('>=', current_time('mysql', true)); |
|
296 | + } |
|
297 | + if ($include_deleted) { |
|
298 | + $query_params[0]['DTT_deleted'] = array('IN', array(true, false)); |
|
299 | + } |
|
300 | + if ($limit) { |
|
301 | + $query_params['limit'] = $limit; |
|
302 | + } |
|
303 | + /** @var EE_Datetime[] $result */ |
|
304 | + $result = $this->get_all($query_params); |
|
305 | + $this->assume_values_already_prepared_by_model_object($old_assumption); |
|
306 | + return $result; |
|
307 | + } |
|
308 | + |
|
309 | + |
|
310 | + |
|
311 | + /** |
|
312 | + * Gets ALL the datetimes for an ticket (including trashed ones, for now), ordered |
|
313 | + * only by start date |
|
314 | + * |
|
315 | + * @param int $TKT_ID |
|
316 | + * @param boolean $include_expired |
|
317 | + * @param boolean $include_deleted |
|
318 | + * @param int $limit |
|
319 | + * @return EE_Datetime[] |
|
320 | + * @throws \EE_Error |
|
321 | + */ |
|
322 | + public function get_datetimes_for_ticket_ordered_by_start_time( |
|
323 | + $TKT_ID, |
|
324 | + $include_expired = true, |
|
325 | + $include_deleted = true, |
|
326 | + $limit = null |
|
327 | + ) { |
|
328 | + //sanitize TKT_ID |
|
329 | + $TKT_ID = absint($TKT_ID); |
|
330 | + $old_assumption = $this->get_assumption_concerning_values_already_prepared_by_model_object(); |
|
331 | + $this->assume_values_already_prepared_by_model_object(EEM_Base::prepared_for_use_in_db); |
|
332 | + $query_params = array(array('Ticket.TKT_ID' => $TKT_ID), 'order_by' => array('DTT_EVT_start' => 'asc')); |
|
333 | + if ( ! $include_expired) { |
|
334 | + $query_params[0]['DTT_EVT_end'] = array('>=', current_time('mysql', true)); |
|
335 | + } |
|
336 | + if ($include_deleted) { |
|
337 | + $query_params[0]['DTT_deleted'] = array('IN', array(true, false)); |
|
338 | + } |
|
339 | + if ($limit) { |
|
340 | + $query_params['limit'] = $limit; |
|
341 | + } |
|
342 | + /** @var EE_Datetime[] $result */ |
|
343 | + $result = $this->get_all($query_params); |
|
344 | + $this->assume_values_already_prepared_by_model_object($old_assumption); |
|
345 | + return $result; |
|
346 | + } |
|
347 | + |
|
348 | + |
|
349 | + |
|
350 | + /** |
|
351 | + * Gets all the datetimes for a ticket (including trashed ones, for now), ordered by the DTT_order for the |
|
352 | + * datetimes. |
|
353 | + * |
|
354 | + * @param int $TKT_ID ID of ticket to retrieve the datetimes for |
|
355 | + * @param boolean $include_expired whether to include expired datetimes or not |
|
356 | + * @param boolean $include_deleted whether to include trashed datetimes or not. |
|
357 | + * @param int|null $limit if null, no limit, if int then limit results by |
|
358 | + * that number |
|
359 | + * @return EE_Datetime[] |
|
360 | + * @throws \EE_Error |
|
361 | + */ |
|
362 | + public function get_datetimes_for_ticket_ordered_by_DTT_order( |
|
363 | + $TKT_ID, |
|
364 | + $include_expired = true, |
|
365 | + $include_deleted = true, |
|
366 | + $limit = null |
|
367 | + ) { |
|
368 | + //sanitize id. |
|
369 | + $TKT_ID = absint($TKT_ID); |
|
370 | + $old_assumption = $this->get_assumption_concerning_values_already_prepared_by_model_object(); |
|
371 | + $this->assume_values_already_prepared_by_model_object(EEM_Base::prepared_for_use_in_db); |
|
372 | + $where_params = array('Ticket.TKT_ID' => $TKT_ID); |
|
373 | + $query_params = array($where_params, 'order_by' => array('DTT_order' => 'ASC')); |
|
374 | + if ( ! $include_expired) { |
|
375 | + $query_params[0]['DTT_EVT_end'] = array('>=', current_time('mysql', true)); |
|
376 | + } |
|
377 | + if ($include_deleted) { |
|
378 | + $query_params[0]['DTT_deleted'] = array('IN', array(true, false)); |
|
379 | + } |
|
380 | + if ($limit) { |
|
381 | + $query_params['limit'] = $limit; |
|
382 | + } |
|
383 | + /** @var EE_Datetime[] $result */ |
|
384 | + $result = $this->get_all($query_params); |
|
385 | + $this->assume_values_already_prepared_by_model_object($old_assumption); |
|
386 | + return $result; |
|
387 | + } |
|
388 | + |
|
389 | + |
|
390 | + |
|
391 | + /** |
|
392 | + * Gets the most important datetime for a particular event (ie, the primary event usually. But if for some WACK |
|
393 | + * reason it doesn't exist, we consider the earliest event the most important) |
|
394 | + * |
|
395 | + * @param int $EVT_ID |
|
396 | + * @return EE_Datetime |
|
397 | + * @throws \EE_Error |
|
398 | + */ |
|
399 | + public function get_most_important_datetime_for_event($EVT_ID) |
|
400 | + { |
|
401 | + $results = $this->get_datetimes_for_event_ordered_by_importance($EVT_ID, 1); |
|
402 | + if ($results) { |
|
403 | + return array_shift($results); |
|
404 | + } else { |
|
405 | + return null; |
|
406 | + } |
|
407 | + } |
|
408 | + |
|
409 | + |
|
410 | + |
|
411 | + /** |
|
412 | + * This returns a wpdb->results Array of all DTT month and years matching the incoming query params and |
|
413 | + * grouped by month and year. |
|
414 | + * |
|
415 | + * @param array $where_params Array of query_params as described in the comments for EEM_Base::get_all() |
|
416 | + * @param string $evt_active_status A string representing the evt active status to filter the months by. |
|
417 | + * Can be: |
|
418 | + * - '' = no filter |
|
419 | + * - upcoming = Published events with at least one upcoming datetime. |
|
420 | + * - expired = Events with all datetimes expired. |
|
421 | + * - active = Events that are published and have at least one datetime that |
|
422 | + * starts before now and ends after now. |
|
423 | + * - inactive = Events that are either not published. |
|
424 | + * @return EE_Base_Class[] |
|
425 | + * @throws \EE_Error |
|
426 | + */ |
|
427 | + public function get_dtt_months_and_years($where_params, $evt_active_status = '') |
|
428 | + { |
|
429 | + $current_time_for_DTT_EVT_start = $this->current_time_for_query('DTT_EVT_start'); |
|
430 | + $current_time_for_DTT_EVT_end = $this->current_time_for_query('DTT_EVT_end'); |
|
431 | + switch ($evt_active_status) { |
|
432 | + case 'upcoming' : |
|
433 | + $where_params['Event.status'] = 'publish'; |
|
434 | + //if there are already query_params matching DTT_EVT_start then we need to modify that to add them. |
|
435 | + if (isset($where_params['DTT_EVT_start'])) { |
|
436 | + $where_params['DTT_EVT_start*****'] = $where_params['DTT_EVT_start']; |
|
437 | + } |
|
438 | + $where_params['DTT_EVT_start'] = array('>', $current_time_for_DTT_EVT_start); |
|
439 | + break; |
|
440 | + case 'expired' : |
|
441 | + if (isset($where_params['Event.status'])) { |
|
442 | + unset($where_params['Event.status']); |
|
443 | + } |
|
444 | + //get events to exclude |
|
445 | + $exclude_query[0] = array_merge($where_params, |
|
446 | + array('DTT_EVT_end' => array('>', $current_time_for_DTT_EVT_end))); |
|
447 | + //first get all events that have datetimes where its not expired. |
|
448 | + $event_ids = $this->_get_all_wpdb_results($exclude_query, OBJECT_K, 'Datetime.EVT_ID'); |
|
449 | + $event_ids = array_keys($event_ids); |
|
450 | + if (isset($where_params['DTT_EVT_end'])) { |
|
451 | + $where_params['DTT_EVT_end****'] = $where_params['DTT_EVT_end']; |
|
452 | + } |
|
453 | + $where_params['DTT_EVT_end'] = array('<', $current_time_for_DTT_EVT_end); |
|
454 | + $where_params['Event.EVT_ID'] = array('NOT IN', $event_ids); |
|
455 | + break; |
|
456 | + case 'active' : |
|
457 | + $where_params['Event.status'] = 'publish'; |
|
458 | + if (isset($where_params['DTT_EVT_start'])) { |
|
459 | + $where_params['Datetime.DTT_EVT_start******'] = $where_params['DTT_EVT_start']; |
|
460 | + } |
|
461 | + if (isset($where_params['Datetime.DTT_EVT_end'])) { |
|
462 | + $where_params['Datetime.DTT_EVT_end*****'] = $where_params['DTT_EVT_end']; |
|
463 | + } |
|
464 | + $where_params['DTT_EVT_start'] = array('<', $current_time_for_DTT_EVT_start); |
|
465 | + $where_params['DTT_EVT_end'] = array('>', $current_time_for_DTT_EVT_end); |
|
466 | + break; |
|
467 | + case 'inactive' : |
|
468 | + if (isset($where_params['Event.status'])) { |
|
469 | + unset($where_params['Event.status']); |
|
470 | + } |
|
471 | + if (isset($where_params['OR'])) { |
|
472 | + $where_params['AND']['OR'] = $where_params['OR']; |
|
473 | + } |
|
474 | + if (isset($where_params['DTT_EVT_end'])) { |
|
475 | + $where_params['AND']['DTT_EVT_end****'] = $where_params['DTT_EVT_end']; |
|
476 | + unset($where_params['DTT_EVT_end']); |
|
477 | + } |
|
478 | + if (isset($where_params['DTT_EVT_start'])) { |
|
479 | + $where_params['AND']['DTT_EVT_start'] = $where_params['DTT_EVT_start']; |
|
480 | + unset($where_params['DTT_EVT_start']); |
|
481 | + } |
|
482 | + $where_params['AND']['Event.status'] = array('!=', 'publish'); |
|
483 | + break; |
|
484 | + } |
|
485 | + $query_params[0] = $where_params; |
|
486 | + $query_params['group_by'] = array('dtt_year', 'dtt_month'); |
|
487 | + $query_params['order_by'] = array('DTT_EVT_start' => 'DESC'); |
|
488 | + $query_interval = EEH_DTT_Helper::get_sql_query_interval_for_offset($this->get_timezone(), 'DTT_EVT_start'); |
|
489 | + $columns_to_select = array( |
|
490 | + 'dtt_year' => array('YEAR(' . $query_interval . ')', '%s'), |
|
491 | + 'dtt_month' => array('MONTHNAME(' . $query_interval . ')', '%s'), |
|
492 | + 'dtt_month_num' => array('MONTH(' . $query_interval . ')', '%s'), |
|
493 | + ); |
|
494 | + return $this->_get_all_wpdb_results($query_params, OBJECT, $columns_to_select); |
|
495 | + } |
|
496 | + |
|
497 | + |
|
498 | + |
|
499 | + /** |
|
500 | + * Updates the DTT_sold attribute on each datetime (based on the registrations |
|
501 | + * for the tickets for each datetime) |
|
502 | + * |
|
503 | + * @param EE_Base_Class[]|EE_Datetime[] $datetimes |
|
504 | + * @throws \EE_Error |
|
505 | + */ |
|
506 | + public function update_sold($datetimes) |
|
507 | + { |
|
508 | + EE_Error::doing_it_wrong( |
|
509 | + __FUNCTION__, |
|
510 | + esc_html__( |
|
511 | + 'Please use \EEM_Ticket::update_tickets_sold() instead which will in turn correctly update both the Ticket AND Datetime counts.', |
|
512 | + 'event_espresso' |
|
513 | + ), |
|
514 | + '4.9.32.rc.005' |
|
515 | + ); |
|
516 | + foreach ($datetimes as $datetime) { |
|
517 | + $datetime->update_sold(); |
|
518 | + } |
|
519 | + } |
|
520 | + |
|
521 | + |
|
522 | + |
|
523 | + /** |
|
524 | + * Gets the total number of tickets available at a particular datetime |
|
525 | + * (does NOT take into account the datetime's spaces available) |
|
526 | + * |
|
527 | + * @param int $DTT_ID |
|
528 | + * @param array $query_params |
|
529 | + * @return int of tickets available. If sold out, return less than 1. If infinite, returns EE_INF, IF there are NO |
|
530 | + * tickets attached to datetime then FALSE is returned. |
|
531 | + */ |
|
532 | + public function sum_tickets_currently_available_at_datetime($DTT_ID, array $query_params = array()) |
|
533 | + { |
|
534 | + $datetime = $this->get_one_by_ID($DTT_ID); |
|
535 | + if ($datetime instanceof EE_Datetime) { |
|
536 | + return $datetime->tickets_remaining($query_params); |
|
537 | + } |
|
538 | + return 0; |
|
539 | + } |
|
540 | + |
|
541 | + |
|
542 | + |
|
543 | + /** |
|
544 | + * This returns an array of counts of datetimes in the database for each Datetime status that can be queried. |
|
545 | + * |
|
546 | + * @param array $stati_to_include If included you can restrict the statuses we return counts for by including the |
|
547 | + * stati you want counts for as values in the array. An empty array returns counts |
|
548 | + * for all valid stati. |
|
549 | + * @param array $query_params If included can be used to refine the conditions for returning the count (i.e. |
|
550 | + * only for Datetimes connected to a specific event, or specific ticket. |
|
551 | + * @return array The value returned is an array indexed by Datetime Status and the values are the counts. The |
|
552 | + * @throws \EE_Error |
|
553 | + * stati used as index keys are: EE_Datetime::active EE_Datetime::upcoming EE_Datetime::expired |
|
554 | + */ |
|
555 | + public function get_datetime_counts_by_status(array $stati_to_include = array(), array $query_params = array()) |
|
556 | + { |
|
557 | + //only accept where conditions for this query. |
|
558 | + $_where = isset($query_params[0]) ? $query_params[0] : array(); |
|
559 | + $status_query_args = array( |
|
560 | + EE_Datetime::active => array_merge( |
|
561 | + $_where, |
|
562 | + array('DTT_EVT_start' => array('<', time()), 'DTT_EVT_end' => array('>', time())) |
|
563 | + ), |
|
564 | + EE_Datetime::upcoming => array_merge( |
|
565 | + $_where, |
|
566 | + array('DTT_EVT_start' => array('>', time())) |
|
567 | + ), |
|
568 | + EE_Datetime::expired => array_merge( |
|
569 | + $_where, |
|
570 | + array('DTT_EVT_end' => array('<', time())) |
|
571 | + ), |
|
572 | + ); |
|
573 | + if ( ! empty($stati_to_include)) { |
|
574 | + foreach (array_keys($status_query_args) as $status) { |
|
575 | + if ( ! in_array($status, $stati_to_include, true)) { |
|
576 | + unset($status_query_args[$status]); |
|
577 | + } |
|
578 | + } |
|
579 | + } |
|
580 | + //loop through and query counts for each stati. |
|
581 | + $status_query_results = array(); |
|
582 | + foreach ($status_query_args as $status => $status_where_conditions) { |
|
583 | + $status_query_results[$status] = EEM_Datetime::count(array($status_where_conditions), 'DTT_ID', true); |
|
584 | + } |
|
585 | + return $status_query_results; |
|
586 | + } |
|
587 | + |
|
588 | + |
|
589 | + |
|
590 | + /** |
|
591 | + * Returns the specific count for a given Datetime status matching any given query_params. |
|
592 | + * |
|
593 | + * @param string $status Valid string representation for Datetime status requested. (Defaults to Active). |
|
594 | + * @param array $query_params |
|
595 | + * @return int |
|
596 | + * @throws \EE_Error |
|
597 | + */ |
|
598 | + public function get_datetime_count_for_status($status = EE_Datetime::active, array $query_params = array()) |
|
599 | + { |
|
600 | + $count = $this->get_datetime_counts_by_status(array($status), $query_params); |
|
601 | + return ! empty($count[$status]) ? $count[$status] : 0; |
|
602 | + } |
|
603 | 603 | |
604 | 604 | |
605 | 605 |