Completed
Branch BUG-10738-inconsistency-in-ses... (a1eed8)
by
unknown
24:27 queued 12:29
created
core/EE_Bootstrap.core.php 2 patches
Indentation   +185 added lines, -185 removed lines patch added patch discarded remove patch
@@ -29,191 +29,191 @@
 block discarded – undo
29 29
 class EE_Bootstrap
30 30
 {
31 31
 
32
-    /**
33
-     * @var EE_Request $request
34
-     */
35
-    protected $request;
36
-
37
-    /**
38
-     * @var EE_Response $response
39
-     */
40
-    protected $response;
41
-
42
-    /**
43
-     * @var EE_Request_Stack_Builder $request_stack_builder
44
-     */
45
-    protected $request_stack_builder;
46
-
47
-    /**
48
-     * @var EE_Request_Stack $_request_stack
49
-     */
50
-    protected $request_stack;
51
-
52
-
53
-
54
-    public function __construct(EE_Request $request, EE_Response $response)
55
-    {
56
-        $this->request = $request;
57
-        $this->response = $response;
58
-        // construct request stack and run middleware apps as soon as all WP plugins are loaded
59
-        add_action('plugins_loaded', array($this, 'run_request_stack'), 0);
60
-        // set framework for the rest of EE to hook into when loading
61
-        add_action('plugins_loaded', array('EE_Bootstrap', 'load_espresso_addons'), 1);
62
-        add_action('plugins_loaded', array('EE_Bootstrap', 'detect_activations_or_upgrades'), 3);
63
-        add_action('plugins_loaded', array('EE_Bootstrap', 'load_core_configuration'), 5);
64
-        add_action('plugins_loaded', array('EE_Bootstrap', 'register_shortcodes_modules_and_widgets'), 7);
65
-        add_action('plugins_loaded', array('EE_Bootstrap', 'brew_espresso'), 9);
66
-    }
67
-
68
-
69
-
70
-    /**
71
-     * run_request_stack
72
-     * construct request stack and run middleware apps
73
-     *
74
-     * @throws EE_Error
75
-     * @throws InvalidArgumentException
76
-     */
77
-    public function run_request_stack()
78
-    {
79
-        $this->load_autoloader();
80
-        $this->set_autoloaders_for_required_files();
81
-        $this->request_stack_builder = $this->build_request_stack();
82
-        $this->request_stack = $this->request_stack_builder->resolve(
83
-            new EE_Load_Espresso_Core()
84
-        );
85
-        $this->request_stack->handle_request($this->request, $this->response);
86
-        $this->request_stack->handle_response();
87
-    }
88
-
89
-
90
-
91
-    /**
92
-     * load_autoloader
93
-     */
94
-    protected function load_autoloader()
95
-    {
96
-        // load interfaces
97
-        espresso_load_required(
98
-            'EEH_Autoloader',
99
-            EE_CORE . 'helpers' . DS . 'EEH_Autoloader.helper.php'
100
-        );
101
-        EEH_Autoloader::instance();
102
-    }
103
-
104
-
105
-
106
-    /**
107
-     * load_required_files
108
-     *
109
-     * @throws EE_Error
110
-     */
111
-    protected function set_autoloaders_for_required_files()
112
-    {
113
-        // load interfaces
114
-        EEH_Autoloader::register_autoloaders_for_each_file_in_folder(EE_CORE . 'interfaces', true);
115
-        // load helpers
116
-        EEH_Autoloader::register_autoloaders_for_each_file_in_folder(EE_HELPERS);
117
-        // load request stack
118
-        EEH_Autoloader::register_autoloaders_for_each_file_in_folder(EE_CORE . 'request_stack' . DS);
119
-        // load middleware
120
-        EEH_Autoloader::register_autoloaders_for_each_file_in_folder(EE_CORE . 'middleware' . DS);
121
-    }
122
-
123
-
124
-
125
-    /**
126
-     * build_request_stack
127
-     *
128
-     * @return EE_Request_Stack_Builder
129
-     * @throws InvalidArgumentException
130
-     */
131
-    public function build_request_stack()
132
-    {
133
-        $request_stack_builder = new EE_Request_Stack_Builder();
134
-        $stack_apps = apply_filters(
135
-            'FHEE__EE_Bootstrap__build_request_stack__stack_apps',
136
-            array(
137
-                'EE_Detect_Login',
138
-                'EE_Recommended_Versions',
139
-                'EE_Alpha_Banner_Warning',
140
-            )
141
-        );
142
-        // load middleware onto stack : FILO (First In Last Out)
143
-        foreach ((array)$stack_apps as $stack_app) {
144
-            //$request_stack_builder->push( $stack_app );
145
-            $request_stack_builder->unshift($stack_app);
146
-        }
147
-        return apply_filters(
148
-            'FHEE__EE_Bootstrap__build_request_stack__request_stack_builder',
149
-            $request_stack_builder
150
-        );
151
-    }
152
-
153
-
154
-
155
-    /**
156
-     * load_espresso_addons
157
-     * runs during the WP 'plugins_loaded' action at priority 1
158
-     * and is the initial loading phase for EE addons
159
-     * no other logic should be performed at this point
160
-     */
161
-    public static function load_espresso_addons()
162
-    {
163
-        do_action('AHEE__EE_Bootstrap__load_espresso_addons');
164
-    }
165
-
166
-
167
-
168
-    /**
169
-     * detect_activations_or_upgrades
170
-     * runs during the WP 'plugins_loaded' action at priority 3
171
-     * Now that all of the addons have been loaded,
172
-     * we can determine if anything needs activating or upgrading
173
-     */
174
-    public static function detect_activations_or_upgrades()
175
-    {
176
-        do_action('AHEE__EE_Bootstrap__detect_activations_or_upgrades');
177
-    }
178
-
179
-
180
-
181
-    /**
182
-     * load_core_configuration
183
-     * runs during the WP 'plugins_loaded' action at priority 5
184
-     * Now that the database is assumed to be at the correct version
185
-     * we can load and set all of the system configurations
186
-     */
187
-    public static function load_core_configuration()
188
-    {
189
-        do_action('AHEE__EE_Bootstrap__load_core_configuration');
190
-    }
191
-
192
-
193
-
194
-    /**
195
-     * register_shortcodes_modules_and_widgets
196
-     * runs during the WP 'plugins_loaded' action at priority 7
197
-     * and handles registering all o four shortcodes, modules and widgets
198
-     * so that they are ready to be used throughout the system
199
-     */
200
-    public static function register_shortcodes_modules_and_widgets()
201
-    {
202
-        do_action('AHEE__EE_Bootstrap__register_shortcodes_modules_and_widgets');
203
-    }
204
-
205
-
206
-
207
-    /**
208
-     * brew_espresso
209
-     * runs during the WP 'plugins_loaded' action at priority 9
210
-     * bootstrapping is considered complete at this point,
211
-     * so let the fun begin...
212
-     */
213
-    public static function brew_espresso()
214
-    {
215
-        do_action('AHEE__EE_Bootstrap__brew_espresso');
216
-    }
32
+	/**
33
+	 * @var EE_Request $request
34
+	 */
35
+	protected $request;
36
+
37
+	/**
38
+	 * @var EE_Response $response
39
+	 */
40
+	protected $response;
41
+
42
+	/**
43
+	 * @var EE_Request_Stack_Builder $request_stack_builder
44
+	 */
45
+	protected $request_stack_builder;
46
+
47
+	/**
48
+	 * @var EE_Request_Stack $_request_stack
49
+	 */
50
+	protected $request_stack;
51
+
52
+
53
+
54
+	public function __construct(EE_Request $request, EE_Response $response)
55
+	{
56
+		$this->request = $request;
57
+		$this->response = $response;
58
+		// construct request stack and run middleware apps as soon as all WP plugins are loaded
59
+		add_action('plugins_loaded', array($this, 'run_request_stack'), 0);
60
+		// set framework for the rest of EE to hook into when loading
61
+		add_action('plugins_loaded', array('EE_Bootstrap', 'load_espresso_addons'), 1);
62
+		add_action('plugins_loaded', array('EE_Bootstrap', 'detect_activations_or_upgrades'), 3);
63
+		add_action('plugins_loaded', array('EE_Bootstrap', 'load_core_configuration'), 5);
64
+		add_action('plugins_loaded', array('EE_Bootstrap', 'register_shortcodes_modules_and_widgets'), 7);
65
+		add_action('plugins_loaded', array('EE_Bootstrap', 'brew_espresso'), 9);
66
+	}
67
+
68
+
69
+
70
+	/**
71
+	 * run_request_stack
72
+	 * construct request stack and run middleware apps
73
+	 *
74
+	 * @throws EE_Error
75
+	 * @throws InvalidArgumentException
76
+	 */
77
+	public function run_request_stack()
78
+	{
79
+		$this->load_autoloader();
80
+		$this->set_autoloaders_for_required_files();
81
+		$this->request_stack_builder = $this->build_request_stack();
82
+		$this->request_stack = $this->request_stack_builder->resolve(
83
+			new EE_Load_Espresso_Core()
84
+		);
85
+		$this->request_stack->handle_request($this->request, $this->response);
86
+		$this->request_stack->handle_response();
87
+	}
88
+
89
+
90
+
91
+	/**
92
+	 * load_autoloader
93
+	 */
94
+	protected function load_autoloader()
95
+	{
96
+		// load interfaces
97
+		espresso_load_required(
98
+			'EEH_Autoloader',
99
+			EE_CORE . 'helpers' . DS . 'EEH_Autoloader.helper.php'
100
+		);
101
+		EEH_Autoloader::instance();
102
+	}
103
+
104
+
105
+
106
+	/**
107
+	 * load_required_files
108
+	 *
109
+	 * @throws EE_Error
110
+	 */
111
+	protected function set_autoloaders_for_required_files()
112
+	{
113
+		// load interfaces
114
+		EEH_Autoloader::register_autoloaders_for_each_file_in_folder(EE_CORE . 'interfaces', true);
115
+		// load helpers
116
+		EEH_Autoloader::register_autoloaders_for_each_file_in_folder(EE_HELPERS);
117
+		// load request stack
118
+		EEH_Autoloader::register_autoloaders_for_each_file_in_folder(EE_CORE . 'request_stack' . DS);
119
+		// load middleware
120
+		EEH_Autoloader::register_autoloaders_for_each_file_in_folder(EE_CORE . 'middleware' . DS);
121
+	}
122
+
123
+
124
+
125
+	/**
126
+	 * build_request_stack
127
+	 *
128
+	 * @return EE_Request_Stack_Builder
129
+	 * @throws InvalidArgumentException
130
+	 */
131
+	public function build_request_stack()
132
+	{
133
+		$request_stack_builder = new EE_Request_Stack_Builder();
134
+		$stack_apps = apply_filters(
135
+			'FHEE__EE_Bootstrap__build_request_stack__stack_apps',
136
+			array(
137
+				'EE_Detect_Login',
138
+				'EE_Recommended_Versions',
139
+				'EE_Alpha_Banner_Warning',
140
+			)
141
+		);
142
+		// load middleware onto stack : FILO (First In Last Out)
143
+		foreach ((array)$stack_apps as $stack_app) {
144
+			//$request_stack_builder->push( $stack_app );
145
+			$request_stack_builder->unshift($stack_app);
146
+		}
147
+		return apply_filters(
148
+			'FHEE__EE_Bootstrap__build_request_stack__request_stack_builder',
149
+			$request_stack_builder
150
+		);
151
+	}
152
+
153
+
154
+
155
+	/**
156
+	 * load_espresso_addons
157
+	 * runs during the WP 'plugins_loaded' action at priority 1
158
+	 * and is the initial loading phase for EE addons
159
+	 * no other logic should be performed at this point
160
+	 */
161
+	public static function load_espresso_addons()
162
+	{
163
+		do_action('AHEE__EE_Bootstrap__load_espresso_addons');
164
+	}
165
+
166
+
167
+
168
+	/**
169
+	 * detect_activations_or_upgrades
170
+	 * runs during the WP 'plugins_loaded' action at priority 3
171
+	 * Now that all of the addons have been loaded,
172
+	 * we can determine if anything needs activating or upgrading
173
+	 */
174
+	public static function detect_activations_or_upgrades()
175
+	{
176
+		do_action('AHEE__EE_Bootstrap__detect_activations_or_upgrades');
177
+	}
178
+
179
+
180
+
181
+	/**
182
+	 * load_core_configuration
183
+	 * runs during the WP 'plugins_loaded' action at priority 5
184
+	 * Now that the database is assumed to be at the correct version
185
+	 * we can load and set all of the system configurations
186
+	 */
187
+	public static function load_core_configuration()
188
+	{
189
+		do_action('AHEE__EE_Bootstrap__load_core_configuration');
190
+	}
191
+
192
+
193
+
194
+	/**
195
+	 * register_shortcodes_modules_and_widgets
196
+	 * runs during the WP 'plugins_loaded' action at priority 7
197
+	 * and handles registering all o four shortcodes, modules and widgets
198
+	 * so that they are ready to be used throughout the system
199
+	 */
200
+	public static function register_shortcodes_modules_and_widgets()
201
+	{
202
+		do_action('AHEE__EE_Bootstrap__register_shortcodes_modules_and_widgets');
203
+	}
204
+
205
+
206
+
207
+	/**
208
+	 * brew_espresso
209
+	 * runs during the WP 'plugins_loaded' action at priority 9
210
+	 * bootstrapping is considered complete at this point,
211
+	 * so let the fun begin...
212
+	 */
213
+	public static function brew_espresso()
214
+	{
215
+		do_action('AHEE__EE_Bootstrap__brew_espresso');
216
+	}
217 217
 
218 218
 
219 219
 
Please login to merge, or discard this patch.
Spacing   +5 added lines, -5 removed lines patch added patch discarded remove patch
@@ -96,7 +96,7 @@  discard block
 block discarded – undo
96 96
         // load interfaces
97 97
         espresso_load_required(
98 98
             'EEH_Autoloader',
99
-            EE_CORE . 'helpers' . DS . 'EEH_Autoloader.helper.php'
99
+            EE_CORE.'helpers'.DS.'EEH_Autoloader.helper.php'
100 100
         );
101 101
         EEH_Autoloader::instance();
102 102
     }
@@ -111,13 +111,13 @@  discard block
 block discarded – undo
111 111
     protected function set_autoloaders_for_required_files()
112 112
     {
113 113
         // load interfaces
114
-        EEH_Autoloader::register_autoloaders_for_each_file_in_folder(EE_CORE . 'interfaces', true);
114
+        EEH_Autoloader::register_autoloaders_for_each_file_in_folder(EE_CORE.'interfaces', true);
115 115
         // load helpers
116 116
         EEH_Autoloader::register_autoloaders_for_each_file_in_folder(EE_HELPERS);
117 117
         // load request stack
118
-        EEH_Autoloader::register_autoloaders_for_each_file_in_folder(EE_CORE . 'request_stack' . DS);
118
+        EEH_Autoloader::register_autoloaders_for_each_file_in_folder(EE_CORE.'request_stack'.DS);
119 119
         // load middleware
120
-        EEH_Autoloader::register_autoloaders_for_each_file_in_folder(EE_CORE . 'middleware' . DS);
120
+        EEH_Autoloader::register_autoloaders_for_each_file_in_folder(EE_CORE.'middleware'.DS);
121 121
     }
122 122
 
123 123
 
@@ -140,7 +140,7 @@  discard block
 block discarded – undo
140 140
             )
141 141
         );
142 142
         // load middleware onto stack : FILO (First In Last Out)
