@@ -16,12 +16,12 @@ |
||
16 | 16 | class EE_Single_Registration_Line_Item_Filter extends EE_Specific_Registrations_Line_Item_Filter |
17 | 17 | { |
18 | 18 | |
19 | - /** |
|
20 | - * |
|
21 | - * @param EE_Registration $registration |
|
22 | - */ |
|
23 | - public function __construct($registration) |
|
24 | - { |
|
25 | - parent::__construct(array($registration)); |
|
26 | - } |
|
19 | + /** |
|
20 | + * |
|
21 | + * @param EE_Registration $registration |
|
22 | + */ |
|
23 | + public function __construct($registration) |
|
24 | + { |
|
25 | + parent::__construct(array($registration)); |
|
26 | + } |
|
27 | 27 | } |
@@ -13,182 +13,182 @@ |
||
13 | 13 | class EE_Specific_Registrations_Line_Item_Filter extends EE_Line_Item_Filter_Base |
14 | 14 | { |
15 | 15 | |
16 | - /** |
|
17 | - * array of line item codes and their corresponding quantities for registrations |
|
18 | - * |
|
19 | - * @type array $_line_item_registrations |
|
20 | - */ |
|
21 | - protected $_line_item_registrations = array(); |
|
16 | + /** |
|
17 | + * array of line item codes and their corresponding quantities for registrations |
|
18 | + * |
|
19 | + * @type array $_line_item_registrations |
|
20 | + */ |
|
21 | + protected $_line_item_registrations = array(); |
|
22 | 22 | |
23 | - /** |
|
24 | - * Just kept in case we want it someday. Currently unused |
|
25 | - * |
|
26 | - * @var EE_Registration[] |
|
27 | - */ |
|
28 | - protected $_registrations = array(); |
|
23 | + /** |
|
24 | + * Just kept in case we want it someday. Currently unused |
|
25 | + * |
|
26 | + * @var EE_Registration[] |
|
27 | + */ |
|
28 | + protected $_registrations = array(); |
|
29 | 29 | |
30 | - /** |
|
31 | - * @var EE_Registration |
|
32 | - */ |
|
33 | - protected $_current_registration; |
|
30 | + /** |
|
31 | + * @var EE_Registration |
|
32 | + */ |
|
33 | + protected $_current_registration; |
|
34 | 34 | |
35 | - /** |
|
36 | - * these reg statuses should NOT increment the line item quantity |
|
37 | - * |
|
38 | - * @var array |
|
39 | - */ |
|
40 | - protected $_closed_reg_statuses = array(); |
|
35 | + /** |
|
36 | + * these reg statuses should NOT increment the line item quantity |
|
37 | + * |
|
38 | + * @var array |
|
39 | + */ |
|
40 | + protected $_closed_reg_statuses = array(); |
|
41 | 41 | |
42 | 42 | |
43 | - /** |
|
44 | - * EE_Billable_Line_Item_Filter constructor. |
|
45 | - * |
|
46 | - * @param EE_Registration[] $registrations |
|
47 | - * @throws EE_Error |
|
48 | - */ |
|
49 | - public function __construct($registrations) |
|
50 | - { |
|
51 | - $this->_registrations = $registrations; |
|
52 | - $this->_calculate_registrations_per_line_item_code($registrations); |
|
53 | - // these reg statuses should NOT increment the line item quantity |
|
54 | - $this->_closed_reg_statuses = EEM_Registration::closed_reg_statuses(); |
|
55 | - } |
|
43 | + /** |
|
44 | + * EE_Billable_Line_Item_Filter constructor. |
|
45 | + * |
|
46 | + * @param EE_Registration[] $registrations |
|
47 | + * @throws EE_Error |
|
48 | + */ |
|
49 | + public function __construct($registrations) |
|
50 | + { |
|
51 | + $this->_registrations = $registrations; |
|
52 | + $this->_calculate_registrations_per_line_item_code($registrations); |
|
53 | + // these reg statuses should NOT increment the line item quantity |
|
54 | + $this->_closed_reg_statuses = EEM_Registration::closed_reg_statuses(); |
|
55 | + } |
|
56 | 56 | |
57 | 57 | |
58 | - /** |
|
59 | - * sets the _line_item_registrations from the provided registrations |
|
60 | - * |
|
61 | - * @param EE_Registration[] $registrations |
|
62 | - * @return void |
|
63 | - * @throws EE_Error |
|
64 | - */ |
|
65 | - protected function _calculate_registrations_per_line_item_code($registrations) |
|
66 | - { |
|
67 | - foreach ($registrations as $registration) { |
|
68 | - $line_item_code = EEM_Line_Item::instance()->get_var( |
|
69 | - EEM_Line_Item::instance()->line_item_for_registration_query_params( |
|
70 | - $registration, |
|
71 | - array('limit' => 1) |
|
72 | - ), |
|
73 | - 'LIN_code' |
|
74 | - ); |
|
75 | - if ($line_item_code) { |
|
76 | - if (! isset($this->_line_item_registrations[ $line_item_code ])) { |
|
77 | - $this->_line_item_registrations[ $line_item_code ] = array(); |
|
78 | - } |
|
79 | - $this->_line_item_registrations[ $line_item_code ][ $registration->ID() ] = $registration; |
|
80 | - } |
|
81 | - } |
|
82 | - } |
|
58 | + /** |
|
59 | + * sets the _line_item_registrations from the provided registrations |
|
60 | + * |
|
61 | + * @param EE_Registration[] $registrations |
|
62 | + * @return void |
|
63 | + * @throws EE_Error |
|
64 | + */ |
|
65 | + protected function _calculate_registrations_per_line_item_code($registrations) |
|
66 | + { |
|
67 | + foreach ($registrations as $registration) { |
|
68 | + $line_item_code = EEM_Line_Item::instance()->get_var( |
|
69 | + EEM_Line_Item::instance()->line_item_for_registration_query_params( |
|
70 | + $registration, |
|
71 | + array('limit' => 1) |
|
72 | + ), |
|
73 | + 'LIN_code' |
|
74 | + ); |
|
75 | + if ($line_item_code) { |
|
76 | + if (! isset($this->_line_item_registrations[ $line_item_code ])) { |
|
77 | + $this->_line_item_registrations[ $line_item_code ] = array(); |
|
78 | + } |
|
79 | + $this->_line_item_registrations[ $line_item_code ][ $registration->ID() ] = $registration; |
|
80 | + } |
|
81 | + } |
|
82 | + } |
|
83 | 83 | |
84 | 84 | |
85 | - /** |
|
86 | - * Creates a duplicate of the line item tree, except only includes billable items |
|
87 | - * and the portion of line items attributed to billable things |
|
88 | - * |
|
89 | - * @param EEI_Line_Item $line_item |
|
90 | - * @return EEI_Line_Item |
|
91 | - * @throws EE_Error |
|
92 | - */ |
|
93 | - public function process(EEI_Line_Item $line_item) |
|
94 | - { |
|
95 | - $this->_adjust_line_item_quantity($line_item); |
|
96 | - if (! $line_item->children()) { |
|
97 | - return $line_item; |
|
98 | - } |
|
99 | - // the original running total (taking ALL tickets into account) |
|
100 | - $running_total_of_children = 0; |
|
101 | - // the new running total (only taking the specified ticket quantities into account) |
|
102 | - $running_total_of_children_under_consideration = 0; |
|
103 | - // let's also track the quantity of tickets that pertain to the registrations |
|
104 | - $total_child_ticket_quantity = 0; |
|
105 | - foreach ($line_item->children() as $child_line_item) { |
|
106 | - $original_li_total = $child_line_item->is_percent() |
|
107 | - ? $running_total_of_children * $child_line_item->percent() / 100 |
|
108 | - : $child_line_item->unit_price() * $child_line_item->quantity(); |
|
109 | - $this->process($child_line_item); |
|
110 | - // If this line item is a normal line item that isn't for a ticket, |
|
111 | - // we want to modify its total (and unit price if not a percentage line item) |
|
112 | - // so it reflects only that portion of the surcharge/discount shared by these registrations |
|
113 | - if ($child_line_item->type() === EEM_Line_Item::type_line_item |
|
114 | - && $child_line_item->OBJ_type() !== 'Ticket' |
|
115 | - ) { |
|
116 | - $percent_of_running_total = $running_total_of_children |
|
117 | - ? $original_li_total / $running_total_of_children |
|
118 | - : 0; |
|
119 | - $child_line_item->set_total( |
|
120 | - $running_total_of_children_under_consideration * $percent_of_running_total |
|
121 | - ); |
|
122 | - if (! $child_line_item->is_percent()) { |
|
123 | - $child_line_item->set_unit_price($child_line_item->total() / $child_line_item->quantity()); |
|
124 | - } |
|
125 | - } elseif (// make sure this item's quantity and total matches its parent |
|
126 | - $line_item->type() === EEM_Line_Item::type_line_item |
|
127 | - && $line_item->OBJ_type() === 'Ticket' |
|
128 | - // but not if it's a percentage modifier |
|
129 | - && ! $child_line_item->is_percent() |
|
130 | - && ! ( |
|
131 | - // or a cancellation |
|
132 | - $child_line_item->is_cancelled() |
|
133 | - && ! ( |
|
134 | - // unless it IS a cancellation and the current registration is cancelled |
|
135 | - $child_line_item->is_cancelled() |
|
136 | - && $this->_current_registration instanceof EE_Registration |
|
137 | - && in_array($this->_current_registration->status_ID(), $this->_closed_reg_statuses, true) |
|
138 | - ) |
|
139 | - ) |
|
140 | - ) { |
|
141 | - $child_line_item->set_quantity($line_item->quantity()); |
|
142 | - $child_line_item->set_total($child_line_item->unit_price() * $child_line_item->quantity()); |
|
143 | - } |
|
144 | - $running_total_of_children += $original_li_total; |
|
145 | - $running_total_of_children_under_consideration += $child_line_item->total(); |
|
146 | - if ($child_line_item->OBJ_type() === 'Ticket') { |
|
147 | - $total_child_ticket_quantity += $child_line_item->quantity(); |
|
148 | - } |
|
149 | - } |
|
150 | - $line_item->set_total($running_total_of_children_under_consideration); |
|
151 | - if ($line_item->quantity()) { |
|
152 | - $line_item->set_unit_price($running_total_of_children_under_consideration / $line_item->quantity()); |
|
153 | - } else { |
|
154 | - $line_item->set_unit_price(0); |
|
155 | - } |
|
156 | - if ($line_item->OBJ_type() === 'Event') { |
|
157 | - $line_item->set_quantity($total_child_ticket_quantity); |
|
158 | - } |
|
159 | - return $line_item; |
|
160 | - } |
|
85 | + /** |
|
86 | + * Creates a duplicate of the line item tree, except only includes billable items |
|
87 | + * and the portion of line items attributed to billable things |
|
88 | + * |
|
89 | + * @param EEI_Line_Item $line_item |
|
90 | + * @return EEI_Line_Item |
|
91 | + * @throws EE_Error |
|
92 | + */ |
|
93 | + public function process(EEI_Line_Item $line_item) |
|
94 | + { |
|
95 | + $this->_adjust_line_item_quantity($line_item); |
|
96 | + if (! $line_item->children()) { |
|
97 | + return $line_item; |
|
98 | + } |
|
99 | + // the original running total (taking ALL tickets into account) |
|
100 | + $running_total_of_children = 0; |
|
101 | + // the new running total (only taking the specified ticket quantities into account) |
|
102 | + $running_total_of_children_under_consideration = 0; |
|
103 | + // let's also track the quantity of tickets that pertain to the registrations |
|
104 | + $total_child_ticket_quantity = 0; |
|
105 | + foreach ($line_item->children() as $child_line_item) { |
|
106 | + $original_li_total = $child_line_item->is_percent() |
|
107 | + ? $running_total_of_children * $child_line_item->percent() / 100 |
|
108 | + : $child_line_item->unit_price() * $child_line_item->quantity(); |
|
109 | + $this->process($child_line_item); |
|
110 | + // If this line item is a normal line item that isn't for a ticket, |
|
111 | + // we want to modify its total (and unit price if not a percentage line item) |
|
112 | + // so it reflects only that portion of the surcharge/discount shared by these registrations |
|
113 | + if ($child_line_item->type() === EEM_Line_Item::type_line_item |
|
114 | + && $child_line_item->OBJ_type() !== 'Ticket' |
|
115 | + ) { |
|
116 | + $percent_of_running_total = $running_total_of_children |
|
117 | + ? $original_li_total / $running_total_of_children |
|
118 | + : 0; |
|
119 | + $child_line_item->set_total( |
|
120 | + $running_total_of_children_under_consideration * $percent_of_running_total |
|
121 | + ); |
|
122 | + if (! $child_line_item->is_percent()) { |
|
123 | + $child_line_item->set_unit_price($child_line_item->total() / $child_line_item->quantity()); |
|
124 | + } |
|
125 | + } elseif (// make sure this item's quantity and total matches its parent |
|
126 | + $line_item->type() === EEM_Line_Item::type_line_item |
|
127 | + && $line_item->OBJ_type() === 'Ticket' |
|
128 | + // but not if it's a percentage modifier |
|
129 | + && ! $child_line_item->is_percent() |
|
130 | + && ! ( |
|
131 | + // or a cancellation |
|
132 | + $child_line_item->is_cancelled() |
|
133 | + && ! ( |
|
134 | + // unless it IS a cancellation and the current registration is cancelled |
|
135 | + $child_line_item->is_cancelled() |
|
136 | + && $this->_current_registration instanceof EE_Registration |
|
137 | + && in_array($this->_current_registration->status_ID(), $this->_closed_reg_statuses, true) |
|
138 | + ) |
|
139 | + ) |
|
140 | + ) { |
|
141 | + $child_line_item->set_quantity($line_item->quantity()); |
|
142 | + $child_line_item->set_total($child_line_item->unit_price() * $child_line_item->quantity()); |
|
143 | + } |
|
144 | + $running_total_of_children += $original_li_total; |
|
145 | + $running_total_of_children_under_consideration += $child_line_item->total(); |
|
146 | + if ($child_line_item->OBJ_type() === 'Ticket') { |
|
147 | + $total_child_ticket_quantity += $child_line_item->quantity(); |
|
148 | + } |
|
149 | + } |
|
150 | + $line_item->set_total($running_total_of_children_under_consideration); |
|
151 | + if ($line_item->quantity()) { |
|
152 | + $line_item->set_unit_price($running_total_of_children_under_consideration / $line_item->quantity()); |
|
153 | + } else { |
|
154 | + $line_item->set_unit_price(0); |
|
155 | + } |
|
156 | + if ($line_item->OBJ_type() === 'Event') { |
|
157 | + $line_item->set_quantity($total_child_ticket_quantity); |
|
158 | + } |
|
159 | + return $line_item; |
|
160 | + } |
|
161 | 161 | |
162 | 162 | |
163 | - /** |
|
164 | - * Adjusts quantities for line items for tickets according to the registrations provided |
|
165 | - * in the constructor |
|
166 | - * |
|
167 | - * @param EEI_Line_Item $line_item |
|
168 | - * @return EEI_Line_Item |
|
169 | - */ |
|
170 | - protected function _adjust_line_item_quantity(EEI_Line_Item $line_item) |
|
171 | - { |
|
172 | - // is this a ticket ? |
|
173 | - if ($line_item->type() === EEM_Line_Item::type_line_item && $line_item->OBJ_type() === 'Ticket') { |
|
174 | - $this->_current_registration = null; |
|
175 | - $quantity = 0; |
|
176 | - // if this ticket is billable at this moment, then we should have a positive quantity |
|
177 | - if (isset($this->_line_item_registrations[ $line_item->code() ]) |
|
178 | - && is_array($this->_line_item_registrations[ $line_item->code() ]) |
|
179 | - ) { |
|
180 | - // set quantity based on number of open registrations for this ticket |
|
181 | - foreach ($this->_line_item_registrations[ $line_item->code() ] as $registration) { |
|
182 | - if ($registration instanceof EE_Registration |
|
183 | - ) { |
|
184 | - $quantity++; |
|
185 | - $this->_current_registration = $registration; |
|
186 | - } |
|
187 | - } |
|
188 | - } |
|
189 | - $line_item->set_quantity($quantity); |
|
190 | - $line_item->set_total($line_item->unit_price() * $line_item->quantity()); |
|
191 | - } |
|
192 | - return $line_item; |
|
193 | - } |
|
163 | + /** |
|
164 | + * Adjusts quantities for line items for tickets according to the registrations provided |
|
165 | + * in the constructor |
|
166 | + * |
|
167 | + * @param EEI_Line_Item $line_item |
|
168 | + * @return EEI_Line_Item |
|
169 | + */ |
|
170 | + protected function _adjust_line_item_quantity(EEI_Line_Item $line_item) |
|
171 | + { |
|
172 | + // is this a ticket ? |
|
173 | + if ($line_item->type() === EEM_Line_Item::type_line_item && $line_item->OBJ_type() === 'Ticket') { |
|
174 | + $this->_current_registration = null; |
|
175 | + $quantity = 0; |
|
176 | + // if this ticket is billable at this moment, then we should have a positive quantity |
|
177 | + if (isset($this->_line_item_registrations[ $line_item->code() ]) |
|
178 | + && is_array($this->_line_item_registrations[ $line_item->code() ]) |
|
179 | + ) { |
|
180 | + // set quantity based on number of open registrations for this ticket |
|
181 | + foreach ($this->_line_item_registrations[ $line_item->code() ] as $registration) { |
|
182 | + if ($registration instanceof EE_Registration |
|
183 | + ) { |
|
184 | + $quantity++; |
|
185 | + $this->_current_registration = $registration; |
|
186 | + } |
|
187 | + } |
|
188 | + } |
|
189 | + $line_item->set_quantity($quantity); |
|
190 | + $line_item->set_total($line_item->unit_price() * $line_item->quantity()); |
|
191 | + } |
|
192 | + return $line_item; |
|
193 | + } |
|
194 | 194 | } |
@@ -73,10 +73,10 @@ discard block |
||
73 | 73 | 'LIN_code' |
74 | 74 | ); |
75 | 75 | if ($line_item_code) { |
76 | - if (! isset($this->_line_item_registrations[ $line_item_code ])) { |
|
77 | - $this->_line_item_registrations[ $line_item_code ] = array(); |
|
76 | + if ( ! isset($this->_line_item_registrations[$line_item_code])) { |
|
77 | + $this->_line_item_registrations[$line_item_code] = array(); |
|
78 | 78 | } |
79 | - $this->_line_item_registrations[ $line_item_code ][ $registration->ID() ] = $registration; |
|
79 | + $this->_line_item_registrations[$line_item_code][$registration->ID()] = $registration; |
|
80 | 80 | } |
81 | 81 | } |
82 | 82 | } |
@@ -93,7 +93,7 @@ discard block |
||
93 | 93 | public function process(EEI_Line_Item $line_item) |
94 | 94 | { |
95 | 95 | $this->_adjust_line_item_quantity($line_item); |
96 | - if (! $line_item->children()) { |
|
96 | + if ( ! $line_item->children()) { |
|
97 | 97 | return $line_item; |
98 | 98 | } |
99 | 99 | // the original running total (taking ALL tickets into account) |
@@ -119,7 +119,7 @@ discard block |
||
119 | 119 | $child_line_item->set_total( |
120 | 120 | $running_total_of_children_under_consideration * $percent_of_running_total |
121 | 121 | ); |
122 | - if (! $child_line_item->is_percent()) { |
|
122 | + if ( ! $child_line_item->is_percent()) { |
|
123 | 123 | $child_line_item->set_unit_price($child_line_item->total() / $child_line_item->quantity()); |
124 | 124 | } |
125 | 125 | } elseif (// make sure this item's quantity and total matches its parent |
@@ -174,11 +174,11 @@ discard block |
||
174 | 174 | $this->_current_registration = null; |
175 | 175 | $quantity = 0; |
176 | 176 | // if this ticket is billable at this moment, then we should have a positive quantity |
177 | - if (isset($this->_line_item_registrations[ $line_item->code() ]) |
|
178 | - && is_array($this->_line_item_registrations[ $line_item->code() ]) |
|
177 | + if (isset($this->_line_item_registrations[$line_item->code()]) |
|
178 | + && is_array($this->_line_item_registrations[$line_item->code()]) |
|
179 | 179 | ) { |
180 | 180 | // set quantity based on number of open registrations for this ticket |
181 | - foreach ($this->_line_item_registrations[ $line_item->code() ] as $registration) { |
|
181 | + foreach ($this->_line_item_registrations[$line_item->code()] as $registration) { |
|
182 | 182 | if ($registration instanceof EE_Registration |
183 | 183 | ) { |
184 | 184 | $quantity++; |
@@ -14,62 +14,62 @@ |
||
14 | 14 | class EE_Line_Item_Display |
15 | 15 | { |
16 | 16 | |
17 | - private $strategy = null; |
|
17 | + private $strategy = null; |
|
18 | 18 | |
19 | 19 | |
20 | - /** |
|
21 | - * @param string $context - where/how the line items are being displayed |
|
22 | - * @param string $other_line_item_display_strategy |
|
23 | - */ |
|
24 | - public function __construct($context = '', $other_line_item_display_strategy = '') |
|
25 | - { |
|
26 | - $context = strtolower($context); |
|
27 | - switch ($context) { |
|
28 | - case 'invoice': |
|
29 | - $this->strategy = new EE_Invoice_Line_Item_Display_Strategy(); |
|
30 | - break; |
|
31 | - case 'receipt': |
|
32 | - $this->strategy = new EE_Receipt_Line_Item_Display_Strategy(); |
|
33 | - break; |
|
34 | - case 'spco': |
|
35 | - $this->strategy = new EE_SPCO_Line_Item_Display_Strategy(); |
|
36 | - break; |
|
37 | - default: |
|
38 | - if (! empty($other_line_item_display_strategy) && |
|
39 | - class_exists($other_line_item_display_strategy) |
|
40 | - ) { |
|
41 | - $this->strategy = new $other_line_item_display_strategy(); |
|
42 | - } else { |
|
43 | - $this->strategy = new EE_Default_Line_Item_Display_Strategy(); |
|
44 | - } |
|
45 | - } |
|
46 | - } |
|
20 | + /** |
|
21 | + * @param string $context - where/how the line items are being displayed |
|
22 | + * @param string $other_line_item_display_strategy |
|
23 | + */ |
|
24 | + public function __construct($context = '', $other_line_item_display_strategy = '') |
|
25 | + { |
|
26 | + $context = strtolower($context); |
|
27 | + switch ($context) { |
|
28 | + case 'invoice': |
|
29 | + $this->strategy = new EE_Invoice_Line_Item_Display_Strategy(); |
|
30 | + break; |
|
31 | + case 'receipt': |
|
32 | + $this->strategy = new EE_Receipt_Line_Item_Display_Strategy(); |
|
33 | + break; |
|
34 | + case 'spco': |
|
35 | + $this->strategy = new EE_SPCO_Line_Item_Display_Strategy(); |
|
36 | + break; |
|
37 | + default: |
|
38 | + if (! empty($other_line_item_display_strategy) && |
|
39 | + class_exists($other_line_item_display_strategy) |
|
40 | + ) { |
|
41 | + $this->strategy = new $other_line_item_display_strategy(); |
|
42 | + } else { |
|
43 | + $this->strategy = new EE_Default_Line_Item_Display_Strategy(); |
|
44 | + } |
|
45 | + } |
|
46 | + } |
|
47 | 47 | |
48 | - /** |
|
49 | - * @param EE_Line_Item $line_item |
|
50 | - * @param array $options |
|
51 | - * @return mixed |
|
52 | - */ |
|
53 | - public function display_line_item(EE_Line_Item $line_item, $options = array()) |
|
54 | - { |
|
55 | - return $this->strategy->display_line_item($line_item, $options); |
|
56 | - } |
|
48 | + /** |
|
49 | + * @param EE_Line_Item $line_item |
|
50 | + * @param array $options |
|
51 | + * @return mixed |
|
52 | + */ |
|
53 | + public function display_line_item(EE_Line_Item $line_item, $options = array()) |
|
54 | + { |
|
55 | + return $this->strategy->display_line_item($line_item, $options); |
|
56 | + } |
|
57 | 57 | |
58 | 58 | |
59 | - /** |
|
60 | - * @return float |
|
61 | - */ |
|
62 | - public function grand_total() |
|
63 | - { |
|
64 | - return $this->strategy->grand_total(); |
|
65 | - } |
|
59 | + /** |
|
60 | + * @return float |
|
61 | + */ |
|
62 | + public function grand_total() |
|
63 | + { |
|
64 | + return $this->strategy->grand_total(); |
|
65 | + } |
|
66 | 66 | |
67 | 67 | |
68 | - /** |
|
69 | - * @return float |
|
70 | - */ |
|
71 | - public function total_items() |
|
72 | - { |
|
73 | - return $this->strategy->total_items(); |
|
74 | - } |
|
68 | + /** |
|
69 | + * @return float |
|
70 | + */ |
|
71 | + public function total_items() |
|
72 | + { |
|
73 | + return $this->strategy->total_items(); |
|
74 | + } |
|
75 | 75 | } |
@@ -35,7 +35,7 @@ |
||
35 | 35 | $this->strategy = new EE_SPCO_Line_Item_Display_Strategy(); |
36 | 36 | break; |
37 | 37 | default: |
38 | - if (! empty($other_line_item_display_strategy) && |
|
38 | + if ( ! empty($other_line_item_display_strategy) && |
|
39 | 39 | class_exists($other_line_item_display_strategy) |
40 | 40 | ) { |
41 | 41 | $this->strategy = new $other_line_item_display_strategy(); |
@@ -14,195 +14,195 @@ |
||
14 | 14 | class EE_Template_Part_Manager |
15 | 15 | { |
16 | 16 | |
17 | - /** |
|
18 | - * @param EE_Template_Part_PriorityQueue $template_parts |
|
19 | - */ |
|
20 | - protected $template_parts; |
|
21 | - |
|
22 | - /** |
|
23 | - * @param array $priorities |
|
24 | - */ |
|
25 | - protected $priorities = array(); |
|
26 | - |
|
27 | - /** |
|
28 | - * @param int $event_desc_priority |
|
29 | - */ |
|
30 | - protected $event_desc_priority; |
|
31 | - |
|
32 | - /** |
|
33 | - * @param string $before_event_content |
|
34 | - */ |
|
35 | - protected $before_event_content; |
|
36 | - |
|
37 | - /** |
|
38 | - * @param string $event_content |
|
39 | - */ |
|
40 | - protected $event_content; |
|
41 | - |
|
42 | - /** |
|
43 | - * @param string $after_event_content |
|
44 | - */ |
|
45 | - protected $after_event_content; |
|
46 | - |
|
47 | - |
|
48 | - /** |
|
49 | - * class constructor |
|
50 | - */ |
|
51 | - public function __construct() |
|
52 | - { |
|
53 | - $this->template_parts = new EE_Template_Part_PriorityQueue(); |
|
54 | - } |
|
55 | - |
|
56 | - |
|
57 | - /** |
|
58 | - * add_template_part |
|
59 | - * |
|
60 | - * used for setting the details about a particular template part |
|
61 | - * |
|
62 | - * @param string $name - just a simple string identifier - do NOT use 'event' |
|
63 | - * @param string $label - template part label displayed in admin |
|
64 | - * @param string $template - name or path of template to be used by EEH_Template::locate_template() |
|
65 | - * @param int $priority - order in which template parts should be applied |
|
66 | - */ |
|
67 | - public function add_template_part($name, $label, $template, $priority) |
|
68 | - { |
|
69 | - // SplPriorityQueue doesn't play nice with multiple items having the same priority |
|
70 | - // so if the incoming priority is already occupied, then let's increment it by one, |
|
71 | - // and then pass everything back into this method and try again with the new priority |
|
72 | - if (isset($this->priorities[ $priority ])) { |
|
73 | - $priority++; |
|
74 | - $this->add_template_part($name, $label, $template, $priority); |
|
75 | - return; |
|
76 | - } |
|
77 | - // kk now we can mark this priority as being occupied |
|
78 | - $this->priorities[ $priority ] = true; |
|
79 | - // create the template part and add to the queue |
|
80 | - $this->template_parts->insert( |
|
81 | - new EE_Template_Part($name, $label, $template, $priority), |
|
82 | - $priority |
|
83 | - ); |
|
84 | - if ($name === 'event') { |
|
85 | - $this->event_desc_priority = $priority; |
|
86 | - } |
|
87 | - } |
|
88 | - |
|
89 | - |
|
90 | - /** |
|
91 | - * apply_template_part_filters |
|
92 | - * |
|
93 | - * adds template parts to the supplied content |
|
94 | - * according to the details set when the template parts were added |
|
95 | - * |
|
96 | - * @access public |
|
97 | - * @param string $content |
|
98 | - * @return string |
|
99 | - */ |
|
100 | - public function apply_template_part_filters($content = '') |
|
101 | - { |
|
102 | - $this->template_parts->rewind(); |
|
103 | - // loop through template parts and position content |
|
104 | - while ($this->template_parts->valid()) { |
|
105 | - $this->_position_template_part( |
|
106 | - $content, |
|
107 | - $this->template_parts->current()->template(), |
|
108 | - $this->template_parts->current()->priority() |
|
109 | - ); |
|
110 | - $this->template_parts->next(); |
|
111 | - } |
|
112 | - // now simply add our three strings of content together |
|
113 | - return $this->before_event_content . $this->event_content . $this->after_event_content; |
|
114 | - } |
|
115 | - |
|
116 | - |
|
117 | - /** |
|
118 | - * position_template_part |
|
119 | - * |
|
120 | - * based on the priority of the incoming template part |
|
121 | - * relative to the known event description template part priority, |
|
122 | - * this method will assign template parts to one of the following: |
|
123 | - * $this->before_event_content |
|
124 | - * $this->event_content |
|
125 | - * $this->after_event_content |
|
126 | - * |
|
127 | - * @access protected |
|
128 | - * @param string $content |
|
129 | - * @param string $template |
|
130 | - * @param int $priority |
|
131 | - * @return void |
|
132 | - */ |
|
133 | - protected function _position_template_part($content, $template, $priority) |
|
134 | - { |
|
135 | - // Event Description content is the actual incoming content itself |
|
136 | - if ($priority === $this->event_desc_priority) { |
|
137 | - $this->event_content = $content; |
|
138 | - } elseif ($priority < $this->event_desc_priority) { |
|
139 | - // everything BEFORE the Event Description |
|
140 | - $this->before_event_content .= EEH_Template::locate_template($template); |
|
141 | - } elseif ($priority > $this->event_desc_priority) { |
|
142 | - // everything AFTER the Event Description |
|
143 | - $this->after_event_content .= EEH_Template::locate_template($template); |
|
144 | - } |
|
145 | - } |
|
146 | - |
|
147 | - |
|
148 | - /** |
|
149 | - * generate_sortable_list_of_template_parts |
|
150 | - * |
|
151 | - * creates an HTML list (<ul>) with list items (<li>) for each template part, |
|
152 | - * in a format that can be used as a sortable list in the admin |
|
153 | - * |
|
154 | - * @access public |
|
155 | - * @param string $list_css_id |
|
156 | - * @param string $list_css_class |
|
157 | - * @param string $list_item_css_class |
|
158 | - * @param string $list_item_css_id_prefix |
|
159 | - * @return string |
|
160 | - */ |
|
161 | - public function generate_sortable_list_of_template_parts( |
|
162 | - $list_css_id = '', |
|
163 | - $list_css_class = '', |
|
164 | - $list_item_css_class = '', |
|
165 | - $list_item_css_id_prefix = '' |
|
166 | - ) { |
|
167 | - $event_archive_display_order = EEH_HTML::ul($list_css_id, $list_css_class); |
|
168 | - $this->template_parts->rewind(); |
|
169 | - // loop through template parts and add template content |
|
170 | - while ($this->template_parts->valid()) { |
|
171 | - $event_archive_display_order .= EEH_HTML::li( |
|
172 | - EEH_HTML::span('', '', 'dashicons dashicons-arrow-up-alt2') . |
|
173 | - EEH_HTML::span('', '', 'dashicons dashicons-arrow-down-alt2') . |
|
174 | - $this->template_parts->current()->label(), |
|
175 | - $list_item_css_id_prefix . $this->template_parts->current()->name(), |
|
176 | - $list_item_css_class |
|
177 | - ); |
|
178 | - $this->template_parts->next(); |
|
179 | - } |
|
180 | - $event_archive_display_order .= EEH_HTML::ulx(); |
|
181 | - return $event_archive_display_order; |
|
182 | - } |
|
183 | - |
|
184 | - |
|
185 | - /** |
|
186 | - * display_template_parts |
|
187 | - * |
|
188 | - * just for debugging purposes |
|
189 | - * |
|
190 | - * @access public |
|
191 | - * @return void |
|
192 | - */ |
|
193 | - public function display_template_parts() |
|
194 | - { |
|
195 | - if (WP_DEBUG) { |
|
196 | - $this->template_parts->rewind(); |
|
197 | - while ($this->template_parts->valid()) { |
|
198 | - EEH_Debug_Tools::printr( |
|
199 | - $this->template_parts->current(), |
|
200 | - 'template_part', |
|
201 | - __FILE__, |
|
202 | - __LINE__ |
|
203 | - ); |
|
204 | - $this->template_parts->next(); |
|
205 | - } |
|
206 | - } |
|
207 | - } |
|
17 | + /** |
|
18 | + * @param EE_Template_Part_PriorityQueue $template_parts |
|
19 | + */ |
|
20 | + protected $template_parts; |
|
21 | + |
|
22 | + /** |
|
23 | + * @param array $priorities |
|
24 | + */ |
|
25 | + protected $priorities = array(); |
|
26 | + |
|
27 | + /** |
|
28 | + * @param int $event_desc_priority |
|
29 | + */ |
|
30 | + protected $event_desc_priority; |
|
31 | + |
|
32 | + /** |
|
33 | + * @param string $before_event_content |
|
34 | + */ |
|
35 | + protected $before_event_content; |
|
36 | + |
|
37 | + /** |
|
38 | + * @param string $event_content |
|
39 | + */ |
|
40 | + protected $event_content; |
|
41 | + |
|
42 | + /** |
|
43 | + * @param string $after_event_content |
|
44 | + */ |
|
45 | + protected $after_event_content; |
|
46 | + |
|
47 | + |
|
48 | + /** |
|
49 | + * class constructor |
|
50 | + */ |
|
51 | + public function __construct() |
|
52 | + { |
|
53 | + $this->template_parts = new EE_Template_Part_PriorityQueue(); |
|
54 | + } |
|
55 | + |
|
56 | + |
|
57 | + /** |
|
58 | + * add_template_part |
|
59 | + * |
|
60 | + * used for setting the details about a particular template part |
|
61 | + * |
|
62 | + * @param string $name - just a simple string identifier - do NOT use 'event' |
|
63 | + * @param string $label - template part label displayed in admin |
|
64 | + * @param string $template - name or path of template to be used by EEH_Template::locate_template() |
|
65 | + * @param int $priority - order in which template parts should be applied |
|
66 | + */ |
|
67 | + public function add_template_part($name, $label, $template, $priority) |
|
68 | + { |
|
69 | + // SplPriorityQueue doesn't play nice with multiple items having the same priority |
|
70 | + // so if the incoming priority is already occupied, then let's increment it by one, |
|
71 | + // and then pass everything back into this method and try again with the new priority |
|
72 | + if (isset($this->priorities[ $priority ])) { |
|
73 | + $priority++; |
|
74 | + $this->add_template_part($name, $label, $template, $priority); |
|
75 | + return; |
|
76 | + } |
|
77 | + // kk now we can mark this priority as being occupied |
|
78 | + $this->priorities[ $priority ] = true; |
|
79 | + // create the template part and add to the queue |
|
80 | + $this->template_parts->insert( |
|
81 | + new EE_Template_Part($name, $label, $template, $priority), |
|
82 | + $priority |
|
83 | + ); |
|
84 | + if ($name === 'event') { |
|
85 | + $this->event_desc_priority = $priority; |
|
86 | + } |
|
87 | + } |
|
88 | + |
|
89 | + |
|
90 | + /** |
|
91 | + * apply_template_part_filters |
|
92 | + * |
|
93 | + * adds template parts to the supplied content |
|
94 | + * according to the details set when the template parts were added |
|
95 | + * |
|
96 | + * @access public |
|
97 | + * @param string $content |
|
98 | + * @return string |
|
99 | + */ |
|
100 | + public function apply_template_part_filters($content = '') |
|
101 | + { |
|
102 | + $this->template_parts->rewind(); |
|
103 | + // loop through template parts and position content |
|
104 | + while ($this->template_parts->valid()) { |
|
105 | + $this->_position_template_part( |
|
106 | + $content, |
|
107 | + $this->template_parts->current()->template(), |
|
108 | + $this->template_parts->current()->priority() |
|
109 | + ); |
|
110 | + $this->template_parts->next(); |
|
111 | + } |
|
112 | + // now simply add our three strings of content together |
|
113 | + return $this->before_event_content . $this->event_content . $this->after_event_content; |
|
114 | + } |
|
115 | + |
|
116 | + |
|
117 | + /** |
|
118 | + * position_template_part |
|
119 | + * |
|
120 | + * based on the priority of the incoming template part |
|
121 | + * relative to the known event description template part priority, |
|
122 | + * this method will assign template parts to one of the following: |
|
123 | + * $this->before_event_content |
|
124 | + * $this->event_content |
|
125 | + * $this->after_event_content |
|
126 | + * |
|
127 | + * @access protected |
|
128 | + * @param string $content |
|
129 | + * @param string $template |
|
130 | + * @param int $priority |
|
131 | + * @return void |
|
132 | + */ |
|
133 | + protected function _position_template_part($content, $template, $priority) |
|
134 | + { |
|
135 | + // Event Description content is the actual incoming content itself |
|
136 | + if ($priority === $this->event_desc_priority) { |
|
137 | + $this->event_content = $content; |
|
138 | + } elseif ($priority < $this->event_desc_priority) { |
|
139 | + // everything BEFORE the Event Description |
|
140 | + $this->before_event_content .= EEH_Template::locate_template($template); |
|
141 | + } elseif ($priority > $this->event_desc_priority) { |
|
142 | + // everything AFTER the Event Description |
|
143 | + $this->after_event_content .= EEH_Template::locate_template($template); |
|
144 | + } |
|
145 | + } |
|
146 | + |
|
147 | + |
|
148 | + /** |
|
149 | + * generate_sortable_list_of_template_parts |
|
150 | + * |
|
151 | + * creates an HTML list (<ul>) with list items (<li>) for each template part, |
|
152 | + * in a format that can be used as a sortable list in the admin |
|
153 | + * |
|
154 | + * @access public |
|
155 | + * @param string $list_css_id |
|
156 | + * @param string $list_css_class |
|
157 | + * @param string $list_item_css_class |
|
158 | + * @param string $list_item_css_id_prefix |
|
159 | + * @return string |
|
160 | + */ |
|
161 | + public function generate_sortable_list_of_template_parts( |
|
162 | + $list_css_id = '', |
|
163 | + $list_css_class = '', |
|
164 | + $list_item_css_class = '', |
|
165 | + $list_item_css_id_prefix = '' |
|
166 | + ) { |
|
167 | + $event_archive_display_order = EEH_HTML::ul($list_css_id, $list_css_class); |
|
168 | + $this->template_parts->rewind(); |
|
169 | + // loop through template parts and add template content |
|
170 | + while ($this->template_parts->valid()) { |
|
171 | + $event_archive_display_order .= EEH_HTML::li( |
|
172 | + EEH_HTML::span('', '', 'dashicons dashicons-arrow-up-alt2') . |
|
173 | + EEH_HTML::span('', '', 'dashicons dashicons-arrow-down-alt2') . |
|
174 | + $this->template_parts->current()->label(), |
|
175 | + $list_item_css_id_prefix . $this->template_parts->current()->name(), |
|
176 | + $list_item_css_class |
|
177 | + ); |
|
178 | + $this->template_parts->next(); |
|
179 | + } |
|
180 | + $event_archive_display_order .= EEH_HTML::ulx(); |
|
181 | + return $event_archive_display_order; |
|
182 | + } |
|
183 | + |
|
184 | + |
|
185 | + /** |
|
186 | + * display_template_parts |
|
187 | + * |
|
188 | + * just for debugging purposes |
|
189 | + * |
|
190 | + * @access public |
|
191 | + * @return void |
|
192 | + */ |
|
193 | + public function display_template_parts() |
|
194 | + { |
|
195 | + if (WP_DEBUG) { |
|
196 | + $this->template_parts->rewind(); |
|
197 | + while ($this->template_parts->valid()) { |
|
198 | + EEH_Debug_Tools::printr( |
|
199 | + $this->template_parts->current(), |
|
200 | + 'template_part', |
|
201 | + __FILE__, |
|
202 | + __LINE__ |
|
203 | + ); |
|
204 | + $this->template_parts->next(); |
|
205 | + } |
|
206 | + } |
|
207 | + } |
|
208 | 208 | } |
@@ -69,13 +69,13 @@ discard block |
||
69 | 69 | // SplPriorityQueue doesn't play nice with multiple items having the same priority |
70 | 70 | // so if the incoming priority is already occupied, then let's increment it by one, |
71 | 71 | // and then pass everything back into this method and try again with the new priority |
72 | - if (isset($this->priorities[ $priority ])) { |
|
72 | + if (isset($this->priorities[$priority])) { |
|
73 | 73 | $priority++; |
74 | 74 | $this->add_template_part($name, $label, $template, $priority); |
75 | 75 | return; |
76 | 76 | } |
77 | 77 | // kk now we can mark this priority as being occupied |
78 | - $this->priorities[ $priority ] = true; |
|
78 | + $this->priorities[$priority] = true; |
|
79 | 79 | // create the template part and add to the queue |
80 | 80 | $this->template_parts->insert( |
81 | 81 | new EE_Template_Part($name, $label, $template, $priority), |
@@ -110,7 +110,7 @@ discard block |
||
110 | 110 | $this->template_parts->next(); |
111 | 111 | } |
112 | 112 | // now simply add our three strings of content together |
113 | - return $this->before_event_content . $this->event_content . $this->after_event_content; |
|
113 | + return $this->before_event_content.$this->event_content.$this->after_event_content; |
|
114 | 114 | } |
115 | 115 | |
116 | 116 | |
@@ -169,10 +169,10 @@ discard block |
||
169 | 169 | // loop through template parts and add template content |
170 | 170 | while ($this->template_parts->valid()) { |
171 | 171 | $event_archive_display_order .= EEH_HTML::li( |
172 | - EEH_HTML::span('', '', 'dashicons dashicons-arrow-up-alt2') . |
|
173 | - EEH_HTML::span('', '', 'dashicons dashicons-arrow-down-alt2') . |
|
172 | + EEH_HTML::span('', '', 'dashicons dashicons-arrow-up-alt2'). |
|
173 | + EEH_HTML::span('', '', 'dashicons dashicons-arrow-down-alt2'). |
|
174 | 174 | $this->template_parts->current()->label(), |
175 | - $list_item_css_id_prefix . $this->template_parts->current()->name(), |
|
175 | + $list_item_css_id_prefix.$this->template_parts->current()->name(), |
|
176 | 176 | $list_item_css_class |
177 | 177 | ); |
178 | 178 | $this->template_parts->next(); |
@@ -16,112 +16,112 @@ |
||
16 | 16 | { |
17 | 17 | |
18 | 18 | |
19 | - /** |
|
20 | - * @type string $name |
|
21 | - */ |
|
22 | - protected $name; |
|
23 | - |
|
24 | - /** |
|
25 | - * @type string $label |
|
26 | - */ |
|
27 | - protected $label; |
|
28 | - |
|
29 | - /** |
|
30 | - * @type string $template |
|
31 | - */ |
|
32 | - protected $template; |
|
33 | - |
|
34 | - /** |
|
35 | - * @type int $priority |
|
36 | - */ |
|
37 | - protected $priority; |
|
38 | - |
|
39 | - |
|
40 | - /** |
|
41 | - * class constructor |
|
42 | - * |
|
43 | - * @param string $name |
|
44 | - * @param string $label |
|
45 | - * @param string $template |
|
46 | - * @param int $priority |
|
47 | - */ |
|
48 | - public function __construct($name, $label, $template, $priority = 100) |
|
49 | - { |
|
50 | - $this->set_name($name); |
|
51 | - $this->set_label($label); |
|
52 | - $this->set_template($template); |
|
53 | - $this->set_priority($priority); |
|
54 | - } |
|
55 | - |
|
56 | - |
|
57 | - /** |
|
58 | - * @return mixed |
|
59 | - */ |
|
60 | - public function name() |
|
61 | - { |
|
62 | - return $this->name; |
|
63 | - } |
|
64 | - |
|
65 | - |
|
66 | - /** |
|
67 | - * @param mixed $name |
|
68 | - */ |
|
69 | - public function set_name($name) |
|
70 | - { |
|
71 | - $this->name = $name; |
|
72 | - } |
|
73 | - |
|
74 | - |
|
75 | - /** |
|
76 | - * @return string |
|
77 | - */ |
|
78 | - public function label() |
|
79 | - { |
|
80 | - return $this->label; |
|
81 | - } |
|
82 | - |
|
83 | - |
|
84 | - /** |
|
85 | - * @param string $label |
|
86 | - */ |
|
87 | - public function set_label($label) |
|
88 | - { |
|
89 | - $this->label = $label; |
|
90 | - } |
|
91 | - |
|
92 | - |
|
93 | - /** |
|
94 | - * @return array |
|
95 | - */ |
|
96 | - public function template() |
|
97 | - { |
|
98 | - return $this->template; |
|
99 | - } |
|
100 | - |
|
101 | - |
|
102 | - /** |
|
103 | - * @param string $template |
|
104 | - */ |
|
105 | - public function set_template($template) |
|
106 | - { |
|
107 | - $this->template = $template; |
|
108 | - } |
|
109 | - |
|
110 | - |
|
111 | - /** |
|
112 | - * @return int |
|
113 | - */ |
|
114 | - public function priority() |
|
115 | - { |
|
116 | - return $this->priority; |
|
117 | - } |
|
118 | - |
|
119 | - |
|
120 | - /** |
|
121 | - * @param int $priority |
|
122 | - */ |
|
123 | - public function set_priority($priority) |
|
124 | - { |
|
125 | - $this->priority = intval($priority); |
|
126 | - } |
|
19 | + /** |
|
20 | + * @type string $name |
|
21 | + */ |
|
22 | + protected $name; |
|
23 | + |
|
24 | + /** |
|
25 | + * @type string $label |
|
26 | + */ |
|
27 | + protected $label; |
|
28 | + |
|
29 | + /** |
|
30 | + * @type string $template |
|
31 | + */ |
|
32 | + protected $template; |
|
33 | + |
|
34 | + /** |
|
35 | + * @type int $priority |
|
36 | + */ |
|
37 | + protected $priority; |
|
38 | + |
|
39 | + |
|
40 | + /** |
|
41 | + * class constructor |
|
42 | + * |
|
43 | + * @param string $name |
|
44 | + * @param string $label |
|
45 | + * @param string $template |
|
46 | + * @param int $priority |
|
47 | + */ |
|
48 | + public function __construct($name, $label, $template, $priority = 100) |
|
49 | + { |
|
50 | + $this->set_name($name); |
|
51 | + $this->set_label($label); |
|
52 | + $this->set_template($template); |
|
53 | + $this->set_priority($priority); |
|
54 | + } |
|
55 | + |
|
56 | + |
|
57 | + /** |
|
58 | + * @return mixed |
|
59 | + */ |
|
60 | + public function name() |
|
61 | + { |
|
62 | + return $this->name; |
|
63 | + } |
|
64 | + |
|
65 | + |
|
66 | + /** |
|
67 | + * @param mixed $name |
|
68 | + */ |
|
69 | + public function set_name($name) |
|
70 | + { |
|
71 | + $this->name = $name; |
|
72 | + } |
|
73 | + |
|
74 | + |
|
75 | + /** |
|
76 | + * @return string |
|
77 | + */ |
|
78 | + public function label() |
|
79 | + { |
|
80 | + return $this->label; |
|
81 | + } |
|
82 | + |
|
83 | + |
|
84 | + /** |
|
85 | + * @param string $label |
|
86 | + */ |
|
87 | + public function set_label($label) |
|
88 | + { |
|
89 | + $this->label = $label; |
|
90 | + } |
|
91 | + |
|
92 | + |
|
93 | + /** |
|
94 | + * @return array |
|
95 | + */ |
|
96 | + public function template() |
|
97 | + { |
|
98 | + return $this->template; |
|
99 | + } |
|
100 | + |
|
101 | + |
|
102 | + /** |
|
103 | + * @param string $template |
|
104 | + */ |
|
105 | + public function set_template($template) |
|
106 | + { |
|
107 | + $this->template = $template; |
|
108 | + } |
|
109 | + |
|
110 | + |
|
111 | + /** |
|
112 | + * @return int |
|
113 | + */ |
|
114 | + public function priority() |
|
115 | + { |
|
116 | + return $this->priority; |
|
117 | + } |
|
118 | + |
|
119 | + |
|
120 | + /** |
|
121 | + * @param int $priority |
|
122 | + */ |
|
123 | + public function set_priority($priority) |
|
124 | + { |
|
125 | + $this->priority = intval($priority); |
|
126 | + } |
|
127 | 127 | } |
@@ -17,43 +17,43 @@ |
||
17 | 17 | { |
18 | 18 | |
19 | 19 | |
20 | - /** |
|
21 | - * add |
|
22 | - * |
|
23 | - * attaches aTemplate_Part to the Collection |
|
24 | - * and sets any supplied data associated with the current iterator entry |
|
25 | - * |
|
26 | - * @access public |
|
27 | - * @param EE_Template_Part $object |
|
28 | - * @param int $priority |
|
29 | - * @return bool |
|
30 | - */ |
|
31 | - public function insert($object, $priority = 100) |
|
32 | - { |
|
33 | - if ($object instanceof EE_Template_Part) { |
|
34 | - parent::insert($object, $priority); |
|
35 | - return true; |
|
36 | - } else { |
|
37 | - return false; |
|
38 | - } |
|
39 | - } |
|
20 | + /** |
|
21 | + * add |
|
22 | + * |
|
23 | + * attaches aTemplate_Part to the Collection |
|
24 | + * and sets any supplied data associated with the current iterator entry |
|
25 | + * |
|
26 | + * @access public |
|
27 | + * @param EE_Template_Part $object |
|
28 | + * @param int $priority |
|
29 | + * @return bool |
|
30 | + */ |
|
31 | + public function insert($object, $priority = 100) |
|
32 | + { |
|
33 | + if ($object instanceof EE_Template_Part) { |
|
34 | + parent::insert($object, $priority); |
|
35 | + return true; |
|
36 | + } else { |
|
37 | + return false; |
|
38 | + } |
|
39 | + } |
|
40 | 40 | |
41 | 41 | |
42 | - /** |
|
43 | - * compare |
|
44 | - * |
|
45 | - * sorts EE_Template_Part in ascending order based on set priority |
|
46 | - * |
|
47 | - * @access public |
|
48 | - * @param int $priority1 |
|
49 | - * @param int $priority2 |
|
50 | - * @return bool |
|
51 | - */ |
|
52 | - public function compare($priority1, $priority2) |
|
53 | - { |
|
54 | - if ($priority1 === $priority2) { |
|
55 | - return 0; |
|
56 | - } |
|
57 | - return $priority1 > $priority2 ? -1 : 1; |
|
58 | - } |
|
42 | + /** |
|
43 | + * compare |
|
44 | + * |
|
45 | + * sorts EE_Template_Part in ascending order based on set priority |
|
46 | + * |
|
47 | + * @access public |
|
48 | + * @param int $priority1 |
|
49 | + * @param int $priority2 |
|
50 | + * @return bool |
|
51 | + */ |
|
52 | + public function compare($priority1, $priority2) |
|
53 | + { |
|
54 | + if ($priority1 === $priority2) { |
|
55 | + return 0; |
|
56 | + } |
|
57 | + return $priority1 > $priority2 ? -1 : 1; |
|
58 | + } |
|
59 | 59 | } |
@@ -24,767 +24,767 @@ |
||
24 | 24 | class EE_Registration_Processor extends EE_Processor_Base |
25 | 25 | { |
26 | 26 | |
27 | - /** |
|
28 | - * @var EE_Registration_Processor $_instance |
|
29 | - * @access private |
|
30 | - */ |
|
31 | - private static $_instance; |
|
32 | - |
|
33 | - /** |
|
34 | - * initial reg status at the beginning of this request. |
|
35 | - * indexed by registration ID |
|
36 | - * |
|
37 | - * @var array |
|
38 | - */ |
|
39 | - protected $_old_reg_status = array(); |
|
40 | - |
|
41 | - /** |
|
42 | - * reg status at the end of the request after all processing. |
|
43 | - * indexed by registration ID |
|
44 | - * |
|
45 | - * @var array |
|
46 | - */ |
|
47 | - protected $_new_reg_status = array(); |
|
48 | - |
|
49 | - /** |
|
50 | - * amounts paid at the end of the request after all processing. |
|
51 | - * indexed by registration ID |
|
52 | - * |
|
53 | - * @var array |
|
54 | - */ |
|
55 | - protected static $_amount_paid = array(); |
|
56 | - |
|
57 | - /** |
|
58 | - * Cache of the reg final price for registrations corresponding to a ticket line item |
|
59 | - * |
|
60 | - * @deprecated |
|
61 | - * @var array @see EEH_Line_Item::calculate_reg_final_prices_per_line_item()'s return value |
|
62 | - */ |
|
63 | - protected $_reg_final_price_per_tkt_line_item; |
|
64 | - |
|
65 | - /** |
|
66 | - * @var EE_Request $request |
|
67 | - */ |
|
68 | - protected $request; |
|
69 | - |
|
70 | - |
|
71 | - /** |
|
72 | - * @singleton method used to instantiate class object |
|
73 | - * @param EE_Request|null $request |
|
74 | - * @return EE_Registration_Processor instance |
|
75 | - * @throws \InvalidArgumentException |
|
76 | - * @throws \EventEspresso\core\exceptions\InvalidInterfaceException |
|
77 | - * @throws \EventEspresso\core\exceptions\InvalidDataTypeException |
|
78 | - */ |
|
79 | - public static function instance(EE_Request $request = null) |
|
80 | - { |
|
81 | - // check if class object is instantiated |
|
82 | - if (! self::$_instance instanceof EE_Registration_Processor) { |
|
83 | - if (! $request instanceof EE_Request) { |
|
84 | - $request = LoaderFactory::getLoader()->getShared('EE_Request'); |
|
85 | - } |
|
86 | - self::$_instance = new self($request); |
|
87 | - } |
|
88 | - return self::$_instance; |
|
89 | - } |
|
90 | - |
|
91 | - |
|
92 | - /** |
|
93 | - * EE_Registration_Processor constructor. |
|
94 | - * |
|
95 | - * @param EE_Request $request |
|
96 | - */ |
|
97 | - public function __construct(EE_Request $request) |
|
98 | - { |
|
99 | - $this->request = $request; |
|
100 | - } |
|
101 | - |
|
102 | - |
|
103 | - /** |
|
104 | - * @param int $REG_ID |
|
105 | - * @return string |
|
106 | - */ |
|
107 | - public function old_reg_status($REG_ID) |
|
108 | - { |
|
109 | - return isset($this->_old_reg_status[ $REG_ID ]) ? $this->_old_reg_status[ $REG_ID ] : null; |
|
110 | - } |
|
111 | - |
|
112 | - |
|
113 | - /** |
|
114 | - * @param int $REG_ID |
|
115 | - * @param string $old_reg_status |
|
116 | - */ |
|
117 | - public function set_old_reg_status($REG_ID, $old_reg_status) |
|
118 | - { |
|
119 | - // only set the first time |
|
120 | - if (! isset($this->_old_reg_status[ $REG_ID ])) { |
|
121 | - $this->_old_reg_status[ $REG_ID ] = $old_reg_status; |
|
122 | - } |
|
123 | - } |
|
124 | - |
|
125 | - |
|
126 | - /** |
|
127 | - * @param int $REG_ID |
|
128 | - * @return string |
|
129 | - */ |
|
130 | - public function new_reg_status($REG_ID) |
|
131 | - { |
|
132 | - return isset($this->_new_reg_status[ $REG_ID ]) ? $this->_new_reg_status[ $REG_ID ] : null; |
|
133 | - } |
|
134 | - |
|
135 | - |
|
136 | - /** |
|
137 | - * @param int $REG_ID |
|
138 | - * @param string $new_reg_status |
|
139 | - */ |
|
140 | - public function set_new_reg_status($REG_ID, $new_reg_status) |
|
141 | - { |
|
142 | - $this->_new_reg_status[ $REG_ID ] = $new_reg_status; |
|
143 | - } |
|
144 | - |
|
145 | - |
|
146 | - /** |
|
147 | - * reg_status_updated |
|
148 | - * |
|
149 | - * @param int $REG_ID |
|
150 | - * @return bool |
|
151 | - */ |
|
152 | - public function reg_status_updated($REG_ID) |
|
153 | - { |
|
154 | - return $this->new_reg_status($REG_ID) !== $this->old_reg_status($REG_ID); |
|
155 | - } |
|
156 | - |
|
157 | - |
|
158 | - /** |
|
159 | - * @param EE_Registration $registration |
|
160 | - * @throws EE_Error |
|
161 | - * @throws EntityNotFoundException |
|
162 | - * @throws InvalidArgumentException |
|
163 | - * @throws InvalidDataTypeException |
|
164 | - * @throws InvalidInterfaceException |
|
165 | - * @throws ReflectionException |
|
166 | - * @throws RuntimeException |
|
167 | - */ |
|
168 | - public function update_registration_status_and_trigger_notifications(EE_Registration $registration) |
|
169 | - { |
|
170 | - $this->toggle_incomplete_registration_status_to_default($registration, false); |
|
171 | - $this->toggle_registration_status_for_default_approved_events($registration, false); |
|
172 | - $this->toggle_registration_status_if_no_monies_owing($registration, false); |
|
173 | - $registration->save(); |
|
174 | - // trigger notifications |
|
175 | - $this->trigger_registration_update_notifications($registration); |
|
176 | - } |
|
177 | - |
|
178 | - |
|
179 | - /** |
|
180 | - * manually_update_registration_status |
|
181 | - * |
|
182 | - * @access public |
|
183 | - * @param EE_Registration $registration |
|
184 | - * @param string $new_reg_status |
|
185 | - * @param bool $save TRUE will save the registration if the status is updated, FALSE will leave that up |
|
186 | - * to client code |
|
187 | - * @return bool |
|
188 | - * @throws EE_Error |
|
189 | - * @throws EntityNotFoundException |
|
190 | - * @throws InvalidArgumentException |
|
191 | - * @throws InvalidDataTypeException |
|
192 | - * @throws InvalidInterfaceException |
|
193 | - * @throws ReflectionException |
|
194 | - * @throws RuntimeException |
|
195 | - */ |
|
196 | - public function manually_update_registration_status( |
|
197 | - EE_Registration $registration, |
|
198 | - $new_reg_status = '', |
|
199 | - $save = true |
|
200 | - ) { |
|
201 | - // set initial REG_Status |
|
202 | - $this->set_old_reg_status($registration->ID(), $registration->status_ID()); |
|
203 | - // set incoming REG_Status |
|
204 | - $this->set_new_reg_status($registration->ID(), $new_reg_status); |
|
205 | - // toggle reg status but only if it has changed and the user can do so |
|
206 | - if ($this->reg_status_updated($registration->ID()) |
|
207 | - && ( |
|
208 | - (! $this->request->isAdmin() || $this->request->isFrontAjax()) |
|
209 | - || EE_Registry::instance()->CAP->current_user_can( |
|
210 | - 'ee_edit_registration', |
|
211 | - 'toggle_registration_status', |
|
212 | - $registration->ID() |
|
213 | - ) |
|
214 | - ) |
|
215 | - ) { |
|
216 | - // change status to new value |
|
217 | - $updated = $registration->set_status($this->new_reg_status($registration->ID())); |
|
218 | - if ($updated && $save) { |
|
219 | - $registration->save(); |
|
220 | - } |
|
221 | - return true; |
|
222 | - } |
|
223 | - return false; |
|
224 | - } |
|
225 | - |
|
226 | - |
|
227 | - /** |
|
228 | - * toggle_incomplete_registration_status_to_default |
|
229 | - * changes any incomplete registrations to either the event or global default registration status |
|
230 | - * |
|
231 | - * @access public |
|
232 | - * @param EE_Registration $registration |
|
233 | - * @param bool $save TRUE will save the registration if the status is updated, FALSE will leave |
|
234 | - * that up to client code |
|
235 | - * @param ContextInterface|null $context |
|
236 | - * @return void |
|
237 | - * @throws EE_Error |
|
238 | - * @throws InvalidArgumentException |
|
239 | - * @throws ReflectionException |
|
240 | - * @throws RuntimeException |
|
241 | - * @throws EntityNotFoundException |
|
242 | - * @throws InvalidDataTypeException |
|
243 | - * @throws InvalidInterfaceException |
|
244 | - */ |
|
245 | - public function toggle_incomplete_registration_status_to_default( |
|
246 | - EE_Registration $registration, |
|
247 | - $save = true, |
|
248 | - ContextInterface $context = null |
|
249 | - ) { |
|
250 | - $existing_reg_status = $registration->status_ID(); |
|
251 | - // set initial REG_Status |
|
252 | - $this->set_old_reg_status($registration->ID(), $existing_reg_status); |
|
253 | - // is the registration currently incomplete ? |
|
254 | - if ($registration->status_ID() === EEM_Registration::status_id_incomplete) { |
|
255 | - // grab default reg status for the event, if set |
|
256 | - $event_default_registration_status = $registration->event()->default_registration_status(); |
|
257 | - // if no default reg status is set for the event, then use the global value |
|
258 | - $STS_ID = ! empty($event_default_registration_status) |
|
259 | - ? $event_default_registration_status |
|
260 | - : EE_Registry::instance()->CFG->registration->default_STS_ID; |
|
261 | - // if the event default reg status is approved, then downgrade temporarily to payment pending to ensure that payments are triggered |
|
262 | - $STS_ID = $STS_ID === EEM_Registration::status_id_approved ? EEM_Registration::status_id_pending_payment |
|
263 | - : $STS_ID; |
|
264 | - // set incoming REG_Status |
|
265 | - $this->set_new_reg_status($registration->ID(), $STS_ID); |
|
266 | - $registration->set_status($STS_ID, false, $context); |
|
267 | - if ($save) { |
|
268 | - $registration->save(); |
|
269 | - } |
|
270 | - // don't trigger notifications during IPNs because they will get triggered by EE_Payment_Processor |
|
271 | - if (! EE_Processor_Base::$IPN) { |
|
272 | - // otherwise, send out notifications |
|
273 | - add_filter('FHEE__EED_Messages___maybe_registration__deliver_notifications', '__return_true', 10); |
|
274 | - } |
|
275 | - // DEBUG LOG |
|
276 | - // $this->log( |
|
277 | - // __CLASS__, |
|
278 | - // __FUNCTION__, |
|
279 | - // __LINE__, |
|
280 | - // $registration->transaction(), |
|
281 | - // array( |
|
282 | - // 'IPN' => EE_Processor_Base::$IPN, |
|
283 | - // 'deliver_notifications' => has_filter( |
|
284 | - // 'FHEE__EED_Messages___maybe_registration__deliver_notifications' |
|
285 | - // ), |
|
286 | - // ) |
|
287 | - // ); |
|
288 | - } |
|
289 | - } |
|
290 | - |
|
291 | - |
|
292 | - /** |
|
293 | - * toggle_registration_status_for_default_approved_events |
|
294 | - * |
|
295 | - * @access public |
|
296 | - * @param EE_Registration $registration |
|
297 | - * @param bool $save TRUE will save the registration if the status is updated, FALSE will leave that up |
|
298 | - * to client code |
|
299 | - * @return bool |
|
300 | - * @throws EE_Error |
|
301 | - * @throws EntityNotFoundException |
|
302 | - * @throws InvalidArgumentException |
|
303 | - * @throws InvalidDataTypeException |
|
304 | - * @throws InvalidInterfaceException |
|
305 | - * @throws ReflectionException |
|
306 | - * @throws RuntimeException |
|
307 | - */ |
|
308 | - public function toggle_registration_status_for_default_approved_events(EE_Registration $registration, $save = true) |
|
309 | - { |
|
310 | - $reg_status = $registration->status_ID(); |
|
311 | - // set initial REG_Status |
|
312 | - $this->set_old_reg_status($registration->ID(), $reg_status); |
|
313 | - // if not already, toggle reg status to approved IF the event default reg status is approved |
|
314 | - // ( as long as the registration wasn't cancelled or declined at some point ) |
|
315 | - if ($reg_status !== EEM_Registration::status_id_cancelled |
|
316 | - && $reg_status |
|
317 | - !== EEM_Registration::status_id_declined |
|
318 | - && $reg_status !== EEM_Registration::status_id_approved |
|
319 | - && $registration->event()->default_registration_status() === EEM_Registration::status_id_approved |
|
320 | - ) { |
|
321 | - // set incoming REG_Status |
|
322 | - $this->set_new_reg_status($registration->ID(), EEM_Registration::status_id_approved); |
|
323 | - // toggle status to approved |
|
324 | - $registration->set_status(EEM_Registration::status_id_approved); |
|
325 | - if ($save) { |
|
326 | - $registration->save(); |
|
327 | - } |
|
328 | - // don't trigger notifications during IPNs because they will get triggered by EE_Payment_Processor |
|
329 | - if (! EE_Processor_Base::$IPN) { |
|
330 | - // otherwise, send out notifications |
|
331 | - add_filter('FHEE__EED_Messages___maybe_registration__deliver_notifications', '__return_true', 10); |
|
332 | - } |
|
333 | - // DEBUG LOG |
|
334 | - // $this->log( |
|
335 | - // __CLASS__, |
|
336 | - // __FUNCTION__, |
|
337 | - // __LINE__, |
|
338 | - // $registration->transaction(), |
|
339 | - // array( |
|
340 | - // 'IPN' => EE_Processor_Base::$IPN, |
|
341 | - // 'deliver_notifications' => has_filter( |
|
342 | - // 'FHEE__EED_Messages___maybe_registration__deliver_notifications' |
|
343 | - // ), |
|
344 | - // ) |
|
345 | - // ); |
|
346 | - return true; |
|
347 | - } |
|
348 | - return false; |
|
349 | - } |
|
350 | - |
|
351 | - |
|
352 | - /** |
|
353 | - * toggle_registration_statuses_if_no_monies_owing |
|
354 | - * |
|
355 | - * @access public |
|
356 | - * @param EE_Registration $registration |
|
357 | - * @param bool $save TRUE will save the registration if the status is updated, FALSE will leave that up |
|
358 | - * to client code |
|
359 | - * @param array $additional_details |
|
360 | - * @return bool |
|
361 | - * @throws EE_Error |
|
362 | - * @throws EntityNotFoundException |
|
363 | - * @throws InvalidArgumentException |
|
364 | - * @throws InvalidDataTypeException |
|
365 | - * @throws InvalidInterfaceException |
|
366 | - * @throws ReflectionException |
|
367 | - * @throws RuntimeException |
|
368 | - */ |
|
369 | - public function toggle_registration_status_if_no_monies_owing( |
|
370 | - EE_Registration $registration, |
|
371 | - $save = true, |
|
372 | - array $additional_details = array() |
|
373 | - ) { |
|
374 | - // set initial REG_Status |
|
375 | - $this->set_old_reg_status($registration->ID(), $registration->status_ID()); |
|
376 | - // was a payment just made ? |
|
377 | - $payment = isset($additional_details['payment_updates'], $additional_details['last_payment']) |
|
378 | - && $additional_details['payment_updates'] |
|
379 | - && $additional_details['last_payment'] instanceof EE_Payment |
|
380 | - ? $additional_details['last_payment'] |
|
381 | - : null; |
|
382 | - $total_paid = array_sum(self::$_amount_paid); |
|
383 | - // toggle reg status to approved IF |
|
384 | - if (// REG status is pending payment |
|
385 | - $registration->status_ID() === EEM_Registration::status_id_pending_payment |
|
386 | - // AND no monies are owing |
|
387 | - && ( |
|
388 | - ( |
|
389 | - $registration->transaction()->is_completed() |
|
390 | - || $registration->transaction()->is_overpaid() |
|
391 | - || $registration->transaction()->is_free() |
|
392 | - || apply_filters( |
|
393 | - 'FHEE__EE_Registration_Processor__toggle_registration_status_if_no_monies_owing', |
|
394 | - false, |
|
395 | - $registration |
|
396 | - ) |
|
397 | - ) |
|
398 | - || ( |
|
399 | - $payment instanceof EE_Payment && $payment->is_approved() |
|
400 | - && // this specific registration has not yet been paid for |
|
401 | - ! isset(self::$_amount_paid[ $registration->ID() ]) |
|
402 | - && // payment amount, less what we have already attributed to other registrations, is greater than this reg's final price |
|
403 | - $payment->amount() - $total_paid >= $registration->final_price() |
|
404 | - ) |
|
405 | - ) |
|
406 | - ) { |
|
407 | - // mark as paid |
|
408 | - self::$_amount_paid[ $registration->ID() ] = $registration->final_price(); |
|
409 | - // track new REG_Status |
|
410 | - $this->set_new_reg_status($registration->ID(), EEM_Registration::status_id_approved); |
|
411 | - // toggle status to approved |
|
412 | - $registration->set_status(EEM_Registration::status_id_approved); |
|
413 | - if ($save) { |
|
414 | - $registration->save(); |
|
415 | - } |
|
416 | - // don't trigger notifications during IPNs because they will get triggered by EE_Payment_Processor |
|
417 | - if (! EE_Processor_Base::$IPN) { |
|
418 | - // otherwise, send out notifications |
|
419 | - add_filter('FHEE__EED_Messages___maybe_registration__deliver_notifications', '__return_true', 10); |
|
420 | - } |
|
421 | - // DEBUG LOG |
|
422 | - // $this->log( |
|
423 | - // __CLASS__, |
|
424 | - // __FUNCTION__, |
|
425 | - // __LINE__, |
|
426 | - // $registration->transaction(), |
|
427 | - // array( |
|
428 | - // 'IPN' => EE_Processor_Base::$IPN, |
|
429 | - // 'deliver_notifications' => has_filter( |
|
430 | - // 'FHEE__EED_Messages___maybe_registration__deliver_notifications' |
|
431 | - // ), |
|
432 | - // ) |
|
433 | - // ); |
|
434 | - return true; |
|
435 | - } |
|
436 | - return false; |
|
437 | - } |
|
438 | - |
|
439 | - |
|
440 | - /** |
|
441 | - * registration_status_changed |
|
442 | - * |
|
443 | - * @access public |
|
444 | - * @param EE_Registration $registration |
|
445 | - * @param array $additional_details |
|
446 | - * @return void |
|
447 | - */ |
|
448 | - public function trigger_registration_update_notifications($registration, array $additional_details = array()) |
|
449 | - { |
|
450 | - try { |
|
451 | - if (! $registration instanceof EE_Registration) { |
|
452 | - throw new EE_Error( |
|
453 | - esc_html__('An invalid registration was received.', 'event_espresso') |
|
454 | - ); |
|
455 | - } |
|
456 | - // EE_Registry::instance()->load_helper('Debug_Tools'); |
|
457 | - // EEH_Debug_Tools::log( |
|
458 | - // __CLASS__, |
|
459 | - // __FUNCTION__, |
|
460 | - // __LINE__, |
|
461 | - // array($registration->transaction(), $additional_details), |
|
462 | - // false, |
|
463 | - // 'EE_Transaction: ' . $registration->transaction()->ID() |
|
464 | - // ); |
|
465 | - if (! $registration->is_primary_registrant()) { |
|
466 | - return; |
|
467 | - } |
|
468 | - do_action( |
|
469 | - 'AHEE__EE_Registration_Processor__trigger_registration_update_notifications', |
|
470 | - $registration, |
|
471 | - $additional_details |
|
472 | - ); |
|
473 | - } catch (Exception $e) { |
|
474 | - EE_Error::add_error($e->getMessage(), $e->getFile(), 'unknown_function_from_exception', $e->getLine()); |
|
475 | - } |
|
476 | - } |
|
477 | - |
|
478 | - |
|
479 | - /** |
|
480 | - * sets reg status based either on passed param or on transaction status and event pre-approval setting |
|
481 | - * |
|
482 | - * @param EE_Registration $registration |
|
483 | - * @param array $additional_details |
|
484 | - * @return bool |
|
485 | - * @throws EE_Error |
|
486 | - * @throws EntityNotFoundException |
|
487 | - * @throws InvalidArgumentException |
|
488 | - * @throws InvalidDataTypeException |
|
489 | - * @throws InvalidInterfaceException |
|
490 | - * @throws ReflectionException |
|
491 | - * @throws RuntimeException |
|
492 | - */ |
|
493 | - public function update_registration_after_checkout_or_payment( |
|
494 | - EE_Registration $registration, |
|
495 | - array $additional_details = array() |
|
496 | - ) { |
|
497 | - // set initial REG_Status |
|
498 | - $this->set_old_reg_status($registration->ID(), $registration->status_ID()); |
|
499 | - // if the registration status gets updated, then save the registration |
|
500 | - if ($this->toggle_registration_status_for_default_approved_events($registration, false) |
|
501 | - || $this->toggle_registration_status_if_no_monies_owing( |
|
502 | - $registration, |
|
503 | - false, |
|
504 | - $additional_details |
|
505 | - ) |
|
506 | - ) { |
|
507 | - $registration->save(); |
|
508 | - } |
|
509 | - // set new REG_Status |
|
510 | - $this->set_new_reg_status($registration->ID(), $registration->status_ID()); |
|
511 | - return $this->reg_status_updated($registration->ID()) |
|
512 | - && $this->new_reg_status($registration->ID()) === EEM_Registration::status_id_approved; |
|
513 | - } |
|
514 | - |
|
515 | - |
|
516 | - /** |
|
517 | - * Updates the registration' final prices based on the current line item tree (taking into account |
|
518 | - * discounts, taxes, and other line items unrelated to tickets.) |
|
519 | - * |
|
520 | - * @param EE_Transaction $transaction |
|
521 | - * @param boolean $save_regs whether to immediately save registrations in this function or not |
|
522 | - * @return void |
|
523 | - * @throws EE_Error |
|
524 | - * @throws InvalidArgumentException |
|
525 | - * @throws InvalidDataTypeException |
|
526 | - * @throws InvalidInterfaceException |
|
527 | - * @throws RuntimeException |
|
528 | - */ |
|
529 | - public function update_registration_final_prices($transaction, $save_regs = true) |
|
530 | - { |
|
531 | - $reg_final_price_per_ticket_line_item = EEH_Line_Item::calculate_reg_final_prices_per_line_item( |
|
532 | - $transaction->total_line_item() |
|
533 | - ); |
|
534 | - foreach ($transaction->registrations() as $registration) { |
|
535 | - /** @var EE_Line_Item $line_item */ |
|
536 | - $line_item = EEM_Line_Item::instance()->get_line_item_for_registration($registration); |
|
537 | - if (isset($reg_final_price_per_ticket_line_item[ $line_item->ID() ])) { |
|
538 | - $registration->set_final_price($reg_final_price_per_ticket_line_item[ $line_item->ID() ]); |
|
539 | - if ($save_regs) { |
|
540 | - $registration->save(); |
|
541 | - } |
|
542 | - } |
|
543 | - } |
|
544 | - // and make sure there's no rounding problem |
|
545 | - $this->fix_reg_final_price_rounding_issue($transaction); |
|
546 | - } |
|
547 | - |
|
548 | - |
|
549 | - /** |
|
550 | - * Makes sure there is no rounding errors for the REG_final_prices. |
|
551 | - * Eg, if we have 3 registrations for $1, and there is a $0.01 discount between the three of them, |
|
552 | - * they will each be for $0.99333333, which gets rounded to $1 again. |
|
553 | - * So the transaction total will be $2.99, but each registration will be for $1, |
|
554 | - * so if each registrant paid individually they will have overpaid by $0.01. |
|
555 | - * So in order to overcome this, we check for any difference, and if there is a difference |
|
556 | - * we just grab one registrant at random and make them responsible for it. |
|
557 | - * This should be used after setting REG_final_prices (it's done automatically as part of |
|
558 | - * EE_Registration_Processor::update_registration_final_prices()) |
|
559 | - * |
|
560 | - * @param EE_Transaction $transaction |
|
561 | - * @return bool success verifying that there is NO difference after this method is done |
|
562 | - * @throws EE_Error |
|
563 | - * @throws InvalidArgumentException |
|
564 | - * @throws InvalidDataTypeException |
|
565 | - * @throws InvalidInterfaceException |
|
566 | - */ |
|
567 | - public function fix_reg_final_price_rounding_issue($transaction) |
|
568 | - { |
|
569 | - $reg_final_price_sum = EEM_Registration::instance()->sum( |
|
570 | - array( |
|
571 | - array( |
|
572 | - 'TXN_ID' => $transaction->ID(), |
|
573 | - ), |
|
574 | - ), |
|
575 | - 'REG_final_price' |
|
576 | - ); |
|
577 | - $diff = $transaction->total() - $reg_final_price_sum; |
|
578 | - // ok then, just grab one of the registrations |
|
579 | - if ($diff !== 0) { |
|
580 | - $a_reg = EEM_Registration::instance()->get_one( |
|
581 | - array( |
|
582 | - array( |
|
583 | - 'TXN_ID' => $transaction->ID(), |
|
584 | - ), |
|
585 | - ) |
|
586 | - ); |
|
587 | - return $a_reg instanceof EE_Registration |
|
588 | - ? (bool) $a_reg->save(array('REG_final_price' => $a_reg->final_price() + $diff)) |
|
589 | - : false; |
|
590 | - } |
|
591 | - return true; |
|
592 | - } |
|
593 | - |
|
594 | - |
|
595 | - /** |
|
596 | - * update_registration_after_being_canceled_or_declined |
|
597 | - * |
|
598 | - * @param EE_Registration $registration |
|
599 | - * @param array $closed_reg_statuses |
|
600 | - * @param bool $update_reg |
|
601 | - * @return bool |
|
602 | - * @throws EE_Error |
|
603 | - * @throws RuntimeException |
|
604 | - */ |
|
605 | - public function update_registration_after_being_canceled_or_declined( |
|
606 | - EE_Registration $registration, |
|
607 | - array $closed_reg_statuses = array(), |
|
608 | - $update_reg = true |
|
609 | - ) { |
|
610 | - // these reg statuses should not be considered in any calculations involving monies owing |
|
611 | - $closed_reg_statuses = ! empty($closed_reg_statuses) |
|
612 | - ? $closed_reg_statuses |
|
613 | - : EEM_Registration::closed_reg_statuses(); |
|
614 | - if (! in_array($registration->status_ID(), $closed_reg_statuses, true)) { |
|
615 | - return false; |
|
616 | - } |
|
617 | - // release a reserved ticket by decrementing ticket and datetime reserved values |
|
618 | - $registration->release_reserved_ticket(true, 'RegProcessor:' . __LINE__); |
|
619 | - $registration->set_final_price(0); |
|
620 | - if ($update_reg) { |
|
621 | - $registration->save(); |
|
622 | - } |
|
623 | - return true; |
|
624 | - } |
|
625 | - |
|
626 | - |
|
627 | - /** |
|
628 | - * update_canceled_or_declined_registration_after_being_reinstated |
|
629 | - * |
|
630 | - * @param EE_Registration $registration |
|
631 | - * @param array $closed_reg_statuses |
|
632 | - * @param bool $update_reg |
|
633 | - * @return bool |
|
634 | - * @throws EE_Error |
|
635 | - * @throws RuntimeException |
|
636 | - */ |
|
637 | - public function update_canceled_or_declined_registration_after_being_reinstated( |
|
638 | - EE_Registration $registration, |
|
639 | - array $closed_reg_statuses = array(), |
|
640 | - $update_reg = true |
|
641 | - ) { |
|
642 | - // these reg statuses should not be considered in any calculations involving monies owing |
|
643 | - $closed_reg_statuses = ! empty($closed_reg_statuses) ? $closed_reg_statuses |
|
644 | - : EEM_Registration::closed_reg_statuses(); |
|
645 | - if (in_array($registration->status_ID(), $closed_reg_statuses, true)) { |
|
646 | - return false; |
|
647 | - } |
|
648 | - $ticket = $registration->ticket(); |
|
649 | - if (! $ticket instanceof EE_Ticket) { |
|
650 | - throw new EE_Error( |
|
651 | - sprintf( |
|
652 | - esc_html__( |
|
653 | - 'The Ticket for Registration %1$d was not found or is invalid.', |
|
654 | - 'event_espresso' |
|
655 | - ), |
|
656 | - $registration->ticket_ID() |
|
657 | - ) |
|
658 | - ); |
|
659 | - } |
|
660 | - $registration->set_final_price($ticket->price()); |
|
661 | - if ($update_reg) { |
|
662 | - $registration->save(); |
|
663 | - } |
|
664 | - return true; |
|
665 | - } |
|
666 | - |
|
667 | - |
|
668 | - /** |
|
669 | - * generate_ONE_registration_from_line_item |
|
670 | - * Although a ticket line item may have a quantity greater than 1, |
|
671 | - * this method will ONLY CREATE ONE REGISTRATION !!! |
|
672 | - * Regardless of the ticket line item quantity. |
|
673 | - * This means that any code calling this method is responsible for ensuring |
|
674 | - * that the final registration count matches the ticket line item quantity. |
|
675 | - * This was done to make it easier to match the number of registrations |
|
676 | - * to the number of tickets in the cart, when the cart has been edited |
|
677 | - * after SPCO has already been initialized. So if an additional ticket was added to the cart, you can simply pass |
|
678 | - * the line item to this method to add a second ticket, and in this case, you would not want to add 2 tickets. |
|
679 | - * |
|
680 | - * @deprecated |
|
681 | - * @since 4.9.1 |
|
682 | - * @param EE_Line_Item $line_item |
|
683 | - * @param \EE_Transaction $transaction |
|
684 | - * @param int $att_nmbr |
|
685 | - * @param int $total_ticket_count |
|
686 | - * @return EE_Registration | null |
|
687 | - * @throws \OutOfRangeException |
|
688 | - * @throws \EventEspresso\core\exceptions\UnexpectedEntityException |
|
689 | - * @throws \EE_Error |
|
690 | - */ |
|
691 | - public function generate_ONE_registration_from_line_item( |
|
692 | - EE_Line_Item $line_item, |
|
693 | - EE_Transaction $transaction, |
|
694 | - $att_nmbr = 1, |
|
695 | - $total_ticket_count = 1 |
|
696 | - ) { |
|
697 | - EE_Error::doing_it_wrong( |
|
698 | - __CLASS__ . '::' . __FUNCTION__, |
|
699 | - sprintf( |
|
700 | - esc_html__('This method is deprecated. Please use "%s" instead', 'event_espresso'), |
|
701 | - '\EventEspresso\core\domain\services\registration\CreateRegistrationService::create()' |
|
702 | - ), |
|
703 | - '4.9.1', |
|
704 | - '5.0.0' |
|
705 | - ); |
|
706 | - // grab the related ticket object for this line_item |
|
707 | - $ticket = $line_item->ticket(); |
|
708 | - if (! $ticket instanceof EE_Ticket) { |
|
709 | - EE_Error::add_error( |
|
710 | - sprintf( |
|
711 | - esc_html__('Line item %s did not contain a valid ticket', 'event_espresso'), |
|
712 | - $line_item->ID() |
|
713 | - ), |
|
714 | - __FILE__, |
|
715 | - __FUNCTION__, |
|
716 | - __LINE__ |
|
717 | - ); |
|
718 | - return null; |
|
719 | - } |
|
720 | - $registration_service = new CreateRegistrationService(); |
|
721 | - // then generate a new registration from that |
|
722 | - return $registration_service->create( |
|
723 | - $ticket->get_related_event(), |
|
724 | - $transaction, |
|
725 | - $ticket, |
|
726 | - $line_item, |
|
727 | - $att_nmbr, |
|
728 | - $total_ticket_count |
|
729 | - ); |
|
730 | - } |
|
731 | - |
|
732 | - |
|
733 | - /** |
|
734 | - * generates reg_url_link |
|
735 | - * |
|
736 | - * @deprecated |
|
737 | - * @since 4.9.1 |
|
738 | - * @param int $att_nmbr |
|
739 | - * @param EE_Line_Item | string $item |
|
740 | - * @return string |
|
741 | - * @throws InvalidArgumentException |
|
742 | - */ |
|
743 | - public function generate_reg_url_link($att_nmbr, $item) |
|
744 | - { |
|
745 | - EE_Error::doing_it_wrong( |
|
746 | - __CLASS__ . '::' . __FUNCTION__, |
|
747 | - sprintf( |
|
748 | - esc_html__('This method is deprecated. Please use "%s" instead', 'event_espresso'), |
|
749 | - 'EventEspresso\core\domain\entities\RegUrlLink' |
|
750 | - ), |
|
751 | - '4.9.1', |
|
752 | - '5.0.0' |
|
753 | - ); |
|
754 | - return new RegUrlLink($att_nmbr, $item); |
|
755 | - } |
|
756 | - |
|
757 | - |
|
758 | - /** |
|
759 | - * generates reg code |
|
760 | - * |
|
761 | - * @deprecated |
|
762 | - * @since 4.9.1 |
|
763 | - * @param EE_Registration $registration |
|
764 | - * @return string |
|
765 | - * @throws EE_Error |
|
766 | - * @throws EntityNotFoundException |
|
767 | - * @throws InvalidArgumentException |
|
768 | - */ |
|
769 | - public function generate_reg_code(EE_Registration $registration) |
|
770 | - { |
|
771 | - EE_Error::doing_it_wrong( |
|
772 | - __CLASS__ . '::' . __FUNCTION__, |
|
773 | - sprintf( |
|
774 | - esc_html__('This method is deprecated. Please use "%s" instead', 'event_espresso'), |
|
775 | - 'EventEspresso\core\domain\entities\RegCode' |
|
776 | - ), |
|
777 | - '4.9.1', |
|
778 | - '5.0.0' |
|
779 | - ); |
|
780 | - return apply_filters( |
|
781 | - 'FHEE__EE_Registration_Processor___generate_reg_code__new_reg_code', |
|
782 | - new RegCode( |
|
783 | - RegUrlLink::fromRegistration($registration), |
|
784 | - $registration->transaction(), |
|
785 | - $registration->ticket() |
|
786 | - ), |
|
787 | - $registration |
|
788 | - ); |
|
789 | - } |
|
27 | + /** |
|
28 | + * @var EE_Registration_Processor $_instance |
|
29 | + * @access private |
|
30 | + */ |
|
31 | + private static $_instance; |
|
32 | + |
|
33 | + /** |
|
34 | + * initial reg status at the beginning of this request. |
|
35 | + * indexed by registration ID |
|
36 | + * |
|
37 | + * @var array |
|
38 | + */ |
|
39 | + protected $_old_reg_status = array(); |
|
40 | + |
|
41 | + /** |
|
42 | + * reg status at the end of the request after all processing. |
|
43 | + * indexed by registration ID |
|
44 | + * |
|
45 | + * @var array |
|
46 | + */ |
|
47 | + protected $_new_reg_status = array(); |
|
48 | + |
|
49 | + /** |
|
50 | + * amounts paid at the end of the request after all processing. |
|
51 | + * indexed by registration ID |
|
52 | + * |
|
53 | + * @var array |
|
54 | + */ |
|
55 | + protected static $_amount_paid = array(); |
|
56 | + |
|
57 | + /** |
|
58 | + * Cache of the reg final price for registrations corresponding to a ticket line item |
|
59 | + * |
|
60 | + * @deprecated |
|
61 | + * @var array @see EEH_Line_Item::calculate_reg_final_prices_per_line_item()'s return value |
|
62 | + */ |
|
63 | + protected $_reg_final_price_per_tkt_line_item; |
|
64 | + |
|
65 | + /** |
|
66 | + * @var EE_Request $request |
|
67 | + */ |
|
68 | + protected $request; |
|
69 | + |
|
70 | + |
|
71 | + /** |
|
72 | + * @singleton method used to instantiate class object |
|
73 | + * @param EE_Request|null $request |
|
74 | + * @return EE_Registration_Processor instance |
|
75 | + * @throws \InvalidArgumentException |
|
76 | + * @throws \EventEspresso\core\exceptions\InvalidInterfaceException |
|
77 | + * @throws \EventEspresso\core\exceptions\InvalidDataTypeException |
|
78 | + */ |
|
79 | + public static function instance(EE_Request $request = null) |
|
80 | + { |
|
81 | + // check if class object is instantiated |
|
82 | + if (! self::$_instance instanceof EE_Registration_Processor) { |
|
83 | + if (! $request instanceof EE_Request) { |
|
84 | + $request = LoaderFactory::getLoader()->getShared('EE_Request'); |
|
85 | + } |
|
86 | + self::$_instance = new self($request); |
|
87 | + } |
|
88 | + return self::$_instance; |
|
89 | + } |
|
90 | + |
|
91 | + |
|
92 | + /** |
|
93 | + * EE_Registration_Processor constructor. |
|
94 | + * |
|
95 | + * @param EE_Request $request |
|
96 | + */ |
|
97 | + public function __construct(EE_Request $request) |
|
98 | + { |
|
99 | + $this->request = $request; |
|
100 | + } |
|
101 | + |
|
102 | + |
|
103 | + /** |
|
104 | + * @param int $REG_ID |
|
105 | + * @return string |
|
106 | + */ |
|
107 | + public function old_reg_status($REG_ID) |
|
108 | + { |
|
109 | + return isset($this->_old_reg_status[ $REG_ID ]) ? $this->_old_reg_status[ $REG_ID ] : null; |
|
110 | + } |
|
111 | + |
|
112 | + |
|
113 | + /** |
|
114 | + * @param int $REG_ID |
|
115 | + * @param string $old_reg_status |
|
116 | + */ |
|
117 | + public function set_old_reg_status($REG_ID, $old_reg_status) |
|
118 | + { |
|
119 | + // only set the first time |
|
120 | + if (! isset($this->_old_reg_status[ $REG_ID ])) { |
|
121 | + $this->_old_reg_status[ $REG_ID ] = $old_reg_status; |
|
122 | + } |
|
123 | + } |
|
124 | + |
|
125 | + |
|
126 | + /** |
|
127 | + * @param int $REG_ID |
|
128 | + * @return string |
|
129 | + */ |
|
130 | + public function new_reg_status($REG_ID) |
|
131 | + { |
|
132 | + return isset($this->_new_reg_status[ $REG_ID ]) ? $this->_new_reg_status[ $REG_ID ] : null; |
|
133 | + } |
|
134 | + |
|
135 | + |
|
136 | + /** |
|
137 | + * @param int $REG_ID |
|
138 | + * @param string $new_reg_status |
|
139 | + */ |
|
140 | + public function set_new_reg_status($REG_ID, $new_reg_status) |
|
141 | + { |
|
142 | + $this->_new_reg_status[ $REG_ID ] = $new_reg_status; |
|
143 | + } |
|
144 | + |
|
145 | + |
|
146 | + /** |
|
147 | + * reg_status_updated |
|
148 | + * |
|
149 | + * @param int $REG_ID |
|
150 | + * @return bool |
|
151 | + */ |
|
152 | + public function reg_status_updated($REG_ID) |
|
153 | + { |
|
154 | + return $this->new_reg_status($REG_ID) !== $this->old_reg_status($REG_ID); |
|
155 | + } |
|
156 | + |
|
157 | + |
|
158 | + /** |
|
159 | + * @param EE_Registration $registration |
|
160 | + * @throws EE_Error |
|
161 | + * @throws EntityNotFoundException |
|
162 | + * @throws InvalidArgumentException |
|
163 | + * @throws InvalidDataTypeException |
|
164 | + * @throws InvalidInterfaceException |
|
165 | + * @throws ReflectionException |
|
166 | + * @throws RuntimeException |
|
167 | + */ |
|
168 | + public function update_registration_status_and_trigger_notifications(EE_Registration $registration) |
|
169 | + { |
|
170 | + $this->toggle_incomplete_registration_status_to_default($registration, false); |
|
171 | + $this->toggle_registration_status_for_default_approved_events($registration, false); |
|
172 | + $this->toggle_registration_status_if_no_monies_owing($registration, false); |
|
173 | + $registration->save(); |
|
174 | + // trigger notifications |
|
175 | + $this->trigger_registration_update_notifications($registration); |
|
176 | + } |
|
177 | + |
|
178 | + |
|
179 | + /** |
|
180 | + * manually_update_registration_status |
|
181 | + * |
|
182 | + * @access public |
|
183 | + * @param EE_Registration $registration |
|
184 | + * @param string $new_reg_status |
|
185 | + * @param bool $save TRUE will save the registration if the status is updated, FALSE will leave that up |
|
186 | + * to client code |
|
187 | + * @return bool |
|
188 | + * @throws EE_Error |
|
189 | + * @throws EntityNotFoundException |
|
190 | + * @throws InvalidArgumentException |
|
191 | + * @throws InvalidDataTypeException |
|
192 | + * @throws InvalidInterfaceException |
|
193 | + * @throws ReflectionException |
|
194 | + * @throws RuntimeException |
|
195 | + */ |
|
196 | + public function manually_update_registration_status( |
|
197 | + EE_Registration $registration, |
|
198 | + $new_reg_status = '', |
|
199 | + $save = true |
|
200 | + ) { |
|
201 | + // set initial REG_Status |
|
202 | + $this->set_old_reg_status($registration->ID(), $registration->status_ID()); |
|
203 | + // set incoming REG_Status |
|
204 | + $this->set_new_reg_status($registration->ID(), $new_reg_status); |
|
205 | + // toggle reg status but only if it has changed and the user can do so |
|
206 | + if ($this->reg_status_updated($registration->ID()) |
|
207 | + && ( |
|
208 | + (! $this->request->isAdmin() || $this->request->isFrontAjax()) |
|
209 | + || EE_Registry::instance()->CAP->current_user_can( |
|
210 | + 'ee_edit_registration', |
|
211 | + 'toggle_registration_status', |
|
212 | + $registration->ID() |
|
213 | + ) |
|
214 | + ) |
|
215 | + ) { |
|
216 | + // change status to new value |
|
217 | + $updated = $registration->set_status($this->new_reg_status($registration->ID())); |
|
218 | + if ($updated && $save) { |
|
219 | + $registration->save(); |
|
220 | + } |
|
221 | + return true; |
|
222 | + } |
|
223 | + return false; |
|
224 | + } |
|
225 | + |
|
226 | + |
|
227 | + /** |
|
228 | + * toggle_incomplete_registration_status_to_default |
|
229 | + * changes any incomplete registrations to either the event or global default registration status |
|
230 | + * |
|
231 | + * @access public |
|
232 | + * @param EE_Registration $registration |
|
233 | + * @param bool $save TRUE will save the registration if the status is updated, FALSE will leave |
|
234 | + * that up to client code |
|
235 | + * @param ContextInterface|null $context |
|
236 | + * @return void |
|
237 | + * @throws EE_Error |
|
238 | + * @throws InvalidArgumentException |
|
239 | + * @throws ReflectionException |
|
240 | + * @throws RuntimeException |
|
241 | + * @throws EntityNotFoundException |
|
242 | + * @throws InvalidDataTypeException |
|
243 | + * @throws InvalidInterfaceException |
|
244 | + */ |
|
245 | + public function toggle_incomplete_registration_status_to_default( |
|
246 | + EE_Registration $registration, |
|
247 | + $save = true, |
|
248 | + ContextInterface $context = null |
|
249 | + ) { |
|
250 | + $existing_reg_status = $registration->status_ID(); |
|
251 | + // set initial REG_Status |
|
252 | + $this->set_old_reg_status($registration->ID(), $existing_reg_status); |
|
253 | + // is the registration currently incomplete ? |
|
254 | + if ($registration->status_ID() === EEM_Registration::status_id_incomplete) { |
|
255 | + // grab default reg status for the event, if set |
|
256 | + $event_default_registration_status = $registration->event()->default_registration_status(); |
|
257 | + // if no default reg status is set for the event, then use the global value |
|
258 | + $STS_ID = ! empty($event_default_registration_status) |
|
259 | + ? $event_default_registration_status |
|
260 | + : EE_Registry::instance()->CFG->registration->default_STS_ID; |
|
261 | + // if the event default reg status is approved, then downgrade temporarily to payment pending to ensure that payments are triggered |
|
262 | + $STS_ID = $STS_ID === EEM_Registration::status_id_approved ? EEM_Registration::status_id_pending_payment |
|
263 | + : $STS_ID; |
|
264 | + // set incoming REG_Status |
|
265 | + $this->set_new_reg_status($registration->ID(), $STS_ID); |
|
266 | + $registration->set_status($STS_ID, false, $context); |
|
267 | + if ($save) { |
|
268 | + $registration->save(); |
|
269 | + } |
|
270 | + // don't trigger notifications during IPNs because they will get triggered by EE_Payment_Processor |
|
271 | + if (! EE_Processor_Base::$IPN) { |
|
272 | + // otherwise, send out notifications |
|
273 | + add_filter('FHEE__EED_Messages___maybe_registration__deliver_notifications', '__return_true', 10); |
|
274 | + } |
|
275 | + // DEBUG LOG |
|
276 | + // $this->log( |
|
277 | + // __CLASS__, |
|
278 | + // __FUNCTION__, |
|
279 | + // __LINE__, |
|
280 | + // $registration->transaction(), |
|
281 | + // array( |
|
282 | + // 'IPN' => EE_Processor_Base::$IPN, |
|
283 | + // 'deliver_notifications' => has_filter( |
|
284 | + // 'FHEE__EED_Messages___maybe_registration__deliver_notifications' |
|
285 | + // ), |
|
286 | + // ) |
|
287 | + // ); |
|
288 | + } |
|
289 | + } |
|
290 | + |
|
291 | + |
|
292 | + /** |
|
293 | + * toggle_registration_status_for_default_approved_events |
|
294 | + * |
|
295 | + * @access public |
|
296 | + * @param EE_Registration $registration |
|
297 | + * @param bool $save TRUE will save the registration if the status is updated, FALSE will leave that up |
|
298 | + * to client code |
|
299 | + * @return bool |
|
300 | + * @throws EE_Error |
|
301 | + * @throws EntityNotFoundException |
|
302 | + * @throws InvalidArgumentException |
|
303 | + * @throws InvalidDataTypeException |
|
304 | + * @throws InvalidInterfaceException |
|
305 | + * @throws ReflectionException |
|
306 | + * @throws RuntimeException |
|
307 | + */ |
|
308 | + public function toggle_registration_status_for_default_approved_events(EE_Registration $registration, $save = true) |
|
309 | + { |
|
310 | + $reg_status = $registration->status_ID(); |
|
311 | + // set initial REG_Status |
|
312 | + $this->set_old_reg_status($registration->ID(), $reg_status); |
|
313 | + // if not already, toggle reg status to approved IF the event default reg status is approved |
|
314 | + // ( as long as the registration wasn't cancelled or declined at some point ) |
|
315 | + if ($reg_status !== EEM_Registration::status_id_cancelled |
|
316 | + && $reg_status |
|
317 | + !== EEM_Registration::status_id_declined |
|
318 | + && $reg_status !== EEM_Registration::status_id_approved |
|
319 | + && $registration->event()->default_registration_status() === EEM_Registration::status_id_approved |
|
320 | + ) { |
|
321 | + // set incoming REG_Status |
|
322 | + $this->set_new_reg_status($registration->ID(), EEM_Registration::status_id_approved); |
|
323 | + // toggle status to approved |
|
324 | + $registration->set_status(EEM_Registration::status_id_approved); |
|
325 | + if ($save) { |
|
326 | + $registration->save(); |
|
327 | + } |
|
328 | + // don't trigger notifications during IPNs because they will get triggered by EE_Payment_Processor |
|
329 | + if (! EE_Processor_Base::$IPN) { |
|
330 | + // otherwise, send out notifications |
|
331 | + add_filter('FHEE__EED_Messages___maybe_registration__deliver_notifications', '__return_true', 10); |
|
332 | + } |
|
333 | + // DEBUG LOG |
|
334 | + // $this->log( |
|
335 | + // __CLASS__, |
|
336 | + // __FUNCTION__, |
|
337 | + // __LINE__, |
|
338 | + // $registration->transaction(), |
|
339 | + // array( |
|
340 | + // 'IPN' => EE_Processor_Base::$IPN, |
|
341 | + // 'deliver_notifications' => has_filter( |
|
342 | + // 'FHEE__EED_Messages___maybe_registration__deliver_notifications' |
|
343 | + // ), |
|
344 | + // ) |
|
345 | + // ); |
|
346 | + return true; |
|
347 | + } |
|
348 | + return false; |
|
349 | + } |
|
350 | + |
|
351 | + |
|
352 | + /** |
|
353 | + * toggle_registration_statuses_if_no_monies_owing |
|
354 | + * |
|
355 | + * @access public |
|
356 | + * @param EE_Registration $registration |
|
357 | + * @param bool $save TRUE will save the registration if the status is updated, FALSE will leave that up |
|
358 | + * to client code |
|
359 | + * @param array $additional_details |
|
360 | + * @return bool |
|
361 | + * @throws EE_Error |
|
362 | + * @throws EntityNotFoundException |
|
363 | + * @throws InvalidArgumentException |
|
364 | + * @throws InvalidDataTypeException |
|
365 | + * @throws InvalidInterfaceException |
|
366 | + * @throws ReflectionException |
|
367 | + * @throws RuntimeException |
|
368 | + */ |
|
369 | + public function toggle_registration_status_if_no_monies_owing( |
|
370 | + EE_Registration $registration, |
|
371 | + $save = true, |
|
372 | + array $additional_details = array() |
|
373 | + ) { |
|
374 | + // set initial REG_Status |
|
375 | + $this->set_old_reg_status($registration->ID(), $registration->status_ID()); |
|
376 | + // was a payment just made ? |
|
377 | + $payment = isset($additional_details['payment_updates'], $additional_details['last_payment']) |
|
378 | + && $additional_details['payment_updates'] |
|
379 | + && $additional_details['last_payment'] instanceof EE_Payment |
|
380 | + ? $additional_details['last_payment'] |
|
381 | + : null; |
|
382 | + $total_paid = array_sum(self::$_amount_paid); |
|
383 | + // toggle reg status to approved IF |
|
384 | + if (// REG status is pending payment |
|
385 | + $registration->status_ID() === EEM_Registration::status_id_pending_payment |
|
386 | + // AND no monies are owing |
|
387 | + && ( |
|
388 | + ( |
|
389 | + $registration->transaction()->is_completed() |
|
390 | + || $registration->transaction()->is_overpaid() |
|
391 | + || $registration->transaction()->is_free() |
|
392 | + || apply_filters( |
|
393 | + 'FHEE__EE_Registration_Processor__toggle_registration_status_if_no_monies_owing', |
|
394 | + false, |
|
395 | + $registration |
|
396 | + ) |
|
397 | + ) |
|
398 | + || ( |
|
399 | + $payment instanceof EE_Payment && $payment->is_approved() |
|
400 | + && // this specific registration has not yet been paid for |
|
401 | + ! isset(self::$_amount_paid[ $registration->ID() ]) |
|
402 | + && // payment amount, less what we have already attributed to other registrations, is greater than this reg's final price |
|
403 | + $payment->amount() - $total_paid >= $registration->final_price() |
|
404 | + ) |
|
405 | + ) |
|
406 | + ) { |
|
407 | + // mark as paid |
|
408 | + self::$_amount_paid[ $registration->ID() ] = $registration->final_price(); |
|
409 | + // track new REG_Status |
|
410 | + $this->set_new_reg_status($registration->ID(), EEM_Registration::status_id_approved); |
|
411 | + // toggle status to approved |
|
412 | + $registration->set_status(EEM_Registration::status_id_approved); |
|
413 | + if ($save) { |
|
414 | + $registration->save(); |
|
415 | + } |
|
416 | + // don't trigger notifications during IPNs because they will get triggered by EE_Payment_Processor |
|
417 | + if (! EE_Processor_Base::$IPN) { |
|
418 | + // otherwise, send out notifications |
|
419 | + add_filter('FHEE__EED_Messages___maybe_registration__deliver_notifications', '__return_true', 10); |
|
420 | + } |
|
421 | + // DEBUG LOG |
|
422 | + // $this->log( |
|
423 | + // __CLASS__, |
|
424 | + // __FUNCTION__, |
|
425 | + // __LINE__, |
|
426 | + // $registration->transaction(), |
|
427 | + // array( |
|
428 | + // 'IPN' => EE_Processor_Base::$IPN, |
|
429 | + // 'deliver_notifications' => has_filter( |
|
430 | + // 'FHEE__EED_Messages___maybe_registration__deliver_notifications' |
|
431 | + // ), |
|
432 | + // ) |
|
433 | + // ); |
|
434 | + return true; |
|
435 | + } |
|
436 | + return false; |
|
437 | + } |
|
438 | + |
|
439 | + |
|
440 | + /** |
|
441 | + * registration_status_changed |
|
442 | + * |
|
443 | + * @access public |
|
444 | + * @param EE_Registration $registration |
|
445 | + * @param array $additional_details |
|
446 | + * @return void |
|
447 | + */ |
|
448 | + public function trigger_registration_update_notifications($registration, array $additional_details = array()) |
|
449 | + { |
|
450 | + try { |
|
451 | + if (! $registration instanceof EE_Registration) { |
|
452 | + throw new EE_Error( |
|
453 | + esc_html__('An invalid registration was received.', 'event_espresso') |
|
454 | + ); |
|
455 | + } |
|
456 | + // EE_Registry::instance()->load_helper('Debug_Tools'); |
|
457 | + // EEH_Debug_Tools::log( |
|
458 | + // __CLASS__, |
|
459 | + // __FUNCTION__, |
|
460 | + // __LINE__, |
|
461 | + // array($registration->transaction(), $additional_details), |
|
462 | + // false, |
|
463 | + // 'EE_Transaction: ' . $registration->transaction()->ID() |
|
464 | + // ); |
|
465 | + if (! $registration->is_primary_registrant()) { |
|
466 | + return; |
|
467 | + } |
|
468 | + do_action( |
|
469 | + 'AHEE__EE_Registration_Processor__trigger_registration_update_notifications', |
|
470 | + $registration, |
|
471 | + $additional_details |
|
472 | + ); |
|
473 | + } catch (Exception $e) { |
|
474 | + EE_Error::add_error($e->getMessage(), $e->getFile(), 'unknown_function_from_exception', $e->getLine()); |
|
475 | + } |
|
476 | + } |
|
477 | + |
|
478 | + |
|
479 | + /** |
|
480 | + * sets reg status based either on passed param or on transaction status and event pre-approval setting |
|
481 | + * |
|
482 | + * @param EE_Registration $registration |
|
483 | + * @param array $additional_details |
|
484 | + * @return bool |
|
485 | + * @throws EE_Error |
|
486 | + * @throws EntityNotFoundException |
|
487 | + * @throws InvalidArgumentException |
|
488 | + * @throws InvalidDataTypeException |
|
489 | + * @throws InvalidInterfaceException |
|
490 | + * @throws ReflectionException |
|
491 | + * @throws RuntimeException |
|
492 | + */ |
|
493 | + public function update_registration_after_checkout_or_payment( |
|
494 | + EE_Registration $registration, |
|
495 | + array $additional_details = array() |
|
496 | + ) { |
|
497 | + // set initial REG_Status |
|
498 | + $this->set_old_reg_status($registration->ID(), $registration->status_ID()); |
|
499 | + // if the registration status gets updated, then save the registration |
|
500 | + if ($this->toggle_registration_status_for_default_approved_events($registration, false) |
|
501 | + || $this->toggle_registration_status_if_no_monies_owing( |
|
502 | + $registration, |
|
503 | + false, |
|
504 | + $additional_details |
|
505 | + ) |
|
506 | + ) { |
|
507 | + $registration->save(); |
|
508 | + } |
|
509 | + // set new REG_Status |
|
510 | + $this->set_new_reg_status($registration->ID(), $registration->status_ID()); |
|
511 | + return $this->reg_status_updated($registration->ID()) |
|
512 | + && $this->new_reg_status($registration->ID()) === EEM_Registration::status_id_approved; |
|
513 | + } |
|
514 | + |
|
515 | + |
|
516 | + /** |
|
517 | + * Updates the registration' final prices based on the current line item tree (taking into account |
|
518 | + * discounts, taxes, and other line items unrelated to tickets.) |
|
519 | + * |
|
520 | + * @param EE_Transaction $transaction |
|
521 | + * @param boolean $save_regs whether to immediately save registrations in this function or not |
|
522 | + * @return void |
|
523 | + * @throws EE_Error |
|
524 | + * @throws InvalidArgumentException |
|
525 | + * @throws InvalidDataTypeException |
|
526 | + * @throws InvalidInterfaceException |
|
527 | + * @throws RuntimeException |
|
528 | + */ |
|
529 | + public function update_registration_final_prices($transaction, $save_regs = true) |
|
530 | + { |
|
531 | + $reg_final_price_per_ticket_line_item = EEH_Line_Item::calculate_reg_final_prices_per_line_item( |
|
532 | + $transaction->total_line_item() |
|
533 | + ); |
|
534 | + foreach ($transaction->registrations() as $registration) { |
|
535 | + /** @var EE_Line_Item $line_item */ |
|
536 | + $line_item = EEM_Line_Item::instance()->get_line_item_for_registration($registration); |
|
537 | + if (isset($reg_final_price_per_ticket_line_item[ $line_item->ID() ])) { |
|
538 | + $registration->set_final_price($reg_final_price_per_ticket_line_item[ $line_item->ID() ]); |
|
539 | + if ($save_regs) { |
|
540 | + $registration->save(); |
|
541 | + } |
|
542 | + } |
|
543 | + } |
|
544 | + // and make sure there's no rounding problem |
|
545 | + $this->fix_reg_final_price_rounding_issue($transaction); |
|
546 | + } |
|
547 | + |
|
548 | + |
|
549 | + /** |
|
550 | + * Makes sure there is no rounding errors for the REG_final_prices. |
|
551 | + * Eg, if we have 3 registrations for $1, and there is a $0.01 discount between the three of them, |
|
552 | + * they will each be for $0.99333333, which gets rounded to $1 again. |
|
553 | + * So the transaction total will be $2.99, but each registration will be for $1, |
|
554 | + * so if each registrant paid individually they will have overpaid by $0.01. |
|
555 | + * So in order to overcome this, we check for any difference, and if there is a difference |
|
556 | + * we just grab one registrant at random and make them responsible for it. |
|
557 | + * This should be used after setting REG_final_prices (it's done automatically as part of |
|
558 | + * EE_Registration_Processor::update_registration_final_prices()) |
|
559 | + * |
|
560 | + * @param EE_Transaction $transaction |
|
561 | + * @return bool success verifying that there is NO difference after this method is done |
|
562 | + * @throws EE_Error |
|
563 | + * @throws InvalidArgumentException |
|
564 | + * @throws InvalidDataTypeException |
|
565 | + * @throws InvalidInterfaceException |
|
566 | + */ |
|
567 | + public function fix_reg_final_price_rounding_issue($transaction) |
|
568 | + { |
|
569 | + $reg_final_price_sum = EEM_Registration::instance()->sum( |
|
570 | + array( |
|
571 | + array( |
|
572 | + 'TXN_ID' => $transaction->ID(), |
|
573 | + ), |
|
574 | + ), |
|
575 | + 'REG_final_price' |
|
576 | + ); |
|
577 | + $diff = $transaction->total() - $reg_final_price_sum; |
|
578 | + // ok then, just grab one of the registrations |
|
579 | + if ($diff !== 0) { |
|
580 | + $a_reg = EEM_Registration::instance()->get_one( |
|
581 | + array( |
|
582 | + array( |
|
583 | + 'TXN_ID' => $transaction->ID(), |
|
584 | + ), |
|
585 | + ) |
|
586 | + ); |
|
587 | + return $a_reg instanceof EE_Registration |
|
588 | + ? (bool) $a_reg->save(array('REG_final_price' => $a_reg->final_price() + $diff)) |
|
589 | + : false; |
|
590 | + } |
|
591 | + return true; |
|
592 | + } |
|
593 | + |
|
594 | + |
|
595 | + /** |
|
596 | + * update_registration_after_being_canceled_or_declined |
|
597 | + * |
|
598 | + * @param EE_Registration $registration |
|
599 | + * @param array $closed_reg_statuses |
|
600 | + * @param bool $update_reg |
|
601 | + * @return bool |
|
602 | + * @throws EE_Error |
|
603 | + * @throws RuntimeException |
|
604 | + */ |
|
605 | + public function update_registration_after_being_canceled_or_declined( |
|
606 | + EE_Registration $registration, |
|
607 | + array $closed_reg_statuses = array(), |
|
608 | + $update_reg = true |
|
609 | + ) { |
|
610 | + // these reg statuses should not be considered in any calculations involving monies owing |
|
611 | + $closed_reg_statuses = ! empty($closed_reg_statuses) |
|
612 | + ? $closed_reg_statuses |
|
613 | + : EEM_Registration::closed_reg_statuses(); |
|
614 | + if (! in_array($registration->status_ID(), $closed_reg_statuses, true)) { |
|
615 | + return false; |
|
616 | + } |
|
617 | + // release a reserved ticket by decrementing ticket and datetime reserved values |
|
618 | + $registration->release_reserved_ticket(true, 'RegProcessor:' . __LINE__); |
|
619 | + $registration->set_final_price(0); |
|
620 | + if ($update_reg) { |
|
621 | + $registration->save(); |
|
622 | + } |
|
623 | + return true; |
|
624 | + } |
|
625 | + |
|
626 | + |
|
627 | + /** |
|
628 | + * update_canceled_or_declined_registration_after_being_reinstated |
|
629 | + * |
|
630 | + * @param EE_Registration $registration |
|
631 | + * @param array $closed_reg_statuses |
|
632 | + * @param bool $update_reg |
|
633 | + * @return bool |
|
634 | + * @throws EE_Error |
|
635 | + * @throws RuntimeException |
|
636 | + */ |
|
637 | + public function update_canceled_or_declined_registration_after_being_reinstated( |
|
638 | + EE_Registration $registration, |
|
639 | + array $closed_reg_statuses = array(), |
|
640 | + $update_reg = true |
|
641 | + ) { |
|
642 | + // these reg statuses should not be considered in any calculations involving monies owing |
|
643 | + $closed_reg_statuses = ! empty($closed_reg_statuses) ? $closed_reg_statuses |
|
644 | + : EEM_Registration::closed_reg_statuses(); |
|
645 | + if (in_array($registration->status_ID(), $closed_reg_statuses, true)) { |
|
646 | + return false; |
|
647 | + } |
|
648 | + $ticket = $registration->ticket(); |
|
649 | + if (! $ticket instanceof EE_Ticket) { |
|
650 | + throw new EE_Error( |
|
651 | + sprintf( |
|
652 | + esc_html__( |
|
653 | + 'The Ticket for Registration %1$d was not found or is invalid.', |
|
654 | + 'event_espresso' |
|
655 | + ), |
|
656 | + $registration->ticket_ID() |
|
657 | + ) |
|
658 | + ); |
|
659 | + } |
|
660 | + $registration->set_final_price($ticket->price()); |
|
661 | + if ($update_reg) { |
|
662 | + $registration->save(); |
|
663 | + } |
|
664 | + return true; |
|
665 | + } |
|
666 | + |
|
667 | + |
|
668 | + /** |
|
669 | + * generate_ONE_registration_from_line_item |
|
670 | + * Although a ticket line item may have a quantity greater than 1, |
|
671 | + * this method will ONLY CREATE ONE REGISTRATION !!! |
|
672 | + * Regardless of the ticket line item quantity. |
|
673 | + * This means that any code calling this method is responsible for ensuring |
|
674 | + * that the final registration count matches the ticket line item quantity. |
|
675 | + * This was done to make it easier to match the number of registrations |
|
676 | + * to the number of tickets in the cart, when the cart has been edited |
|
677 | + * after SPCO has already been initialized. So if an additional ticket was added to the cart, you can simply pass |
|
678 | + * the line item to this method to add a second ticket, and in this case, you would not want to add 2 tickets. |
|
679 | + * |
|
680 | + * @deprecated |
|
681 | + * @since 4.9.1 |
|
682 | + * @param EE_Line_Item $line_item |
|
683 | + * @param \EE_Transaction $transaction |
|
684 | + * @param int $att_nmbr |
|
685 | + * @param int $total_ticket_count |
|
686 | + * @return EE_Registration | null |
|
687 | + * @throws \OutOfRangeException |
|
688 | + * @throws \EventEspresso\core\exceptions\UnexpectedEntityException |
|
689 | + * @throws \EE_Error |
|
690 | + */ |
|
691 | + public function generate_ONE_registration_from_line_item( |
|
692 | + EE_Line_Item $line_item, |
|
693 | + EE_Transaction $transaction, |
|
694 | + $att_nmbr = 1, |
|
695 | + $total_ticket_count = 1 |
|
696 | + ) { |
|
697 | + EE_Error::doing_it_wrong( |
|
698 | + __CLASS__ . '::' . __FUNCTION__, |
|
699 | + sprintf( |
|
700 | + esc_html__('This method is deprecated. Please use "%s" instead', 'event_espresso'), |
|
701 | + '\EventEspresso\core\domain\services\registration\CreateRegistrationService::create()' |
|
702 | + ), |
|
703 | + '4.9.1', |
|
704 | + '5.0.0' |
|
705 | + ); |
|
706 | + // grab the related ticket object for this line_item |
|
707 | + $ticket = $line_item->ticket(); |
|
708 | + if (! $ticket instanceof EE_Ticket) { |
|
709 | + EE_Error::add_error( |
|
710 | + sprintf( |
|
711 | + esc_html__('Line item %s did not contain a valid ticket', 'event_espresso'), |
|
712 | + $line_item->ID() |
|
713 | + ), |
|
714 | + __FILE__, |
|
715 | + __FUNCTION__, |
|
716 | + __LINE__ |
|
717 | + ); |
|
718 | + return null; |
|
719 | + } |
|
720 | + $registration_service = new CreateRegistrationService(); |
|
721 | + // then generate a new registration from that |
|
722 | + return $registration_service->create( |
|
723 | + $ticket->get_related_event(), |
|
724 | + $transaction, |
|
725 | + $ticket, |
|
726 | + $line_item, |
|
727 | + $att_nmbr, |
|
728 | + $total_ticket_count |
|
729 | + ); |
|
730 | + } |
|
731 | + |
|
732 | + |
|
733 | + /** |
|
734 | + * generates reg_url_link |
|
735 | + * |
|
736 | + * @deprecated |
|
737 | + * @since 4.9.1 |
|
738 | + * @param int $att_nmbr |
|
739 | + * @param EE_Line_Item | string $item |
|
740 | + * @return string |
|
741 | + * @throws InvalidArgumentException |
|
742 | + */ |
|
743 | + public function generate_reg_url_link($att_nmbr, $item) |
|
744 | + { |
|
745 | + EE_Error::doing_it_wrong( |
|
746 | + __CLASS__ . '::' . __FUNCTION__, |
|
747 | + sprintf( |
|
748 | + esc_html__('This method is deprecated. Please use "%s" instead', 'event_espresso'), |
|
749 | + 'EventEspresso\core\domain\entities\RegUrlLink' |
|
750 | + ), |
|
751 | + '4.9.1', |
|
752 | + '5.0.0' |
|
753 | + ); |
|
754 | + return new RegUrlLink($att_nmbr, $item); |
|
755 | + } |
|
756 | + |
|
757 | + |
|
758 | + /** |
|
759 | + * generates reg code |
|
760 | + * |
|
761 | + * @deprecated |
|
762 | + * @since 4.9.1 |
|
763 | + * @param EE_Registration $registration |
|
764 | + * @return string |
|
765 | + * @throws EE_Error |
|
766 | + * @throws EntityNotFoundException |
|
767 | + * @throws InvalidArgumentException |
|
768 | + */ |
|
769 | + public function generate_reg_code(EE_Registration $registration) |
|
770 | + { |
|
771 | + EE_Error::doing_it_wrong( |
|
772 | + __CLASS__ . '::' . __FUNCTION__, |
|
773 | + sprintf( |
|
774 | + esc_html__('This method is deprecated. Please use "%s" instead', 'event_espresso'), |
|
775 | + 'EventEspresso\core\domain\entities\RegCode' |
|
776 | + ), |
|
777 | + '4.9.1', |
|
778 | + '5.0.0' |
|
779 | + ); |
|
780 | + return apply_filters( |
|
781 | + 'FHEE__EE_Registration_Processor___generate_reg_code__new_reg_code', |
|
782 | + new RegCode( |
|
783 | + RegUrlLink::fromRegistration($registration), |
|
784 | + $registration->transaction(), |
|
785 | + $registration->ticket() |
|
786 | + ), |
|
787 | + $registration |
|
788 | + ); |
|
789 | + } |
|
790 | 790 | } |
@@ -79,8 +79,8 @@ discard block |
||
79 | 79 | public static function instance(EE_Request $request = null) |
80 | 80 | { |
81 | 81 | // check if class object is instantiated |
82 | - if (! self::$_instance instanceof EE_Registration_Processor) { |
|
83 | - if (! $request instanceof EE_Request) { |
|
82 | + if ( ! self::$_instance instanceof EE_Registration_Processor) { |
|
83 | + if ( ! $request instanceof EE_Request) { |
|
84 | 84 | $request = LoaderFactory::getLoader()->getShared('EE_Request'); |
85 | 85 | } |
86 | 86 | self::$_instance = new self($request); |
@@ -106,7 +106,7 @@ discard block |
||
106 | 106 | */ |
107 | 107 | public function old_reg_status($REG_ID) |
108 | 108 | { |
109 | - return isset($this->_old_reg_status[ $REG_ID ]) ? $this->_old_reg_status[ $REG_ID ] : null; |
|
109 | + return isset($this->_old_reg_status[$REG_ID]) ? $this->_old_reg_status[$REG_ID] : null; |
|
110 | 110 | } |
111 | 111 | |
112 | 112 | |
@@ -117,8 +117,8 @@ discard block |
||
117 | 117 | public function set_old_reg_status($REG_ID, $old_reg_status) |
118 | 118 | { |
119 | 119 | // only set the first time |
120 | - if (! isset($this->_old_reg_status[ $REG_ID ])) { |
|
121 | - $this->_old_reg_status[ $REG_ID ] = $old_reg_status; |
|
120 | + if ( ! isset($this->_old_reg_status[$REG_ID])) { |
|
121 | + $this->_old_reg_status[$REG_ID] = $old_reg_status; |
|
122 | 122 | } |
123 | 123 | } |
124 | 124 | |
@@ -129,7 +129,7 @@ discard block |
||
129 | 129 | */ |
130 | 130 | public function new_reg_status($REG_ID) |
131 | 131 | { |
132 | - return isset($this->_new_reg_status[ $REG_ID ]) ? $this->_new_reg_status[ $REG_ID ] : null; |
|
132 | + return isset($this->_new_reg_status[$REG_ID]) ? $this->_new_reg_status[$REG_ID] : null; |
|
133 | 133 | } |
134 | 134 | |
135 | 135 | |
@@ -139,7 +139,7 @@ discard block |
||
139 | 139 | */ |
140 | 140 | public function set_new_reg_status($REG_ID, $new_reg_status) |
141 | 141 | { |
142 | - $this->_new_reg_status[ $REG_ID ] = $new_reg_status; |
|
142 | + $this->_new_reg_status[$REG_ID] = $new_reg_status; |
|
143 | 143 | } |
144 | 144 | |
145 | 145 | |
@@ -205,7 +205,7 @@ discard block |
||
205 | 205 | // toggle reg status but only if it has changed and the user can do so |
206 | 206 | if ($this->reg_status_updated($registration->ID()) |
207 | 207 | && ( |
208 | - (! $this->request->isAdmin() || $this->request->isFrontAjax()) |
|
208 | + ( ! $this->request->isAdmin() || $this->request->isFrontAjax()) |
|
209 | 209 | || EE_Registry::instance()->CAP->current_user_can( |
210 | 210 | 'ee_edit_registration', |
211 | 211 | 'toggle_registration_status', |
@@ -268,7 +268,7 @@ discard block |
||
268 | 268 | $registration->save(); |
269 | 269 | } |
270 | 270 | // don't trigger notifications during IPNs because they will get triggered by EE_Payment_Processor |
271 | - if (! EE_Processor_Base::$IPN) { |
|
271 | + if ( ! EE_Processor_Base::$IPN) { |
|
272 | 272 | // otherwise, send out notifications |
273 | 273 | add_filter('FHEE__EED_Messages___maybe_registration__deliver_notifications', '__return_true', 10); |
274 | 274 | } |
@@ -326,7 +326,7 @@ discard block |
||
326 | 326 | $registration->save(); |
327 | 327 | } |
328 | 328 | // don't trigger notifications during IPNs because they will get triggered by EE_Payment_Processor |
329 | - if (! EE_Processor_Base::$IPN) { |
|
329 | + if ( ! EE_Processor_Base::$IPN) { |
|
330 | 330 | // otherwise, send out notifications |
331 | 331 | add_filter('FHEE__EED_Messages___maybe_registration__deliver_notifications', '__return_true', 10); |
332 | 332 | } |
@@ -398,14 +398,14 @@ discard block |
||
398 | 398 | || ( |
399 | 399 | $payment instanceof EE_Payment && $payment->is_approved() |
400 | 400 | && // this specific registration has not yet been paid for |
401 | - ! isset(self::$_amount_paid[ $registration->ID() ]) |
|
401 | + ! isset(self::$_amount_paid[$registration->ID()]) |
|
402 | 402 | && // payment amount, less what we have already attributed to other registrations, is greater than this reg's final price |
403 | 403 | $payment->amount() - $total_paid >= $registration->final_price() |
404 | 404 | ) |
405 | 405 | ) |
406 | 406 | ) { |
407 | 407 | // mark as paid |
408 | - self::$_amount_paid[ $registration->ID() ] = $registration->final_price(); |
|
408 | + self::$_amount_paid[$registration->ID()] = $registration->final_price(); |
|
409 | 409 | // track new REG_Status |
410 | 410 | $this->set_new_reg_status($registration->ID(), EEM_Registration::status_id_approved); |
411 | 411 | // toggle status to approved |
@@ -414,7 +414,7 @@ discard block |
||
414 | 414 | $registration->save(); |
415 | 415 | } |
416 | 416 | // don't trigger notifications during IPNs because they will get triggered by EE_Payment_Processor |
417 | - if (! EE_Processor_Base::$IPN) { |
|
417 | + if ( ! EE_Processor_Base::$IPN) { |
|
418 | 418 | // otherwise, send out notifications |
419 | 419 | add_filter('FHEE__EED_Messages___maybe_registration__deliver_notifications', '__return_true', 10); |
420 | 420 | } |
@@ -448,7 +448,7 @@ discard block |
||
448 | 448 | public function trigger_registration_update_notifications($registration, array $additional_details = array()) |
449 | 449 | { |
450 | 450 | try { |
451 | - if (! $registration instanceof EE_Registration) { |
|
451 | + if ( ! $registration instanceof EE_Registration) { |
|
452 | 452 | throw new EE_Error( |
453 | 453 | esc_html__('An invalid registration was received.', 'event_espresso') |
454 | 454 | ); |
@@ -462,7 +462,7 @@ discard block |
||
462 | 462 | // false, |
463 | 463 | // 'EE_Transaction: ' . $registration->transaction()->ID() |
464 | 464 | // ); |
465 | - if (! $registration->is_primary_registrant()) { |
|
465 | + if ( ! $registration->is_primary_registrant()) { |
|
466 | 466 | return; |
467 | 467 | } |
468 | 468 | do_action( |
@@ -534,8 +534,8 @@ discard block |
||
534 | 534 | foreach ($transaction->registrations() as $registration) { |
535 | 535 | /** @var EE_Line_Item $line_item */ |
536 | 536 | $line_item = EEM_Line_Item::instance()->get_line_item_for_registration($registration); |
537 | - if (isset($reg_final_price_per_ticket_line_item[ $line_item->ID() ])) { |
|
538 | - $registration->set_final_price($reg_final_price_per_ticket_line_item[ $line_item->ID() ]); |
|
537 | + if (isset($reg_final_price_per_ticket_line_item[$line_item->ID()])) { |
|
538 | + $registration->set_final_price($reg_final_price_per_ticket_line_item[$line_item->ID()]); |
|
539 | 539 | if ($save_regs) { |
540 | 540 | $registration->save(); |
541 | 541 | } |
@@ -611,11 +611,11 @@ discard block |
||
611 | 611 | $closed_reg_statuses = ! empty($closed_reg_statuses) |
612 | 612 | ? $closed_reg_statuses |
613 | 613 | : EEM_Registration::closed_reg_statuses(); |
614 | - if (! in_array($registration->status_ID(), $closed_reg_statuses, true)) { |
|
614 | + if ( ! in_array($registration->status_ID(), $closed_reg_statuses, true)) { |
|
615 | 615 | return false; |
616 | 616 | } |
617 | 617 | // release a reserved ticket by decrementing ticket and datetime reserved values |
618 | - $registration->release_reserved_ticket(true, 'RegProcessor:' . __LINE__); |
|
618 | + $registration->release_reserved_ticket(true, 'RegProcessor:'.__LINE__); |
|
619 | 619 | $registration->set_final_price(0); |
620 | 620 | if ($update_reg) { |
621 | 621 | $registration->save(); |
@@ -646,7 +646,7 @@ discard block |
||
646 | 646 | return false; |
647 | 647 | } |
648 | 648 | $ticket = $registration->ticket(); |
649 | - if (! $ticket instanceof EE_Ticket) { |
|
649 | + if ( ! $ticket instanceof EE_Ticket) { |
|
650 | 650 | throw new EE_Error( |
651 | 651 | sprintf( |
652 | 652 | esc_html__( |
@@ -695,7 +695,7 @@ discard block |
||
695 | 695 | $total_ticket_count = 1 |
696 | 696 | ) { |
697 | 697 | EE_Error::doing_it_wrong( |
698 | - __CLASS__ . '::' . __FUNCTION__, |
|
698 | + __CLASS__.'::'.__FUNCTION__, |
|
699 | 699 | sprintf( |
700 | 700 | esc_html__('This method is deprecated. Please use "%s" instead', 'event_espresso'), |
701 | 701 | '\EventEspresso\core\domain\services\registration\CreateRegistrationService::create()' |
@@ -705,7 +705,7 @@ discard block |
||
705 | 705 | ); |
706 | 706 | // grab the related ticket object for this line_item |
707 | 707 | $ticket = $line_item->ticket(); |
708 | - if (! $ticket instanceof EE_Ticket) { |
|
708 | + if ( ! $ticket instanceof EE_Ticket) { |
|
709 | 709 | EE_Error::add_error( |
710 | 710 | sprintf( |
711 | 711 | esc_html__('Line item %s did not contain a valid ticket', 'event_espresso'), |
@@ -743,7 +743,7 @@ discard block |
||
743 | 743 | public function generate_reg_url_link($att_nmbr, $item) |
744 | 744 | { |
745 | 745 | EE_Error::doing_it_wrong( |
746 | - __CLASS__ . '::' . __FUNCTION__, |
|
746 | + __CLASS__.'::'.__FUNCTION__, |
|
747 | 747 | sprintf( |
748 | 748 | esc_html__('This method is deprecated. Please use "%s" instead', 'event_espresso'), |
749 | 749 | 'EventEspresso\core\domain\entities\RegUrlLink' |
@@ -769,7 +769,7 @@ discard block |
||
769 | 769 | public function generate_reg_code(EE_Registration $registration) |
770 | 770 | { |
771 | 771 | EE_Error::doing_it_wrong( |
772 | - __CLASS__ . '::' . __FUNCTION__, |
|
772 | + __CLASS__.'::'.__FUNCTION__, |
|
773 | 773 | sprintf( |
774 | 774 | esc_html__('This method is deprecated. Please use "%s" instead', 'event_espresso'), |
775 | 775 | 'EventEspresso\core\domain\entities\RegCode' |
@@ -14,71 +14,71 @@ |
||
14 | 14 | class EE_Processor_Base |
15 | 15 | { |
16 | 16 | |
17 | - /** |
|
18 | - * Used to indicate whether current request is for an IPN or not. |
|
19 | - * |
|
20 | - * @var bool |
|
21 | - */ |
|
22 | - protected static $IPN = false; |
|
17 | + /** |
|
18 | + * Used to indicate whether current request is for an IPN or not. |
|
19 | + * |
|
20 | + * @var bool |
|
21 | + */ |
|
22 | + protected static $IPN = false; |
|
23 | 23 | |
24 | - /** |
|
25 | - * Used to indicate whether SPCO is being revisited by registrant or not. |
|
26 | - * |
|
27 | - * @var bool |
|
28 | - */ |
|
29 | - protected $_revisit = false; |
|
24 | + /** |
|
25 | + * Used to indicate whether SPCO is being revisited by registrant or not. |
|
26 | + * |
|
27 | + * @var bool |
|
28 | + */ |
|
29 | + protected $_revisit = false; |
|
30 | 30 | |
31 | 31 | |
32 | - /** |
|
33 | - * @param boolean $IPN |
|
34 | - */ |
|
35 | - public static function set_IPN($IPN) |
|
36 | - { |
|
37 | - self::$IPN = filter_var($IPN, FILTER_VALIDATE_BOOLEAN); |
|
38 | - } |
|
32 | + /** |
|
33 | + * @param boolean $IPN |
|
34 | + */ |
|
35 | + public static function set_IPN($IPN) |
|
36 | + { |
|
37 | + self::$IPN = filter_var($IPN, FILTER_VALIDATE_BOOLEAN); |
|
38 | + } |
|
39 | 39 | |
40 | 40 | |
41 | - /** |
|
42 | - * Allows external class (usually checkout) to set whether SPCO is being revisited by registrant or not. |
|
43 | - * |
|
44 | - * @param bool $revisit |
|
45 | - * @return void |
|
46 | - */ |
|
47 | - public function set_revisit($revisit = false) |
|
48 | - { |
|
49 | - $this->_revisit = filter_var($revisit, FILTER_VALIDATE_BOOLEAN); |
|
50 | - } |
|
41 | + /** |
|
42 | + * Allows external class (usually checkout) to set whether SPCO is being revisited by registrant or not. |
|
43 | + * |
|
44 | + * @param bool $revisit |
|
45 | + * @return void |
|
46 | + */ |
|
47 | + public function set_revisit($revisit = false) |
|
48 | + { |
|
49 | + $this->_revisit = filter_var($revisit, FILTER_VALIDATE_BOOLEAN); |
|
50 | + } |
|
51 | 51 | |
52 | 52 | |
53 | - /** |
|
54 | - * debug |
|
55 | - * |
|
56 | - * @param string $class |
|
57 | - * @param string $func |
|
58 | - * @param string $line |
|
59 | - * @param \EE_Transaction $transaction |
|
60 | - * @param array $info |
|
61 | - * @param bool $display_request |
|
62 | - */ |
|
63 | - protected function log( |
|
64 | - $class = '', |
|
65 | - $func = '', |
|
66 | - $line = '', |
|
67 | - EE_Transaction $transaction, |
|
68 | - $info = array(), |
|
69 | - $display_request = false |
|
70 | - ) { |
|
71 | - if (WP_DEBUG && false) { |
|
72 | - if ($transaction instanceof EE_Transaction) { |
|
73 | - // don't serialize objects |
|
74 | - $info = EEH_Debug_Tools::strip_objects($info); |
|
75 | - if ($transaction->ID()) { |
|
76 | - $info['TXN_status'] = $transaction->status_ID(); |
|
77 | - $info['TXN_reg_steps'] = $transaction->reg_steps(); |
|
78 | - $index = 'EE_Transaction: ' . $transaction->ID(); |
|
79 | - EEH_Debug_Tools::log($class, $func, $line, $info, $display_request, $index); |
|
80 | - } |
|
81 | - } |
|
82 | - } |
|
83 | - } |
|
53 | + /** |
|
54 | + * debug |
|
55 | + * |
|
56 | + * @param string $class |
|
57 | + * @param string $func |
|
58 | + * @param string $line |
|
59 | + * @param \EE_Transaction $transaction |
|
60 | + * @param array $info |
|
61 | + * @param bool $display_request |
|
62 | + */ |
|
63 | + protected function log( |
|
64 | + $class = '', |
|
65 | + $func = '', |
|
66 | + $line = '', |
|
67 | + EE_Transaction $transaction, |
|
68 | + $info = array(), |
|
69 | + $display_request = false |
|
70 | + ) { |
|
71 | + if (WP_DEBUG && false) { |
|
72 | + if ($transaction instanceof EE_Transaction) { |
|
73 | + // don't serialize objects |
|
74 | + $info = EEH_Debug_Tools::strip_objects($info); |
|
75 | + if ($transaction->ID()) { |
|
76 | + $info['TXN_status'] = $transaction->status_ID(); |
|
77 | + $info['TXN_reg_steps'] = $transaction->reg_steps(); |
|
78 | + $index = 'EE_Transaction: ' . $transaction->ID(); |
|
79 | + EEH_Debug_Tools::log($class, $func, $line, $info, $display_request, $index); |
|
80 | + } |
|
81 | + } |
|
82 | + } |
|
83 | + } |
|
84 | 84 | } |
@@ -75,7 +75,7 @@ |
||
75 | 75 | if ($transaction->ID()) { |
76 | 76 | $info['TXN_status'] = $transaction->status_ID(); |
77 | 77 | $info['TXN_reg_steps'] = $transaction->reg_steps(); |
78 | - $index = 'EE_Transaction: ' . $transaction->ID(); |
|
78 | + $index = 'EE_Transaction: '.$transaction->ID(); |
|
79 | 79 | EEH_Debug_Tools::log($class, $func, $line, $info, $display_request, $index); |
80 | 80 | } |
81 | 81 | } |
@@ -15,51 +15,51 @@ |
||
15 | 15 | class EE_Help_Tour_final_stop extends EE_Help_Tour |
16 | 16 | { |
17 | 17 | |
18 | - protected function _set_tour_properties() |
|
19 | - { |
|
20 | - $this->_label = __('Final Stop Tour', 'event_espresso'); |
|
21 | - $this->_slug = 'final-stop-tour'; |
|
22 | - } |
|
18 | + protected function _set_tour_properties() |
|
19 | + { |
|
20 | + $this->_label = __('Final Stop Tour', 'event_espresso'); |
|
21 | + $this->_slug = 'final-stop-tour'; |
|
22 | + } |
|
23 | 23 | |
24 | 24 | |
25 | - protected function _set_tour_stops() |
|
26 | - { |
|
27 | - $this->_stops = array( |
|
28 | - 10 => array( |
|
29 | - 'id' => 'contextual-help-link', |
|
30 | - 'content' => $this->_end(), |
|
31 | - 'button_text' => __('Quit', 'event_espresso'), |
|
32 | - 'options' => array( |
|
33 | - 'tipLocation' => 'left', |
|
34 | - 'tipAdjustmentY' => -20, |
|
35 | - 'tipAdjustmentX' => 10, |
|
36 | - ), |
|
37 | - ), |
|
38 | - ); |
|
39 | - } |
|
25 | + protected function _set_tour_stops() |
|
26 | + { |
|
27 | + $this->_stops = array( |
|
28 | + 10 => array( |
|
29 | + 'id' => 'contextual-help-link', |
|
30 | + 'content' => $this->_end(), |
|
31 | + 'button_text' => __('Quit', 'event_espresso'), |
|
32 | + 'options' => array( |
|
33 | + 'tipLocation' => 'left', |
|
34 | + 'tipAdjustmentY' => -20, |
|
35 | + 'tipAdjustmentX' => 10, |
|
36 | + ), |
|
37 | + ), |
|
38 | + ); |
|
39 | + } |
|
40 | 40 | |
41 | 41 | |
42 | - /** |
|
43 | - * This is the default last stop for all tours that is displayed at the end of a tour OR when a tour is exited for |
|
44 | - * the first time. |
|
45 | - * |
|
46 | - * @return string |
|
47 | - */ |
|
48 | - protected function _end() |
|
49 | - { |
|
50 | - $query_args = array( |
|
51 | - 'action' => 'admin_option_settings', |
|
52 | - 'page' => 'espresso_general_settings', |
|
53 | - ); |
|
54 | - return '<p>' |
|
55 | - . sprintf( |
|
56 | - __( |
|
57 | - 'That\'s it for the tour! At any time you can restart a tour by clicking on this help dropdown and then clicking one of the Tour buttons. There are help tours available on all Event Espresso Admin pages. If you want to turn off help tours for all pages, %sgo here%s. All the best with your events!', |
|
58 | - 'event_espresso' |
|
59 | - ), |
|
60 | - '<a href="' . EE_Admin_Page::add_query_args_and_nonce($query_args, admin_url('admin.php')) . '">', |
|
61 | - '</a>' |
|
62 | - ) |
|
63 | - . '</p>'; |
|
64 | - } |
|
42 | + /** |
|
43 | + * This is the default last stop for all tours that is displayed at the end of a tour OR when a tour is exited for |
|
44 | + * the first time. |
|
45 | + * |
|
46 | + * @return string |
|
47 | + */ |
|
48 | + protected function _end() |
|
49 | + { |
|
50 | + $query_args = array( |
|
51 | + 'action' => 'admin_option_settings', |
|
52 | + 'page' => 'espresso_general_settings', |
|
53 | + ); |
|
54 | + return '<p>' |
|
55 | + . sprintf( |
|
56 | + __( |
|
57 | + 'That\'s it for the tour! At any time you can restart a tour by clicking on this help dropdown and then clicking one of the Tour buttons. There are help tours available on all Event Espresso Admin pages. If you want to turn off help tours for all pages, %sgo here%s. All the best with your events!', |
|
58 | + 'event_espresso' |
|
59 | + ), |
|
60 | + '<a href="' . EE_Admin_Page::add_query_args_and_nonce($query_args, admin_url('admin.php')) . '">', |
|
61 | + '</a>' |
|
62 | + ) |
|
63 | + . '</p>'; |
|
64 | + } |
|
65 | 65 | } |
@@ -57,7 +57,7 @@ |
||
57 | 57 | 'That\'s it for the tour! At any time you can restart a tour by clicking on this help dropdown and then clicking one of the Tour buttons. There are help tours available on all Event Espresso Admin pages. If you want to turn off help tours for all pages, %sgo here%s. All the best with your events!', |
58 | 58 | 'event_espresso' |
59 | 59 | ), |
60 | - '<a href="' . EE_Admin_Page::add_query_args_and_nonce($query_args, admin_url('admin.php')) . '">', |
|
60 | + '<a href="'.EE_Admin_Page::add_query_args_and_nonce($query_args, admin_url('admin.php')).'">', |
|
61 | 61 | '</a>' |
62 | 62 | ) |
63 | 63 | . '</p>'; |