Completed
Pull Request — master (#388)
by Darren
13:23
created
line_item_filters/EE_Single_Registration_Line_Item_Filter.class.php 1 patch
Indentation   +8 added lines, -8 removed lines patch added patch discarded remove patch
@@ -16,12 +16,12 @@
 block discarded – undo
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
 }
Please login to merge, or discard this patch.
line_item_filters/EE_Specific_Registrations_Line_Item_Filter.class.php 2 patches
Indentation   +167 added lines, -167 removed lines patch added patch discarded remove patch
@@ -13,182 +13,182 @@
 block discarded – undo
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
 }
Please login to merge, or discard this patch.
Spacing   +8 added lines, -8 removed lines patch added patch discarded remove patch
@@ -73,10 +73,10 @@  discard block
 block discarded – undo
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
 block discarded – undo
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
 block discarded – undo
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
 block discarded – undo
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++;
Please login to merge, or discard this patch.
core/libraries/line_item_display/EE_Line_Item_Display.class.php 2 patches
Indentation   +51 added lines, -51 removed lines patch added patch discarded remove patch
@@ -14,62 +14,62 @@
 block discarded – undo
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
 }
Please login to merge, or discard this patch.
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -35,7 +35,7 @@
 block discarded – undo
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();
Please login to merge, or discard this patch.
core/libraries/template_parts/EE_Template_Part_Manager.class.php 2 patches
Indentation   +191 added lines, -191 removed lines patch added patch discarded remove patch
@@ -14,195 +14,195 @@
 block discarded – undo
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
 }
Please login to merge, or discard this patch.
Spacing   +6 added lines, -6 removed lines patch added patch discarded remove patch
@@ -69,13 +69,13 @@  discard block
 block discarded – undo
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
 block discarded – undo
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
 block discarded – undo
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();
Please login to merge, or discard this patch.
core/libraries/template_parts/EE_Template_Part.class.php 1 patch
Indentation   +108 added lines, -108 removed lines patch added patch discarded remove patch
@@ -16,112 +16,112 @@
 block discarded – undo
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
 }
Please login to merge, or discard this patch.
core/libraries/template_parts/EE_Template_Part_PriorityQueue.class.php 1 patch
Indentation   +37 added lines, -37 removed lines patch added patch discarded remove patch
@@ -17,43 +17,43 @@
 block discarded – undo
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
 }
Please login to merge, or discard this patch.
core/business/EE_Registration_Processor.class.php 2 patches
Indentation   +763 added lines, -763 removed lines patch added patch discarded remove patch
@@ -24,767 +24,767 @@
 block discarded – undo
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
 }
Please login to merge, or discard this patch.
Spacing   +24 added lines, -24 removed lines patch added patch discarded remove patch
@@ -79,8 +79,8 @@  discard block
 block discarded – undo
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
 block discarded – undo
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
 block discarded – undo
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
 block discarded – undo
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
 block discarded – undo
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
 block discarded – undo
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
 block discarded – undo
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
 block discarded – undo
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
 block discarded – undo
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
 block discarded – undo
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
 block discarded – undo
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
 block discarded – undo
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
 block discarded – undo
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
 block discarded – undo
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
 block discarded – undo
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
 block discarded – undo
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
 block discarded – undo
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
 block discarded – undo
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
 block discarded – undo
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'
Please login to merge, or discard this patch.
core/business/EE_Processor_Base.class.php 2 patches
Indentation   +60 added lines, -60 removed lines patch added patch discarded remove patch
@@ -14,71 +14,71 @@
 block discarded – undo
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
 }
Please login to merge, or discard this patch.
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -75,7 +75,7 @@
 block discarded – undo
75 75
                 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
             }
Please login to merge, or discard this patch.
core/admin/EE_Help_Tour_final_stop.class.php 2 patches
Indentation   +43 added lines, -43 removed lines patch added patch discarded remove patch
@@ -15,51 +15,51 @@
 block discarded – undo
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
 }
Please login to merge, or discard this patch.
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -57,7 +57,7 @@
 block discarded – undo
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>';
Please login to merge, or discard this patch.