143
-        foreach ((array)$stack_apps as $stack_app) {
143
+        foreach ((array) $stack_apps as $stack_app) {
144 144
             //$request_stack_builder->push( $stack_app );
145 145
             $request_stack_builder->unshift($stack_app);
146 146
         }
Please login to merge, or discard this patch.
libraries/form_sections/strategies/layout/EE_Two_Column_Layout.strategy.php 1 patch
Indentation   +68 added lines, -68 removed lines patch added patch discarded remove patch
@@ -5,81 +5,81 @@
 block discarded – undo
5 5
 class EE_Two_Column_Layout extends EE_Form_Section_Layout_Base
6 6
 {
7 7
 
8
-    /**
9
-     * Should be used to start teh form section (Eg a table tag, or a div tag, etc.)
10
-     *
11
-     * @param array $additional_args
12
-     * @return string
13
-     */
14
-    public function layout_form_begin($additional_args = array())
15
-    {
16
-        return $this->display_form_wide_errors()
17
-        . EEH_HTML::table(
18
-            '',
19
-            $this->_form_section->html_id(),
20
-            $this->_form_section->html_class(),
21
-            $this->_form_section->html_style()
22
-        ) . EEH_HTML::tbody();
23
-    }
8
+	/**
9
+	 * Should be used to start teh form section (Eg a table tag, or a div tag, etc.)
10
+	 *
11
+	 * @param array $additional_args
12
+	 * @return string
13
+	 */
14
+	public function layout_form_begin($additional_args = array())
15
+	{
16
+		return $this->display_form_wide_errors()
17
+		. EEH_HTML::table(
18
+			'',
19
+			$this->_form_section->html_id(),
20
+			$this->_form_section->html_class(),
21
+			$this->_form_section->html_style()
22
+		) . EEH_HTML::tbody();
23
+	}
24 24
 
25 25
 
26 26
 
27
-    /**
28
-     * Should be used to end the form section (eg a /table tag, or a /div tag, etc)
29
-     *
30
-     * @param array $additional_args
31
-     * @return string
32
-     */
33
-    public function layout_form_end($additional_args = array())
34
-    {
35
-        return EEH_HTML::tbodyx() . EEH_HTML::tablex($this->_form_section->html_id());
36
-    }
27
+	/**
28
+	 * Should be used to end the form section (eg a /table tag, or a /div tag, etc)
29
+	 *
30
+	 * @param array $additional_args
31
+	 * @return string
32
+	 */
33
+	public function layout_form_end($additional_args = array())
34
+	{
35
+		return EEH_HTML::tbodyx() . EEH_HTML::tablex($this->_form_section->html_id());
36
+	}
37 37
 
38 38
 
39 39
 
40
-    /**
41
-     * Lays out the row for the input, including label and errors
42
-     *
43
-     * @param EE_Form_Input_Base $input
44
-     * @return string
45
-     */
46
-    public function layout_input($input)
47
-    {
48
-        $html = '';
49
-        if ($input instanceof EE_Hidden_Input) {
50
-            $html .= $input->get_html_for_input();
51
-        } else {
52
-            $html_for_input = $input->get_html_for_input();
53
-            $html_for_input .= $input->get_html_for_errors() != ''
54
-                ? EEH_HTML::nl() . $input->get_html_for_errors()
55
-                : '';
56
-            $html_for_input .= $input->get_html_for_help() != '' ? EEH_HTML::nl() . $input->get_html_for_help() : '';
57
-            $html .= EEH_HTML::tr(
58
-                EEH_HTML::th($input->get_html_for_label()) .
59
-                EEH_HTML::td($html_for_input)
60
-            );
61
-        }
62
-        return $html;
63
-    }
40
+	/**
41
+	 * Lays out the row for the input, including label and errors
42
+	 *
43
+	 * @param EE_Form_Input_Base $input
44
+	 * @return string
45
+	 */
46
+	public function layout_input($input)
47
+	{
48
+		$html = '';
49
+		if ($input instanceof EE_Hidden_Input) {
50
+			$html .= $input->get_html_for_input();
51
+		} else {
52
+			$html_for_input = $input->get_html_for_input();
53
+			$html_for_input .= $input->get_html_for_errors() != ''
54
+				? EEH_HTML::nl() . $input->get_html_for_errors()
55
+				: '';
56
+			$html_for_input .= $input->get_html_for_help() != '' ? EEH_HTML::nl() . $input->get_html_for_help() : '';
57
+			$html .= EEH_HTML::tr(
58
+				EEH_HTML::th($input->get_html_for_label()) .
59
+				EEH_HTML::td($html_for_input)
60
+			);
61
+		}
62
+		return $html;
63
+	}
64 64
 
65 65
 
66 66
 
67
-    /**
68
-     * Lays out a row for the subsection
69
-     *
70
-     * @param EE_Form_Section_Proper $form_section
71
-     * @return string
72
-     */
73
-    public function layout_subsection($form_section)
74
-    {
75
-        $html = '';
76
-        if ($form_section instanceof EE_Form_Section_HTML) {
77
-            $html .= $form_section->get_html();
78
-        } else {
79
-            $html .= EEH_HTML::tr(
80
-                EEH_HTML::td($form_section->get_html(), '', '', '', 'colspan="2"')
81
-            );
82
-        }
83
-        return $html;
84
-    }
67
+	/**
68
+	 * Lays out a row for the subsection
69
+	 *
70
+	 * @param EE_Form_Section_Proper $form_section
71
+	 * @return string
72
+	 */
73
+	public function layout_subsection($form_section)
74
+	{
75
+		$html = '';
76
+		if ($form_section instanceof EE_Form_Section_HTML) {
77
+			$html .= $form_section->get_html();
78
+		} else {
79
+			$html .= EEH_HTML::tr(
80
+				EEH_HTML::td($form_section->get_html(), '', '', '', 'colspan="2"')
81
+			);
82
+		}
83
+		return $html;
84
+	}
85 85
 }
Please login to merge, or discard this patch.
core/EE_Cart.core.php 1 patch
Indentation   +413 added lines, -413 removed lines patch added patch discarded remove patch
@@ -2,7 +2,7 @@  discard block
 block discarded – undo
2 2
 use EventEspresso\core\interfaces\ResettableInterface;
3 3
 
4 4
 if ( ! defined('EVENT_ESPRESSO_VERSION')) {
5
-    exit('No direct script access allowed');
5
+	exit('No direct script access allowed');
6 6
 }
7 7
 do_action('AHEE_log', __FILE__, __FUNCTION__, '');
8 8
 
@@ -23,418 +23,418 @@  discard block
 block discarded – undo
23 23
 class EE_Cart implements ResettableInterface
24 24
 {
25 25
 
26
-    /**
27
-     * instance of the EE_Cart object
28
-     *
29
-     * @access    private
30
-     * @var EE_Cart $_instance
31
-     */
32
-    private static $_instance;
33
-
34
-    /**
35
-     * instance of the EE_Session object
36
-     *
37
-     * @access    protected
38
-     * @var EE_Session $_session
39
-     */
40
-    protected $_session;
41
-
42
-    /**
43
-     * The total Line item which comprises all the children line-item subtotals,
44
-     * which in turn each have their line items.
45
-     * Typically, the line item structure will look like:
46
-     * grand total
47
-     * -tickets-sub-total
48
-     * --ticket1
49
-     * --ticket2
50
-     * --...
51
-     * -taxes-sub-total
52
-     * --tax1
53
-     * --tax2
54
-     *
55
-     * @var EE_Line_Item
56
-     */
57
-    private $_grand_total;
58
-
59
-
60
-
61
-    /**
62
-     * @singleton method used to instantiate class object
63
-     * @access    public
64
-     * @param EE_Line_Item $grand_total
65
-     * @param EE_Session   $session
66
-     * @return \EE_Cart
67
-     * @throws \EE_Error
68
-     */
69
-    public static function instance(EE_Line_Item $grand_total = null, EE_Session $session = null)
70
-    {
71
-        if ( ! empty($grand_total)) {
72
-            self::$_instance = new self($grand_total, $session);
73
-        }
74
-        // or maybe retrieve an existing one ?
75
-        if ( ! self::$_instance instanceof EE_Cart) {
76
-            // try getting the cart out of the session
77
-            $saved_cart = $session instanceof EE_Session ? $session->cart() : null;
78
-            self::$_instance = $saved_cart instanceof EE_Cart ? $saved_cart : new self($grand_total, $session);
79
-            unset($saved_cart);
80
-        }
81
-        // verify that cart is ok and grand total line item exists
82
-        if ( ! self::$_instance instanceof EE_Cart || ! self::$_instance->_grand_total instanceof EE_Line_Item) {
83
-            self::$_instance = new self($grand_total, $session);
84
-        }
85
-        self::$_instance->get_grand_total();
86
-        // once everything is all said and done, save the cart to the EE_Session
87
-        add_action('shutdown', array(self::$_instance, 'save_cart'), 90);
88
-        return self::$_instance;
89
-    }
90
-
91
-
92
-
93
-    /**
94
-     * private constructor to prevent direct creation
95
-     *
96
-     * @Constructor
97
-     * @access private
98
-     * @param EE_Line_Item $grand_total
99
-     * @param EE_Session   $session
100
-     */
101
-    private function __construct(EE_Line_Item $grand_total = null, EE_Session $session = null)
102
-    {
103
-        do_action('AHEE_log', __FILE__, __FUNCTION__, '');
104
-        $this->set_session($session);
105
-        if ($grand_total instanceof EE_Line_Item && $grand_total->is_total()) {
106
-            $this->set_grand_total_line_item($grand_total);
107
-        }
108
-    }
109
-
110
-
111
-
112
-    /**
113
-     * Resets the cart completely (whereas empty_cart
114
-     *
115
-     * @param EE_Line_Item $grand_total
116
-     * @param EE_Session   $session
117
-     * @return EE_Cart
118
-     * @throws \EE_Error
119
-     */
120
-    public static function reset(EE_Line_Item $grand_total = null, EE_Session $session = null)
121
-    {
122
-        remove_action('shutdown', array(self::$_instance, 'save_cart'), 90);
123
-        if ($session instanceof EE_Session) {
124
-            $session->reset_cart();
125
-        }
126
-        self::$_instance = null;
127
-        return self::instance($grand_total, $session);
128
-    }
129
-
130
-
131
-
132
-    /**
133
-     * @return \EE_Session
134
-     */
135
-    public function session()
136
-    {
137
-        if ( ! $this->_session instanceof EE_Session) {
138
-            $this->set_session();
139
-        }
140
-        return $this->_session;
141
-    }
142
-
143
-
144
-
145
-    /**
146
-     * @param EE_Session $session
147
-     */
148
-    public function set_session(EE_Session $session = null)
149
-    {
150
-        $this->_session = $session instanceof EE_Session ? $session : EE_Registry::instance()->load_core('Session');
151
-    }
152
-
153
-
154
-
155
-    /**
156
-     * Sets the cart to match the line item. Especially handy for loading an old cart where you
157
-     *  know the grand total line item on it
158
-     *
159
-     * @param EE_Line_Item $line_item
160
-     */
161
-    public function set_grand_total_line_item(EE_Line_Item $line_item)
162
-    {
163
-        $this->_grand_total = $line_item;
164
-    }
165
-
166
-
167
-
168
-    /**
169
-     * get_cart_from_reg_url_link
170
-     *
171
-     * @access public
172
-     * @param EE_Transaction $transaction
173
-     * @param EE_Session     $session
174
-     * @return \EE_Cart
175
-     * @throws \EE_Error
176
-     */
177
-    public static function get_cart_from_txn(EE_Transaction $transaction, EE_Session $session = null)
178
-    {
179
-        $grand_total = $transaction->total_line_item();
180
-        $grand_total->get_items();
181
-        $grand_total->tax_descendants();
182
-        return EE_Cart::instance($grand_total, $session);
183
-    }
184
-
185
-
186
-
187
-    /**
188
-     * Creates the total line item, and ensures it has its 'tickets' and 'taxes' sub-items
189
-     *
190
-     * @return EE_Line_Item
191
-     * @throws \EE_Error
192
-     */
193
-    private function _create_grand_total()
194
-    {
195
-        $this->_grand_total = EEH_Line_Item::create_total_line_item();
196
-        return $this->_grand_total;
197
-    }
198
-
199
-
200
-
201
-    /**
202
-     * Gets all the line items of object type Ticket
203
-     *
204
-     * @access public
205
-     * @return \EE_Line_Item[]
206
-     */
207
-    public function get_tickets()
208
-    {
209
-        if ($this->_grand_total === null ) {
210
-            return array();
211
-        }
212
-        return EEH_Line_Item::get_ticket_line_items($this->_grand_total);
213
-    }
214
-
215
-
216
-
217
-    /**
218
-     * returns the total quantity of tickets in the cart
219
-     *
220
-     * @access public
221
-     * @return int
222
-     * @throws \EE_Error
223
-     */
224
-    public function all_ticket_quantity_count()
225
-    {
226
-        $tickets = $this->get_tickets();
227
-        if (empty($tickets)) {
228
-            return 0;
229
-        }
230
-        $count = 0;
231
-        foreach ($tickets as $ticket) {
232
-            $count += $ticket->get('LIN_quantity');
233
-        }
234
-        return $count;
235
-    }
236
-
237
-
238
-
239
-    /**
240
-     * Gets all the tax line items
241
-     *
242
-     * @return \EE_Line_Item[]
243
-     * @throws \EE_Error
244
-     */
245
-    public function get_taxes()
246
-    {
247
-        return EEH_Line_Item::get_taxes_subtotal($this->_grand_total)->children();
248
-    }
249
-
250
-
251
-
252
-    /**
253
-     * Gets the total line item (which is a parent of all other line items) on this cart
254
-     *
255
-     * @return EE_Line_Item
256
-     * @throws \EE_Error
257
-     */
258
-    public function get_grand_total()
259
-    {
260
-        return $this->_grand_total instanceof EE_Line_Item ? $this->_grand_total : $this->_create_grand_total();
261
-    }
262
-
263
-
264
-
265
-    /**
266
-     * @process items for adding to cart
267
-     * @access  public
268
-     * @param EE_Ticket $ticket
269
-     * @param int       $qty
270
-     * @return TRUE on success, FALSE on fail
271
-     * @throws \EE_Error
272
-     */
273
-    public function add_ticket_to_cart(EE_Ticket $ticket, $qty = 1)
274
-    {
275
-        EEH_Line_Item::add_ticket_purchase($this->get_grand_total(), $ticket, $qty);
276
-        return $this->save_cart() ? true : false;
277
-    }
278
-
279
-
280
-
281
-    /**
282
-     * get_cart_total_before_tax
283
-     *
284
-     * @access public
285
-     * @return float
286
-     * @throws \EE_Error
287
-     */
288
-    public function get_cart_total_before_tax()
289
-    {
290
-        return $this->get_grand_total()->recalculate_pre_tax_total();
291
-    }
292
-
293
-
294
-
295
-    /**
296
-     * gets the total amount of tax paid for items in this cart
297
-     *
298
-     * @access public
299
-     * @return float
300
-     * @throws \EE_Error
301
-     */
302
-    public function get_applied_taxes()
303
-    {
304
-        return EEH_Line_Item::ensure_taxes_applied($this->_grand_total);
305
-    }
306
-
307
-
308
-
309
-    /**
310
-     * Gets the total amount to be paid for the items in the cart, including taxes and other modifiers
311
-     *
312
-     * @access public
313
-     * @return float
314
-     * @throws \EE_Error
315
-     */
316
-    public function get_cart_grand_total()
317
-    {
318
-        EEH_Line_Item::ensure_taxes_applied($this->_grand_total);
319
-        return $this->get_grand_total()->total();
320
-    }
321
-
322
-
323
-
324
-    /**
325
-     * Gets the total amount to be paid for the items in the cart, including taxes and other modifiers
326
-     *
327
-     * @access public
328
-     * @return float
329
-     * @throws \EE_Error
330
-     */
331
-    public function recalculate_all_cart_totals()
332
-    {
333
-        $pre_tax_total = $this->get_cart_total_before_tax();
334
-        $taxes_total = EEH_Line_Item::ensure_taxes_applied($this->_grand_total);
335
-        $this->_grand_total->set_total($pre_tax_total + $taxes_total);
336
-        $this->_grand_total->save_this_and_descendants_to_txn();
337
-        return $this->get_grand_total()->total();
338
-    }
339
-
340
-
341
-
342
-    /**
343
-     * deletes an item from the cart
344
-     *
345
-     * @access public
346
-     * @param array|bool|string $line_item_codes
347
-     * @return int on success, FALSE on fail
348
-     * @throws \EE_Error
349
-     */
350
-    public function delete_items($line_item_codes = false)
351
-    {
352
-        do_action('AHEE_log', __FILE__, __FUNCTION__, '');
353
-        return EEH_Line_Item::delete_items($this->get_grand_total(), $line_item_codes);
354
-    }
355
-
356
-
357
-
358
-    /**
359
-     * @remove ALL items from cart and zero ALL totals
360
-     * @access public
361
-     * @return bool
362
-     * @throws \EE_Error
363
-     */
364
-    public function empty_cart()
365
-    {
366
-        do_action('AHEE_log', __FILE__, __FUNCTION__, '');
367
-        $this->_grand_total = $this->_create_grand_total();
368
-        return $this->save_cart(true);
369
-    }
370
-
371
-
372
-
373
-    /**
374
-     * @remove ALL items from cart and delete total as well
375
-     * @access public
376
-     * @return bool
377
-     * @throws \EE_Error
378
-     */
379
-    public function delete_cart()
380
-    {
381
-        $deleted = EEH_Line_Item::delete_all_child_items($this->_grand_total);
382
-        if ($deleted) {
383
-            $deleted += $this->_grand_total->delete();
384
-            $this->_grand_total = null;
385
-        }
386
-        return $deleted;
387
-    }
388
-
389
-
390
-
391
-    /**
392
-     * @save   cart to session
393
-     * @access public
394
-     * @param bool $apply_taxes
395
-     * @return TRUE on success, FALSE on fail
396
-     * @throws \EE_Error
397
-     */
398
-    public function save_cart($apply_taxes = true)
399
-    {
400
-        if ($apply_taxes && $this->_grand_total instanceof EE_Line_Item) {
401
-            EEH_Line_Item::ensure_taxes_applied($this->_grand_total);
402
-            //make sure we don't cache the transaction because it can get stale
403
-            if ($this->_grand_total->get_one_from_cache('Transaction') instanceof EE_Transaction
404
-                && $this->_grand_total->get_one_from_cache('Transaction')->ID()
405
-            ) {
406
-                $this->_grand_total->clear_cache('Transaction', null, true);
407
-            }
408
-        }
409
-        if ($this->session() instanceof EE_Session) {
410
-            return $this->session()->set_cart($this);
411
-        } else {
412
-            return false;
413
-        }
414
-    }
415
-
416
-
417
-
418
-    public function __wakeup()
419
-    {
420
-        if ( ! $this->_grand_total instanceof EE_Line_Item && absint($this->_grand_total) !== 0) {
421
-            // $this->_grand_total is actually just an ID, so use it to get the object from the db
422
-            $this->_grand_total = EEM_Line_Item::instance()->get_one_by_ID($this->_grand_total);
423
-        }
424
-    }
425
-
426
-
427
-
428
-    /**
429
-     * @return array
430
-     */
431
-    public function __sleep()
432
-    {
433
-        if ($this->_grand_total instanceof EE_Line_Item && $this->_grand_total->ID()) {
434
-            $this->_grand_total = $this->_grand_total->ID();
435
-        }
436
-        return array('_grand_total');
437
-    }
26
+	/**
27
+	 * instance of the EE_Cart object
28
+	 *
29
+	 * @access    private
30
+	 * @var EE_Cart $_instance
31
+	 */
32
+	private static $_instance;
33
+
34
+	/**
35
+	 * instance of the EE_Session object
36
+	 *
37
+	 * @access    protected
38
+	 * @var EE_Session $_session
39
+	 */
40
+	protected $_session;
41
+
42
+	/**
43
+	 * The total Line item which comprises all the children line-item subtotals,
44
+	 * which in turn each have their line items.
45
+	 * Typically, the line item structure will look like:
46
+	 * grand total
47
+	 * -tickets-sub-total
48
+	 * --ticket1
49
+	 * --ticket2
50
+	 * --...
51
+	 * -taxes-sub-total
52
+	 * --tax1
53
+	 * --tax2
54
+	 *
55
+	 * @var EE_Line_Item
56
+	 */
57
+	private $_grand_total;
58
+
59
+
60
+
61
+	/**
62
+	 * @singleton method used to instantiate class object
63
+	 * @access    public
64
+	 * @param EE_Line_Item $grand_total
65
+	 * @param EE_Session   $session
66
+	 * @return \EE_Cart
67
+	 * @throws \EE_Error
68
+	 */
69
+	public static function instance(EE_Line_Item $grand_total = null, EE_Session $session = null)
70
+	{
71
+		if ( ! empty($grand_total)) {
72
+			self::$_instance = new self($grand_total, $session);
73
+		}
74
+		// or maybe retrieve an existing one ?
75
+		if ( ! self::$_instance instanceof EE_Cart) {
76
+			// try getting the cart out of the session
77
+			$saved_cart = $session instanceof EE_Session ? $session->cart() : null;
78
+			self::$_instance = $saved_cart instanceof EE_Cart ? $saved_cart : new self($grand_total, $session);
79
+			unset($saved_cart);
80
+		}
81
+		// verify that cart is ok and grand total line item exists
82
+		if ( ! self::$_instance instanceof EE_Cart || ! self::$_instance->_grand_total instanceof EE_Line_Item) {
83
+			self::$_instance = new self($grand_total, $session);
84
+		}
85
+		self::$_instance->get_grand_total();
86
+		// once everything is all said and done, save the cart to the EE_Session
87
+		add_action('shutdown', array(self::$_instance, 'save_cart'), 90);
88
+		return self::$_instance;
89
+	}
90
+
91
+
92
+
93
+	/**
94
+	 * private constructor to prevent direct creation
95
+	 *
96
+	 * @Constructor
97
+	 * @access private
98
+	 * @param EE_Line_Item $grand_total
99
+	 * @param EE_Session   $session
100
+	 */
101
+	private function __construct(EE_Line_Item $grand_total = null, EE_Session $session = null)
102
+	{
103
+		do_action('AHEE_log', __FILE__, __FUNCTION__, '');
104
+		$this->set_session($session);
105
+		if ($grand_total instanceof EE_Line_Item && $grand_total->is_total()) {
106
+			$this->set_grand_total_line_item($grand_total);
107
+		}
108
+	}
109
+
110
+
111
+
112
+	/**
113
+	 * Resets the cart completely (whereas empty_cart
114
+	 *
115
+	 * @param EE_Line_Item $grand_total
116
+	 * @param EE_Session   $session
117
+	 * @return EE_Cart
118
+	 * @throws \EE_Error
119
+	 */
120
+	public static function reset(EE_Line_Item $grand_total = null, EE_Session $session = null)
121
+	{
122
+		remove_action('shutdown', array(self::$_instance, 'save_cart'), 90);
123
+		if ($session instanceof EE_Session) {
124
+			$session->reset_cart();
125
+		}
126
+		self::$_instance = null;
127
+		return self::instance($grand_total, $session);
128
+	}
129
+
130
+
131
+
132
+	/**
133
+	 * @return \EE_Session
134
+	 */
135
+	public function session()
136
+	{
137
+		if ( ! $this->_session instanceof EE_Session) {
138
+			$this->set_session();
139
+		}
140
+		return $this->_session;
141
+	}
142
+
143
+
144
+
145
+	/**
146
+	 * @param EE_Session $session
147
+	 */
148
+	public function set_session(EE_Session $session = null)
149
+	{
150
+		$this->_session = $session instanceof EE_Session ? $session : EE_Registry::instance()->load_core('Session');
151
+	}
152
+
153
+
154
+
155
+	/**
156
+	 * Sets the cart to match the line item. Especially handy for loading an old cart where you
157
+	 *  know the grand total line item on it
158
+	 *
159
+	 * @param EE_Line_Item $line_item
160
+	 */
161
+	public function set_grand_total_line_item(EE_Line_Item $line_item)
162
+	{
163
+		$this->_grand_total = $line_item;
164
+	}
165
+
166
+
167
+
168
+	/**
169
+	 * get_cart_from_reg_url_link
170
+	 *
171
+	 * @access public
172
+	 * @param EE_Transaction $transaction
173
+	 * @param EE_Session     $session
174
+	 * @return \EE_Cart
175
+	 * @throws \EE_Error
176
+	 */
177
+	public static function get_cart_from_txn(EE_Transaction $transaction, EE_Session $session = null)
178
+	{
179
+		$grand_total = $transaction->total_line_item();
180
+		$grand_total->get_items();
181
+		$grand_total->tax_descendants();
182
+		return EE_Cart::instance($grand_total, $session);
183
+	}
184
+
185
+
186
+
187
+	/**
188
+	 * Creates the total line item, and ensures it has its 'tickets' and 'taxes' sub-items
189
+	 *
190
+	 * @return EE_Line_Item
191
+	 * @throws \EE_Error
192
+	 */
193
+	private function _create_grand_total()
194
+	{
195
+		$this->_grand_total = EEH_Line_Item::create_total_line_item();
196
+		return $this->_grand_total;
197
+	}
198
+
199
+
200
+
201
+	/**
202
+	 * Gets all the line items of object type Ticket
203
+	 *
204
+	 * @access public
205
+	 * @return \EE_Line_Item[]
206
+	 */
207
+	public function get_tickets()
208
+	{
209
+		if ($this->_grand_total === null ) {
210
+			return array();
211
+		}
212
+		return EEH_Line_Item::get_ticket_line_items($this->_grand_total);
213
+	}
214
+
215
+
216
+
217
+	/**
218
+	 * returns the total quantity of tickets in the cart
219
+	 *
220
+	 * @access public
221
+	 * @return int
222
+	 * @throws \EE_Error
223
+	 */
224
+	public function all_ticket_quantity_count()
225
+	{
226
+		$tickets = $this->get_tickets();
227
+		if (empty($tickets)) {
228
+			return 0;
229
+		}
230
+		$count = 0;
231
+		foreach ($tickets as $ticket) {
232
+			$count += $ticket->get('LIN_quantity');
233
+		}
234
+		return $count;
235
+	}
236
+
237
+
238
+
239
+	/**
240
+	 * Gets all the tax line items
241
+	 *
242
+	 * @return \EE_Line_Item[]
243
+	 * @throws \EE_Error
244
+	 */
245
+	public function get_taxes()
246
+	{
247
+		return EEH_Line_Item::get_taxes_subtotal($this->_grand_total)->children();
248
+	}
249
+
250
+
251
+
252
+	/**
253
+	 * Gets the total line item (which is a parent of all other line items) on this cart
254
+	 *
255
+	 * @return EE_Line_Item
256
+	 * @throws \EE_Error
257
+	 */
258
+	public function get_grand_total()
259
+	{
260
+		return $this->_grand_total instanceof EE_Line_Item ? $this->_grand_total : $this->_create_grand_total();
261
+	}
262
+
263
+
264
+
265
+	/**
266
+	 * @process items for adding to cart
267
+	 * @access  public
268
+	 * @param EE_Ticket $ticket
269
+	 * @param int       $qty
270
+	 * @return TRUE on success, FALSE on fail
271
+	 * @throws \EE_Error
272
+	 */
273
+	public function add_ticket_to_cart(EE_Ticket $ticket, $qty = 1)
274
+	{
275
+		EEH_Line_Item::add_ticket_purchase($this->get_grand_total(), $ticket, $qty);
276
+		return $this->save_cart() ? true : false;
277
+	}
278
+
279
+
280
+
281
+	/**
282
+	 * get_cart_total_before_tax
283
+	 *
284
+	 * @access public
285
+	 * @return float
286
+	 * @throws \EE_Error
287
+	 */
288
+	public function get_cart_total_before_tax()
289
+	{
290
+		return $this->get_grand_total()->recalculate_pre_tax_total();
291
+	}
292
+
293
+
294
+
295
+	/**
296
+	 * gets the total amount of tax paid for items in this cart
297
+	 *
298
+	 * @access public
299
+	 * @return float
300
+	 * @throws \EE_Error
301
+	 */
302
+	public function get_applied_taxes()
303
+	{
304
+		return EEH_Line_Item::ensure_taxes_applied($this->_grand_total);
305
+	}
306
+
307
+
308
+
309
+	/**
310
+	 * Gets the total amount to be paid for the items in the cart, including taxes and other modifiers
311
+	 *
312
+	 * @access public
313
+	 * @return float
314
+	 * @throws \EE_Error
315
+	 */
316
+	public function get_cart_grand_total()
317
+	{
318
+		EEH_Line_Item::ensure_taxes_applied($this->_grand_total);
319
+		return $this->get_grand_total()->total();
320
+	}
321
+
322
+
323
+
324
+	/**
325
+	 * Gets the total amount to be paid for the items in the cart, including taxes and other modifiers
326
+	 *
327
+	 * @access public
328
+	 * @return float
329
+	 * @throws \EE_Error
330
+	 */
331
+	public function recalculate_all_cart_totals()
332
+	{
333
+		$pre_tax_total = $this->get_cart_total_before_tax();
334
+		$taxes_total = EEH_Line_Item::ensure_taxes_applied($this->_grand_total);
335
+		$this->_grand_total->set_total($pre_tax_total + $taxes_total);
336
+		$this->_grand_total->save_this_and_descendants_to_txn();
337
+		return $this->get_grand_total()->total();
338
+	}
339
+
340
+
341
+
342
+	/**
343
+	 * deletes an item from the cart
344
+	 *
345
+	 * @access public
346
+	 * @param array|bool|string $line_item_codes
347
+	 * @return int on success, FALSE on fail
348
+	 * @throws \EE_Error
349
+	 */
350
+	public function delete_items($line_item_codes = false)
351
+	{
352
+		do_action('AHEE_log', __FILE__, __FUNCTION__, '');
353
+		return EEH_Line_Item::delete_items($this->get_grand_total(), $line_item_codes);
354
+	}
355
+
356
+
357
+
358
+	/**
359
+	 * @remove ALL items from cart and zero ALL totals
360
+	 * @access public
361
+	 * @return bool
362
+	 * @throws \EE_Error
363
+	 */
364
+	public function empty_cart()
365
+	{
366
+		do_action('AHEE_log', __FILE__, __FUNCTION__, '');
367
+		$this->_grand_total = $this->_create_grand_total();
368
+		return $this->save_cart(true);
369
+	}
370
+
371
+
372
+
373
+	/**
374
+	 * @remove ALL items from cart and delete total as well
375
+	 * @access public
376
+	 * @return bool
377
+	 * @throws \EE_Error
378
+	 */
379
+	public function delete_cart()
380
+	{
381
+		$deleted = EEH_Line_Item::delete_all_child_items($this->_grand_total);
382
+		if ($deleted) {
383
+			$deleted += $this->_grand_total->delete();
384
+			$this->_grand_total = null;
385
+		}
386
+		return $deleted;
387
+	}
388
+
389
+
390
+
391
+	/**
392
+	 * @save   cart to session
393
+	 * @access public
394
+	 * @param bool $apply_taxes
395
+	 * @return TRUE on success, FALSE on fail
396
+	 * @throws \EE_Error
397
+	 */
398
+	public function save_cart($apply_taxes = true)
399
+	{
400
+		if ($apply_taxes && $this->_grand_total instanceof EE_Line_Item) {
401
+			EEH_Line_Item::ensure_taxes_applied($this->_grand_total);
402
+			//make sure we don't cache the transaction because it can get stale
403
+			if ($this->_grand_total->get_one_from_cache('Transaction') instanceof EE_Transaction
404
+				&& $this->_grand_total->get_one_from_cache('Transaction')->ID()
405
+			) {
406
+				$this->_grand_total->clear_cache('Transaction', null, true);
407
+			}
408
+		}
409
+		if ($this->session() instanceof EE_Session) {
410
+			return $this->session()->set_cart($this);
411
+		} else {
412
+			return false;
413
+		}
414
+	}
415
+
416
+
417
+
418
+	public function __wakeup()
419
+	{
420
+		if ( ! $this->_grand_total instanceof EE_Line_Item && absint($this->_grand_total) !== 0) {
421
+			// $this->_grand_total is actually just an ID, so use it to get the object from the db
422
+			$this->_grand_total = EEM_Line_Item::instance()->get_one_by_ID($this->_grand_total);
423
+		}
424
+	}
425
+
426
+
427
+
428
+	/**
429
+	 * @return array
430
+	 */
431
+	public function __sleep()
432
+	{
433
+		if ($this->_grand_total instanceof EE_Line_Item && $this->_grand_total->ID()) {
434
+			$this->_grand_total = $this->_grand_total->ID();
435
+		}
436
+		return array('_grand_total');
437
+	}
438 438
 
439 439
 
440 440
 }
Please login to merge, or discard this patch.
core/EE_Psr4AutoloaderInit.core.php 2 patches
Indentation   +12 added lines, -12 removed lines patch added patch discarded remove patch
@@ -32,19 +32,19 @@
 block discarded – undo
32 32
 	 * @return \EventEspresso\core\Psr4Autoloader
33 33
 	 */
34 34
 	public function initializeAutoloader() {
35
-        static $initialized = false;
36
-        if ( ! $initialized) {
37
-            // instantiate PSR4 autoloader
35
+		static $initialized = false;
36
+		if ( ! $initialized) {
37
+			// instantiate PSR4 autoloader
38 38
 			espresso_load_required( 'Psr4Autoloader', EE_CORE . 'Psr4Autoloader.php' );
39
-            EE_Psr4AutoloaderInit::$psr4_loader = new Psr4Autoloader();
40
-            // register the autoloader
41
-            EE_Psr4AutoloaderInit::$psr4_loader->register();
42
-            // register the base directories for the namespace prefix
43
-            EE_Psr4AutoloaderInit::$psr4_loader->addNamespace('EventEspresso', EE_PLUGIN_DIR_PATH);
44
-            EE_Psr4AutoloaderInit::$psr4_loader->addNamespace('EventEspressoBatchRequest', EE_LIBRARIES . 'batch');
45
-            $initialized = true;
46
-        }
47
-    }
39
+			EE_Psr4AutoloaderInit::$psr4_loader = new Psr4Autoloader();
40
+			// register the autoloader
41
+			EE_Psr4AutoloaderInit::$psr4_loader->register();
42
+			// register the base directories for the namespace prefix
43
+			EE_Psr4AutoloaderInit::$psr4_loader->addNamespace('EventEspresso', EE_PLUGIN_DIR_PATH);
44
+			EE_Psr4AutoloaderInit::$psr4_loader->addNamespace('EventEspressoBatchRequest', EE_LIBRARIES . 'batch');
45
+			$initialized = true;
46
+		}
47
+	}
48 48
 
49 49
 
50 50
 
Please login to merge, or discard this patch.
Spacing   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -35,13 +35,13 @@
 block discarded – undo
35 35
         static $initialized = false;
36 36
         if ( ! $initialized) {
37 37
             // instantiate PSR4 autoloader
38
-			espresso_load_required( 'Psr4Autoloader', EE_CORE . 'Psr4Autoloader.php' );
38
+			espresso_load_required('Psr4Autoloader', EE_CORE.'Psr4Autoloader.php');
39 39
             EE_Psr4AutoloaderInit::$psr4_loader = new Psr4Autoloader();
40 40
             // register the autoloader
41 41
             EE_Psr4AutoloaderInit::$psr4_loader->register();
42 42
             // register the base directories for the namespace prefix
43 43
             EE_Psr4AutoloaderInit::$psr4_loader->addNamespace('EventEspresso', EE_PLUGIN_DIR_PATH);
44
-            EE_Psr4AutoloaderInit::$psr4_loader->addNamespace('EventEspressoBatchRequest', EE_LIBRARIES . 'batch');
44
+            EE_Psr4AutoloaderInit::$psr4_loader->addNamespace('EventEspressoBatchRequest', EE_LIBRARIES.'batch');
45 45
             $initialized = true;
46 46
         }
47 47
     }
Please login to merge, or discard this patch.
libraries/messages/data_class/EE_Messages_Gateways_incoming_data.class.php 2 patches
Indentation   +6 added lines, -6 removed lines patch added patch discarded remove patch
@@ -135,11 +135,11 @@  discard block
 block discarded – undo
135 135
 
136 136
 
137 137
 
138
-    /**
139
-     * _setup_data
140
-     *
141
-     * @throws EE_Error
142
-     */
138
+	/**
139
+	 * _setup_data
140
+	 *
141
+	 * @throws EE_Error
142
+	 */
143 143
 	protected function _setup_data() {
144 144
 
145 145
 		$this->reg_info = array();
@@ -157,7 +157,7 @@  discard block
 block discarded – undo
157 157
 		$this->ip_address = isset( $session_data['ip_address'] ) ? $session_data['ip_address'] : '';
158 158
 		$this->user_agent = isset( $session_data['user_agent'] ) ? $session_data['user_agent'] : '';
159 159
 		$this->init_access = $this->last_access = '';
160
-        //get all non-trashed registrations
160
+		//get all non-trashed registrations
161 161
 		$this->reg_objs = $this->txn->registrations(array(array('REG_deleted' => false)));
162 162
 		$this->_assemble_data();
163 163
 
Please login to merge, or discard this patch.
Spacing   +22 added lines, -22 removed lines patch added patch discarded remove patch
@@ -1,6 +1,6 @@  discard block
 block discarded – undo
1 1
 <?php
2 2
 
3
-if (!defined('EVENT_ESPRESSO_VERSION') )
3
+if ( ! defined('EVENT_ESPRESSO_VERSION'))
4 4
 	exit('NO direct script access allowed');
5 5
 
6 6
 /**
@@ -44,25 +44,25 @@  discard block
 block discarded – undo
44 44
 	 * @param array $data
45 45
 	 * @throws EE_Error
46 46
 	 */
47
-	public function __construct( $data ) {
47
+	public function __construct($data) {
48 48
 
49 49
 		//test for valid params
50
-		if ( ! ( $data[0] instanceof EE_Transaction ))
51
-			throw new EE_Error( __('Incoming data for the Gateways data handler must have an EE_Transaction object as the value for the first array index.', 'event_espresso') );
50
+		if ( ! ($data[0] instanceof EE_Transaction))
51
+			throw new EE_Error(__('Incoming data for the Gateways data handler must have an EE_Transaction object as the value for the first array index.', 'event_espresso'));
52 52
 
53
-		if ( empty( $data[1] ) || ! $data[1] instanceof  EE_Payment  )
54
-			$pmt_obj = $this->_get_empty_payment_obj( $data[0] );
53
+		if (empty($data[1]) || ! $data[1] instanceof  EE_Payment)
54
+			$pmt_obj = $this->_get_empty_payment_obj($data[0]);
55 55
 
56
-		if ( ! empty( $data[2] ) ) {
56
+		if ( ! empty($data[2])) {
57 57
 			$filtered_reg_status = $data[2];
58 58
 		}
59 59
 
60 60
 		$data = array(
61 61
 			'txn_obj' => $data[0],
62 62
 			'pmt_obj' => isset($pmt_obj) ? $pmt_obj : $data[1],
63
-			'filtered_reg_status' => isset( $filtered_reg_status ) ? $filtered_reg_status : null
63
+			'filtered_reg_status' => isset($filtered_reg_status) ? $filtered_reg_status : null
64 64
 			);
65
-		parent::__construct( $data );
65
+		parent::__construct($data);
66 66
 	}
67 67
 
68 68
 
@@ -76,18 +76,18 @@  discard block
 block discarded – undo
76 76
 	 *
77 77
 	 * @return array   The prepped data for db
78 78
 	 */
79
-	static public function convert_data_for_persistent_storage( $data ) {
79
+	static public function convert_data_for_persistent_storage($data) {
80 80
 		$prepped_data = array();
81 81
 
82
-		if ( $data[0] instanceof EE_Transaction ) {
82
+		if ($data[0] instanceof EE_Transaction) {
83 83
 			$prepped_data['Transaction'] = $data[0]->ID();
84 84
 		}
85 85
 
86
-		if ( isset( $data[1] ) && $data[1] instanceof EE_Payment ) {
86
+		if (isset($data[1]) && $data[1] instanceof EE_Payment) {
87 87
 			$prepped_data['Payment'] = $data[1]->ID();
88 88
 		}
89 89
 
90
-		if ( ! empty( $data[2] ) ) {
90
+		if ( ! empty($data[2])) {
91 91
 			$prepped_data['filter'] = $data[2];
92 92
 		}
93 93
 
@@ -107,11 +107,11 @@  discard block
 block discarded – undo
107 107
 	 *
108 108
 	 * @return array
109 109
 	 */
110
-	static public function convert_data_from_persistent_storage( $data ) {
110
+	static public function convert_data_from_persistent_storage($data) {
111 111
 		$prepped_data = array(
112
-			0 => isset( $data['Transaction'] ) ? EEM_Transaction::instance()->get_one_by_ID( $data['Transaction'] ) : null,
113
-			1 => isset( $data['Payment'] ) ? EEM_Payment::instance()->get_one_by_ID( $data['Payment'] ) : null,
114
-			2 => isset( $data['filter'] ) ? $data['filter'] : null
112
+			0 => isset($data['Transaction']) ? EEM_Transaction::instance()->get_one_by_ID($data['Transaction']) : null,
113
+			1 => isset($data['Payment']) ? EEM_Payment::instance()->get_one_by_ID($data['Payment']) : null,
114
+			2 => isset($data['filter']) ? $data['filter'] : null
115 115
 		);
116 116
 		return $prepped_data;
117 117
 	}
@@ -122,8 +122,8 @@  discard block
 block discarded – undo
122 122
 	 * @param \EE_Transaction $txn
123 123
 	 * @return \EE_Payment
124 124
 	 */
125
-	private function _get_empty_payment_obj( EE_Transaction $txn ) {
126
-		$PMT = EE_Payment::new_instance( array(
125
+	private function _get_empty_payment_obj(EE_Transaction $txn) {
126
+		$PMT = EE_Payment::new_instance(array(
127 127
 			'STS_ID' => EEM_Payment::status_id_pending,
128 128
 			'PAY_timestamp' => time(),
129 129
 			'PMD_ID' => $txn->payment_method_ID(),
@@ -153,9 +153,9 @@  discard block
 block discarded – undo
153 153
 
154 154
 
155 155
 		//other data from the session (if possible)
156
-		$this->user_id = isset( $session_data['user_id'] ) ? $session_data['user_id'] : '';
157
-		$this->ip_address = isset( $session_data['ip_address'] ) ? $session_data['ip_address'] : '';
158
-		$this->user_agent = isset( $session_data['user_agent'] ) ? $session_data['user_agent'] : '';
156
+		$this->user_id = isset($session_data['user_id']) ? $session_data['user_id'] : '';
157
+		$this->ip_address = isset($session_data['ip_address']) ? $session_data['ip_address'] : '';
158
+		$this->user_agent = isset($session_data['user_agent']) ? $session_data['user_agent'] : '';
159 159
 		$this->init_access = $this->last_access = '';
160 160
         //get all non-trashed registrations
161 161
 		$this->reg_objs = $this->txn->registrations(array(array('REG_deleted' => false)));
Please login to merge, or discard this patch.
core/EE_Load_Espresso_Core.core.php 2 patches
Indentation   +191 added lines, -191 removed lines patch added patch discarded remove patch
@@ -23,204 +23,204 @@
 block discarded – undo
23 23
 class EE_Load_Espresso_Core implements EEI_Request_Decorator, EEI_Request_Stack_Core_App
24 24
 {
25 25
 
26
-    /**
27
-     * @var EE_Request $request
28
-     */
29
-    protected $request;
26
+	/**
27
+	 * @var EE_Request $request
28
+	 */
29
+	protected $request;
30 30
 
31
-    /**
32
-     * @var EE_Response $response
33
-     */
34
-    protected $response;
31
+	/**
32
+	 * @var EE_Response $response
33
+	 */
34
+	protected $response;
35 35
 
36
-    /**
37
-     * @var EE_Dependency_Map $dependency_map
38
-     */
39
-    protected $dependency_map;
36
+	/**
37
+	 * @var EE_Dependency_Map $dependency_map
38
+	 */
39
+	protected $dependency_map;
40 40
 
41
-    /**
42
-     * @var EE_Registry $registry
43
-     */
44
-    protected $registry;
41
+	/**
42
+	 * @var EE_Registry $registry
43
+	 */
44
+	protected $registry;
45 45
 
46 46
 
47 47
 
48
-    /**
49
-     * EE_Load_Espresso_Core constructor
50
-     */
48
+	/**
49
+	 * EE_Load_Espresso_Core constructor
50
+	 */
51 51
 	public function __construct() {
52
-        // deprecated functions
53
-        espresso_load_required('EE_Base', EE_CORE . 'EE_Base.core.php');
54
-        espresso_load_required('EE_Deprecated', EE_CORE . 'EE_Deprecated.core.php');
55
-    }
56
-
57
-
58
-
59
-    /**
60
-     * handle
61
-     * sets hooks for running rest of system
62
-     * provides "AHEE__EE_System__construct__complete" hook for EE Addons to use as their starting point
63
-     * starting EE Addons from any other point may lead to problems
64
-     *
65
-     * @param EE_Request  $request
66
-     * @param EE_Response $response
67
-     * @return EE_Response
68
-     * @throws EE_Error
69
-     * @throws InvalidDataTypeException
70
-     * @throws InvalidInterfaceException
71
-     * @throws InvalidArgumentException
72
-     */
73
-    public function handle_request(EE_Request $request, EE_Response $response)
74
-    {
75
-        $this->request = $request;
76
-        $this->response = $response;
77
-        // info about how to load classes required by other classes
78
-        $this->dependency_map = $this->_load_dependency_map();
79
-        // central repository for classes
80
-        $this->registry = $this->_load_registry();
81
-        do_action('EE_Load_Espresso_Core__handle_request__initialize_core_loading');
82
-        $loader = LoaderFactory::getLoader($this->registry);
83
-        $this->dependency_map->setLoader($loader);
84
-        // build DI container
85
-        // $OpenCoffeeShop = new EventEspresso\core\services\container\OpenCoffeeShop();
86
-        // $OpenCoffeeShop->addRecipes();
87
-        // $CoffeeShop = $OpenCoffeeShop->CoffeeShop();
88
-        // workarounds for PHP < 5.3
89
-        $this->_load_class_tools();
90
-        // deprecated functions
91
-        espresso_load_required('EE_Deprecated', EE_CORE . 'EE_Deprecated.core.php');
92
-        // WP cron jobs
93
-        $loader->getShared('EE_Cron_Tasks');
94
-        $loader->getShared('EE_Request_Handler');
95
-        $loader->getShared('EE_System');
96
-        return $this->response;
97
-    }
98
-
99
-
100
-
101
-    /**
102
-     * @return EE_Request
103
-     */
104
-    public function request()
105
-    {
106
-        return $this->request;
107
-    }
108
-
109
-
110
-
111
-    /**
112
-     * @return EE_Response
113
-     */
114
-    public function response()
115
-    {
116
-        return $this->response;
117
-    }
118
-
119
-
120
-
121
-    /**
122
-     * @return EE_Dependency_Map
123
-     * @throws EE_Error
124
-     */
125
-    public function dependency_map()
126
-    {
127
-        if (! $this->dependency_map instanceof EE_Dependency_Map) {
128
-            throw new EE_Error(
129
-                sprintf(
130
-                    __('Invalid EE_Dependency_Map: "%1$s"', 'event_espresso'),
131
-                    print_r($this->dependency_map, true)
132
-                )
133
-            );
134
-        }
135
-        return $this->dependency_map;
136
-    }
137
-
138
-
139
-
140
-    /**
141
-     * @return EE_Registry
142
-     * @throws EE_Error
143
-     */
144
-    public function registry()
145
-    {
146
-        if (! $this->registry instanceof EE_Registry) {
147
-            throw new EE_Error(
148
-                sprintf(
149
-                    __('Invalid EE_Registry: "%1$s"', 'event_espresso'),
150
-                    print_r($this->registry, true)
151
-                )
152
-            );
153
-        }
154
-        return $this->registry;
155
-    }
156
-
157
-
158
-
159
-    /**
160
-     * @return EE_Dependency_Map
161
-     */
162
-    private function _load_dependency_map()
163
-    {
164
-        if (! is_readable(EE_CORE . 'EE_Dependency_Map.core.php')) {
165
-            EE_Error::add_error(
166
-                __('The EE_Dependency_Map core class could not be loaded.', 'event_espresso'),
167
-                __FILE__, __FUNCTION__, __LINE__
168
-            );
169
-            wp_die(EE_Error::get_notices());
170
-        }
171
-        require_once(EE_CORE . 'EE_Dependency_Map.core.php');
172
-        return EE_Dependency_Map::instance($this->request, $this->response);
173
-    }
174
-
175
-
176
-
177
-    /**
178
-     * @return EE_Registry
179
-     */
180
-    private function _load_registry()
181
-    {
182
-        if (! is_readable(EE_CORE . 'EE_Registry.core.php')) {
183
-            EE_Error::add_error(
184
-                __('The EE_Registry core class could not be loaded.', 'event_espresso'),
185
-                __FILE__, __FUNCTION__, __LINE__
186
-            );
187
-            wp_die(EE_Error::get_notices());
188
-        }
189
-        require_once(EE_CORE . 'EE_Registry.core.php');
190
-        return EE_Registry::instance($this->dependency_map);
191
-    }
192
-
193
-
194
-
195
-    /**
196
-     * @return void
197
-     */
198
-    private function _load_class_tools()
199
-    {
200
-        if (! is_readable(EE_HELPERS . 'EEH_Class_Tools.helper.php')) {
201
-            EE_Error::add_error(
202
-                __('The EEH_Class_Tools helper could not be loaded.', 'event_espresso'),
203
-                __FILE__, __FUNCTION__, __LINE__
204
-            );
205
-        }
206
-        require_once(EE_HELPERS . 'EEH_Class_Tools.helper.php');
207
-    }
208
-
209
-
210
-
211
-    /**
212
-     * called after the request stack has been fully processed
213
-     * if any of the middleware apps has requested the plugin be deactivated, then we do that now
214
-     *
215
-     * @param EE_Request  $request
216
-     * @param EE_Response $response
217
-     */
218
-    public function handle_response(EE_Request $request, EE_Response $response)
219
-    {
220
-        if ($response->plugin_deactivated()) {
221
-            espresso_deactivate_plugin(EE_PLUGIN_BASENAME);
222
-        }
223
-    }
52
+		// deprecated functions
53
+		espresso_load_required('EE_Base', EE_CORE . 'EE_Base.core.php');
54
+		espresso_load_required('EE_Deprecated', EE_CORE . 'EE_Deprecated.core.php');
55
+	}
56
+
57
+
58
+
59
+	/**
60
+	 * handle
61
+	 * sets hooks for running rest of system
62
+	 * provides "AHEE__EE_System__construct__complete" hook for EE Addons to use as their starting point
63
+	 * starting EE Addons from any other point may lead to problems
64
+	 *
65
+	 * @param EE_Request  $request
66
+	 * @param EE_Response $response
67
+	 * @return EE_Response
68
+	 * @throws EE_Error
69
+	 * @throws InvalidDataTypeException
70
+	 * @throws InvalidInterfaceException
71
+	 * @throws InvalidArgumentException
72
+	 */
73
+	public function handle_request(EE_Request $request, EE_Response $response)
74
+	{
75
+		$this->request = $request;
76
+		$this->response = $response;
77
+		// info about how to load classes required by other classes
78
+		$this->dependency_map = $this->_load_dependency_map();
79
+		// central repository for classes
80
+		$this->registry = $this->_load_registry();
81
+		do_action('EE_Load_Espresso_Core__handle_request__initialize_core_loading');
82
+		$loader = LoaderFactory::getLoader($this->registry);
83
+		$this->dependency_map->setLoader($loader);
84
+		// build DI container
85
+		// $OpenCoffeeShop = new EventEspresso\core\services\container\OpenCoffeeShop();
86
+		// $OpenCoffeeShop->addRecipes();
87
+		// $CoffeeShop = $OpenCoffeeShop->CoffeeShop();
88
+		// workarounds for PHP < 5.3
89
+		$this->_load_class_tools();
90
+		// deprecated functions
91
+		espresso_load_required('EE_Deprecated', EE_CORE . 'EE_Deprecated.core.php');
92
+		// WP cron jobs
93
+		$loader->getShared('EE_Cron_Tasks');
94
+		$loader->getShared('EE_Request_Handler');
95
+		$loader->getShared('EE_System');
96
+		return $this->response;
97
+	}
98
+
99
+
100
+
101
+	/**
102
+	 * @return EE_Request
103
+	 */
104
+	public function request()
105
+	{
106
+		return $this->request;
107
+	}
108
+
109
+
110
+
111
+	/**
112
+	 * @return EE_Response
113
+	 */
114
+	public function response()
115
+	{
116
+		return $this->response;
117
+	}
118
+
119
+
120
+
121
+	/**
122
+	 * @return EE_Dependency_Map
123
+	 * @throws EE_Error
124
+	 */
125
+	public function dependency_map()
126
+	{
127
+		if (! $this->dependency_map instanceof EE_Dependency_Map) {
128
+			throw new EE_Error(
129
+				sprintf(
130
+					__('Invalid EE_Dependency_Map: "%1$s"', 'event_espresso'),
131
+					print_r($this->dependency_map, true)
132
+				)
133
+			);
134
+		}
135
+		return $this->dependency_map;
136
+	}
137
+
138
+
139
+
140
+	/**
141
+	 * @return EE_Registry
142
+	 * @throws EE_Error
143
+	 */
144
+	public function registry()
145
+	{
146
+		if (! $this->registry instanceof EE_Registry) {
147
+			throw new EE_Error(
148
+				sprintf(
149
+					__('Invalid EE_Registry: "%1$s"', 'event_espresso'),
150
+					print_r($this->registry, true)
151
+				)
152
+			);
153
+		}
154
+		return $this->registry;
155
+	}
156
+
157
+
158
+
159
+	/**
160
+	 * @return EE_Dependency_Map
161
+	 */
162
+	private function _load_dependency_map()
163
+	{
164
+		if (! is_readable(EE_CORE . 'EE_Dependency_Map.core.php')) {
165
+			EE_Error::add_error(
166
+				__('The EE_Dependency_Map core class could not be loaded.', 'event_espresso'),
167
+				__FILE__, __FUNCTION__, __LINE__
168
+			);
169
+			wp_die(EE_Error::get_notices());
170
+		}
171
+		require_once(EE_CORE . 'EE_Dependency_Map.core.php');
172
+		return EE_Dependency_Map::instance($this->request, $this->response);
173
+	}
174
+
175
+
176
+
177
+	/**
178
+	 * @return EE_Registry
179
+	 */
180
+	private function _load_registry()
181
+	{
182
+		if (! is_readable(EE_CORE . 'EE_Registry.core.php')) {
183
+			EE_Error::add_error(
184
+				__('The EE_Registry core class could not be loaded.', 'event_espresso'),
185
+				__FILE__, __FUNCTION__, __LINE__
186
+			);
187
+			wp_die(EE_Error::get_notices());
188
+		}
189
+		require_once(EE_CORE . 'EE_Registry.core.php');
190
+		return EE_Registry::instance($this->dependency_map);
191
+	}
192
+
193
+
194
+
195
+	/**
196
+	 * @return void
197
+	 */
198
+	private function _load_class_tools()
199
+	{
200
+		if (! is_readable(EE_HELPERS . 'EEH_Class_Tools.helper.php')) {
201
+			EE_Error::add_error(
202
+				__('The EEH_Class_Tools helper could not be loaded.', 'event_espresso'),
203
+				__FILE__, __FUNCTION__, __LINE__
204
+			);
205
+		}
206
+		require_once(EE_HELPERS . 'EEH_Class_Tools.helper.php');
207
+	}
208
+
209
+
210
+
211
+	/**
212
+	 * called after the request stack has been fully processed
213
+	 * if any of the middleware apps has requested the plugin be deactivated, then we do that now
214
+	 *
215
+	 * @param EE_Request  $request
216
+	 * @param EE_Response $response
217
+	 */
218
+	public function handle_response(EE_Request $request, EE_Response $response)
219
+	{
220
+		if ($response->plugin_deactivated()) {
221
+			espresso_deactivate_plugin(EE_PLUGIN_BASENAME);
222
+		}
223
+	}
224 224
 
225 225
 
226 226
 
Please login to merge, or discard this patch.
Spacing   +11 added lines, -11 removed lines patch added patch discarded remove patch
@@ -50,8 +50,8 @@  discard block
 block discarded – undo
50 50
      */
51 51
 	public function __construct() {
52 52
         // deprecated functions
53
-        espresso_load_required('EE_Base', EE_CORE . 'EE_Base.core.php');
54
-        espresso_load_required('EE_Deprecated', EE_CORE . 'EE_Deprecated.core.php');
53
+        espresso_load_required('EE_Base', EE_CORE.'EE_Base.core.php');
54
+        espresso_load_required('EE_Deprecated', EE_CORE.'EE_Deprecated.core.php');
55 55
     }
56 56
 
57 57
 
@@ -88,7 +88,7 @@  discard block
 block discarded – undo
88 88
         // workarounds for PHP < 5.3
89 89
         $this->_load_class_tools();
90 90
         // deprecated functions
91
-        espresso_load_required('EE_Deprecated', EE_CORE . 'EE_Deprecated.core.php');
91
+        espresso_load_required('EE_Deprecated', EE_CORE.'EE_Deprecated.core.php');
92 92
         // WP cron jobs
93 93
         $loader->getShared('EE_Cron_Tasks');
94 94
         $loader->getShared('EE_Request_Handler');
@@ -124,7 +124,7 @@  discard block
 block discarded – undo
124 124
      */
125 125
     public function dependency_map()
126 126
     {
127
-        if (! $this->dependency_map instanceof EE_Dependency_Map) {
127
+        if ( ! $this->dependency_map instanceof EE_Dependency_Map) {
128 128
             throw new EE_Error(
129 129
                 sprintf(
130 130
                     __('Invalid EE_Dependency_Map: "%1$s"', 'event_espresso'),
@@ -143,7 +143,7 @@  discard block
 block discarded – undo
143 143
      */
144 144
     public function registry()
145 145
     {
146
-        if (! $this->registry instanceof EE_Registry) {
146
+        if ( ! $this->registry instanceof EE_Registry) {
147 147
             throw new EE_Error(
148 148
                 sprintf(
149 149
                     __('Invalid EE_Registry: "%1$s"', 'event_espresso'),
@@ -161,14 +161,14 @@  discard block
 block discarded – undo
161 161
      */
162 162
     private function _load_dependency_map()
163 163
     {
164
-        if (! is_readable(EE_CORE . 'EE_Dependency_Map.core.php')) {
164
+        if ( ! is_readable(EE_CORE.'EE_Dependency_Map.core.php')) {
165 165
             EE_Error::add_error(
166 166
                 __('The EE_Dependency_Map core class could not be loaded.', 'event_espresso'),
167 167
                 __FILE__, __FUNCTION__, __LINE__
168 168
             );
169 169
             wp_die(EE_Error::get_notices());
170 170
         }
171
-        require_once(EE_CORE . 'EE_Dependency_Map.core.php');
171
+        require_once(EE_CORE.'EE_Dependency_Map.core.php');
172 172
         return EE_Dependency_Map::instance($this->request, $this->response);
173 173
     }
174 174
 
@@ -179,14 +179,14 @@  discard block
 block discarded – undo
179 179
      */
180 180
     private function _load_registry()
181 181
     {
182
-        if (! is_readable(EE_CORE . 'EE_Registry.core.php')) {
182
+        if ( ! is_readable(EE_CORE.'EE_Registry.core.php')) {
183 183
             EE_Error::add_error(
184 184
                 __('The EE_Registry core class could not be loaded.', 'event_espresso'),
185 185
                 __FILE__, __FUNCTION__, __LINE__
186 186
             );
187 187
             wp_die(EE_Error::get_notices());
188 188
         }
189
-        require_once(EE_CORE . 'EE_Registry.core.php');
189
+        require_once(EE_CORE.'EE_Registry.core.php');
190 190
         return EE_Registry::instance($this->dependency_map);
191 191
     }
192 192
 
@@ -197,13 +197,13 @@  discard block
 block discarded – undo
197 197
      */
198 198
     private function _load_class_tools()
199 199
     {
200
-        if (! is_readable(EE_HELPERS . 'EEH_Class_Tools.helper.php')) {
200
+        if ( ! is_readable(EE_HELPERS.'EEH_Class_Tools.helper.php')) {
201 201
             EE_Error::add_error(
202 202
                 __('The EEH_Class_Tools helper could not be loaded.', 'event_espresso'),
203 203
                 __FILE__, __FUNCTION__, __LINE__
204 204
             );
205 205
         }
206
-        require_once(EE_HELPERS . 'EEH_Class_Tools.helper.php');
206
+        require_once(EE_HELPERS.'EEH_Class_Tools.helper.php');
207 207
     }
208 208
 
209 209
 
Please login to merge, or discard this patch.
core/db_classes/EE_Registration.class.php 3 patches
Doc Comments   +4 added lines, -3 removed lines patch added patch discarded remove patch
@@ -1164,7 +1164,7 @@  discard block
 block discarded – undo
1164 1164
      * Sets deleted
1165 1165
      *
1166 1166
      * @param boolean $deleted
1167
-     * @return bool
1167
+     * @return boolean|null
1168 1168
      * @throws EE_Error
1169 1169
      * @throws RuntimeException
1170 1170
      */
@@ -1222,6 +1222,7 @@  discard block
 block discarded – undo
1222 1222
      * @param int | EE_Datetime $DTT_OR_ID      The datetime the registration is being checked against
1223 1223
      * @param bool              $check_approved This is used to indicate whether the caller wants can_checkin to also
1224 1224
      *                                          consider registration status as well as datetime access.
1225
+     * @param integer $DTT_OR_ID
1225 1226
      * @return bool
1226 1227
      * @throws EE_Error
1227 1228
      */
@@ -1392,7 +1393,7 @@  discard block
 block discarded – undo
1392 1393
      * Returns the latest datetime related to this registration (via the ticket attached to the registration).
1393 1394
      * "Latest" is defined by the `DTT_EVT_start` column.
1394 1395
      *
1395
-     * @return EE_Datetime|null
1396
+     * @return null|EE_Base_Class
1396 1397
      * @throws EE_Error
1397 1398
      */
1398 1399
     public function get_latest_related_datetime()
@@ -1688,7 +1689,7 @@  discard block
 block discarded – undo
1688 1689
      * This grabs the payment method corresponding to the last payment made for the amount owing on the registration.
1689 1690
      * Note: if there are no payments on the registration there will be no payment method returned.
1690 1691
      *
1691
-     * @return EE_Payment_Method|null
1692
+     * @return null|EE_Base_Class
1692 1693
      */
1693 1694
     public function payment_method()
1694 1695
     {
Please login to merge, or discard this patch.
Indentation   +1979 added lines, -1979 removed lines patch added patch discarded remove patch
@@ -18,1985 +18,1985 @@
 block discarded – undo
18 18
 {
19 19
 
20 20
 
21
-    /**
22
-     * Used to reference when a registration has never been checked in.
23
-     *
24
-     * @deprecated use \EE_Checkin::status_checked_never instead
25
-     * @type int
26
-     */
27
-    const checkin_status_never = 2;
28
-
29
-    /**
30
-     * Used to reference when a registration has been checked in.
31
-     *
32
-     * @deprecated use \EE_Checkin::status_checked_in instead
33
-     * @type int
34
-     */
35
-    const checkin_status_in = 1;
36
-
37
-
38
-    /**
39
-     * Used to reference when a registration has been checked out.
40
-     *
41
-     * @deprecated use \EE_Checkin::status_checked_out instead
42
-     * @type int
43
-     */
44
-    const checkin_status_out = 0;
45
-
46
-
47
-    /**
48
-     * extra meta key for tracking reg status os trashed registrations
49
-     *
50
-     * @type string
51
-     */
52
-    const PRE_TRASH_REG_STATUS_KEY = 'pre_trash_registration_status';
53
-
54
-
55
-    /**
56
-     * extra meta key for tracking if registration has reserved ticket
57
-     *
58
-     * @type string
59
-     */
60
-    const HAS_RESERVED_TICKET_KEY = 'has_reserved_ticket';
61
-
62
-
63
-    /**
64
-     * @param array  $props_n_values          incoming values
65
-     * @param string $timezone                incoming timezone (if not set the timezone set for the website will be
66
-     *                                        used.)
67
-     * @param array  $date_formats            incoming date_formats in an array where the first value is the
68
-     *                                        date_format and the second value is the time format
69
-     * @return EE_Registration
70
-     * @throws EE_Error
71
-     */
72
-    public static function new_instance($props_n_values = array(), $timezone = null, $date_formats = array())
73
-    {
74
-        $has_object = parent::_check_for_object($props_n_values, __CLASS__, $timezone, $date_formats);
75
-        return $has_object ? $has_object : new self($props_n_values, false, $timezone, $date_formats);
76
-    }
77
-
78
-
79
-    /**
80
-     * @param array  $props_n_values  incoming values from the database
81
-     * @param string $timezone        incoming timezone as set by the model.  If not set the timezone for
82
-     *                                the website will be used.
83
-     * @return EE_Registration
84
-     */
85
-    public static function new_instance_from_db($props_n_values = array(), $timezone = null)
86
-    {
87
-        return new self($props_n_values, true, $timezone);
88
-    }
89
-
90
-
91
-    /**
92
-     *        Set Event ID
93
-     *
94
-     * @param        int $EVT_ID Event ID
95
-     * @throws EE_Error
96
-     * @throws RuntimeException
97
-     */
98
-    public function set_event($EVT_ID = 0)
99
-    {
100
-        $this->set('EVT_ID', $EVT_ID);
101
-    }
102
-
103
-
104
-    /**
105
-     * Overrides parent set() method so that all calls to set( 'REG_code', $REG_code ) OR set( 'STS_ID', $STS_ID ) can
106
-     * be routed to internal methods
107
-     *
108
-     * @param string $field_name
109
-     * @param mixed  $field_value
110
-     * @param bool   $use_default
111
-     * @throws EE_Error
112
-     * @throws EntityNotFoundException
113
-     * @throws InvalidArgumentException
114
-     * @throws InvalidDataTypeException
115
-     * @throws InvalidInterfaceException
116
-     * @throws ReflectionException
117
-     * @throws RuntimeException
118
-     */
119
-    public function set($field_name, $field_value, $use_default = false)
120
-    {
121
-        switch ($field_name) {
122
-            case 'REG_code':
123
-                if (! empty($field_value) && $this->reg_code() === null) {
124
-                    $this->set_reg_code($field_value, $use_default);
125
-                }
126
-                break;
127
-            case 'STS_ID':
128
-                $this->set_status($field_value, $use_default);
129
-                break;
130
-            default:
131
-                parent::set($field_name, $field_value, $use_default);
132
-        }
133
-    }
134
-
135
-
136
-    /**
137
-     * Set Status ID
138
-     * updates the registration status and ALSO...
139
-     * calls reserve_registration_space() if the reg status changes TO approved from any other reg status
140
-     * calls release_registration_space() if the reg status changes FROM approved to any other reg status
141
-     *
142
-     * @param string       $new_STS_ID
143
-     * @param boolean      $use_default
144
-     * @param Context|null $context
145
-     * @return bool
146
-     * @throws EE_Error
147
-     * @throws EntityNotFoundException
148
-     * @throws InvalidArgumentException
149
-     * @throws ReflectionException
150
-     * @throws RuntimeException
151
-     * @throws InvalidDataTypeException
152
-     * @throws InvalidInterfaceException
153
-     */
154
-    public function set_status($new_STS_ID = null, $use_default = false, Context $context = null)
155
-    {
156
-        // get current REG_Status
157
-        $old_STS_ID = $this->status_ID();
158
-        // if status has changed
159
-        if ($old_STS_ID !== $new_STS_ID // and that status has actually changed
160
-            && ! empty($old_STS_ID) // and that old status is actually set
161
-            && ! empty($new_STS_ID) // as well as the new status
162
-            && $this->ID() // ensure registration is in the db
163
-        ) {
164
-            // TO approved
165
-            if ($new_STS_ID === EEM_Registration::status_id_approved) {
166
-                // reserve a space by incrementing ticket and datetime sold values
167
-                $this->_reserve_registration_space();
168
-                do_action('AHEE__EE_Registration__set_status__to_approved', $this, $old_STS_ID, $new_STS_ID, $context);
169
-                // OR FROM  approved
170
-            } elseif ($old_STS_ID === EEM_Registration::status_id_approved) {
171
-                // release a space by decrementing ticket and datetime sold values
172
-                $this->_release_registration_space();
173
-                do_action(
174
-                    'AHEE__EE_Registration__set_status__from_approved',
175
-                    $this,
176
-                    $old_STS_ID,
177
-                    $new_STS_ID,
178
-                    $context
179
-                );
180
-            }
181
-            // update status
182
-            parent::set('STS_ID', $new_STS_ID, $use_default);
183
-            $this->_update_if_canceled_or_declined($new_STS_ID, $old_STS_ID, $context);
184
-            if($this->statusChangeUpdatesTransaction($context)) {
185
-                $this->updateTransactionAfterStatusChange();
186
-            }
187
-            do_action('AHEE__EE_Registration__set_status__after_update', $this, $old_STS_ID, $new_STS_ID, $context);
188
-            return true;
189
-        }
190
-        //even though the old value matches the new value, it's still good to
191
-        //allow the parent set method to have a say
192
-        parent::set('STS_ID', $new_STS_ID, $use_default);
193
-        return true;
194
-    }
195
-
196
-
197
-    /**
198
-     * update REGs and TXN when cancelled or declined registrations involved
199
-     *
200
-     * @param string       $new_STS_ID
201
-     * @param string       $old_STS_ID
202
-     * @param Context|null $context
203
-     * @throws EE_Error
204
-     * @throws InvalidArgumentException
205
-     * @throws InvalidDataTypeException
206
-     * @throws InvalidInterfaceException
207
-     * @throws ReflectionException
208
-     */
209
-    private function _update_if_canceled_or_declined($new_STS_ID, $old_STS_ID, Context $context = null)
210
-    {
211
-        // these reg statuses should not be considered in any calculations involving monies owing
212
-        $closed_reg_statuses = EEM_Registration::closed_reg_statuses();
213
-        // true if registration has been cancelled or declined
214
-        $this->updateIfCanceled(
215
-            $closed_reg_statuses,
216
-            $new_STS_ID,
217
-            $old_STS_ID,
218
-            $context
219
-        );
220
-        $this->updateIfDeclined(
221
-            $closed_reg_statuses,
222
-            $new_STS_ID,
223
-            $old_STS_ID,
224
-            $context
225
-        );
226
-    }
227
-
228
-
229
-    /**
230
-     * update REGs and TXN when cancelled or declined registrations involved
231
-     *
232
-     * @param array        $closed_reg_statuses
233
-     * @param string       $new_STS_ID
234
-     * @param string       $old_STS_ID
235
-     * @param Context|null $context
236
-     * @throws EE_Error
237
-     * @throws InvalidArgumentException
238
-     * @throws InvalidDataTypeException
239
-     * @throws InvalidInterfaceException
240
-     * @throws ReflectionException
241
-     */
242
-    private function updateIfCanceled(array $closed_reg_statuses, $new_STS_ID, $old_STS_ID, Context $context = null)
243
-    {
244
-        // true if registration has been cancelled or declined
245
-        if (in_array($new_STS_ID, $closed_reg_statuses, true)
246
-            && ! in_array($old_STS_ID, $closed_reg_statuses, true)
247
-        ) {
248
-            /** @type EE_Registration_Processor $registration_processor */
249
-            $registration_processor = EE_Registry::instance()->load_class('Registration_Processor');
250
-            /** @type EE_Transaction_Processor $transaction_processor */
251
-            $transaction_processor = EE_Registry::instance()->load_class('Transaction_Processor');
252
-            // cancelled or declined registration
253
-            $registration_processor->update_registration_after_being_canceled_or_declined(
254
-                $this,
255
-                $closed_reg_statuses
256
-            );
257
-            $transaction_processor->update_transaction_after_canceled_or_declined_registration(
258
-                $this,
259
-                $closed_reg_statuses,
260
-                false
261
-            );
262
-            do_action(
263
-                'AHEE__EE_Registration__set_status__canceled_or_declined',
264
-                $this,
265
-                $old_STS_ID,
266
-                $new_STS_ID,
267
-                $context
268
-            );
269
-            return;
270
-        }
271
-    }
272
-
273
-
274
-    /**
275
-     * update REGs and TXN when cancelled or declined registrations involved
276
-     *
277
-     * @param array        $closed_reg_statuses
278
-     * @param string       $new_STS_ID
279
-     * @param string       $old_STS_ID
280
-     * @param Context|null $context
281
-     * @throws EE_Error
282
-     * @throws InvalidArgumentException
283
-     * @throws InvalidDataTypeException
284
-     * @throws InvalidInterfaceException
285
-     * @throws ReflectionException
286
-     */
287
-    private function updateIfDeclined(array $closed_reg_statuses, $new_STS_ID, $old_STS_ID, Context $context = null)
288
-    {
289
-        // true if reinstating cancelled or declined registration
290
-        if (in_array($old_STS_ID, $closed_reg_statuses, true)
291
-            && ! in_array($new_STS_ID, $closed_reg_statuses, true)
292
-        ) {
293
-            /** @type EE_Registration_Processor $registration_processor */
294
-            $registration_processor = EE_Registry::instance()->load_class('Registration_Processor');
295
-            /** @type EE_Transaction_Processor $transaction_processor */
296
-            $transaction_processor = EE_Registry::instance()->load_class('Transaction_Processor');
297
-            // reinstating cancelled or declined registration
298
-            $registration_processor->update_canceled_or_declined_registration_after_being_reinstated(
299
-                $this,
300
-                $closed_reg_statuses
301
-            );
302
-            $transaction_processor->update_transaction_after_reinstating_canceled_registration(
303
-                $this,
304
-                $closed_reg_statuses,
305
-                false
306
-            );
307
-            do_action(
308
-                'AHEE__EE_Registration__set_status__after_reinstated',
309
-                $this,
310
-                $old_STS_ID,
311
-                $new_STS_ID,
312
-                $context
313
-            );
314
-        }
315
-    }
316
-
317
-
318
-    /**
319
-     * @param Context|null $context
320
-     * @return bool
321
-     */
322
-    private function statusChangeUpdatesTransaction(Context $context = null)
323
-    {
324
-        $contexts_that_do_not_update_transaction = (array) apply_filters(
325
-            'AHEE__EE_Registration__statusChangeUpdatesTransaction__contexts_that_do_not_update_transaction',
326
-            array('spco_reg_step_attendee_information_process_registrations'),
327
-            $context,
328
-            $this
329
-        );
330
-        return ! (
331
-            $context instanceof Context
332
-            && in_array($context->slug(), $contexts_that_do_not_update_transaction, true)
333
-        );
334
-    }
335
-
336
-
337
-    /**
338
-     * @throws EE_Error
339
-     * @throws EntityNotFoundException
340
-     * @throws InvalidArgumentException
341
-     * @throws InvalidDataTypeException
342
-     * @throws InvalidInterfaceException
343
-     * @throws ReflectionException
344
-     * @throws RuntimeException
345
-     */
346
-    private function updateTransactionAfterStatusChange()
347
-    {
348
-        /** @type EE_Transaction_Payments $transaction_payments */
349
-        $transaction_payments = EE_Registry::instance()->load_class('Transaction_Payments');
350
-        $transaction_payments->recalculate_transaction_total($this->transaction(), false);
351
-        $this->transaction()->update_status_based_on_total_paid(true);
352
-    }
353
-
354
-
355
-    /**
356
-     *        get Status ID
357
-     */
358
-    public function status_ID()
359
-    {
360
-        return $this->get('STS_ID');
361
-    }
362
-
363
-
364
-    /**
365
-     * increments this registration's related ticket sold and corresponding datetime sold values
366
-     *
367
-     * @return void
368
-     * @throws EE_Error
369
-     * @throws EntityNotFoundException
370
-     */
371
-    private function _reserve_registration_space()
372
-    {
373
-        // reserved ticket and datetime counts will be decremented as sold counts are incremented
374
-        // so stop tracking that this reg has a ticket reserved
375
-        $this->release_reserved_ticket();
376
-        $ticket = $this->ticket();
377
-        $ticket->increase_sold();
378
-        $ticket->save();
379
-        // possibly set event status to sold out
380
-        $this->event()->perform_sold_out_status_check();
381
-    }
382
-
383
-
384
-    /**
385
-     * Gets the ticket this registration is for
386
-     *
387
-     * @param boolean $include_archived whether to include archived tickets or not.
388
-     *
389
-     * @return EE_Ticket|EE_Base_Class
390
-     * @throws EE_Error
391
-     */
392
-    public function ticket($include_archived = true)
393
-    {
394
-        $query_params = array();
395
-        if ($include_archived) {
396
-            $query_params['default_where_conditions'] = 'none';
397
-        }
398
-        return $this->get_first_related('Ticket', $query_params);
399
-    }
400
-
401
-
402
-    /**
403
-     * Gets the event this registration is for
404
-     *
405
-     * @return EE_Event
406
-     * @throws EE_Error
407
-     * @throws EntityNotFoundException
408
-     */
409
-    public function event()
410
-    {
411
-        $event = $this->get_first_related('Event');
412
-        if (! $event instanceof \EE_Event) {
413
-            throw new EntityNotFoundException('Event ID', $this->event_ID());
414
-        }
415
-        return $event;
416
-    }
417
-
418
-
419
-    /**
420
-     * Gets the "author" of the registration.  Note that for the purposes of registrations, the author will correspond
421
-     * with the author of the event this registration is for.
422
-     *
423
-     * @since 4.5.0
424
-     * @return int
425
-     * @throws EE_Error
426
-     * @throws EntityNotFoundException
427
-     */
428
-    public function wp_user()
429
-    {
430
-        $event = $this->event();
431
-        if ($event instanceof EE_Event) {
432
-            return $event->wp_user();
433
-        }
434
-        return 0;
435
-    }
436
-
437
-
438
-    /**
439
-     * decrements (subtracts) this registration's related ticket sold and corresponding datetime sold values
440
-     *
441
-     * @return void
442
-     * @throws EE_Error
443
-     */
444
-    private function _release_registration_space()
445
-    {
446
-        $ticket = $this->ticket();
447
-        $ticket->decrease_sold();
448
-        $ticket->save();
449
-    }
450
-
451
-
452
-    /**
453
-     * tracks this registration's ticket reservation in extra meta
454
-     * and can increment related ticket reserved and corresponding datetime reserved values
455
-     *
456
-     * @param bool $update_ticket if true, will increment ticket and datetime reserved count
457
-     *
458
-     * @return void
459
-     * @throws EE_Error
460
-     */
461
-    public function reserve_ticket($update_ticket = false)
462
-    {
463
-        if ($this->get_extra_meta(EE_Registration::HAS_RESERVED_TICKET_KEY, true, false) === false) {
464
-            // PLZ NOTE: although checking $update_ticket first would be more efficient,
465
-            // we NEED to ALWAYS call update_extra_meta(), which is why that is done first
466
-            if ($this->update_extra_meta(EE_Registration::HAS_RESERVED_TICKET_KEY, true, false) && $update_ticket) {
467
-                $ticket = $this->ticket();
468
-                $ticket->increase_reserved();
469
-                $ticket->save();
470
-            }
471
-        }
472
-    }
473
-
474
-
475
-    /**
476
-     * stops tracking this registration's ticket reservation in extra meta
477
-     * decrements (subtracts) related ticket reserved and corresponding datetime reserved values
478
-     *
479
-     * @param bool $update_ticket if true, will decrement ticket and datetime reserved count
480
-     *
481
-     * @return void
482
-     * @throws EE_Error
483
-     */
484
-    public function release_reserved_ticket($update_ticket = false)
485
-    {
486
-        if ($this->get_extra_meta(EE_Registration::HAS_RESERVED_TICKET_KEY, true, false) !== false) {
487
-            // PLZ NOTE: although checking $update_ticket first would be more efficient,
488
-            // we NEED to ALWAYS call delete_extra_meta(), which is why that is done first
489
-            if ($this->delete_extra_meta(EE_Registration::HAS_RESERVED_TICKET_KEY) && $update_ticket) {
490
-                $ticket = $this->ticket();
491
-                $ticket->decrease_reserved();
492
-                $ticket->save();
493
-            }
494
-        }
495
-    }
496
-
497
-
498
-    /**
499
-     * Set Attendee ID
500
-     *
501
-     * @param        int $ATT_ID Attendee ID
502
-     * @throws EE_Error
503
-     * @throws RuntimeException
504
-     */
505
-    public function set_attendee_id($ATT_ID = 0)
506
-    {
507
-        $this->set('ATT_ID', $ATT_ID);
508
-    }
509
-
510
-
511
-    /**
512
-     *        Set Transaction ID
513
-     *
514
-     * @param        int $TXN_ID Transaction ID
515
-     * @throws EE_Error
516
-     * @throws RuntimeException
517
-     */
518
-    public function set_transaction_id($TXN_ID = 0)
519
-    {
520
-        $this->set('TXN_ID', $TXN_ID);
521
-    }
522
-
523
-
524
-    /**
525
-     *        Set Session
526
-     *
527
-     * @param    string $REG_session PHP Session ID
528
-     * @throws EE_Error
529
-     * @throws RuntimeException
530
-     */
531
-    public function set_session($REG_session = '')
532
-    {
533
-        $this->set('REG_session', $REG_session);
534
-    }
535
-
536
-
537
-    /**
538
-     *        Set Registration URL Link
539
-     *
540
-     * @param    string $REG_url_link Registration URL Link
541
-     * @throws EE_Error
542
-     * @throws RuntimeException
543
-     */
544
-    public function set_reg_url_link($REG_url_link = '')
545
-    {
546
-        $this->set('REG_url_link', $REG_url_link);
547
-    }
548
-
549
-
550
-    /**
551
-     *        Set Attendee Counter
552
-     *
553
-     * @param        int $REG_count Primary Attendee
554
-     * @throws EE_Error
555
-     * @throws RuntimeException
556
-     */
557
-    public function set_count($REG_count = 1)
558
-    {
559
-        $this->set('REG_count', $REG_count);
560
-    }
561
-
562
-
563
-    /**
564
-     *        Set Group Size
565
-     *
566
-     * @param        boolean $REG_group_size Group Registration
567
-     * @throws EE_Error
568
-     * @throws RuntimeException
569
-     */
570
-    public function set_group_size($REG_group_size = false)
571
-    {
572
-        $this->set('REG_group_size', $REG_group_size);
573
-    }
574
-
575
-
576
-    /**
577
-     *    is_not_approved -  convenience method that returns TRUE if REG status ID ==
578
-     *    EEM_Registration::status_id_not_approved
579
-     *
580
-     * @return        boolean
581
-     */
582
-    public function is_not_approved()
583
-    {
584
-        return $this->status_ID() == EEM_Registration::status_id_not_approved ? true : false;
585
-    }
586
-
587
-
588
-    /**
589
-     *    is_pending_payment -  convenience method that returns TRUE if REG status ID ==
590
-     *    EEM_Registration::status_id_pending_payment
591
-     *
592
-     * @return        boolean
593
-     */
594
-    public function is_pending_payment()
595
-    {
596
-        return $this->status_ID() == EEM_Registration::status_id_pending_payment ? true : false;
597
-    }
598
-
599
-
600
-    /**
601
-     *    is_approved -  convenience method that returns TRUE if REG status ID == EEM_Registration::status_id_approved
602
-     *
603
-     * @return        boolean
604
-     */
605
-    public function is_approved()
606
-    {
607
-        return $this->status_ID() == EEM_Registration::status_id_approved ? true : false;
608
-    }
609
-
610
-
611
-    /**
612
-     *    is_cancelled -  convenience method that returns TRUE if REG status ID == EEM_Registration::status_id_cancelled
613
-     *
614
-     * @return        boolean
615
-     */
616
-    public function is_cancelled()
617
-    {
618
-        return $this->status_ID() == EEM_Registration::status_id_cancelled ? true : false;
619
-    }
620
-
621
-
622
-    /**
623
-     *    is_declined -  convenience method that returns TRUE if REG status ID == EEM_Registration::status_id_declined
624
-     *
625
-     * @return        boolean
626
-     */
627
-    public function is_declined()
628
-    {
629
-        return $this->status_ID() == EEM_Registration::status_id_declined ? true : false;
630
-    }
631
-
632
-
633
-    /**
634
-     *    is_incomplete -  convenience method that returns TRUE if REG status ID ==
635
-     *    EEM_Registration::status_id_incomplete
636
-     *
637
-     * @return        boolean
638
-     */
639
-    public function is_incomplete()
640
-    {
641
-        return $this->status_ID() == EEM_Registration::status_id_incomplete ? true : false;
642
-    }
643
-
644
-
645
-    /**
646
-     *        Set Registration Date
647
-     *
648
-     * @param        mixed ( int or string ) $REG_date Registration Date - Unix timestamp or string representation of
649
-     *                                                 Date
650
-     * @throws EE_Error
651
-     * @throws RuntimeException
652
-     */
653
-    public function set_reg_date($REG_date = false)
654
-    {
655
-        $this->set('REG_date', $REG_date);
656
-    }
657
-
658
-
659
-    /**
660
-     *    Set final price owing for this registration after all ticket/price modifications
661
-     *
662
-     * @access    public
663
-     * @param    float $REG_final_price
664
-     * @throws EE_Error
665
-     * @throws RuntimeException
666
-     */
667
-    public function set_final_price($REG_final_price = 0.00)
668
-    {
669
-        $this->set('REG_final_price', $REG_final_price);
670
-    }
671
-
672
-
673
-    /**
674
-     *    Set amount paid towards this registration's final price
675
-     *
676
-     * @access    public
677
-     * @param    float $REG_paid
678
-     * @throws EE_Error
679
-     * @throws RuntimeException
680
-     */
681
-    public function set_paid($REG_paid = 0.00)
682
-    {
683
-        $this->set('REG_paid', $REG_paid);
684
-    }
685
-
686
-
687
-    /**
688
-     *        Attendee Is Going
689
-     *
690
-     * @param        boolean $REG_att_is_going Attendee Is Going
691
-     * @throws EE_Error
692
-     * @throws RuntimeException
693
-     */
694
-    public function set_att_is_going($REG_att_is_going = false)
695
-    {
696
-        $this->set('REG_att_is_going', $REG_att_is_going);
697
-    }
698
-
699
-
700
-    /**
701
-     * Gets the related attendee
702
-     *
703
-     * @return EE_Attendee
704
-     * @throws EE_Error
705
-     */
706
-    public function attendee()
707
-    {
708
-        return $this->get_first_related('Attendee');
709
-    }
710
-
711
-
712
-    /**
713
-     *        get Event ID
714
-     */
715
-    public function event_ID()
716
-    {
717
-        return $this->get('EVT_ID');
718
-    }
719
-
720
-
721
-    /**
722
-     *        get Event ID
723
-     */
724
-    public function event_name()
725
-    {
726
-        $event = $this->event_obj();
727
-        if ($event) {
728
-            return $event->name();
729
-        } else {
730
-            return null;
731
-        }
732
-    }
733
-
734
-
735
-    /**
736
-     * Fetches the event this registration is for
737
-     *
738
-     * @return EE_Event
739
-     * @throws EE_Error
740
-     */
741
-    public function event_obj()
742
-    {
743
-        return $this->get_first_related('Event');
744
-    }
745
-
746
-
747
-    /**
748
-     *        get Attendee ID
749
-     */
750
-    public function attendee_ID()
751
-    {
752
-        return $this->get('ATT_ID');
753
-    }
754
-
755
-
756
-    /**
757
-     *        get PHP Session ID
758
-     */
759
-    public function session_ID()
760
-    {
761
-        return $this->get('REG_session');
762
-    }
763
-
764
-
765
-    /**
766
-     * Gets the string which represents the URL trigger for the receipt template in the message template system.
767
-     *
768
-     * @param string $messenger 'pdf' or 'html'.  Default 'html'.
769
-     * @return string
770
-     */
771
-    public function receipt_url($messenger = 'html')
772
-    {
773
-
774
-        /**
775
-         * The below will be deprecated one version after this.  We check first if there is a custom receipt template
776
-         * already in use on old system.  If there is then we just return the standard url for it.
777
-         *
778
-         * @since 4.5.0
779
-         */
780
-        $template_relative_path = 'modules/gateways/Invoice/lib/templates/receipt_body.template.php';
781
-        $has_custom             = EEH_Template::locate_template(
782
-            $template_relative_path,
783
-            array(),
784
-            true,
785
-            true,
786
-            true
787
-        );
788
-
789
-        if ($has_custom) {
790
-            return add_query_arg(array('receipt' => 'true'), $this->invoice_url('launch'));
791
-        }
792
-        return apply_filters('FHEE__EE_Registration__receipt_url__receipt_url', '', $this, $messenger, 'receipt');
793
-    }
794
-
795
-
796
-    /**
797
-     * Gets the string which represents the URL trigger for the invoice template in the message template system.
798
-     *
799
-     * @param string $messenger 'pdf' or 'html'.  Default 'html'.
800
-     * @return string
801
-     * @throws EE_Error
802
-     */
803
-    public function invoice_url($messenger = 'html')
804
-    {
805
-        /**
806
-         * The below will be deprecated one version after this.  We check first if there is a custom invoice template
807
-         * already in use on old system.  If there is then we just return the standard url for it.
808
-         *
809
-         * @since 4.5.0
810
-         */
811
-        $template_relative_path = 'modules/gateways/Invoice/lib/templates/invoice_body.template.php';
812
-        $has_custom             = EEH_Template::locate_template(
813
-            $template_relative_path,
814
-            array(),
815
-            true,
816
-            true,
817
-            true
818
-        );
819
-
820
-        if ($has_custom) {
821
-            if ($messenger == 'html') {
822
-                return $this->invoice_url('launch');
823
-            }
824
-            $route = $messenger == 'download' || $messenger == 'pdf' ? 'download_invoice' : 'launch_invoice';
825
-
826
-            $query_args = array('ee' => $route, 'id' => $this->reg_url_link());
827
-            if ($messenger == 'html') {
828
-                $query_args['html'] = true;
829
-            }
830
-            return add_query_arg($query_args, get_permalink(EE_Registry::instance()->CFG->core->thank_you_page_id));
831
-        }
832
-        return apply_filters('FHEE__EE_Registration__invoice_url__invoice_url', '', $this, $messenger, 'invoice');
833
-    }
834
-
835
-
836
-    /**
837
-     * get Registration URL Link
838
-     *
839
-     * @access public
840
-     * @return string
841
-     * @throws EE_Error
842
-     */
843
-    public function reg_url_link()
844
-    {
845
-        return (string) $this->get('REG_url_link');
846
-    }
847
-
848
-
849
-    /**
850
-     * Echoes out invoice_url()
851
-     *
852
-     * @param string $type 'download','launch', or 'html' (default is 'launch')
853
-     * @return void
854
-     * @throws EE_Error
855
-     */
856
-    public function e_invoice_url($type = 'launch')
857
-    {
858
-        echo $this->invoice_url($type);
859
-    }
860
-
861
-
862
-    /**
863
-     * Echoes out payment_overview_url
864
-     */
865
-    public function e_payment_overview_url()
866
-    {
867
-        echo $this->payment_overview_url();
868
-    }
869
-
870
-
871
-    /**
872
-     * Gets the URL of the thank you page with this registration REG_url_link added as
873
-     * a query parameter
874
-     *
875
-     * @param bool $clear_session Set to true when you want to clear the session on revisiting the
876
-     *                            payment overview url.
877
-     * @return string
878
-     * @throws EE_Error
879
-     */
880
-    public function payment_overview_url($clear_session = false)
881
-    {
882
-        return add_query_arg(array(
883
-            'e_reg_url_link' => $this->reg_url_link(),
884
-            'step'           => 'payment_options',
885
-            'revisit'        => true,
886
-            'clear_session' => (bool) $clear_session
887
-        ), EE_Registry::instance()->CFG->core->reg_page_url());
888
-    }
889
-
890
-
891
-    /**
892
-     * Gets the URL of the thank you page with this registration REG_url_link added as
893
-     * a query parameter
894
-     *
895
-     * @return string
896
-     * @throws EE_Error
897
-     */
898
-    public function edit_attendee_information_url()
899
-    {
900
-        return add_query_arg(array(
901
-            'e_reg_url_link' => $this->reg_url_link(),
902
-            'step'           => 'attendee_information',
903
-            'revisit'        => true,
904
-        ), EE_Registry::instance()->CFG->core->reg_page_url());
905
-    }
906
-
907
-
908
-    /**
909
-     * Simply generates and returns the appropriate admin_url link to edit this registration
910
-     *
911
-     * @return string
912
-     * @throws EE_Error
913
-     */
914
-    public function get_admin_edit_url()
915
-    {
916
-        return EEH_URL::add_query_args_and_nonce(array(
917
-            'page'    => 'espresso_registrations',
918
-            'action'  => 'view_registration',
919
-            '_REG_ID' => $this->ID(),
920
-        ), admin_url('admin.php'));
921
-    }
922
-
923
-
924
-    /**
925
-     *    is_primary_registrant?
926
-     */
927
-    public function is_primary_registrant()
928
-    {
929
-        return $this->get('REG_count') == 1 ? true : false;
930
-    }
931
-
932
-
933
-    /**
934
-     * This returns the primary registration object for this registration group (which may be this object).
935
-     *
936
-     * @return EE_Registration
937
-     * @throws EE_Error
938
-     */
939
-    public function get_primary_registration()
940
-    {
941
-        if ($this->is_primary_registrant()) {
942
-            return $this;
943
-        }
944
-
945
-        //k reg_count !== 1 so let's get the EE_Registration object matching this txn_id and reg_count == 1
946
-        /** @var EE_Registration $primary_registrant */
947
-        $primary_registrant = EEM_Registration::instance()->get_one(array(
948
-            array(
949
-                'TXN_ID'    => $this->transaction_ID(),
950
-                'REG_count' => 1,
951
-            ),
952
-        ));
953
-        return $primary_registrant;
954
-    }
955
-
956
-
957
-    /**
958
-     *        get  Attendee Number
959
-     *
960
-     * @access        public
961
-     */
962
-    public function count()
963
-    {
964
-        return $this->get('REG_count');
965
-    }
966
-
967
-
968
-    /**
969
-     *        get Group Size
970
-     */
971
-    public function group_size()
972
-    {
973
-        return $this->get('REG_group_size');
974
-    }
975
-
976
-
977
-    /**
978
-     *        get Registration Date
979
-     */
980
-    public function date()
981
-    {
982
-        return $this->get('REG_date');
983
-    }
984
-
985
-
986
-    /**
987
-     * gets a pretty date
988
-     *
989
-     * @param string $date_format
990
-     * @param string $time_format
991
-     * @return string
992
-     * @throws EE_Error
993
-     */
994
-    public function pretty_date($date_format = null, $time_format = null)
995
-    {
996
-        return $this->get_datetime('REG_date', $date_format, $time_format);
997
-    }
998
-
999
-
1000
-    /**
1001
-     * final_price
1002
-     * the registration's share of the transaction total, so that the
1003
-     * sum of all the transaction's REG_final_prices equal the transaction's total
1004
-     *
1005
-     * @return float
1006
-     * @throws EE_Error
1007
-     */
1008
-    public function final_price()
1009
-    {
1010
-        return $this->get('REG_final_price');
1011
-    }
1012
-
1013
-
1014
-    /**
1015
-     * pretty_final_price
1016
-     *  final price as formatted string, with correct decimal places and currency symbol
1017
-     *
1018
-     * @return string
1019
-     * @throws EE_Error
1020
-     */
1021
-    public function pretty_final_price()
1022
-    {
1023
-        return $this->get_pretty('REG_final_price');
1024
-    }
1025
-
1026
-
1027
-    /**
1028
-     * get paid (yeah)
1029
-     *
1030
-     * @return float
1031
-     * @throws EE_Error
1032
-     */
1033
-    public function paid()
1034
-    {
1035
-        return $this->get('REG_paid');
1036
-    }
1037
-
1038
-
1039
-    /**
1040
-     * pretty_paid
1041
-     *
1042
-     * @return float
1043
-     * @throws EE_Error
1044
-     */
1045
-    public function pretty_paid()
1046
-    {
1047
-        return $this->get_pretty('REG_paid');
1048
-    }
1049
-
1050
-
1051
-    /**
1052
-     * owes_monies_and_can_pay
1053
-     * whether or not this registration has monies owing and it's' status allows payment
1054
-     *
1055
-     * @param array $requires_payment
1056
-     * @return bool
1057
-     * @throws EE_Error
1058
-     */
1059
-    public function owes_monies_and_can_pay($requires_payment = array())
1060
-    {
1061
-        // these reg statuses require payment (if event is not free)
1062
-        $requires_payment = ! empty($requires_payment)
1063
-            ? $requires_payment
1064
-            : EEM_Registration::reg_statuses_that_allow_payment();
1065
-        if (in_array($this->status_ID(), $requires_payment) &&
1066
-            $this->final_price() != 0 &&
1067
-            $this->final_price() != $this->paid()
1068
-        ) {
1069
-            return true;
1070
-        } else {
1071
-            return false;
1072
-        }
1073
-    }
1074
-
1075
-
1076
-    /**
1077
-     * Prints out the return value of $this->pretty_status()
1078
-     *
1079
-     * @param bool $show_icons
1080
-     * @return void
1081
-     * @throws EE_Error
1082
-     */
1083
-    public function e_pretty_status($show_icons = false)
1084
-    {
1085
-        echo $this->pretty_status($show_icons);
1086
-    }
1087
-
1088
-
1089
-    /**
1090
-     * Returns a nice version of the status for displaying to customers
1091
-     *
1092
-     * @param bool $show_icons
1093
-     * @return string
1094
-     * @throws EE_Error
1095
-     */
1096
-    public function pretty_status($show_icons = false)
1097
-    {
1098
-        $status = EEM_Status::instance()->localized_status(
1099
-            array($this->status_ID() => esc_html__('unknown', 'event_espresso')),
1100
-            false,
1101
-            'sentence'
1102
-        );
1103
-        $icon   = '';
1104
-        switch ($this->status_ID()) {
1105
-            case EEM_Registration::status_id_approved:
1106
-                $icon = $show_icons
1107
-                    ? '<span class="dashicons dashicons-star-filled ee-icon-size-16 green-text"></span>'
1108
-                    : '';
1109
-                break;
1110
-            case EEM_Registration::status_id_pending_payment:
1111
-                $icon = $show_icons
1112
-                    ? '<span class="dashicons dashicons-star-half ee-icon-size-16 orange-text"></span>'
1113
-                    : '';
1114
-                break;
1115
-            case EEM_Registration::status_id_not_approved:
1116
-                $icon = $show_icons
1117
-                    ? '<span class="dashicons dashicons-marker ee-icon-size-16 orange-text"></span>'
1118
-                    : '';
1119
-                break;
1120
-            case EEM_Registration::status_id_cancelled:
1121
-                $icon = $show_icons
1122
-                    ? '<span class="dashicons dashicons-no ee-icon-size-16 lt-grey-text"></span>'
1123
-                    : '';
1124
-                break;
1125
-            case EEM_Registration::status_id_incomplete:
1126
-                $icon = $show_icons
1127
-                    ? '<span class="dashicons dashicons-no ee-icon-size-16 lt-orange-text"></span>'
1128
-                    : '';
1129
-                break;
1130
-            case EEM_Registration::status_id_declined:
1131
-                $icon = $show_icons
1132
-                    ? '<span class="dashicons dashicons-no ee-icon-size-16 red-text"></span>'
1133
-                    : '';
1134
-                break;
1135
-            case EEM_Registration::status_id_wait_list:
1136
-                $icon = $show_icons
1137
-                    ? '<span class="dashicons dashicons-clipboard ee-icon-size-16 purple-text"></span>'
1138
-                    : '';
1139
-                break;
1140
-        }
1141
-        return $icon . $status[$this->status_ID()];
1142
-    }
1143
-
1144
-
1145
-    /**
1146
-     *        get Attendee Is Going
1147
-     */
1148
-    public function att_is_going()
1149
-    {
1150
-        return $this->get('REG_att_is_going');
1151
-    }
1152
-
1153
-
1154
-    /**
1155
-     * Gets related answers
1156
-     *
1157
-     * @param array $query_params like EEM_Base::get_all
1158
-     * @return EE_Answer[]
1159
-     * @throws EE_Error
1160
-     */
1161
-    public function answers($query_params = null)
1162
-    {
1163
-        return $this->get_many_related('Answer', $query_params);
1164
-    }
1165
-
1166
-
1167
-    /**
1168
-     * Gets the registration's answer value to the specified question
1169
-     * (either the question's ID or a question object)
1170
-     *
1171
-     * @param EE_Question|int $question
1172
-     * @param bool            $pretty_value
1173
-     * @return array|string if pretty_value= true, the result will always be a string
1174
-     * (because the answer might be an array of answer values, so passing pretty_value=true
1175
-     * will convert it into some kind of string)
1176
-     * @throws EE_Error
1177
-     */
1178
-    public function answer_value_to_question($question, $pretty_value = true)
1179
-    {
1180
-        $question_id = EEM_Question::instance()->ensure_is_ID($question);
1181
-        return EEM_Answer::instance()->get_answer_value_to_question($this, $question_id, $pretty_value);
1182
-    }
1183
-
1184
-
1185
-    /**
1186
-     * question_groups
1187
-     * returns an array of EE_Question_Group objects for this registration
1188
-     *
1189
-     * @return EE_Question_Group[]
1190
-     * @throws EE_Error
1191
-     * @throws EntityNotFoundException
1192
-     */
1193
-    public function question_groups()
1194
-    {
1195
-        $question_groups = array();
1196
-        if ($this->event() instanceof EE_Event) {
1197
-            $question_groups = $this->event()->question_groups(
1198
-                array(
1199
-                    array(
1200
-                        'Event_Question_Group.EQG_primary' => $this->count() == 1 ? true : false,
1201
-                    ),
1202
-                    'order_by' => array('QSG_order' => 'ASC'),
1203
-                )
1204
-            );
1205
-        }
1206
-        return $question_groups;
1207
-    }
1208
-
1209
-
1210
-    /**
1211
-     * count_question_groups
1212
-     * returns a count of the number of EE_Question_Group objects for this registration
1213
-     *
1214
-     * @return int
1215
-     * @throws EE_Error
1216
-     * @throws EntityNotFoundException
1217
-     */
1218
-    public function count_question_groups()
1219
-    {
1220
-        $qg_count = 0;
1221
-        if ($this->event() instanceof EE_Event) {
1222
-            $qg_count = $this->event()->count_related(
1223
-                'Question_Group',
1224
-                array(
1225
-                    array(
1226
-                        'Event_Question_Group.EQG_primary' => $this->count() == 1 ? true : false,
1227
-                    ),
1228
-                )
1229
-            );
1230
-        }
1231
-        return $qg_count;
1232
-    }
1233
-
1234
-
1235
-    /**
1236
-     * Returns the registration date in the 'standard' string format
1237
-     * (function may be improved in the future to allow for different formats and timezones)
1238
-     *
1239
-     * @return string
1240
-     * @throws EE_Error
1241
-     */
1242
-    public function reg_date()
1243
-    {
1244
-        return $this->get_datetime('REG_date');
1245
-    }
1246
-
1247
-
1248
-    /**
1249
-     * Gets the datetime-ticket for this registration (ie, it can be used to isolate
1250
-     * the ticket this registration purchased, or the datetime they have registered
1251
-     * to attend)
1252
-     *
1253
-     * @return EE_Datetime_Ticket
1254
-     * @throws EE_Error
1255
-     */
1256
-    public function datetime_ticket()
1257
-    {
1258
-        return $this->get_first_related('Datetime_Ticket');
1259
-    }
1260
-
1261
-
1262
-    /**
1263
-     * Sets the registration's datetime_ticket.
1264
-     *
1265
-     * @param EE_Datetime_Ticket $datetime_ticket
1266
-     * @return EE_Datetime_Ticket
1267
-     * @throws EE_Error
1268
-     */
1269
-    public function set_datetime_ticket($datetime_ticket)
1270
-    {
1271
-        return $this->_add_relation_to($datetime_ticket, 'Datetime_Ticket');
1272
-    }
1273
-
1274
-    /**
1275
-     * Gets deleted
1276
-     *
1277
-     * @return bool
1278
-     * @throws EE_Error
1279
-     */
1280
-    public function deleted()
1281
-    {
1282
-        return $this->get('REG_deleted');
1283
-    }
1284
-
1285
-    /**
1286
-     * Sets deleted
1287
-     *
1288
-     * @param boolean $deleted
1289
-     * @return bool
1290
-     * @throws EE_Error
1291
-     * @throws RuntimeException
1292
-     */
1293
-    public function set_deleted($deleted)
1294
-    {
1295
-        if ($deleted) {
1296
-            $this->delete();
1297
-        } else {
1298
-            $this->restore();
1299
-        }
1300
-    }
1301
-
1302
-
1303
-    /**
1304
-     * Get the status object of this object
1305
-     *
1306
-     * @return EE_Status
1307
-     * @throws EE_Error
1308
-     */
1309
-    public function status_obj()
1310
-    {
1311
-        return $this->get_first_related('Status');
1312
-    }
1313
-
1314
-
1315
-    /**
1316
-     * Returns the number of times this registration has checked into any of the datetimes
1317
-     * its available for
1318
-     *
1319
-     * @return int
1320
-     * @throws EE_Error
1321
-     */
1322
-    public function count_checkins()
1323
-    {
1324
-        return $this->get_model()->count_related($this, 'Checkin');
1325
-    }
1326
-
1327
-
1328
-    /**
1329
-     * Returns the number of current Check-ins this registration is checked into for any of the datetimes the
1330
-     * registration is for.  Note, this is ONLY checked in (does not include checkedout)
1331
-     *
1332
-     * @return int
1333
-     * @throws EE_Error
1334
-     */
1335
-    public function count_checkins_not_checkedout()
1336
-    {
1337
-        return $this->get_model()->count_related($this, 'Checkin', array(array('CHK_in' => 1)));
1338
-    }
1339
-
1340
-
1341
-    /**
1342
-     * The purpose of this method is simply to check whether this registration can checkin to the given datetime.
1343
-     *
1344
-     * @param int | EE_Datetime $DTT_OR_ID      The datetime the registration is being checked against
1345
-     * @param bool              $check_approved This is used to indicate whether the caller wants can_checkin to also
1346
-     *                                          consider registration status as well as datetime access.
1347
-     * @return bool
1348
-     * @throws EE_Error
1349
-     */
1350
-    public function can_checkin($DTT_OR_ID, $check_approved = true)
1351
-    {
1352
-        $DTT_ID = EEM_Datetime::instance()->ensure_is_ID($DTT_OR_ID);
1353
-
1354
-        //first check registration status
1355
-        if (($check_approved && ! $this->is_approved()) || ! $DTT_ID) {
1356
-            return false;
1357
-        }
1358
-        //is there a datetime ticket that matches this dtt_ID?
1359
-        if (! (EEM_Datetime_Ticket::instance()->exists(array(
1360
-            array(
1361
-                'TKT_ID' => $this->get('TKT_ID'),
1362
-                'DTT_ID' => $DTT_ID,
1363
-            ),
1364
-        )))
1365
-        ) {
1366
-            return false;
1367
-        }
1368
-
1369
-        //final check is against TKT_uses
1370
-        return $this->verify_can_checkin_against_TKT_uses($DTT_ID);
1371
-    }
1372
-
1373
-
1374
-    /**
1375
-     * This method verifies whether the user can checkin for the given datetime considering the max uses value set on
1376
-     * the ticket. To do this,  a query is done to get the count of the datetime records already checked into.  If the
1377
-     * datetime given does not have a check-in record and checking in for that datetime will exceed the allowed uses,
1378
-     * then return false.  Otherwise return true.
1379
-     *
1380
-     * @param int | EE_Datetime $DTT_OR_ID The datetime the registration is being checked against
1381
-     * @return bool true means can checkin.  false means cannot checkin.
1382
-     * @throws EE_Error
1383
-     */
1384
-    public function verify_can_checkin_against_TKT_uses($DTT_OR_ID)
1385
-    {
1386
-        $DTT_ID = EEM_Datetime::instance()->ensure_is_ID($DTT_OR_ID);
1387
-
1388
-        if (! $DTT_ID) {
1389
-            return false;
1390
-        }
1391
-
1392
-        $max_uses = $this->ticket() instanceof EE_Ticket ? $this->ticket()->uses() : EE_INF;
1393
-
1394
-        // if max uses is not set or equals infinity then return true cause its not a factor for whether user can
1395
-        // check-in or not.
1396
-        if (! $max_uses || $max_uses === EE_INF) {
1397
-            return true;
1398
-        }
1399
-
1400
-        //does this datetime have a checkin record?  If so, then the dtt count has already been verified so we can just
1401
-        //go ahead and toggle.
1402
-        if (EEM_Checkin::instance()->exists(array(array('REG_ID' => $this->ID(), 'DTT_ID' => $DTT_ID)))) {
1403
-            return true;
1404
-        }
1405
-
1406
-        //made it here so the last check is whether the number of checkins per unique datetime on this registration
1407
-        //disallows further check-ins.
1408
-        $count_unique_dtt_checkins = EEM_Checkin::instance()->count(array(
1409
-            array(
1410
-                'REG_ID' => $this->ID(),
1411
-                'CHK_in' => true,
1412
-            ),
1413
-        ), 'DTT_ID', true);
1414
-        // checkins have already reached their max number of uses
1415
-        // so registrant can NOT checkin
1416
-        if ($count_unique_dtt_checkins >= $max_uses) {
1417
-            EE_Error::add_error(
1418
-                esc_html__(
1419
-                    'Check-in denied because number of datetime uses for the ticket has been reached or exceeded.',
1420
-                    'event_espresso'
1421
-                ),
1422
-                __FILE__,
1423
-                __FUNCTION__,
1424
-                __LINE__
1425
-            );
1426
-            return false;
1427
-        }
1428
-        return true;
1429
-    }
1430
-
1431
-
1432
-    /**
1433
-     * toggle Check-in status for this registration
1434
-     * Check-ins are toggled in the following order:
1435
-     * never checked in -> checked in
1436
-     * checked in -> checked out
1437
-     * checked out -> checked in
1438
-     *
1439
-     * @param  int $DTT_ID  include specific datetime to toggle Check-in for.
1440
-     *                      If not included or null, then it is assumed latest datetime is being toggled.
1441
-     * @param bool $verify  If true then can_checkin() is used to verify whether the person
1442
-     *                      can be checked in or not.  Otherwise this forces change in checkin status.
1443
-     * @return bool|int     the chk_in status toggled to OR false if nothing got changed.
1444
-     * @throws EE_Error
1445
-     */
1446
-    public function toggle_checkin_status($DTT_ID = null, $verify = false)
1447
-    {
1448
-        if (empty($DTT_ID)) {
1449
-            $datetime = $this->get_latest_related_datetime();
1450
-            $DTT_ID   = $datetime instanceof EE_Datetime ? $datetime->ID() : 0;
1451
-            // verify the registration can checkin for the given DTT_ID
1452
-        } elseif (! $this->can_checkin($DTT_ID, $verify)) {
1453
-            EE_Error::add_error(
1454
-                sprintf(
1455
-                    esc_html__(
1456
-                        'The given registration (ID:%1$d) can not be checked in to the given DTT_ID (%2$d), because the registration does not have access',
1457
-                        'event_espresso'
1458
-                    ),
1459
-                    $this->ID(),
1460
-                    $DTT_ID
1461
-                ),
1462
-                __FILE__,
1463
-                __FUNCTION__,
1464
-                __LINE__
1465
-            );
1466
-            return false;
1467
-        }
1468
-        $status_paths = array(
1469
-            EE_Checkin::status_checked_never => EE_Checkin::status_checked_in,
1470
-            EE_Checkin::status_checked_in    => EE_Checkin::status_checked_out,
1471
-            EE_Checkin::status_checked_out   => EE_Checkin::status_checked_in,
1472
-        );
1473
-        //start by getting the current status so we know what status we'll be changing to.
1474
-        $cur_status = $this->check_in_status_for_datetime($DTT_ID, null);
1475
-        $status_to  = $status_paths[$cur_status];
1476
-        // database only records true for checked IN or false for checked OUT
1477
-        // no record ( null ) means checked in NEVER, but we obviously don't save that
1478
-        $new_status = $status_to === EE_Checkin::status_checked_in ? true : false;
1479
-        // add relation - note Check-ins are always creating new rows
1480
-        // because we are keeping track of Check-ins over time.
1481
-        // Eventually we'll probably want to show a list table
1482
-        // for the individual Check-ins so that they can be managed.
1483
-        $checkin = EE_Checkin::new_instance(array(
1484
-            'REG_ID' => $this->ID(),
1485
-            'DTT_ID' => $DTT_ID,
1486
-            'CHK_in' => $new_status,
1487
-        ));
1488
-        // if the record could not be saved then return false
1489
-        if ($checkin->save() === 0) {
1490
-            if (WP_DEBUG) {
1491
-                global $wpdb;
1492
-                $error = sprintf(
1493
-                    esc_html__(
1494
-                        'Registration check in update failed because of the following database error: %1$s%2$s',
1495
-                        'event_espresso'
1496
-                    ),
1497
-                    '<br />',
1498
-                    $wpdb->last_error
1499
-                );
1500
-            } else {
1501
-                $error = esc_html__(
1502
-                    'Registration check in update failed because of an unknown database error',
1503
-                    'event_espresso'
1504
-                );
1505
-            }
1506
-            EE_Error::add_error($error, __FILE__, __FUNCTION__, __LINE__);
1507
-            return false;
1508
-        }
1509
-        return $status_to;
1510
-    }
1511
-
1512
-
1513
-    /**
1514
-     * Returns the latest datetime related to this registration (via the ticket attached to the registration).
1515
-     * "Latest" is defined by the `DTT_EVT_start` column.
1516
-     *
1517
-     * @return EE_Datetime|null
1518
-     * @throws EE_Error
1519
-     */
1520
-    public function get_latest_related_datetime()
1521
-    {
1522
-        return EEM_Datetime::instance()->get_one(
1523
-            array(
1524
-                array(
1525
-                    'Ticket.Registration.REG_ID' => $this->ID(),
1526
-                ),
1527
-                'order_by' => array('DTT_EVT_start' => 'DESC'),
1528
-            )
1529
-        );
1530
-    }
1531
-
1532
-
1533
-    /**
1534
-     * Returns the earliest datetime related to this registration (via the ticket attached to the registration).
1535
-     * "Earliest" is defined by the `DTT_EVT_start` column.
1536
-     *
1537
-     * @throws EE_Error
1538
-     */
1539
-    public function get_earliest_related_datetime()
1540
-    {
1541
-        return EEM_Datetime::instance()->get_one(
1542
-            array(
1543
-                array(
1544
-                    'Ticket.Registration.REG_ID' => $this->ID(),
1545
-                ),
1546
-                'order_by' => array('DTT_EVT_start' => 'ASC'),
1547
-            )
1548
-        );
1549
-    }
1550
-
1551
-
1552
-    /**
1553
-     * This method simply returns the check-in status for this registration and the given datetime.
1554
-     * If neither the datetime nor the checkin values are provided as arguments,
1555
-     * then this will return the LATEST check-in status for the registration across all datetimes it belongs to.
1556
-     *
1557
-     * @param  int       $DTT_ID  The ID of the datetime we're checking against
1558
-     *                            (if empty we'll get the primary datetime for
1559
-     *                            this registration (via event) and use it's ID);
1560
-     * @param EE_Checkin $checkin If present, we use the given checkin object rather than the dtt_id.
1561
-     *
1562
-     * @return int                Integer representing Check-in status.
1563
-     * @throws EE_Error
1564
-     */
1565
-    public function check_in_status_for_datetime($DTT_ID = 0, $checkin = null)
1566
-    {
1567
-        $checkin_query_params = array(
1568
-            'order_by' => array('CHK_timestamp' => 'DESC'),
1569
-        );
1570
-
1571
-        if ($DTT_ID > 0) {
1572
-            $checkin_query_params[0] = array('DTT_ID' => $DTT_ID);
1573
-        }
1574
-
1575
-        //get checkin object (if exists)
1576
-        $checkin = $checkin instanceof EE_Checkin
1577
-            ? $checkin
1578
-            : $this->get_first_related('Checkin', $checkin_query_params);
1579
-        if ($checkin instanceof EE_Checkin) {
1580
-            if ($checkin->get('CHK_in')) {
1581
-                return EE_Checkin::status_checked_in; //checked in
1582
-            }
1583
-            return EE_Checkin::status_checked_out; //had checked in but is now checked out.
1584
-        }
1585
-        return EE_Checkin::status_checked_never; //never been checked in
1586
-    }
1587
-
1588
-
1589
-    /**
1590
-     * This method returns a localized message for the toggled Check-in message.
1591
-     *
1592
-     * @param  int $DTT_ID include specific datetime to get the correct Check-in message.  If not included or null,
1593
-     *                     then it is assumed Check-in for primary datetime was toggled.
1594
-     * @param bool $error  This just flags that you want an error message returned. This is put in so that the error
1595
-     *                     message can be customized with the attendee name.
1596
-     * @return string internationalized message
1597
-     * @throws EE_Error
1598
-     */
1599
-    public function get_checkin_msg($DTT_ID, $error = false)
1600
-    {
1601
-        //let's get the attendee first so we can include the name of the attendee
1602
-        $attendee = $this->get_first_related('Attendee');
1603
-        if ($attendee instanceof EE_Attendee) {
1604
-            if ($error) {
1605
-                return sprintf(__("%s's check-in status was not changed.", "event_espresso"), $attendee->full_name());
1606
-            }
1607
-            $cur_status = $this->check_in_status_for_datetime($DTT_ID);
1608
-            //what is the status message going to be?
1609
-            switch ($cur_status) {
1610
-                case EE_Checkin::status_checked_never:
1611
-                    return sprintf(__("%s has been removed from Check-in records", "event_espresso"),
1612
-                        $attendee->full_name());
1613
-                    break;
1614
-                case EE_Checkin::status_checked_in:
1615
-                    return sprintf(__('%s has been checked in', 'event_espresso'), $attendee->full_name());
1616
-                    break;
1617
-                case EE_Checkin::status_checked_out:
1618
-                    return sprintf(__('%s has been checked out', 'event_espresso'), $attendee->full_name());
1619
-                    break;
1620
-            }
1621
-        }
1622
-        return esc_html__("The check-in status could not be determined.", "event_espresso");
1623
-    }
1624
-
1625
-
1626
-    /**
1627
-     * Returns the related EE_Transaction to this registration
1628
-     *
1629
-     * @return EE_Transaction
1630
-     * @throws EE_Error
1631
-     * @throws EntityNotFoundException
1632
-     */
1633
-    public function transaction()
1634
-    {
1635
-        $transaction = $this->get_first_related('Transaction');
1636
-        if (! $transaction instanceof \EE_Transaction) {
1637
-            throw new EntityNotFoundException('Transaction ID', $this->transaction_ID());
1638
-        }
1639
-        return $transaction;
1640
-    }
1641
-
1642
-
1643
-    /**
1644
-     *        get Registration Code
1645
-     */
1646
-    public function reg_code()
1647
-    {
1648
-        return $this->get('REG_code');
1649
-    }
1650
-
1651
-
1652
-    /**
1653
-     *        get Transaction ID
1654
-     */
1655
-    public function transaction_ID()
1656
-    {
1657
-        return $this->get('TXN_ID');
1658
-    }
1659
-
1660
-
1661
-    /**
1662
-     * @return int
1663
-     * @throws EE_Error
1664
-     */
1665
-    public function ticket_ID()
1666
-    {
1667
-        return $this->get('TKT_ID');
1668
-    }
1669
-
1670
-
1671
-    /**
1672
-     *        Set Registration Code
1673
-     *
1674
-     * @access    public
1675
-     * @param    string  $REG_code Registration Code
1676
-     * @param    boolean $use_default
1677
-     * @throws EE_Error
1678
-     */
1679
-    public function set_reg_code($REG_code, $use_default = false)
1680
-    {
1681
-        if (empty($REG_code)) {
1682
-            EE_Error::add_error(
1683
-                esc_html__('REG_code can not be empty.', 'event_espresso'),
1684
-                __FILE__,
1685
-                __FUNCTION__,
1686
-                __LINE__
1687
-            );
1688
-            return;
1689
-        }
1690
-        if (! $this->reg_code()) {
1691
-            parent::set('REG_code', $REG_code, $use_default);
1692
-        } else {
1693
-            EE_Error::doing_it_wrong(
1694
-                __CLASS__ . '::' . __FUNCTION__,
1695
-                esc_html__('Can not change a registration REG_code once it has been set.', 'event_espresso'),
1696
-                '4.6.0'
1697
-            );
1698
-        }
1699
-    }
1700
-
1701
-
1702
-    /**
1703
-     * Returns all other registrations in the same group as this registrant who have the same ticket option.
1704
-     * Note, if you want to just get all registrations in the same transaction (group), use:
1705
-     *    $registration->transaction()->registrations();
1706
-     *
1707
-     * @since 4.5.0
1708
-     * @return EE_Registration[] or empty array if this isn't a group registration.
1709
-     * @throws EE_Error
1710
-     */
1711
-    public function get_all_other_registrations_in_group()
1712
-    {
1713
-        if ($this->group_size() < 2) {
1714
-            return array();
1715
-        }
1716
-
1717
-        $query[0] = array(
1718
-            'TXN_ID' => $this->transaction_ID(),
1719
-            'REG_ID' => array('!=', $this->ID()),
1720
-            'TKT_ID' => $this->ticket_ID(),
1721
-        );
1722
-        /** @var EE_Registration[] $registrations */
1723
-        $registrations = $this->get_model()->get_all($query);
1724
-        return $registrations;
1725
-    }
1726
-
1727
-    /**
1728
-     * Return the link to the admin details for the object.
1729
-     *
1730
-     * @return string
1731
-     * @throws EE_Error
1732
-     */
1733
-    public function get_admin_details_link()
1734
-    {
1735
-        EE_Registry::instance()->load_helper('URL');
1736
-        return EEH_URL::add_query_args_and_nonce(
1737
-            array(
1738
-                'page'    => 'espresso_registrations',
1739
-                'action'  => 'view_registration',
1740
-                '_REG_ID' => $this->ID(),
1741
-            ),
1742
-            admin_url('admin.php')
1743
-        );
1744
-    }
1745
-
1746
-    /**
1747
-     * Returns the link to the editor for the object.  Sometimes this is the same as the details.
1748
-     *
1749
-     * @return string
1750
-     * @throws EE_Error
1751
-     */
1752
-    public function get_admin_edit_link()
1753
-    {
1754
-        return $this->get_admin_details_link();
1755
-    }
1756
-
1757
-    /**
1758
-     * Returns the link to a settings page for the object.
1759
-     *
1760
-     * @return string
1761
-     * @throws EE_Error
1762
-     */
1763
-    public function get_admin_settings_link()
1764
-    {
1765
-        return $this->get_admin_details_link();
1766
-    }
1767
-
1768
-    /**
1769
-     * Returns the link to the "overview" for the object (typically the "list table" view).
1770
-     *
1771
-     * @return string
1772
-     */
1773
-    public function get_admin_overview_link()
1774
-    {
1775
-        EE_Registry::instance()->load_helper('URL');
1776
-        return EEH_URL::add_query_args_and_nonce(
1777
-            array(
1778
-                'page' => 'espresso_registrations',
1779
-            ),
1780
-            admin_url('admin.php')
1781
-        );
1782
-    }
1783
-
1784
-
1785
-    /**
1786
-     * @param array $query_params
1787
-     *
1788
-     * @return \EE_Registration[]
1789
-     * @throws EE_Error
1790
-     */
1791
-    public function payments($query_params = array())
1792
-    {
1793
-        return $this->get_many_related('Payment', $query_params);
1794
-    }
1795
-
1796
-
1797
-    /**
1798
-     * @param array $query_params
1799
-     *
1800
-     * @return \EE_Registration_Payment[]
1801
-     * @throws EE_Error
1802
-     */
1803
-    public function registration_payments($query_params = array())
1804
-    {
1805
-        return $this->get_many_related('Registration_Payment', $query_params);
1806
-    }
1807
-
1808
-
1809
-    /**
1810
-     * This grabs the payment method corresponding to the last payment made for the amount owing on the registration.
1811
-     * Note: if there are no payments on the registration there will be no payment method returned.
1812
-     *
1813
-     * @return EE_Payment_Method|null
1814
-     */
1815
-    public function payment_method()
1816
-    {
1817
-        return EEM_Payment_Method::instance()->get_last_used_for_registration($this);
1818
-    }
1819
-
1820
-
1821
-    /**
1822
-     * @return \EE_Line_Item
1823
-     * @throws EntityNotFoundException
1824
-     * @throws EE_Error
1825
-     */
1826
-    public function ticket_line_item()
1827
-    {
1828
-        $ticket            = $this->ticket();
1829
-        $transaction       = $this->transaction();
1830
-        $line_item         = null;
1831
-        $ticket_line_items = \EEH_Line_Item::get_line_items_by_object_type_and_IDs(
1832
-            $transaction->total_line_item(),
1833
-            'Ticket',
1834
-            array($ticket->ID())
1835
-        );
1836
-        foreach ($ticket_line_items as $ticket_line_item) {
1837
-            if (
1838
-                $ticket_line_item instanceof \EE_Line_Item
1839
-                && $ticket_line_item->OBJ_type() === 'Ticket'
1840
-                && $ticket_line_item->OBJ_ID() === $ticket->ID()
1841
-            ) {
1842
-                $line_item = $ticket_line_item;
1843
-                break;
1844
-            }
1845
-        }
1846
-        if (! ($line_item instanceof \EE_Line_Item && $line_item->OBJ_type() === 'Ticket')) {
1847
-            throw new EntityNotFoundException('Line Item Ticket ID', $ticket->ID());
1848
-        }
1849
-        return $line_item;
1850
-    }
1851
-
1852
-
1853
-    /**
1854
-     * Soft Deletes this model object.
1855
-     *
1856
-     * @return boolean | int
1857
-     * @throws RuntimeException
1858
-     * @throws EE_Error
1859
-     */
1860
-    public function delete()
1861
-    {
1862
-        if ($this->update_extra_meta(EE_Registration::PRE_TRASH_REG_STATUS_KEY, $this->status_ID()) === true) {
1863
-            $this->set_status(EEM_Registration::status_id_cancelled);
1864
-        }
1865
-        return parent::delete();
1866
-    }
1867
-
1868
-
1869
-    /**
1870
-     * Restores whatever the previous status was on a registration before it was trashed (if possible)
1871
-     *
1872
-     * @throws EE_Error
1873
-     * @throws RuntimeException
1874
-     */
1875
-    public function restore()
1876
-    {
1877
-        $previous_status = $this->get_extra_meta(
1878
-            EE_Registration::PRE_TRASH_REG_STATUS_KEY,
1879
-            true,
1880
-            EEM_Registration::status_id_cancelled
1881
-        );
1882
-        if ($previous_status) {
1883
-            $this->delete_extra_meta(EE_Registration::PRE_TRASH_REG_STATUS_KEY);
1884
-            $this->set_status($previous_status);
1885
-        }
1886
-        return parent::restore();
1887
-    }
1888
-
1889
-
1890
-    /**
1891
-     * possibly toggle Registration status based on comparison of REG_paid vs REG_final_price
1892
-     *
1893
-     * @param  boolean $trigger_set_status_logic EE_Registration::set_status() can trigger additional logic
1894
-     *                                           depending on whether the reg status changes to or from "Approved"
1895
-     * @return boolean whether the Registration status was updated
1896
-     * @throws EE_Error
1897
-     * @throws RuntimeException
1898
-     */
1899
-    public function updateStatusBasedOnTotalPaid($trigger_set_status_logic = true)
1900
-    {
1901
-        $paid = $this->paid();
1902
-        $price = $this->final_price();
1903
-        switch(true) {
1904
-            // overpaid or paid
1905
-            case EEH_Money::compare_floats($paid, $price, '>'):
1906
-            case EEH_Money::compare_floats($paid, $price):
1907
-                $new_status = EEM_Registration::status_id_approved;
1908
-                break;
1909
-            //  underpaid
1910
-            case EEH_Money::compare_floats($paid, $price, '<'):
1911
-                $new_status = EEM_Registration::status_id_pending_payment;
1912
-                break;
1913
-            // uhhh Houston...
1914
-            default:
1915
-                throw new RuntimeException(
1916
-                    esc_html__('The total paid calculation for this registration is inaccurate.', 'event_espresso')
1917
-                );
1918
-        }
1919
-        if ($new_status !== $this->status_ID()) {
1920
-            if ($trigger_set_status_logic) {
1921
-                return $this->set_status($new_status);
1922
-            }
1923
-            parent::set('STS_ID', $new_status);
1924
-            return true;
1925
-        }
1926
-        return false;
1927
-    }
1928
-
1929
-
1930
-    /*************************** DEPRECATED ***************************/
1931
-
1932
-
1933
-    /**
1934
-     * @deprecated
1935
-     * @since     4.7.0
1936
-     * @access    public
1937
-     */
1938
-    public function price_paid()
1939
-    {
1940
-        EE_Error::doing_it_wrong('EE_Registration::price_paid()',
1941
-            esc_html__('This method is deprecated, please use EE_Registration::final_price() instead.', 'event_espresso'),
1942
-            '4.7.0');
1943
-        return $this->final_price();
1944
-    }
1945
-
1946
-
1947
-    /**
1948
-     * @deprecated
1949
-     * @since     4.7.0
1950
-     * @access    public
1951
-     * @param    float $REG_final_price
1952
-     * @throws EE_Error
1953
-     * @throws RuntimeException
1954
-     */
1955
-    public function set_price_paid($REG_final_price = 0.00)
1956
-    {
1957
-        EE_Error::doing_it_wrong('EE_Registration::set_price_paid()',
1958
-            esc_html__('This method is deprecated, please use EE_Registration::set_final_price() instead.', 'event_espresso'),
1959
-            '4.7.0');
1960
-        $this->set_final_price($REG_final_price);
1961
-    }
1962
-
1963
-
1964
-    /**
1965
-     * @deprecated
1966
-     * @since 4.7.0
1967
-     * @return string
1968
-     * @throws EE_Error
1969
-     */
1970
-    public function pretty_price_paid()
1971
-    {
1972
-        EE_Error::doing_it_wrong('EE_Registration::pretty_price_paid()',
1973
-            esc_html__('This method is deprecated, please use EE_Registration::pretty_final_price() instead.',
1974
-                'event_espresso'), '4.7.0');
1975
-        return $this->pretty_final_price();
1976
-    }
1977
-
1978
-
1979
-    /**
1980
-     * Gets the primary datetime related to this registration via the related Event to this registration
1981
-     *
1982
-     * @deprecated 4.9.17
1983
-     * @return EE_Datetime
1984
-     * @throws EE_Error
1985
-     * @throws EntityNotFoundException
1986
-     */
1987
-    public function get_related_primary_datetime()
1988
-    {
1989
-        EE_Error::doing_it_wrong(
1990
-            __METHOD__,
1991
-            esc_html__(
1992
-                'Use EE_Registration::get_latest_related_datetime() or EE_Registration::get_earliest_related_datetime()',
1993
-                'event_espresso'
1994
-            ),
1995
-            '4.9.17',
1996
-            '5.0.0'
1997
-        );
1998
-        return $this->event()->primary_datetime();
1999
-    }
21
+	/**
22
+	 * Used to reference when a registration has never been checked in.
23
+	 *
24
+	 * @deprecated use \EE_Checkin::status_checked_never instead
25
+	 * @type int
26
+	 */
27
+	const checkin_status_never = 2;
28
+
29
+	/**
30
+	 * Used to reference when a registration has been checked in.
31
+	 *
32
+	 * @deprecated use \EE_Checkin::status_checked_in instead
33
+	 * @type int
34
+	 */
35
+	const checkin_status_in = 1;
36
+
37
+
38
+	/**
39
+	 * Used to reference when a registration has been checked out.
40
+	 *
41
+	 * @deprecated use \EE_Checkin::status_checked_out instead
42
+	 * @type int
43
+	 */
44
+	const checkin_status_out = 0;
45
+
46
+
47
+	/**
48
+	 * extra meta key for tracking reg status os trashed registrations
49
+	 *
50
+	 * @type string
51
+	 */
52
+	const PRE_TRASH_REG_STATUS_KEY = 'pre_trash_registration_status';
53
+
54
+
55
+	/**
56
+	 * extra meta key for tracking if registration has reserved ticket
57
+	 *
58
+	 * @type string
59
+	 */
60
+	const HAS_RESERVED_TICKET_KEY = 'has_reserved_ticket';
61
+
62
+
63
+	/**
64
+	 * @param array  $props_n_values          incoming values
65
+	 * @param string $timezone                incoming timezone (if not set the timezone set for the website will be
66
+	 *                                        used.)
67
+	 * @param array  $date_formats            incoming date_formats in an array where the first value is the
68
+	 *                                        date_format and the second value is the time format
69
+	 * @return EE_Registration
70
+	 * @throws EE_Error
71
+	 */
72
+	public static function new_instance($props_n_values = array(), $timezone = null, $date_formats = array())
73
+	{
74
+		$has_object = parent::_check_for_object($props_n_values, __CLASS__, $timezone, $date_formats);
75
+		return $has_object ? $has_object : new self($props_n_values, false, $timezone, $date_formats);
76
+	}
77
+
78
+
79
+	/**
80
+	 * @param array  $props_n_values  incoming values from the database
81
+	 * @param string $timezone        incoming timezone as set by the model.  If not set the timezone for
82
+	 *                                the website will be used.
83
+	 * @return EE_Registration
84
+	 */
85
+	public static function new_instance_from_db($props_n_values = array(), $timezone = null)
86
+	{
87
+		return new self($props_n_values, true, $timezone);
88
+	}
89
+
90
+
91
+	/**
92
+	 *        Set Event ID
93
+	 *
94
+	 * @param        int $EVT_ID Event ID
95
+	 * @throws EE_Error
96
+	 * @throws RuntimeException
97
+	 */
98
+	public function set_event($EVT_ID = 0)
99
+	{
100
+		$this->set('EVT_ID', $EVT_ID);
101
+	}
102
+
103
+
104
+	/**
105
+	 * Overrides parent set() method so that all calls to set( 'REG_code', $REG_code ) OR set( 'STS_ID', $STS_ID ) can
106
+	 * be routed to internal methods
107
+	 *
108
+	 * @param string $field_name
109
+	 * @param mixed  $field_value
110
+	 * @param bool   $use_default
111
+	 * @throws EE_Error
112
+	 * @throws EntityNotFoundException
113
+	 * @throws InvalidArgumentException
114
+	 * @throws InvalidDataTypeException
115
+	 * @throws InvalidInterfaceException
116
+	 * @throws ReflectionException
117
+	 * @throws RuntimeException
118
+	 */
119
+	public function set($field_name, $field_value, $use_default = false)
120
+	{
121
+		switch ($field_name) {
122
+			case 'REG_code':
123
+				if (! empty($field_value) && $this->reg_code() === null) {
124
+					$this->set_reg_code($field_value, $use_default);
125
+				}
126
+				break;
127
+			case 'STS_ID':
128
+				$this->set_status($field_value, $use_default);
129
+				break;
130
+			default:
131
+				parent::set($field_name, $field_value, $use_default);
132
+		}
133
+	}
134
+
135
+
136
+	/**
137
+	 * Set Status ID
138
+	 * updates the registration status and ALSO...
139
+	 * calls reserve_registration_space() if the reg status changes TO approved from any other reg status
140
+	 * calls release_registration_space() if the reg status changes FROM approved to any other reg status
141
+	 *
142
+	 * @param string       $new_STS_ID
143
+	 * @param boolean      $use_default
144
+	 * @param Context|null $context
145
+	 * @return bool
146
+	 * @throws EE_Error
147
+	 * @throws EntityNotFoundException
148
+	 * @throws InvalidArgumentException
149
+	 * @throws ReflectionException
150
+	 * @throws RuntimeException
151
+	 * @throws InvalidDataTypeException
152
+	 * @throws InvalidInterfaceException
153
+	 */
154
+	public function set_status($new_STS_ID = null, $use_default = false, Context $context = null)
155
+	{
156
+		// get current REG_Status
157
+		$old_STS_ID = $this->status_ID();
158
+		// if status has changed
159
+		if ($old_STS_ID !== $new_STS_ID // and that status has actually changed
160
+			&& ! empty($old_STS_ID) // and that old status is actually set
161
+			&& ! empty($new_STS_ID) // as well as the new status
162
+			&& $this->ID() // ensure registration is in the db
163
+		) {
164
+			// TO approved
165
+			if ($new_STS_ID === EEM_Registration::status_id_approved) {
166
+				// reserve a space by incrementing ticket and datetime sold values
167
+				$this->_reserve_registration_space();
168
+				do_action('AHEE__EE_Registration__set_status__to_approved', $this, $old_STS_ID, $new_STS_ID, $context);
169
+				// OR FROM  approved
170
+			} elseif ($old_STS_ID === EEM_Registration::status_id_approved) {
171
+				// release a space by decrementing ticket and datetime sold values
172
+				$this->_release_registration_space();
173
+				do_action(
174
+					'AHEE__EE_Registration__set_status__from_approved',
175
+					$this,
176
+					$old_STS_ID,
177
+					$new_STS_ID,
178
+					$context
179
+				);
180
+			}
181
+			// update status
182
+			parent::set('STS_ID', $new_STS_ID, $use_default);
183
+			$this->_update_if_canceled_or_declined($new_STS_ID, $old_STS_ID, $context);
184
+			if($this->statusChangeUpdatesTransaction($context)) {
185
+				$this->updateTransactionAfterStatusChange();
186
+			}
187
+			do_action('AHEE__EE_Registration__set_status__after_update', $this, $old_STS_ID, $new_STS_ID, $context);
188
+			return true;
189
+		}
190
+		//even though the old value matches the new value, it's still good to
191
+		//allow the parent set method to have a say
192
+		parent::set('STS_ID', $new_STS_ID, $use_default);
193
+		return true;
194
+	}
195
+
196
+
197
+	/**
198
+	 * update REGs and TXN when cancelled or declined registrations involved
199
+	 *
200
+	 * @param string       $new_STS_ID
201
+	 * @param string       $old_STS_ID
202
+	 * @param Context|null $context
203
+	 * @throws EE_Error
204
+	 * @throws InvalidArgumentException
205
+	 * @throws InvalidDataTypeException
206
+	 * @throws InvalidInterfaceException
207
+	 * @throws ReflectionException
208
+	 */
209
+	private function _update_if_canceled_or_declined($new_STS_ID, $old_STS_ID, Context $context = null)
210
+	{
211
+		// these reg statuses should not be considered in any calculations involving monies owing
212
+		$closed_reg_statuses = EEM_Registration::closed_reg_statuses();
213
+		// true if registration has been cancelled or declined
214
+		$this->updateIfCanceled(
215
+			$closed_reg_statuses,
216
+			$new_STS_ID,
217
+			$old_STS_ID,
218
+			$context
219
+		);
220
+		$this->updateIfDeclined(
221
+			$closed_reg_statuses,
222
+			$new_STS_ID,
223
+			$old_STS_ID,
224
+			$context
225
+		);
226
+	}
227
+
228
+
229
+	/**
230
+	 * update REGs and TXN when cancelled or declined registrations involved
231
+	 *
232
+	 * @param array        $closed_reg_statuses
233
+	 * @param string       $new_STS_ID
234
+	 * @param string       $old_STS_ID
235
+	 * @param Context|null $context
236
+	 * @throws EE_Error
237
+	 * @throws InvalidArgumentException
238
+	 * @throws InvalidDataTypeException
239
+	 * @throws InvalidInterfaceException
240
+	 * @throws ReflectionException
241
+	 */
242
+	private function updateIfCanceled(array $closed_reg_statuses, $new_STS_ID, $old_STS_ID, Context $context = null)
243
+	{
244
+		// true if registration has been cancelled or declined
245
+		if (in_array($new_STS_ID, $closed_reg_statuses, true)
246
+			&& ! in_array($old_STS_ID, $closed_reg_statuses, true)
247
+		) {
248
+			/** @type EE_Registration_Processor $registration_processor */
249
+			$registration_processor = EE_Registry::instance()->load_class('Registration_Processor');
250
+			/** @type EE_Transaction_Processor $transaction_processor */
251
+			$transaction_processor = EE_Registry::instance()->load_class('Transaction_Processor');
252
+			// cancelled or declined registration
253
+			$registration_processor->update_registration_after_being_canceled_or_declined(
254
+				$this,
255
+				$closed_reg_statuses
256
+			);
257
+			$transaction_processor->update_transaction_after_canceled_or_declined_registration(
258
+				$this,
259
+				$closed_reg_statuses,
260
+				false
261
+			);
262
+			do_action(
263
+				'AHEE__EE_Registration__set_status__canceled_or_declined',
264
+				$this,
265
+				$old_STS_ID,
266
+				$new_STS_ID,
267
+				$context
268
+			);
269
+			return;
270
+		}
271
+	}
272
+
273
+
274
+	/**
275
+	 * update REGs and TXN when cancelled or declined registrations involved
276
+	 *
277
+	 * @param array        $closed_reg_statuses
278
+	 * @param string       $new_STS_ID
279
+	 * @param string       $old_STS_ID
280
+	 * @param Context|null $context
281
+	 * @throws EE_Error
282
+	 * @throws InvalidArgumentException
283
+	 * @throws InvalidDataTypeException
284
+	 * @throws InvalidInterfaceException
285
+	 * @throws ReflectionException
286
+	 */
287
+	private function updateIfDeclined(array $closed_reg_statuses, $new_STS_ID, $old_STS_ID, Context $context = null)
288
+	{
289
+		// true if reinstating cancelled or declined registration
290
+		if (in_array($old_STS_ID, $closed_reg_statuses, true)
291
+			&& ! in_array($new_STS_ID, $closed_reg_statuses, true)
292
+		) {
293
+			/** @type EE_Registration_Processor $registration_processor */
294
+			$registration_processor = EE_Registry::instance()->load_class('Registration_Processor');
295
+			/** @type EE_Transaction_Processor $transaction_processor */
296
+			$transaction_processor = EE_Registry::instance()->load_class('Transaction_Processor');
297
+			// reinstating cancelled or declined registration
298
+			$registration_processor->update_canceled_or_declined_registration_after_being_reinstated(
299
+				$this,
300
+				$closed_reg_statuses
301
+			);
302
+			$transaction_processor->update_transaction_after_reinstating_canceled_registration(
303
+				$this,
304
+				$closed_reg_statuses,
305
+				false
306
+			);
307
+			do_action(
308
+				'AHEE__EE_Registration__set_status__after_reinstated',
309
+				$this,
310
+				$old_STS_ID,
311
+				$new_STS_ID,
312
+				$context
313
+			);
314
+		}
315
+	}
316
+
317
+
318
+	/**
319
+	 * @param Context|null $context
320
+	 * @return bool
321
+	 */
322
+	private function statusChangeUpdatesTransaction(Context $context = null)
323
+	{
324
+		$contexts_that_do_not_update_transaction = (array) apply_filters(
325
+			'AHEE__EE_Registration__statusChangeUpdatesTransaction__contexts_that_do_not_update_transaction',
326
+			array('spco_reg_step_attendee_information_process_registrations'),
327
+			$context,
328
+			$this
329
+		);
330
+		return ! (
331
+			$context instanceof Context
332
+			&& in_array($context->slug(), $contexts_that_do_not_update_transaction, true)
333
+		);
334
+	}
335
+
336
+
337
+	/**
338
+	 * @throws EE_Error
339
+	 * @throws EntityNotFoundException
340
+	 * @throws InvalidArgumentException
341
+	 * @throws InvalidDataTypeException
342
+	 * @throws InvalidInterfaceException
343
+	 * @throws ReflectionException
344
+	 * @throws RuntimeException
345
+	 */
346
+	private function updateTransactionAfterStatusChange()
347
+	{
348
+		/** @type EE_Transaction_Payments $transaction_payments */
349
+		$transaction_payments = EE_Registry::instance()->load_class('Transaction_Payments');
350
+		$transaction_payments->recalculate_transaction_total($this->transaction(), false);
351
+		$this->transaction()->update_status_based_on_total_paid(true);
352
+	}
353
+
354
+
355
+	/**
356
+	 *        get Status ID
357
+	 */
358
+	public function status_ID()
359
+	{
360
+		return $this->get('STS_ID');
361
+	}
362
+
363
+
364
+	/**
365
+	 * increments this registration's related ticket sold and corresponding datetime sold values
366
+	 *
367
+	 * @return void
368
+	 * @throws EE_Error
369
+	 * @throws EntityNotFoundException
370
+	 */
371
+	private function _reserve_registration_space()
372
+	{
373
+		// reserved ticket and datetime counts will be decremented as sold counts are incremented
374
+		// so stop tracking that this reg has a ticket reserved
375
+		$this->release_reserved_ticket();
376
+		$ticket = $this->ticket();
377
+		$ticket->increase_sold();
378
+		$ticket->save();
379
+		// possibly set event status to sold out
380
+		$this->event()->perform_sold_out_status_check();
381
+	}
382
+
383
+
384
+	/**
385
+	 * Gets the ticket this registration is for
386
+	 *
387
+	 * @param boolean $include_archived whether to include archived tickets or not.
388
+	 *
389
+	 * @return EE_Ticket|EE_Base_Class
390
+	 * @throws EE_Error
391
+	 */
392
+	public function ticket($include_archived = true)
393
+	{
394
+		$query_params = array();
395
+		if ($include_archived) {
396
+			$query_params['default_where_conditions'] = 'none';
397
+		}
398
+		return $this->get_first_related('Ticket', $query_params);
399
+	}
400
+
401
+
402
+	/**
403
+	 * Gets the event this registration is for
404
+	 *
405
+	 * @return EE_Event
406
+	 * @throws EE_Error
407
+	 * @throws EntityNotFoundException
408
+	 */
409
+	public function event()
410
+	{
411
+		$event = $this->get_first_related('Event');
412
+		if (! $event instanceof \EE_Event) {
413
+			throw new EntityNotFoundException('Event ID', $this->event_ID());
414
+		}
415
+		return $event;
416
+	}
417
+
418
+
419
+	/**
420
+	 * Gets the "author" of the registration.  Note that for the purposes of registrations, the author will correspond
421
+	 * with the author of the event this registration is for.
422
+	 *
423
+	 * @since 4.5.0
424
+	 * @return int
425
+	 * @throws EE_Error
426
+	 * @throws EntityNotFoundException
427
+	 */
428
+	public function wp_user()
429
+	{
430
+		$event = $this->event();
431
+		if ($event instanceof EE_Event) {
432
+			return $event->wp_user();
433
+		}
434
+		return 0;
435
+	}
436
+
437
+
438
+	/**
439
+	 * decrements (subtracts) this registration's related ticket sold and corresponding datetime sold values
440
+	 *
441
+	 * @return void
442
+	 * @throws EE_Error
443
+	 */
444
+	private function _release_registration_space()
445
+	{
446
+		$ticket = $this->ticket();
447
+		$ticket->decrease_sold();
448
+		$ticket->save();
449
+	}
450
+
451
+
452
+	/**
453
+	 * tracks this registration's ticket reservation in extra meta
454
+	 * and can increment related ticket reserved and corresponding datetime reserved values
455
+	 *
456
+	 * @param bool $update_ticket if true, will increment ticket and datetime reserved count
457
+	 *
458
+	 * @return void
459
+	 * @throws EE_Error
460
+	 */
461
+	public function reserve_ticket($update_ticket = false)
462
+	{
463
+		if ($this->get_extra_meta(EE_Registration::HAS_RESERVED_TICKET_KEY, true, false) === false) {
464
+			// PLZ NOTE: although checking $update_ticket first would be more efficient,
465
+			// we NEED to ALWAYS call update_extra_meta(), which is why that is done first
466
+			if ($this->update_extra_meta(EE_Registration::HAS_RESERVED_TICKET_KEY, true, false) && $update_ticket) {
467
+				$ticket = $this->ticket();
468
+				$ticket->increase_reserved();
469
+				$ticket->save();
470
+			}
471
+		}
472
+	}
473
+
474
+
475
+	/**
476
+	 * stops tracking this registration's ticket reservation in extra meta
477
+	 * decrements (subtracts) related ticket reserved and corresponding datetime reserved values
478
+	 *
479
+	 * @param bool $update_ticket if true, will decrement ticket and datetime reserved count
480
+	 *
481
+	 * @return void
482
+	 * @throws EE_Error
483
+	 */
484
+	public function release_reserved_ticket($update_ticket = false)
485
+	{
486
+		if ($this->get_extra_meta(EE_Registration::HAS_RESERVED_TICKET_KEY, true, false) !== false) {
487
+			// PLZ NOTE: although checking $update_ticket first would be more efficient,
488
+			// we NEED to ALWAYS call delete_extra_meta(), which is why that is done first
489
+			if ($this->delete_extra_meta(EE_Registration::HAS_RESERVED_TICKET_KEY) && $update_ticket) {
490
+				$ticket = $this->ticket();
491
+				$ticket->decrease_reserved();
492
+				$ticket->save();
493
+			}
494
+		}
495
+	}
496
+
497
+
498
+	/**
499
+	 * Set Attendee ID
500
+	 *
501
+	 * @param        int $ATT_ID Attendee ID
502
+	 * @throws EE_Error
503
+	 * @throws RuntimeException
504
+	 */
505
+	public function set_attendee_id($ATT_ID = 0)
506
+	{
507
+		$this->set('ATT_ID', $ATT_ID);
508
+	}
509
+
510
+
511
+	/**
512
+	 *        Set Transaction ID
513
+	 *
514
+	 * @param        int $TXN_ID Transaction ID
515
+	 * @throws EE_Error
516
+	 * @throws RuntimeException
517
+	 */
518
+	public function set_transaction_id($TXN_ID = 0)
519
+	{
520
+		$this->set('TXN_ID', $TXN_ID);
521
+	}
522
+
523
+
524
+	/**
525
+	 *        Set Session
526
+	 *
527
+	 * @param    string $REG_session PHP Session ID
528
+	 * @throws EE_Error
529
+	 * @throws RuntimeException
530
+	 */
531
+	public function set_session($REG_session = '')
532
+	{
533
+		$this->set('REG_session', $REG_session);
534
+	}
535
+
536
+
537
+	/**
538
+	 *        Set Registration URL Link
539
+	 *
540
+	 * @param    string $REG_url_link Registration URL Link
541
+	 * @throws EE_Error
542
+	 * @throws RuntimeException
543
+	 */
544
+	public function set_reg_url_link($REG_url_link = '')
545
+	{
546
+		$this->set('REG_url_link', $REG_url_link);
547
+	}
548
+
549
+
550
+	/**
551
+	 *        Set Attendee Counter
552
+	 *
553
+	 * @param        int $REG_count Primary Attendee
554
+	 * @throws EE_Error
555
+	 * @throws RuntimeException
556
+	 */
557
+	public function set_count($REG_count = 1)
558
+	{
559
+		$this->set('REG_count', $REG_count);
560
+	}
561
+
562
+
563
+	/**
564
+	 *        Set Group Size
565
+	 *
566
+	 * @param        boolean $REG_group_size Group Registration
567
+	 * @throws EE_Error
568
+	 * @throws RuntimeException
569
+	 */
570
+	public function set_group_size($REG_group_size = false)
571
+	{
572
+		$this->set('REG_group_size', $REG_group_size);
573
+	}
574
+
575
+
576
+	/**
577
+	 *    is_not_approved -  convenience method that returns TRUE if REG status ID ==
578
+	 *    EEM_Registration::status_id_not_approved
579
+	 *
580
+	 * @return        boolean
581
+	 */
582
+	public function is_not_approved()
583
+	{
584
+		return $this->status_ID() == EEM_Registration::status_id_not_approved ? true : false;
585
+	}
586
+
587
+
588
+	/**
589
+	 *    is_pending_payment -  convenience method that returns TRUE if REG status ID ==
590
+	 *    EEM_Registration::status_id_pending_payment
591
+	 *
592
+	 * @return        boolean
593
+	 */
594
+	public function is_pending_payment()
595
+	{
596
+		return $this->status_ID() == EEM_Registration::status_id_pending_payment ? true : false;
597
+	}
598
+
599
+
600
+	/**
601
+	 *    is_approved -  convenience method that returns TRUE if REG status ID == EEM_Registration::status_id_approved
602
+	 *
603
+	 * @return        boolean
604
+	 */
605
+	public function is_approved()
606
+	{
607
+		return $this->status_ID() == EEM_Registration::status_id_approved ? true : false;
608
+	}
609
+
610
+
611
+	/**
612
+	 *    is_cancelled -  convenience method that returns TRUE if REG status ID == EEM_Registration::status_id_cancelled
613
+	 *
614
+	 * @return        boolean
615
+	 */
616
+	public function is_cancelled()
617
+	{
618
+		return $this->status_ID() == EEM_Registration::status_id_cancelled ? true : false;
619
+	}
620
+
621
+
622
+	/**
623
+	 *    is_declined -  convenience method that returns TRUE if REG status ID == EEM_Registration::status_id_declined
624
+	 *
625
+	 * @return        boolean
626
+	 */
627
+	public function is_declined()
628
+	{
629
+		return $this->status_ID() == EEM_Registration::status_id_declined ? true : false;
630
+	}
631
+
632
+
633
+	/**
634
+	 *    is_incomplete -  convenience method that returns TRUE if REG status ID ==
635
+	 *    EEM_Registration::status_id_incomplete
636
+	 *
637
+	 * @return        boolean
638
+	 */
639
+	public function is_incomplete()
640
+	{
641
+		return $this->status_ID() == EEM_Registration::status_id_incomplete ? true : false;
642
+	}
643
+
644
+
645
+	/**
646
+	 *        Set Registration Date
647
+	 *
648
+	 * @param        mixed ( int or string ) $REG_date Registration Date - Unix timestamp or string representation of
649
+	 *                                                 Date
650
+	 * @throws EE_Error
651
+	 * @throws RuntimeException
652
+	 */
653
+	public function set_reg_date($REG_date = false)
654
+	{
655
+		$this->set('REG_date', $REG_date);
656
+	}
657
+
658
+
659
+	/**
660
+	 *    Set final price owing for this registration after all ticket/price modifications
661
+	 *
662
+	 * @access    public
663
+	 * @param    float $REG_final_price
664
+	 * @throws EE_Error
665
+	 * @throws RuntimeException
666
+	 */
667
+	public function set_final_price($REG_final_price = 0.00)
668
+	{
669
+		$this->set('REG_final_price', $REG_final_price);
670
+	}
671
+
672
+
673
+	/**
674
+	 *    Set amount paid towards this registration's final price
675
+	 *
676
+	 * @access    public
677
+	 * @param    float $REG_paid
678
+	 * @throws EE_Error
679
+	 * @throws RuntimeException
680
+	 */
681
+	public function set_paid($REG_paid = 0.00)
682
+	{
683
+		$this->set('REG_paid', $REG_paid);
684
+	}
685
+
686
+
687
+	/**
688
+	 *        Attendee Is Going
689
+	 *
690
+	 * @param        boolean $REG_att_is_going Attendee Is Going
691
+	 * @throws EE_Error
692
+	 * @throws RuntimeException
693
+	 */
694
+	public function set_att_is_going($REG_att_is_going = false)
695
+	{
696
+		$this->set('REG_att_is_going', $REG_att_is_going);
697
+	}
698
+
699
+
700
+	/**
701
+	 * Gets the related attendee
702
+	 *
703
+	 * @return EE_Attendee
704
+	 * @throws EE_Error
705
+	 */
706
+	public function attendee()
707
+	{
708
+		return $this->get_first_related('Attendee');
709
+	}
710
+
711
+
712
+	/**
713
+	 *        get Event ID
714
+	 */
715
+	public function event_ID()
716
+	{
717
+		return $this->get('EVT_ID');
718
+	}
719
+
720
+
721
+	/**
722
+	 *        get Event ID
723
+	 */
724
+	public function event_name()
725
+	{
726
+		$event = $this->event_obj();
727
+		if ($event) {
728
+			return $event->name();
729
+		} else {
730
+			return null;
731
+		}
732
+	}
733
+
734
+
735
+	/**
736
+	 * Fetches the event this registration is for
737
+	 *
738
+	 * @return EE_Event
739
+	 * @throws EE_Error
740
+	 */
741
+	public function event_obj()
742
+	{
743
+		return $this->get_first_related('Event');
744
+	}
745
+
746
+
747
+	/**
748
+	 *        get Attendee ID
749
+	 */
750
+	public function attendee_ID()
751
+	{
752
+		return $this->get('ATT_ID');
753
+	}
754
+
755
+
756
+	/**
757
+	 *        get PHP Session ID
758
+	 */
759
+	public function session_ID()
760
+	{
761
+		return $this->get('REG_session');
762
+	}
763
+
764
+
765
+	/**
766
+	 * Gets the string which represents the URL trigger for the receipt template in the message template system.
767
+	 *
768
+	 * @param string $messenger 'pdf' or 'html'.  Default 'html'.
769
+	 * @return string
770
+	 */
771
+	public function receipt_url($messenger = 'html')
772
+	{
773
+
774
+		/**
775
+		 * The below will be deprecated one version after this.  We check first if there is a custom receipt template
776
+		 * already in use on old system.  If there is then we just return the standard url for it.
777
+		 *
778
+		 * @since 4.5.0
779
+		 */
780
+		$template_relative_path = 'modules/gateways/Invoice/lib/templates/receipt_body.template.php';
781
+		$has_custom             = EEH_Template::locate_template(
782
+			$template_relative_path,
783
+			array(),
784
+			true,
785
+			true,
786
+			true
787
+		);
788
+
789
+		if ($has_custom) {
790
+			return add_query_arg(array('receipt' => 'true'), $this->invoice_url('launch'));
791
+		}
792
+		return apply_filters('FHEE__EE_Registration__receipt_url__receipt_url', '', $this, $messenger, 'receipt');
793
+	}
794
+
795
+
796
+	/**
797
+	 * Gets the string which represents the URL trigger for the invoice template in the message template system.
798
+	 *
799
+	 * @param string $messenger 'pdf' or 'html'.  Default 'html'.
800
+	 * @return string
801
+	 * @throws EE_Error
802
+	 */
803
+	public function invoice_url($messenger = 'html')
804
+	{
805
+		/**
806
+		 * The below will be deprecated one version after this.  We check first if there is a custom invoice template
807
+		 * already in use on old system.  If there is then we just return the standard url for it.
808
+		 *
809
+		 * @since 4.5.0
810
+		 */
811
+		$template_relative_path = 'modules/gateways/Invoice/lib/templates/invoice_body.template.php';
812
+		$has_custom             = EEH_Template::locate_template(
813
+			$template_relative_path,
814
+			array(),
815
+			true,
816
+			true,
817
+			true
818
+		);
819
+
820
+		if ($has_custom) {
821
+			if ($messenger == 'html') {
822
+				return $this->invoice_url('launch');
823
+			}
824
+			$route = $messenger == 'download' || $messenger == 'pdf' ? 'download_invoice' : 'launch_invoice';
825
+
826
+			$query_args = array('ee' => $route, 'id' => $this->reg_url_link());
827
+			if ($messenger == 'html') {
828
+				$query_args['html'] = true;
829
+			}
830
+			return add_query_arg($query_args, get_permalink(EE_Registry::instance()->CFG->core->thank_you_page_id));
831
+		}
832
+		return apply_filters('FHEE__EE_Registration__invoice_url__invoice_url', '', $this, $messenger, 'invoice');
833
+	}
834
+
835
+
836
+	/**
837
+	 * get Registration URL Link
838
+	 *
839
+	 * @access public
840
+	 * @return string
841
+	 * @throws EE_Error
842
+	 */
843
+	public function reg_url_link()
844
+	{
845
+		return (string) $this->get('REG_url_link');
846
+	}
847
+
848
+
849
+	/**
850
+	 * Echoes out invoice_url()
851
+	 *
852
+	 * @param string $type 'download','launch', or 'html' (default is 'launch')
853
+	 * @return void
854
+	 * @throws EE_Error
855
+	 */
856
+	public function e_invoice_url($type = 'launch')
857
+	{
858
+		echo $this->invoice_url($type);
859
+	}
860
+
861
+
862
+	/**
863
+	 * Echoes out payment_overview_url
864
+	 */
865
+	public function e_payment_overview_url()
866
+	{
867
+		echo $this->payment_overview_url();
868
+	}
869
+
870
+
871
+	/**
872
+	 * Gets the URL of the thank you page with this registration REG_url_link added as
873
+	 * a query parameter
874
+	 *
875
+	 * @param bool $clear_session Set to true when you want to clear the session on revisiting the
876
+	 *                            payment overview url.
877
+	 * @return string
878
+	 * @throws EE_Error
879
+	 */
880
+	public function payment_overview_url($clear_session = false)
881
+	{
882
+		return add_query_arg(array(
883
+			'e_reg_url_link' => $this->reg_url_link(),
884
+			'step'           => 'payment_options',
885
+			'revisit'        => true,
886
+			'clear_session' => (bool) $clear_session
887
+		), EE_Registry::instance()->CFG->core->reg_page_url());
888
+	}
889
+
890
+
891
+	/**
892
+	 * Gets the URL of the thank you page with this registration REG_url_link added as
893
+	 * a query parameter
894
+	 *
895
+	 * @return string
896
+	 * @throws EE_Error
897
+	 */
898
+	public function edit_attendee_information_url()
899
+	{
900
+		return add_query_arg(array(
901
+			'e_reg_url_link' => $this->reg_url_link(),
902
+			'step'           => 'attendee_information',
903
+			'revisit'        => true,
904
+		), EE_Registry::instance()->CFG->core->reg_page_url());
905
+	}
906
+
907
+
908
+	/**
909
+	 * Simply generates and returns the appropriate admin_url link to edit this registration
910
+	 *
911
+	 * @return string
912
+	 * @throws EE_Error
913
+	 */
914
+	public function get_admin_edit_url()
915
+	{
916
+		return EEH_URL::add_query_args_and_nonce(array(
917
+			'page'    => 'espresso_registrations',
918
+			'action'  => 'view_registration',
919
+			'_REG_ID' => $this->ID(),
920
+		), admin_url('admin.php'));
921
+	}
922
+
923
+
924
+	/**
925
+	 *    is_primary_registrant?
926
+	 */
927
+	public function is_primary_registrant()
928
+	{
929
+		return $this->get('REG_count') == 1 ? true : false;
930
+	}
931
+
932
+
933
+	/**
934
+	 * This returns the primary registration object for this registration group (which may be this object).
935
+	 *
936
+	 * @return EE_Registration
937
+	 * @throws EE_Error
938
+	 */
939
+	public function get_primary_registration()
940
+	{
941
+		if ($this->is_primary_registrant()) {
942
+			return $this;
943
+		}
944
+
945
+		//k reg_count !== 1 so let's get the EE_Registration object matching this txn_id and reg_count == 1
946
+		/** @var EE_Registration $primary_registrant */
947
+		$primary_registrant = EEM_Registration::instance()->get_one(array(
948
+			array(
949
+				'TXN_ID'    => $this->transaction_ID(),
950
+				'REG_count' => 1,
951
+			),
952
+		));
953
+		return $primary_registrant;
954
+	}
955
+
956
+
957
+	/**
958
+	 *        get  Attendee Number
959
+	 *
960
+	 * @access        public
961
+	 */
962
+	public function count()
963
+	{
964
+		return $this->get('REG_count');
965
+	}
966
+
967
+
968
+	/**
969
+	 *        get Group Size
970
+	 */
971
+	public function group_size()
972
+	{
973
+		return $this->get('REG_group_size');
974
+	}
975
+
976
+
977
+	/**
978
+	 *        get Registration Date
979
+	 */
980
+	public function date()
981
+	{
982
+		return $this->get('REG_date');
983
+	}
984
+
985
+
986
+	/**
987
+	 * gets a pretty date
988
+	 *
989
+	 * @param string $date_format
990
+	 * @param string $time_format
991
+	 * @return string
992
+	 * @throws EE_Error
993
+	 */
994
+	public function pretty_date($date_format = null, $time_format = null)
995
+	{
996
+		return $this->get_datetime('REG_date', $date_format, $time_format);
997
+	}
998
+
999
+
1000
+	/**
1001
+	 * final_price
1002
+	 * the registration's share of the transaction total, so that the
1003
+	 * sum of all the transaction's REG_final_prices equal the transaction's total
1004
+	 *
1005
+	 * @return float
1006
+	 * @throws EE_Error
1007
+	 */
1008
+	public function final_price()
1009
+	{
1010
+		return $this->get('REG_final_price');
1011
+	}
1012
+
1013
+
1014
+	/**
1015
+	 * pretty_final_price
1016
+	 *  final price as formatted string, with correct decimal places and currency symbol
1017
+	 *
1018
+	 * @return string
1019
+	 * @throws EE_Error
1020
+	 */
1021
+	public function pretty_final_price()
1022
+	{
1023
+		return $this->get_pretty('REG_final_price');
1024
+	}
1025
+
1026
+
1027
+	/**
1028
+	 * get paid (yeah)
1029
+	 *
1030
+	 * @return float
1031
+	 * @throws EE_Error
1032
+	 */
1033
+	public function paid()
1034
+	{
1035
+		return $this->get('REG_paid');
1036
+	}
1037
+
1038
+
1039
+	/**
1040
+	 * pretty_paid
1041
+	 *
1042
+	 * @return float
1043
+	 * @throws EE_Error
1044
+	 */
1045
+	public function pretty_paid()
1046
+	{
1047
+		return $this->get_pretty('REG_paid');
1048
+	}
1049
+
1050
+
1051
+	/**
1052
+	 * owes_monies_and_can_pay
1053
+	 * whether or not this registration has monies owing and it's' status allows payment
1054
+	 *
1055
+	 * @param array $requires_payment
1056
+	 * @return bool
1057
+	 * @throws EE_Error
1058
+	 */
1059
+	public function owes_monies_and_can_pay($requires_payment = array())
1060
+	{
1061
+		// these reg statuses require payment (if event is not free)
1062
+		$requires_payment = ! empty($requires_payment)
1063
+			? $requires_payment
1064
+			: EEM_Registration::reg_statuses_that_allow_payment();
1065
+		if (in_array($this->status_ID(), $requires_payment) &&
1066
+			$this->final_price() != 0 &&
1067
+			$this->final_price() != $this->paid()
1068
+		) {
1069
+			return true;
1070
+		} else {
1071
+			return false;
1072
+		}
1073
+	}
1074
+
1075
+
1076
+	/**
1077
+	 * Prints out the return value of $this->pretty_status()
1078
+	 *
1079
+	 * @param bool $show_icons
1080
+	 * @return void
1081
+	 * @throws EE_Error
1082
+	 */
1083
+	public function e_pretty_status($show_icons = false)
1084
+	{
1085
+		echo $this->pretty_status($show_icons);
1086
+	}
1087
+
1088
+
1089
+	/**
1090
+	 * Returns a nice version of the status for displaying to customers
1091
+	 *
1092
+	 * @param bool $show_icons
1093
+	 * @return string
1094
+	 * @throws EE_Error
1095
+	 */
1096
+	public function pretty_status($show_icons = false)
1097
+	{
1098
+		$status = EEM_Status::instance()->localized_status(
1099
+			array($this->status_ID() => esc_html__('unknown', 'event_espresso')),
1100
+			false,
1101
+			'sentence'
1102
+		);
1103
+		$icon   = '';
1104
+		switch ($this->status_ID()) {
1105
+			case EEM_Registration::status_id_approved:
1106
+				$icon = $show_icons
1107
+					? '<span class="dashicons dashicons-star-filled ee-icon-size-16 green-text"></span>'
1108
+					: '';
1109
+				break;
1110
+			case EEM_Registration::status_id_pending_payment:
1111
+				$icon = $show_icons
1112
+					? '<span class="dashicons dashicons-star-half ee-icon-size-16 orange-text"></span>'
1113
+					: '';
1114
+				break;
1115
+			case EEM_Registration::status_id_not_approved:
1116
+				$icon = $show_icons
1117
+					? '<span class="dashicons dashicons-marker ee-icon-size-16 orange-text"></span>'
1118
+					: '';
1119
+				break;
1120
+			case EEM_Registration::status_id_cancelled:
1121
+				$icon = $show_icons
1122
+					? '<span class="dashicons dashicons-no ee-icon-size-16 lt-grey-text"></span>'
1123
+					: '';
1124
+				break;
1125
+			case EEM_Registration::status_id_incomplete:
1126
+				$icon = $show_icons
1127
+					? '<span class="dashicons dashicons-no ee-icon-size-16 lt-orange-text"></span>'
1128
+					: '';
1129
+				break;
1130
+			case EEM_Registration::status_id_declined:
1131
+				$icon = $show_icons
1132
+					? '<span class="dashicons dashicons-no ee-icon-size-16 red-text"></span>'
1133
+					: '';
1134
+				break;
1135
+			case EEM_Registration::status_id_wait_list:
1136
+				$icon = $show_icons
1137
+					? '<span class="dashicons dashicons-clipboard ee-icon-size-16 purple-text"></span>'
1138
+					: '';
1139
+				break;
1140
+		}
1141
+		return $icon . $status[$this->status_ID()];
1142
+	}
1143
+
1144
+
1145
+	/**
1146
+	 *        get Attendee Is Going
1147
+	 */
1148
+	public function att_is_going()
1149
+	{
1150
+		return $this->get('REG_att_is_going');
1151
+	}
1152
+
1153
+
1154
+	/**
1155
+	 * Gets related answers
1156
+	 *
1157
+	 * @param array $query_params like EEM_Base::get_all
1158
+	 * @return EE_Answer[]
1159
+	 * @throws EE_Error
1160
+	 */
1161
+	public function answers($query_params = null)
1162
+	{
1163
+		return $this->get_many_related('Answer', $query_params);
1164
+	}
1165
+
1166
+
1167
+	/**
1168
+	 * Gets the registration's answer value to the specified question
1169
+	 * (either the question's ID or a question object)
1170
+	 *
1171
+	 * @param EE_Question|int $question
1172
+	 * @param bool            $pretty_value
1173
+	 * @return array|string if pretty_value= true, the result will always be a string
1174
+	 * (because the answer might be an array of answer values, so passing pretty_value=true
1175
+	 * will convert it into some kind of string)
1176
+	 * @throws EE_Error
1177
+	 */
1178
+	public function answer_value_to_question($question, $pretty_value = true)
1179
+	{
1180
+		$question_id = EEM_Question::instance()->ensure_is_ID($question);
1181
+		return EEM_Answer::instance()->get_answer_value_to_question($this, $question_id, $pretty_value);
1182
+	}
1183
+
1184
+
1185
+	/**
1186
+	 * question_groups
1187
+	 * returns an array of EE_Question_Group objects for this registration
1188
+	 *
1189
+	 * @return EE_Question_Group[]
1190
+	 * @throws EE_Error
1191
+	 * @throws EntityNotFoundException
1192
+	 */
1193
+	public function question_groups()
1194
+	{
1195
+		$question_groups = array();
1196
+		if ($this->event() instanceof EE_Event) {
1197
+			$question_groups = $this->event()->question_groups(
1198
+				array(
1199
+					array(
1200
+						'Event_Question_Group.EQG_primary' => $this->count() == 1 ? true : false,
1201
+					),
1202
+					'order_by' => array('QSG_order' => 'ASC'),
1203
+				)
1204
+			);
1205
+		}
1206
+		return $question_groups;
1207
+	}
1208
+
1209
+
1210
+	/**
1211
+	 * count_question_groups
1212
+	 * returns a count of the number of EE_Question_Group objects for this registration
1213
+	 *
1214
+	 * @return int
1215
+	 * @throws EE_Error
1216
+	 * @throws EntityNotFoundException
1217
+	 */
1218
+	public function count_question_groups()
1219
+	{
1220
+		$qg_count = 0;
1221
+		if ($this->event() instanceof EE_Event) {
1222
+			$qg_count = $this->event()->count_related(
1223
+				'Question_Group',
1224
+				array(
1225
+					array(
1226
+						'Event_Question_Group.EQG_primary' => $this->count() == 1 ? true : false,
1227
+					),
1228
+				)
1229
+			);
1230
+		}
1231
+		return $qg_count;
1232
+	}
1233
+
1234
+
1235
+	/**
1236
+	 * Returns the registration date in the 'standard' string format
1237
+	 * (function may be improved in the future to allow for different formats and timezones)
1238
+	 *
1239
+	 * @return string
1240
+	 * @throws EE_Error
1241
+	 */
1242
+	public function reg_date()
1243
+	{
1244
+		return $this->get_datetime('REG_date');
1245
+	}
1246
+
1247
+
1248
+	/**
1249
+	 * Gets the datetime-ticket for this registration (ie, it can be used to isolate
1250
+	 * the ticket this registration purchased, or the datetime they have registered
1251
+	 * to attend)
1252
+	 *
1253
+	 * @return EE_Datetime_Ticket
1254
+	 * @throws EE_Error
1255
+	 */
1256
+	public function datetime_ticket()
1257
+	{
1258
+		return $this->get_first_related('Datetime_Ticket');
1259
+	}
1260
+
1261
+
1262
+	/**
1263
+	 * Sets the registration's datetime_ticket.
1264
+	 *
1265
+	 * @param EE_Datetime_Ticket $datetime_ticket
1266
+	 * @return EE_Datetime_Ticket
1267
+	 * @throws EE_Error
1268
+	 */
1269
+	public function set_datetime_ticket($datetime_ticket)
1270
+	{
1271
+		return $this->_add_relation_to($datetime_ticket, 'Datetime_Ticket');
1272
+	}
1273
+
1274
+	/**
1275
+	 * Gets deleted
1276
+	 *
1277
+	 * @return bool
1278
+	 * @throws EE_Error
1279
+	 */
1280
+	public function deleted()
1281
+	{
1282
+		return $this->get('REG_deleted');
1283
+	}
1284
+
1285
+	/**
1286
+	 * Sets deleted
1287
+	 *
1288
+	 * @param boolean $deleted
1289
+	 * @return bool
1290
+	 * @throws EE_Error
1291
+	 * @throws RuntimeException
1292
+	 */
1293
+	public function set_deleted($deleted)
1294
+	{
1295
+		if ($deleted) {
1296
+			$this->delete();
1297
+		} else {
1298
+			$this->restore();
1299
+		}
1300
+	}
1301
+
1302
+
1303
+	/**
1304
+	 * Get the status object of this object
1305
+	 *
1306
+	 * @return EE_Status
1307
+	 * @throws EE_Error
1308
+	 */
1309
+	public function status_obj()
1310
+	{
1311
+		return $this->get_first_related('Status');
1312
+	}
1313
+
1314
+
1315
+	/**
1316
+	 * Returns the number of times this registration has checked into any of the datetimes
1317
+	 * its available for
1318
+	 *
1319
+	 * @return int
1320
+	 * @throws EE_Error
1321
+	 */
1322
+	public function count_checkins()
1323
+	{
1324
+		return $this->get_model()->count_related($this, 'Checkin');
1325
+	}
1326
+
1327
+
1328
+	/**
1329
+	 * Returns the number of current Check-ins this registration is checked into for any of the datetimes the
1330
+	 * registration is for.  Note, this is ONLY checked in (does not include checkedout)
1331
+	 *
1332
+	 * @return int
1333
+	 * @throws EE_Error
1334
+	 */
1335
+	public function count_checkins_not_checkedout()
1336
+	{
1337
+		return $this->get_model()->count_related($this, 'Checkin', array(array('CHK_in' => 1)));
1338
+	}
1339
+
1340
+
1341
+	/**
1342
+	 * The purpose of this method is simply to check whether this registration can checkin to the given datetime.
1343
+	 *
1344
+	 * @param int | EE_Datetime $DTT_OR_ID      The datetime the registration is being checked against
1345
+	 * @param bool              $check_approved This is used to indicate whether the caller wants can_checkin to also
1346
+	 *                                          consider registration status as well as datetime access.
1347
+	 * @return bool
1348
+	 * @throws EE_Error
1349
+	 */
1350
+	public function can_checkin($DTT_OR_ID, $check_approved = true)
1351
+	{
1352
+		$DTT_ID = EEM_Datetime::instance()->ensure_is_ID($DTT_OR_ID);
1353
+
1354
+		//first check registration status
1355
+		if (($check_approved && ! $this->is_approved()) || ! $DTT_ID) {
1356
+			return false;
1357
+		}
1358
+		//is there a datetime ticket that matches this dtt_ID?
1359
+		if (! (EEM_Datetime_Ticket::instance()->exists(array(
1360
+			array(
1361
+				'TKT_ID' => $this->get('TKT_ID'),
1362
+				'DTT_ID' => $DTT_ID,
1363
+			),
1364
+		)))
1365
+		) {
1366
+			return false;
1367
+		}
1368
+
1369
+		//final check is against TKT_uses
1370
+		return $this->verify_can_checkin_against_TKT_uses($DTT_ID);
1371
+	}
1372
+
1373
+
1374
+	/**
1375
+	 * This method verifies whether the user can checkin for the given datetime considering the max uses value set on
1376
+	 * the ticket. To do this,  a query is done to get the count of the datetime records already checked into.  If the
1377
+	 * datetime given does not have a check-in record and checking in for that datetime will exceed the allowed uses,
1378
+	 * then return false.  Otherwise return true.
1379
+	 *
1380
+	 * @param int | EE_Datetime $DTT_OR_ID The datetime the registration is being checked against
1381
+	 * @return bool true means can checkin.  false means cannot checkin.
1382
+	 * @throws EE_Error
1383
+	 */
1384
+	public function verify_can_checkin_against_TKT_uses($DTT_OR_ID)
1385
+	{
1386
+		$DTT_ID = EEM_Datetime::instance()->ensure_is_ID($DTT_OR_ID);
1387
+
1388
+		if (! $DTT_ID) {
1389
+			return false;
1390
+		}
1391
+
1392
+		$max_uses = $this->ticket() instanceof EE_Ticket ? $this->ticket()->uses() : EE_INF;
1393
+
1394
+		// if max uses is not set or equals infinity then return true cause its not a factor for whether user can
1395
+		// check-in or not.
1396
+		if (! $max_uses || $max_uses === EE_INF) {
1397
+			return true;
1398
+		}
1399
+
1400
+		//does this datetime have a checkin record?  If so, then the dtt count has already been verified so we can just
1401
+		//go ahead and toggle.
1402
+		if (EEM_Checkin::instance()->exists(array(array('REG_ID' => $this->ID(), 'DTT_ID' => $DTT_ID)))) {
1403
+			return true;
1404
+		}
1405
+
1406
+		//made it here so the last check is whether the number of checkins per unique datetime on this registration
1407
+		//disallows further check-ins.
1408
+		$count_unique_dtt_checkins = EEM_Checkin::instance()->count(array(
1409
+			array(
1410
+				'REG_ID' => $this->ID(),
1411
+				'CHK_in' => true,
1412
+			),
1413
+		), 'DTT_ID', true);
1414
+		// checkins have already reached their max number of uses
1415
+		// so registrant can NOT checkin
1416
+		if ($count_unique_dtt_checkins >= $max_uses) {
1417
+			EE_Error::add_error(
1418
+				esc_html__(
1419
+					'Check-in denied because number of datetime uses for the ticket has been reached or exceeded.',
1420
+					'event_espresso'
1421
+				),
1422
+				__FILE__,
1423
+				__FUNCTION__,
1424
+				__LINE__
1425
+			);
1426
+			return false;
1427
+		}
1428
+		return true;
1429
+	}
1430
+
1431
+
1432
+	/**
1433
+	 * toggle Check-in status for this registration
1434
+	 * Check-ins are toggled in the following order:
1435
+	 * never checked in -> checked in
1436
+	 * checked in -> checked out
1437
+	 * checked out -> checked in
1438
+	 *
1439
+	 * @param  int $DTT_ID  include specific datetime to toggle Check-in for.
1440
+	 *                      If not included or null, then it is assumed latest datetime is being toggled.
1441
+	 * @param bool $verify  If true then can_checkin() is used to verify whether the person
1442
+	 *                      can be checked in or not.  Otherwise this forces change in checkin status.
1443
+	 * @return bool|int     the chk_in status toggled to OR false if nothing got changed.
1444
+	 * @throws EE_Error
1445
+	 */
1446
+	public function toggle_checkin_status($DTT_ID = null, $verify = false)
1447
+	{
1448
+		if (empty($DTT_ID)) {
1449
+			$datetime = $this->get_latest_related_datetime();
1450
+			$DTT_ID   = $datetime instanceof EE_Datetime ? $datetime->ID() : 0;
1451
+			// verify the registration can checkin for the given DTT_ID
1452
+		} elseif (! $this->can_checkin($DTT_ID, $verify)) {
1453
+			EE_Error::add_error(
1454
+				sprintf(
1455
+					esc_html__(
1456
+						'The given registration (ID:%1$d) can not be checked in to the given DTT_ID (%2$d), because the registration does not have access',
1457
+						'event_espresso'
1458
+					),
1459
+					$this->ID(),
1460
+					$DTT_ID
1461
+				),
1462
+				__FILE__,
1463
+				__FUNCTION__,
1464
+				__LINE__
1465
+			);
1466
+			return false;
1467
+		}
1468
+		$status_paths = array(
1469
+			EE_Checkin::status_checked_never => EE_Checkin::status_checked_in,
1470
+			EE_Checkin::status_checked_in    => EE_Checkin::status_checked_out,
1471
+			EE_Checkin::status_checked_out   => EE_Checkin::status_checked_in,
1472
+		);
1473
+		//start by getting the current status so we know what status we'll be changing to.
1474
+		$cur_status = $this->check_in_status_for_datetime($DTT_ID, null);
1475
+		$status_to  = $status_paths[$cur_status];
1476
+		// database only records true for checked IN or false for checked OUT
1477
+		// no record ( null ) means checked in NEVER, but we obviously don't save that
1478
+		$new_status = $status_to === EE_Checkin::status_checked_in ? true : false;
1479
+		// add relation - note Check-ins are always creating new rows
1480
+		// because we are keeping track of Check-ins over time.
1481
+		// Eventually we'll probably want to show a list table
1482
+		// for the individual Check-ins so that they can be managed.
1483
+		$checkin = EE_Checkin::new_instance(array(
1484
+			'REG_ID' => $this->ID(),
1485
+			'DTT_ID' => $DTT_ID,
1486
+			'CHK_in' => $new_status,
1487
+		));
1488
+		// if the record could not be saved then return false
1489
+		if ($checkin->save() === 0) {
1490
+			if (WP_DEBUG) {
1491
+				global $wpdb;
1492
+				$error = sprintf(
1493
+					esc_html__(
1494
+						'Registration check in update failed because of the following database error: %1$s%2$s',
1495
+						'event_espresso'
1496
+					),
1497
+					'<br />',
1498
+					$wpdb->last_error
1499
+				);
1500
+			} else {
1501
+				$error = esc_html__(
1502
+					'Registration check in update failed because of an unknown database error',
1503
+					'event_espresso'
1504
+				);
1505
+			}
1506
+			EE_Error::add_error($error, __FILE__, __FUNCTION__, __LINE__);
1507
+			return false;
1508
+		}
1509
+		return $status_to;
1510
+	}
1511
+
1512
+
1513
+	/**
1514
+	 * Returns the latest datetime related to this registration (via the ticket attached to the registration).
1515
+	 * "Latest" is defined by the `DTT_EVT_start` column.
1516
+	 *
1517
+	 * @return EE_Datetime|null
1518
+	 * @throws EE_Error
1519
+	 */
1520
+	public function get_latest_related_datetime()
1521
+	{
1522
+		return EEM_Datetime::instance()->get_one(
1523
+			array(
1524
+				array(
1525
+					'Ticket.Registration.REG_ID' => $this->ID(),
1526
+				),
1527
+				'order_by' => array('DTT_EVT_start' => 'DESC'),
1528
+			)
1529
+		);
1530
+	}
1531
+
1532
+
1533
+	/**
1534
+	 * Returns the earliest datetime related to this registration (via the ticket attached to the registration).
1535
+	 * "Earliest" is defined by the `DTT_EVT_start` column.
1536
+	 *
1537
+	 * @throws EE_Error
1538
+	 */
1539
+	public function get_earliest_related_datetime()
1540
+	{
1541
+		return EEM_Datetime::instance()->get_one(
1542
+			array(
1543
+				array(
1544
+					'Ticket.Registration.REG_ID' => $this->ID(),
1545
+				),
1546
+				'order_by' => array('DTT_EVT_start' => 'ASC'),
1547
+			)
1548
+		);
1549
+	}
1550
+
1551
+
1552
+	/**
1553
+	 * This method simply returns the check-in status for this registration and the given datetime.
1554
+	 * If neither the datetime nor the checkin values are provided as arguments,
1555
+	 * then this will return the LATEST check-in status for the registration across all datetimes it belongs to.
1556
+	 *
1557
+	 * @param  int       $DTT_ID  The ID of the datetime we're checking against
1558
+	 *                            (if empty we'll get the primary datetime for
1559
+	 *                            this registration (via event) and use it's ID);
1560
+	 * @param EE_Checkin $checkin If present, we use the given checkin object rather than the dtt_id.
1561
+	 *
1562
+	 * @return int                Integer representing Check-in status.
1563
+	 * @throws EE_Error
1564
+	 */
1565
+	public function check_in_status_for_datetime($DTT_ID = 0, $checkin = null)
1566
+	{
1567
+		$checkin_query_params = array(
1568
+			'order_by' => array('CHK_timestamp' => 'DESC'),
1569
+		);
1570
+
1571
+		if ($DTT_ID > 0) {
1572
+			$checkin_query_params[0] = array('DTT_ID' => $DTT_ID);
1573
+		}
1574
+
1575
+		//get checkin object (if exists)
1576
+		$checkin = $checkin instanceof EE_Checkin
1577
+			? $checkin
1578
+			: $this->get_first_related('Checkin', $checkin_query_params);
1579
+		if ($checkin instanceof EE_Checkin) {
1580
+			if ($checkin->get('CHK_in')) {
1581
+				return EE_Checkin::status_checked_in; //checked in
1582
+			}
1583
+			return EE_Checkin::status_checked_out; //had checked in but is now checked out.
1584
+		}
1585
+		return EE_Checkin::status_checked_never; //never been checked in
1586
+	}
1587
+
1588
+
1589
+	/**
1590
+	 * This method returns a localized message for the toggled Check-in message.
1591
+	 *
1592
+	 * @param  int $DTT_ID include specific datetime to get the correct Check-in message.  If not included or null,
1593
+	 *                     then it is assumed Check-in for primary datetime was toggled.
1594
+	 * @param bool $error  This just flags that you want an error message returned. This is put in so that the error
1595
+	 *                     message can be customized with the attendee name.
1596
+	 * @return string internationalized message
1597
+	 * @throws EE_Error
1598
+	 */
1599
+	public function get_checkin_msg($DTT_ID, $error = false)
1600
+	{
1601
+		//let's get the attendee first so we can include the name of the attendee
1602
+		$attendee = $this->get_first_related('Attendee');
1603
+		if ($attendee instanceof EE_Attendee) {
1604
+			if ($error) {
1605
+				return sprintf(__("%s's check-in status was not changed.", "event_espresso"), $attendee->full_name());
1606
+			}
1607
+			$cur_status = $this->check_in_status_for_datetime($DTT_ID);
1608
+			//what is the status message going to be?
1609
+			switch ($cur_status) {
1610
+				case EE_Checkin::status_checked_never:
1611
+					return sprintf(__("%s has been removed from Check-in records", "event_espresso"),
1612
+						$attendee->full_name());
1613
+					break;
1614
+				case EE_Checkin::status_checked_in:
1615
+					return sprintf(__('%s has been checked in', 'event_espresso'), $attendee->full_name());
1616
+					break;
1617
+				case EE_Checkin::status_checked_out:
1618
+					return sprintf(__('%s has been checked out', 'event_espresso'), $attendee->full_name());
1619
+					break;
1620
+			}
1621
+		}
1622
+		return esc_html__("The check-in status could not be determined.", "event_espresso");
1623
+	}
1624
+
1625
+
1626
+	/**
1627
+	 * Returns the related EE_Transaction to this registration
1628
+	 *
1629
+	 * @return EE_Transaction
1630
+	 * @throws EE_Error
1631
+	 * @throws EntityNotFoundException
1632
+	 */
1633
+	public function transaction()
1634
+	{
1635
+		$transaction = $this->get_first_related('Transaction');
1636
+		if (! $transaction instanceof \EE_Transaction) {
1637
+			throw new EntityNotFoundException('Transaction ID', $this->transaction_ID());
1638
+		}
1639
+		return $transaction;
1640
+	}
1641
+
1642
+
1643
+	/**
1644
+	 *        get Registration Code
1645
+	 */
1646
+	public function reg_code()
1647
+	{
1648
+		return $this->get('REG_code');
1649
+	}
1650
+
1651
+
1652
+	/**
1653
+	 *        get Transaction ID
1654
+	 */
1655
+	public function transaction_ID()
1656
+	{
1657
+		return $this->get('TXN_ID');
1658
+	}
1659
+
1660
+
1661
+	/**
1662
+	 * @return int
1663
+	 * @throws EE_Error
1664
+	 */
1665
+	public function ticket_ID()
1666
+	{
1667
+		return $this->get('TKT_ID');
1668
+	}
1669
+
1670
+
1671
+	/**
1672
+	 *        Set Registration Code
1673
+	 *
1674
+	 * @access    public
1675
+	 * @param    string  $REG_code Registration Code
1676
+	 * @param    boolean $use_default
1677
+	 * @throws EE_Error
1678
+	 */
1679
+	public function set_reg_code($REG_code, $use_default = false)
1680
+	{
1681
+		if (empty($REG_code)) {
1682
+			EE_Error::add_error(
1683
+				esc_html__('REG_code can not be empty.', 'event_espresso'),
1684
+				__FILE__,
1685
+				__FUNCTION__,
1686
+				__LINE__
1687
+			);
1688
+			return;
1689
+		}
1690
+		if (! $this->reg_code()) {
1691
+			parent::set('REG_code', $REG_code, $use_default);
1692
+		} else {
1693
+			EE_Error::doing_it_wrong(
1694
+				__CLASS__ . '::' . __FUNCTION__,
1695
+				esc_html__('Can not change a registration REG_code once it has been set.', 'event_espresso'),
1696
+				'4.6.0'
1697
+			);
1698
+		}
1699
+	}
1700
+
1701
+
1702
+	/**
1703
+	 * Returns all other registrations in the same group as this registrant who have the same ticket option.
1704
+	 * Note, if you want to just get all registrations in the same transaction (group), use:
1705
+	 *    $registration->transaction()->registrations();
1706
+	 *
1707
+	 * @since 4.5.0
1708
+	 * @return EE_Registration[] or empty array if this isn't a group registration.
1709
+	 * @throws EE_Error
1710
+	 */
1711
+	public function get_all_other_registrations_in_group()
1712
+	{
1713
+		if ($this->group_size() < 2) {
1714
+			return array();
1715
+		}
1716
+
1717
+		$query[0] = array(
1718
+			'TXN_ID' => $this->transaction_ID(),
1719
+			'REG_ID' => array('!=', $this->ID()),
1720
+			'TKT_ID' => $this->ticket_ID(),
1721
+		);
1722
+		/** @var EE_Registration[] $registrations */
1723
+		$registrations = $this->get_model()->get_all($query);
1724
+		return $registrations;
1725
+	}
1726
+
1727
+	/**
1728
+	 * Return the link to the admin details for the object.
1729
+	 *
1730
+	 * @return string
1731
+	 * @throws EE_Error
1732
+	 */
1733
+	public function get_admin_details_link()
1734
+	{
1735
+		EE_Registry::instance()->load_helper('URL');
1736
+		return EEH_URL::add_query_args_and_nonce(
1737
+			array(
1738
+				'page'    => 'espresso_registrations',
1739
+				'action'  => 'view_registration',
1740
+				'_REG_ID' => $this->ID(),
1741
+			),
1742
+			admin_url('admin.php')
1743
+		);
1744
+	}
1745
+
1746
+	/**
1747
+	 * Returns the link to the editor for the object.  Sometimes this is the same as the details.
1748
+	 *
1749
+	 * @return string
1750
+	 * @throws EE_Error
1751
+	 */
1752
+	public function get_admin_edit_link()
1753
+	{
1754
+		return $this->get_admin_details_link();
1755
+	}
1756
+
1757
+	/**
1758
+	 * Returns the link to a settings page for the object.
1759
+	 *
1760
+	 * @return string
1761
+	 * @throws EE_Error
1762
+	 */
1763
+	public function get_admin_settings_link()
1764
+	{
1765
+		return $this->get_admin_details_link();
1766
+	}
1767
+
1768
+	/**
1769
+	 * Returns the link to the "overview" for the object (typically the "list table" view).
1770
+	 *
1771
+	 * @return string
1772
+	 */
1773
+	public function get_admin_overview_link()
1774
+	{
1775
+		EE_Registry::instance()->load_helper('URL');
1776
+		return EEH_URL::add_query_args_and_nonce(
1777
+			array(
1778
+				'page' => 'espresso_registrations',
1779
+			),
1780
+			admin_url('admin.php')
1781
+		);
1782
+	}
1783
+
1784
+
1785
+	/**
1786
+	 * @param array $query_params
1787
+	 *
1788
+	 * @return \EE_Registration[]
1789
+	 * @throws EE_Error
1790
+	 */
1791
+	public function payments($query_params = array())
1792
+	{
1793
+		return $this->get_many_related('Payment', $query_params);
1794
+	}
1795
+
1796
+
1797
+	/**
1798
+	 * @param array $query_params
1799
+	 *
1800
+	 * @return \EE_Registration_Payment[]
1801
+	 * @throws EE_Error
1802
+	 */
1803
+	public function registration_payments($query_params = array())
1804
+	{
1805
+		return $this->get_many_related('Registration_Payment', $query_params);
1806
+	}
1807
+
1808
+
1809
+	/**
1810
+	 * This grabs the payment method corresponding to the last payment made for the amount owing on the registration.
1811
+	 * Note: if there are no payments on the registration there will be no payment method returned.
1812
+	 *
1813
+	 * @return EE_Payment_Method|null
1814
+	 */
1815
+	public function payment_method()
1816
+	{
1817
+		return EEM_Payment_Method::instance()->get_last_used_for_registration($this);
1818
+	}
1819
+
1820
+
1821
+	/**
1822
+	 * @return \EE_Line_Item
1823
+	 * @throws EntityNotFoundException
1824
+	 * @throws EE_Error
1825
+	 */
1826
+	public function ticket_line_item()
1827
+	{
1828
+		$ticket            = $this->ticket();
1829
+		$transaction       = $this->transaction();
1830
+		$line_item         = null;
1831
+		$ticket_line_items = \EEH_Line_Item::get_line_items_by_object_type_and_IDs(
1832
+			$transaction->total_line_item(),
1833
+			'Ticket',
1834
+			array($ticket->ID())
1835
+		);
1836
+		foreach ($ticket_line_items as $ticket_line_item) {
1837
+			if (
1838
+				$ticket_line_item instanceof \EE_Line_Item
1839
+				&& $ticket_line_item->OBJ_type() === 'Ticket'
1840
+				&& $ticket_line_item->OBJ_ID() === $ticket->ID()
1841
+			) {
1842
+				$line_item = $ticket_line_item;
1843
+				break;
1844
+			}
1845
+		}
1846
+		if (! ($line_item instanceof \EE_Line_Item && $line_item->OBJ_type() === 'Ticket')) {
1847
+			throw new EntityNotFoundException('Line Item Ticket ID', $ticket->ID());
1848
+		}
1849
+		return $line_item;
1850
+	}
1851
+
1852
+
1853
+	/**
1854
+	 * Soft Deletes this model object.
1855
+	 *
1856
+	 * @return boolean | int
1857
+	 * @throws RuntimeException
1858
+	 * @throws EE_Error
1859
+	 */
1860
+	public function delete()
1861
+	{
1862
+		if ($this->update_extra_meta(EE_Registration::PRE_TRASH_REG_STATUS_KEY, $this->status_ID()) === true) {
1863
+			$this->set_status(EEM_Registration::status_id_cancelled);
1864
+		}
1865
+		return parent::delete();
1866
+	}
1867
+
1868
+
1869
+	/**
1870
+	 * Restores whatever the previous status was on a registration before it was trashed (if possible)
1871
+	 *
1872
+	 * @throws EE_Error
1873
+	 * @throws RuntimeException
1874
+	 */
1875
+	public function restore()
1876
+	{
1877
+		$previous_status = $this->get_extra_meta(
1878
+			EE_Registration::PRE_TRASH_REG_STATUS_KEY,
1879
+			true,
1880
+			EEM_Registration::status_id_cancelled
1881
+		);
1882
+		if ($previous_status) {
1883
+			$this->delete_extra_meta(EE_Registration::PRE_TRASH_REG_STATUS_KEY);
1884
+			$this->set_status($previous_status);
1885
+		}
1886
+		return parent::restore();
1887
+	}
1888
+
1889
+
1890
+	/**
1891
+	 * possibly toggle Registration status based on comparison of REG_paid vs REG_final_price
1892
+	 *
1893
+	 * @param  boolean $trigger_set_status_logic EE_Registration::set_status() can trigger additional logic
1894
+	 *                                           depending on whether the reg status changes to or from "Approved"
1895
+	 * @return boolean whether the Registration status was updated
1896
+	 * @throws EE_Error
1897
+	 * @throws RuntimeException
1898
+	 */
1899
+	public function updateStatusBasedOnTotalPaid($trigger_set_status_logic = true)
1900
+	{
1901
+		$paid = $this->paid();
1902
+		$price = $this->final_price();
1903
+		switch(true) {
1904
+			// overpaid or paid
1905
+			case EEH_Money::compare_floats($paid, $price, '>'):
1906
+			case EEH_Money::compare_floats($paid, $price):
1907
+				$new_status = EEM_Registration::status_id_approved;
1908
+				break;
1909
+			//  underpaid
1910
+			case EEH_Money::compare_floats($paid, $price, '<'):
1911
+				$new_status = EEM_Registration::status_id_pending_payment;
1912
+				break;
1913
+			// uhhh Houston...
1914
+			default:
1915
+				throw new RuntimeException(
1916
+					esc_html__('The total paid calculation for this registration is inaccurate.', 'event_espresso')
1917
+				);
1918
+		}
1919
+		if ($new_status !== $this->status_ID()) {
1920
+			if ($trigger_set_status_logic) {
1921
+				return $this->set_status($new_status);
1922
+			}
1923
+			parent::set('STS_ID', $new_status);
1924
+			return true;
1925
+		}
1926
+		return false;
1927
+	}
1928
+
1929
+
1930
+	/*************************** DEPRECATED ***************************/
1931
+
1932
+
1933
+	/**
1934
+	 * @deprecated
1935
+	 * @since     4.7.0
1936
+	 * @access    public
1937
+	 */
1938
+	public function price_paid()
1939
+	{
1940
+		EE_Error::doing_it_wrong('EE_Registration::price_paid()',
1941
+			esc_html__('This method is deprecated, please use EE_Registration::final_price() instead.', 'event_espresso'),
1942
+			'4.7.0');
1943
+		return $this->final_price();
1944
+	}
1945
+
1946
+
1947
+	/**
1948
+	 * @deprecated
1949
+	 * @since     4.7.0
1950
+	 * @access    public
1951
+	 * @param    float $REG_final_price
1952
+	 * @throws EE_Error
1953
+	 * @throws RuntimeException
1954
+	 */
1955
+	public function set_price_paid($REG_final_price = 0.00)
1956
+	{
1957
+		EE_Error::doing_it_wrong('EE_Registration::set_price_paid()',
1958
+			esc_html__('This method is deprecated, please use EE_Registration::set_final_price() instead.', 'event_espresso'),
1959
+			'4.7.0');
1960
+		$this->set_final_price($REG_final_price);
1961
+	}
1962
+
1963
+
1964
+	/**
1965
+	 * @deprecated
1966
+	 * @since 4.7.0
1967
+	 * @return string
1968
+	 * @throws EE_Error
1969
+	 */
1970
+	public function pretty_price_paid()
1971
+	{
1972
+		EE_Error::doing_it_wrong('EE_Registration::pretty_price_paid()',
1973
+			esc_html__('This method is deprecated, please use EE_Registration::pretty_final_price() instead.',
1974
+				'event_espresso'), '4.7.0');
1975
+		return $this->pretty_final_price();
1976
+	}
1977
+
1978
+
1979
+	/**
1980
+	 * Gets the primary datetime related to this registration via the related Event to this registration
1981
+	 *
1982
+	 * @deprecated 4.9.17
1983
+	 * @return EE_Datetime
1984
+	 * @throws EE_Error
1985
+	 * @throws EntityNotFoundException
1986
+	 */
1987
+	public function get_related_primary_datetime()
1988
+	{
1989
+		EE_Error::doing_it_wrong(
1990
+			__METHOD__,
1991
+			esc_html__(
1992
+				'Use EE_Registration::get_latest_related_datetime() or EE_Registration::get_earliest_related_datetime()',
1993
+				'event_espresso'
1994
+			),
1995
+			'4.9.17',
1996
+			'5.0.0'
1997
+		);
1998
+		return $this->event()->primary_datetime();
1999
+	}
2000 2000
 
2001 2001
 
2002 2002
 }
Please login to merge, or discard this patch.
Spacing   +14 added lines, -14 removed lines patch added patch discarded remove patch
@@ -120,7 +120,7 @@  discard block
 block discarded – undo
120 120
     {
121 121
         switch ($field_name) {
122 122
             case 'REG_code':
123
-                if (! empty($field_value) && $this->reg_code() === null) {
123
+                if ( ! empty($field_value) && $this->reg_code() === null) {
124 124
                     $this->set_reg_code($field_value, $use_default);
125 125
                 }
126 126
                 break;
@@ -181,7 +181,7 @@  discard block
 block discarded – undo
181 181
             // update status
182 182
             parent::set('STS_ID', $new_STS_ID, $use_default);
183 183
             $this->_update_if_canceled_or_declined($new_STS_ID, $old_STS_ID, $context);
184
-            if($this->statusChangeUpdatesTransaction($context)) {
184
+            if ($this->statusChangeUpdatesTransaction($context)) {
185 185
                 $this->updateTransactionAfterStatusChange();
186 186
             }
187 187
             do_action('AHEE__EE_Registration__set_status__after_update', $this, $old_STS_ID, $new_STS_ID, $context);
@@ -409,7 +409,7 @@  discard block
 block discarded – undo
409 409
     public function event()
410 410
     {
411 411
         $event = $this->get_first_related('Event');
412
-        if (! $event instanceof \EE_Event) {
412
+        if ( ! $event instanceof \EE_Event) {
413 413
             throw new EntityNotFoundException('Event ID', $this->event_ID());
414 414
         }
415 415
         return $event;
@@ -1100,7 +1100,7 @@  discard block
 block discarded – undo
1100 1100
             false,
1101 1101
             'sentence'
1102 1102
         );
1103
-        $icon   = '';
1103
+        $icon = '';
1104 1104
         switch ($this->status_ID()) {
1105 1105
             case EEM_Registration::status_id_approved:
1106 1106
                 $icon = $show_icons
@@ -1138,7 +1138,7 @@  discard block
 block discarded – undo
1138 1138
                     : '';
1139 1139
                 break;
1140 1140
         }
1141
-        return $icon . $status[$this->status_ID()];
1141
+        return $icon.$status[$this->status_ID()];
1142 1142
     }
1143 1143
 
1144 1144
 
@@ -1356,7 +1356,7 @@  discard block
 block discarded – undo
1356 1356
             return false;
1357 1357
         }
1358 1358
         //is there a datetime ticket that matches this dtt_ID?
1359
-        if (! (EEM_Datetime_Ticket::instance()->exists(array(
1359
+        if ( ! (EEM_Datetime_Ticket::instance()->exists(array(
1360 1360
             array(
1361 1361
                 'TKT_ID' => $this->get('TKT_ID'),
1362 1362
                 'DTT_ID' => $DTT_ID,
@@ -1385,7 +1385,7 @@  discard block
 block discarded – undo
1385 1385
     {
1386 1386
         $DTT_ID = EEM_Datetime::instance()->ensure_is_ID($DTT_OR_ID);
1387 1387
 
1388
-        if (! $DTT_ID) {
1388
+        if ( ! $DTT_ID) {
1389 1389
             return false;
1390 1390
         }
1391 1391
 
@@ -1393,7 +1393,7 @@  discard block
 block discarded – undo
1393 1393
 
1394 1394
         // if max uses is not set or equals infinity then return true cause its not a factor for whether user can
1395 1395
         // check-in or not.
1396
-        if (! $max_uses || $max_uses === EE_INF) {
1396
+        if ( ! $max_uses || $max_uses === EE_INF) {
1397 1397
             return true;
1398 1398
         }
1399 1399
 
@@ -1449,7 +1449,7 @@  discard block
 block discarded – undo
1449 1449
             $datetime = $this->get_latest_related_datetime();
1450 1450
             $DTT_ID   = $datetime instanceof EE_Datetime ? $datetime->ID() : 0;
1451 1451
             // verify the registration can checkin for the given DTT_ID
1452
-        } elseif (! $this->can_checkin($DTT_ID, $verify)) {
1452
+        } elseif ( ! $this->can_checkin($DTT_ID, $verify)) {
1453 1453
             EE_Error::add_error(
1454 1454
                 sprintf(
1455 1455
                     esc_html__(
@@ -1633,7 +1633,7 @@  discard block
 block discarded – undo
1633 1633
     public function transaction()
1634 1634
     {
1635 1635
         $transaction = $this->get_first_related('Transaction');
1636
-        if (! $transaction instanceof \EE_Transaction) {
1636
+        if ( ! $transaction instanceof \EE_Transaction) {
1637 1637
             throw new EntityNotFoundException('Transaction ID', $this->transaction_ID());
1638 1638
         }
1639 1639
         return $transaction;
@@ -1687,11 +1687,11 @@  discard block
 block discarded – undo
1687 1687
             );
1688 1688
             return;
1689 1689
         }
1690
-        if (! $this->reg_code()) {
1690
+        if ( ! $this->reg_code()) {
1691 1691
             parent::set('REG_code', $REG_code, $use_default);
1692 1692
         } else {
1693 1693
             EE_Error::doing_it_wrong(
1694
-                __CLASS__ . '::' . __FUNCTION__,
1694
+                __CLASS__.'::'.__FUNCTION__,
1695 1695
                 esc_html__('Can not change a registration REG_code once it has been set.', 'event_espresso'),
1696 1696
                 '4.6.0'
1697 1697
             );
@@ -1843,7 +1843,7 @@  discard block
 block discarded – undo
1843 1843
                 break;
1844 1844
             }
1845 1845
         }
1846
-        if (! ($line_item instanceof \EE_Line_Item && $line_item->OBJ_type() === 'Ticket')) {
1846
+        if ( ! ($line_item instanceof \EE_Line_Item && $line_item->OBJ_type() === 'Ticket')) {
1847 1847
             throw new EntityNotFoundException('Line Item Ticket ID', $ticket->ID());
1848 1848
         }
1849 1849
         return $line_item;
@@ -1900,7 +1900,7 @@  discard block
 block discarded – undo
1900 1900
     {
1901 1901
         $paid = $this->paid();
1902 1902
         $price = $this->final_price();
1903
-        switch(true) {
1903
+        switch (true) {
1904 1904
             // overpaid or paid
1905 1905
             case EEH_Money::compare_floats($paid, $price, '>'):
1906 1906
             case EEH_Money::compare_floats($paid, $price):
Please login to merge, or discard this patch.
core/services/Benchmark.php 2 patches
Indentation   +303 added lines, -303 removed lines patch added patch discarded remove patch
@@ -17,309 +17,309 @@
 block discarded – undo
17 17
 class Benchmark
18 18
 {
19 19
 
20
-    /**
21
-     * array containing the start time for the timers
22
-     */
23
-    private static $start_times;
24
-
25
-    /**
26
-     * array containing all the timer'd times, which can be outputted via show_times()
27
-     */
28
-    private static $times = array();
29
-
30
-    /**
31
-     * @var array
32
-     */
33
-    protected static $memory_usage = array();
34
-
35
-
36
-
37
-    /**
38
-     * whether to benchmark code or not
39
-     */
40
-    public static function doNotRun()
41
-    {
42
-        return ! WP_DEBUG || (defined('DOING_AJAX') && DOING_AJAX);
43
-    }
44
-
45
-
46
-
47
-    /**
48
-     * resetTimes
49
-     */
50
-    public static function resetTimes()
51
-    {
52
-        Benchmark::$times = array();
53
-    }
54
-
55
-
56
-
57
-    /**
58
-     * Add Benchmark::startTimer() before a block of code you want to measure the performance of
59
-     *
60
-     * @param null $timer_name
61
-     */
62
-    public static function startTimer($timer_name = null)
63
-    {
64
-        if (Benchmark::doNotRun()) {
65
-            return;
66
-        }
67
-        $timer_name = $timer_name !== '' ? $timer_name : get_called_class();
68
-        Benchmark::$start_times[$timer_name] = microtime(true);
69
-    }
70
-
71
-
72
-
73
-    /**
74
-     * Add Benchmark::stopTimer() after a block of code you want to measure the performance of
75
-     *
76
-     * @param string $timer_name
77
-     */
78
-    public static function stopTimer($timer_name = '')
79
-    {
80
-        if (Benchmark::doNotRun()) {
81
-            return;
82
-        }
83
-        $timer_name = $timer_name !== '' ? $timer_name : get_called_class();
84
-        if (isset(Benchmark::$start_times[$timer_name])) {
85
-            $start_time = Benchmark::$start_times[$timer_name];
86
-            unset(Benchmark::$start_times[$timer_name]);
87
-        } else {
88
-            $start_time = array_pop(Benchmark::$start_times);
89
-        }
90
-        Benchmark::$times[$timer_name] = number_format(microtime(true) - $start_time, 8);
91
-    }
92
-
93
-
94
-
95
-    /**
96
-     * Measure the memory usage by PHP so far.
97
-     *
98
-     * @param string  $label      The label to show for this time eg "Start of calling Some_Class::some_function"
99
-     * @param boolean $output_now whether to echo now, or wait until EEH_Debug_Tools::show_times() is called
100
-     * @param bool    $formatted
101
-     * @return void
102
-     */
103
-    public static function measureMemory($label = 'memory usage', $output_now = false, $formatted = true)
104
-    {
105
-        if (Benchmark::doNotRun()) {
106
-            return;
107
-        }
108
-        $memory_used = Benchmark::convert(memory_get_usage(true));
109
-        Benchmark::$memory_usage[$label] = $memory_used;
110
-        if ($output_now) {
111
-            echo $formatted
112
-                ? "<br>{$label} : {$memory_used}"
113
-                : "\n {$label} : {$memory_used}";
114
-        }
115
-    }
116
-
117
-
118
-
119
-    /**
120
-     * will display the benchmarking results at shutdown
121
-     *
122
-     * @param bool $formatted
123
-     * @return void
124
-     */
125
-    public static function displayResultsAtShutdown($formatted = true)
126
-    {
127
-        add_action(
128
-            'shutdown',
129
-            function () use ($formatted) {
130
-                Benchmark::displayResults(true, $formatted);
131
-            }
132
-        );
133
-    }
134
-
135
-
136
-
137
-    /**
138
-     * will display the benchmarking results at shutdown
139
-     *
140
-     * @param string $filepath
141
-     * @param bool   $formatted
142
-     * @param bool   $append
143
-     * @return void
144
-     */
145
-    public static function writeResultsAtShutdown($filepath = '', $formatted = true, $append = true)
146
-    {
147
-        add_action(
148
-            'shutdown',
149
-            function () use ($filepath, $formatted, $append) {
150
-                Benchmark::writeResultsToFile($filepath, $formatted, $append);
151
-            }
152
-        );
153
-    }
154
-
155
-
156
-
157
-    /**
158
-     * @param bool $formatted
159
-     * @return string
160
-     */
161
-    private static function generateResults($formatted = true)
162
-    {
163
-        if (Benchmark::doNotRun()) {
164
-            return '';
165
-        }
166
-        $output = '';
167
-        if (! empty(Benchmark::$times)) {
168
-            $total = 0;
169
-            $output .= $formatted
170
-                ? '<span style="color:#999999; font-size:.8em;">( time in milliseconds )</span><br />'
171
-                : '';
172
-            foreach (Benchmark::$times as $timer_name => $total_time) {
173
-                $output .= Benchmark::formatTime($timer_name, $total_time, $formatted);
174
-                $output .= $formatted ? '<br />'  : "\n";
175
-                $total += $total_time;
176
-            }
177
-            if($formatted) {
178
-                $output .= '<br />';
179
-                $output .= '<h4>TOTAL TIME</h4>';
180
-                $output .= Benchmark::formatTime('', $total, $formatted);
181
-                $output .= '<span style="color:#999999; font-size:.8em;"> milliseconds</span><br />';
182
-                $output .= '<br />';
183
-                $output .= '<h5>Performance scale (from best to worse)</h5>';
184
-                $output .= '<span style="color:mediumpurple">Like wow! How about a Scooby snack?</span><br />';
185
-                $output .= '<span style="color:deepskyblue">Like...no way man!</span><br />';
186
-                $output .= '<span style="color:limegreen">Like...groovy!</span><br />';
187
-                $output .= '<span style="color:gold">Ruh Oh</span><br />';
188
-                $output .= '<span style="color:darkorange">Zoinks!</span><br />';
189
-                $output .= '<span style="color:red">Like...HEEELLLP</span><br />';
190
-            }
191
-        }
192
-        if (! empty(Benchmark::$memory_usage)) {
193
-            $output .= $formatted
194
-                ? '<h5>Memory</h5>'
195
-                : "\nMemory";
196
-            foreach (Benchmark::$memory_usage as $label => $memory_usage) {
197
-                $output .= $formatted
198
-                    ? '<br />'
199
-                    : "\n";
200
-                $output .= "{$memory_usage} : {$label}";
201
-            }
202
-        }
203
-        if (empty($output)) {
204
-            return '';
205
-        }
206
-        $output = $formatted
207
-            ? '<div style="border:1px solid #dddddd; background-color:#ffffff;'
208
-              . (is_admin()
209
-                ? ' margin:2em 2em 2em 180px;'
210
-                : ' margin:2em;')
211
-              . ' padding:2em;">'
212
-              . '<h4>BENCHMARKING</h4>'
213
-              . $output
214
-              . '</div>'
215
-            : $output;
216
-        return $output;
217
-    }
218
-
219
-
220
-
221
-    /**
222
-     * @param bool $echo
223
-     * @param bool $formatted
224
-     * @return string
225
-     */
226
-    public static function displayResults($echo = true, $formatted = true)
227
-    {
228
-        $results = Benchmark::generateResults($formatted);
229
-        if ($echo) {
230
-            echo $results;
231
-            $results = '';
232
-        }
233
-        return $results;
234
-    }
235
-
236
-
237
-
238
-    /**
239
-     * @param string $filepath
240
-     * @param bool   $formatted
241
-     * @param bool   $append
242
-     */
243
-    public static function writeResultsToFile($filepath = '', $formatted = true, $append = true)
244
-    {
245
-        $filepath = ! empty($filepath) && is_readable(dirname($filepath))
246
-            ? $filepath
247
-            : '';
248
-        if( empty($filepath)) {
249
-            $filepath = EVENT_ESPRESSO_UPLOAD_DIR . 'logs/benchmarking-' . date('Y-m-d') . '.html';
250
-        }
251
-        file_put_contents(
252
-            $filepath,
253
-            "\n" . date('Y-m-d H:i:s') . Benchmark::generateResults($formatted),
254
-            $append ? FILE_APPEND | LOCK_EX : LOCK_EX
255
-        );
256
-    }
257
-
258
-
259
-
260
-    /**
261
-     * Converts a measure of memory bytes into the most logical units (eg kb, mb, etc)
262
-     *
263
-     * @param int $size
264
-     * @return string
265
-     */
266
-    public static function convert($size)
267
-    {
268
-        $unit = array('b', 'kb', 'mb', 'gb', 'tb', 'pb');
269
-        return round(
270
-            $size / pow(1024, $i = floor(log($size, 1024))),
271
-            2
272
-        ) . ' ' . $unit[absint($i)];
273
-    }
274
-
275
-
276
-
277
-    /**
278
-     * @param string $timer_name
279
-     * @param float  $total_time
280
-     * @param bool   $formatted
281
-     * @return string
282
-     */
283
-    public static function formatTime($timer_name, $total_time, $formatted = true)
284
-    {
285
-        $total_time *= 1000;
286
-        switch ($total_time) {
287
-            case $total_time > 12500 :
288
-                $color = 'red';
289
-                $bold = 'bold';
290
-                break;
291
-            case $total_time > 2500 :
292
-                $color = 'darkorange';
293
-                $bold = 'bold';
294
-                break;
295
-            case $total_time > 500 :
296
-                $color = 'gold';
297
-                $bold = 'bold';
298
-                break;
299
-            case $total_time > 100 :
300
-                $color = 'limegreen';
301
-                $bold = 'normal';
302
-                break;
303
-            case $total_time > 20 :
304
-                $color = 'deepskyblue';
305
-                $bold = 'normal';
306
-                break;
307
-            default :
308
-                $color = 'mediumpurple';
309
-                $bold = 'normal';
310
-                break;
311
-        }
312
-        return $formatted
313
-            ? '<span style="min-width: 10px; margin:0 1em; color:'
314
-               . $color
315
-               . '; font-weight:'
316
-               . $bold
317
-               . '; font-size:1.2em;">'
318
-               . str_pad(number_format($total_time, 3), 9, '0', STR_PAD_LEFT)
319
-               . '</span> '
320
-               . $timer_name
321
-            :  str_pad(number_format($total_time, 3), 9, '0', STR_PAD_LEFT);
322
-    }
20
+	/**
21
+	 * array containing the start time for the timers
22
+	 */
23
+	private static $start_times;
24
+
25
+	/**
26
+	 * array containing all the timer'd times, which can be outputted via show_times()
27
+	 */
28
+	private static $times = array();
29
+
30
+	/**
31
+	 * @var array
32
+	 */
33
+	protected static $memory_usage = array();
34
+
35
+
36
+
37
+	/**
38
+	 * whether to benchmark code or not
39
+	 */
40
+	public static function doNotRun()
41
+	{
42
+		return ! WP_DEBUG || (defined('DOING_AJAX') && DOING_AJAX);
43
+	}
44
+
45
+
46
+
47
+	/**
48
+	 * resetTimes
49
+	 */
50
+	public static function resetTimes()
51
+	{
52
+		Benchmark::$times = array();
53
+	}
54
+
55
+
56
+
57
+	/**
58
+	 * Add Benchmark::startTimer() before a block of code you want to measure the performance of
59
+	 *
60
+	 * @param null $timer_name
61
+	 */
62
+	public static function startTimer($timer_name = null)
63
+	{
64
+		if (Benchmark::doNotRun()) {
65
+			return;
66
+		}
67
+		$timer_name = $timer_name !== '' ? $timer_name : get_called_class();
68
+		Benchmark::$start_times[$timer_name] = microtime(true);
69
+	}
70
+
71
+
72
+
73
+	/**
74
+	 * Add Benchmark::stopTimer() after a block of code you want to measure the performance of
75
+	 *
76
+	 * @param string $timer_name
77
+	 */
78
+	public static function stopTimer($timer_name = '')
79
+	{
80
+		if (Benchmark::doNotRun()) {
81
+			return;
82
+		}
83
+		$timer_name = $timer_name !== '' ? $timer_name : get_called_class();
84
+		if (isset(Benchmark::$start_times[$timer_name])) {
85
+			$start_time = Benchmark::$start_times[$timer_name];
86
+			unset(Benchmark::$start_times[$timer_name]);
87
+		} else {
88
+			$start_time = array_pop(Benchmark::$start_times);
89
+		}
90
+		Benchmark::$times[$timer_name] = number_format(microtime(true) - $start_time, 8);
91
+	}
92
+
93
+
94
+
95
+	/**
96
+	 * Measure the memory usage by PHP so far.
97
+	 *
98
+	 * @param string  $label      The label to show for this time eg "Start of calling Some_Class::some_function"
99
+	 * @param boolean $output_now whether to echo now, or wait until EEH_Debug_Tools::show_times() is called
100
+	 * @param bool    $formatted
101
+	 * @return void
102
+	 */
103
+	public static function measureMemory($label = 'memory usage', $output_now = false, $formatted = true)
104
+	{
105
+		if (Benchmark::doNotRun()) {
106
+			return;
107
+		}
108
+		$memory_used = Benchmark::convert(memory_get_usage(true));
109
+		Benchmark::$memory_usage[$label] = $memory_used;
110
+		if ($output_now) {
111
+			echo $formatted
112
+				? "<br>{$label} : {$memory_used}"
113
+				: "\n {$label} : {$memory_used}";
114
+		}
115
+	}
116
+
117
+
118
+
119
+	/**
120
+	 * will display the benchmarking results at shutdown
121
+	 *
122
+	 * @param bool $formatted
123
+	 * @return void
124
+	 */
125
+	public static function displayResultsAtShutdown($formatted = true)
126
+	{
127
+		add_action(
128
+			'shutdown',
129
+			function () use ($formatted) {
130
+				Benchmark::displayResults(true, $formatted);
131
+			}
132
+		);
133
+	}
134
+
135
+
136
+
137
+	/**
138
+	 * will display the benchmarking results at shutdown
139
+	 *
140
+	 * @param string $filepath
141
+	 * @param bool   $formatted
142
+	 * @param bool   $append
143
+	 * @return void
144
+	 */
145
+	public static function writeResultsAtShutdown($filepath = '', $formatted = true, $append = true)
146
+	{
147
+		add_action(
148
+			'shutdown',
149
+			function () use ($filepath, $formatted, $append) {
150
+				Benchmark::writeResultsToFile($filepath, $formatted, $append);
151
+			}
152
+		);
153
+	}
154
+
155
+
156
+
157
+	/**
158
+	 * @param bool $formatted
159
+	 * @return string
160
+	 */
161
+	private static function generateResults($formatted = true)
162
+	{
163
+		if (Benchmark::doNotRun()) {
164
+			return '';
165
+		}
166
+		$output = '';
167
+		if (! empty(Benchmark::$times)) {
168
+			$total = 0;
169
+			$output .= $formatted
170
+				? '<span style="color:#999999; font-size:.8em;">( time in milliseconds )</span><br />'
171
+				: '';
172
+			foreach (Benchmark::$times as $timer_name => $total_time) {
173
+				$output .= Benchmark::formatTime($timer_name, $total_time, $formatted);
174
+				$output .= $formatted ? '<br />'  : "\n";
175
+				$total += $total_time;
176
+			}
177
+			if($formatted) {
178
+				$output .= '<br />';
179
+				$output .= '<h4>TOTAL TIME</h4>';
180
+				$output .= Benchmark::formatTime('', $total, $formatted);
181
+				$output .= '<span style="color:#999999; font-size:.8em;"> milliseconds</span><br />';
182
+				$output .= '<br />';
183
+				$output .= '<h5>Performance scale (from best to worse)</h5>';
184
+				$output .= '<span style="color:mediumpurple">Like wow! How about a Scooby snack?</span><br />';
185
+				$output .= '<span style="color:deepskyblue">Like...no way man!</span><br />';
186
+				$output .= '<span style="color:limegreen">Like...groovy!</span><br />';
187
+				$output .= '<span style="color:gold">Ruh Oh</span><br />';
188
+				$output .= '<span style="color:darkorange">Zoinks!</span><br />';
189
+				$output .= '<span style="color:red">Like...HEEELLLP</span><br />';
190
+			}
191
+		}
192
+		if (! empty(Benchmark::$memory_usage)) {
193
+			$output .= $formatted
194
+				? '<h5>Memory</h5>'
195
+				: "\nMemory";
196
+			foreach (Benchmark::$memory_usage as $label => $memory_usage) {
197
+				$output .= $formatted
198
+					? '<br />'
199
+					: "\n";
200
+				$output .= "{$memory_usage} : {$label}";
201
+			}
202
+		}
203
+		if (empty($output)) {
204
+			return '';
205
+		}
206
+		$output = $formatted
207
+			? '<div style="border:1px solid #dddddd; background-color:#ffffff;'
208
+			  . (is_admin()
209
+				? ' margin:2em 2em 2em 180px;'
210
+				: ' margin:2em;')
211
+			  . ' padding:2em;">'
212
+			  . '<h4>BENCHMARKING</h4>'
213
+			  . $output
214
+			  . '</div>'
215
+			: $output;
216
+		return $output;
217
+	}
218
+
219
+
220
+
221
+	/**
222
+	 * @param bool $echo
223
+	 * @param bool $formatted
224
+	 * @return string
225
+	 */
226
+	public static function displayResults($echo = true, $formatted = true)
227
+	{
228
+		$results = Benchmark::generateResults($formatted);
229
+		if ($echo) {
230
+			echo $results;
231
+			$results = '';
232
+		}
233
+		return $results;
234
+	}
235
+
236
+
237
+
238
+	/**
239
+	 * @param string $filepath
240
+	 * @param bool   $formatted
241
+	 * @param bool   $append
242
+	 */
243
+	public static function writeResultsToFile($filepath = '', $formatted = true, $append = true)
244
+	{
245
+		$filepath = ! empty($filepath) && is_readable(dirname($filepath))
246
+			? $filepath
247
+			: '';
248
+		if( empty($filepath)) {
249
+			$filepath = EVENT_ESPRESSO_UPLOAD_DIR . 'logs/benchmarking-' . date('Y-m-d') . '.html';
250
+		}
251
+		file_put_contents(
252
+			$filepath,
253
+			"\n" . date('Y-m-d H:i:s') . Benchmark::generateResults($formatted),
254
+			$append ? FILE_APPEND | LOCK_EX : LOCK_EX
255
+		);
256
+	}
257
+
258
+
259
+
260
+	/**
261
+	 * Converts a measure of memory bytes into the most logical units (eg kb, mb, etc)
262
+	 *
263
+	 * @param int $size
264
+	 * @return string
265
+	 */
266
+	public static function convert($size)
267
+	{
268
+		$unit = array('b', 'kb', 'mb', 'gb', 'tb', 'pb');
269
+		return round(
270
+			$size / pow(1024, $i = floor(log($size, 1024))),
271
+			2
272
+		) . ' ' . $unit[absint($i)];
273
+	}
274
+
275
+
276
+
277
+	/**
278
+	 * @param string $timer_name
279
+	 * @param float  $total_time
280
+	 * @param bool   $formatted
281
+	 * @return string
282
+	 */
283
+	public static function formatTime($timer_name, $total_time, $formatted = true)
284
+	{
285
+		$total_time *= 1000;
286
+		switch ($total_time) {
287
+			case $total_time > 12500 :
288
+				$color = 'red';
289
+				$bold = 'bold';
290
+				break;
291
+			case $total_time > 2500 :
292
+				$color = 'darkorange';
293
+				$bold = 'bold';
294
+				break;
295
+			case $total_time > 500 :
296
+				$color = 'gold';
297
+				$bold = 'bold';
298
+				break;
299
+			case $total_time > 100 :
300
+				$color = 'limegreen';
301
+				$bold = 'normal';
302
+				break;
303
+			case $total_time > 20 :
304
+				$color = 'deepskyblue';
305
+				$bold = 'normal';
306
+				break;
307
+			default :
308
+				$color = 'mediumpurple';
309
+				$bold = 'normal';
310
+				break;
311
+		}
312
+		return $formatted
313
+			? '<span style="min-width: 10px; margin:0 1em; color:'
314
+			   . $color
315
+			   . '; font-weight:'
316
+			   . $bold
317
+			   . '; font-size:1.2em;">'
318
+			   . str_pad(number_format($total_time, 3), 9, '0', STR_PAD_LEFT)
319
+			   . '</span> '
320
+			   . $timer_name
321
+			:  str_pad(number_format($total_time, 3), 9, '0', STR_PAD_LEFT);
322
+	}
323 323
 
324 324
 
325 325
 
Please login to merge, or discard this patch.
Spacing   +10 added lines, -10 removed lines patch added patch discarded remove patch
@@ -126,7 +126,7 @@  discard block
 block discarded – undo
126 126
     {
127 127
         add_action(
128 128
             'shutdown',
129
-            function () use ($formatted) {
129
+            function() use ($formatted) {
130 130
                 Benchmark::displayResults(true, $formatted);
131 131
             }
132 132
         );
@@ -146,7 +146,7 @@  discard block
 block discarded – undo
146 146
     {
147 147
         add_action(
148 148
             'shutdown',
149
-            function () use ($filepath, $formatted, $append) {
149
+            function() use ($filepath, $formatted, $append) {
150 150
                 Benchmark::writeResultsToFile($filepath, $formatted, $append);
151 151
             }
152 152
         );
@@ -164,17 +164,17 @@  discard block
 block discarded – undo
164 164
             return '';
165 165
         }
166 166
         $output = '';
167
-        if (! empty(Benchmark::$times)) {
167
+        if ( ! empty(Benchmark::$times)) {
168 168
             $total = 0;
169 169
             $output .= $formatted
170 170
                 ? '<span style="color:#999999; font-size:.8em;">( time in milliseconds )</span><br />'
171 171
                 : '';
172 172
             foreach (Benchmark::$times as $timer_name => $total_time) {
173 173
                 $output .= Benchmark::formatTime($timer_name, $total_time, $formatted);
174
-                $output .= $formatted ? '<br />'  : "\n";
174
+                $output .= $formatted ? '<br />' : "\n";
175 175
                 $total += $total_time;
176 176
             }
177
-            if($formatted) {
177
+            if ($formatted) {
178 178
                 $output .= '<br />';
179 179
                 $output .= '<h4>TOTAL TIME</h4>';
180 180
                 $output .= Benchmark::formatTime('', $total, $formatted);
@@ -189,7 +189,7 @@  discard block
 block discarded – undo
189 189
                 $output .= '<span style="color:red">Like...HEEELLLP</span><br />';
190 190
             }
191 191
         }
192
-        if (! empty(Benchmark::$memory_usage)) {
192
+        if ( ! empty(Benchmark::$memory_usage)) {
193 193
             $output .= $formatted
194 194
                 ? '<h5>Memory</h5>'
195 195
                 : "\nMemory";
@@ -245,12 +245,12 @@  discard block
 block discarded – undo
245 245
         $filepath = ! empty($filepath) && is_readable(dirname($filepath))
246 246
             ? $filepath
247 247
             : '';
248
-        if( empty($filepath)) {
249
-            $filepath = EVENT_ESPRESSO_UPLOAD_DIR . 'logs/benchmarking-' . date('Y-m-d') . '.html';
248
+        if (empty($filepath)) {
249
+            $filepath = EVENT_ESPRESSO_UPLOAD_DIR.'logs/benchmarking-'.date('Y-m-d').'.html';
250 250
         }
251 251
         file_put_contents(
252 252
             $filepath,
253
-            "\n" . date('Y-m-d H:i:s') . Benchmark::generateResults($formatted),
253
+            "\n".date('Y-m-d H:i:s').Benchmark::generateResults($formatted),
254 254
             $append ? FILE_APPEND | LOCK_EX : LOCK_EX
255 255
         );
256 256
     }
@@ -269,7 +269,7 @@  discard block
 block discarded – undo
269 269
         return round(
270 270
             $size / pow(1024, $i = floor(log($size, 1024))),
271 271
             2
272
-        ) . ' ' . $unit[absint($i)];
272
+        ).' '.$unit[absint($i)];
273 273
     }
274 274
 
275 275
 
Please login to merge, or discard this patch.
core/domain/services/registration/CopyRegistrationService.php 2 patches
Indentation   +140 added lines, -140 removed lines patch added patch discarded remove patch
@@ -12,7 +12,7 @@  discard block
 block discarded – undo
12 12
 use RuntimeException;
13 13
 
14 14
 if ( ! defined('EVENT_ESPRESSO_VERSION')) {
15
-    exit('No direct script access allowed');
15
+	exit('No direct script access allowed');
16 16
 }
17 17
 
18 18
 
@@ -30,145 +30,145 @@  discard block
 block discarded – undo
30 30
 {
31 31
 
32 32
 
33
-    /**
34
-     * @param EE_Registration $target_registration
35
-     * @param EE_Registration $registration_to_copy
36
-     * @return bool
37
-     * @throws UnexpectedEntityException
38
-     * @throws EntityNotFoundException
39
-     * @throws RuntimeException
40
-     * @throws EE_Error
41
-     */
42
-    public function copyRegistrationDetails(
43
-        EE_Registration $target_registration,
44
-        EE_Registration $registration_to_copy
45
-    ) {
46
-        // copy attendee
47
-        $target_registration->set_attendee_id($registration_to_copy->attendee_ID());
48
-        $target_registration->updateStatusBasedOnTotalPaid(false);
49
-        $target_registration->save();
50
-        // get answers to previous reg questions
51
-        $answers = $this->reindexAnswersByQuestionId($registration_to_copy->answers());
52
-        // get questions to new event reg form
53
-        $new_event       = $target_registration->event();
54
-        $question_groups = $new_event->question_groups(
55
-            array(
56
-                array(
57
-                    'Event.EVT_ID'                     => $new_event->ID(),
58
-                    'Event_Question_Group.EQG_primary' => $registration_to_copy->is_primary_registrant(),
59
-                ),
60
-                'order_by' => array('QSG_order' => 'ASC'),
61
-            )
62
-        );
63
-        foreach ($question_groups as $question_group) {
64
-            if ($question_group instanceof \EE_Question_Group) {
65
-                foreach ($question_group->questions() as $question) {
66
-                    if ($question instanceof EE_Question) {
67
-                        $this->generateNewAnswer(
68
-                            $question,
69
-                            $target_registration,
70
-                            $answers
71
-                        );
72
-                    }
73
-                }
74
-            }
75
-        }
76
-        return true;
77
-    }
78
-
79
-
80
-
81
-    /**
82
-     * @param EE_Answer[] $answers
83
-     * @return array
84
-     * @throws EE_Error
85
-     */
86
-    protected function reindexAnswersByQuestionId(array $answers)
87
-    {
88
-        $reindexed_answers = array();
89
-        foreach ($answers as $answer) {
90
-            if ($answer instanceof EE_Answer) {
91
-                $reindexed_answers[ $answer->question_ID() ] = $answer->value();
92
-            }
93
-        }
94
-        return $reindexed_answers;
95
-    }
96
-
97
-
98
-
99
-    /**
100
-     * @param EE_Question      $question
101
-     * @param EE_Registration  $registration
102
-     * @param                  $previous_answers
103
-     * @return EE_Answer
104
-     * @throws UnexpectedEntityException
105
-     * @throws EE_Error
106
-     */
107
-    protected function generateNewAnswer(
108
-        EE_Question $question,
109
-        EE_Registration $registration,
110
-        $previous_answers
111
-    ) {
112
-        $old_answer_value = isset($previous_answers[ $question->ID() ])
113
-            ? $previous_answers[ $question->ID() ]
114
-            : '';
115
-        $new_answer       = EE_Answer::new_instance(
116
-            array(
117
-                'QST_ID'    => $question->ID(),
118
-                'REG_ID'    => $registration->ID(),
119
-                'ANS_value' => $old_answer_value,
120
-            )
121
-        );
122
-        if ( ! $new_answer instanceof EE_Answer) {
123
-            throw new UnexpectedEntityException($new_answer, 'EE_Answer');
124
-        }
125
-        $new_answer->save();
126
-        return $new_answer;
127
-    }
128
-
129
-
130
-
131
-    /**
132
-     * @param EE_Registration $target_registration
133
-     * @param EE_Registration $registration_to_copy
134
-     * @return bool
135
-     * @throws RuntimeException
136
-     * @throws UnexpectedEntityException
137
-     * @throws EE_Error
138
-     */
139
-    public function copyPaymentDetails(
140
-        EE_Registration $target_registration,
141
-        EE_Registration $registration_to_copy
142
-    ) {
143
-        $previous_payments = $registration_to_copy->registration_payments();
144
-        foreach ($previous_payments as $previous_payment) {
145
-            if (
146
-                $previous_payment instanceof \EE_Registration_Payment
147
-                && $previous_payment->payment() instanceof \EE_Payment
148
-                && $previous_payment->payment()->is_approved()
149
-            ) {
150
-                $new_registration_payment = \EE_Registration_Payment::new_instance(
151
-                    array(
152
-                        'REG_ID'     => $target_registration->ID(),
153
-                        'PAY_ID'     => $previous_payment->ID(),
154
-                        'RPY_amount' => $previous_payment->amount(),
155
-                    )
156
-                );
157
-                if ( ! $new_registration_payment instanceof \EE_Registration_Payment) {
158
-                    throw new UnexpectedEntityException($new_registration_payment, 'EE_Registration_Payment');
159
-                }
160
-                $new_registration_payment->save();
161
-                $target_registration->set_paid($previous_payment->amount());
162
-                $target_registration->save();
163
-                // if new reg payment is good, then set old reg payment amount to zero
164
-                $previous_payment->set_amount(0);
165
-                $previous_payment->save();
166
-                $registration_to_copy->set_paid(0);
167
-                $registration_to_copy->save();
168
-            }
169
-        }
170
-        return true;
171
-    }
33
+	/**
34
+	 * @param EE_Registration $target_registration
35
+	 * @param EE_Registration $registration_to_copy
36
+	 * @return bool
37
+	 * @throws UnexpectedEntityException
38
+	 * @throws EntityNotFoundException
39
+	 * @throws RuntimeException
40
+	 * @throws EE_Error
41
+	 */
42
+	public function copyRegistrationDetails(
43
+		EE_Registration $target_registration,
44
+		EE_Registration $registration_to_copy
45
+	) {
46
+		// copy attendee
47
+		$target_registration->set_attendee_id($registration_to_copy->attendee_ID());
48
+		$target_registration->updateStatusBasedOnTotalPaid(false);
49
+		$target_registration->save();
50
+		// get answers to previous reg questions
51
+		$answers = $this->reindexAnswersByQuestionId($registration_to_copy->answers());
52
+		// get questions to new event reg form
53
+		$new_event       = $target_registration->event();
54
+		$question_groups = $new_event->question_groups(
55
+			array(
56
+				array(
57
+					'Event.EVT_ID'                     => $new_event->ID(),
58
+					'Event_Question_Group.EQG_primary' => $registration_to_copy->is_primary_registrant(),
59
+				),
60
+				'order_by' => array('QSG_order' => 'ASC'),
61
+			)
62
+		);
63
+		foreach ($question_groups as $question_group) {
64
+			if ($question_group instanceof \EE_Question_Group) {
65
+				foreach ($question_group->questions() as $question) {
66
+					if ($question instanceof EE_Question) {
67
+						$this->generateNewAnswer(
68
+							$question,
69
+							$target_registration,
70
+							$answers
71
+						);
72
+					}
73
+				}
74
+			}
75
+		}
76
+		return true;
77
+	}
78
+
79
+
80
+
81
+	/**
82
+	 * @param EE_Answer[] $answers
83
+	 * @return array
84
+	 * @throws EE_Error
85
+	 */
86
+	protected function reindexAnswersByQuestionId(array $answers)
87
+	{
88
+		$reindexed_answers = array();
89
+		foreach ($answers as $answer) {
90
+			if ($answer instanceof EE_Answer) {
91
+				$reindexed_answers[ $answer->question_ID() ] = $answer->value();
92
+			}
93
+		}
94
+		return $reindexed_answers;
95
+	}
96
+
97
+
98
+
99
+	/**
100
+	 * @param EE_Question      $question
101
+	 * @param EE_Registration  $registration
102
+	 * @param                  $previous_answers
103
+	 * @return EE_Answer
104
+	 * @throws UnexpectedEntityException
105
+	 * @throws EE_Error
106
+	 */
107
+	protected function generateNewAnswer(
108
+		EE_Question $question,
109
+		EE_Registration $registration,
110
+		$previous_answers
111
+	) {
112
+		$old_answer_value = isset($previous_answers[ $question->ID() ])
113
+			? $previous_answers[ $question->ID() ]
114
+			: '';
115
+		$new_answer       = EE_Answer::new_instance(
116
+			array(
117
+				'QST_ID'    => $question->ID(),
118
+				'REG_ID'    => $registration->ID(),
119
+				'ANS_value' => $old_answer_value,
120
+			)
121
+		);
122
+		if ( ! $new_answer instanceof EE_Answer) {
123
+			throw new UnexpectedEntityException($new_answer, 'EE_Answer');
124
+		}
125
+		$new_answer->save();
126
+		return $new_answer;
127
+	}
128
+
129
+
130
+
131
+	/**
132
+	 * @param EE_Registration $target_registration
133
+	 * @param EE_Registration $registration_to_copy
134
+	 * @return bool
135
+	 * @throws RuntimeException
136
+	 * @throws UnexpectedEntityException
137
+	 * @throws EE_Error
138
+	 */
139
+	public function copyPaymentDetails(
140
+		EE_Registration $target_registration,
141
+		EE_Registration $registration_to_copy
142
+	) {
143
+		$previous_payments = $registration_to_copy->registration_payments();
144
+		foreach ($previous_payments as $previous_payment) {
145
+			if (
146
+				$previous_payment instanceof \EE_Registration_Payment
147
+				&& $previous_payment->payment() instanceof \EE_Payment
148
+				&& $previous_payment->payment()->is_approved()
149
+			) {
150
+				$new_registration_payment = \EE_Registration_Payment::new_instance(
151
+					array(
152
+						'REG_ID'     => $target_registration->ID(),
153
+						'PAY_ID'     => $previous_payment->ID(),
154
+						'RPY_amount' => $previous_payment->amount(),
155
+					)
156
+				);
157
+				if ( ! $new_registration_payment instanceof \EE_Registration_Payment) {
158
+					throw new UnexpectedEntityException($new_registration_payment, 'EE_Registration_Payment');
159
+				}
160
+				$new_registration_payment->save();
161
+				$target_registration->set_paid($previous_payment->amount());
162
+				$target_registration->save();
163
+				// if new reg payment is good, then set old reg payment amount to zero
164
+				$previous_payment->set_amount(0);
165
+				$previous_payment->save();
166
+				$registration_to_copy->set_paid(0);
167
+				$registration_to_copy->save();
168
+			}
169
+		}
170
+		return true;
171
+	}
172 172
 
173 173
 
174 174
 }
Please login to merge, or discard this patch.
Spacing   +3 added lines, -3 removed lines patch added patch discarded remove patch
@@ -88,7 +88,7 @@  discard block
 block discarded – undo
88 88
         $reindexed_answers = array();
89 89
         foreach ($answers as $answer) {
90 90
             if ($answer instanceof EE_Answer) {
91
-                $reindexed_answers[ $answer->question_ID() ] = $answer->value();
91
+                $reindexed_answers[$answer->question_ID()] = $answer->value();
92 92
             }
93 93
         }
94 94
         return $reindexed_answers;
@@ -109,8 +109,8 @@  discard block
 block discarded – undo
109 109
         EE_Registration $registration,
110 110
         $previous_answers
111 111
     ) {
112
-        $old_answer_value = isset($previous_answers[ $question->ID() ])
113
-            ? $previous_answers[ $question->ID() ]
112
+        $old_answer_value = isset($previous_answers[$question->ID()])
113
+            ? $previous_answers[$question->ID()]
114 114
             : '';
115 115
         $new_answer       = EE_Answer::new_instance(
116 116
             array(
Please login to merge, or discard this patch.