Completed
Branch FET/rule-specific-exclusions-l... (334422)
by
unknown
17:10 queued 32s
created
core/db_classes/EE_WP_User.class.php 2 patches
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -51,7 +51,7 @@
 block discarded – undo
51 51
      */
52 52
     public function wp_user_obj()
53 53
     {
54
-        if (! $this->_wp_user_obj) {
54
+        if ( ! $this->_wp_user_obj) {
55 55
             $this->_wp_user_obj = get_user_by('ID', $this->ID());
56 56
         }
57 57
         return $this->_wp_user_obj;
Please login to merge, or discard this patch.
Indentation   +79 added lines, -79 removed lines patch added patch discarded remove patch
@@ -11,91 +11,91 @@
 block discarded – undo
11 11
 class EE_WP_User extends EE_Base_Class implements EEI_Admin_Links
12 12
 {
13 13
 
14
-    /**
15
-     * @var WP_User
16
-     */
17
-    protected $_wp_user_obj;
14
+	/**
15
+	 * @var WP_User
16
+	 */
17
+	protected $_wp_user_obj;
18 18
 
19
-    /**
20
-     * @param array $props_n_values
21
-     * @return EE_WP_User|mixed
22
-     */
23
-    public static function new_instance($props_n_values = array())
24
-    {
25
-        $has_object = parent::_check_for_object($props_n_values, __CLASS__);
26
-        return $has_object ? $has_object : new self($props_n_values);
27
-    }
19
+	/**
20
+	 * @param array $props_n_values
21
+	 * @return EE_WP_User|mixed
22
+	 */
23
+	public static function new_instance($props_n_values = array())
24
+	{
25
+		$has_object = parent::_check_for_object($props_n_values, __CLASS__);
26
+		return $has_object ? $has_object : new self($props_n_values);
27
+	}
28 28
 
29 29
 
30
-    /**
31
-     * @param array $props_n_values
32
-     * @return EE_WP_User
33
-     */
34
-    public static function new_instance_from_db($props_n_values = array())
35
-    {
36
-        return new self($props_n_values, true);
37
-    }
30
+	/**
31
+	 * @param array $props_n_values
32
+	 * @return EE_WP_User
33
+	 */
34
+	public static function new_instance_from_db($props_n_values = array())
35
+	{
36
+		return new self($props_n_values, true);
37
+	}
38 38
 
39
-    /**
40
-     * Return a normal WP_User object (caches the object for future calls)
41
-     *
42
-     * @return WP_User
43
-     */
44
-    public function wp_user_obj()
45
-    {
46
-        if (! $this->_wp_user_obj) {
47
-            $this->_wp_user_obj = get_user_by('ID', $this->ID());
48
-        }
49
-        return $this->_wp_user_obj;
50
-    }
39
+	/**
40
+	 * Return a normal WP_User object (caches the object for future calls)
41
+	 *
42
+	 * @return WP_User
43
+	 */
44
+	public function wp_user_obj()
45
+	{
46
+		if (! $this->_wp_user_obj) {
47
+			$this->_wp_user_obj = get_user_by('ID', $this->ID());
48
+		}
49
+		return $this->_wp_user_obj;
50
+	}
51 51
 
52
-    /**
53
-     * Return the link to the admin details for the object.
54
-     *
55
-     * @return string
56
-     */
57
-    public function get_admin_details_link()
58
-    {
59
-        return $this->get_admin_edit_link();
60
-    }
52
+	/**
53
+	 * Return the link to the admin details for the object.
54
+	 *
55
+	 * @return string
56
+	 */
57
+	public function get_admin_details_link()
58
+	{
59
+		return $this->get_admin_edit_link();
60
+	}
61 61
 
62
-    /**
63
-     * Returns the link to the editor for the object.  Sometimes this is the same as the details.
64
-     *
65
-     * @return string
66
-     */
67
-    public function get_admin_edit_link()
68
-    {
69
-        return esc_url(
70
-            add_query_arg(
71
-                'wp_http_referer',
72
-                urlencode(
73
-                    wp_unslash(
74
-                        $_SERVER['REQUEST_URI']
75
-                    )
76
-                ),
77
-                get_edit_user_link($this->ID())
78
-            )
79
-        );
80
-    }
62
+	/**
63
+	 * Returns the link to the editor for the object.  Sometimes this is the same as the details.
64
+	 *
65
+	 * @return string
66
+	 */
67
+	public function get_admin_edit_link()
68
+	{
69
+		return esc_url(
70
+			add_query_arg(
71
+				'wp_http_referer',
72
+				urlencode(
73
+					wp_unslash(
74
+						$_SERVER['REQUEST_URI']
75
+					)
76
+				),
77
+				get_edit_user_link($this->ID())
78
+			)
79
+		);
80
+	}
81 81
 
82
-    /**
83
-     * Returns the link to a settings page for the object.
84
-     *
85
-     * @return string
86
-     */
87
-    public function get_admin_settings_link()
88
-    {
89
-        return $this->get_admin_edit_link();
90
-    }
82
+	/**
83
+	 * Returns the link to a settings page for the object.
84
+	 *
85
+	 * @return string
86
+	 */
87
+	public function get_admin_settings_link()
88
+	{
89
+		return $this->get_admin_edit_link();
90
+	}
91 91
 
92
-    /**
93
-     * Returns the link to the "overview" for the object (typically the "list table" view).
94
-     *
95
-     * @return string
96
-     */
97
-    public function get_admin_overview_link()
98
-    {
99
-        return admin_url('users.php');
100
-    }
92
+	/**
93
+	 * Returns the link to the "overview" for the object (typically the "list table" view).
94
+	 *
95
+	 * @return string
96
+	 */
97
+	public function get_admin_overview_link()
98
+	{
99
+		return admin_url('users.php');
100
+	}
101 101
 }
Please login to merge, or discard this patch.
registration_form/espresso_events_Registration_Form_Hooks.class.php 3 patches
Doc Comments   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -52,7 +52,7 @@
 block discarded – undo
52 52
     /**
53 53
      * Callback for FHEE__Events_Admin_Page___insert_update_cpt_item__event_update_callbacks hook
54 54
      *
55
-     * @param $callbacks
55
+     * @param callable[] $callbacks
56 56
      * @return array
57 57
      */
58 58
     public function modify_callbacks($callbacks)
Please login to merge, or discard this patch.
Indentation   +192 added lines, -192 removed lines patch added patch discarded remove patch
@@ -16,210 +16,210 @@
 block discarded – undo
16 16
 class espresso_events_Registration_Form_Hooks extends EE_Admin_Hooks
17 17
 {
18 18
 
19
-    /**
20
-     * @var EE_Event|null
21
-     */
22
-    protected $_event;
23
-
24
-
25
-    protected function _set_hooks_properties()
26
-    {
27
-
28
-        $this->_name = 'registration_form';
29
-        $this->_metaboxes = array(
30
-            0 => array(
31
-                'page_route' => array('edit', 'create_new'),
32
-                'func'       => 'primary_questions',
33
-                'label'      => esc_html__('Questions for Primary Registrant', 'event_espresso'),
34
-                'priority'   => 'default',
35
-                'context'    => 'side',
36
-            ),
37
-        );
38
-
39
-        // hook into the handler for saving question groups
40
-        add_filter(
41
-            'FHEE__Events_Admin_Page___insert_update_cpt_item__event_update_callbacks',
42
-            array($this, 'modify_callbacks'),
43
-            10
44
-        );
45
-
46
-        // hook into revision restores (we're hooking into the global action because EE_Admin_Hooks classes are already
47
-        // restricted by page)
48
-        add_action('AHEE_EE_Admin_Page_CPT__restore_revision', array($this, 'restore_revision'), 10, 2);
49
-    }
50
-
51
-
52
-    /**
53
-     * Callback for FHEE__Events_Admin_Page___insert_update_cpt_item__event_update_callbacks hook
54
-     *
55
-     * @param $callbacks
56
-     * @return array
57
-     */
58
-    public function modify_callbacks($callbacks)
59
-    {
60
-        // now let's add the question group callback
61
-        $callbacks[] = array($this, 'primary_question_group_update');
62
-        return $callbacks;
63
-    }
64
-
65
-
66
-    /**
67
-     * Hooked into revision restores.
68
-     *
69
-     * @param $post_id
70
-     * @param $revision_id
71
-     * @return EE_Base_Class
72
-     * @throws EE_Error
73
-     * @throws InvalidArgumentException
74
-     * @throws ReflectionException
75
-     * @throws InvalidDataTypeException
76
-     * @throws InvalidInterfaceException
77
-     */
78
-    public function restore_revision($post_id, $revision_id)
79
-    {
80
-        $EVT_MDL = EE_Registry::instance()->load_model('Event');
81
-        $post_evt = $EVT_MDL->get_one_by_ID($post_id);
82
-        // restore revision for primary questions
83
-        $post_evt->restore_revision(
84
-            $revision_id,
85
-            array('Question_Group'),
86
-            array('Question_Group' => array('Event_Question_Group.EQG_primary' => 1))
87
-        );
88
-        return $post_evt;
89
-    }
90
-
91
-
92
-    /**
93
-     * Content of metabox.
94
-     *
95
-     * @param $post_id
96
-     * @param $post
97
-     * @throws EE_Error
98
-     * @throws InvalidArgumentException
99
-     * @throws InvalidDataTypeException
100
-     * @throws InvalidInterfaceException
101
-     */
102
-    public function primary_questions($post_id, $post)
103
-    {
104
-        $this->_event = $this->_adminpage_obj->get_event_object();
105
-        $event_id = $this->_event->ID();
106
-        ?>
19
+	/**
20
+	 * @var EE_Event|null
21
+	 */
22
+	protected $_event;
23
+
24
+
25
+	protected function _set_hooks_properties()
26
+	{
27
+
28
+		$this->_name = 'registration_form';
29
+		$this->_metaboxes = array(
30
+			0 => array(
31
+				'page_route' => array('edit', 'create_new'),
32
+				'func'       => 'primary_questions',
33
+				'label'      => esc_html__('Questions for Primary Registrant', 'event_espresso'),
34
+				'priority'   => 'default',
35
+				'context'    => 'side',
36
+			),
37
+		);
38
+
39
+		// hook into the handler for saving question groups
40
+		add_filter(
41
+			'FHEE__Events_Admin_Page___insert_update_cpt_item__event_update_callbacks',
42
+			array($this, 'modify_callbacks'),
43
+			10
44
+		);
45
+
46
+		// hook into revision restores (we're hooking into the global action because EE_Admin_Hooks classes are already
47
+		// restricted by page)
48
+		add_action('AHEE_EE_Admin_Page_CPT__restore_revision', array($this, 'restore_revision'), 10, 2);
49
+	}
50
+
51
+
52
+	/**
53
+	 * Callback for FHEE__Events_Admin_Page___insert_update_cpt_item__event_update_callbacks hook
54
+	 *
55
+	 * @param $callbacks
56
+	 * @return array
57
+	 */
58
+	public function modify_callbacks($callbacks)
59
+	{
60
+		// now let's add the question group callback
61
+		$callbacks[] = array($this, 'primary_question_group_update');
62
+		return $callbacks;
63
+	}
64
+
65
+
66
+	/**
67
+	 * Hooked into revision restores.
68
+	 *
69
+	 * @param $post_id
70
+	 * @param $revision_id
71
+	 * @return EE_Base_Class
72
+	 * @throws EE_Error
73
+	 * @throws InvalidArgumentException
74
+	 * @throws ReflectionException
75
+	 * @throws InvalidDataTypeException
76
+	 * @throws InvalidInterfaceException
77
+	 */
78
+	public function restore_revision($post_id, $revision_id)
79
+	{
80
+		$EVT_MDL = EE_Registry::instance()->load_model('Event');
81
+		$post_evt = $EVT_MDL->get_one_by_ID($post_id);
82
+		// restore revision for primary questions
83
+		$post_evt->restore_revision(
84
+			$revision_id,
85
+			array('Question_Group'),
86
+			array('Question_Group' => array('Event_Question_Group.EQG_primary' => 1))
87
+		);
88
+		return $post_evt;
89
+	}
90
+
91
+
92
+	/**
93
+	 * Content of metabox.
94
+	 *
95
+	 * @param $post_id
96
+	 * @param $post
97
+	 * @throws EE_Error
98
+	 * @throws InvalidArgumentException
99
+	 * @throws InvalidDataTypeException
100
+	 * @throws InvalidInterfaceException
101
+	 */
102
+	public function primary_questions($post_id, $post)
103
+	{
104
+		$this->_event = $this->_adminpage_obj->get_event_object();
105
+		$event_id = $this->_event->ID();
106
+		?>
107 107
         <div class="inside">
108 108
             <p><strong>
109 109
                     <?php _e('Question Groups', 'event_espresso'); ?>
110 110
                 </strong><br/>
111 111
                 <?php
112
-                printf(
113
-                    esc_html__(
114
-                        'Add a pre-populated %1$sgroup of questions%2$s to your event. The personal information group is required for all events',
115
-                        'event_espresso'
116
-                    ),
117
-                    '<a href="admin.php?page=espresso_registration_form" target="_blank">',
118
-                    '</a>'
119
-                )
120
-                ?>
112
+				printf(
113
+					esc_html__(
114
+						'Add a pre-populated %1$sgroup of questions%2$s to your event. The personal information group is required for all events',
115
+						'event_espresso'
116
+					),
117
+					'<a href="admin.php?page=espresso_registration_form" target="_blank">',
118
+					'</a>'
119
+				)
120
+				?>
121 121
             </p>
122 122
             <?php
123 123
 
124
-            $qsg_where['QSG_deleted'] = false;
125
-            $query_params = apply_filters(
126
-                'FHEE__espresso_events_Registration_Form_Hooks__primary_questions__question_group_query_parameters',
127
-                array($qsg_where, 'order_by' => array('QSG_order' => 'ASC'))
128
-            );
129
-            $QSGs = EEM_Question_Group::instance()->get_all($query_params);
130
-            $EQGs = ! empty($event_id)
131
-                ? $this->_event->get_many_related(
132
-                    'Question_Group',
133
-                    array(array('Event_Question_Group.EQG_primary' => 1))
134
-                )
135
-                : array();
136
-            $EQGids = array_keys($EQGs);
137
-
138
-            if (! empty($QSGs)) {
139
-                $html = count($QSGs) > 10 ? '<div style="height:250px;overflow:auto;">' : '';
140
-                foreach ($QSGs as $QSG) {
141
-                    $checked = in_array($QSG->ID(), $EQGids, true)
142
-                               || $QSG->get('QSG_system') === 1
143
-                        ? ' checked="checked"'
144
-                        : '';
145
-                    $visibility = $QSG->get('QSG_system') === 1
146
-                        ? ' style="visibility:hidden"'
147
-                        : '';
148
-                    $edit_query_args = $this->_adminpage_obj->is_caf() ? array(
149
-                        'action' => 'edit_question_group',
150
-                        'QSG_ID' => $QSG->ID(),
151
-                    ) : array('action' => 'question_groups');
152
-                    $edit_link = EE_Admin_Page::add_query_args_and_nonce(
153
-                        $edit_query_args,
154
-                        EE_FORMS_ADMIN_URL
155
-                    );
156
-
157
-                    $html .= '
124
+			$qsg_where['QSG_deleted'] = false;
125
+			$query_params = apply_filters(
126
+				'FHEE__espresso_events_Registration_Form_Hooks__primary_questions__question_group_query_parameters',
127
+				array($qsg_where, 'order_by' => array('QSG_order' => 'ASC'))
128
+			);
129
+			$QSGs = EEM_Question_Group::instance()->get_all($query_params);
130
+			$EQGs = ! empty($event_id)
131
+				? $this->_event->get_many_related(
132
+					'Question_Group',
133
+					array(array('Event_Question_Group.EQG_primary' => 1))
134
+				)
135
+				: array();
136
+			$EQGids = array_keys($EQGs);
137
+
138
+			if (! empty($QSGs)) {
139
+				$html = count($QSGs) > 10 ? '<div style="height:250px;overflow:auto;">' : '';
140
+				foreach ($QSGs as $QSG) {
141
+					$checked = in_array($QSG->ID(), $EQGids, true)
142
+							   || $QSG->get('QSG_system') === 1
143
+						? ' checked="checked"'
144
+						: '';
145
+					$visibility = $QSG->get('QSG_system') === 1
146
+						? ' style="visibility:hidden"'
147
+						: '';
148
+					$edit_query_args = $this->_adminpage_obj->is_caf() ? array(
149
+						'action' => 'edit_question_group',
150
+						'QSG_ID' => $QSG->ID(),
151
+					) : array('action' => 'question_groups');
152
+					$edit_link = EE_Admin_Page::add_query_args_and_nonce(
153
+						$edit_query_args,
154
+						EE_FORMS_ADMIN_URL
155
+					);
156
+
157
+					$html .= '
158 158
 					<p id="event-question-group-' . $QSG->ID() . '">
159 159
 						<input value="' . $QSG->ID() . '" type="checkbox"'
160
-                             . $visibility
161
-                             . ' name="question_groups[' . $QSG->ID() . ']"' . $checked . ' />
160
+							 . $visibility
161
+							 . ' name="question_groups[' . $QSG->ID() . ']"' . $checked . ' />
162 162
 						<a href="' . $edit_link . '" title="'
163
-                             . sprintf(
164
-                                 esc_attr__('Edit %s Group', 'event_espresso'),
165
-                                 $QSG->get('QSG_name')
166
-                             )
167
-                             . '" target="_blank">' . $QSG->get('QSG_name') . '</a>
163
+							 . sprintf(
164
+								 esc_attr__('Edit %s Group', 'event_espresso'),
165
+								 $QSG->get('QSG_name')
166
+							 )
167
+							 . '" target="_blank">' . $QSG->get('QSG_name') . '</a>
168 168
 					</p>';
169
-                }
170
-                $html .= count($QSGs) > 10 ? '</div>' : '';
171
-
172
-                echo $html;
173
-            } else {
174
-                esc_html_e(
175
-                    'There seems to be a problem with your questions. Please contact [email protected]',
176
-                    'event_espresso'
177
-                );
178
-            }
179
-            do_action('AHEE_event_editor_questions_notice');
180
-            ?>
169
+				}
170
+				$html .= count($QSGs) > 10 ? '</div>' : '';
171
+
172
+				echo $html;
173
+			} else {
174
+				esc_html_e(
175
+					'There seems to be a problem with your questions. Please contact [email protected]',
176
+					'event_espresso'
177
+				);
178
+			}
179
+			do_action('AHEE_event_editor_questions_notice');
180
+			?>
181 181
         </div>
182 182
         <?php
183
-    }
184
-
185
-
186
-    /**
187
-     * @param EE_Event $evtobj
188
-     * @param array    $data
189
-     * @return bool
190
-     * @throws EE_Error
191
-     */
192
-    public function primary_question_group_update($evtobj, $data)
193
-    {
194
-        $question_groups = ! empty($data['question_groups']) ? (array) $data['question_groups'] : array();
195
-        $added_qgs = array_keys($question_groups);
196
-        $success = array();
197
-
198
-        // let's get all current question groups associated with this event.
199
-        $current_qgs = $evtobj->get_many_related(
200
-            'Question_Group',
201
-            array(array('Event_Question_Group.EQG_primary' => 1))
202
-        );
203
-        $current_qgs = array_keys($current_qgs); // we just want the ids
204
-
205
-        // now let's get the groups selected in the editor and update (IF we have data)
206
-        if (! empty($question_groups)) {
207
-            foreach ($question_groups as $id => $val) {
208
-                // add to event
209
-                if ($val) {
210
-                    $qg = $evtobj->_add_relation_to($id, 'Question_Group', array('EQG_primary' => 1));
211
-                }
212
-                $success[] = ! empty($qg) ? 1 : 0;
213
-            }
214
-        }
215
-
216
-        // wait a minute... are there question groups missing in the saved groups that ARE with the current event?
217
-        $removed_qgs = array_diff($current_qgs, $added_qgs);
218
-
219
-        foreach ($removed_qgs as $qgid) {
220
-            $qg = $evtobj->_remove_relation_to($qgid, 'Question_Group', array('EQG_primary' => 1));
221
-            $success[] = ! empty($qg) ? 1 : 0;
222
-        }
223
-        return in_array(0, $success, true) ? false : true;
224
-    }
183
+	}
184
+
185
+
186
+	/**
187
+	 * @param EE_Event $evtobj
188
+	 * @param array    $data
189
+	 * @return bool
190
+	 * @throws EE_Error
191
+	 */
192
+	public function primary_question_group_update($evtobj, $data)
193
+	{
194
+		$question_groups = ! empty($data['question_groups']) ? (array) $data['question_groups'] : array();
195
+		$added_qgs = array_keys($question_groups);
196
+		$success = array();
197
+
198
+		// let's get all current question groups associated with this event.
199
+		$current_qgs = $evtobj->get_many_related(
200
+			'Question_Group',
201
+			array(array('Event_Question_Group.EQG_primary' => 1))
202
+		);
203
+		$current_qgs = array_keys($current_qgs); // we just want the ids
204
+
205
+		// now let's get the groups selected in the editor and update (IF we have data)
206
+		if (! empty($question_groups)) {
207
+			foreach ($question_groups as $id => $val) {
208
+				// add to event
209
+				if ($val) {
210
+					$qg = $evtobj->_add_relation_to($id, 'Question_Group', array('EQG_primary' => 1));
211
+				}
212
+				$success[] = ! empty($qg) ? 1 : 0;
213
+			}
214
+		}
215
+
216
+		// wait a minute... are there question groups missing in the saved groups that ARE with the current event?
217
+		$removed_qgs = array_diff($current_qgs, $added_qgs);
218
+
219
+		foreach ($removed_qgs as $qgid) {
220
+			$qg = $evtobj->_remove_relation_to($qgid, 'Question_Group', array('EQG_primary' => 1));
221
+			$success[] = ! empty($qg) ? 1 : 0;
222
+		}
223
+		return in_array(0, $success, true) ? false : true;
224
+	}
225 225
 }
Please login to merge, or discard this patch.
Spacing   +7 added lines, -7 removed lines patch added patch discarded remove patch
@@ -135,7 +135,7 @@  discard block
 block discarded – undo
135 135
                 : array();
136 136
             $EQGids = array_keys($EQGs);
137 137
 
138
-            if (! empty($QSGs)) {
138
+            if ( ! empty($QSGs)) {
139 139
                 $html = count($QSGs) > 10 ? '<div style="height:250px;overflow:auto;">' : '';
140 140
                 foreach ($QSGs as $QSG) {
141 141
                     $checked = in_array($QSG->ID(), $EQGids, true)
@@ -155,16 +155,16 @@  discard block
 block discarded – undo
155 155
                     );
156 156
 
157 157
                     $html .= '
158
-					<p id="event-question-group-' . $QSG->ID() . '">
159
-						<input value="' . $QSG->ID() . '" type="checkbox"'
158
+					<p id="event-question-group-' . $QSG->ID().'">
159
+						<input value="' . $QSG->ID().'" type="checkbox"'
160 160
                              . $visibility
161
-                             . ' name="question_groups[' . $QSG->ID() . ']"' . $checked . ' />
162
-						<a href="' . $edit_link . '" title="'
161
+                             . ' name="question_groups['.$QSG->ID().']"'.$checked.' />
162
+						<a href="' . $edit_link.'" title="'
163 163
                              . sprintf(
164 164
                                  esc_attr__('Edit %s Group', 'event_espresso'),
165 165
                                  $QSG->get('QSG_name')
166 166
                              )
167
-                             . '" target="_blank">' . $QSG->get('QSG_name') . '</a>
167
+                             . '" target="_blank">'.$QSG->get('QSG_name').'</a>
168 168
 					</p>';
169 169
                 }
170 170
                 $html .= count($QSGs) > 10 ? '</div>' : '';
@@ -203,7 +203,7 @@  discard block
 block discarded – undo
203 203
         $current_qgs = array_keys($current_qgs); // we just want the ids
204 204
 
205 205
         // now let's get the groups selected in the editor and update (IF we have data)
206
-        if (! empty($question_groups)) {
206
+        if ( ! empty($question_groups)) {
207 207
             foreach ($question_groups as $id => $val) {
208 208
                 // add to event
209 209
                 if ($val) {
Please login to merge, or discard this patch.
admin_pages/registrations/EE_Registrations_List_Table.class.php 3 patches
Unused Use Statements   -1 removed lines patch added patch discarded remove patch
@@ -1,5 +1,4 @@
 block discarded – undo
1 1
 <?php use EventEspresso\core\exceptions\EntityNotFoundException;
2
-
3 2
 use EventEspresso\core\exceptions\InvalidDataTypeException;
4 3
 use EventEspresso\core\exceptions\InvalidInterfaceException;
5 4
 
Please login to merge, or discard this patch.
Indentation   +964 added lines, -964 removed lines patch added patch discarded remove patch
@@ -24,1045 +24,1045 @@
 block discarded – undo
24 24
 {
25 25
 
26 26
 
27
-    /**
28
-     * @var array
29
-     */
30
-    private $_status;
27
+	/**
28
+	 * @var array
29
+	 */
30
+	private $_status;
31 31
 
32 32
 
33
-    /**
34
-     * An array of transaction details for the related transaction to the registration being processed.
35
-     * This is set via the _set_related_details method.
36
-     *
37
-     * @var array
38
-     */
39
-    protected $_transaction_details = array();
33
+	/**
34
+	 * An array of transaction details for the related transaction to the registration being processed.
35
+	 * This is set via the _set_related_details method.
36
+	 *
37
+	 * @var array
38
+	 */
39
+	protected $_transaction_details = array();
40 40
 
41 41
 
42
-    /**
43
-     * An array of event details for the related event to the registration being processed.
44
-     * This is set via the _set_related_details method.
45
-     *
46
-     * @var array
47
-     */
48
-    protected $_event_details = array();
42
+	/**
43
+	 * An array of event details for the related event to the registration being processed.
44
+	 * This is set via the _set_related_details method.
45
+	 *
46
+	 * @var array
47
+	 */
48
+	protected $_event_details = array();
49 49
 
50 50
 
51
-    /**
52
-     * @param \Registrations_Admin_Page $admin_page
53
-     */
54
-    public function __construct(Registrations_Admin_Page $admin_page)
55
-    {
56
-        if (! empty($_GET['event_id'])) {
57
-            $extra_query_args = array();
58
-            foreach ($admin_page->get_views() as $key => $view_details) {
59
-                $extra_query_args[ $view_details['slug'] ] = array('event_id' => $_GET['event_id']);
60
-            }
61
-            $this->_views = $admin_page->get_list_table_view_RLs($extra_query_args);
62
-        }
63
-        parent::__construct($admin_page);
64
-        $this->_status = $this->_admin_page->get_registration_status_array();
65
-    }
51
+	/**
52
+	 * @param \Registrations_Admin_Page $admin_page
53
+	 */
54
+	public function __construct(Registrations_Admin_Page $admin_page)
55
+	{
56
+		if (! empty($_GET['event_id'])) {
57
+			$extra_query_args = array();
58
+			foreach ($admin_page->get_views() as $key => $view_details) {
59
+				$extra_query_args[ $view_details['slug'] ] = array('event_id' => $_GET['event_id']);
60
+			}
61
+			$this->_views = $admin_page->get_list_table_view_RLs($extra_query_args);
62
+		}
63
+		parent::__construct($admin_page);
64
+		$this->_status = $this->_admin_page->get_registration_status_array();
65
+	}
66 66
 
67 67
 
68
-    /**
69
-     *    _setup_data
70
-     *
71
-     * @access protected
72
-     * @return void
73
-     */
74
-    protected function _setup_data()
75
-    {
76
-        $this->_data = $this->_admin_page->get_registrations($this->_per_page);
77
-        $this->_all_data_count = $this->_admin_page->get_registrations($this->_per_page, true, false, false);
78
-    }
68
+	/**
69
+	 *    _setup_data
70
+	 *
71
+	 * @access protected
72
+	 * @return void
73
+	 */
74
+	protected function _setup_data()
75
+	{
76
+		$this->_data = $this->_admin_page->get_registrations($this->_per_page);
77
+		$this->_all_data_count = $this->_admin_page->get_registrations($this->_per_page, true, false, false);
78
+	}
79 79
 
80 80
 
81
-    /**
82
-     *    _set_properties
83
-     *
84
-     * @access protected
85
-     * @return void
86
-     */
87
-    protected function _set_properties()
88
-    {
89
-        $this->_wp_list_args = array(
90
-            'singular' => __('registration', 'event_espresso'),
91
-            'plural'   => __('registrations', 'event_espresso'),
92
-            'ajax'     => true,
93
-            'screen'   => $this->_admin_page->get_current_screen()->id,
94
-        );
95
-        $ID_column_name = __('ID', 'event_espresso');
96
-        $ID_column_name .= ' : <span class="show-on-mobile-view-only" style="float:none">';
97
-        $ID_column_name .= __('Registrant Name', 'event_espresso');
98
-        $ID_column_name .= '</span> ';
99
-        if (isset($_GET['event_id'])) {
100
-            $this->_columns = array(
101
-                'cb'               => '<input type="checkbox" />', // Render a checkbox instead of text
102
-                '_REG_ID'          => $ID_column_name,
103
-                'ATT_fname'        => __('Name', 'event_espresso'),
104
-                'ATT_email'        => __('Email', 'event_espresso'),
105
-                '_REG_date'        => __('Reg Date', 'event_espresso'),
106
-                'PRC_amount'       => __('TKT Price', 'event_espresso'),
107
-                '_REG_final_price' => __('Final Price', 'event_espresso'),
108
-                'TXN_total'        => __('Total Txn', 'event_espresso'),
109
-                'TXN_paid'         => __('Paid', 'event_espresso'),
110
-                'actions'          => __('Actions', 'event_espresso'),
111
-            );
112
-            $this->_bottom_buttons = array(
113
-                'report' => array(
114
-                    'route'         => 'registrations_report',
115
-                    'extra_request' => array(
116
-                        'EVT_ID'     => isset($this->_req_data['event_id']) ? $this->_req_data['event_id'] : null,
117
-                        'return_url' => urlencode("//{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}"),
118
-                    ),
119
-                ),
120
-            );
121
-        } else {
122
-            $this->_columns = array(
123
-                'cb'               => '<input type="checkbox" />', // Render a checkbox instead of text
124
-                '_REG_ID'          => $ID_column_name,
125
-                'ATT_fname'        => __('Name', 'event_espresso'),
126
-                '_REG_date'        => __('TXN Date', 'event_espresso'),
127
-                'event_name'       => __('Event', 'event_espresso'),
128
-                'DTT_EVT_start'    => __('Event Date', 'event_espresso'),
129
-                '_REG_final_price' => __('Price', 'event_espresso'),
130
-                '_REG_paid'        => __('Paid', 'event_espresso'),
131
-                'actions'          => __('Actions', 'event_espresso'),
132
-            );
133
-            $this->_bottom_buttons = array(
134
-                'report_all' => array(
135
-                    'route'         => 'registrations_report',
136
-                    'extra_request' => array(
137
-                        'return_url' => urlencode("//{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}"),
138
-                    ),
139
-                ),
140
-            );
141
-        }
142
-        $this->_bottom_buttons['report_filtered'] = array(
143
-            'route'         => 'registrations_report',
144
-            'extra_request' => array(
145
-                'use_filters' => true,
146
-                'filters'     => array_diff_key(
147
-                    $this->_req_data,
148
-                    array_flip(
149
-                        array(
150
-                            'page',
151
-                            'action',
152
-                            'default_nonce',
153
-                        )
154
-                    )
155
-                ),
156
-                'return_url'  => urlencode("//{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}"),
157
-            ),
158
-        );
159
-        $this->_primary_column = '_REG_ID';
160
-        $this->_sortable_columns = array(
161
-            '_REG_date'     => array('_REG_date' => true),   // true means its already sorted
162
-            /**
163
-             * Allows users to change the default sort if they wish.
164
-             * Returning a falsey on this filter will result in the default sort to be by firstname rather than last
165
-             * name.
166
-             */
167
-            'ATT_fname'     => array(
168
-                'FHEE__EE_Registrations_List_Table___set_properties__default_sort_by_registration_last_name',
169
-                true,
170
-                $this,
171
-            )
172
-                ? array('ATT_lname' => false)
173
-                : array('ATT_fname' => false),
174
-            'event_name'    => array('event_name' => false),
175
-            'DTT_EVT_start' => array('DTT_EVT_start' => false),
176
-            '_REG_ID'       => array('_REG_ID' => false),
177
-        );
178
-        $this->_hidden_columns = array();
179
-    }
81
+	/**
82
+	 *    _set_properties
83
+	 *
84
+	 * @access protected
85
+	 * @return void
86
+	 */
87
+	protected function _set_properties()
88
+	{
89
+		$this->_wp_list_args = array(
90
+			'singular' => __('registration', 'event_espresso'),
91
+			'plural'   => __('registrations', 'event_espresso'),
92
+			'ajax'     => true,
93
+			'screen'   => $this->_admin_page->get_current_screen()->id,
94
+		);
95
+		$ID_column_name = __('ID', 'event_espresso');
96
+		$ID_column_name .= ' : <span class="show-on-mobile-view-only" style="float:none">';
97
+		$ID_column_name .= __('Registrant Name', 'event_espresso');
98
+		$ID_column_name .= '</span> ';
99
+		if (isset($_GET['event_id'])) {
100
+			$this->_columns = array(
101
+				'cb'               => '<input type="checkbox" />', // Render a checkbox instead of text
102
+				'_REG_ID'          => $ID_column_name,
103
+				'ATT_fname'        => __('Name', 'event_espresso'),
104
+				'ATT_email'        => __('Email', 'event_espresso'),
105
+				'_REG_date'        => __('Reg Date', 'event_espresso'),
106
+				'PRC_amount'       => __('TKT Price', 'event_espresso'),
107
+				'_REG_final_price' => __('Final Price', 'event_espresso'),
108
+				'TXN_total'        => __('Total Txn', 'event_espresso'),
109
+				'TXN_paid'         => __('Paid', 'event_espresso'),
110
+				'actions'          => __('Actions', 'event_espresso'),
111
+			);
112
+			$this->_bottom_buttons = array(
113
+				'report' => array(
114
+					'route'         => 'registrations_report',
115
+					'extra_request' => array(
116
+						'EVT_ID'     => isset($this->_req_data['event_id']) ? $this->_req_data['event_id'] : null,
117
+						'return_url' => urlencode("//{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}"),
118
+					),
119
+				),
120
+			);
121
+		} else {
122
+			$this->_columns = array(
123
+				'cb'               => '<input type="checkbox" />', // Render a checkbox instead of text
124
+				'_REG_ID'          => $ID_column_name,
125
+				'ATT_fname'        => __('Name', 'event_espresso'),
126
+				'_REG_date'        => __('TXN Date', 'event_espresso'),
127
+				'event_name'       => __('Event', 'event_espresso'),
128
+				'DTT_EVT_start'    => __('Event Date', 'event_espresso'),
129
+				'_REG_final_price' => __('Price', 'event_espresso'),
130
+				'_REG_paid'        => __('Paid', 'event_espresso'),
131
+				'actions'          => __('Actions', 'event_espresso'),
132
+			);
133
+			$this->_bottom_buttons = array(
134
+				'report_all' => array(
135
+					'route'         => 'registrations_report',
136
+					'extra_request' => array(
137
+						'return_url' => urlencode("//{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}"),
138
+					),
139
+				),
140
+			);
141
+		}
142
+		$this->_bottom_buttons['report_filtered'] = array(
143
+			'route'         => 'registrations_report',
144
+			'extra_request' => array(
145
+				'use_filters' => true,
146
+				'filters'     => array_diff_key(
147
+					$this->_req_data,
148
+					array_flip(
149
+						array(
150
+							'page',
151
+							'action',
152
+							'default_nonce',
153
+						)
154
+					)
155
+				),
156
+				'return_url'  => urlencode("//{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}"),
157
+			),
158
+		);
159
+		$this->_primary_column = '_REG_ID';
160
+		$this->_sortable_columns = array(
161
+			'_REG_date'     => array('_REG_date' => true),   // true means its already sorted
162
+			/**
163
+			 * Allows users to change the default sort if they wish.
164
+			 * Returning a falsey on this filter will result in the default sort to be by firstname rather than last
165
+			 * name.
166
+			 */
167
+			'ATT_fname'     => array(
168
+				'FHEE__EE_Registrations_List_Table___set_properties__default_sort_by_registration_last_name',
169
+				true,
170
+				$this,
171
+			)
172
+				? array('ATT_lname' => false)
173
+				: array('ATT_fname' => false),
174
+			'event_name'    => array('event_name' => false),
175
+			'DTT_EVT_start' => array('DTT_EVT_start' => false),
176
+			'_REG_ID'       => array('_REG_ID' => false),
177
+		);
178
+		$this->_hidden_columns = array();
179
+	}
180 180
 
181 181
 
182
-    /**
183
-     * This simply sets up the row class for the table rows.
184
-     * Allows for easier overriding of child methods for setting up sorting.
185
-     *
186
-     * @param  EE_Registration $item the current item
187
-     * @return string
188
-     */
189
-    protected function _get_row_class($item)
190
-    {
191
-        $class = parent::_get_row_class($item);
192
-        // add status class
193
-        $class .= ' ee-status-strip reg-status-' . $item->status_ID();
194
-        if ($this->_has_checkbox_column) {
195
-            $class .= ' has-checkbox-column';
196
-        }
197
-        return $class;
198
-    }
182
+	/**
183
+	 * This simply sets up the row class for the table rows.
184
+	 * Allows for easier overriding of child methods for setting up sorting.
185
+	 *
186
+	 * @param  EE_Registration $item the current item
187
+	 * @return string
188
+	 */
189
+	protected function _get_row_class($item)
190
+	{
191
+		$class = parent::_get_row_class($item);
192
+		// add status class
193
+		$class .= ' ee-status-strip reg-status-' . $item->status_ID();
194
+		if ($this->_has_checkbox_column) {
195
+			$class .= ' has-checkbox-column';
196
+		}
197
+		return $class;
198
+	}
199 199
 
200 200
 
201
-    /**
202
-     * Set the $_transaction_details property if not set yet.
203
-     *
204
-     * @param EE_Registration $registration
205
-     * @throws EE_Error
206
-     * @throws InvalidArgumentException
207
-     * @throws ReflectionException
208
-     * @throws InvalidDataTypeException
209
-     * @throws InvalidInterfaceException
210
-     */
211
-    protected function _set_related_details(EE_Registration $registration)
212
-    {
213
-        $transaction = $registration->get_first_related('Transaction');
214
-        $status = $transaction instanceof EE_Transaction ? $transaction->status_ID()
215
-            : EEM_Transaction::failed_status_code;
216
-        $this->_transaction_details = array(
217
-            'transaction' => $transaction,
218
-            'status'      => $status,
219
-            'id'          => $transaction instanceof EE_Transaction ? $transaction->ID() : 0,
220
-            'title_attr'  => sprintf(
221
-                __('View Transaction Details (%s)', 'event_espresso'),
222
-                EEH_Template::pretty_status($status, false, 'sentence')
223
-            ),
224
-        );
225
-        try {
226
-            $event = $registration->event();
227
-        } catch (EntityNotFoundException $e) {
228
-            $event = null;
229
-        }
230
-        $status = $event instanceof EE_Event ? $event->get_active_status() : EE_Datetime::inactive;
231
-        $this->_event_details = array(
232
-            'event'      => $event,
233
-            'status'     => $status,
234
-            'id'         => $event instanceof EE_Event ? $event->ID() : 0,
235
-            'title_attr' => sprintf(
236
-                __('Edit Event (%s)', 'event_espresso'),
237
-                EEH_Template::pretty_status($status, false, 'sentence')
238
-            ),
239
-        );
240
-    }
201
+	/**
202
+	 * Set the $_transaction_details property if not set yet.
203
+	 *
204
+	 * @param EE_Registration $registration
205
+	 * @throws EE_Error
206
+	 * @throws InvalidArgumentException
207
+	 * @throws ReflectionException
208
+	 * @throws InvalidDataTypeException
209
+	 * @throws InvalidInterfaceException
210
+	 */
211
+	protected function _set_related_details(EE_Registration $registration)
212
+	{
213
+		$transaction = $registration->get_first_related('Transaction');
214
+		$status = $transaction instanceof EE_Transaction ? $transaction->status_ID()
215
+			: EEM_Transaction::failed_status_code;
216
+		$this->_transaction_details = array(
217
+			'transaction' => $transaction,
218
+			'status'      => $status,
219
+			'id'          => $transaction instanceof EE_Transaction ? $transaction->ID() : 0,
220
+			'title_attr'  => sprintf(
221
+				__('View Transaction Details (%s)', 'event_espresso'),
222
+				EEH_Template::pretty_status($status, false, 'sentence')
223
+			),
224
+		);
225
+		try {
226
+			$event = $registration->event();
227
+		} catch (EntityNotFoundException $e) {
228
+			$event = null;
229
+		}
230
+		$status = $event instanceof EE_Event ? $event->get_active_status() : EE_Datetime::inactive;
231
+		$this->_event_details = array(
232
+			'event'      => $event,
233
+			'status'     => $status,
234
+			'id'         => $event instanceof EE_Event ? $event->ID() : 0,
235
+			'title_attr' => sprintf(
236
+				__('Edit Event (%s)', 'event_espresso'),
237
+				EEH_Template::pretty_status($status, false, 'sentence')
238
+			),
239
+		);
240
+	}
241 241
 
242 242
 
243
-    /**
244
-     *    _get_table_filters
245
-     *
246
-     * @access protected
247
-     * @return array
248
-     */
249
-    protected function _get_table_filters()
250
-    {
251
-        $filters = array();
252
-        // todo we're currently using old functions here. We need to move things into the Events_Admin_Page() class as
253
-        // methods.
254
-        $cur_date = isset($this->_req_data['month_range']) ? $this->_req_data['month_range'] : '';
255
-        $cur_category = isset($this->_req_data['EVT_CAT']) ? $this->_req_data['EVT_CAT'] : -1;
256
-        $reg_status = isset($this->_req_data['_reg_status']) ? $this->_req_data['_reg_status'] : '';
257
-        $filters[] = EEH_Form_Fields::generate_registration_months_dropdown($cur_date, $reg_status, $cur_category);
258
-        $filters[] = EEH_Form_Fields::generate_event_category_dropdown($cur_category);
259
-        $status = array();
260
-        $status[] = array('id' => 0, 'text' => __('Select Status', 'event_espresso'));
261
-        foreach ($this->_status as $key => $value) {
262
-            $status[] = array('id' => $key, 'text' => $value);
263
-        }
264
-        if ($this->_view !== 'incomplete') {
265
-            $filters[] = EEH_Form_Fields::select_input(
266
-                '_reg_status',
267
-                $status,
268
-                isset($this->_req_data['_reg_status']) ? strtoupper(sanitize_key($this->_req_data['_reg_status']))
269
-                    : ''
270
-            );
271
-        }
272
-        if (isset($this->_req_data['event_id'])) {
273
-            $filters[] = EEH_Form_Fields::hidden_input('event_id', $this->_req_data['event_id'], 'reg_event_id');
274
-        }
275
-        return $filters;
276
-    }
243
+	/**
244
+	 *    _get_table_filters
245
+	 *
246
+	 * @access protected
247
+	 * @return array
248
+	 */
249
+	protected function _get_table_filters()
250
+	{
251
+		$filters = array();
252
+		// todo we're currently using old functions here. We need to move things into the Events_Admin_Page() class as
253
+		// methods.
254
+		$cur_date = isset($this->_req_data['month_range']) ? $this->_req_data['month_range'] : '';
255
+		$cur_category = isset($this->_req_data['EVT_CAT']) ? $this->_req_data['EVT_CAT'] : -1;
256
+		$reg_status = isset($this->_req_data['_reg_status']) ? $this->_req_data['_reg_status'] : '';
257
+		$filters[] = EEH_Form_Fields::generate_registration_months_dropdown($cur_date, $reg_status, $cur_category);
258
+		$filters[] = EEH_Form_Fields::generate_event_category_dropdown($cur_category);
259
+		$status = array();
260
+		$status[] = array('id' => 0, 'text' => __('Select Status', 'event_espresso'));
261
+		foreach ($this->_status as $key => $value) {
262
+			$status[] = array('id' => $key, 'text' => $value);
263
+		}
264
+		if ($this->_view !== 'incomplete') {
265
+			$filters[] = EEH_Form_Fields::select_input(
266
+				'_reg_status',
267
+				$status,
268
+				isset($this->_req_data['_reg_status']) ? strtoupper(sanitize_key($this->_req_data['_reg_status']))
269
+					: ''
270
+			);
271
+		}
272
+		if (isset($this->_req_data['event_id'])) {
273
+			$filters[] = EEH_Form_Fields::hidden_input('event_id', $this->_req_data['event_id'], 'reg_event_id');
274
+		}
275
+		return $filters;
276
+	}
277 277
 
278 278
 
279
-    /**
280
-     *    _add_view_counts
281
-     *
282
-     * @access protected
283
-     * @return void
284
-     * @throws EE_Error
285
-     * @throws InvalidArgumentException
286
-     * @throws InvalidDataTypeException
287
-     * @throws InvalidInterfaceException
288
-     */
289
-    protected function _add_view_counts()
290
-    {
291
-        $this->_views['all']['count'] = $this->_total_registrations();
292
-        $this->_views['month']['count'] = $this->_total_registrations_this_month();
293
-        $this->_views['today']['count'] = $this->_total_registrations_today();
294
-        if (EE_Registry::instance()->CAP->current_user_can(
295
-            'ee_delete_registrations',
296
-            'espresso_registrations_trash_registrations'
297
-        )) {
298
-            $this->_views['incomplete']['count'] = $this->_total_registrations('incomplete');
299
-            $this->_views['trash']['count'] = $this->_total_registrations('trash');
300
-        }
301
-    }
279
+	/**
280
+	 *    _add_view_counts
281
+	 *
282
+	 * @access protected
283
+	 * @return void
284
+	 * @throws EE_Error
285
+	 * @throws InvalidArgumentException
286
+	 * @throws InvalidDataTypeException
287
+	 * @throws InvalidInterfaceException
288
+	 */
289
+	protected function _add_view_counts()
290
+	{
291
+		$this->_views['all']['count'] = $this->_total_registrations();
292
+		$this->_views['month']['count'] = $this->_total_registrations_this_month();
293
+		$this->_views['today']['count'] = $this->_total_registrations_today();
294
+		if (EE_Registry::instance()->CAP->current_user_can(
295
+			'ee_delete_registrations',
296
+			'espresso_registrations_trash_registrations'
297
+		)) {
298
+			$this->_views['incomplete']['count'] = $this->_total_registrations('incomplete');
299
+			$this->_views['trash']['count'] = $this->_total_registrations('trash');
300
+		}
301
+	}
302 302
 
303 303
 
304
-    /**
305
-     * _total_registrations
306
-     *
307
-     * @access protected
308
-     * @param string $view
309
-     * @return int
310
-     * @throws EE_Error
311
-     * @throws InvalidArgumentException
312
-     * @throws InvalidDataTypeException
313
-     * @throws InvalidInterfaceException
314
-     */
315
-    protected function _total_registrations($view = '')
316
-    {
317
-        $_where = array();
318
-        $EVT_ID = isset($this->_req_data['event_id']) ? absint($this->_req_data['event_id']) : false;
319
-        if ($EVT_ID) {
320
-            $_where['EVT_ID'] = $EVT_ID;
321
-        }
322
-        switch ($view) {
323
-            case 'trash':
324
-                return EEM_Registration::instance()->count_deleted(array($_where));
325
-                break;
326
-            case 'incomplete':
327
-                $_where['STS_ID'] = EEM_Registration::status_id_incomplete;
328
-                break;
329
-            default:
330
-                $_where['STS_ID'] = array('!=', EEM_Registration::status_id_incomplete);
331
-        }
332
-        return EEM_Registration::instance()->count(array($_where));
333
-    }
304
+	/**
305
+	 * _total_registrations
306
+	 *
307
+	 * @access protected
308
+	 * @param string $view
309
+	 * @return int
310
+	 * @throws EE_Error
311
+	 * @throws InvalidArgumentException
312
+	 * @throws InvalidDataTypeException
313
+	 * @throws InvalidInterfaceException
314
+	 */
315
+	protected function _total_registrations($view = '')
316
+	{
317
+		$_where = array();
318
+		$EVT_ID = isset($this->_req_data['event_id']) ? absint($this->_req_data['event_id']) : false;
319
+		if ($EVT_ID) {
320
+			$_where['EVT_ID'] = $EVT_ID;
321
+		}
322
+		switch ($view) {
323
+			case 'trash':
324
+				return EEM_Registration::instance()->count_deleted(array($_where));
325
+				break;
326
+			case 'incomplete':
327
+				$_where['STS_ID'] = EEM_Registration::status_id_incomplete;
328
+				break;
329
+			default:
330
+				$_where['STS_ID'] = array('!=', EEM_Registration::status_id_incomplete);
331
+		}
332
+		return EEM_Registration::instance()->count(array($_where));
333
+	}
334 334
 
335 335
 
336
-    /**
337
-     * _total_registrations_this_month
338
-     *
339
-     * @access protected
340
-     * @return int
341
-     * @throws EE_Error
342
-     * @throws InvalidArgumentException
343
-     * @throws InvalidDataTypeException
344
-     * @throws InvalidInterfaceException
345
-     */
346
-    protected function _total_registrations_this_month()
347
-    {
348
-        $EVT_ID = isset($this->_req_data['event_id']) ? absint($this->_req_data['event_id']) : false;
349
-        $_where = $EVT_ID ? array('EVT_ID' => $EVT_ID) : array();
350
-        $this_year_r = date('Y', current_time('timestamp'));
351
-        $time_start = ' 00:00:00';
352
-        $time_end = ' 23:59:59';
353
-        $this_month_r = date('m', current_time('timestamp'));
354
-        $days_this_month = date('t', current_time('timestamp'));
355
-        // setup date query.
356
-        $beginning_string = EEM_Registration::instance()->convert_datetime_for_query(
357
-            'REG_date',
358
-            $this_year_r . '-' . $this_month_r . '-01' . ' ' . $time_start,
359
-            'Y-m-d H:i:s'
360
-        );
361
-        $end_string = EEM_Registration::instance()->convert_datetime_for_query(
362
-            'REG_date',
363
-            $this_year_r . '-' . $this_month_r . '-' . $days_this_month . ' ' . $time_end,
364
-            'Y-m-d H:i:s'
365
-        );
366
-        $_where['REG_date'] = array(
367
-            'BETWEEN',
368
-            array(
369
-                $beginning_string,
370
-                $end_string,
371
-            ),
372
-        );
373
-        $_where['STS_ID'] = array('!=', EEM_Registration::status_id_incomplete);
374
-        return EEM_Registration::instance()->count(array($_where));
375
-    }
336
+	/**
337
+	 * _total_registrations_this_month
338
+	 *
339
+	 * @access protected
340
+	 * @return int
341
+	 * @throws EE_Error
342
+	 * @throws InvalidArgumentException
343
+	 * @throws InvalidDataTypeException
344
+	 * @throws InvalidInterfaceException
345
+	 */
346
+	protected function _total_registrations_this_month()
347
+	{
348
+		$EVT_ID = isset($this->_req_data['event_id']) ? absint($this->_req_data['event_id']) : false;
349
+		$_where = $EVT_ID ? array('EVT_ID' => $EVT_ID) : array();
350
+		$this_year_r = date('Y', current_time('timestamp'));
351
+		$time_start = ' 00:00:00';
352
+		$time_end = ' 23:59:59';
353
+		$this_month_r = date('m', current_time('timestamp'));
354
+		$days_this_month = date('t', current_time('timestamp'));
355
+		// setup date query.
356
+		$beginning_string = EEM_Registration::instance()->convert_datetime_for_query(
357
+			'REG_date',
358
+			$this_year_r . '-' . $this_month_r . '-01' . ' ' . $time_start,
359
+			'Y-m-d H:i:s'
360
+		);
361
+		$end_string = EEM_Registration::instance()->convert_datetime_for_query(
362
+			'REG_date',
363
+			$this_year_r . '-' . $this_month_r . '-' . $days_this_month . ' ' . $time_end,
364
+			'Y-m-d H:i:s'
365
+		);
366
+		$_where['REG_date'] = array(
367
+			'BETWEEN',
368
+			array(
369
+				$beginning_string,
370
+				$end_string,
371
+			),
372
+		);
373
+		$_where['STS_ID'] = array('!=', EEM_Registration::status_id_incomplete);
374
+		return EEM_Registration::instance()->count(array($_where));
375
+	}
376 376
 
377 377
 
378
-    /**
379
-     * _total_registrations_today
380
-     *
381
-     * @access protected
382
-     * @return int
383
-     * @throws EE_Error
384
-     * @throws InvalidArgumentException
385
-     * @throws InvalidDataTypeException
386
-     * @throws InvalidInterfaceException
387
-     */
388
-    protected function _total_registrations_today()
389
-    {
390
-        $EVT_ID = isset($this->_req_data['event_id']) ? absint($this->_req_data['event_id']) : false;
391
-        $_where = $EVT_ID ? array('EVT_ID' => $EVT_ID) : array();
392
-        $current_date = date('Y-m-d', current_time('timestamp'));
393
-        $time_start = ' 00:00:00';
394
-        $time_end = ' 23:59:59';
395
-        $_where['REG_date'] = array(
396
-            'BETWEEN',
397
-            array(
398
-                EEM_Registration::instance()->convert_datetime_for_query(
399
-                    'REG_date',
400
-                    $current_date . $time_start,
401
-                    'Y-m-d H:i:s'
402
-                ),
403
-                EEM_Registration::instance()->convert_datetime_for_query(
404
-                    'REG_date',
405
-                    $current_date . $time_end,
406
-                    'Y-m-d H:i:s'
407
-                ),
408
-            ),
409
-        );
410
-        $_where['STS_ID'] = array('!=', EEM_Registration::status_id_incomplete);
411
-        return EEM_Registration::instance()->count(array($_where));
412
-    }
378
+	/**
379
+	 * _total_registrations_today
380
+	 *
381
+	 * @access protected
382
+	 * @return int
383
+	 * @throws EE_Error
384
+	 * @throws InvalidArgumentException
385
+	 * @throws InvalidDataTypeException
386
+	 * @throws InvalidInterfaceException
387
+	 */
388
+	protected function _total_registrations_today()
389
+	{
390
+		$EVT_ID = isset($this->_req_data['event_id']) ? absint($this->_req_data['event_id']) : false;
391
+		$_where = $EVT_ID ? array('EVT_ID' => $EVT_ID) : array();
392
+		$current_date = date('Y-m-d', current_time('timestamp'));
393
+		$time_start = ' 00:00:00';
394
+		$time_end = ' 23:59:59';
395
+		$_where['REG_date'] = array(
396
+			'BETWEEN',
397
+			array(
398
+				EEM_Registration::instance()->convert_datetime_for_query(
399
+					'REG_date',
400
+					$current_date . $time_start,
401
+					'Y-m-d H:i:s'
402
+				),
403
+				EEM_Registration::instance()->convert_datetime_for_query(
404
+					'REG_date',
405
+					$current_date . $time_end,
406
+					'Y-m-d H:i:s'
407
+				),
408
+			),
409
+		);
410
+		$_where['STS_ID'] = array('!=', EEM_Registration::status_id_incomplete);
411
+		return EEM_Registration::instance()->count(array($_where));
412
+	}
413 413
 
414 414
 
415
-    /**
416
-     * column_cb
417
-     *
418
-     * @access public
419
-     * @param \EE_Registration $item
420
-     * @return string
421
-     * @throws EE_Error
422
-     * @throws InvalidArgumentException
423
-     * @throws InvalidDataTypeException
424
-     * @throws InvalidInterfaceException
425
-     * @throws ReflectionException
426
-     */
427
-    public function column_cb($item)
428
-    {
429
-        /** checkbox/lock **/
430
-        $transaction = $item->get_first_related('Transaction');
431
-        $payment_count = $transaction instanceof EE_Transaction
432
-            ? $transaction->count_related('Payment')
433
-            : 0;
434
-        return $payment_count > 0
435
-               || ! EE_Registry::instance()->CAP->current_user_can(
436
-                   'ee_edit_registration',
437
-                   'registration_list_table_checkbox_input',
438
-                   $item->ID()
439
-               )
440
-            ? sprintf('<input type="checkbox" name="_REG_ID[]" value="%1$d" />', $item->ID())
441
-              . '<span class="ee-lock-icon"></span>'
442
-            : sprintf('<input type="checkbox" name="_REG_ID[]" value="%1$d" />', $item->ID());
443
-    }
415
+	/**
416
+	 * column_cb
417
+	 *
418
+	 * @access public
419
+	 * @param \EE_Registration $item
420
+	 * @return string
421
+	 * @throws EE_Error
422
+	 * @throws InvalidArgumentException
423
+	 * @throws InvalidDataTypeException
424
+	 * @throws InvalidInterfaceException
425
+	 * @throws ReflectionException
426
+	 */
427
+	public function column_cb($item)
428
+	{
429
+		/** checkbox/lock **/
430
+		$transaction = $item->get_first_related('Transaction');
431
+		$payment_count = $transaction instanceof EE_Transaction
432
+			? $transaction->count_related('Payment')
433
+			: 0;
434
+		return $payment_count > 0
435
+			   || ! EE_Registry::instance()->CAP->current_user_can(
436
+				   'ee_edit_registration',
437
+				   'registration_list_table_checkbox_input',
438
+				   $item->ID()
439
+			   )
440
+			? sprintf('<input type="checkbox" name="_REG_ID[]" value="%1$d" />', $item->ID())
441
+			  . '<span class="ee-lock-icon"></span>'
442
+			: sprintf('<input type="checkbox" name="_REG_ID[]" value="%1$d" />', $item->ID());
443
+	}
444 444
 
445 445
 
446
-    /**
447
-     * column__REG_ID
448
-     *
449
-     * @access public
450
-     * @param \EE_Registration $item
451
-     * @return string
452
-     * @throws EE_Error
453
-     * @throws InvalidArgumentException
454
-     * @throws InvalidDataTypeException
455
-     * @throws InvalidInterfaceException
456
-     * @throws ReflectionException
457
-     */
458
-    public function column__REG_ID(EE_Registration $item)
459
-    {
460
-        $attendee = $item->attendee();
461
-        $content = $item->ID();
462
-        $content .= '<div class="show-on-mobile-view-only">';
463
-        $content .= '<br>';
464
-        $content .= $attendee instanceof EE_Attendee ? $attendee->full_name() : '';
465
-        $content .= '&nbsp;' . sprintf(__('(%1$s / %2$s)', 'event_espresso'), $item->count(), $item->group_size());
466
-        $content .= '<br>' . sprintf(__('Reg Code: %s', 'event_espresso'), $item->get('REG_code'));
467
-        $content .= '</div>';
468
-        return $content;
469
-    }
446
+	/**
447
+	 * column__REG_ID
448
+	 *
449
+	 * @access public
450
+	 * @param \EE_Registration $item
451
+	 * @return string
452
+	 * @throws EE_Error
453
+	 * @throws InvalidArgumentException
454
+	 * @throws InvalidDataTypeException
455
+	 * @throws InvalidInterfaceException
456
+	 * @throws ReflectionException
457
+	 */
458
+	public function column__REG_ID(EE_Registration $item)
459
+	{
460
+		$attendee = $item->attendee();
461
+		$content = $item->ID();
462
+		$content .= '<div class="show-on-mobile-view-only">';
463
+		$content .= '<br>';
464
+		$content .= $attendee instanceof EE_Attendee ? $attendee->full_name() : '';
465
+		$content .= '&nbsp;' . sprintf(__('(%1$s / %2$s)', 'event_espresso'), $item->count(), $item->group_size());
466
+		$content .= '<br>' . sprintf(__('Reg Code: %s', 'event_espresso'), $item->get('REG_code'));
467
+		$content .= '</div>';
468
+		return $content;
469
+	}
470 470
 
471 471
 
472
-    /**
473
-     * column__REG_date
474
-     *
475
-     * @access public
476
-     * @param \EE_Registration $item
477
-     * @return string
478
-     * @throws EE_Error
479
-     * @throws InvalidArgumentException
480
-     * @throws InvalidDataTypeException
481
-     * @throws InvalidInterfaceException
482
-     * @throws ReflectionException
483
-     */
484
-    public function column__REG_date(EE_Registration $item)
485
-    {
486
-        $this->_set_related_details($item);
487
-        // Build row actions
488
-        $view_lnk_url = EE_Admin_Page::add_query_args_and_nonce(
489
-            array(
490
-                'action' => 'view_transaction',
491
-                'TXN_ID' => $this->_transaction_details['id'],
492
-            ),
493
-            TXN_ADMIN_URL
494
-        );
495
-        $view_link = EE_Registry::instance()->CAP->current_user_can(
496
-            'ee_read_transaction',
497
-            'espresso_transactions_view_transaction'
498
-        )
499
-            ? '<a class="ee-status-color-'
500
-              . $this->_transaction_details['status']
501
-              . '" href="'
502
-              . $view_lnk_url
503
-              . '" title="'
504
-              . esc_attr($this->_transaction_details['title_attr'])
505
-              . '">'
506
-              . $item->get_i18n_datetime('REG_date')
507
-              . '</a>' : $item->get_i18n_datetime('REG_date');
508
-        $view_link .= '<br><span class="ee-status-text-small">'
509
-                      . EEH_Template::pretty_status($this->_transaction_details['status'], false, 'sentence')
510
-                      . '</span>';
511
-        return $view_link;
512
-    }
472
+	/**
473
+	 * column__REG_date
474
+	 *
475
+	 * @access public
476
+	 * @param \EE_Registration $item
477
+	 * @return string
478
+	 * @throws EE_Error
479
+	 * @throws InvalidArgumentException
480
+	 * @throws InvalidDataTypeException
481
+	 * @throws InvalidInterfaceException
482
+	 * @throws ReflectionException
483
+	 */
484
+	public function column__REG_date(EE_Registration $item)
485
+	{
486
+		$this->_set_related_details($item);
487
+		// Build row actions
488
+		$view_lnk_url = EE_Admin_Page::add_query_args_and_nonce(
489
+			array(
490
+				'action' => 'view_transaction',
491
+				'TXN_ID' => $this->_transaction_details['id'],
492
+			),
493
+			TXN_ADMIN_URL
494
+		);
495
+		$view_link = EE_Registry::instance()->CAP->current_user_can(
496
+			'ee_read_transaction',
497
+			'espresso_transactions_view_transaction'
498
+		)
499
+			? '<a class="ee-status-color-'
500
+			  . $this->_transaction_details['status']
501
+			  . '" href="'
502
+			  . $view_lnk_url
503
+			  . '" title="'
504
+			  . esc_attr($this->_transaction_details['title_attr'])
505
+			  . '">'
506
+			  . $item->get_i18n_datetime('REG_date')
507
+			  . '</a>' : $item->get_i18n_datetime('REG_date');
508
+		$view_link .= '<br><span class="ee-status-text-small">'
509
+					  . EEH_Template::pretty_status($this->_transaction_details['status'], false, 'sentence')
510
+					  . '</span>';
511
+		return $view_link;
512
+	}
513 513
 
514 514
 
515
-    /**
516
-     * column_event_name
517
-     *
518
-     * @access public
519
-     * @param \EE_Registration $item
520
-     * @return string
521
-     * @throws EE_Error
522
-     * @throws InvalidArgumentException
523
-     * @throws InvalidDataTypeException
524
-     * @throws InvalidInterfaceException
525
-     * @throws ReflectionException
526
-     */
527
-    public function column_event_name(EE_Registration $item)
528
-    {
529
-        $this->_set_related_details($item);
530
-        // page=espresso_events&action=edit_event&EVT_ID=2&edit_event_nonce=cf3a7e5b62
531
-        $EVT_ID = $item->event_ID();
532
-        $event_name = $item->event_name();
533
-        $event_name = $event_name ? $event_name : __("No Associated Event", 'event_espresso');
534
-        $event_name = wp_trim_words($event_name, 30, '...');
535
-        if ($EVT_ID) {
536
-            $edit_event_url = EE_Admin_Page::add_query_args_and_nonce(
537
-                array('action' => 'edit', 'post' => $EVT_ID),
538
-                EVENTS_ADMIN_URL
539
-            );
540
-            $edit_event = EE_Registry::instance()->CAP->current_user_can('ee_edit_event', 'edit_event', $EVT_ID)
541
-                ? '<a class="ee-status-color-'
542
-                  . $this->_event_details['status']
543
-                  . '" href="'
544
-                  . $edit_event_url
545
-                  . '" title="'
546
-                  . esc_attr($this->_event_details['title_attr'])
547
-                  . '">'
548
-                  . $event_name
549
-                  . '</a>' : $event_name;
550
-            $edit_event_url = EE_Admin_Page::add_query_args_and_nonce(array('event_id' => $EVT_ID), REG_ADMIN_URL);
551
-            $actions['event_filter'] = '<a href="' . $edit_event_url . '" title="';
552
-            $actions['event_filter'] .= sprintf(
553
-                esc_attr__('Filter this list to only show registrations for %s', 'event_espresso'),
554
-                $event_name
555
-            );
556
-            $actions['event_filter'] .= '">' . __('View Registrations', 'event_espresso') . '</a>';
557
-        } else {
558
-            $edit_event = $event_name;
559
-            $actions['event_filter'] = '';
560
-        }
561
-        return sprintf('%1$s %2$s', $edit_event, $this->row_actions($actions));
562
-    }
515
+	/**
516
+	 * column_event_name
517
+	 *
518
+	 * @access public
519
+	 * @param \EE_Registration $item
520
+	 * @return string
521
+	 * @throws EE_Error
522
+	 * @throws InvalidArgumentException
523
+	 * @throws InvalidDataTypeException
524
+	 * @throws InvalidInterfaceException
525
+	 * @throws ReflectionException
526
+	 */
527
+	public function column_event_name(EE_Registration $item)
528
+	{
529
+		$this->_set_related_details($item);
530
+		// page=espresso_events&action=edit_event&EVT_ID=2&edit_event_nonce=cf3a7e5b62
531
+		$EVT_ID = $item->event_ID();
532
+		$event_name = $item->event_name();
533
+		$event_name = $event_name ? $event_name : __("No Associated Event", 'event_espresso');
534
+		$event_name = wp_trim_words($event_name, 30, '...');
535
+		if ($EVT_ID) {
536
+			$edit_event_url = EE_Admin_Page::add_query_args_and_nonce(
537
+				array('action' => 'edit', 'post' => $EVT_ID),
538
+				EVENTS_ADMIN_URL
539
+			);
540
+			$edit_event = EE_Registry::instance()->CAP->current_user_can('ee_edit_event', 'edit_event', $EVT_ID)
541
+				? '<a class="ee-status-color-'
542
+				  . $this->_event_details['status']
543
+				  . '" href="'
544
+				  . $edit_event_url
545
+				  . '" title="'
546
+				  . esc_attr($this->_event_details['title_attr'])
547
+				  . '">'
548
+				  . $event_name
549
+				  . '</a>' : $event_name;
550
+			$edit_event_url = EE_Admin_Page::add_query_args_and_nonce(array('event_id' => $EVT_ID), REG_ADMIN_URL);
551
+			$actions['event_filter'] = '<a href="' . $edit_event_url . '" title="';
552
+			$actions['event_filter'] .= sprintf(
553
+				esc_attr__('Filter this list to only show registrations for %s', 'event_espresso'),
554
+				$event_name
555
+			);
556
+			$actions['event_filter'] .= '">' . __('View Registrations', 'event_espresso') . '</a>';
557
+		} else {
558
+			$edit_event = $event_name;
559
+			$actions['event_filter'] = '';
560
+		}
561
+		return sprintf('%1$s %2$s', $edit_event, $this->row_actions($actions));
562
+	}
563 563
 
564 564
 
565
-    /**
566
-     * column_DTT_EVT_start
567
-     *
568
-     * @access public
569
-     * @param \EE_Registration $item
570
-     * @return string
571
-     * @throws EE_Error
572
-     * @throws InvalidArgumentException
573
-     * @throws InvalidDataTypeException
574
-     * @throws InvalidInterfaceException
575
-     * @throws ReflectionException
576
-     */
577
-    public function column_DTT_EVT_start(EE_Registration $item)
578
-    {
579
-        $datetime_strings = array();
580
-        $ticket = $item->ticket(true);
581
-        if ($ticket instanceof EE_Ticket) {
582
-            $remove_defaults = array('default_where_conditions' => 'none');
583
-            $datetimes = $ticket->datetimes($remove_defaults);
584
-            foreach ($datetimes as $datetime) {
585
-                $datetime_strings[] = $datetime->get_i18n_datetime('DTT_EVT_start');
586
-            }
587
-            return $this->generateDisplayForDatetimes($datetime_strings);
588
-        }
589
-        return __('There is no ticket on this registration', 'event_espresso');
590
-    }
565
+	/**
566
+	 * column_DTT_EVT_start
567
+	 *
568
+	 * @access public
569
+	 * @param \EE_Registration $item
570
+	 * @return string
571
+	 * @throws EE_Error
572
+	 * @throws InvalidArgumentException
573
+	 * @throws InvalidDataTypeException
574
+	 * @throws InvalidInterfaceException
575
+	 * @throws ReflectionException
576
+	 */
577
+	public function column_DTT_EVT_start(EE_Registration $item)
578
+	{
579
+		$datetime_strings = array();
580
+		$ticket = $item->ticket(true);
581
+		if ($ticket instanceof EE_Ticket) {
582
+			$remove_defaults = array('default_where_conditions' => 'none');
583
+			$datetimes = $ticket->datetimes($remove_defaults);
584
+			foreach ($datetimes as $datetime) {
585
+				$datetime_strings[] = $datetime->get_i18n_datetime('DTT_EVT_start');
586
+			}
587
+			return $this->generateDisplayForDatetimes($datetime_strings);
588
+		}
589
+		return __('There is no ticket on this registration', 'event_espresso');
590
+	}
591 591
 
592 592
 
593
-    /**
594
-     * Receives an array of datetime strings to display and converts them to the html container for the column.
595
-     *
596
-     * @param array $datetime_strings
597
-     * @return string
598
-     */
599
-    public function generateDisplayForDateTimes(array $datetime_strings)
600
-    {
601
-        $content = '<div class="ee-registration-event-datetimes-container">';
602
-        $expand_toggle = count($datetime_strings) > 1
603
-            ? ' <span title="' . esc_attr__('Click to view all dates', 'event_espresso')
604
-              . '" class="ee-js ee-more-datetimes-toggle dashicons dashicons-plus"></span>'
605
-            : '';
606
-        // get first item for initial visibility
607
-        $content .= '<div class="left">' . array_shift($datetime_strings) . '</div>';
608
-        $content .= $expand_toggle;
609
-        if ($datetime_strings) {
610
-            $content .= '<div style="clear:both"></div>';
611
-            $content .= '<div class="ee-registration-event-datetimes-container more-items hidden">';
612
-            $content .= implode("<br />", $datetime_strings);
613
-            $content .= '</div>';
614
-        }
615
-        $content .= '</div>';
616
-        return $content;
617
-    }
593
+	/**
594
+	 * Receives an array of datetime strings to display and converts them to the html container for the column.
595
+	 *
596
+	 * @param array $datetime_strings
597
+	 * @return string
598
+	 */
599
+	public function generateDisplayForDateTimes(array $datetime_strings)
600
+	{
601
+		$content = '<div class="ee-registration-event-datetimes-container">';
602
+		$expand_toggle = count($datetime_strings) > 1
603
+			? ' <span title="' . esc_attr__('Click to view all dates', 'event_espresso')
604
+			  . '" class="ee-js ee-more-datetimes-toggle dashicons dashicons-plus"></span>'
605
+			: '';
606
+		// get first item for initial visibility
607
+		$content .= '<div class="left">' . array_shift($datetime_strings) . '</div>';
608
+		$content .= $expand_toggle;
609
+		if ($datetime_strings) {
610
+			$content .= '<div style="clear:both"></div>';
611
+			$content .= '<div class="ee-registration-event-datetimes-container more-items hidden">';
612
+			$content .= implode("<br />", $datetime_strings);
613
+			$content .= '</div>';
614
+		}
615
+		$content .= '</div>';
616
+		return $content;
617
+	}
618 618
 
619 619
 
620
-    /**
621
-     * column_ATT_fname
622
-     *
623
-     * @access public
624
-     * @param \EE_Registration $item
625
-     * @return string
626
-     * @throws EE_Error
627
-     * @throws InvalidArgumentException
628
-     * @throws InvalidDataTypeException
629
-     * @throws InvalidInterfaceException
630
-     * @throws ReflectionException
631
-     */
632
-    public function column_ATT_fname(EE_Registration $item)
633
-    {
634
-        $attendee = $item->attendee();
635
-        $edit_lnk_url = EE_Admin_Page::add_query_args_and_nonce(
636
-            array(
637
-                'action'  => 'view_registration',
638
-                '_REG_ID' => $item->ID(),
639
-            ),
640
-            REG_ADMIN_URL
641
-        );
642
-        $attendee_name = $attendee instanceof EE_Attendee ? $attendee->full_name() : '';
643
-        $link = EE_Registry::instance()->CAP->current_user_can(
644
-            'ee_read_registration',
645
-            'espresso_registrations_view_registration',
646
-            $item->ID()
647
-        )
648
-            ? '<a href="'
649
-              . $edit_lnk_url
650
-              . '" title="'
651
-              . esc_attr__('View Registration Details', 'event_espresso')
652
-              . '">'
653
-              . $attendee_name
654
-              . '</a>' : $attendee_name;
655
-        $link .= $item->count() === 1
656
-            ? '&nbsp;<sup><div class="dashicons dashicons-star-filled lt-blue-icon ee-icon-size-8"></div></sup>' : '';
657
-        $t = $item->get_first_related('Transaction');
658
-        $payment_count = $t instanceof EE_Transaction ? $t->count_related('Payment') : 0;
659
-        // append group count to name
660
-        $link .= '&nbsp;' . sprintf(__('(%1$s / %2$s)', 'event_espresso'), $item->count(), $item->group_size());
661
-        // append reg_code
662
-        $link .= '<br>' . sprintf(__('Reg Code: %s', 'event_espresso'), $item->get('REG_code'));
663
-        // reg status text for accessibility
664
-        $link .= '<br><span class="ee-status-text-small">'
665
-                 . EEH_Template::pretty_status($item->status_ID(), false, 'sentence')
666
-                 . '</span>';
667
-        // trash/restore/delete actions
668
-        $actions = array();
669
-        if ($this->_view !== 'trash'
670
-            && $payment_count === 0
671
-            && EE_Registry::instance()->CAP->current_user_can(
672
-                'ee_delete_registration',
673
-                'espresso_registrations_trash_registrations',
674
-                $item->ID()
675
-            )) {
676
-            $trash_lnk_url = EE_Admin_Page::add_query_args_and_nonce(
677
-                array(
678
-                    'action'  => 'trash_registrations',
679
-                    '_REG_ID' => $item->ID(),
680
-                ),
681
-                REG_ADMIN_URL
682
-            );
683
-            $actions['trash'] = '<a href="'
684
-                                . $trash_lnk_url
685
-                                . '" title="'
686
-                                . esc_attr__('Trash Registration', 'event_espresso')
687
-                                . '">' . __('Trash', 'event_espresso') . '</a>';
688
-        } elseif ($this->_view === 'trash') {
689
-            // restore registration link
690
-            if (EE_Registry::instance()->CAP->current_user_can(
691
-                'ee_delete_registration',
692
-                'espresso_registrations_restore_registrations',
693
-                $item->ID()
694
-            )) {
695
-                $restore_lnk_url = EE_Admin_Page::add_query_args_and_nonce(
696
-                    array(
697
-                        'action'  => 'restore_registrations',
698
-                        '_REG_ID' => $item->ID(),
699
-                    ),
700
-                    REG_ADMIN_URL
701
-                );
702
-                $actions['restore'] = '<a href="'
703
-                                      . $restore_lnk_url
704
-                                      . '" title="'
705
-                                      . esc_attr__('Restore Registration', 'event_espresso') . '">'
706
-                                      . __('Restore', 'event_espresso') . '</a>';
707
-            }
708
-            if (EE_Registry::instance()->CAP->current_user_can(
709
-                'ee_delete_registration',
710
-                'espresso_registrations_ee_delete_registrations',
711
-                $item->ID()
712
-            )) {
713
-                $delete_lnk_url = EE_Admin_Page::add_query_args_and_nonce(
714
-                    array(
715
-                        'action'  => 'delete_registrations',
716
-                        '_REG_ID' => $item->ID(),
717
-                    ),
718
-                    REG_ADMIN_URL
719
-                );
720
-                $actions['delete'] = '<a href="'
721
-                                     . $delete_lnk_url
722
-                                     . '" title="'
723
-                                     . esc_attr__('Delete Registration Permanently', 'event_espresso')
724
-                                     . '">'
725
-                                     . __('Delete', 'event_espresso')
726
-                                     . '</a>';
727
-            }
728
-        }
729
-        return sprintf('%1$s %2$s', $link, $this->row_actions($actions));
730
-    }
620
+	/**
621
+	 * column_ATT_fname
622
+	 *
623
+	 * @access public
624
+	 * @param \EE_Registration $item
625
+	 * @return string
626
+	 * @throws EE_Error
627
+	 * @throws InvalidArgumentException
628
+	 * @throws InvalidDataTypeException
629
+	 * @throws InvalidInterfaceException
630
+	 * @throws ReflectionException
631
+	 */
632
+	public function column_ATT_fname(EE_Registration $item)
633
+	{
634
+		$attendee = $item->attendee();
635
+		$edit_lnk_url = EE_Admin_Page::add_query_args_and_nonce(
636
+			array(
637
+				'action'  => 'view_registration',
638
+				'_REG_ID' => $item->ID(),
639
+			),
640
+			REG_ADMIN_URL
641
+		);
642
+		$attendee_name = $attendee instanceof EE_Attendee ? $attendee->full_name() : '';
643
+		$link = EE_Registry::instance()->CAP->current_user_can(
644
+			'ee_read_registration',
645
+			'espresso_registrations_view_registration',
646
+			$item->ID()
647
+		)
648
+			? '<a href="'
649
+			  . $edit_lnk_url
650
+			  . '" title="'
651
+			  . esc_attr__('View Registration Details', 'event_espresso')
652
+			  . '">'
653
+			  . $attendee_name
654
+			  . '</a>' : $attendee_name;
655
+		$link .= $item->count() === 1
656
+			? '&nbsp;<sup><div class="dashicons dashicons-star-filled lt-blue-icon ee-icon-size-8"></div></sup>' : '';
657
+		$t = $item->get_first_related('Transaction');
658
+		$payment_count = $t instanceof EE_Transaction ? $t->count_related('Payment') : 0;
659
+		// append group count to name
660
+		$link .= '&nbsp;' . sprintf(__('(%1$s / %2$s)', 'event_espresso'), $item->count(), $item->group_size());
661
+		// append reg_code
662
+		$link .= '<br>' . sprintf(__('Reg Code: %s', 'event_espresso'), $item->get('REG_code'));
663
+		// reg status text for accessibility
664
+		$link .= '<br><span class="ee-status-text-small">'
665
+				 . EEH_Template::pretty_status($item->status_ID(), false, 'sentence')
666
+				 . '</span>';
667
+		// trash/restore/delete actions
668
+		$actions = array();
669
+		if ($this->_view !== 'trash'
670
+			&& $payment_count === 0
671
+			&& EE_Registry::instance()->CAP->current_user_can(
672
+				'ee_delete_registration',
673
+				'espresso_registrations_trash_registrations',
674
+				$item->ID()
675
+			)) {
676
+			$trash_lnk_url = EE_Admin_Page::add_query_args_and_nonce(
677
+				array(
678
+					'action'  => 'trash_registrations',
679
+					'_REG_ID' => $item->ID(),
680
+				),
681
+				REG_ADMIN_URL
682
+			);
683
+			$actions['trash'] = '<a href="'
684
+								. $trash_lnk_url
685
+								. '" title="'
686
+								. esc_attr__('Trash Registration', 'event_espresso')
687
+								. '">' . __('Trash', 'event_espresso') . '</a>';
688
+		} elseif ($this->_view === 'trash') {
689
+			// restore registration link
690
+			if (EE_Registry::instance()->CAP->current_user_can(
691
+				'ee_delete_registration',
692
+				'espresso_registrations_restore_registrations',
693
+				$item->ID()
694
+			)) {
695
+				$restore_lnk_url = EE_Admin_Page::add_query_args_and_nonce(
696
+					array(
697
+						'action'  => 'restore_registrations',
698
+						'_REG_ID' => $item->ID(),
699
+					),
700
+					REG_ADMIN_URL
701
+				);
702
+				$actions['restore'] = '<a href="'
703
+									  . $restore_lnk_url
704
+									  . '" title="'
705
+									  . esc_attr__('Restore Registration', 'event_espresso') . '">'
706
+									  . __('Restore', 'event_espresso') . '</a>';
707
+			}
708
+			if (EE_Registry::instance()->CAP->current_user_can(
709
+				'ee_delete_registration',
710
+				'espresso_registrations_ee_delete_registrations',
711
+				$item->ID()
712
+			)) {
713
+				$delete_lnk_url = EE_Admin_Page::add_query_args_and_nonce(
714
+					array(
715
+						'action'  => 'delete_registrations',
716
+						'_REG_ID' => $item->ID(),
717
+					),
718
+					REG_ADMIN_URL
719
+				);
720
+				$actions['delete'] = '<a href="'
721
+									 . $delete_lnk_url
722
+									 . '" title="'
723
+									 . esc_attr__('Delete Registration Permanently', 'event_espresso')
724
+									 . '">'
725
+									 . __('Delete', 'event_espresso')
726
+									 . '</a>';
727
+			}
728
+		}
729
+		return sprintf('%1$s %2$s', $link, $this->row_actions($actions));
730
+	}
731 731
 
732 732
 
733
-    /**
734
-     * column_ATT_email
735
-     *
736
-     * @access public
737
-     * @param \EE_Registration $item
738
-     * @return string
739
-     * @throws EE_Error
740
-     * @throws InvalidArgumentException
741
-     * @throws InvalidDataTypeException
742
-     * @throws InvalidInterfaceException
743
-     * @throws ReflectionException
744
-     */
745
-    public function column_ATT_email(EE_Registration $item)
746
-    {
747
-        $attendee = $item->get_first_related('Attendee');
748
-        return ! $attendee instanceof EE_Attendee ? __('No attached contact record.', 'event_espresso')
749
-            : $attendee->email();
750
-    }
733
+	/**
734
+	 * column_ATT_email
735
+	 *
736
+	 * @access public
737
+	 * @param \EE_Registration $item
738
+	 * @return string
739
+	 * @throws EE_Error
740
+	 * @throws InvalidArgumentException
741
+	 * @throws InvalidDataTypeException
742
+	 * @throws InvalidInterfaceException
743
+	 * @throws ReflectionException
744
+	 */
745
+	public function column_ATT_email(EE_Registration $item)
746
+	{
747
+		$attendee = $item->get_first_related('Attendee');
748
+		return ! $attendee instanceof EE_Attendee ? __('No attached contact record.', 'event_espresso')
749
+			: $attendee->email();
750
+	}
751 751
 
752 752
 
753
-    /**
754
-     * column__REG_count
755
-     *
756
-     * @access public
757
-     * @param \EE_Registration $item
758
-     * @return string
759
-     */
760
-    public function column__REG_count(EE_Registration $item)
761
-    {
762
-        return sprintf(__('%1$s / %2$s', 'event_espresso'), $item->count(), $item->group_size());
763
-    }
753
+	/**
754
+	 * column__REG_count
755
+	 *
756
+	 * @access public
757
+	 * @param \EE_Registration $item
758
+	 * @return string
759
+	 */
760
+	public function column__REG_count(EE_Registration $item)
761
+	{
762
+		return sprintf(__('%1$s / %2$s', 'event_espresso'), $item->count(), $item->group_size());
763
+	}
764 764
 
765 765
 
766
-    /**
767
-     * column_PRC_amount
768
-     *
769
-     * @access public
770
-     * @param \EE_Registration $item
771
-     * @return string
772
-     * @throws EE_Error
773
-     */
774
-    public function column_PRC_amount(EE_Registration $item)
775
-    {
776
-        $ticket = $item->ticket();
777
-        $content = isset($_GET['event_id']) && $ticket instanceof EE_Ticket ? '<span class="TKT_name">'
778
-                                                                              . $ticket->name()
779
-                                                                              . '</span><br />' : '';
780
-        if ($item->final_price() > 0) {
781
-            $content .= '<span class="reg-pad-rght">' . $item->pretty_final_price() . '</span>';
782
-        } else {
783
-            // free event
784
-            $content .= '<span class="reg-overview-free-event-spn reg-pad-rght">'
785
-                        . __('free', 'event_espresso')
786
-                        . '</span>';
787
-        }
788
-        return $content;
789
-    }
766
+	/**
767
+	 * column_PRC_amount
768
+	 *
769
+	 * @access public
770
+	 * @param \EE_Registration $item
771
+	 * @return string
772
+	 * @throws EE_Error
773
+	 */
774
+	public function column_PRC_amount(EE_Registration $item)
775
+	{
776
+		$ticket = $item->ticket();
777
+		$content = isset($_GET['event_id']) && $ticket instanceof EE_Ticket ? '<span class="TKT_name">'
778
+																			  . $ticket->name()
779
+																			  . '</span><br />' : '';
780
+		if ($item->final_price() > 0) {
781
+			$content .= '<span class="reg-pad-rght">' . $item->pretty_final_price() . '</span>';
782
+		} else {
783
+			// free event
784
+			$content .= '<span class="reg-overview-free-event-spn reg-pad-rght">'
785
+						. __('free', 'event_espresso')
786
+						. '</span>';
787
+		}
788
+		return $content;
789
+	}
790 790
 
791 791
 
792
-    /**
793
-     * column__REG_final_price
794
-     *
795
-     * @access public
796
-     * @param \EE_Registration $item
797
-     * @return string
798
-     * @throws EE_Error
799
-     */
800
-    public function column__REG_final_price(EE_Registration $item)
801
-    {
802
-        $ticket = $item->ticket();
803
-        $content = isset($_GET['event_id']) || ! $ticket instanceof EE_Ticket
804
-            ? ''
805
-            : '<span class="TKT_name">'
806
-              . $ticket->name()
807
-              . '</span><br />';
808
-        $content .= '<span class="reg-pad-rght">' . $item->pretty_final_price() . '</span>';
809
-        return $content;
810
-    }
792
+	/**
793
+	 * column__REG_final_price
794
+	 *
795
+	 * @access public
796
+	 * @param \EE_Registration $item
797
+	 * @return string
798
+	 * @throws EE_Error
799
+	 */
800
+	public function column__REG_final_price(EE_Registration $item)
801
+	{
802
+		$ticket = $item->ticket();
803
+		$content = isset($_GET['event_id']) || ! $ticket instanceof EE_Ticket
804
+			? ''
805
+			: '<span class="TKT_name">'
806
+			  . $ticket->name()
807
+			  . '</span><br />';
808
+		$content .= '<span class="reg-pad-rght">' . $item->pretty_final_price() . '</span>';
809
+		return $content;
810
+	}
811 811
 
812 812
 
813
-    /**
814
-     * column__REG_paid
815
-     *
816
-     * @access public
817
-     * @param \EE_Registration $item
818
-     * @return string
819
-     * @throws EE_Error
820
-     */
821
-    public function column__REG_paid(EE_Registration $item)
822
-    {
823
-        $payment_method = $item->payment_method();
824
-        $payment_method_name = $payment_method instanceof EE_Payment_Method ? $payment_method->admin_name()
825
-            : __('Unknown', 'event_espresso');
826
-        $content = '<span class="reg-pad-rght">' . $item->pretty_paid() . '</span>';
827
-        if ($item->paid() > 0) {
828
-            $content .= '<br><span class="ee-status-text-small">'
829
-                        . sprintf(
830
-                            __('...via %s', 'event_espresso'),
831
-                            $payment_method_name
832
-                        )
833
-                        . '</span>';
834
-        }
835
-        return $content;
836
-    }
813
+	/**
814
+	 * column__REG_paid
815
+	 *
816
+	 * @access public
817
+	 * @param \EE_Registration $item
818
+	 * @return string
819
+	 * @throws EE_Error
820
+	 */
821
+	public function column__REG_paid(EE_Registration $item)
822
+	{
823
+		$payment_method = $item->payment_method();
824
+		$payment_method_name = $payment_method instanceof EE_Payment_Method ? $payment_method->admin_name()
825
+			: __('Unknown', 'event_espresso');
826
+		$content = '<span class="reg-pad-rght">' . $item->pretty_paid() . '</span>';
827
+		if ($item->paid() > 0) {
828
+			$content .= '<br><span class="ee-status-text-small">'
829
+						. sprintf(
830
+							__('...via %s', 'event_espresso'),
831
+							$payment_method_name
832
+						)
833
+						. '</span>';
834
+		}
835
+		return $content;
836
+	}
837 837
 
838 838
 
839
-    /**
840
-     * column_TXN_total
841
-     *
842
-     * @access public
843
-     * @param \EE_Registration $item
844
-     * @return string
845
-     * @throws EE_Error
846
-     * @throws EntityNotFoundException
847
-     * @throws InvalidArgumentException
848
-     * @throws InvalidDataTypeException
849
-     * @throws InvalidInterfaceException
850
-     */
851
-    public function column_TXN_total(EE_Registration $item)
852
-    {
853
-        if ($item->transaction()) {
854
-            $view_txn_lnk_url = EE_Admin_Page::add_query_args_and_nonce(
855
-                array(
856
-                    'action' => 'view_transaction',
857
-                    'TXN_ID' => $item->transaction_ID(),
858
-                ),
859
-                TXN_ADMIN_URL
860
-            );
861
-            return EE_Registry::instance()->CAP->current_user_can(
862
-                'ee_read_transaction',
863
-                'espresso_transactions_view_transaction',
864
-                $item->transaction_ID()
865
-            )
866
-                ? '<span class="reg-pad-rght"><a class="status-'
867
-                  . $item->transaction()->status_ID()
868
-                  . '" href="'
869
-                  . $view_txn_lnk_url
870
-                  . '"  title="'
871
-                  . esc_attr__('View Transaction', 'event_espresso')
872
-                  . '">'
873
-                  . $item->transaction()->pretty_total()
874
-                  . '</a></span>' : '<span class="reg-pad-rght">' . $item->transaction()->pretty_total() . '</span>';
875
-        } else {
876
-            return __("None", "event_espresso");
877
-        }
878
-    }
839
+	/**
840
+	 * column_TXN_total
841
+	 *
842
+	 * @access public
843
+	 * @param \EE_Registration $item
844
+	 * @return string
845
+	 * @throws EE_Error
846
+	 * @throws EntityNotFoundException
847
+	 * @throws InvalidArgumentException
848
+	 * @throws InvalidDataTypeException
849
+	 * @throws InvalidInterfaceException
850
+	 */
851
+	public function column_TXN_total(EE_Registration $item)
852
+	{
853
+		if ($item->transaction()) {
854
+			$view_txn_lnk_url = EE_Admin_Page::add_query_args_and_nonce(
855
+				array(
856
+					'action' => 'view_transaction',
857
+					'TXN_ID' => $item->transaction_ID(),
858
+				),
859
+				TXN_ADMIN_URL
860
+			);
861
+			return EE_Registry::instance()->CAP->current_user_can(
862
+				'ee_read_transaction',
863
+				'espresso_transactions_view_transaction',
864
+				$item->transaction_ID()
865
+			)
866
+				? '<span class="reg-pad-rght"><a class="status-'
867
+				  . $item->transaction()->status_ID()
868
+				  . '" href="'
869
+				  . $view_txn_lnk_url
870
+				  . '"  title="'
871
+				  . esc_attr__('View Transaction', 'event_espresso')
872
+				  . '">'
873
+				  . $item->transaction()->pretty_total()
874
+				  . '</a></span>' : '<span class="reg-pad-rght">' . $item->transaction()->pretty_total() . '</span>';
875
+		} else {
876
+			return __("None", "event_espresso");
877
+		}
878
+	}
879 879
 
880 880
 
881
-    /**
882
-     * column_TXN_paid
883
-     *
884
-     * @access public
885
-     * @param \EE_Registration $item
886
-     * @return string
887
-     * @throws EE_Error
888
-     * @throws EntityNotFoundException
889
-     * @throws InvalidArgumentException
890
-     * @throws InvalidDataTypeException
891
-     * @throws InvalidInterfaceException
892
-     */
893
-    public function column_TXN_paid(EE_Registration $item)
894
-    {
895
-        if ($item->count() === 1) {
896
-            $transaction = $item->transaction() ? $item->transaction() : EE_Transaction::new_instance();
897
-            if ($transaction->paid() >= $transaction->total()) {
898
-                return '<span class="reg-pad-rght"><div class="dashicons dashicons-yes green-icon"></div></span>';
899
-            } else {
900
-                $view_txn_lnk_url = EE_Admin_Page::add_query_args_and_nonce(
901
-                    array(
902
-                        'action' => 'view_transaction',
903
-                        'TXN_ID' => $item->transaction_ID(),
904
-                    ),
905
-                    TXN_ADMIN_URL
906
-                );
907
-                return EE_Registry::instance()->CAP->current_user_can(
908
-                    'ee_read_transaction',
909
-                    'espresso_transactions_view_transaction',
910
-                    $item->transaction_ID()
911
-                )
912
-                    ? '<span class="reg-pad-rght"><a class="status-'
913
-                      . $transaction->status_ID()
914
-                      . '" href="'
915
-                      . $view_txn_lnk_url
916
-                      . '"  title="'
917
-                      . esc_attr__('View Transaction', 'event_espresso')
918
-                      . '">'
919
-                      . $item->transaction()->pretty_paid()
920
-                      . '</a><span>' : '<span class="reg-pad-rght">' . $item->transaction()->pretty_paid() . '</span>';
921
-            }
922
-        }
923
-        return '&nbsp;';
924
-    }
881
+	/**
882
+	 * column_TXN_paid
883
+	 *
884
+	 * @access public
885
+	 * @param \EE_Registration $item
886
+	 * @return string
887
+	 * @throws EE_Error
888
+	 * @throws EntityNotFoundException
889
+	 * @throws InvalidArgumentException
890
+	 * @throws InvalidDataTypeException
891
+	 * @throws InvalidInterfaceException
892
+	 */
893
+	public function column_TXN_paid(EE_Registration $item)
894
+	{
895
+		if ($item->count() === 1) {
896
+			$transaction = $item->transaction() ? $item->transaction() : EE_Transaction::new_instance();
897
+			if ($transaction->paid() >= $transaction->total()) {
898
+				return '<span class="reg-pad-rght"><div class="dashicons dashicons-yes green-icon"></div></span>';
899
+			} else {
900
+				$view_txn_lnk_url = EE_Admin_Page::add_query_args_and_nonce(
901
+					array(
902
+						'action' => 'view_transaction',
903
+						'TXN_ID' => $item->transaction_ID(),
904
+					),
905
+					TXN_ADMIN_URL
906
+				);
907
+				return EE_Registry::instance()->CAP->current_user_can(
908
+					'ee_read_transaction',
909
+					'espresso_transactions_view_transaction',
910
+					$item->transaction_ID()
911
+				)
912
+					? '<span class="reg-pad-rght"><a class="status-'
913
+					  . $transaction->status_ID()
914
+					  . '" href="'
915
+					  . $view_txn_lnk_url
916
+					  . '"  title="'
917
+					  . esc_attr__('View Transaction', 'event_espresso')
918
+					  . '">'
919
+					  . $item->transaction()->pretty_paid()
920
+					  . '</a><span>' : '<span class="reg-pad-rght">' . $item->transaction()->pretty_paid() . '</span>';
921
+			}
922
+		}
923
+		return '&nbsp;';
924
+	}
925 925
 
926 926
 
927
-    /**
928
-     * column_actions
929
-     *
930
-     * @access public
931
-     * @param \EE_Registration $item
932
-     * @return string
933
-     * @throws EE_Error
934
-     * @throws InvalidArgumentException
935
-     * @throws InvalidDataTypeException
936
-     * @throws InvalidInterfaceException
937
-     * @throws ReflectionException
938
-     */
939
-    public function column_actions(EE_Registration $item)
940
-    {
941
-        $actions = array();
942
-        $attendee = $item->attendee();
943
-        $this->_set_related_details($item);
944
-        // Build row actions
945
-        $view_lnk_url = EE_Admin_Page::add_query_args_and_nonce(
946
-            array(
947
-                'action'  => 'view_registration',
948
-                '_REG_ID' => $item->ID(),
949
-            ),
950
-            REG_ADMIN_URL
951
-        );
952
-        $edit_lnk_url = EE_Admin_Page::add_query_args_and_nonce(
953
-            array(
954
-                'action' => 'edit_attendee',
955
-                'post'   => $item->attendee_ID(),
956
-            ),
957
-            REG_ADMIN_URL
958
-        );
959
-        // page=attendees&event_admin_reports=resend_email&registration_id=43653465634&event_id=2&form_action=resend_email
960
-        // $resend_reg_lnk_url_params = array( 'action'=>'resend_registration', '_REG_ID'=>$item->REG_ID );
961
-        $resend_reg_lnk_url = EE_Admin_Page::add_query_args_and_nonce(
962
-            array(
963
-                'action'  => 'resend_registration',
964
-                '_REG_ID' => $item->ID(),
965
-            ),
966
-            REG_ADMIN_URL,
967
-            true
968
-        );
969
-        // Build row actions
970
-        $actions['view_lnk'] = EE_Registry::instance()->CAP->current_user_can(
971
-            'ee_read_registration',
972
-            'espresso_registrations_view_registration',
973
-            $item->ID()
974
-        ) ? '<li><a href="'
975
-            . $view_lnk_url
976
-            . '" title="'
977
-            . esc_attr__('View Registration Details', 'event_espresso')
978
-            . '" class="tiny-text">
927
+	/**
928
+	 * column_actions
929
+	 *
930
+	 * @access public
931
+	 * @param \EE_Registration $item
932
+	 * @return string
933
+	 * @throws EE_Error
934
+	 * @throws InvalidArgumentException
935
+	 * @throws InvalidDataTypeException
936
+	 * @throws InvalidInterfaceException
937
+	 * @throws ReflectionException
938
+	 */
939
+	public function column_actions(EE_Registration $item)
940
+	{
941
+		$actions = array();
942
+		$attendee = $item->attendee();
943
+		$this->_set_related_details($item);
944
+		// Build row actions
945
+		$view_lnk_url = EE_Admin_Page::add_query_args_and_nonce(
946
+			array(
947
+				'action'  => 'view_registration',
948
+				'_REG_ID' => $item->ID(),
949
+			),
950
+			REG_ADMIN_URL
951
+		);
952
+		$edit_lnk_url = EE_Admin_Page::add_query_args_and_nonce(
953
+			array(
954
+				'action' => 'edit_attendee',
955
+				'post'   => $item->attendee_ID(),
956
+			),
957
+			REG_ADMIN_URL
958
+		);
959
+		// page=attendees&event_admin_reports=resend_email&registration_id=43653465634&event_id=2&form_action=resend_email
960
+		// $resend_reg_lnk_url_params = array( 'action'=>'resend_registration', '_REG_ID'=>$item->REG_ID );
961
+		$resend_reg_lnk_url = EE_Admin_Page::add_query_args_and_nonce(
962
+			array(
963
+				'action'  => 'resend_registration',
964
+				'_REG_ID' => $item->ID(),
965
+			),
966
+			REG_ADMIN_URL,
967
+			true
968
+		);
969
+		// Build row actions
970
+		$actions['view_lnk'] = EE_Registry::instance()->CAP->current_user_can(
971
+			'ee_read_registration',
972
+			'espresso_registrations_view_registration',
973
+			$item->ID()
974
+		) ? '<li><a href="'
975
+			. $view_lnk_url
976
+			. '" title="'
977
+			. esc_attr__('View Registration Details', 'event_espresso')
978
+			. '" class="tiny-text">
979 979
 				<div class="dashicons dashicons-clipboard"></div>
980 980
 			</a>
981 981
 			</li>'
982
-            : '';
983
-        $actions['edit_lnk'] = EE_Registry::instance()->CAP->current_user_can(
984
-            'ee_edit_contacts',
985
-            'espresso_registrations_edit_attendee'
986
-        )
987
-                               && $attendee instanceof EE_Attendee
988
-            ? '
982
+			: '';
983
+		$actions['edit_lnk'] = EE_Registry::instance()->CAP->current_user_can(
984
+			'ee_edit_contacts',
985
+			'espresso_registrations_edit_attendee'
986
+		)
987
+							   && $attendee instanceof EE_Attendee
988
+			? '
989 989
 			<li>
990 990
 			<a href="' . $edit_lnk_url . '" title="'
991
-              . esc_attr__('Edit Contact Details', 'event_espresso') . '" class="tiny-text">
991
+			  . esc_attr__('Edit Contact Details', 'event_espresso') . '" class="tiny-text">
992 992
 				<div class="ee-icon ee-icon-user-edit ee-icon-size-16"></div>
993 993
 			</a>
994 994
 			</li>' : '';
995
-        $actions['resend_reg_lnk'] = $attendee instanceof EE_Attendee
996
-                                     && EE_Registry::instance()->CAP->current_user_can(
997
-                                         'ee_send_message',
998
-                                         'espresso_registrations_resend_registration',
999
-                                         $item->ID()
1000
-                                     )
1001
-            ? '
995
+		$actions['resend_reg_lnk'] = $attendee instanceof EE_Attendee
996
+									 && EE_Registry::instance()->CAP->current_user_can(
997
+										 'ee_send_message',
998
+										 'espresso_registrations_resend_registration',
999
+										 $item->ID()
1000
+									 )
1001
+			? '
1002 1002
 			<li>
1003 1003
 			<a href="'
1004
-              . $resend_reg_lnk_url
1005
-              . '" title="'
1006
-              . esc_attr__('Resend Registration Details', 'event_espresso')
1007
-              . '" class="tiny-text">
1004
+			  . $resend_reg_lnk_url
1005
+			  . '" title="'
1006
+			  . esc_attr__('Resend Registration Details', 'event_espresso')
1007
+			  . '" class="tiny-text">
1008 1008
 				<div class="dashicons dashicons-email-alt"></div>
1009 1009
 			</a>
1010 1010
 			</li>' : '';
1011
-        // page=transactions&action=view_transaction&txn=256&_wpnonce=6414da4dbb
1012
-        $view_txn_lnk_url = EE_Admin_Page::add_query_args_and_nonce(
1013
-            array(
1014
-                'action' => 'view_transaction',
1015
-                'TXN_ID' => $this->_transaction_details['id'],
1016
-            ),
1017
-            TXN_ADMIN_URL
1018
-        );
1019
-        $actions['view_txn_lnk'] = EE_Registry::instance()->CAP->current_user_can(
1020
-            'ee_read_transaction',
1021
-            'espresso_transactions_view_transaction',
1022
-            $this->_transaction_details['id']
1023
-        )
1024
-            ? '
1011
+		// page=transactions&action=view_transaction&txn=256&_wpnonce=6414da4dbb
1012
+		$view_txn_lnk_url = EE_Admin_Page::add_query_args_and_nonce(
1013
+			array(
1014
+				'action' => 'view_transaction',
1015
+				'TXN_ID' => $this->_transaction_details['id'],
1016
+			),
1017
+			TXN_ADMIN_URL
1018
+		);
1019
+		$actions['view_txn_lnk'] = EE_Registry::instance()->CAP->current_user_can(
1020
+			'ee_read_transaction',
1021
+			'espresso_transactions_view_transaction',
1022
+			$this->_transaction_details['id']
1023
+		)
1024
+			? '
1025 1025
 			<li>
1026 1026
 			<a class="ee-status-color-'
1027
-              . $this->_transaction_details['status']
1028
-              . ' tiny-text" href="'
1029
-              . $view_txn_lnk_url
1030
-              . '"  title="'
1031
-              . $this->_transaction_details['title_attr']
1032
-              . '">
1027
+			  . $this->_transaction_details['status']
1028
+			  . ' tiny-text" href="'
1029
+			  . $view_txn_lnk_url
1030
+			  . '"  title="'
1031
+			  . $this->_transaction_details['title_attr']
1032
+			  . '">
1033 1033
 				<div class="dashicons dashicons-cart"></div>
1034 1034
 			</a>
1035 1035
 			</li>' : '';
1036
-        // invoice link
1037
-        $actions['dl_invoice_lnk'] = '';
1038
-        $dl_invoice_lnk_url = $item->invoice_url();
1039
-        // only show invoice link if message type is active.
1040
-        if ($attendee instanceof EE_Attendee
1041
-            && $item->is_primary_registrant()
1042
-            && EEH_MSG_Template::is_mt_active('invoice')
1043
-        ) {
1044
-            $actions['dl_invoice_lnk'] = '
1036
+		// invoice link
1037
+		$actions['dl_invoice_lnk'] = '';
1038
+		$dl_invoice_lnk_url = $item->invoice_url();
1039
+		// only show invoice link if message type is active.
1040
+		if ($attendee instanceof EE_Attendee
1041
+			&& $item->is_primary_registrant()
1042
+			&& EEH_MSG_Template::is_mt_active('invoice')
1043
+		) {
1044
+			$actions['dl_invoice_lnk'] = '
1045 1045
 		<li>
1046 1046
 			<a title="'
1047
-                                         . esc_attr__('View Transaction Invoice', 'event_espresso')
1048
-                                         . '" target="_blank" href="'
1049
-                                         . $dl_invoice_lnk_url
1050
-                                         . '" class="tiny-text">
1047
+										 . esc_attr__('View Transaction Invoice', 'event_espresso')
1048
+										 . '" target="_blank" href="'
1049
+										 . $dl_invoice_lnk_url
1050
+										 . '" class="tiny-text">
1051 1051
 				<span class="dashicons dashicons-media-spreadsheet ee-icon-size-18"></span>
1052 1052
 			</a>
1053 1053
 		</li>';
1054
-        }
1055
-        $actions['filtered_messages_link'] = '';
1056
-        // message list table link (filtered by REG_ID
1057
-        if (EE_Registry::instance()->CAP->current_user_can('ee_read_global_messages', 'view_filtered_messages')) {
1058
-            $actions['filtered_messages_link'] = '<li>'
1059
-                                                 . EEH_MSG_Template::get_message_action_link(
1060
-                                                     'see_notifications_for',
1061
-                                                     null,
1062
-                                                     array('_REG_ID' => $item->ID())
1063
-                                                 ) . '</li>';
1064
-        }
1065
-        $actions = apply_filters('FHEE__EE_Registrations_List_Table__column_actions__actions', $actions, $item, $this);
1066
-        return $this->_action_string(implode('', $actions), $item, 'ul', 'reg-overview-actions-ul');
1067
-    }
1054
+		}
1055
+		$actions['filtered_messages_link'] = '';
1056
+		// message list table link (filtered by REG_ID
1057
+		if (EE_Registry::instance()->CAP->current_user_can('ee_read_global_messages', 'view_filtered_messages')) {
1058
+			$actions['filtered_messages_link'] = '<li>'
1059
+												 . EEH_MSG_Template::get_message_action_link(
1060
+													 'see_notifications_for',
1061
+													 null,
1062
+													 array('_REG_ID' => $item->ID())
1063
+												 ) . '</li>';
1064
+		}
1065
+		$actions = apply_filters('FHEE__EE_Registrations_List_Table__column_actions__actions', $actions, $item, $this);
1066
+		return $this->_action_string(implode('', $actions), $item, 'ul', 'reg-overview-actions-ul');
1067
+	}
1068 1068
 }
Please login to merge, or discard this patch.
Spacing   +27 added lines, -27 removed lines patch added patch discarded remove patch
@@ -53,10 +53,10 @@  discard block
 block discarded – undo
53 53
      */
54 54
     public function __construct(Registrations_Admin_Page $admin_page)
55 55
     {
56
-        if (! empty($_GET['event_id'])) {
56
+        if ( ! empty($_GET['event_id'])) {
57 57
             $extra_query_args = array();
58 58
             foreach ($admin_page->get_views() as $key => $view_details) {
59
-                $extra_query_args[ $view_details['slug'] ] = array('event_id' => $_GET['event_id']);
59
+                $extra_query_args[$view_details['slug']] = array('event_id' => $_GET['event_id']);
60 60
             }
61 61
             $this->_views = $admin_page->get_list_table_view_RLs($extra_query_args);
62 62
         }
@@ -158,7 +158,7 @@  discard block
 block discarded – undo
158 158
         );
159 159
         $this->_primary_column = '_REG_ID';
160 160
         $this->_sortable_columns = array(
161
-            '_REG_date'     => array('_REG_date' => true),   // true means its already sorted
161
+            '_REG_date'     => array('_REG_date' => true), // true means its already sorted
162 162
             /**
163 163
              * Allows users to change the default sort if they wish.
164 164
              * Returning a falsey on this filter will result in the default sort to be by firstname rather than last
@@ -190,7 +190,7 @@  discard block
 block discarded – undo
190 190
     {
191 191
         $class = parent::_get_row_class($item);
192 192
         // add status class
193
-        $class .= ' ee-status-strip reg-status-' . $item->status_ID();
193
+        $class .= ' ee-status-strip reg-status-'.$item->status_ID();
194 194
         if ($this->_has_checkbox_column) {
195 195
             $class .= ' has-checkbox-column';
196 196
         }
@@ -355,12 +355,12 @@  discard block
 block discarded – undo
355 355
         // setup date query.
356 356
         $beginning_string = EEM_Registration::instance()->convert_datetime_for_query(
357 357
             'REG_date',
358
-            $this_year_r . '-' . $this_month_r . '-01' . ' ' . $time_start,
358
+            $this_year_r.'-'.$this_month_r.'-01'.' '.$time_start,
359 359
             'Y-m-d H:i:s'
360 360
         );
361 361
         $end_string = EEM_Registration::instance()->convert_datetime_for_query(
362 362
             'REG_date',
363
-            $this_year_r . '-' . $this_month_r . '-' . $days_this_month . ' ' . $time_end,
363
+            $this_year_r.'-'.$this_month_r.'-'.$days_this_month.' '.$time_end,
364 364
             'Y-m-d H:i:s'
365 365
         );
366 366
         $_where['REG_date'] = array(
@@ -397,12 +397,12 @@  discard block
 block discarded – undo
397 397
             array(
398 398
                 EEM_Registration::instance()->convert_datetime_for_query(
399 399
                     'REG_date',
400
-                    $current_date . $time_start,
400
+                    $current_date.$time_start,
401 401
                     'Y-m-d H:i:s'
402 402
                 ),
403 403
                 EEM_Registration::instance()->convert_datetime_for_query(
404 404
                     'REG_date',
405
-                    $current_date . $time_end,
405
+                    $current_date.$time_end,
406 406
                     'Y-m-d H:i:s'
407 407
                 ),
408 408
             ),
@@ -462,8 +462,8 @@  discard block
 block discarded – undo
462 462
         $content .= '<div class="show-on-mobile-view-only">';
463 463
         $content .= '<br>';
464 464
         $content .= $attendee instanceof EE_Attendee ? $attendee->full_name() : '';
465
-        $content .= '&nbsp;' . sprintf(__('(%1$s / %2$s)', 'event_espresso'), $item->count(), $item->group_size());
466
-        $content .= '<br>' . sprintf(__('Reg Code: %s', 'event_espresso'), $item->get('REG_code'));
465
+        $content .= '&nbsp;'.sprintf(__('(%1$s / %2$s)', 'event_espresso'), $item->count(), $item->group_size());
466
+        $content .= '<br>'.sprintf(__('Reg Code: %s', 'event_espresso'), $item->get('REG_code'));
467 467
         $content .= '</div>';
468 468
         return $content;
469 469
     }
@@ -548,12 +548,12 @@  discard block
 block discarded – undo
548 548
                   . $event_name
549 549
                   . '</a>' : $event_name;
550 550
             $edit_event_url = EE_Admin_Page::add_query_args_and_nonce(array('event_id' => $EVT_ID), REG_ADMIN_URL);
551
-            $actions['event_filter'] = '<a href="' . $edit_event_url . '" title="';
551
+            $actions['event_filter'] = '<a href="'.$edit_event_url.'" title="';
552 552
             $actions['event_filter'] .= sprintf(
553 553
                 esc_attr__('Filter this list to only show registrations for %s', 'event_espresso'),
554 554
                 $event_name
555 555
             );
556
-            $actions['event_filter'] .= '">' . __('View Registrations', 'event_espresso') . '</a>';
556
+            $actions['event_filter'] .= '">'.__('View Registrations', 'event_espresso').'</a>';
557 557
         } else {
558 558
             $edit_event = $event_name;
559 559
             $actions['event_filter'] = '';
@@ -600,11 +600,11 @@  discard block
 block discarded – undo
600 600
     {
601 601
         $content = '<div class="ee-registration-event-datetimes-container">';
602 602
         $expand_toggle = count($datetime_strings) > 1
603
-            ? ' <span title="' . esc_attr__('Click to view all dates', 'event_espresso')
603
+            ? ' <span title="'.esc_attr__('Click to view all dates', 'event_espresso')
604 604
               . '" class="ee-js ee-more-datetimes-toggle dashicons dashicons-plus"></span>'
605 605
             : '';
606 606
         // get first item for initial visibility
607
-        $content .= '<div class="left">' . array_shift($datetime_strings) . '</div>';
607
+        $content .= '<div class="left">'.array_shift($datetime_strings).'</div>';
608 608
         $content .= $expand_toggle;
609 609
         if ($datetime_strings) {
610 610
             $content .= '<div style="clear:both"></div>';
@@ -657,9 +657,9 @@  discard block
 block discarded – undo
657 657
         $t = $item->get_first_related('Transaction');
658 658
         $payment_count = $t instanceof EE_Transaction ? $t->count_related('Payment') : 0;
659 659
         // append group count to name
660
-        $link .= '&nbsp;' . sprintf(__('(%1$s / %2$s)', 'event_espresso'), $item->count(), $item->group_size());
660
+        $link .= '&nbsp;'.sprintf(__('(%1$s / %2$s)', 'event_espresso'), $item->count(), $item->group_size());
661 661
         // append reg_code
662
-        $link .= '<br>' . sprintf(__('Reg Code: %s', 'event_espresso'), $item->get('REG_code'));
662
+        $link .= '<br>'.sprintf(__('Reg Code: %s', 'event_espresso'), $item->get('REG_code'));
663 663
         // reg status text for accessibility
664 664
         $link .= '<br><span class="ee-status-text-small">'
665 665
                  . EEH_Template::pretty_status($item->status_ID(), false, 'sentence')
@@ -684,7 +684,7 @@  discard block
 block discarded – undo
684 684
                                 . $trash_lnk_url
685 685
                                 . '" title="'
686 686
                                 . esc_attr__('Trash Registration', 'event_espresso')
687
-                                . '">' . __('Trash', 'event_espresso') . '</a>';
687
+                                . '">'.__('Trash', 'event_espresso').'</a>';
688 688
         } elseif ($this->_view === 'trash') {
689 689
             // restore registration link
690 690
             if (EE_Registry::instance()->CAP->current_user_can(
@@ -702,8 +702,8 @@  discard block
 block discarded – undo
702 702
                 $actions['restore'] = '<a href="'
703 703
                                       . $restore_lnk_url
704 704
                                       . '" title="'
705
-                                      . esc_attr__('Restore Registration', 'event_espresso') . '">'
706
-                                      . __('Restore', 'event_espresso') . '</a>';
705
+                                      . esc_attr__('Restore Registration', 'event_espresso').'">'
706
+                                      . __('Restore', 'event_espresso').'</a>';
707 707
             }
708 708
             if (EE_Registry::instance()->CAP->current_user_can(
709 709
                 'ee_delete_registration',
@@ -778,7 +778,7 @@  discard block
 block discarded – undo
778 778
                                                                               . $ticket->name()
779 779
                                                                               . '</span><br />' : '';
780 780
         if ($item->final_price() > 0) {
781
-            $content .= '<span class="reg-pad-rght">' . $item->pretty_final_price() . '</span>';
781
+            $content .= '<span class="reg-pad-rght">'.$item->pretty_final_price().'</span>';
782 782
         } else {
783 783
             // free event
784 784
             $content .= '<span class="reg-overview-free-event-spn reg-pad-rght">'
@@ -805,7 +805,7 @@  discard block
 block discarded – undo
805 805
             : '<span class="TKT_name">'
806 806
               . $ticket->name()
807 807
               . '</span><br />';
808
-        $content .= '<span class="reg-pad-rght">' . $item->pretty_final_price() . '</span>';
808
+        $content .= '<span class="reg-pad-rght">'.$item->pretty_final_price().'</span>';
809 809
         return $content;
810 810
     }
811 811
 
@@ -823,7 +823,7 @@  discard block
 block discarded – undo
823 823
         $payment_method = $item->payment_method();
824 824
         $payment_method_name = $payment_method instanceof EE_Payment_Method ? $payment_method->admin_name()
825 825
             : __('Unknown', 'event_espresso');
826
-        $content = '<span class="reg-pad-rght">' . $item->pretty_paid() . '</span>';
826
+        $content = '<span class="reg-pad-rght">'.$item->pretty_paid().'</span>';
827 827
         if ($item->paid() > 0) {
828 828
             $content .= '<br><span class="ee-status-text-small">'
829 829
                         . sprintf(
@@ -871,7 +871,7 @@  discard block
 block discarded – undo
871 871
                   . esc_attr__('View Transaction', 'event_espresso')
872 872
                   . '">'
873 873
                   . $item->transaction()->pretty_total()
874
-                  . '</a></span>' : '<span class="reg-pad-rght">' . $item->transaction()->pretty_total() . '</span>';
874
+                  . '</a></span>' : '<span class="reg-pad-rght">'.$item->transaction()->pretty_total().'</span>';
875 875
         } else {
876 876
             return __("None", "event_espresso");
877 877
         }
@@ -917,7 +917,7 @@  discard block
 block discarded – undo
917 917
                       . esc_attr__('View Transaction', 'event_espresso')
918 918
                       . '">'
919 919
                       . $item->transaction()->pretty_paid()
920
-                      . '</a><span>' : '<span class="reg-pad-rght">' . $item->transaction()->pretty_paid() . '</span>';
920
+                      . '</a><span>' : '<span class="reg-pad-rght">'.$item->transaction()->pretty_paid().'</span>';
921 921
             }
922 922
         }
923 923
         return '&nbsp;';
@@ -987,8 +987,8 @@  discard block
 block discarded – undo
987 987
                                && $attendee instanceof EE_Attendee
988 988
             ? '
989 989
 			<li>
990
-			<a href="' . $edit_lnk_url . '" title="'
991
-              . esc_attr__('Edit Contact Details', 'event_espresso') . '" class="tiny-text">
990
+			<a href="' . $edit_lnk_url.'" title="'
991
+              . esc_attr__('Edit Contact Details', 'event_espresso').'" class="tiny-text">
992 992
 				<div class="ee-icon ee-icon-user-edit ee-icon-size-16"></div>
993 993
 			</a>
994 994
 			</li>' : '';
@@ -1060,7 +1060,7 @@  discard block
 block discarded – undo
1060 1060
                                                      'see_notifications_for',
1061 1061
                                                      null,
1062 1062
                                                      array('_REG_ID' => $item->ID())
1063
-                                                 ) . '</li>';
1063
+                                                 ).'</li>';
1064 1064
         }
1065 1065
         $actions = apply_filters('FHEE__EE_Registrations_List_Table__column_actions__actions', $actions, $item, $this);
1066 1066
         return $this->_action_string(implode('', $actions), $item, 'ul', 'reg-overview-actions-ul');
Please login to merge, or discard this patch.
core/business/EE_Transaction_Payments.class.php 3 patches
Doc Comments   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -137,7 +137,7 @@
 block discarded – undo
137 137
      * @param EE_Transaction $transaction
138 138
      * @param string         $payment_status One of EEM_Payment's statuses, like 'PAP' (Approved).
139 139
      *                                       By default, searches for approved payments
140
-     * @return float|false   float on success, false on fail
140
+     * @return double   float on success, false on fail
141 141
      * @throws \EE_Error
142 142
      */
143 143
     public function recalculate_total_payments_for_transaction(
Please login to merge, or discard this patch.
Indentation   +419 added lines, -419 removed lines patch added patch discarded remove patch
@@ -16,423 +16,423 @@
 block discarded – undo
16 16
 class EE_Transaction_Payments
17 17
 {
18 18
 
19
-    /**
20
-     * @var EE_Transaction_Payments $_instance
21
-     * @access    private
22
-     */
23
-    private static $_instance;
24
-
25
-    /**
26
-     * @deprecated
27
-     * @var string
28
-     */
29
-    protected $_old_txn_status;
30
-
31
-    /**
32
-     * @deprecated
33
-     * @var string
34
-     */
35
-    protected $_new_txn_status;
36
-
37
-
38
-    /**
39
-     * @singleton method used to instantiate class object
40
-     * @access    public
41
-     * @return EE_Transaction_Payments instance
42
-     */
43
-    public static function instance()
44
-    {
45
-        // check if class object is instantiated
46
-        if (! self::$_instance instanceof EE_Transaction_Payments) {
47
-            self::$_instance = new self();
48
-        }
49
-        return self::$_instance;
50
-    }
51
-
52
-
53
-    /**
54
-     * recalculate_transaction_total
55
-     *
56
-     * @access private
57
-     * @param EE_Transaction $transaction
58
-     * @param bool           $update_txn
59
-     * @return bool true if TXN total was updated, false if not
60
-     * @throws \EE_Error
61
-     */
62
-    public function recalculate_transaction_total(EE_Transaction $transaction, $update_txn = true)
63
-    {
64
-        $total_line_item = $transaction->total_line_item();
65
-        if (! $total_line_item instanceof EE_Line_Item) {
66
-            EE_Error::add_error(
67
-                sprintf(
68
-                    __('The Total Line Item for Transaction %1$d\'s was not found or is invalid.', 'event_espresso'),
69
-                    $transaction->ID()
70
-                ),
71
-                __FILE__,
72
-                __FUNCTION__,
73
-                __LINE__
74
-            );
75
-            return false;
76
-        }
77
-        $new_total = $total_line_item->recalculate_total_including_taxes();
78
-        $transaction->set_total($new_total);
79
-        if ($update_txn) {
80
-            return $transaction->save() ? true : false;
81
-        }
82
-        return false;
83
-    }
84
-
85
-
86
-    /**
87
-     * Updates the provided EE_Transaction with all the applicable payments
88
-     * returns a boolean for whether the TXN was saved to the db
89
-     * (meaning a status change occurred)
90
-     * or not saved (which could **still** mean that
91
-     * the TXN status changed, but just was not yet saved).
92
-     * So if passing a value of false for the $update_txn param,
93
-     * then client code needs to take responsibility for saving the TXN
94
-     * regardless of what happens within EE_Transaction_Payments;
95
-     *
96
-     * @param            EE_Transaction /int $transaction_obj_or_id EE_Transaction or its ID
97
-     * @param    boolean $update_txn whether to save the TXN
98
-     * @return    boolean        whether the TXN was saved
99
-     * @throws \EE_Error
100
-     */
101
-    public function calculate_total_payments_and_update_status(EE_Transaction $transaction, $update_txn = true)
102
-    {
103
-        // verify transaction
104
-        if (! $transaction instanceof EE_Transaction) {
105
-            EE_Error::add_error(
106
-                __('Please provide a valid EE_Transaction object.', 'event_espresso'),
107
-                __FILE__,
108
-                __FUNCTION__,
109
-                __LINE__
110
-            );
111
-            return false;
112
-        }
113
-        // calculate total paid
114
-        $total_paid = $this->recalculate_total_payments_for_transaction($transaction);
115
-        // if total paid has changed
116
-        if ($total_paid !== false && (float) $total_paid !== $transaction->paid()) {
117
-            $transaction->set_paid($total_paid);
118
-            // maybe update status, and make sure to save transaction if not done already
119
-            if (! $transaction->update_status_based_on_total_paid($update_txn)) {
120
-                if ($update_txn) {
121
-                    return $transaction->save() ? true : false;
122
-                }
123
-            } else {
124
-                // the status got updated and was saved by
125
-                // update_transaction_status_based_on_total_paid()
126
-                return true;
127
-            }
128
-        }
129
-        return false;
130
-    }
131
-
132
-
133
-    /**
134
-     * recalculate_total_payments_for_transaction
135
-     *
136
-     * @access public
137
-     * @param EE_Transaction $transaction
138
-     * @param string         $payment_status One of EEM_Payment's statuses, like 'PAP' (Approved).
139
-     *                                       By default, searches for approved payments
140
-     * @return float|false   float on success, false on fail
141
-     * @throws \EE_Error
142
-     */
143
-    public function recalculate_total_payments_for_transaction(
144
-        EE_Transaction $transaction,
145
-        $payment_status = EEM_Payment::status_id_approved
146
-    ) {
147
-        // verify transaction
148
-        if (! $transaction instanceof EE_Transaction) {
149
-            EE_Error::add_error(
150
-                __('Please provide a valid EE_Transaction object.', 'event_espresso'),
151
-                __FILE__,
152
-                __FUNCTION__,
153
-                __LINE__
154
-            );
155
-            return false;
156
-        }
157
-        // ensure Payment model is loaded
158
-        EE_Registry::instance()->load_model('Payment');
159
-        // calls EEM_Base::sum()
160
-        return EEM_Payment::instance()->sum(
161
-            // query params
162
-            array(array('TXN_ID' => $transaction->ID(), 'STS_ID' => $payment_status)),
163
-            // field to sum
164
-            'PAY_amount'
165
-        );
166
-    }
167
-
168
-
169
-    /**
170
-     * delete_payment_and_update_transaction
171
-     * Before deleting the selected payment, we fetch it's transaction,
172
-     * then delete the payment, and update the transactions' amount paid.
173
-     *
174
-     * @param EE_Payment $payment
175
-     * @return boolean
176
-     * @throws \EE_Error
177
-     */
178
-    public function delete_payment_and_update_transaction(EE_Payment $payment)
179
-    {
180
-        // verify payment
181
-        if (! $payment instanceof EE_Payment) {
182
-            EE_Error::add_error(
183
-                __('A valid Payment object was not received.', 'event_espresso'),
184
-                __FILE__,
185
-                __FUNCTION__,
186
-                __LINE__
187
-            );
188
-            return false;
189
-        }
190
-        if (! $this->delete_registration_payments_and_update_registrations($payment)) {
191
-            return false;
192
-        }
193
-        if (! $payment->delete()) {
194
-            EE_Error::add_error(
195
-                __('The payment could not be deleted.', 'event_espresso'),
196
-                __FILE__,
197
-                __FUNCTION__,
198
-                __LINE__
199
-            );
200
-            return false;
201
-        }
202
-
203
-        $transaction = $payment->transaction();
204
-        $TXN_status = $transaction->status_ID();
205
-        if ($TXN_status === EEM_Transaction::abandoned_status_code
206
-            || $TXN_status === EEM_Transaction::failed_status_code
207
-            || $payment->amount() === 0
208
-        ) {
209
-            EE_Error::add_success(__('The Payment was successfully deleted.', 'event_espresso'));
210
-            return true;
211
-        }
212
-
213
-
214
-        // if this fails, that just means that the transaction didn't get its status changed and/or updated.
215
-        // however the payment was still deleted.
216
-        if (! $this->calculate_total_payments_and_update_status($transaction)) {
217
-            EE_Error::add_attention(
218
-                __(
219
-                    'It appears that the Payment was deleted but no change was recorded for the Transaction for an unknown reason. Please verify that all data for this Transaction looks correct..',
220
-                    'event_espresso'
221
-                ),
222
-                __FILE__,
223
-                __FUNCTION__,
224
-                __LINE__
225
-            );
226
-            return true;
227
-        }
228
-
229
-        EE_Error::add_success(
230
-            __(
231
-                'The Payment was successfully deleted, and the Transaction has been updated accordingly.',
232
-                'event_espresso'
233
-            )
234
-        );
235
-        return true;
236
-    }
237
-
238
-
239
-    /**
240
-     * delete_registration_payments_and_update_registrations
241
-     *
242
-     * removes all registration payment records associated with a payment
243
-     * and subtracts their amounts from the corresponding registrations REG_paid field
244
-     *
245
-     * @param EE_Payment $payment
246
-     * @param array      $reg_payment_query_params
247
-     * @return bool
248
-     * @throws \EE_Error
249
-     */
250
-    public function delete_registration_payments_and_update_registrations(
251
-        EE_Payment $payment,
252
-        $reg_payment_query_params = array()
253
-    ) {
254
-        $save_payment = false;
255
-        $reg_payment_query_params = ! empty($reg_payment_query_params) ? $reg_payment_query_params
256
-            : array(array('PAY_ID' => $payment->ID()));
257
-        $registration_payments = EEM_Registration_Payment::instance()->get_all($reg_payment_query_params);
258
-        if (! empty($registration_payments)) {
259
-            foreach ($registration_payments as $registration_payment) {
260
-                if ($registration_payment instanceof EE_Registration_Payment) {
261
-                    $amount_paid = $registration_payment->amount();
262
-                    $registration = $registration_payment->registration();
263
-                    if ($registration instanceof EE_Registration) {
264
-                        $registration->set_paid($registration->paid() - $amount_paid);
265
-                        if ($registration->save() !== false) {
266
-                            $registration_payment->delete_permanently();
267
-                            $save_payment = true;
268
-                        }
269
-                    } else {
270
-                        EE_Error::add_error(
271
-                            sprintf(
272
-                                __(
273
-                                    'An invalid Registration object was associated with Registration Payment ID# %1$d.',
274
-                                    'event_espresso'
275
-                                ),
276
-                                $registration_payment->ID()
277
-                            ),
278
-                            __FILE__,
279
-                            __FUNCTION__,
280
-                            __LINE__
281
-                        );
282
-                        return false;
283
-                    }
284
-                } else {
285
-                    EE_Error::add_error(
286
-                        sprintf(
287
-                            __(
288
-                                'An invalid Registration Payment object was associated with payment ID# %1$d.',
289
-                                'event_espresso'
290
-                            ),
291
-                            $payment->ID()
292
-                        ),
293
-                        __FILE__,
294
-                        __FUNCTION__,
295
-                        __LINE__
296
-                    );
297
-                    return false;
298
-                }
299
-            }
300
-        }
301
-        if ($save_payment) {
302
-            $payment->save();
303
-        }
304
-        return true;
305
-    }
306
-
307
-
308
-
309
-    /********************************** DEPRECATED METHODS **********************************/
310
-
311
-
312
-    /**
313
-     * possibly toggles TXN status
314
-     *
315
-     * @deprecated 4.9.1
316
-     * @param EE_Transaction $transaction
317
-     * @param    boolean     $update_txn whether to save the TXN
318
-     * @return    boolean        whether the TXN was saved
319
-     * @throws \EE_Error
320
-     */
321
-    public function update_transaction_status_based_on_total_paid(EE_Transaction $transaction, $update_txn = true)
322
-    {
323
-        EE_Error::doing_it_wrong(
324
-            __CLASS__ . '::' . __FUNCTION__,
325
-            sprintf(
326
-                __('This method is deprecated. Please use "%s" instead', 'event_espresso'),
327
-                'EE_Transaction::update_status_based_on_total_paid()'
328
-            ),
329
-            '4.9.1',
330
-            '5.0.0'
331
-        );
332
-        // verify transaction
333
-        if (! $transaction instanceof EE_Transaction) {
334
-            EE_Error::add_error(
335
-                __('Please provide a valid EE_Transaction object.', 'event_espresso'),
336
-                __FILE__,
337
-                __FUNCTION__,
338
-                __LINE__
339
-            );
340
-            return false;
341
-        }
342
-        // set transaction status based on comparison of TXN_paid vs TXN_total
343
-        return $transaction->update_status_based_on_total_paid($update_txn);
344
-    }
345
-
346
-
347
-    /**
348
-     * @deprecated 4.9.12
349
-     * @return string
350
-     */
351
-    public function old_txn_status()
352
-    {
353
-        EE_Error::doing_it_wrong(
354
-            __METHOD__,
355
-            esc_html__(
356
-                'This logic has been moved into \EE_Transaction::old_txn_status(), please use that method instead.',
357
-                'event_espresso'
358
-            ),
359
-            '4.9.12'
360
-        );
361
-        return $this->_old_txn_status;
362
-    }
363
-
364
-
365
-    /**
366
-     * @deprecated 4.9.12
367
-     * @param string $old_txn_status
368
-     */
369
-    public function set_old_txn_status($old_txn_status)
370
-    {
371
-        EE_Error::doing_it_wrong(
372
-            __METHOD__,
373
-            esc_html__(
374
-                'This logic has been moved into \EE_Transaction::set_old_txn_status(), please use that method instead.',
375
-                'event_espresso'
376
-            ),
377
-            '4.9.12'
378
-        );
379
-        // only set the first time
380
-        if ($this->_old_txn_status === null) {
381
-            $this->_old_txn_status = $old_txn_status;
382
-        }
383
-    }
384
-
385
-
386
-    /**
387
-     * @deprecated 4.9.12
388
-     * @return string
389
-     */
390
-    public function new_txn_status()
391
-    {
392
-        EE_Error::doing_it_wrong(
393
-            __METHOD__,
394
-            esc_html__(
395
-                'This logic has been removed. Please just use \EE_Transaction::status_ID() instead.',
396
-                'event_espresso'
397
-            ),
398
-            '4.9.12'
399
-        );
400
-        return $this->_new_txn_status;
401
-    }
402
-
403
-
404
-    /**
405
-     * @deprecated 4.9.12
406
-     * @param string $new_txn_status
407
-     */
408
-    public function set_new_txn_status($new_txn_status)
409
-    {
410
-        EE_Error::doing_it_wrong(
411
-            __METHOD__,
412
-            esc_html__(
413
-                'This logic has been removed. Please just use \EE_Transaction::set_status() instead.',
414
-                'event_espresso'
415
-            ),
416
-            '4.9.12'
417
-        );
418
-        $this->_new_txn_status = $new_txn_status;
419
-    }
420
-
421
-
422
-    /**
423
-     * @deprecated 4.9.12
424
-     * @return bool
425
-     */
426
-    public function txn_status_updated()
427
-    {
428
-        EE_Error::doing_it_wrong(
429
-            __METHOD__,
430
-            esc_html__(
431
-                'This logic has been moved into \EE_Transaction::txn_status_updated(), please use that method instead.',
432
-                'event_espresso'
433
-            ),
434
-            '4.9.12'
435
-        );
436
-        return $this->_new_txn_status !== $this->_old_txn_status && $this->_old_txn_status !== null ? true : false;
437
-    }
19
+	/**
20
+	 * @var EE_Transaction_Payments $_instance
21
+	 * @access    private
22
+	 */
23
+	private static $_instance;
24
+
25
+	/**
26
+	 * @deprecated
27
+	 * @var string
28
+	 */
29
+	protected $_old_txn_status;
30
+
31
+	/**
32
+	 * @deprecated
33
+	 * @var string
34
+	 */
35
+	protected $_new_txn_status;
36
+
37
+
38
+	/**
39
+	 * @singleton method used to instantiate class object
40
+	 * @access    public
41
+	 * @return EE_Transaction_Payments instance
42
+	 */
43
+	public static function instance()
44
+	{
45
+		// check if class object is instantiated
46
+		if (! self::$_instance instanceof EE_Transaction_Payments) {
47
+			self::$_instance = new self();
48
+		}
49
+		return self::$_instance;
50
+	}
51
+
52
+
53
+	/**
54
+	 * recalculate_transaction_total
55
+	 *
56
+	 * @access private
57
+	 * @param EE_Transaction $transaction
58
+	 * @param bool           $update_txn
59
+	 * @return bool true if TXN total was updated, false if not
60
+	 * @throws \EE_Error
61
+	 */
62
+	public function recalculate_transaction_total(EE_Transaction $transaction, $update_txn = true)
63
+	{
64
+		$total_line_item = $transaction->total_line_item();
65
+		if (! $total_line_item instanceof EE_Line_Item) {
66
+			EE_Error::add_error(
67
+				sprintf(
68
+					__('The Total Line Item for Transaction %1$d\'s was not found or is invalid.', 'event_espresso'),
69
+					$transaction->ID()
70
+				),
71
+				__FILE__,
72
+				__FUNCTION__,
73
+				__LINE__
74
+			);
75
+			return false;
76
+		}
77
+		$new_total = $total_line_item->recalculate_total_including_taxes();
78
+		$transaction->set_total($new_total);
79
+		if ($update_txn) {
80
+			return $transaction->save() ? true : false;
81
+		}
82
+		return false;
83
+	}
84
+
85
+
86
+	/**
87
+	 * Updates the provided EE_Transaction with all the applicable payments
88
+	 * returns a boolean for whether the TXN was saved to the db
89
+	 * (meaning a status change occurred)
90
+	 * or not saved (which could **still** mean that
91
+	 * the TXN status changed, but just was not yet saved).
92
+	 * So if passing a value of false for the $update_txn param,
93
+	 * then client code needs to take responsibility for saving the TXN
94
+	 * regardless of what happens within EE_Transaction_Payments;
95
+	 *
96
+	 * @param            EE_Transaction /int $transaction_obj_or_id EE_Transaction or its ID
97
+	 * @param    boolean $update_txn whether to save the TXN
98
+	 * @return    boolean        whether the TXN was saved
99
+	 * @throws \EE_Error
100
+	 */
101
+	public function calculate_total_payments_and_update_status(EE_Transaction $transaction, $update_txn = true)
102
+	{
103
+		// verify transaction
104
+		if (! $transaction instanceof EE_Transaction) {
105
+			EE_Error::add_error(
106
+				__('Please provide a valid EE_Transaction object.', 'event_espresso'),
107
+				__FILE__,
108
+				__FUNCTION__,
109
+				__LINE__
110
+			);
111
+			return false;
112
+		}
113
+		// calculate total paid
114
+		$total_paid = $this->recalculate_total_payments_for_transaction($transaction);
115
+		// if total paid has changed
116
+		if ($total_paid !== false && (float) $total_paid !== $transaction->paid()) {
117
+			$transaction->set_paid($total_paid);
118
+			// maybe update status, and make sure to save transaction if not done already
119
+			if (! $transaction->update_status_based_on_total_paid($update_txn)) {
120
+				if ($update_txn) {
121
+					return $transaction->save() ? true : false;
122
+				}
123
+			} else {
124
+				// the status got updated and was saved by
125
+				// update_transaction_status_based_on_total_paid()
126
+				return true;
127
+			}
128
+		}
129
+		return false;
130
+	}
131
+
132
+
133
+	/**
134
+	 * recalculate_total_payments_for_transaction
135
+	 *
136
+	 * @access public
137
+	 * @param EE_Transaction $transaction
138
+	 * @param string         $payment_status One of EEM_Payment's statuses, like 'PAP' (Approved).
139
+	 *                                       By default, searches for approved payments
140
+	 * @return float|false   float on success, false on fail
141
+	 * @throws \EE_Error
142
+	 */
143
+	public function recalculate_total_payments_for_transaction(
144
+		EE_Transaction $transaction,
145
+		$payment_status = EEM_Payment::status_id_approved
146
+	) {
147
+		// verify transaction
148
+		if (! $transaction instanceof EE_Transaction) {
149
+			EE_Error::add_error(
150
+				__('Please provide a valid EE_Transaction object.', 'event_espresso'),
151
+				__FILE__,
152
+				__FUNCTION__,
153
+				__LINE__
154
+			);
155
+			return false;
156
+		}
157
+		// ensure Payment model is loaded
158
+		EE_Registry::instance()->load_model('Payment');
159
+		// calls EEM_Base::sum()
160
+		return EEM_Payment::instance()->sum(
161
+			// query params
162
+			array(array('TXN_ID' => $transaction->ID(), 'STS_ID' => $payment_status)),
163
+			// field to sum
164
+			'PAY_amount'
165
+		);
166
+	}
167
+
168
+
169
+	/**
170
+	 * delete_payment_and_update_transaction
171
+	 * Before deleting the selected payment, we fetch it's transaction,
172
+	 * then delete the payment, and update the transactions' amount paid.
173
+	 *
174
+	 * @param EE_Payment $payment
175
+	 * @return boolean
176
+	 * @throws \EE_Error
177
+	 */
178
+	public function delete_payment_and_update_transaction(EE_Payment $payment)
179
+	{
180
+		// verify payment
181
+		if (! $payment instanceof EE_Payment) {
182
+			EE_Error::add_error(
183
+				__('A valid Payment object was not received.', 'event_espresso'),
184
+				__FILE__,
185
+				__FUNCTION__,
186
+				__LINE__
187
+			);
188
+			return false;
189
+		}
190
+		if (! $this->delete_registration_payments_and_update_registrations($payment)) {
191
+			return false;
192
+		}
193
+		if (! $payment->delete()) {
194
+			EE_Error::add_error(
195
+				__('The payment could not be deleted.', 'event_espresso'),
196
+				__FILE__,
197
+				__FUNCTION__,
198
+				__LINE__
199
+			);
200
+			return false;
201
+		}
202
+
203
+		$transaction = $payment->transaction();
204
+		$TXN_status = $transaction->status_ID();
205
+		if ($TXN_status === EEM_Transaction::abandoned_status_code
206
+			|| $TXN_status === EEM_Transaction::failed_status_code
207
+			|| $payment->amount() === 0
208
+		) {
209
+			EE_Error::add_success(__('The Payment was successfully deleted.', 'event_espresso'));
210
+			return true;
211
+		}
212
+
213
+
214
+		// if this fails, that just means that the transaction didn't get its status changed and/or updated.
215
+		// however the payment was still deleted.
216
+		if (! $this->calculate_total_payments_and_update_status($transaction)) {
217
+			EE_Error::add_attention(
218
+				__(
219
+					'It appears that the Payment was deleted but no change was recorded for the Transaction for an unknown reason. Please verify that all data for this Transaction looks correct..',
220
+					'event_espresso'
221
+				),
222
+				__FILE__,
223
+				__FUNCTION__,
224
+				__LINE__
225
+			);
226
+			return true;
227
+		}
228
+
229
+		EE_Error::add_success(
230
+			__(
231
+				'The Payment was successfully deleted, and the Transaction has been updated accordingly.',
232
+				'event_espresso'
233
+			)
234
+		);
235
+		return true;
236
+	}
237
+
238
+
239
+	/**
240
+	 * delete_registration_payments_and_update_registrations
241
+	 *
242
+	 * removes all registration payment records associated with a payment
243
+	 * and subtracts their amounts from the corresponding registrations REG_paid field
244
+	 *
245
+	 * @param EE_Payment $payment
246
+	 * @param array      $reg_payment_query_params
247
+	 * @return bool
248
+	 * @throws \EE_Error
249
+	 */
250
+	public function delete_registration_payments_and_update_registrations(
251
+		EE_Payment $payment,
252
+		$reg_payment_query_params = array()
253
+	) {
254
+		$save_payment = false;
255
+		$reg_payment_query_params = ! empty($reg_payment_query_params) ? $reg_payment_query_params
256
+			: array(array('PAY_ID' => $payment->ID()));
257
+		$registration_payments = EEM_Registration_Payment::instance()->get_all($reg_payment_query_params);
258
+		if (! empty($registration_payments)) {
259
+			foreach ($registration_payments as $registration_payment) {
260
+				if ($registration_payment instanceof EE_Registration_Payment) {
261
+					$amount_paid = $registration_payment->amount();
262
+					$registration = $registration_payment->registration();
263
+					if ($registration instanceof EE_Registration) {
264
+						$registration->set_paid($registration->paid() - $amount_paid);
265
+						if ($registration->save() !== false) {
266
+							$registration_payment->delete_permanently();
267
+							$save_payment = true;
268
+						}
269
+					} else {
270
+						EE_Error::add_error(
271
+							sprintf(
272
+								__(
273
+									'An invalid Registration object was associated with Registration Payment ID# %1$d.',
274
+									'event_espresso'
275
+								),
276
+								$registration_payment->ID()
277
+							),
278
+							__FILE__,
279
+							__FUNCTION__,
280
+							__LINE__
281
+						);
282
+						return false;
283
+					}
284
+				} else {
285
+					EE_Error::add_error(
286
+						sprintf(
287
+							__(
288
+								'An invalid Registration Payment object was associated with payment ID# %1$d.',
289
+								'event_espresso'
290
+							),
291
+							$payment->ID()
292
+						),
293
+						__FILE__,
294
+						__FUNCTION__,
295
+						__LINE__
296
+					);
297
+					return false;
298
+				}
299
+			}
300
+		}
301
+		if ($save_payment) {
302
+			$payment->save();
303
+		}
304
+		return true;
305
+	}
306
+
307
+
308
+
309
+	/********************************** DEPRECATED METHODS **********************************/
310
+
311
+
312
+	/**
313
+	 * possibly toggles TXN status
314
+	 *
315
+	 * @deprecated 4.9.1
316
+	 * @param EE_Transaction $transaction
317
+	 * @param    boolean     $update_txn whether to save the TXN
318
+	 * @return    boolean        whether the TXN was saved
319
+	 * @throws \EE_Error
320
+	 */
321
+	public function update_transaction_status_based_on_total_paid(EE_Transaction $transaction, $update_txn = true)
322
+	{
323
+		EE_Error::doing_it_wrong(
324
+			__CLASS__ . '::' . __FUNCTION__,
325
+			sprintf(
326
+				__('This method is deprecated. Please use "%s" instead', 'event_espresso'),
327
+				'EE_Transaction::update_status_based_on_total_paid()'
328
+			),
329
+			'4.9.1',
330
+			'5.0.0'
331
+		);
332
+		// verify transaction
333
+		if (! $transaction instanceof EE_Transaction) {
334
+			EE_Error::add_error(
335
+				__('Please provide a valid EE_Transaction object.', 'event_espresso'),
336
+				__FILE__,
337
+				__FUNCTION__,
338
+				__LINE__
339
+			);
340
+			return false;
341
+		}
342
+		// set transaction status based on comparison of TXN_paid vs TXN_total
343
+		return $transaction->update_status_based_on_total_paid($update_txn);
344
+	}
345
+
346
+
347
+	/**
348
+	 * @deprecated 4.9.12
349
+	 * @return string
350
+	 */
351
+	public function old_txn_status()
352
+	{
353
+		EE_Error::doing_it_wrong(
354
+			__METHOD__,
355
+			esc_html__(
356
+				'This logic has been moved into \EE_Transaction::old_txn_status(), please use that method instead.',
357
+				'event_espresso'
358
+			),
359
+			'4.9.12'
360
+		);
361
+		return $this->_old_txn_status;
362
+	}
363
+
364
+
365
+	/**
366
+	 * @deprecated 4.9.12
367
+	 * @param string $old_txn_status
368
+	 */
369
+	public function set_old_txn_status($old_txn_status)
370
+	{
371
+		EE_Error::doing_it_wrong(
372
+			__METHOD__,
373
+			esc_html__(
374
+				'This logic has been moved into \EE_Transaction::set_old_txn_status(), please use that method instead.',
375
+				'event_espresso'
376
+			),
377
+			'4.9.12'
378
+		);
379
+		// only set the first time
380
+		if ($this->_old_txn_status === null) {
381
+			$this->_old_txn_status = $old_txn_status;
382
+		}
383
+	}
384
+
385
+
386
+	/**
387
+	 * @deprecated 4.9.12
388
+	 * @return string
389
+	 */
390
+	public function new_txn_status()
391
+	{
392
+		EE_Error::doing_it_wrong(
393
+			__METHOD__,
394
+			esc_html__(
395
+				'This logic has been removed. Please just use \EE_Transaction::status_ID() instead.',
396
+				'event_espresso'
397
+			),
398
+			'4.9.12'
399
+		);
400
+		return $this->_new_txn_status;
401
+	}
402
+
403
+
404
+	/**
405
+	 * @deprecated 4.9.12
406
+	 * @param string $new_txn_status
407
+	 */
408
+	public function set_new_txn_status($new_txn_status)
409
+	{
410
+		EE_Error::doing_it_wrong(
411
+			__METHOD__,
412
+			esc_html__(
413
+				'This logic has been removed. Please just use \EE_Transaction::set_status() instead.',
414
+				'event_espresso'
415
+			),
416
+			'4.9.12'
417
+		);
418
+		$this->_new_txn_status = $new_txn_status;
419
+	}
420
+
421
+
422
+	/**
423
+	 * @deprecated 4.9.12
424
+	 * @return bool
425
+	 */
426
+	public function txn_status_updated()
427
+	{
428
+		EE_Error::doing_it_wrong(
429
+			__METHOD__,
430
+			esc_html__(
431
+				'This logic has been moved into \EE_Transaction::txn_status_updated(), please use that method instead.',
432
+				'event_espresso'
433
+			),
434
+			'4.9.12'
435
+		);
436
+		return $this->_new_txn_status !== $this->_old_txn_status && $this->_old_txn_status !== null ? true : false;
437
+	}
438 438
 }
Please login to merge, or discard this patch.
Spacing   +12 added lines, -12 removed lines patch added patch discarded remove patch
@@ -43,7 +43,7 @@  discard block
 block discarded – undo
43 43
     public static function instance()
44 44
     {
45 45
         // check if class object is instantiated
46
-        if (! self::$_instance instanceof EE_Transaction_Payments) {
46
+        if ( ! self::$_instance instanceof EE_Transaction_Payments) {
47 47
             self::$_instance = new self();
48 48
         }
49 49
         return self::$_instance;
@@ -62,7 +62,7 @@  discard block
 block discarded – undo
62 62
     public function recalculate_transaction_total(EE_Transaction $transaction, $update_txn = true)
63 63
     {
64 64
         $total_line_item = $transaction->total_line_item();
65
-        if (! $total_line_item instanceof EE_Line_Item) {
65
+        if ( ! $total_line_item instanceof EE_Line_Item) {
66 66
             EE_Error::add_error(
67 67
                 sprintf(
68 68
                     __('The Total Line Item for Transaction %1$d\'s was not found or is invalid.', 'event_espresso'),
@@ -101,7 +101,7 @@  discard block
 block discarded – undo
101 101
     public function calculate_total_payments_and_update_status(EE_Transaction $transaction, $update_txn = true)
102 102
     {
103 103
         // verify transaction
104
-        if (! $transaction instanceof EE_Transaction) {
104
+        if ( ! $transaction instanceof EE_Transaction) {
105 105
             EE_Error::add_error(
106 106
                 __('Please provide a valid EE_Transaction object.', 'event_espresso'),
107 107
                 __FILE__,
@@ -116,7 +116,7 @@  discard block
 block discarded – undo
116 116
         if ($total_paid !== false && (float) $total_paid !== $transaction->paid()) {
117 117
             $transaction->set_paid($total_paid);
118 118
             // maybe update status, and make sure to save transaction if not done already
119
-            if (! $transaction->update_status_based_on_total_paid($update_txn)) {
119
+            if ( ! $transaction->update_status_based_on_total_paid($update_txn)) {
120 120
                 if ($update_txn) {
121 121
                     return $transaction->save() ? true : false;
122 122
                 }
@@ -145,7 +145,7 @@  discard block
 block discarded – undo
145 145
         $payment_status = EEM_Payment::status_id_approved
146 146
     ) {
147 147
         // verify transaction
148
-        if (! $transaction instanceof EE_Transaction) {
148
+        if ( ! $transaction instanceof EE_Transaction) {
149 149
             EE_Error::add_error(
150 150
                 __('Please provide a valid EE_Transaction object.', 'event_espresso'),
151 151
                 __FILE__,
@@ -178,7 +178,7 @@  discard block
 block discarded – undo
178 178
     public function delete_payment_and_update_transaction(EE_Payment $payment)
179 179
     {
180 180
         // verify payment
181
-        if (! $payment instanceof EE_Payment) {
181
+        if ( ! $payment instanceof EE_Payment) {
182 182
             EE_Error::add_error(
183 183
                 __('A valid Payment object was not received.', 'event_espresso'),
184 184
                 __FILE__,
@@ -187,10 +187,10 @@  discard block
 block discarded – undo
187 187
             );
188 188
             return false;
189 189
         }
190
-        if (! $this->delete_registration_payments_and_update_registrations($payment)) {
190
+        if ( ! $this->delete_registration_payments_and_update_registrations($payment)) {
191 191
             return false;
192 192
         }
193
-        if (! $payment->delete()) {
193
+        if ( ! $payment->delete()) {
194 194
             EE_Error::add_error(
195 195
                 __('The payment could not be deleted.', 'event_espresso'),
196 196
                 __FILE__,
@@ -213,7 +213,7 @@  discard block
 block discarded – undo
213 213
 
214 214
         // if this fails, that just means that the transaction didn't get its status changed and/or updated.
215 215
         // however the payment was still deleted.
216
-        if (! $this->calculate_total_payments_and_update_status($transaction)) {
216
+        if ( ! $this->calculate_total_payments_and_update_status($transaction)) {
217 217
             EE_Error::add_attention(
218 218
                 __(
219 219
                     'It appears that the Payment was deleted but no change was recorded for the Transaction for an unknown reason. Please verify that all data for this Transaction looks correct..',
@@ -255,7 +255,7 @@  discard block
 block discarded – undo
255 255
         $reg_payment_query_params = ! empty($reg_payment_query_params) ? $reg_payment_query_params
256 256
             : array(array('PAY_ID' => $payment->ID()));
257 257
         $registration_payments = EEM_Registration_Payment::instance()->get_all($reg_payment_query_params);
258
-        if (! empty($registration_payments)) {
258
+        if ( ! empty($registration_payments)) {
259 259
             foreach ($registration_payments as $registration_payment) {
260 260
                 if ($registration_payment instanceof EE_Registration_Payment) {
261 261
                     $amount_paid = $registration_payment->amount();
@@ -321,7 +321,7 @@  discard block
 block discarded – undo
321 321
     public function update_transaction_status_based_on_total_paid(EE_Transaction $transaction, $update_txn = true)
322 322
     {
323 323
         EE_Error::doing_it_wrong(
324
-            __CLASS__ . '::' . __FUNCTION__,
324
+            __CLASS__.'::'.__FUNCTION__,
325 325
             sprintf(
326 326
                 __('This method is deprecated. Please use "%s" instead', 'event_espresso'),
327 327
                 'EE_Transaction::update_status_based_on_total_paid()'
@@ -330,7 +330,7 @@  discard block
 block discarded – undo
330 330
             '5.0.0'
331 331
         );
332 332
         // verify transaction
333
-        if (! $transaction instanceof EE_Transaction) {
333
+        if ( ! $transaction instanceof EE_Transaction) {
334 334
             EE_Error::add_error(
335 335
                 __('Please provide a valid EE_Transaction object.', 'event_espresso'),
336 336
                 __FILE__,
Please login to merge, or discard this patch.
core/business/EE_Transaction_Processor.class.php 3 patches
Doc Comments   +1 added lines patch added patch discarded remove patch
@@ -185,6 +185,7 @@
 block discarded – undo
185 185
      *                                                         when retrieving cached registrations from a transaction
186 186
      * @param bool               $trigger_notifications        whether or not to call
187 187
      *                                                         \EE_Registration_Processor::trigger_registration_update_notifications()
188
+     * @param EE_Payment $payment
188 189
      * @return array
189 190
      * @throws \EE_Error
190 191
      */
Please login to merge, or discard this patch.
Indentation   +944 added lines, -944 removed lines patch added patch discarded remove patch
@@ -17,948 +17,948 @@
 block discarded – undo
17 17
 class EE_Transaction_Processor extends EE_Processor_Base
18 18
 {
19 19
 
20
-    /**
21
-     * @var EE_Registration_Processor $_instance
22
-     * @access    private
23
-     */
24
-    private static $_instance;
25
-
26
-    /**
27
-     * array of query WHERE params to use when retrieving cached registrations from a transaction
28
-     *
29
-     * @var array $registration_query_params
30
-     * @access private
31
-     */
32
-    private $_registration_query_params = array();
33
-
34
-    /**
35
-     * @deprecated
36
-     * @var string
37
-     */
38
-    protected $_old_txn_status;
39
-
40
-    /**
41
-     * @deprecated
42
-     * @var string
43
-     */
44
-    protected $_new_txn_status;
45
-
46
-
47
-    /**
48
-     * @singleton method used to instantiate class object
49
-     * @access    public
50
-     * @param array $registration_query_params
51
-     * @return EE_Transaction_Processor instance
52
-     */
53
-    public static function instance($registration_query_params = array())
54
-    {
55
-        // check if class object is instantiated
56
-        if (! self::$_instance instanceof EE_Transaction_Processor) {
57
-            self::$_instance = new self($registration_query_params);
58
-        }
59
-        return self::$_instance;
60
-    }
61
-
62
-
63
-    /**
64
-     * @param array $registration_query_params
65
-     */
66
-    private function __construct($registration_query_params = array())
67
-    {
68
-        // make sure some query params are set for retrieving registrations
69
-        $this->_set_registration_query_params($registration_query_params);
70
-    }
71
-
72
-
73
-    /**
74
-     * @access private
75
-     * @param array $registration_query_params
76
-     */
77
-    private function _set_registration_query_params($registration_query_params)
78
-    {
79
-        $this->_registration_query_params = ! empty($registration_query_params) ? $registration_query_params
80
-            : array('order_by' => array('REG_count' => 'ASC'));
81
-    }
82
-
83
-
84
-    /**
85
-     * manually_update_registration_statuses
86
-     *
87
-     * @access public
88
-     * @param EE_Transaction $transaction
89
-     * @param string         $new_reg_status
90
-     * @param array          $registration_query_params array of query WHERE params to use
91
-     *                                                  when retrieving cached registrations from a transaction
92
-     * @return    boolean
93
-     * @throws \EE_Error
94
-     */
95
-    public function manually_update_registration_statuses(
96
-        EE_Transaction $transaction,
97
-        $new_reg_status = '',
98
-        $registration_query_params = array()
99
-    ) {
100
-        $status_updates = $this->_call_method_on_registrations_via_Registration_Processor(
101
-            'manually_update_registration_status',
102
-            $transaction,
103
-            $registration_query_params,
104
-            $new_reg_status
105
-        );
106
-        // send messages
107
-        /** @type EE_Registration_Processor $registration_processor */
108
-        $registration_processor = EE_Registry::instance()->load_class('Registration_Processor');
109
-        $registration_processor->trigger_registration_update_notifications(
110
-            $transaction->primary_registration(),
111
-            array('manually_updated' => true)
112
-        );
113
-        do_action(
114
-            'AHEE__EE_Transaction_Processor__manually_update_registration_statuses',
115
-            $transaction,
116
-            $status_updates
117
-        );
118
-        return $status_updates;
119
-    }
120
-
121
-
122
-    /**
123
-     * toggle_registration_statuses_for_default_approved_events
124
-     *
125
-     * @access public
126
-     * @param EE_Transaction $transaction
127
-     * @param array          $registration_query_params array of query WHERE params to use
128
-     *                                                  when retrieving cached registrations from a transaction
129
-     * @return    boolean
130
-     * @throws \EE_Error
131
-     */
132
-    public function toggle_registration_statuses_for_default_approved_events(
133
-        EE_Transaction $transaction,
134
-        $registration_query_params = array()
135
-    ) {
136
-        $status_updates = $this->_call_method_on_registrations_via_Registration_Processor(
137
-            'toggle_registration_status_for_default_approved_events',
138
-            $transaction,
139
-            $registration_query_params
140
-        );
141
-        do_action(
142
-            'AHEE__EE_Transaction_Processor__toggle_registration_statuses_for_default_approved_events',
143
-            $transaction,
144
-            $status_updates
145
-        );
146
-        return $status_updates;
147
-    }
148
-
149
-
150
-    /**
151
-     * toggle_registration_statuses_if_no_monies_owing
152
-     *
153
-     * @access public
154
-     * @param EE_Transaction $transaction
155
-     * @param array          $registration_query_params array of query WHERE params to use
156
-     *                                                  when retrieving cached registrations from a transaction
157
-     * @return    boolean
158
-     * @throws \EE_Error
159
-     */
160
-    public function toggle_registration_statuses_if_no_monies_owing(
161
-        EE_Transaction $transaction,
162
-        $registration_query_params = array()
163
-    ) {
164
-        $status_updates = $this->_call_method_on_registrations_via_Registration_Processor(
165
-            'toggle_registration_status_if_no_monies_owing',
166
-            $transaction,
167
-            $registration_query_params
168
-        );
169
-        do_action(
170
-            'AHEE__EE_Transaction_Processor__toggle_registration_statuses_if_no_monies_owing',
171
-            $transaction,
172
-            $status_updates
173
-        );
174
-        return $status_updates;
175
-    }
176
-
177
-
178
-    /**
179
-     * update_transaction_and_registrations_after_checkout_or_payment
180
-     * cycles thru related registrations and calls update_registration_after_checkout_or_payment() on each
181
-     *
182
-     * @param EE_Transaction     $transaction
183
-     * @param \EE_Payment | NULL $payment
184
-     * @param array              $registration_query_params    array of query WHERE params to use
185
-     *                                                         when retrieving cached registrations from a transaction
186
-     * @param bool               $trigger_notifications        whether or not to call
187
-     *                                                         \EE_Registration_Processor::trigger_registration_update_notifications()
188
-     * @return array
189
-     * @throws \EE_Error
190
-     */
191
-    public function update_transaction_and_registrations_after_checkout_or_payment(
192
-        EE_Transaction $transaction,
193
-        $payment = null,
194
-        $registration_query_params = array(),
195
-        $trigger_notifications = true
196
-    ) {
197
-        // make sure some query params are set for retrieving registrations
198
-        $this->_set_registration_query_params($registration_query_params);
199
-        // get final reg step status
200
-        $finalized = $transaction->final_reg_step_completed();
201
-        // if the 'finalize_registration' step has been initiated (has a timestamp)
202
-        // but has not yet been fully completed (TRUE)
203
-        if (is_int($finalized) && $finalized !== false && $finalized !== true) {
204
-            $transaction->set_reg_step_completed('finalize_registration');
205
-            $finalized = true;
206
-        }
207
-        $transaction->save();
208
-        // array of details to aid in decision making by systems
209
-        $update_params = array(
210
-            'old_txn_status'  => $transaction->old_txn_status(),
211
-            'new_txn_status'  => $transaction->status_ID(),
212
-            'finalized'       => $finalized,
213
-            'revisit'         => $this->_revisit,
214
-            'payment_updates' => $payment instanceof EE_Payment ? true : false,
215
-            'last_payment'    => $payment,
216
-        );
217
-        // now update the registrations and add the results to our $update_params
218
-        $update_params['status_updates'] = $this->_call_method_on_registrations_via_Registration_Processor(
219
-            'update_registration_after_checkout_or_payment',
220
-            $transaction,
221
-            $this->_registration_query_params,
222
-            $update_params
223
-        );
224
-        if ($trigger_notifications) {
225
-            // send messages
226
-            /** @type EE_Registration_Processor $registration_processor */
227
-            $registration_processor = EE_Registry::instance()->load_class('Registration_Processor');
228
-            $registration_processor->trigger_registration_update_notifications(
229
-                $transaction->primary_registration(),
230
-                $update_params
231
-            );
232
-        }
233
-        do_action(
234
-            'AHEE__EE_Transaction_Processor__update_transaction_and_registrations_after_checkout_or_payment',
235
-            $transaction,
236
-            $update_params
237
-        );
238
-        return $update_params;
239
-    }
240
-
241
-
242
-    /**
243
-     * update_transaction_after_registration_reopened
244
-     * readjusts TXN and Line Item totals after a registration is changed from
245
-     * cancelled or declined to another reg status such as pending payment or approved
246
-     *
247
-     * @param \EE_Registration $registration
248
-     * @param array            $closed_reg_statuses
249
-     * @param bool             $update_txn
250
-     * @return bool
251
-     * @throws \EE_Error
252
-     */
253
-    public function update_transaction_after_reinstating_canceled_registration(
254
-        EE_Registration $registration,
255
-        $closed_reg_statuses = array(),
256
-        $update_txn = true
257
-    ) {
258
-        // these reg statuses should not be considered in any calculations involving monies owing
259
-        $closed_reg_statuses = ! empty($closed_reg_statuses) ? $closed_reg_statuses
260
-            : EEM_Registration::closed_reg_statuses();
261
-        if (in_array($registration->status_ID(), $closed_reg_statuses, true)) {
262
-            return false;
263
-        }
264
-        try {
265
-            $transaction = $this->get_transaction_for_registration($registration);
266
-            $ticket_line_item = $this->get_ticket_line_item_for_transaction_registration(
267
-                $transaction,
268
-                $registration
269
-            );
270
-            // un-cancel the ticket
271
-            $success = EEH_Line_Item::reinstate_canceled_ticket_line_item($ticket_line_item);
272
-        } catch (EE_Error $e) {
273
-            EE_Error::add_error(
274
-                sprintf(
275
-                    __(
276
-                        'The Ticket Line Item for Registration %1$d could not be reinstated because :%2$s%3$s',
277
-                        'event_espresso'
278
-                    ),
279
-                    $registration->ID(),
280
-                    '<br />',
281
-                    $e->getMessage()
282
-                ),
283
-                __FILE__,
284
-                __FUNCTION__,
285
-                __LINE__
286
-            );
287
-            return false;
288
-        }
289
-        if ($update_txn) {
290
-            return $transaction->save() ? $success : false;
291
-        }
292
-        return $success;
293
-    }
294
-
295
-
296
-    /**
297
-     * update_transaction_after_canceled_or_declined_registration
298
-     * readjusts TXN and Line Item totals after a registration is cancelled or declined
299
-     *
300
-     * @param \EE_Registration $registration
301
-     * @param array            $closed_reg_statuses
302
-     * @param bool             $update_txn
303
-     * @return bool
304
-     * @throws \EE_Error
305
-     */
306
-    public function update_transaction_after_canceled_or_declined_registration(
307
-        EE_Registration $registration,
308
-        $closed_reg_statuses = array(),
309
-        $update_txn = true
310
-    ) {
311
-        // these reg statuses should not be considered in any calculations involving monies owing
312
-        $closed_reg_statuses = ! empty($closed_reg_statuses) ? $closed_reg_statuses
313
-            : EEM_Registration::closed_reg_statuses();
314
-        if (! in_array($registration->status_ID(), $closed_reg_statuses, true)) {
315
-            return false;
316
-        }
317
-        try {
318
-            $transaction = $this->get_transaction_for_registration($registration);
319
-            if (apply_filters(
320
-                'FHEE__EE_Transaction_Processor__update_transaction_after_canceled_or_declined_registration__cancel_ticket_line_item',
321
-                true,
322
-                $registration,
323
-                $transaction
324
-            )) {
325
-                $ticket_line_item = $this->get_ticket_line_item_for_transaction_registration(
326
-                    $transaction,
327
-                    $registration
328
-                );
329
-                EEH_Line_Item::cancel_ticket_line_item($ticket_line_item);
330
-            }
331
-        } catch (EE_Error $e) {
332
-            EE_Error::add_error(
333
-                sprintf(
334
-                    __(
335
-                        'The Ticket Line Item for Registration %1$d could not be cancelled because :%2$s%3$s',
336
-                        'event_espresso'
337
-                    ),
338
-                    $registration->ID(),
339
-                    '<br />',
340
-                    $e->getMessage()
341
-                ),
342
-                __FILE__,
343
-                __FUNCTION__,
344
-                __LINE__
345
-            );
346
-            return false;
347
-        }
348
-        if ($update_txn) {
349
-            return $transaction->save() ? true : false;
350
-        }
351
-        return true;
352
-    }
353
-
354
-
355
-    /**
356
-     * get_transaction_for_registration
357
-     *
358
-     * @access    public
359
-     * @param    EE_Registration $registration
360
-     * @return    EE_Transaction
361
-     * @throws    EE_Error
362
-     */
363
-    public function get_transaction_for_registration(EE_Registration $registration)
364
-    {
365
-        $transaction = $registration->transaction();
366
-        if (! $transaction instanceof EE_Transaction) {
367
-            throw new EE_Error(
368
-                sprintf(
369
-                    __('The Transaction for Registration %1$d was not found or is invalid.', 'event_espresso'),
370
-                    $registration->ID()
371
-                )
372
-            );
373
-        }
374
-        return $transaction;
375
-    }
376
-
377
-
378
-    /**
379
-     * get_ticket_line_item_for_transaction_registration
380
-     *
381
-     * @access    public
382
-     * @param    EE_Transaction  $transaction
383
-     * @param    EE_Registration $registration
384
-     * @return    EE_Line_Item
385
-     * @throws    EE_Error
386
-     */
387
-    public function get_ticket_line_item_for_transaction_registration(
388
-        EE_Transaction $transaction,
389
-        EE_Registration $registration
390
-    ) {
391
-        EE_Registry::instance()->load_helper('Line_Item');
392
-        $ticket_line_item = EEM_Line_Item::instance()->get_ticket_line_item_for_transaction(
393
-            $transaction->ID(),
394
-            $registration->ticket_ID()
395
-        );
396
-        if (! $ticket_line_item instanceof EE_Line_Item) {
397
-            throw new EE_Error(
398
-                sprintf(
399
-                    __(
400
-                        'The Line Item for Transaction %1$d and Ticket %2$d was not found or is invalid.',
401
-                        'event_espresso'
402
-                    ),
403
-                    $transaction->ID(),
404
-                    $registration->ticket_ID()
405
-                )
406
-            );
407
-        }
408
-        return $ticket_line_item;
409
-    }
410
-
411
-
412
-    /**
413
-     * cancel_transaction_if_all_registrations_canceled
414
-     * cycles thru related registrations and checks their statuses
415
-     * if ALL registrations are Cancelled or Declined, then this sets the TXN status to
416
-     *
417
-     * @access    public
418
-     * @param    EE_Transaction $transaction
419
-     * @param    string         $new_TXN_status
420
-     * @param    array          $registration_query_params - array of query WHERE params to use when
421
-     *                                                     retrieving cached registrations from a transaction
422
-     * @param    array          $closed_reg_statuses
423
-     * @param    bool           $update_txn
424
-     * @return    bool            true if TXN status was updated, false if not
425
-     */
426
-    public function toggle_transaction_status_if_all_registrations_canceled_or_declined(
427
-        EE_Transaction $transaction,
428
-        $new_TXN_status = '',
429
-        $registration_query_params = array(),
430
-        $closed_reg_statuses = array(),
431
-        $update_txn = true
432
-    ) {
433
-        // make sure some query params are set for retrieving registrations
434
-        $this->_set_registration_query_params($registration_query_params);
435
-        // these reg statuses should not be considered in any calculations involving monies owing
436
-        $closed_reg_statuses = ! empty($closed_reg_statuses) ? $closed_reg_statuses
437
-            : EEM_Registration::closed_reg_statuses();
438
-        // loop through cached registrations
439
-        foreach ($transaction->registrations($this->_registration_query_params) as $registration) {
440
-            if ($registration instanceof EE_Registration
441
-                && ! in_array($registration->status_ID(), $closed_reg_statuses)
442
-            ) {
443
-                return false;
444
-            }
445
-        }
446
-        if (in_array($new_TXN_status, EEM_Transaction::txn_status_array())) {
447
-            $transaction->set_status($new_TXN_status);
448
-        }
449
-        if ($update_txn) {
450
-            return $transaction->save() ? true : false;
451
-        }
452
-        return true;
453
-    }
454
-
455
-
456
-    /**
457
-     * _call_method_on_registrations_via_Registration_Processor
458
-     * cycles thru related registrations and calls the requested method on each
459
-     *
460
-     * @access private
461
-     * @param string         $method_name
462
-     * @param EE_Transaction $transaction
463
-     * @param array          $registration_query_params array of query WHERE params to use
464
-     *                                                  when retrieving cached registrations from a transaction
465
-     * @param string         $additional_param
466
-     * @throws \EE_Error
467
-     * @return boolean
468
-     */
469
-    private function _call_method_on_registrations_via_Registration_Processor(
470
-        $method_name,
471
-        EE_Transaction $transaction,
472
-        $registration_query_params = array(),
473
-        $additional_param = null
474
-    ) {
475
-        $response = false;
476
-        /** @type EE_Registration_Processor $registration_processor */
477
-        $registration_processor = EE_Registry::instance()->load_class('Registration_Processor');
478
-        // check that method exists
479
-        if (! method_exists($registration_processor, $method_name)) {
480
-            throw new EE_Error(__('Method does not exist.', 'event_espresso'));
481
-        }
482
-        // make sure some query params are set for retrieving registrations
483
-        $this->_set_registration_query_params($registration_query_params);
484
-        // loop through cached registrations
485
-        foreach ($transaction->registrations($this->_registration_query_params) as $registration) {
486
-            if ($registration instanceof EE_Registration) {
487
-                if ($additional_param) {
488
-                    $response = $registration_processor->{$method_name}($registration, $additional_param)
489
-                        ? true
490
-                        : $response;
491
-                } else {
492
-                    $response = $registration_processor->{$method_name}($registration)
493
-                        ? true
494
-                        : $response;
495
-                }
496
-            }
497
-        }
498
-        return $response;
499
-    }
500
-
501
-
502
-    /**
503
-     * set_transaction_payment_method_based_on_registration_statuses
504
-     * sets or unsets the PMD_ID field on the TXN based on the related REG statuses
505
-     * basically if ALL Registrations are "Not Approved", then the EE_Transaction.PMD_ID is set to null,
506
-     * but if any Registration has a different status, then EE_Transaction.PMD_ID is set to either:
507
-     *        the first "default" Payment Method
508
-     *        the first active Payment Method
509
-     *    whichever is found first.
510
-     *
511
-     * @param  EE_Registration $edited_registration
512
-     * @return void
513
-     * @throws \EE_Error
514
-     */
515
-    public function set_transaction_payment_method_based_on_registration_statuses(
516
-        EE_Registration $edited_registration
517
-    ) {
518
-        if ($edited_registration instanceof EE_Registration) {
519
-            $transaction = $edited_registration->transaction();
520
-            if ($transaction instanceof EE_Transaction) {
521
-                $all_not_approved = true;
522
-                foreach ($transaction->registrations() as $registration) {
523
-                    if ($registration instanceof EE_Registration) {
524
-                        // if any REG != "Not Approved" then toggle to false
525
-                        $all_not_approved = $registration->is_not_approved() ? $all_not_approved : false;
526
-                    }
527
-                }
528
-                // if ALL Registrations are "Not Approved"
529
-                if ($all_not_approved) {
530
-                    $transaction->set_payment_method_ID(null);
531
-                    $transaction->save();
532
-                } else {
533
-                    $available_payment_methods = EEM_Payment_Method::instance()->get_all_for_transaction(
534
-                        $transaction,
535
-                        EEM_Payment_Method::scope_cart
536
-                    );
537
-                    if (! empty($available_payment_methods)) {
538
-                        $PMD_ID = 0;
539
-                        foreach ($available_payment_methods as $available_payment_method) {
540
-                            if ($available_payment_method instanceof EE_Payment_Method
541
-                                && $available_payment_method->open_by_default()
542
-                            ) {
543
-                                $PMD_ID = $available_payment_method->ID();
544
-                                break;
545
-                            }
546
-                        }
547
-                        if (! $PMD_ID) {
548
-                            $first_payment_method = reset($available_payment_methods);
549
-                            if ($first_payment_method instanceof EE_Payment_Method) {
550
-                                $PMD_ID = $first_payment_method->ID();
551
-                            } else {
552
-                                EE_Error::add_error(
553
-                                    __(
554
-                                        'A valid Payment Method could not be determined. Please ensure that at least one Payment Method is activated.',
555
-                                        'event_espresso'
556
-                                    ),
557
-                                    __FILE__,
558
-                                    __LINE__,
559
-                                    __FUNCTION__
560
-                                );
561
-                            }
562
-                        }
563
-                        $transaction->set_payment_method_ID($PMD_ID);
564
-                        $transaction->save();
565
-                    } else {
566
-                        EE_Error::add_error(
567
-                            __(
568
-                                'Please activate at least one Payment Method in order for things to operate correctly.',
569
-                                'event_espresso'
570
-                            ),
571
-                            __FILE__,
572
-                            __LINE__,
573
-                            __FUNCTION__
574
-                        );
575
-                    }
576
-                }
577
-            }
578
-        }
579
-    }
580
-
581
-
582
-
583
-    /********************************** DEPRECATED METHODS **********************************/
584
-
585
-
586
-    /**
587
-     * @deprecated 4.9.12
588
-     * @return string
589
-     */
590
-    public function old_txn_status()
591
-    {
592
-        EE_Error::doing_it_wrong(
593
-            __METHOD__,
594
-            esc_html__(
595
-                'This logic has been moved into \EE_Transaction::old_txn_status(), please use that method instead.',
596
-                'event_espresso'
597
-            ),
598
-            '4.9.12'
599
-        );
600
-        return $this->_old_txn_status;
601
-    }
602
-
603
-
604
-    /**
605
-     * @deprecated 4.9.12
606
-     * @param string $old_txn_status
607
-     */
608
-    public function set_old_txn_status($old_txn_status)
609
-    {
610
-        EE_Error::doing_it_wrong(
611
-            __METHOD__,
612
-            esc_html__(
613
-                'This logic has been moved into \EE_Transaction::set_old_txn_status(), please use that method instead.',
614
-                'event_espresso'
615
-            ),
616
-            '4.9.12'
617
-        );
618
-        // only set the first time
619
-        if ($this->_old_txn_status === null) {
620
-            $this->_old_txn_status = $old_txn_status;
621
-        }
622
-    }
623
-
624
-
625
-    /**
626
-     * @deprecated 4.9.12
627
-     * @return string
628
-     */
629
-    public function new_txn_status()
630
-    {
631
-        EE_Error::doing_it_wrong(
632
-            __METHOD__,
633
-            esc_html__(
634
-                'This logic has been removed. Please just use \EE_Transaction::status_ID() instead.',
635
-                'event_espresso'
636
-            ),
637
-            '4.9.12'
638
-        );
639
-        return $this->_new_txn_status;
640
-    }
641
-
642
-
643
-    /**
644
-     * @deprecated 4.9.12
645
-     * @param string $new_txn_status
646
-     */
647
-    public function set_new_txn_status($new_txn_status)
648
-    {
649
-        EE_Error::doing_it_wrong(
650
-            __METHOD__,
651
-            esc_html__(
652
-                'This logic has been removed. Please just use \EE_Transaction::set_status() instead.',
653
-                'event_espresso'
654
-            ),
655
-            '4.9.12'
656
-        );
657
-        $this->_new_txn_status = $new_txn_status;
658
-    }
659
-
660
-
661
-    /**
662
-     * reg_status_updated
663
-     *
664
-     * @deprecated 4.9.12
665
-     * @return bool
666
-     */
667
-    public function txn_status_updated()
668
-    {
669
-        EE_Error::doing_it_wrong(
670
-            __METHOD__,
671
-            esc_html__(
672
-                'This logic has been moved into \EE_Transaction::txn_status_updated(), please use that method instead.',
673
-                'event_espresso'
674
-            ),
675
-            '4.9.12'
676
-        );
677
-        return $this->_new_txn_status !== $this->_old_txn_status && $this->_old_txn_status !== null ? true : false;
678
-    }
679
-
680
-
681
-    /**
682
-     * all_reg_steps_completed
683
-     * returns:
684
-     *    true if ALL reg steps have been marked as completed
685
-     *        or false if any step is not completed
686
-     *
687
-     * @deprecated 4.9.12
688
-     * @param EE_Transaction $transaction
689
-     * @return boolean
690
-     */
691
-    public function all_reg_steps_completed(EE_Transaction $transaction)
692
-    {
693
-        EE_Error::doing_it_wrong(
694
-            __METHOD__,
695
-            esc_html__(
696
-                'This logic has been moved into \EE_Transaction::all_reg_steps_completed(), please use that method instead.',
697
-                'event_espresso'
698
-            ),
699
-            '4.9.12',
700
-            '5.0.0'
701
-        );
702
-        return $transaction->all_reg_steps_completed();
703
-    }
704
-
705
-
706
-    /**
707
-     * all_reg_steps_completed_except
708
-     * returns:
709
-     *        true if ALL reg steps, except a particular step that you wish to skip over, have been marked as completed
710
-     *        or false if any other step is not completed
711
-     *        or false if ALL steps are completed including the exception you are testing !!!
712
-     *
713
-     * @deprecated 4.9.12
714
-     * @param EE_Transaction $transaction
715
-     * @param string         $exception
716
-     * @return boolean
717
-     */
718
-    public function all_reg_steps_completed_except(EE_Transaction $transaction, $exception = '')
719
-    {
720
-        EE_Error::doing_it_wrong(
721
-            __METHOD__,
722
-            esc_html__(
723
-                'This logic has been moved into \EE_Transaction::all_reg_steps_completed_except(), please use that method instead.',
724
-                'event_espresso'
725
-            ),
726
-            '4.9.12',
727
-            '5.0.0'
728
-        );
729
-        return $transaction->all_reg_steps_completed_except($exception);
730
-    }
731
-
732
-
733
-    /**
734
-     * all_reg_steps_completed_except
735
-     * returns:
736
-     *        true if ALL reg steps, except the final step, have been marked as completed
737
-     *        or false if any step is not completed
738
-     *    or false if ALL steps are completed including the final step !!!
739
-     *
740
-     * @deprecated 4.9.12
741
-     * @param EE_Transaction $transaction
742
-     * @return boolean
743
-     */
744
-    public function all_reg_steps_completed_except_final_step(EE_Transaction $transaction)
745
-    {
746
-        EE_Error::doing_it_wrong(
747
-            __METHOD__,
748
-            esc_html__(
749
-                'This logic has been moved into \EE_Transaction::all_reg_steps_completed_except_final_step(), please use that method instead.',
750
-                'event_espresso'
751
-            ),
752
-            '4.9.12',
753
-            '5.0.0'
754
-        );
755
-        return $transaction->all_reg_steps_completed_except_final_step();
756
-    }
757
-
758
-
759
-    /**
760
-     * reg_step_completed
761
-     * returns:
762
-     *    true if a specific reg step has been marked as completed
763
-     *    a Unix timestamp if it has been initialized but not yet completed,
764
-     *    or false if it has not yet been initialized
765
-     *
766
-     * @deprecated 4.9.12
767
-     * @param EE_Transaction $transaction
768
-     * @param string         $reg_step_slug
769
-     * @return boolean | int
770
-     */
771
-    public function reg_step_completed(EE_Transaction $transaction, $reg_step_slug)
772
-    {
773
-        EE_Error::doing_it_wrong(
774
-            __METHOD__,
775
-            esc_html__(
776
-                'This logic has been moved into \EE_Transaction::reg_step_completed(), please use that method instead.',
777
-                'event_espresso'
778
-            ),
779
-            '4.9.12',
780
-            '5.0.0'
781
-        );
782
-        return $transaction->reg_step_completed($reg_step_slug);
783
-    }
784
-
785
-
786
-    /**
787
-     * completed_final_reg_step
788
-     * returns:
789
-     *    true if the finalize_registration reg step has been marked as completed
790
-     *    a Unix timestamp if it has been initialized but not yet completed,
791
-     *    or false if it has not yet been initialized
792
-     *
793
-     * @deprecated 4.9.12
794
-     * @param EE_Transaction $transaction
795
-     * @return boolean | int
796
-     */
797
-    public function final_reg_step_completed(EE_Transaction $transaction)
798
-    {
799
-        EE_Error::doing_it_wrong(
800
-            __METHOD__,
801
-            esc_html__(
802
-                'This logic has been moved into \EE_Transaction::final_reg_step_completed(), please use that method instead.',
803
-                'event_espresso'
804
-            ),
805
-            '4.9.12',
806
-            '5.0.0'
807
-        );
808
-        return $transaction->final_reg_step_completed();
809
-    }
810
-
811
-
812
-    /**
813
-     * set_reg_step_initiated
814
-     * given a valid TXN_reg_step, this sets it's value to a unix timestamp
815
-     *
816
-     * @deprecated 4.9.12
817
-     * @access     public
818
-     * @param \EE_Transaction $transaction
819
-     * @param string          $reg_step_slug
820
-     * @return boolean
821
-     * @throws \EE_Error
822
-     */
823
-    public function set_reg_step_initiated(EE_Transaction $transaction, $reg_step_slug)
824
-    {
825
-        EE_Error::doing_it_wrong(
826
-            __METHOD__,
827
-            esc_html__(
828
-                'This logic has been moved into \EE_Transaction::set_reg_step_initiated(), please use that method instead.',
829
-                'event_espresso'
830
-            ),
831
-            '4.9.12',
832
-            '5.0.0'
833
-        );
834
-        return $transaction->set_reg_step_initiated($reg_step_slug);
835
-    }
836
-
837
-
838
-    /**
839
-     * set_reg_step_completed
840
-     * given a valid TXN_reg_step, this sets the step as completed
841
-     *
842
-     * @deprecated 4.9.12
843
-     * @access     public
844
-     * @param \EE_Transaction $transaction
845
-     * @param string          $reg_step_slug
846
-     * @return boolean
847
-     * @throws \EE_Error
848
-     */
849
-    public function set_reg_step_completed(EE_Transaction $transaction, $reg_step_slug)
850
-    {
851
-        EE_Error::doing_it_wrong(
852
-            __METHOD__,
853
-            esc_html__(
854
-                'This logic has been moved into \EE_Transaction::set_reg_step_completed(), please use that method instead.',
855
-                'event_espresso'
856
-            ),
857
-            '4.9.12',
858
-            '5.0.0'
859
-        );
860
-        return $transaction->set_reg_step_completed($reg_step_slug);
861
-    }
862
-
863
-
864
-    /**
865
-     * set_reg_step_completed
866
-     * given a valid TXN_reg_step slug, this sets the step as NOT completed
867
-     *
868
-     * @deprecated 4.9.12
869
-     * @access     public
870
-     * @param \EE_Transaction $transaction
871
-     * @param string          $reg_step_slug
872
-     * @return boolean
873
-     * @throws \EE_Error
874
-     */
875
-    public function set_reg_step_not_completed(EE_Transaction $transaction, $reg_step_slug)
876
-    {
877
-        EE_Error::doing_it_wrong(
878
-            __METHOD__,
879
-            esc_html__(
880
-                'This logic has been moved into \EE_Transaction::set_reg_step_not_completed(), please use that method instead.',
881
-                'event_espresso'
882
-            ),
883
-            '4.9.12',
884
-            '5.0.0'
885
-        );
886
-        return $transaction->set_reg_step_not_completed($reg_step_slug);
887
-    }
888
-
889
-
890
-    /**
891
-     * remove_reg_step
892
-     * given a valid TXN_reg_step slug, this will remove (unset)
893
-     * the reg step from the TXN reg step array
894
-     *
895
-     * @deprecated 4.9.12
896
-     * @access     public
897
-     * @param \EE_Transaction $transaction
898
-     * @param string          $reg_step_slug
899
-     * @return void
900
-     */
901
-    public function remove_reg_step(EE_Transaction $transaction, $reg_step_slug)
902
-    {
903
-        EE_Error::doing_it_wrong(
904
-            __METHOD__,
905
-            esc_html__(
906
-                'This logic has been moved into \EE_Transaction::remove_reg_step(), please use that method instead.',
907
-                'event_espresso'
908
-            ),
909
-            '4.9.12',
910
-            '5.0.0'
911
-        );
912
-        $transaction->remove_reg_step($reg_step_slug);
913
-    }
914
-
915
-
916
-    /**
917
-     *    toggle_failed_transaction_status
918
-     * upgrades a TXNs status from failed to abandoned,
919
-     * meaning that contact information has been captured for at least one registrant
920
-     *
921
-     * @deprecated 4.9.12
922
-     * @access     public
923
-     * @param EE_Transaction $transaction
924
-     * @return    boolean
925
-     * @throws \EE_Error
926
-     */
927
-    public function toggle_failed_transaction_status(EE_Transaction $transaction)
928
-    {
929
-        EE_Error::doing_it_wrong(
930
-            __METHOD__,
931
-            esc_html__(
932
-                'This logic has been moved into \EE_Transaction::toggle_failed_transaction_status(), please use that method instead.',
933
-                'event_espresso'
934
-            ),
935
-            '4.9.12',
936
-            '5.0.0'
937
-        );
938
-        return $transaction->toggle_failed_transaction_status();
939
-    }
940
-
941
-
942
-    /**
943
-     * toggle_abandoned_transaction_status
944
-     * upgrades a TXNs status from failed or abandoned to incomplete
945
-     *
946
-     * @deprecated 4.9.12
947
-     * @access     public
948
-     * @param  EE_Transaction $transaction
949
-     * @return boolean
950
-     */
951
-    public function toggle_abandoned_transaction_status(EE_Transaction $transaction)
952
-    {
953
-        EE_Error::doing_it_wrong(
954
-            __METHOD__,
955
-            esc_html__(
956
-                'This logic has been moved into \EE_Transaction::toggle_abandoned_transaction_status(), please use that method instead.',
957
-                'event_espresso'
958
-            ),
959
-            '4.9.12',
960
-            '5.0.0'
961
-        );
962
-        return $transaction->toggle_abandoned_transaction_status();
963
-    }
20
+	/**
21
+	 * @var EE_Registration_Processor $_instance
22
+	 * @access    private
23
+	 */
24
+	private static $_instance;
25
+
26
+	/**
27
+	 * array of query WHERE params to use when retrieving cached registrations from a transaction
28
+	 *
29
+	 * @var array $registration_query_params
30
+	 * @access private
31
+	 */
32
+	private $_registration_query_params = array();
33
+
34
+	/**
35
+	 * @deprecated
36
+	 * @var string
37
+	 */
38
+	protected $_old_txn_status;
39
+
40
+	/**
41
+	 * @deprecated
42
+	 * @var string
43
+	 */
44
+	protected $_new_txn_status;
45
+
46
+
47
+	/**
48
+	 * @singleton method used to instantiate class object
49
+	 * @access    public
50
+	 * @param array $registration_query_params
51
+	 * @return EE_Transaction_Processor instance
52
+	 */
53
+	public static function instance($registration_query_params = array())
54
+	{
55
+		// check if class object is instantiated
56
+		if (! self::$_instance instanceof EE_Transaction_Processor) {
57
+			self::$_instance = new self($registration_query_params);
58
+		}
59
+		return self::$_instance;
60
+	}
61
+
62
+
63
+	/**
64
+	 * @param array $registration_query_params
65
+	 */
66
+	private function __construct($registration_query_params = array())
67
+	{
68
+		// make sure some query params are set for retrieving registrations
69
+		$this->_set_registration_query_params($registration_query_params);
70
+	}
71
+
72
+
73
+	/**
74
+	 * @access private
75
+	 * @param array $registration_query_params
76
+	 */
77
+	private function _set_registration_query_params($registration_query_params)
78
+	{
79
+		$this->_registration_query_params = ! empty($registration_query_params) ? $registration_query_params
80
+			: array('order_by' => array('REG_count' => 'ASC'));
81
+	}
82
+
83
+
84
+	/**
85
+	 * manually_update_registration_statuses
86
+	 *
87
+	 * @access public
88
+	 * @param EE_Transaction $transaction
89
+	 * @param string         $new_reg_status
90
+	 * @param array          $registration_query_params array of query WHERE params to use
91
+	 *                                                  when retrieving cached registrations from a transaction
92
+	 * @return    boolean
93
+	 * @throws \EE_Error
94
+	 */
95
+	public function manually_update_registration_statuses(
96
+		EE_Transaction $transaction,
97
+		$new_reg_status = '',
98
+		$registration_query_params = array()
99
+	) {
100
+		$status_updates = $this->_call_method_on_registrations_via_Registration_Processor(
101
+			'manually_update_registration_status',
102
+			$transaction,
103
+			$registration_query_params,
104
+			$new_reg_status
105
+		);
106
+		// send messages
107
+		/** @type EE_Registration_Processor $registration_processor */
108
+		$registration_processor = EE_Registry::instance()->load_class('Registration_Processor');
109
+		$registration_processor->trigger_registration_update_notifications(
110
+			$transaction->primary_registration(),
111
+			array('manually_updated' => true)
112
+		);
113
+		do_action(
114
+			'AHEE__EE_Transaction_Processor__manually_update_registration_statuses',
115
+			$transaction,
116
+			$status_updates
117
+		);
118
+		return $status_updates;
119
+	}
120
+
121
+
122
+	/**
123
+	 * toggle_registration_statuses_for_default_approved_events
124
+	 *
125
+	 * @access public
126
+	 * @param EE_Transaction $transaction
127
+	 * @param array          $registration_query_params array of query WHERE params to use
128
+	 *                                                  when retrieving cached registrations from a transaction
129
+	 * @return    boolean
130
+	 * @throws \EE_Error
131
+	 */
132
+	public function toggle_registration_statuses_for_default_approved_events(
133
+		EE_Transaction $transaction,
134
+		$registration_query_params = array()
135
+	) {
136
+		$status_updates = $this->_call_method_on_registrations_via_Registration_Processor(
137
+			'toggle_registration_status_for_default_approved_events',
138
+			$transaction,
139
+			$registration_query_params
140
+		);
141
+		do_action(
142
+			'AHEE__EE_Transaction_Processor__toggle_registration_statuses_for_default_approved_events',
143
+			$transaction,
144
+			$status_updates
145
+		);
146
+		return $status_updates;
147
+	}
148
+
149
+
150
+	/**
151
+	 * toggle_registration_statuses_if_no_monies_owing
152
+	 *
153
+	 * @access public
154
+	 * @param EE_Transaction $transaction
155
+	 * @param array          $registration_query_params array of query WHERE params to use
156
+	 *                                                  when retrieving cached registrations from a transaction
157
+	 * @return    boolean
158
+	 * @throws \EE_Error
159
+	 */
160
+	public function toggle_registration_statuses_if_no_monies_owing(
161
+		EE_Transaction $transaction,
162
+		$registration_query_params = array()
163
+	) {
164
+		$status_updates = $this->_call_method_on_registrations_via_Registration_Processor(
165
+			'toggle_registration_status_if_no_monies_owing',
166
+			$transaction,
167
+			$registration_query_params
168
+		);
169
+		do_action(
170
+			'AHEE__EE_Transaction_Processor__toggle_registration_statuses_if_no_monies_owing',
171
+			$transaction,
172
+			$status_updates
173
+		);
174
+		return $status_updates;
175
+	}
176
+
177
+
178
+	/**
179
+	 * update_transaction_and_registrations_after_checkout_or_payment
180
+	 * cycles thru related registrations and calls update_registration_after_checkout_or_payment() on each
181
+	 *
182
+	 * @param EE_Transaction     $transaction
183
+	 * @param \EE_Payment | NULL $payment
184
+	 * @param array              $registration_query_params    array of query WHERE params to use
185
+	 *                                                         when retrieving cached registrations from a transaction
186
+	 * @param bool               $trigger_notifications        whether or not to call
187
+	 *                                                         \EE_Registration_Processor::trigger_registration_update_notifications()
188
+	 * @return array
189
+	 * @throws \EE_Error
190
+	 */
191
+	public function update_transaction_and_registrations_after_checkout_or_payment(
192
+		EE_Transaction $transaction,
193
+		$payment = null,
194
+		$registration_query_params = array(),
195
+		$trigger_notifications = true
196
+	) {
197
+		// make sure some query params are set for retrieving registrations
198
+		$this->_set_registration_query_params($registration_query_params);
199
+		// get final reg step status
200
+		$finalized = $transaction->final_reg_step_completed();
201
+		// if the 'finalize_registration' step has been initiated (has a timestamp)
202
+		// but has not yet been fully completed (TRUE)
203
+		if (is_int($finalized) && $finalized !== false && $finalized !== true) {
204
+			$transaction->set_reg_step_completed('finalize_registration');
205
+			$finalized = true;
206
+		}
207
+		$transaction->save();
208
+		// array of details to aid in decision making by systems
209
+		$update_params = array(
210
+			'old_txn_status'  => $transaction->old_txn_status(),
211
+			'new_txn_status'  => $transaction->status_ID(),
212
+			'finalized'       => $finalized,
213
+			'revisit'         => $this->_revisit,
214
+			'payment_updates' => $payment instanceof EE_Payment ? true : false,
215
+			'last_payment'    => $payment,
216
+		);
217
+		// now update the registrations and add the results to our $update_params
218
+		$update_params['status_updates'] = $this->_call_method_on_registrations_via_Registration_Processor(
219
+			'update_registration_after_checkout_or_payment',
220
+			$transaction,
221
+			$this->_registration_query_params,
222
+			$update_params
223
+		);
224
+		if ($trigger_notifications) {
225
+			// send messages
226
+			/** @type EE_Registration_Processor $registration_processor */
227
+			$registration_processor = EE_Registry::instance()->load_class('Registration_Processor');
228
+			$registration_processor->trigger_registration_update_notifications(
229
+				$transaction->primary_registration(),
230
+				$update_params
231
+			);
232
+		}
233
+		do_action(
234
+			'AHEE__EE_Transaction_Processor__update_transaction_and_registrations_after_checkout_or_payment',
235
+			$transaction,
236
+			$update_params
237
+		);
238
+		return $update_params;
239
+	}
240
+
241
+
242
+	/**
243
+	 * update_transaction_after_registration_reopened
244
+	 * readjusts TXN and Line Item totals after a registration is changed from
245
+	 * cancelled or declined to another reg status such as pending payment or approved
246
+	 *
247
+	 * @param \EE_Registration $registration
248
+	 * @param array            $closed_reg_statuses
249
+	 * @param bool             $update_txn
250
+	 * @return bool
251
+	 * @throws \EE_Error
252
+	 */
253
+	public function update_transaction_after_reinstating_canceled_registration(
254
+		EE_Registration $registration,
255
+		$closed_reg_statuses = array(),
256
+		$update_txn = true
257
+	) {
258
+		// these reg statuses should not be considered in any calculations involving monies owing
259
+		$closed_reg_statuses = ! empty($closed_reg_statuses) ? $closed_reg_statuses
260
+			: EEM_Registration::closed_reg_statuses();
261
+		if (in_array($registration->status_ID(), $closed_reg_statuses, true)) {
262
+			return false;
263
+		}
264
+		try {
265
+			$transaction = $this->get_transaction_for_registration($registration);
266
+			$ticket_line_item = $this->get_ticket_line_item_for_transaction_registration(
267
+				$transaction,
268
+				$registration
269
+			);
270
+			// un-cancel the ticket
271
+			$success = EEH_Line_Item::reinstate_canceled_ticket_line_item($ticket_line_item);
272
+		} catch (EE_Error $e) {
273
+			EE_Error::add_error(
274
+				sprintf(
275
+					__(
276
+						'The Ticket Line Item for Registration %1$d could not be reinstated because :%2$s%3$s',
277
+						'event_espresso'
278
+					),
279
+					$registration->ID(),
280
+					'<br />',
281
+					$e->getMessage()
282
+				),
283
+				__FILE__,
284
+				__FUNCTION__,
285
+				__LINE__
286
+			);
287
+			return false;
288
+		}
289
+		if ($update_txn) {
290
+			return $transaction->save() ? $success : false;
291
+		}
292
+		return $success;
293
+	}
294
+
295
+
296
+	/**
297
+	 * update_transaction_after_canceled_or_declined_registration
298
+	 * readjusts TXN and Line Item totals after a registration is cancelled or declined
299
+	 *
300
+	 * @param \EE_Registration $registration
301
+	 * @param array            $closed_reg_statuses
302
+	 * @param bool             $update_txn
303
+	 * @return bool
304
+	 * @throws \EE_Error
305
+	 */
306
+	public function update_transaction_after_canceled_or_declined_registration(
307
+		EE_Registration $registration,
308
+		$closed_reg_statuses = array(),
309
+		$update_txn = true
310
+	) {
311
+		// these reg statuses should not be considered in any calculations involving monies owing
312
+		$closed_reg_statuses = ! empty($closed_reg_statuses) ? $closed_reg_statuses
313
+			: EEM_Registration::closed_reg_statuses();
314
+		if (! in_array($registration->status_ID(), $closed_reg_statuses, true)) {
315
+			return false;
316
+		}
317
+		try {
318
+			$transaction = $this->get_transaction_for_registration($registration);
319
+			if (apply_filters(
320
+				'FHEE__EE_Transaction_Processor__update_transaction_after_canceled_or_declined_registration__cancel_ticket_line_item',
321
+				true,
322
+				$registration,
323
+				$transaction
324
+			)) {
325
+				$ticket_line_item = $this->get_ticket_line_item_for_transaction_registration(
326
+					$transaction,
327
+					$registration
328
+				);
329
+				EEH_Line_Item::cancel_ticket_line_item($ticket_line_item);
330
+			}
331
+		} catch (EE_Error $e) {
332
+			EE_Error::add_error(
333
+				sprintf(
334
+					__(
335
+						'The Ticket Line Item for Registration %1$d could not be cancelled because :%2$s%3$s',
336
+						'event_espresso'
337
+					),
338
+					$registration->ID(),
339
+					'<br />',
340
+					$e->getMessage()
341
+				),
342
+				__FILE__,
343
+				__FUNCTION__,
344
+				__LINE__
345
+			);
346
+			return false;
347
+		}
348
+		if ($update_txn) {
349
+			return $transaction->save() ? true : false;
350
+		}
351
+		return true;
352
+	}
353
+
354
+
355
+	/**
356
+	 * get_transaction_for_registration
357
+	 *
358
+	 * @access    public
359
+	 * @param    EE_Registration $registration
360
+	 * @return    EE_Transaction
361
+	 * @throws    EE_Error
362
+	 */
363
+	public function get_transaction_for_registration(EE_Registration $registration)
364
+	{
365
+		$transaction = $registration->transaction();
366
+		if (! $transaction instanceof EE_Transaction) {
367
+			throw new EE_Error(
368
+				sprintf(
369
+					__('The Transaction for Registration %1$d was not found or is invalid.', 'event_espresso'),
370
+					$registration->ID()
371
+				)
372
+			);
373
+		}
374
+		return $transaction;
375
+	}
376
+
377
+
378
+	/**
379
+	 * get_ticket_line_item_for_transaction_registration
380
+	 *
381
+	 * @access    public
382
+	 * @param    EE_Transaction  $transaction
383
+	 * @param    EE_Registration $registration
384
+	 * @return    EE_Line_Item
385
+	 * @throws    EE_Error
386
+	 */
387
+	public function get_ticket_line_item_for_transaction_registration(
388
+		EE_Transaction $transaction,
389
+		EE_Registration $registration
390
+	) {
391
+		EE_Registry::instance()->load_helper('Line_Item');
392
+		$ticket_line_item = EEM_Line_Item::instance()->get_ticket_line_item_for_transaction(
393
+			$transaction->ID(),
394
+			$registration->ticket_ID()
395
+		);
396
+		if (! $ticket_line_item instanceof EE_Line_Item) {
397
+			throw new EE_Error(
398
+				sprintf(
399
+					__(
400
+						'The Line Item for Transaction %1$d and Ticket %2$d was not found or is invalid.',
401
+						'event_espresso'
402
+					),
403
+					$transaction->ID(),
404
+					$registration->ticket_ID()
405
+				)
406
+			);
407
+		}
408
+		return $ticket_line_item;
409
+	}
410
+
411
+
412
+	/**
413
+	 * cancel_transaction_if_all_registrations_canceled
414
+	 * cycles thru related registrations and checks their statuses
415
+	 * if ALL registrations are Cancelled or Declined, then this sets the TXN status to
416
+	 *
417
+	 * @access    public
418
+	 * @param    EE_Transaction $transaction
419
+	 * @param    string         $new_TXN_status
420
+	 * @param    array          $registration_query_params - array of query WHERE params to use when
421
+	 *                                                     retrieving cached registrations from a transaction
422
+	 * @param    array          $closed_reg_statuses
423
+	 * @param    bool           $update_txn
424
+	 * @return    bool            true if TXN status was updated, false if not
425
+	 */
426
+	public function toggle_transaction_status_if_all_registrations_canceled_or_declined(
427
+		EE_Transaction $transaction,
428
+		$new_TXN_status = '',
429
+		$registration_query_params = array(),
430
+		$closed_reg_statuses = array(),
431
+		$update_txn = true
432
+	) {
433
+		// make sure some query params are set for retrieving registrations
434
+		$this->_set_registration_query_params($registration_query_params);
435
+		// these reg statuses should not be considered in any calculations involving monies owing
436
+		$closed_reg_statuses = ! empty($closed_reg_statuses) ? $closed_reg_statuses
437
+			: EEM_Registration::closed_reg_statuses();
438
+		// loop through cached registrations
439
+		foreach ($transaction->registrations($this->_registration_query_params) as $registration) {
440
+			if ($registration instanceof EE_Registration
441
+				&& ! in_array($registration->status_ID(), $closed_reg_statuses)
442
+			) {
443
+				return false;
444
+			}
445
+		}
446
+		if (in_array($new_TXN_status, EEM_Transaction::txn_status_array())) {
447
+			$transaction->set_status($new_TXN_status);
448
+		}
449
+		if ($update_txn) {
450
+			return $transaction->save() ? true : false;
451
+		}
452
+		return true;
453
+	}
454
+
455
+
456
+	/**
457
+	 * _call_method_on_registrations_via_Registration_Processor
458
+	 * cycles thru related registrations and calls the requested method on each
459
+	 *
460
+	 * @access private
461
+	 * @param string         $method_name
462
+	 * @param EE_Transaction $transaction
463
+	 * @param array          $registration_query_params array of query WHERE params to use
464
+	 *                                                  when retrieving cached registrations from a transaction
465
+	 * @param string         $additional_param
466
+	 * @throws \EE_Error
467
+	 * @return boolean
468
+	 */
469
+	private function _call_method_on_registrations_via_Registration_Processor(
470
+		$method_name,
471
+		EE_Transaction $transaction,
472
+		$registration_query_params = array(),
473
+		$additional_param = null
474
+	) {
475
+		$response = false;
476
+		/** @type EE_Registration_Processor $registration_processor */
477
+		$registration_processor = EE_Registry::instance()->load_class('Registration_Processor');
478
+		// check that method exists
479
+		if (! method_exists($registration_processor, $method_name)) {
480
+			throw new EE_Error(__('Method does not exist.', 'event_espresso'));
481
+		}
482
+		// make sure some query params are set for retrieving registrations
483
+		$this->_set_registration_query_params($registration_query_params);
484
+		// loop through cached registrations
485
+		foreach ($transaction->registrations($this->_registration_query_params) as $registration) {
486
+			if ($registration instanceof EE_Registration) {
487
+				if ($additional_param) {
488
+					$response = $registration_processor->{$method_name}($registration, $additional_param)
489
+						? true
490
+						: $response;
491
+				} else {
492
+					$response = $registration_processor->{$method_name}($registration)
493
+						? true
494
+						: $response;
495
+				}
496
+			}
497
+		}
498
+		return $response;
499
+	}
500
+
501
+
502
+	/**
503
+	 * set_transaction_payment_method_based_on_registration_statuses
504
+	 * sets or unsets the PMD_ID field on the TXN based on the related REG statuses
505
+	 * basically if ALL Registrations are "Not Approved", then the EE_Transaction.PMD_ID is set to null,
506
+	 * but if any Registration has a different status, then EE_Transaction.PMD_ID is set to either:
507
+	 *        the first "default" Payment Method
508
+	 *        the first active Payment Method
509
+	 *    whichever is found first.
510
+	 *
511
+	 * @param  EE_Registration $edited_registration
512
+	 * @return void
513
+	 * @throws \EE_Error
514
+	 */
515
+	public function set_transaction_payment_method_based_on_registration_statuses(
516
+		EE_Registration $edited_registration
517
+	) {
518
+		if ($edited_registration instanceof EE_Registration) {
519
+			$transaction = $edited_registration->transaction();
520
+			if ($transaction instanceof EE_Transaction) {
521
+				$all_not_approved = true;
522
+				foreach ($transaction->registrations() as $registration) {
523
+					if ($registration instanceof EE_Registration) {
524
+						// if any REG != "Not Approved" then toggle to false
525
+						$all_not_approved = $registration->is_not_approved() ? $all_not_approved : false;
526
+					}
527
+				}
528
+				// if ALL Registrations are "Not Approved"
529
+				if ($all_not_approved) {
530
+					$transaction->set_payment_method_ID(null);
531
+					$transaction->save();
532
+				} else {
533
+					$available_payment_methods = EEM_Payment_Method::instance()->get_all_for_transaction(
534
+						$transaction,
535
+						EEM_Payment_Method::scope_cart
536
+					);
537
+					if (! empty($available_payment_methods)) {
538
+						$PMD_ID = 0;
539
+						foreach ($available_payment_methods as $available_payment_method) {
540
+							if ($available_payment_method instanceof EE_Payment_Method
541
+								&& $available_payment_method->open_by_default()
542
+							) {
543
+								$PMD_ID = $available_payment_method->ID();
544
+								break;
545
+							}
546
+						}
547
+						if (! $PMD_ID) {
548
+							$first_payment_method = reset($available_payment_methods);
549
+							if ($first_payment_method instanceof EE_Payment_Method) {
550
+								$PMD_ID = $first_payment_method->ID();
551
+							} else {
552
+								EE_Error::add_error(
553
+									__(
554
+										'A valid Payment Method could not be determined. Please ensure that at least one Payment Method is activated.',
555
+										'event_espresso'
556
+									),
557
+									__FILE__,
558
+									__LINE__,
559
+									__FUNCTION__
560
+								);
561
+							}
562
+						}
563
+						$transaction->set_payment_method_ID($PMD_ID);
564
+						$transaction->save();
565
+					} else {
566
+						EE_Error::add_error(
567
+							__(
568
+								'Please activate at least one Payment Method in order for things to operate correctly.',
569
+								'event_espresso'
570
+							),
571
+							__FILE__,
572
+							__LINE__,
573
+							__FUNCTION__
574
+						);
575
+					}
576
+				}
577
+			}
578
+		}
579
+	}
580
+
581
+
582
+
583
+	/********************************** DEPRECATED METHODS **********************************/
584
+
585
+
586
+	/**
587
+	 * @deprecated 4.9.12
588
+	 * @return string
589
+	 */
590
+	public function old_txn_status()
591
+	{
592
+		EE_Error::doing_it_wrong(
593
+			__METHOD__,
594
+			esc_html__(
595
+				'This logic has been moved into \EE_Transaction::old_txn_status(), please use that method instead.',
596
+				'event_espresso'
597
+			),
598
+			'4.9.12'
599
+		);
600
+		return $this->_old_txn_status;
601
+	}
602
+
603
+
604
+	/**
605
+	 * @deprecated 4.9.12
606
+	 * @param string $old_txn_status
607
+	 */
608
+	public function set_old_txn_status($old_txn_status)
609
+	{
610
+		EE_Error::doing_it_wrong(
611
+			__METHOD__,
612
+			esc_html__(
613
+				'This logic has been moved into \EE_Transaction::set_old_txn_status(), please use that method instead.',
614
+				'event_espresso'
615
+			),
616
+			'4.9.12'
617
+		);
618
+		// only set the first time
619
+		if ($this->_old_txn_status === null) {
620
+			$this->_old_txn_status = $old_txn_status;
621
+		}
622
+	}
623
+
624
+
625
+	/**
626
+	 * @deprecated 4.9.12
627
+	 * @return string
628
+	 */
629
+	public function new_txn_status()
630
+	{
631
+		EE_Error::doing_it_wrong(
632
+			__METHOD__,
633
+			esc_html__(
634
+				'This logic has been removed. Please just use \EE_Transaction::status_ID() instead.',
635
+				'event_espresso'
636
+			),
637
+			'4.9.12'
638
+		);
639
+		return $this->_new_txn_status;
640
+	}
641
+
642
+
643
+	/**
644
+	 * @deprecated 4.9.12
645
+	 * @param string $new_txn_status
646
+	 */
647
+	public function set_new_txn_status($new_txn_status)
648
+	{
649
+		EE_Error::doing_it_wrong(
650
+			__METHOD__,
651
+			esc_html__(
652
+				'This logic has been removed. Please just use \EE_Transaction::set_status() instead.',
653
+				'event_espresso'
654
+			),
655
+			'4.9.12'
656
+		);
657
+		$this->_new_txn_status = $new_txn_status;
658
+	}
659
+
660
+
661
+	/**
662
+	 * reg_status_updated
663
+	 *
664
+	 * @deprecated 4.9.12
665
+	 * @return bool
666
+	 */
667
+	public function txn_status_updated()
668
+	{
669
+		EE_Error::doing_it_wrong(
670
+			__METHOD__,
671
+			esc_html__(
672
+				'This logic has been moved into \EE_Transaction::txn_status_updated(), please use that method instead.',
673
+				'event_espresso'
674
+			),
675
+			'4.9.12'
676
+		);
677
+		return $this->_new_txn_status !== $this->_old_txn_status && $this->_old_txn_status !== null ? true : false;
678
+	}
679
+
680
+
681
+	/**
682
+	 * all_reg_steps_completed
683
+	 * returns:
684
+	 *    true if ALL reg steps have been marked as completed
685
+	 *        or false if any step is not completed
686
+	 *
687
+	 * @deprecated 4.9.12
688
+	 * @param EE_Transaction $transaction
689
+	 * @return boolean
690
+	 */
691
+	public function all_reg_steps_completed(EE_Transaction $transaction)
692
+	{
693
+		EE_Error::doing_it_wrong(
694
+			__METHOD__,
695
+			esc_html__(
696
+				'This logic has been moved into \EE_Transaction::all_reg_steps_completed(), please use that method instead.',
697
+				'event_espresso'
698
+			),
699
+			'4.9.12',
700
+			'5.0.0'
701
+		);
702
+		return $transaction->all_reg_steps_completed();
703
+	}
704
+
705
+
706
+	/**
707
+	 * all_reg_steps_completed_except
708
+	 * returns:
709
+	 *        true if ALL reg steps, except a particular step that you wish to skip over, have been marked as completed
710
+	 *        or false if any other step is not completed
711
+	 *        or false if ALL steps are completed including the exception you are testing !!!
712
+	 *
713
+	 * @deprecated 4.9.12
714
+	 * @param EE_Transaction $transaction
715
+	 * @param string         $exception
716
+	 * @return boolean
717
+	 */
718
+	public function all_reg_steps_completed_except(EE_Transaction $transaction, $exception = '')
719
+	{
720
+		EE_Error::doing_it_wrong(
721
+			__METHOD__,
722
+			esc_html__(
723
+				'This logic has been moved into \EE_Transaction::all_reg_steps_completed_except(), please use that method instead.',
724
+				'event_espresso'
725
+			),
726
+			'4.9.12',
727
+			'5.0.0'
728
+		);
729
+		return $transaction->all_reg_steps_completed_except($exception);
730
+	}
731
+
732
+
733
+	/**
734
+	 * all_reg_steps_completed_except
735
+	 * returns:
736
+	 *        true if ALL reg steps, except the final step, have been marked as completed
737
+	 *        or false if any step is not completed
738
+	 *    or false if ALL steps are completed including the final step !!!
739
+	 *
740
+	 * @deprecated 4.9.12
741
+	 * @param EE_Transaction $transaction
742
+	 * @return boolean
743
+	 */
744
+	public function all_reg_steps_completed_except_final_step(EE_Transaction $transaction)
745
+	{
746
+		EE_Error::doing_it_wrong(
747
+			__METHOD__,
748
+			esc_html__(
749
+				'This logic has been moved into \EE_Transaction::all_reg_steps_completed_except_final_step(), please use that method instead.',
750
+				'event_espresso'
751
+			),
752
+			'4.9.12',
753
+			'5.0.0'
754
+		);
755
+		return $transaction->all_reg_steps_completed_except_final_step();
756
+	}
757
+
758
+
759
+	/**
760
+	 * reg_step_completed
761
+	 * returns:
762
+	 *    true if a specific reg step has been marked as completed
763
+	 *    a Unix timestamp if it has been initialized but not yet completed,
764
+	 *    or false if it has not yet been initialized
765
+	 *
766
+	 * @deprecated 4.9.12
767
+	 * @param EE_Transaction $transaction
768
+	 * @param string         $reg_step_slug
769
+	 * @return boolean | int
770
+	 */
771
+	public function reg_step_completed(EE_Transaction $transaction, $reg_step_slug)
772
+	{
773
+		EE_Error::doing_it_wrong(
774
+			__METHOD__,
775
+			esc_html__(
776
+				'This logic has been moved into \EE_Transaction::reg_step_completed(), please use that method instead.',
777
+				'event_espresso'
778
+			),
779
+			'4.9.12',
780
+			'5.0.0'
781
+		);
782
+		return $transaction->reg_step_completed($reg_step_slug);
783
+	}
784
+
785
+
786
+	/**
787
+	 * completed_final_reg_step
788
+	 * returns:
789
+	 *    true if the finalize_registration reg step has been marked as completed
790
+	 *    a Unix timestamp if it has been initialized but not yet completed,
791
+	 *    or false if it has not yet been initialized
792
+	 *
793
+	 * @deprecated 4.9.12
794
+	 * @param EE_Transaction $transaction
795
+	 * @return boolean | int
796
+	 */
797
+	public function final_reg_step_completed(EE_Transaction $transaction)
798
+	{
799
+		EE_Error::doing_it_wrong(
800
+			__METHOD__,
801
+			esc_html__(
802
+				'This logic has been moved into \EE_Transaction::final_reg_step_completed(), please use that method instead.',
803
+				'event_espresso'
804
+			),
805
+			'4.9.12',
806
+			'5.0.0'
807
+		);
808
+		return $transaction->final_reg_step_completed();
809
+	}
810
+
811
+
812
+	/**
813
+	 * set_reg_step_initiated
814
+	 * given a valid TXN_reg_step, this sets it's value to a unix timestamp
815
+	 *
816
+	 * @deprecated 4.9.12
817
+	 * @access     public
818
+	 * @param \EE_Transaction $transaction
819
+	 * @param string          $reg_step_slug
820
+	 * @return boolean
821
+	 * @throws \EE_Error
822
+	 */
823
+	public function set_reg_step_initiated(EE_Transaction $transaction, $reg_step_slug)
824
+	{
825
+		EE_Error::doing_it_wrong(
826
+			__METHOD__,
827
+			esc_html__(
828
+				'This logic has been moved into \EE_Transaction::set_reg_step_initiated(), please use that method instead.',
829
+				'event_espresso'
830
+			),
831
+			'4.9.12',
832
+			'5.0.0'
833
+		);
834
+		return $transaction->set_reg_step_initiated($reg_step_slug);
835
+	}
836
+
837
+
838
+	/**
839
+	 * set_reg_step_completed
840
+	 * given a valid TXN_reg_step, this sets the step as completed
841
+	 *
842
+	 * @deprecated 4.9.12
843
+	 * @access     public
844
+	 * @param \EE_Transaction $transaction
845
+	 * @param string          $reg_step_slug
846
+	 * @return boolean
847
+	 * @throws \EE_Error
848
+	 */
849
+	public function set_reg_step_completed(EE_Transaction $transaction, $reg_step_slug)
850
+	{
851
+		EE_Error::doing_it_wrong(
852
+			__METHOD__,
853
+			esc_html__(
854
+				'This logic has been moved into \EE_Transaction::set_reg_step_completed(), please use that method instead.',
855
+				'event_espresso'
856
+			),
857
+			'4.9.12',
858
+			'5.0.0'
859
+		);
860
+		return $transaction->set_reg_step_completed($reg_step_slug);
861
+	}
862
+
863
+
864
+	/**
865
+	 * set_reg_step_completed
866
+	 * given a valid TXN_reg_step slug, this sets the step as NOT completed
867
+	 *
868
+	 * @deprecated 4.9.12
869
+	 * @access     public
870
+	 * @param \EE_Transaction $transaction
871
+	 * @param string          $reg_step_slug
872
+	 * @return boolean
873
+	 * @throws \EE_Error
874
+	 */
875
+	public function set_reg_step_not_completed(EE_Transaction $transaction, $reg_step_slug)
876
+	{
877
+		EE_Error::doing_it_wrong(
878
+			__METHOD__,
879
+			esc_html__(
880
+				'This logic has been moved into \EE_Transaction::set_reg_step_not_completed(), please use that method instead.',
881
+				'event_espresso'
882
+			),
883
+			'4.9.12',
884
+			'5.0.0'
885
+		);
886
+		return $transaction->set_reg_step_not_completed($reg_step_slug);
887
+	}
888
+
889
+
890
+	/**
891
+	 * remove_reg_step
892
+	 * given a valid TXN_reg_step slug, this will remove (unset)
893
+	 * the reg step from the TXN reg step array
894
+	 *
895
+	 * @deprecated 4.9.12
896
+	 * @access     public
897
+	 * @param \EE_Transaction $transaction
898
+	 * @param string          $reg_step_slug
899
+	 * @return void
900
+	 */
901
+	public function remove_reg_step(EE_Transaction $transaction, $reg_step_slug)
902
+	{
903
+		EE_Error::doing_it_wrong(
904
+			__METHOD__,
905
+			esc_html__(
906
+				'This logic has been moved into \EE_Transaction::remove_reg_step(), please use that method instead.',
907
+				'event_espresso'
908
+			),
909
+			'4.9.12',
910
+			'5.0.0'
911
+		);
912
+		$transaction->remove_reg_step($reg_step_slug);
913
+	}
914
+
915
+
916
+	/**
917
+	 *    toggle_failed_transaction_status
918
+	 * upgrades a TXNs status from failed to abandoned,
919
+	 * meaning that contact information has been captured for at least one registrant
920
+	 *
921
+	 * @deprecated 4.9.12
922
+	 * @access     public
923
+	 * @param EE_Transaction $transaction
924
+	 * @return    boolean
925
+	 * @throws \EE_Error
926
+	 */
927
+	public function toggle_failed_transaction_status(EE_Transaction $transaction)
928
+	{
929
+		EE_Error::doing_it_wrong(
930
+			__METHOD__,
931
+			esc_html__(
932
+				'This logic has been moved into \EE_Transaction::toggle_failed_transaction_status(), please use that method instead.',
933
+				'event_espresso'
934
+			),
935
+			'4.9.12',
936
+			'5.0.0'
937
+		);
938
+		return $transaction->toggle_failed_transaction_status();
939
+	}
940
+
941
+
942
+	/**
943
+	 * toggle_abandoned_transaction_status
944
+	 * upgrades a TXNs status from failed or abandoned to incomplete
945
+	 *
946
+	 * @deprecated 4.9.12
947
+	 * @access     public
948
+	 * @param  EE_Transaction $transaction
949
+	 * @return boolean
950
+	 */
951
+	public function toggle_abandoned_transaction_status(EE_Transaction $transaction)
952
+	{
953
+		EE_Error::doing_it_wrong(
954
+			__METHOD__,
955
+			esc_html__(
956
+				'This logic has been moved into \EE_Transaction::toggle_abandoned_transaction_status(), please use that method instead.',
957
+				'event_espresso'
958
+			),
959
+			'4.9.12',
960
+			'5.0.0'
961
+		);
962
+		return $transaction->toggle_abandoned_transaction_status();
963
+	}
964 964
 }
Please login to merge, or discard this patch.
Spacing   +7 added lines, -7 removed lines patch added patch discarded remove patch
@@ -53,7 +53,7 @@  discard block
 block discarded – undo
53 53
     public static function instance($registration_query_params = array())
54 54
     {
55 55
         // check if class object is instantiated
56
-        if (! self::$_instance instanceof EE_Transaction_Processor) {
56
+        if ( ! self::$_instance instanceof EE_Transaction_Processor) {
57 57
             self::$_instance = new self($registration_query_params);
58 58
         }
59 59
         return self::$_instance;
@@ -311,7 +311,7 @@  discard block
 block discarded – undo
311 311
         // these reg statuses should not be considered in any calculations involving monies owing
312 312
         $closed_reg_statuses = ! empty($closed_reg_statuses) ? $closed_reg_statuses
313 313
             : EEM_Registration::closed_reg_statuses();
314
-        if (! in_array($registration->status_ID(), $closed_reg_statuses, true)) {
314
+        if ( ! in_array($registration->status_ID(), $closed_reg_statuses, true)) {
315 315
             return false;
316 316
         }
317 317
         try {
@@ -363,7 +363,7 @@  discard block
 block discarded – undo
363 363
     public function get_transaction_for_registration(EE_Registration $registration)
364 364
     {
365 365
         $transaction = $registration->transaction();
366
-        if (! $transaction instanceof EE_Transaction) {
366
+        if ( ! $transaction instanceof EE_Transaction) {
367 367
             throw new EE_Error(
368 368
                 sprintf(
369 369
                     __('The Transaction for Registration %1$d was not found or is invalid.', 'event_espresso'),
@@ -393,7 +393,7 @@  discard block
 block discarded – undo
393 393
             $transaction->ID(),
394 394
             $registration->ticket_ID()
395 395
         );
396
-        if (! $ticket_line_item instanceof EE_Line_Item) {
396
+        if ( ! $ticket_line_item instanceof EE_Line_Item) {
397 397
             throw new EE_Error(
398 398
                 sprintf(
399 399
                     __(
@@ -476,7 +476,7 @@  discard block
 block discarded – undo
476 476
         /** @type EE_Registration_Processor $registration_processor */
477 477
         $registration_processor = EE_Registry::instance()->load_class('Registration_Processor');
478 478
         // check that method exists
479
-        if (! method_exists($registration_processor, $method_name)) {
479
+        if ( ! method_exists($registration_processor, $method_name)) {
480 480
             throw new EE_Error(__('Method does not exist.', 'event_espresso'));
481 481
         }
482 482
         // make sure some query params are set for retrieving registrations
@@ -534,7 +534,7 @@  discard block
 block discarded – undo
534 534
                         $transaction,
535 535
                         EEM_Payment_Method::scope_cart
536 536
                     );
537
-                    if (! empty($available_payment_methods)) {
537
+                    if ( ! empty($available_payment_methods)) {
538 538
                         $PMD_ID = 0;
539 539
                         foreach ($available_payment_methods as $available_payment_method) {
540 540
                             if ($available_payment_method instanceof EE_Payment_Method
@@ -544,7 +544,7 @@  discard block
 block discarded – undo
544 544
                                 break;
545 545
                             }
546 546
                         }
547
-                        if (! $PMD_ID) {
547
+                        if ( ! $PMD_ID) {
548 548
                             $first_payment_method = reset($available_payment_methods);
549 549
                             if ($first_payment_method instanceof EE_Payment_Method) {
550 550
                                 $PMD_ID = $first_payment_method->ID();
Please login to merge, or discard this patch.
core/db_classes/EE_Answer.class.php 2 patches
Doc Comments   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -61,7 +61,7 @@
 block discarded – undo
61 61
      *    Set Answer value
62 62
      *
63 63
      * @access        public
64
-     * @param mixed $ANS_value
64
+     * @param string $ANS_value
65 65
      */
66 66
     public function set_value($ANS_value = '')
67 67
     {
Please login to merge, or discard this patch.
Indentation   +138 added lines, -138 removed lines patch added patch discarded remove patch
@@ -10,144 +10,144 @@
 block discarded – undo
10 10
 class EE_Answer extends EE_Base_Class
11 11
 {
12 12
 
13
-    /**
14
-     *
15
-     * @param array $props_n_values
16
-     * @return EE_Answer
17
-     */
18
-    public static function new_instance($props_n_values = array())
19
-    {
20
-        $has_object = parent::_check_for_object($props_n_values, __CLASS__);
21
-        return $has_object ? $has_object : new self($props_n_values);
22
-    }
23
-
24
-
25
-    /**
26
-     *
27
-     * @param array $props_n_values
28
-     * @return EE_Answer
29
-     */
30
-    public static function new_instance_from_db($props_n_values = array())
31
-    {
32
-        return new self($props_n_values, true);
33
-    }
34
-
35
-
36
-    /**
37
-     *    Set Question ID
38
-     *
39
-     * @access        public
40
-     * @param int $QST_ID
41
-     */
42
-    public function set_question($QST_ID = 0)
43
-    {
44
-        $this->set('QST_ID', $QST_ID);
45
-    }
46
-
47
-
48
-    /**
49
-     *    Set Registration ID
50
-     *
51
-     * @access        public
52
-     * @param int $REG_ID
53
-     */
54
-    public function set_registration($REG_ID = 0)
55
-    {
56
-        $this->set('REG_ID', $REG_ID);
57
-    }
58
-
59
-
60
-    /**
61
-     *    Set Answer value
62
-     *
63
-     * @access        public
64
-     * @param mixed $ANS_value
65
-     */
66
-    public function set_value($ANS_value = '')
67
-    {
68
-        $this->set('ANS_value', $ANS_value);
69
-    }
70
-
71
-
72
-    /**
73
-     *    get Attendee First Name
74
-     *
75
-     * @access        public
76
-     * @return        int
77
-     */
78
-    public function registration_ID()
79
-    {
80
-        return $this->get('REG_ID');
81
-    }
82
-
83
-
84
-    /**
85
-     *    get Attendee Last Name
86
-     *
87
-     * @access        public
88
-     * @return        int
89
-     */
90
-    public function question_ID()
91
-    {
92
-        return $this->get('QST_ID');
93
-    }
94
-
95
-
96
-    /**
97
-     *    get Attendee Address
98
-     *
99
-     * @access        public
100
-     * @return        string
101
-     */
102
-    public function value()
103
-    {
104
-        return $this->get('ANS_value');
105
-    }
106
-
107
-
108
-    /**
109
-     * Gets a pretty form of the value (mostly applies to answers that have multiple answers)
110
-     *
111
-     * @param null $schema
112
-     * @return string
113
-     */
114
-    public function pretty_value($schema = null)
115
-    {
116
-        return $this->get_pretty('ANS_value', $schema);
117
-    }
118
-
119
-
120
-    /**
121
-     * Echoes out a pretty value (even for multi-choice options)
122
-     *
123
-     * @param string $schema
124
-     */
125
-    public function e_value($schema = null)
126
-    {
127
-        $this->e('ANS_value', $schema);
128
-    }
129
-
130
-
131
-    /**
132
-     * Gets the related EE_Question to this EE_Answer
133
-     *
134
-     * @return EE_Question
135
-     */
136
-    public function question()
137
-    {
138
-        return $this->get_first_related('Question');
139
-    }
140
-
141
-
142
-    /**
143
-     * Gets the related EE_Registration to this EE_Answer
144
-     *
145
-     * @return EE_Registration
146
-     */
147
-    public function registration()
148
-    {
149
-        return $this->get_first_related('Registration');
150
-    }
13
+	/**
14
+	 *
15
+	 * @param array $props_n_values
16
+	 * @return EE_Answer
17
+	 */
18
+	public static function new_instance($props_n_values = array())
19
+	{
20
+		$has_object = parent::_check_for_object($props_n_values, __CLASS__);
21
+		return $has_object ? $has_object : new self($props_n_values);
22
+	}
23
+
24
+
25
+	/**
26
+	 *
27
+	 * @param array $props_n_values
28
+	 * @return EE_Answer
29
+	 */
30
+	public static function new_instance_from_db($props_n_values = array())
31
+	{
32
+		return new self($props_n_values, true);
33
+	}
34
+
35
+
36
+	/**
37
+	 *    Set Question ID
38
+	 *
39
+	 * @access        public
40
+	 * @param int $QST_ID
41
+	 */
42
+	public function set_question($QST_ID = 0)
43
+	{
44
+		$this->set('QST_ID', $QST_ID);
45
+	}
46
+
47
+
48
+	/**
49
+	 *    Set Registration ID
50
+	 *
51
+	 * @access        public
52
+	 * @param int $REG_ID
53
+	 */
54
+	public function set_registration($REG_ID = 0)
55
+	{
56
+		$this->set('REG_ID', $REG_ID);
57
+	}
58
+
59
+
60
+	/**
61
+	 *    Set Answer value
62
+	 *
63
+	 * @access        public
64
+	 * @param mixed $ANS_value
65
+	 */
66
+	public function set_value($ANS_value = '')
67
+	{
68
+		$this->set('ANS_value', $ANS_value);
69
+	}
70
+
71
+
72
+	/**
73
+	 *    get Attendee First Name
74
+	 *
75
+	 * @access        public
76
+	 * @return        int
77
+	 */
78
+	public function registration_ID()
79
+	{
80
+		return $this->get('REG_ID');
81
+	}
82
+
83
+
84
+	/**
85
+	 *    get Attendee Last Name
86
+	 *
87
+	 * @access        public
88
+	 * @return        int
89
+	 */
90
+	public function question_ID()
91
+	{
92
+		return $this->get('QST_ID');
93
+	}
94
+
95
+
96
+	/**
97
+	 *    get Attendee Address
98
+	 *
99
+	 * @access        public
100
+	 * @return        string
101
+	 */
102
+	public function value()
103
+	{
104
+		return $this->get('ANS_value');
105
+	}
106
+
107
+
108
+	/**
109
+	 * Gets a pretty form of the value (mostly applies to answers that have multiple answers)
110
+	 *
111
+	 * @param null $schema
112
+	 * @return string
113
+	 */
114
+	public function pretty_value($schema = null)
115
+	{
116
+		return $this->get_pretty('ANS_value', $schema);
117
+	}
118
+
119
+
120
+	/**
121
+	 * Echoes out a pretty value (even for multi-choice options)
122
+	 *
123
+	 * @param string $schema
124
+	 */
125
+	public function e_value($schema = null)
126
+	{
127
+		$this->e('ANS_value', $schema);
128
+	}
129
+
130
+
131
+	/**
132
+	 * Gets the related EE_Question to this EE_Answer
133
+	 *
134
+	 * @return EE_Question
135
+	 */
136
+	public function question()
137
+	{
138
+		return $this->get_first_related('Question');
139
+	}
140
+
141
+
142
+	/**
143
+	 * Gets the related EE_Registration to this EE_Answer
144
+	 *
145
+	 * @return EE_Registration
146
+	 */
147
+	public function registration()
148
+	{
149
+		return $this->get_first_related('Registration');
150
+	}
151 151
 }
152 152
 
153 153
 /* End of file EE_Answer.class.php */
Please login to merge, or discard this patch.
core/db_classes/EE_CPT_Base.class.php 3 patches
Doc Comments   +7 added lines, -7 removed lines patch added patch discarded remove patch
@@ -216,7 +216,7 @@  discard block
 block discarded – undo
216 216
      *
217 217
      * @link   http://codex.wordpress.org/Function_Reference/get_the_post_thumbnail
218 218
      * @access protected
219
-     * @param string|array $size (optional) Image size. Defaults to 'post-thumbnail' but can also be a 2-item array
219
+     * @param string $size (optional) Image size. Defaults to 'post-thumbnail' but can also be a 2-item array
220 220
      *                           representing width and height in pixels (i.e. array(32,32) ).
221 221
      * @param string|array $attr Optional. Query string or array of attributes.
222 222
      * @return string HTML image element
@@ -264,7 +264,7 @@  discard block
 block discarded – undo
264 264
      * This is a method for restoring this_obj using details from the given $revision_id
265 265
      *
266 266
      * @param int   $revision_id       ID of the revision we're getting data from
267
-     * @param array $related_obj_names if included this will be used to restore for related obj
267
+     * @param string[] $related_obj_names if included this will be used to restore for related obj
268 268
      *                                 if not included then we just do restore on the meta.
269 269
      *                                 We will accept an array of related_obj_names for restoration here.
270 270
      * @param array $where_query       You can optionally include an array of key=>value pairs
@@ -320,7 +320,7 @@  discard block
 block discarded – undo
320 320
      *
321 321
      * @param string  $meta_key
322 322
      * @param boolean $single
323
-     * @return mixed <ul><li>If only $id is set it will return all meta values in an associative array.</li>
323
+     * @return string|null <ul><li>If only $id is set it will return all meta values in an associative array.</li>
324 324
      * <li>If $single is set to false, or left blank, the function returns an array containing all values of the
325 325
      * specified key.</li>
326 326
      * <li>If $single is set to true, the function returns the first value of the specified key (not in an
@@ -354,8 +354,8 @@  discard block
 block discarded – undo
354 354
     /**
355 355
      * Wrapper for add_post_meta, http://codex.wordpress.org/Function_Reference/add_post_meta
356 356
      *
357
-     * @param mixed $meta_key
358
-     * @param mixed $meta_value
357
+     * @param string $meta_key
358
+     * @param string $meta_value
359 359
      * @param bool  $unique . If postmeta for this $meta_key already exists, whether to add an additional item or not
360 360
      * @return boolean Boolean true, except if the $unique argument was set to true and a custom field with the given
361 361
      *                 key already exists, in which case false is returned.
@@ -372,7 +372,7 @@  discard block
 block discarded – undo
372 372
     /**
373 373
      * Wrapper for delete_post_meta, http://codex.wordpress.org/Function_Reference/delete_post_meta
374 374
      *
375
-     * @param mixed $meta_key
375
+     * @param string $meta_key
376 376
      * @param mixed $meta_value
377 377
      * @return boolean False for failure. True for success.
378 378
      */
@@ -402,7 +402,7 @@  discard block
 block discarded – undo
402 402
      * Gets all the term-taxonomies for this CPT
403 403
      *
404 404
      * @param array $query_params
405
-     * @return EE_Term_Taxonomy
405
+     * @return EE_Base_Class[]
406 406
      */
407 407
     public function term_taxonomies($query_params = array())
408 408
     {
Please login to merge, or discard this patch.
Indentation   +425 added lines, -425 removed lines patch added patch discarded remove patch
@@ -14,429 +14,429 @@
 block discarded – undo
14 14
 abstract class EE_CPT_Base extends EE_Soft_Delete_Base_Class
15 15
 {
16 16
 
17
-    /**
18
-     * This is a property for holding cached feature images on CPT objects.  Cache's are set on the first
19
-     * "feature_image()" method call.  Each key in the array corresponds to the requested size.
20
-     *
21
-     * @var array
22
-     */
23
-    protected $_feature_image = array();
24
-
25
-    /**
26
-     * @var WP_Post the WP_Post that corresponds with this CPT model object
27
-     */
28
-    protected $_wp_post;
29
-
30
-
31
-    abstract public function wp_user();
32
-
33
-
34
-    /**
35
-     * Returns the WP post associated with this CPT model object. If this CPT is saved, fetches it
36
-     * from the DB. Otherwise, create an unsaved WP_POst object. Caches the post internally.
37
-     *
38
-     * @return WP_Post
39
-     */
40
-    public function wp_post()
41
-    {
42
-        global $wpdb;
43
-        if (! $this->_wp_post instanceof WP_Post) {
44
-            if ($this->ID()) {
45
-                $this->_wp_post = get_post($this->ID());
46
-            } else {
47
-                $simulated_db_result = new stdClass();
48
-                foreach ($this->get_model()->field_settings(true) as $field_name => $field_obj) {
49
-                    if ($this->get_model()->get_table_obj_by_alias($field_obj->get_table_alias())->get_table_name()
50
-                        === $wpdb->posts
51
-                    ) {
52
-                        $column = $field_obj->get_table_column();
53
-
54
-                        if ($field_obj instanceof EE_Datetime_Field) {
55
-                            $value_on_model_obj = $this->get_DateTime_object($field_name);
56
-                        } elseif ($field_obj->is_db_only_field()) {
57
-                            $value_on_model_obj = $field_obj->get_default_value();
58
-                        } else {
59
-                            $value_on_model_obj = $this->get_raw($field_name);
60
-                        }
61
-                        $simulated_db_result->{$column} = $field_obj->prepare_for_use_in_db($value_on_model_obj);
62
-                    }
63
-                }
64
-                $this->_wp_post = new WP_Post($simulated_db_result);
65
-            }
66
-            // and let's make retrieving the EE CPT object easy too
67
-            $classname = get_class($this);
68
-            if (! isset($this->_wp_post->{$classname})) {
69
-                $this->_wp_post->{$classname} = $this;
70
-            }
71
-        }
72
-        return $this->_wp_post;
73
-    }
74
-
75
-    /**
76
-     * When fetching a new value for a post field that uses the global $post for rendering,
77
-     * set the global $post temporarily to be this model object; and afterwards restore it
78
-     *
79
-     * @param string $fieldname
80
-     * @param bool   $pretty
81
-     * @param string $extra_cache_ref
82
-     * @return mixed
83
-     */
84
-    protected function _get_fresh_property($fieldname, $pretty = false, $extra_cache_ref = null)
85
-    {
86
-        global $post;
87
-
88
-        if ($pretty
89
-            && (
90
-                ! (
91
-                    $post instanceof WP_Post
92
-                    && $post->ID
93
-                )
94
-                || (int) $post->ID !== $this->ID()
95
-            )
96
-            && $this->get_model()->field_settings_for($fieldname) instanceof EE_Post_Content_Field) {
97
-            $old_post = $post;
98
-            $post = $this->wp_post();
99
-            $return_value = parent::_get_fresh_property($fieldname, $pretty, $extra_cache_ref);
100
-            $post = $old_post;
101
-        } else {
102
-            $return_value = parent::_get_fresh_property($fieldname, $pretty, $extra_cache_ref);
103
-        }
104
-        return $return_value;
105
-    }
106
-
107
-    /**
108
-     * Adds to the specified event category. If it category doesn't exist, creates it.
109
-     *
110
-     * @param string $category_name
111
-     * @param string $category_description    optional
112
-     * @param int    $parent_term_taxonomy_id optional
113
-     * @return EE_Term_Taxonomy
114
-     */
115
-    public function add_event_category($category_name, $category_description = null, $parent_term_taxonomy_id = null)
116
-    {
117
-        return $this->get_model()->add_event_category(
118
-            $this,
119
-            $category_name,
120
-            $category_description,
121
-            $parent_term_taxonomy_id
122
-        );
123
-    }
124
-
125
-
126
-    /**
127
-     * Removes the event category by specified name from being related ot this event
128
-     *
129
-     * @param string $category_name
130
-     * @return bool
131
-     */
132
-    public function remove_event_category($category_name)
133
-    {
134
-        return $this->get_model()->remove_event_category($this, $category_name);
135
-    }
136
-
137
-
138
-    /**
139
-     * Removes the relation to the specified term taxonomy, and maintains the
140
-     * data integrity of the term taxonomy provided
141
-     *
142
-     * @param EE_Term_Taxonomy $term_taxonomy
143
-     * @return EE_Base_Class the relation was removed from
144
-     */
145
-    public function remove_relation_to_term_taxonomy($term_taxonomy)
146
-    {
147
-        if (! $term_taxonomy) {
148
-            EE_Error::add_error(
149
-                sprintf(
150
-                    __(
151
-                        "No Term_Taxonomy provided which to remove from model object of type %s and id %d",
152
-                        "event_espresso"
153
-                    ),
154
-                    get_class($this),
155
-                    $this->ID()
156
-                ),
157
-                __FILE__,
158
-                __FUNCTION__,
159
-                __LINE__
160
-            );
161
-            return null;
162
-        }
163
-        $term_taxonomy->set_count($term_taxonomy->count() - 1);
164
-        $term_taxonomy->save();
165
-        return $this->_remove_relation_to($term_taxonomy, 'Term_Taxonomy');
166
-    }
167
-
168
-
169
-    /**
170
-     * The main purpose of this method is to return the post type for the model object
171
-     *
172
-     * @access public
173
-     * @return string
174
-     */
175
-    public function post_type()
176
-    {
177
-        return $this->get_model()->post_type();
178
-    }
179
-
180
-
181
-    /**
182
-     * The main purpose of this method is to return the parent for the model object
183
-     *
184
-     * @access public
185
-     * @return int
186
-     */
187
-    public function parent()
188
-    {
189
-        return $this->get('parent');
190
-    }
191
-
192
-
193
-    /**
194
-     * return the _status property
195
-     *
196
-     * @return string
197
-     */
198
-    public function status()
199
-    {
200
-        return $this->get('status');
201
-    }
202
-
203
-
204
-    /**
205
-     * @param string $status
206
-     */
207
-    public function set_status($status)
208
-    {
209
-        $this->set('status', $status);
210
-    }
211
-
212
-
213
-    /**
214
-     * This calls the equivalent model method for retrieving the feature image which in turn is a wrapper for
215
-     * WordPress' get_the_post_thumbnail() function.
216
-     *
217
-     * @link   http://codex.wordpress.org/Function_Reference/get_the_post_thumbnail
218
-     * @access protected
219
-     * @param string|array $size (optional) Image size. Defaults to 'post-thumbnail' but can also be a 2-item array
220
-     *                           representing width and height in pixels (i.e. array(32,32) ).
221
-     * @param string|array $attr Optional. Query string or array of attributes.
222
-     * @return string HTML image element
223
-     */
224
-    protected function _get_feature_image($size, $attr)
225
-    {
226
-        // first let's see if we already have the _feature_image property set AND if it has a cached element on it FOR the given size
227
-        $attr_key = is_array($attr) ? implode('_', $attr) : $attr;
228
-        $cache_key = is_array($size) ? implode('_', $size) . $attr_key : $size . $attr_key;
229
-        $this->_feature_image[ $cache_key ] = isset($this->_feature_image[ $cache_key ])
230
-            ? $this->_feature_image[ $cache_key ] : $this->get_model()->get_feature_image($this->ID(), $size, $attr);
231
-        return $this->_feature_image[ $cache_key ];
232
-    }
233
-
234
-
235
-    /**
236
-     * See _get_feature_image. Returns the HTML to display a featured image
237
-     *
238
-     * @param string       $size
239
-     * @param string|array $attr
240
-     * @return string of html
241
-     */
242
-    public function feature_image($size = 'thumbnail', $attr = '')
243
-    {
244
-        return $this->_get_feature_image($size, $attr);
245
-    }
246
-
247
-
248
-    /**
249
-     * This uses the wp "wp_get_attachment_image_src()" function to return the feature image for the current class
250
-     * using the given size params.
251
-     *
252
-     * @param  string|array $size can either be a string: 'thumbnail', 'medium', 'large', 'full' OR 2-item array
253
-     *                            representing width and height in pixels eg. array(32,32).
254
-     * @return string|boolean          the url of the image or false if not found
255
-     */
256
-    public function feature_image_url($size = 'thumbnail')
257
-    {
258
-        $attachment = wp_get_attachment_image_src(get_post_thumbnail_id($this->ID()), $size);
259
-        return ! empty($attachment) ? $attachment[0] : false;
260
-    }
261
-
262
-
263
-    /**
264
-     * This is a method for restoring this_obj using details from the given $revision_id
265
-     *
266
-     * @param int   $revision_id       ID of the revision we're getting data from
267
-     * @param array $related_obj_names if included this will be used to restore for related obj
268
-     *                                 if not included then we just do restore on the meta.
269
-     *                                 We will accept an array of related_obj_names for restoration here.
270
-     * @param array $where_query       You can optionally include an array of key=>value pairs
271
-     *                                 that allow you to further constrict the relation to being added.
272
-     *                                 However, keep in mind that the columns (keys) given
273
-     *                                 must match a column on the JOIN table and currently
274
-     *                                 only the HABTM models accept these additional conditions.
275
-     *                                 Also remember that if an exact match isn't found for these extra cols/val pairs,
276
-     *                                 then a NEW row is created in the join table.
277
-     *                                 This array is INDEXED by RELATED OBJ NAME (so it corresponds with the obj_names
278
-     *                                 sent);
279
-     * @return void
280
-     */
281
-    public function restore_revision($revision_id, $related_obj_names = array(), $where_query = array())
282
-    {
283
-        // get revision object
284
-        $revision_obj = $this->get_model()->get_one_by_ID($revision_id);
285
-        if ($revision_obj instanceof EE_CPT_Base) {
286
-            // no related_obj_name so we assume we're saving a revision on this object.
287
-            if (empty($related_obj_names)) {
288
-                $fields = $this->get_model()->get_meta_table_fields();
289
-                foreach ($fields as $field) {
290
-                    $this->set($field, $revision_obj->get($field));
291
-                }
292
-                $this->save();
293
-            }
294
-            $related_obj_names = (array) $related_obj_names;
295
-            foreach ($related_obj_names as $related_name) {
296
-                // related_obj_name so we're saving a revision on an object related to this object
297
-                // do we have $where_query params for this related object?  If we do then we include that.
298
-                $cols_n_values = isset($where_query[ $related_name ]) ? $where_query[ $related_name ] : array();
299
-                $where_params = ! empty($cols_n_values) ? array($cols_n_values) : array();
300
-                $related_objs = $this->get_many_related($related_name, $where_params);
301
-                $revision_related_objs = $revision_obj->get_many_related($related_name, $where_params);
302
-                // load helper
303
-                // remove related objs from this object that are not in revision
304
-                // array_diff *should* work cause I think objects are indexed by ID?
305
-                $related_to_remove = EEH_Array::object_array_diff($related_objs, $revision_related_objs);
306
-                foreach ($related_to_remove as $rr) {
307
-                    $this->_remove_relation_to($rr, $related_name, $cols_n_values);
308
-                }
309
-                // add all related objs attached to revision to this object
310
-                foreach ($revision_related_objs as $r_obj) {
311
-                    $this->_add_relation_to($r_obj, $related_name, $cols_n_values);
312
-                }
313
-            }
314
-        }
315
-    }
316
-
317
-
318
-    /**
319
-     * Wrapper for get_post_meta, http://codex.wordpress.org/Function_Reference/get_post_meta
320
-     *
321
-     * @param string  $meta_key
322
-     * @param boolean $single
323
-     * @return mixed <ul><li>If only $id is set it will return all meta values in an associative array.</li>
324
-     * <li>If $single is set to false, or left blank, the function returns an array containing all values of the
325
-     * specified key.</li>
326
-     * <li>If $single is set to true, the function returns the first value of the specified key (not in an
327
-     * array</li></ul>
328
-     */
329
-    public function get_post_meta($meta_key = null, $single = false)
330
-    {
331
-        return get_post_meta($this->ID(), $meta_key, $single);
332
-    }
333
-
334
-
335
-    /**
336
-     * Wrapper for update_post_meta, http://codex.wordpress.org/Function_Reference/update_post_meta
337
-     *
338
-     * @param string $meta_key
339
-     * @param mixed  $meta_value
340
-     * @param mixed  $prev_value
341
-     * @return mixed Returns meta_id if the meta doesn't exist, otherwise returns true on success and false on failure.
342
-     *               NOTE: If the meta_value passed to this function is the same as the value that is already in the
343
-     *               database, this function returns false.
344
-     */
345
-    public function update_post_meta($meta_key, $meta_value, $prev_value = null)
346
-    {
347
-        if (! $this->ID()) {
348
-            $this->save();
349
-        }
350
-        return update_post_meta($this->ID(), $meta_key, $meta_value, $prev_value);
351
-    }
352
-
353
-
354
-    /**
355
-     * Wrapper for add_post_meta, http://codex.wordpress.org/Function_Reference/add_post_meta
356
-     *
357
-     * @param mixed $meta_key
358
-     * @param mixed $meta_value
359
-     * @param bool  $unique . If postmeta for this $meta_key already exists, whether to add an additional item or not
360
-     * @return boolean Boolean true, except if the $unique argument was set to true and a custom field with the given
361
-     *                 key already exists, in which case false is returned.
362
-     */
363
-    public function add_post_meta($meta_key, $meta_value, $unique = false)
364
-    {
365
-        if ($this->ID()) {
366
-            $this->save();
367
-        }
368
-        return add_post_meta($this->ID(), $meta_key, $meta_value, $unique);
369
-    }
370
-
371
-
372
-    /**
373
-     * Wrapper for delete_post_meta, http://codex.wordpress.org/Function_Reference/delete_post_meta
374
-     *
375
-     * @param mixed $meta_key
376
-     * @param mixed $meta_value
377
-     * @return boolean False for failure. True for success.
378
-     */
379
-    public function delete_post_meta($meta_key, $meta_value = '')
380
-    {
381
-        if (! $this->ID()) {
382
-            // there are obviously no postmetas for this if it's not saved
383
-            // so let's just report this as a success
384
-            return true;
385
-        }
386
-        return delete_post_meta($this->ID(), $meta_key, $meta_value);
387
-    }
388
-
389
-
390
-    /**
391
-     * Gets the URL for viewing this event on the front-end
392
-     *
393
-     * @return string
394
-     */
395
-    public function get_permalink()
396
-    {
397
-        return get_permalink($this->ID());
398
-    }
399
-
400
-
401
-    /**
402
-     * Gets all the term-taxonomies for this CPT
403
-     *
404
-     * @param array $query_params
405
-     * @return EE_Term_Taxonomy
406
-     */
407
-    public function term_taxonomies($query_params = array())
408
-    {
409
-        return $this->get_many_related('Term_Taxonomy', $query_params);
410
-    }
411
-
412
-
413
-    /**
414
-     * @return mixed
415
-     */
416
-    public function get_custom_post_statuses()
417
-    {
418
-        return $this->get_model()->get_custom_post_statuses();
419
-    }
420
-
421
-
422
-    /**
423
-     * @return mixed
424
-     */
425
-    public function get_all_post_statuses()
426
-    {
427
-        return $this->get_model()->get_status_array();
428
-    }
429
-
430
-
431
-    /**
432
-     * Don't serialize the WP Post. That's just duplicate data and we want to avoid recursion
433
-     *
434
-     * @return array
435
-     */
436
-    public function __sleep()
437
-    {
438
-        $properties_to_serialize = parent::__sleep();
439
-        $properties_to_serialize = array_diff($properties_to_serialize, array('_wp_post'));
440
-        return $properties_to_serialize;
441
-    }
17
+	/**
18
+	 * This is a property for holding cached feature images on CPT objects.  Cache's are set on the first
19
+	 * "feature_image()" method call.  Each key in the array corresponds to the requested size.
20
+	 *
21
+	 * @var array
22
+	 */
23
+	protected $_feature_image = array();
24
+
25
+	/**
26
+	 * @var WP_Post the WP_Post that corresponds with this CPT model object
27
+	 */
28
+	protected $_wp_post;
29
+
30
+
31
+	abstract public function wp_user();
32
+
33
+
34
+	/**
35
+	 * Returns the WP post associated with this CPT model object. If this CPT is saved, fetches it
36
+	 * from the DB. Otherwise, create an unsaved WP_POst object. Caches the post internally.
37
+	 *
38
+	 * @return WP_Post
39
+	 */
40
+	public function wp_post()
41
+	{
42
+		global $wpdb;
43
+		if (! $this->_wp_post instanceof WP_Post) {
44
+			if ($this->ID()) {
45
+				$this->_wp_post = get_post($this->ID());
46
+			} else {
47
+				$simulated_db_result = new stdClass();
48
+				foreach ($this->get_model()->field_settings(true) as $field_name => $field_obj) {
49
+					if ($this->get_model()->get_table_obj_by_alias($field_obj->get_table_alias())->get_table_name()
50
+						=== $wpdb->posts
51
+					) {
52
+						$column = $field_obj->get_table_column();
53
+
54
+						if ($field_obj instanceof EE_Datetime_Field) {
55
+							$value_on_model_obj = $this->get_DateTime_object($field_name);
56
+						} elseif ($field_obj->is_db_only_field()) {
57
+							$value_on_model_obj = $field_obj->get_default_value();
58
+						} else {
59
+							$value_on_model_obj = $this->get_raw($field_name);
60
+						}
61
+						$simulated_db_result->{$column} = $field_obj->prepare_for_use_in_db($value_on_model_obj);
62
+					}
63
+				}
64
+				$this->_wp_post = new WP_Post($simulated_db_result);
65
+			}
66
+			// and let's make retrieving the EE CPT object easy too
67
+			$classname = get_class($this);
68
+			if (! isset($this->_wp_post->{$classname})) {
69
+				$this->_wp_post->{$classname} = $this;
70
+			}
71
+		}
72
+		return $this->_wp_post;
73
+	}
74
+
75
+	/**
76
+	 * When fetching a new value for a post field that uses the global $post for rendering,
77
+	 * set the global $post temporarily to be this model object; and afterwards restore it
78
+	 *
79
+	 * @param string $fieldname
80
+	 * @param bool   $pretty
81
+	 * @param string $extra_cache_ref
82
+	 * @return mixed
83
+	 */
84
+	protected function _get_fresh_property($fieldname, $pretty = false, $extra_cache_ref = null)
85
+	{
86
+		global $post;
87
+
88
+		if ($pretty
89
+			&& (
90
+				! (
91
+					$post instanceof WP_Post
92
+					&& $post->ID
93
+				)
94
+				|| (int) $post->ID !== $this->ID()
95
+			)
96
+			&& $this->get_model()->field_settings_for($fieldname) instanceof EE_Post_Content_Field) {
97
+			$old_post = $post;
98
+			$post = $this->wp_post();
99
+			$return_value = parent::_get_fresh_property($fieldname, $pretty, $extra_cache_ref);
100
+			$post = $old_post;
101
+		} else {
102
+			$return_value = parent::_get_fresh_property($fieldname, $pretty, $extra_cache_ref);
103
+		}
104
+		return $return_value;
105
+	}
106
+
107
+	/**
108
+	 * Adds to the specified event category. If it category doesn't exist, creates it.
109
+	 *
110
+	 * @param string $category_name
111
+	 * @param string $category_description    optional
112
+	 * @param int    $parent_term_taxonomy_id optional
113
+	 * @return EE_Term_Taxonomy
114
+	 */
115
+	public function add_event_category($category_name, $category_description = null, $parent_term_taxonomy_id = null)
116
+	{
117
+		return $this->get_model()->add_event_category(
118
+			$this,
119
+			$category_name,
120
+			$category_description,
121
+			$parent_term_taxonomy_id
122
+		);
123
+	}
124
+
125
+
126
+	/**
127
+	 * Removes the event category by specified name from being related ot this event
128
+	 *
129
+	 * @param string $category_name
130
+	 * @return bool
131
+	 */
132
+	public function remove_event_category($category_name)
133
+	{
134
+		return $this->get_model()->remove_event_category($this, $category_name);
135
+	}
136
+
137
+
138
+	/**
139
+	 * Removes the relation to the specified term taxonomy, and maintains the
140
+	 * data integrity of the term taxonomy provided
141
+	 *
142
+	 * @param EE_Term_Taxonomy $term_taxonomy
143
+	 * @return EE_Base_Class the relation was removed from
144
+	 */
145
+	public function remove_relation_to_term_taxonomy($term_taxonomy)
146
+	{
147
+		if (! $term_taxonomy) {
148
+			EE_Error::add_error(
149
+				sprintf(
150
+					__(
151
+						"No Term_Taxonomy provided which to remove from model object of type %s and id %d",
152
+						"event_espresso"
153
+					),
154
+					get_class($this),
155
+					$this->ID()
156
+				),
157
+				__FILE__,
158
+				__FUNCTION__,
159
+				__LINE__
160
+			);
161
+			return null;
162
+		}
163
+		$term_taxonomy->set_count($term_taxonomy->count() - 1);
164
+		$term_taxonomy->save();
165
+		return $this->_remove_relation_to($term_taxonomy, 'Term_Taxonomy');
166
+	}
167
+
168
+
169
+	/**
170
+	 * The main purpose of this method is to return the post type for the model object
171
+	 *
172
+	 * @access public
173
+	 * @return string
174
+	 */
175
+	public function post_type()
176
+	{
177
+		return $this->get_model()->post_type();
178
+	}
179
+
180
+
181
+	/**
182
+	 * The main purpose of this method is to return the parent for the model object
183
+	 *
184
+	 * @access public
185
+	 * @return int
186
+	 */
187
+	public function parent()
188
+	{
189
+		return $this->get('parent');
190
+	}
191
+
192
+
193
+	/**
194
+	 * return the _status property
195
+	 *
196
+	 * @return string
197
+	 */
198
+	public function status()
199
+	{
200
+		return $this->get('status');
201
+	}
202
+
203
+
204
+	/**
205
+	 * @param string $status
206
+	 */
207
+	public function set_status($status)
208
+	{
209
+		$this->set('status', $status);
210
+	}
211
+
212
+
213
+	/**
214
+	 * This calls the equivalent model method for retrieving the feature image which in turn is a wrapper for
215
+	 * WordPress' get_the_post_thumbnail() function.
216
+	 *
217
+	 * @link   http://codex.wordpress.org/Function_Reference/get_the_post_thumbnail
218
+	 * @access protected
219
+	 * @param string|array $size (optional) Image size. Defaults to 'post-thumbnail' but can also be a 2-item array
220
+	 *                           representing width and height in pixels (i.e. array(32,32) ).
221
+	 * @param string|array $attr Optional. Query string or array of attributes.
222
+	 * @return string HTML image element
223
+	 */
224
+	protected function _get_feature_image($size, $attr)
225
+	{
226
+		// first let's see if we already have the _feature_image property set AND if it has a cached element on it FOR the given size
227
+		$attr_key = is_array($attr) ? implode('_', $attr) : $attr;
228
+		$cache_key = is_array($size) ? implode('_', $size) . $attr_key : $size . $attr_key;
229
+		$this->_feature_image[ $cache_key ] = isset($this->_feature_image[ $cache_key ])
230
+			? $this->_feature_image[ $cache_key ] : $this->get_model()->get_feature_image($this->ID(), $size, $attr);
231
+		return $this->_feature_image[ $cache_key ];
232
+	}
233
+
234
+
235
+	/**
236
+	 * See _get_feature_image. Returns the HTML to display a featured image
237
+	 *
238
+	 * @param string       $size
239
+	 * @param string|array $attr
240
+	 * @return string of html
241
+	 */
242
+	public function feature_image($size = 'thumbnail', $attr = '')
243
+	{
244
+		return $this->_get_feature_image($size, $attr);
245
+	}
246
+
247
+
248
+	/**
249
+	 * This uses the wp "wp_get_attachment_image_src()" function to return the feature image for the current class
250
+	 * using the given size params.
251
+	 *
252
+	 * @param  string|array $size can either be a string: 'thumbnail', 'medium', 'large', 'full' OR 2-item array
253
+	 *                            representing width and height in pixels eg. array(32,32).
254
+	 * @return string|boolean          the url of the image or false if not found
255
+	 */
256
+	public function feature_image_url($size = 'thumbnail')
257
+	{
258
+		$attachment = wp_get_attachment_image_src(get_post_thumbnail_id($this->ID()), $size);
259
+		return ! empty($attachment) ? $attachment[0] : false;
260
+	}
261
+
262
+
263
+	/**
264
+	 * This is a method for restoring this_obj using details from the given $revision_id
265
+	 *
266
+	 * @param int   $revision_id       ID of the revision we're getting data from
267
+	 * @param array $related_obj_names if included this will be used to restore for related obj
268
+	 *                                 if not included then we just do restore on the meta.
269
+	 *                                 We will accept an array of related_obj_names for restoration here.
270
+	 * @param array $where_query       You can optionally include an array of key=>value pairs
271
+	 *                                 that allow you to further constrict the relation to being added.
272
+	 *                                 However, keep in mind that the columns (keys) given
273
+	 *                                 must match a column on the JOIN table and currently
274
+	 *                                 only the HABTM models accept these additional conditions.
275
+	 *                                 Also remember that if an exact match isn't found for these extra cols/val pairs,
276
+	 *                                 then a NEW row is created in the join table.
277
+	 *                                 This array is INDEXED by RELATED OBJ NAME (so it corresponds with the obj_names
278
+	 *                                 sent);
279
+	 * @return void
280
+	 */
281
+	public function restore_revision($revision_id, $related_obj_names = array(), $where_query = array())
282
+	{
283
+		// get revision object
284
+		$revision_obj = $this->get_model()->get_one_by_ID($revision_id);
285
+		if ($revision_obj instanceof EE_CPT_Base) {
286
+			// no related_obj_name so we assume we're saving a revision on this object.
287
+			if (empty($related_obj_names)) {
288
+				$fields = $this->get_model()->get_meta_table_fields();
289
+				foreach ($fields as $field) {
290
+					$this->set($field, $revision_obj->get($field));
291
+				}
292
+				$this->save();
293
+			}
294
+			$related_obj_names = (array) $related_obj_names;
295
+			foreach ($related_obj_names as $related_name) {
296
+				// related_obj_name so we're saving a revision on an object related to this object
297
+				// do we have $where_query params for this related object?  If we do then we include that.
298
+				$cols_n_values = isset($where_query[ $related_name ]) ? $where_query[ $related_name ] : array();
299
+				$where_params = ! empty($cols_n_values) ? array($cols_n_values) : array();
300
+				$related_objs = $this->get_many_related($related_name, $where_params);
301
+				$revision_related_objs = $revision_obj->get_many_related($related_name, $where_params);
302
+				// load helper
303
+				// remove related objs from this object that are not in revision
304
+				// array_diff *should* work cause I think objects are indexed by ID?
305
+				$related_to_remove = EEH_Array::object_array_diff($related_objs, $revision_related_objs);
306
+				foreach ($related_to_remove as $rr) {
307
+					$this->_remove_relation_to($rr, $related_name, $cols_n_values);
308
+				}
309
+				// add all related objs attached to revision to this object
310
+				foreach ($revision_related_objs as $r_obj) {
311
+					$this->_add_relation_to($r_obj, $related_name, $cols_n_values);
312
+				}
313
+			}
314
+		}
315
+	}
316
+
317
+
318
+	/**
319
+	 * Wrapper for get_post_meta, http://codex.wordpress.org/Function_Reference/get_post_meta
320
+	 *
321
+	 * @param string  $meta_key
322
+	 * @param boolean $single
323
+	 * @return mixed <ul><li>If only $id is set it will return all meta values in an associative array.</li>
324
+	 * <li>If $single is set to false, or left blank, the function returns an array containing all values of the
325
+	 * specified key.</li>
326
+	 * <li>If $single is set to true, the function returns the first value of the specified key (not in an
327
+	 * array</li></ul>
328
+	 */
329
+	public function get_post_meta($meta_key = null, $single = false)
330
+	{
331
+		return get_post_meta($this->ID(), $meta_key, $single);
332
+	}
333
+
334
+
335
+	/**
336
+	 * Wrapper for update_post_meta, http://codex.wordpress.org/Function_Reference/update_post_meta
337
+	 *
338
+	 * @param string $meta_key
339
+	 * @param mixed  $meta_value
340
+	 * @param mixed  $prev_value
341
+	 * @return mixed Returns meta_id if the meta doesn't exist, otherwise returns true on success and false on failure.
342
+	 *               NOTE: If the meta_value passed to this function is the same as the value that is already in the
343
+	 *               database, this function returns false.
344
+	 */
345
+	public function update_post_meta($meta_key, $meta_value, $prev_value = null)
346
+	{
347
+		if (! $this->ID()) {
348
+			$this->save();
349
+		}
350
+		return update_post_meta($this->ID(), $meta_key, $meta_value, $prev_value);
351
+	}
352
+
353
+
354
+	/**
355
+	 * Wrapper for add_post_meta, http://codex.wordpress.org/Function_Reference/add_post_meta
356
+	 *
357
+	 * @param mixed $meta_key
358
+	 * @param mixed $meta_value
359
+	 * @param bool  $unique . If postmeta for this $meta_key already exists, whether to add an additional item or not
360
+	 * @return boolean Boolean true, except if the $unique argument was set to true and a custom field with the given
361
+	 *                 key already exists, in which case false is returned.
362
+	 */
363
+	public function add_post_meta($meta_key, $meta_value, $unique = false)
364
+	{
365
+		if ($this->ID()) {
366
+			$this->save();
367
+		}
368
+		return add_post_meta($this->ID(), $meta_key, $meta_value, $unique);
369
+	}
370
+
371
+
372
+	/**
373
+	 * Wrapper for delete_post_meta, http://codex.wordpress.org/Function_Reference/delete_post_meta
374
+	 *
375
+	 * @param mixed $meta_key
376
+	 * @param mixed $meta_value
377
+	 * @return boolean False for failure. True for success.
378
+	 */
379
+	public function delete_post_meta($meta_key, $meta_value = '')
380
+	{
381
+		if (! $this->ID()) {
382
+			// there are obviously no postmetas for this if it's not saved
383
+			// so let's just report this as a success
384
+			return true;
385
+		}
386
+		return delete_post_meta($this->ID(), $meta_key, $meta_value);
387
+	}
388
+
389
+
390
+	/**
391
+	 * Gets the URL for viewing this event on the front-end
392
+	 *
393
+	 * @return string
394
+	 */
395
+	public function get_permalink()
396
+	{
397
+		return get_permalink($this->ID());
398
+	}
399
+
400
+
401
+	/**
402
+	 * Gets all the term-taxonomies for this CPT
403
+	 *
404
+	 * @param array $query_params
405
+	 * @return EE_Term_Taxonomy
406
+	 */
407
+	public function term_taxonomies($query_params = array())
408
+	{
409
+		return $this->get_many_related('Term_Taxonomy', $query_params);
410
+	}
411
+
412
+
413
+	/**
414
+	 * @return mixed
415
+	 */
416
+	public function get_custom_post_statuses()
417
+	{
418
+		return $this->get_model()->get_custom_post_statuses();
419
+	}
420
+
421
+
422
+	/**
423
+	 * @return mixed
424
+	 */
425
+	public function get_all_post_statuses()
426
+	{
427
+		return $this->get_model()->get_status_array();
428
+	}
429
+
430
+
431
+	/**
432
+	 * Don't serialize the WP Post. That's just duplicate data and we want to avoid recursion
433
+	 *
434
+	 * @return array
435
+	 */
436
+	public function __sleep()
437
+	{
438
+		$properties_to_serialize = parent::__sleep();
439
+		$properties_to_serialize = array_diff($properties_to_serialize, array('_wp_post'));
440
+		return $properties_to_serialize;
441
+	}
442 442
 }
Please login to merge, or discard this patch.
Spacing   +10 added lines, -10 removed lines patch added patch discarded remove patch
@@ -40,7 +40,7 @@  discard block
 block discarded – undo
40 40
     public function wp_post()
41 41
     {
42 42
         global $wpdb;
43
-        if (! $this->_wp_post instanceof WP_Post) {
43
+        if ( ! $this->_wp_post instanceof WP_Post) {
44 44
             if ($this->ID()) {
45 45
                 $this->_wp_post = get_post($this->ID());
46 46
             } else {
@@ -65,7 +65,7 @@  discard block
 block discarded – undo
65 65
             }
66 66
             // and let's make retrieving the EE CPT object easy too
67 67
             $classname = get_class($this);
68
-            if (! isset($this->_wp_post->{$classname})) {
68
+            if ( ! isset($this->_wp_post->{$classname})) {
69 69
                 $this->_wp_post->{$classname} = $this;
70 70
             }
71 71
         }
@@ -144,7 +144,7 @@  discard block
 block discarded – undo
144 144
      */
145 145
     public function remove_relation_to_term_taxonomy($term_taxonomy)
146 146
     {
147
-        if (! $term_taxonomy) {
147
+        if ( ! $term_taxonomy) {
148 148
             EE_Error::add_error(
149 149
                 sprintf(
150 150
                     __(
@@ -225,10 +225,10 @@  discard block
 block discarded – undo
225 225
     {
226 226
         // first let's see if we already have the _feature_image property set AND if it has a cached element on it FOR the given size
227 227
         $attr_key = is_array($attr) ? implode('_', $attr) : $attr;
228
-        $cache_key = is_array($size) ? implode('_', $size) . $attr_key : $size . $attr_key;
229
-        $this->_feature_image[ $cache_key ] = isset($this->_feature_image[ $cache_key ])
230
-            ? $this->_feature_image[ $cache_key ] : $this->get_model()->get_feature_image($this->ID(), $size, $attr);
231
-        return $this->_feature_image[ $cache_key ];
228
+        $cache_key = is_array($size) ? implode('_', $size).$attr_key : $size.$attr_key;
229
+        $this->_feature_image[$cache_key] = isset($this->_feature_image[$cache_key])
230
+            ? $this->_feature_image[$cache_key] : $this->get_model()->get_feature_image($this->ID(), $size, $attr);
231
+        return $this->_feature_image[$cache_key];
232 232
     }
233 233
 
234 234
 
@@ -295,7 +295,7 @@  discard block
 block discarded – undo
295 295
             foreach ($related_obj_names as $related_name) {
296 296
                 // related_obj_name so we're saving a revision on an object related to this object
297 297
                 // do we have $where_query params for this related object?  If we do then we include that.
298
-                $cols_n_values = isset($where_query[ $related_name ]) ? $where_query[ $related_name ] : array();
298
+                $cols_n_values = isset($where_query[$related_name]) ? $where_query[$related_name] : array();
299 299
                 $where_params = ! empty($cols_n_values) ? array($cols_n_values) : array();
300 300
                 $related_objs = $this->get_many_related($related_name, $where_params);
301 301
                 $revision_related_objs = $revision_obj->get_many_related($related_name, $where_params);
@@ -344,7 +344,7 @@  discard block
 block discarded – undo
344 344
      */
345 345
     public function update_post_meta($meta_key, $meta_value, $prev_value = null)
346 346
     {
347
-        if (! $this->ID()) {
347
+        if ( ! $this->ID()) {
348 348
             $this->save();
349 349
         }
350 350
         return update_post_meta($this->ID(), $meta_key, $meta_value, $prev_value);
@@ -378,7 +378,7 @@  discard block
 block discarded – undo
378 378
      */
379 379
     public function delete_post_meta($meta_key, $meta_value = '')
380 380
     {
381
-        if (! $this->ID()) {
381
+        if ( ! $this->ID()) {
382 382
             // there are obviously no postmetas for this if it's not saved
383 383
             // so let's just report this as a success
384 384
             return true;
Please login to merge, or discard this patch.
core/db_classes/EE_CSV.class.php 3 patches
Doc Comments   +6 added lines, -9 removed lines patch added patch discarded remove patch
@@ -326,7 +326,7 @@  discard block
 block discarded – undo
326 326
      * and starts writing the file to PHP's output. Returns the file handle so other functions can
327 327
      * also write to it
328 328
      *
329
-     * @param string $new_filename the name of the file that the user will download
329
+     * @param string|false $filename the name of the file that the user will download
330 330
      * @return resource, like the results of fopen(), which can be used for fwrite, fputcsv2, etc.
331 331
      */
332 332
     public function begin_sending_csv($filename)
@@ -391,10 +391,7 @@  discard block
 block discarded – undo
391 391
      *
392 392
      * @param array   $data                 2D array, first numerically-indexed, and next-level-down preferably indexed
393 393
      *                                      by string
394
-     * @param boolean $add_csv_column_names whether or not we should add the keys in the bottom-most array as a row for
395
-     *                                      headers in the CSV. Eg, if $data looked like
396
-     *                                      array(0=>array('EVT_ID'=>1,'EVT_name'=>'monkey'...), 1=>array(...),...))
397
-     *                                      then the first row we'd write to the CSV would be "EVT_ID,EVT_name,..."
394
+     * @param resource $filehandle
398 395
      * @return boolean if we successfully wrote to the CSV or not. If there's no $data, we consider that a success
399 396
      *                 (because we wrote everything there was...nothing)
400 397
      */
@@ -491,7 +488,7 @@  discard block
 block discarded – undo
491 488
      *                                   next layer is numerically indexed to represent each model object (eg, each
492 489
      *                                   individual event), and the last layer has all the attributes o fthat model
493 490
      *                                   object (eg, the event's id, name, etc)
494
-     * @return boolean success
491
+     * @return boolean|null success
495 492
      */
496 493
     public function write_model_data_to_csv($filehandle, $model_data_array)
497 494
     {
@@ -522,8 +519,8 @@  discard block
 block discarded – undo
522 519
      * and dies (in order to avoid other plugins from messing up the csv output)
523 520
      *
524 521
      * @param string $filename         the filename you want to give the file
525
-     * @param array  $model_data_array 3d array, as described in EE_CSV::write_model_data_to_csv()
526
-     * @return bool | void writes CSV file to output and dies
522
+     * @param boolean  $model_data_array 3d array, as described in EE_CSV::write_model_data_to_csv()
523
+     * @return boolean|null | void writes CSV file to output and dies
527 524
      */
528 525
     public function export_multiple_model_data_to_csv($filename, $model_data_array)
529 526
     {
@@ -537,7 +534,7 @@  discard block
 block discarded – undo
537 534
      * @access public
538 535
      * @param array  $data     - the array of data to be converted to csv and exported
539 536
      * @param string $filename - name for newly created csv file
540
-     * @return TRUE on success, FALSE on fail
537
+     * @return false|null on success, FALSE on fail
541 538
      */
542 539
     public function export_array_to_csv($data = false, $filename = false)
543 540
     {
Please login to merge, or discard this patch.
Indentation   +669 added lines, -669 removed lines patch added patch discarded remove patch
@@ -16,673 +16,673 @@
 block discarded – undo
16 16
 class EE_CSV
17 17
 {
18 18
 
19
-    // instance of the EE_CSV object
20
-    private static $_instance = null;
21
-
22
-
23
-    // multidimensional array to store update & error messages
24
-    // var $_notices = array( 'updates' => array(), 'errors' => array() );
25
-
26
-
27
-    private $_primary_keys;
28
-
29
-    /**
30
-     *
31
-     * @var EE_Registry
32
-     */
33
-    private $EE;
34
-    /**
35
-     * string used for 1st cell in exports, which indicates that the following 2 rows will be metadata keys and values
36
-     */
37
-    const metadata_header = 'Event Espresso Export Meta Data';
38
-
39
-    /**
40
-     *        private constructor to prevent direct creation
41
-     *
42
-     * @Constructor
43
-     * @access private
44
-     * @return void
45
-     */
46
-    private function __construct()
47
-    {
48
-        global $wpdb;
49
-
50
-        $this->_primary_keys = array(
51
-            $wpdb->prefix . 'esp_answer'                  => array('ANS_ID'),
52
-            $wpdb->prefix . 'esp_attendee'                => array('ATT_ID'),
53
-            $wpdb->prefix . 'esp_datetime'                => array('DTT_ID'),
54
-            $wpdb->prefix . 'esp_event_question_group'    => array('EQG_ID'),
55
-            $wpdb->prefix . 'esp_message_template'        => array('MTP_ID'),
56
-            $wpdb->prefix . 'esp_payment'                 => array('PAY_ID'),
57
-            $wpdb->prefix . 'esp_price'                   => array('PRC_ID'),
58
-            $wpdb->prefix . 'esp_price_type'              => array('PRT_ID'),
59
-            $wpdb->prefix . 'esp_question'                => array('QST_ID'),
60
-            $wpdb->prefix . 'esp_question_group'          => array('QSG_ID'),
61
-            $wpdb->prefix . 'esp_question_group_question' => array('QGQ_ID'),
62
-            $wpdb->prefix . 'esp_question_option'         => array('QSO_ID'),
63
-            $wpdb->prefix . 'esp_registration'            => array('REG_ID'),
64
-            $wpdb->prefix . 'esp_status'                  => array('STS_ID'),
65
-            $wpdb->prefix . 'esp_transaction'             => array('TXN_ID'),
66
-            $wpdb->prefix . 'esp_transaction'             => array('TXN_ID'),
67
-            $wpdb->prefix . 'events_detail'               => array('id'),
68
-            $wpdb->prefix . 'events_category_detail'      => array('id'),
69
-            $wpdb->prefix . 'events_category_rel'         => array('id'),
70
-            $wpdb->prefix . 'events_venue'                => array('id'),
71
-            $wpdb->prefix . 'events_venue_rel'            => array('emeta_id'),
72
-            $wpdb->prefix . 'events_locale'               => array('id'),
73
-            $wpdb->prefix . 'events_locale_rel'           => array('id'),
74
-            $wpdb->prefix . 'events_personnel'            => array('id'),
75
-            $wpdb->prefix . 'events_personnel_rel'        => array('id'),
76
-        );
77
-    }
78
-
79
-
80
-    /**
81
-     *        @ singleton method used to instantiate class object
82
-     *        @ access public
83
-     *
84
-     * @return EE_CSV
85
-     */
86
-    public static function instance()
87
-    {
88
-        // check if class object is instantiated
89
-        if (self::$_instance === null or ! is_object(self::$_instance) or ! (self::$_instance instanceof EE_CSV)) {
90
-            self::$_instance = new self();
91
-        }
92
-        return self::$_instance;
93
-    }
94
-
95
-    /**
96
-     * Opens a unicode or utf file (normal file_get_contents has difficulty readin ga unicode file. @see
97
-     * http://stackoverflow.com/questions/15092764/how-to-read-unicode-text-file-in-php
98
-     *
99
-     * @param string $file_path
100
-     * @return string
101
-     * @throws EE_Error
102
-     */
103
-    private function read_unicode_file($file_path)
104
-    {
105
-        $fc = "";
106
-        $fh = fopen($file_path, "rb");
107
-        if (! $fh) {
108
-            throw new EE_Error(sprintf(__("Cannot open file for read: %s<br>\n", 'event_espresso'), $file_path));
109
-        }
110
-        $flen = filesize($file_path);
111
-        $bc = fread($fh, $flen);
112
-        for ($i = 0; $i < $flen; $i++) {
113
-            $c = substr($bc, $i, 1);
114
-            if ((ord($c) != 0) && (ord($c) != 13)) {
115
-                $fc = $fc . $c;
116
-            }
117
-        }
118
-        if ((ord(substr($fc, 0, 1)) == 255) && (ord(substr($fc, 1, 1)) == 254)) {
119
-            $fc = substr($fc, 2);
120
-        }
121
-        return ($fc);
122
-    }
123
-
124
-
125
-    /**
126
-     * Generic CSV-functionality to turn an entire CSV file into a single array that's
127
-     * NOT in a specific format to EE. It's just a 2-level array, with top-level arrays
128
-     * representing each row in the CSV file, and the second-level arrays being each column in that row
129
-     *
130
-     * @param string $path_to_file
131
-     * @return array of arrays. Top-level array has rows, second-level array has each item
132
-     */
133
-    public function import_csv_to_multi_dimensional_array($path_to_file)
134
-    {
135
-        // needed to deal with Mac line endings
136
-        ini_set('auto_detect_line_endings', true);
137
-
138
-        // because fgetcsv does not correctly deal with backslashed quotes such as \"
139
-        // we'll read the file into a string
140
-        $file_contents = $this->read_unicode_file($path_to_file);
141
-        // replace backslashed quotes with CSV enclosures
142
-        $file_contents = str_replace('\\"', '"""', $file_contents);
143
-        // HEY YOU! PUT THAT FILE BACK!!!
144
-        file_put_contents($path_to_file, $file_contents);
145
-
146
-        if (($file_handle = fopen($path_to_file, "r")) !== false) {
147
-            # Set the parent multidimensional array key to 0.
148
-            $nn = 0;
149
-            $csvarray = array();
150
-
151
-            // in PHP 5.3 fgetcsv accepts a 5th parameter, but the pre 5.3 versions of fgetcsv choke if passed more than 4 - is that crazy or what?
152
-            if (version_compare(PHP_VERSION, '5.3.0') < 0) {
153
-                //  PHP 5.2- version
154
-                // loop through each row of the file
155
-                while (($data = fgetcsv($file_handle, 0, ',', '"')) !== false) {
156
-                    $csvarray[] = $data;
157
-                }
158
-            } else {
159
-                // loop through each row of the file
160
-                while (($data = fgetcsv($file_handle, 0, ',', '"', '\\')) !== false) {
161
-                    $csvarray[] = $data;
162
-                }
163
-            }
164
-            # Close the File.
165
-            fclose($file_handle);
166
-            return $csvarray;
167
-        } else {
168
-            EE_Error::add_error(
169
-                sprintf(__("An error occurred - the file: %s could not opened.", "event_espresso"), $path_to_file),
170
-                __FILE__,
171
-                __FUNCTION__,
172
-                __LINE__
173
-            );
174
-            return false;
175
-        }
176
-    }
177
-
178
-
179
-    /**
180
-     * @Import contents of csv file and store values in an array to be manipulated by other functions
181
-     * @access public
182
-     * @param string  $path_to_file         - the csv file to be imported including the path to it's location.
183
-     *                                      If $model_name is provided, assumes that each row in the CSV represents a
184
-     *                                      model object for that model If $model_name ISN'T provided, assumes that
185
-     *                                      before model object data, there is a row where the first entry is simply
186
-     *                                      'MODEL', and next entry is the model's name, (untranslated) like Event, and
187
-     *                                      then maybe a row of headers, and then the model data. Eg.
188
-     *                                      '<br>MODEL,Event,<br>EVT_ID,EVT_name,...<br>1,Monkey
189
-     *                                      Party,...<br>2,Llamarama,...<br>MODEL,Venue,<br>VNU_ID,VNU_name<br>1,The
190
-     *                                      Forest
191
-     * @param string  $model_name           model name if we know what model we're importing
192
-     * @param boolean $first_row_is_headers - whether the first row of data is headers or not - TRUE = headers, FALSE =
193
-     *                                      data
194
-     * @return mixed - array on success - multi dimensional with headers as keys (if headers exist) OR string on fail -
195
-     *               error message like the following array('Event'=>array( array('EVT_ID'=>1,'EVT_name'=>'bob
196
-     *               party',...), array('EVT_ID'=>2,'EVT_name'=>'llamarama',...),
197
-     *                                      ...
198
-     *                                      )
199
-     *                                      'Venue'=>array(
200
-     *                                      array('VNU_ID'=>1,'VNU_name'=>'the shack',...),
201
-     *                                      array('VNU_ID'=>2,'VNU_name'=>'tree house',...),
202
-     *                                      ...
203
-     *                                      )
204
-     *                                      ...
205
-     *                                      )
206
-     */
207
-    public function import_csv_to_model_data_array($path_to_file, $model_name = false, $first_row_is_headers = true)
208
-    {
209
-        $multi_dimensional_array = $this->import_csv_to_multi_dimensional_array($path_to_file);
210
-        if (! $multi_dimensional_array) {
211
-            return false;
212
-        }
213
-        // gotta start somewhere
214
-        $row = 1;
215
-        // array to store csv data in
216
-        $ee_formatted_data = array();
217
-        // array to store headers (column names)
218
-        $headers = array();
219
-        foreach ($multi_dimensional_array as $data) {
220
-            // if first cell is MODEL, then second cell is the MODEL name
221
-            if ($data[0] == 'MODEL') {
222
-                $model_name = $data[1];
223
-                // don't bother looking for model data in this row. The rest of this
224
-                // row should be blank
225
-                // AND pretend this is the first row again
226
-                $row = 1;
227
-                // reset headers
228
-                $headers = array();
229
-                continue;
230
-            }
231
-            if (strpos($data[0], EE_CSV::metadata_header) !== false) {
232
-                $model_name = EE_CSV::metadata_header;
233
-                // store like model data, we just won't try importing it etc.
234
-                $row = 1;
235
-                continue;
236
-            }
237
-
238
-
239
-            // how many columns are there?
240
-            $columns = count($data);
241
-
242
-            $model_entry = array();
243
-            // loop through each column
244
-            for ($i = 0; $i < $columns; $i++) {
245
-                // replace csv_enclosures with backslashed quotes
246
-                $data[ $i ] = str_replace('"""', '\\"', $data[ $i ]);
247
-                // do we need to grab the column names?
248
-                if ($row === 1) {
249
-                    if ($first_row_is_headers) {
250
-                        // store the column names to use for keys
251
-                        $column_name = $data[ $i ];
252
-                        // check it's not blank... sometimes CSV editign programs adda bunch of empty columns onto the end...
253
-                        if (! $column_name) {
254
-                            continue;
255
-                        }
256
-                        $matches = array();
257
-                        if ($model_name == EE_CSV::metadata_header) {
258
-                            $headers[ $i ] = $column_name;
259
-                        } else {
260
-                            // now get the db table name from it (the part between square brackets)
261
-                            $success = preg_match('~(.*)\[(.*)\]~', $column_name, $matches);
262
-                            if (! $success) {
263
-                                EE_Error::add_error(
264
-                                    sprintf(
265
-                                        __(
266
-                                            "The column titled %s is invalid for importing. It must be be in the format of 'Nice Name[model_field_name]' in row %s",
267
-                                            "event_espresso"
268
-                                        ),
269
-                                        $column_name,
270
-                                        implode(",", $data)
271
-                                    ),
272
-                                    __FILE__,
273
-                                    __FUNCTION__,
274
-                                    __LINE__
275
-                                );
276
-                                return false;
277
-                            }
278
-                            $headers[ $i ] = $matches[2];
279
-                        }
280
-                    } else {
281
-                        // no column names means our final array will just use counters for keys
282
-                        $model_entry[ $headers[ $i ] ] = $data[ $i ];
283
-                        $headers[ $i ] = $i;
284
-                    }
285
-                    // and we need to store csv data
286
-                } else {
287
-                    // this column isn' ta header, store it if there is a header for it
288
-                    if (isset($headers[ $i ])) {
289
-                        $model_entry[ $headers[ $i ] ] = $data[ $i ];
290
-                    }
291
-                }
292
-            }
293
-            // save the row's data IF it's a non-header-row
294
-            if (! $first_row_is_headers || ($first_row_is_headers && $row > 1)) {
295
-                $ee_formatted_data[ $model_name ][] = $model_entry;
296
-            }
297
-            // advance to next row
298
-            $row++;
299
-        }
300
-
301
-        // delete the uploaded file
302
-        unlink($path_to_file);
303
-        // echo '<pre style="height:auto;border:2px solid lightblue;">' . print_r( $ee_formatted_data, TRUE ) . '</pre><br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span>';
304
-        // die();
305
-
306
-        // it's good to give back
307
-        return $ee_formatted_data;
308
-    }
309
-
310
-
311
-    public function save_csv_to_db($csv_data_array, $model_name = false)
312
-    {
313
-        EE_Error::doing_it_wrong(
314
-            'save_csv_to_db',
315
-            __(
316
-                'Function moved to EE_Import and renamed to save_csv_data_array_to_db',
317
-                'event_espresso'
318
-            ),
319
-            '4.6.7'
320
-        );
321
-        return EE_Import::instance()->save_csv_data_array_to_db($csv_data_array, $model_name);
322
-    }
323
-
324
-    /**
325
-     * Sends HTTP headers to indicate that the browser should download a file,
326
-     * and starts writing the file to PHP's output. Returns the file handle so other functions can
327
-     * also write to it
328
-     *
329
-     * @param string $new_filename the name of the file that the user will download
330
-     * @return resource, like the results of fopen(), which can be used for fwrite, fputcsv2, etc.
331
-     */
332
-    public function begin_sending_csv($filename)
333
-    {
334
-        // grab file extension
335
-        $ext = substr(strrchr($filename, '.'), 1);
336
-        if ($ext == '.csv' or $ext == '.xls') {
337
-            str_replace($ext, '', $filename);
338
-        }
339
-        $filename .= '.csv';
340
-
341
-        // if somebody's been naughty and already started outputting stuff, trash it
342
-        // and start writing our stuff.
343
-        if (ob_get_length()) {
344
-            @ob_flush();
345
-            @flush();
346
-            @ob_end_flush();
347
-        }
348
-        @ob_start();
349
-        header("Pragma: public");
350
-        header("Expires: 0");
351
-        header("Pragma: no-cache");
352
-        header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0");
353
-        // header("Content-Type: application/force-download");
354
-        // header("Content-Type: application/octet-stream");
355
-        // header("Content-Type: application/download");
356
-        header('Content-disposition: attachment; filename=' . $filename);
357
-        header("Content-Type: text/csv; charset=utf-8");
358
-        do_action('AHEE__EE_CSV__begin_sending_csv__headers');
359
-        echo apply_filters(
360
-            'FHEE__EE_CSV__begin_sending_csv__start_writing',
361
-            "\xEF\xBB\xBF"
362
-        ); // makes excel open it as UTF-8. UTF-8 BOM, see http://stackoverflow.com/a/4440143/2773835
363
-        $fh = fopen('php://output', 'w');
364
-        return $fh;
365
-    }
366
-
367
-    /**
368
-     * Writes some meta data to the CSV as a bunch of columns. Initially we're only
369
-     * mentioning the version and timezone
370
-     *
371
-     * @param resource $filehandle
372
-     */
373
-    public function write_metadata_to_csv($filehandle)
374
-    {
375
-        $data_row = array(EE_CSV::metadata_header);// do NOT translate because this exact string is used when importing
376
-        $this->fputcsv2($filehandle, $data_row);
377
-        $meta_data = array(
378
-            0 => array(
379
-                'version'        => espresso_version(),
380
-                'timezone'       => EEH_DTT_Helper::get_timezone(),
381
-                'time_of_export' => current_time('mysql'),
382
-                'site_url'       => site_url(),
383
-            ),
384
-        );
385
-        $this->write_data_array_to_csv($filehandle, $meta_data);
386
-    }
387
-
388
-
389
-    /**
390
-     * Writes $data to the csv file open in $filehandle. uses the array indices of $data for column headers
391
-     *
392
-     * @param array   $data                 2D array, first numerically-indexed, and next-level-down preferably indexed
393
-     *                                      by string
394
-     * @param boolean $add_csv_column_names whether or not we should add the keys in the bottom-most array as a row for
395
-     *                                      headers in the CSV. Eg, if $data looked like
396
-     *                                      array(0=>array('EVT_ID'=>1,'EVT_name'=>'monkey'...), 1=>array(...),...))
397
-     *                                      then the first row we'd write to the CSV would be "EVT_ID,EVT_name,..."
398
-     * @return boolean if we successfully wrote to the CSV or not. If there's no $data, we consider that a success
399
-     *                 (because we wrote everything there was...nothing)
400
-     */
401
-    public function write_data_array_to_csv($filehandle, $data)
402
-    {
403
-
404
-
405
-        // determine if $data is actually a 2d array
406
-        if ($data && is_array($data) && is_array(EEH_Array::get_one_item_from_array($data))) {
407
-            // make sure top level is numerically indexed,
408
-
409
-            if (EEH_Array::is_associative_array($data)) {
410
-                throw new EE_Error(
411
-                    sprintf(
412
-                        __(
413
-                            "top-level array must be numerically indexed. Does these look like numbers to you? %s",
414
-                            "event_espresso"
415
-                        ),
416
-                        implode(",", array_keys($data))
417
-                    )
418
-                );
419
-            }
420
-            $item_in_top_level_array = EEH_Array::get_one_item_from_array($data);
421
-            // now, is the last item in the top-level array of $data an associative or numeric array?
422
-            if (EEH_Array::is_associative_array($item_in_top_level_array)) {
423
-                // its associative, so we want to output its keys as column headers
424
-                $keys = array_keys($item_in_top_level_array);
425
-                echo $this->fputcsv2($filehandle, $keys);
426
-            }
427
-            // start writing data
428
-            foreach ($data as $data_row) {
429
-                echo $this->fputcsv2($filehandle, $data_row);
430
-            }
431
-            return true;
432
-        } else {
433
-            // no data TO write... so we can assume that's a success
434
-            return true;
435
-        }
436
-        // //if 2nd level is indexed by strings, use those as csv column headers (ie, the first row)
437
-        //
438
-        //
439
-        // $no_table = TRUE;
440
-        //
441
-        // // loop through data and add each row to the file/stream as csv
442
-        // foreach ( $data as $model_name => $model_data ) {
443
-        // // test first row to see if it is data or a model name
444
-        // $model = EE_Registry::instance();->load_model($model_name);
445
-        // //if the model really exists,
446
-        // if ( $model ) {
447
-        //
448
-        // // we have a table name
449
-        // $no_table = FALSE;
450
-        //
451
-        // // put the tablename into an array cuz that's how fputcsv rolls
452
-        // $model_name_row = array( 'MODEL', $model_name );
453
-        //
454
-        // // add table name to csv output
455
-        // echo self::fputcsv2($filehandle, $model_name_row);
456
-        //
457
-        // // now get the rest of the data
458
-        // foreach ( $model_data as $row ) {
459
-        // // output the row
460
-        // echo self::fputcsv2($filehandle, $row);
461
-        // }
462
-        //
463
-        // }
464
-        //
465
-        // if ( $no_table ) {
466
-        // // no table so just put the data
467
-        // echo self::fputcsv2($filehandle, $model_data);
468
-        // }
469
-        //
470
-        // } // END OF foreach ( $data )
471
-    }
472
-
473
-    /**
474
-     * Should be called after begin_sending_csv(), and one or more write_data_array_to_csv()s.
475
-     * Calls exit to prevent polluting the CSV file with other junk
476
-     *
477
-     * @param resource $fh filehandle where we're writing the CSV to
478
-     */
479
-    public function end_sending_csv($fh)
480
-    {
481
-        fclose($fh);
482
-        exit(0);
483
-    }
484
-
485
-    /**
486
-     * Given an open file, writes all the model data to it in the format the importer expects.
487
-     * Usually preceded by begin_sending_csv($filename), and followed by end_sending_csv($filehandle).
488
-     *
489
-     * @param resource $filehandle
490
-     * @param array    $model_data_array is assumed to be a 3d array: 1st layer has keys of model names (eg 'Event'),
491
-     *                                   next layer is numerically indexed to represent each model object (eg, each
492
-     *                                   individual event), and the last layer has all the attributes o fthat model
493
-     *                                   object (eg, the event's id, name, etc)
494
-     * @return boolean success
495
-     */
496
-    public function write_model_data_to_csv($filehandle, $model_data_array)
497
-    {
498
-        $this->write_metadata_to_csv($filehandle);
499
-        foreach ($model_data_array as $model_name => $model_instance_arrays) {
500
-            // first: output a special row stating the model
501
-            echo $this->fputcsv2($filehandle, array('MODEL', $model_name));
502
-            // if we have items to put in the CSV, do it normally
503
-
504
-            if (! empty($model_instance_arrays)) {
505
-                $this->write_data_array_to_csv($filehandle, $model_instance_arrays);
506
-            } else {
507
-                // echo "no data to write... so just write the headers";
508
-                // so there's actually NO model objects for that model.
509
-                // probably still want to show the columns
510
-                $model = EE_Registry::instance()->load_model($model_name);
511
-                $column_names = array();
512
-                foreach ($model->field_settings() as $field) {
513
-                    $column_names[ $field->get_nicename() . "[" . $field->get_name() . "]" ] = null;
514
-                }
515
-                $this->write_data_array_to_csv($filehandle, array($column_names));
516
-            }
517
-        }
518
-    }
519
-
520
-    /**
521
-     * Writes the CSV file to the output buffer, with rows corresponding to $model_data_array,
522
-     * and dies (in order to avoid other plugins from messing up the csv output)
523
-     *
524
-     * @param string $filename         the filename you want to give the file
525
-     * @param array  $model_data_array 3d array, as described in EE_CSV::write_model_data_to_csv()
526
-     * @return bool | void writes CSV file to output and dies
527
-     */
528
-    public function export_multiple_model_data_to_csv($filename, $model_data_array)
529
-    {
530
-        $filehandle = $this->begin_sending_csv($filename);
531
-        $this->write_model_data_to_csv($filehandle, $model_data_array);
532
-        $this->end_sending_csv($filehandle);
533
-    }
534
-
535
-    /**
536
-     * @Export contents of an array to csv file
537
-     * @access public
538
-     * @param array  $data     - the array of data to be converted to csv and exported
539
-     * @param string $filename - name for newly created csv file
540
-     * @return TRUE on success, FALSE on fail
541
-     */
542
-    public function export_array_to_csv($data = false, $filename = false)
543
-    {
544
-
545
-        // no data file?? get outta here
546
-        if (! $data or ! is_array($data) or empty($data)) {
547
-            return false;
548
-        }
549
-
550
-        // no filename?? get outta here
551
-        if (! $filename) {
552
-            return false;
553
-        }
554
-
555
-
556
-        // somebody told me i might need this ???
557
-        global $wpdb;
558
-        $prefix = $wpdb->prefix;
559
-
560
-
561
-        $fh = $this->begin_sending_csv($filename);
562
-
563
-
564
-        $this->end_sending_csv($fh);
565
-    }
566
-
567
-
568
-    /**
569
-     * @Determine the maximum upload file size based on php.ini settings
570
-     * @access    public
571
-     * @param int $percent_of_max - desired percentage of the max upload_mb
572
-     * @return int KB
573
-     */
574
-    public function get_max_upload_size($percent_of_max = false)
575
-    {
576
-
577
-        $max_upload = (int) (ini_get('upload_max_filesize'));
578
-        $max_post = (int) (ini_get('post_max_size'));
579
-        $memory_limit = (int) (ini_get('memory_limit'));
580
-
581
-        // determine the smallest of the three values from above
582
-        $upload_mb = min($max_upload, $max_post, $memory_limit);
583
-
584
-        // convert MB to KB
585
-        $upload_mb = $upload_mb * 1024;
586
-
587
-        // don't want the full monty? then reduce the max uplaod size
588
-        if ($percent_of_max) {
589
-            // is percent_of_max like this -> 50 or like this -> 0.50 ?
590
-            if ($percent_of_max > 1) {
591
-                // chnages 50 to 0.50
592
-                $percent_of_max = $percent_of_max / 100;
593
-            }
594
-            // make upload_mb a percentage of the max upload_mb
595
-            $upload_mb = $upload_mb * $percent_of_max;
596
-        }
597
-
598
-        return $upload_mb;
599
-    }
600
-
601
-
602
-    /**
603
-     * @Drop   in replacement for PHP's fputcsv function - but this one works!!!
604
-     * @access private
605
-     * @param resource $fh         - file handle - what we are writing to
606
-     * @param array    $row        - individual row of csv data
607
-     * @param string   $delimiter  - csv delimiter
608
-     * @param string   $enclosure  - csv enclosure
609
-     * @param string   $mysql_null - allows php NULL to be overridden with MySQl's insertable NULL value
610
-     * @return void
611
-     */
612
-    private function fputcsv2($fh, array $row, $delimiter = ',', $enclosure = '"', $mysql_null = false)
613
-    {
614
-        // Allow user to filter the csv delimiter and enclosure for other countries csv standards
615
-        $delimiter = apply_filters('FHEE__EE_CSV__fputcsv2__delimiter', $delimiter);
616
-        $enclosure = apply_filters('FHEE__EE_CSV__fputcsv2__enclosure', $enclosure);
617
-
618
-        $delimiter_esc = preg_quote($delimiter, '/');
619
-        $enclosure_esc = preg_quote($enclosure, '/');
620
-
621
-        $output = array();
622
-        foreach ($row as $field_value) {
623
-            if (is_object($field_value) || is_array($field_value)) {
624
-                $field_value = serialize($field_value);
625
-            }
626
-            if ($field_value === null && $mysql_null) {
627
-                $output[] = 'NULL';
628
-                continue;
629
-            }
630
-
631
-            $output[] = preg_match("/(?:${delimiter_esc}|${enclosure_esc}|\s)/", $field_value) ?
632
-                ($enclosure . str_replace($enclosure, $enclosure . $enclosure, $field_value) . $enclosure)
633
-                : $field_value;
634
-        }
635
-
636
-        fwrite($fh, join($delimiter, $output) . PHP_EOL);
637
-    }
638
-
639
-
640
-    // /**
641
-    //  * @CSV    Import / Export messages
642
-    //  * @access public
643
-    //  * @return void
644
-    //  */
645
-    // public function csv_admin_notices()
646
-    // {
647
-    //
648
-    //     // We play both kinds of music here! Country AND Western! - err... I mean, cycle through both types of notices
649
-    //     foreach (array('updates', 'errors') as $type) {
650
-    //
651
-    //         // if particular notice type is not empty, then "You've got Mail"
652
-    //         if (! empty($this->_notices[ $type ])) {
653
-    //
654
-    //             // is it an update or an error ?
655
-    //             $msg_class = $type == 'updates' ? 'updated' : 'error';
656
-    //             echo '<div id="message" class="' . $msg_class . '">';
657
-    //             // display each notice, however many that may be
658
-    //             foreach ($this->_notices[ $type ] as $message) {
659
-    //                 echo '<p>' . $message . '</p>';
660
-    //             }
661
-    //             // wrap it up
662
-    //             echo '</div>';
663
-    //         }
664
-    //     }
665
-    // }
666
-
667
-    /**
668
-     * Gets the date format to use in teh csv. filterable
669
-     *
670
-     * @param string $current_format
671
-     * @return string
672
-     */
673
-    public function get_date_format_for_csv($current_format = null)
674
-    {
675
-        return apply_filters('FHEE__EE_CSV__get_date_format_for_csv__format', 'Y-m-d', $current_format);
676
-    }
677
-
678
-    /**
679
-     * Gets the time format we want to use in CSV reports. Filterable
680
-     *
681
-     * @param string $current_format
682
-     * @return string
683
-     */
684
-    public function get_time_format_for_csv($current_format = null)
685
-    {
686
-        return apply_filters('FHEE__EE_CSV__get_time_format_for_csv__format', 'H:i:s', $current_format);
687
-    }
19
+	// instance of the EE_CSV object
20
+	private static $_instance = null;
21
+
22
+
23
+	// multidimensional array to store update & error messages
24
+	// var $_notices = array( 'updates' => array(), 'errors' => array() );
25
+
26
+
27
+	private $_primary_keys;
28
+
29
+	/**
30
+	 *
31
+	 * @var EE_Registry
32
+	 */
33
+	private $EE;
34
+	/**
35
+	 * string used for 1st cell in exports, which indicates that the following 2 rows will be metadata keys and values
36
+	 */
37
+	const metadata_header = 'Event Espresso Export Meta Data';
38
+
39
+	/**
40
+	 *        private constructor to prevent direct creation
41
+	 *
42
+	 * @Constructor
43
+	 * @access private
44
+	 * @return void
45
+	 */
46
+	private function __construct()
47
+	{
48
+		global $wpdb;
49
+
50
+		$this->_primary_keys = array(
51
+			$wpdb->prefix . 'esp_answer'                  => array('ANS_ID'),
52
+			$wpdb->prefix . 'esp_attendee'                => array('ATT_ID'),
53
+			$wpdb->prefix . 'esp_datetime'                => array('DTT_ID'),
54
+			$wpdb->prefix . 'esp_event_question_group'    => array('EQG_ID'),
55
+			$wpdb->prefix . 'esp_message_template'        => array('MTP_ID'),
56
+			$wpdb->prefix . 'esp_payment'                 => array('PAY_ID'),
57
+			$wpdb->prefix . 'esp_price'                   => array('PRC_ID'),
58
+			$wpdb->prefix . 'esp_price_type'              => array('PRT_ID'),
59
+			$wpdb->prefix . 'esp_question'                => array('QST_ID'),
60
+			$wpdb->prefix . 'esp_question_group'          => array('QSG_ID'),
61
+			$wpdb->prefix . 'esp_question_group_question' => array('QGQ_ID'),
62
+			$wpdb->prefix . 'esp_question_option'         => array('QSO_ID'),
63
+			$wpdb->prefix . 'esp_registration'            => array('REG_ID'),
64
+			$wpdb->prefix . 'esp_status'                  => array('STS_ID'),
65
+			$wpdb->prefix . 'esp_transaction'             => array('TXN_ID'),
66
+			$wpdb->prefix . 'esp_transaction'             => array('TXN_ID'),
67
+			$wpdb->prefix . 'events_detail'               => array('id'),
68
+			$wpdb->prefix . 'events_category_detail'      => array('id'),
69
+			$wpdb->prefix . 'events_category_rel'         => array('id'),
70
+			$wpdb->prefix . 'events_venue'                => array('id'),
71
+			$wpdb->prefix . 'events_venue_rel'            => array('emeta_id'),
72
+			$wpdb->prefix . 'events_locale'               => array('id'),
73
+			$wpdb->prefix . 'events_locale_rel'           => array('id'),
74
+			$wpdb->prefix . 'events_personnel'            => array('id'),
75
+			$wpdb->prefix . 'events_personnel_rel'        => array('id'),
76
+		);
77
+	}
78
+
79
+
80
+	/**
81
+	 *        @ singleton method used to instantiate class object
82
+	 *        @ access public
83
+	 *
84
+	 * @return EE_CSV
85
+	 */
86
+	public static function instance()
87
+	{
88
+		// check if class object is instantiated
89
+		if (self::$_instance === null or ! is_object(self::$_instance) or ! (self::$_instance instanceof EE_CSV)) {
90
+			self::$_instance = new self();
91
+		}
92
+		return self::$_instance;
93
+	}
94
+
95
+	/**
96
+	 * Opens a unicode or utf file (normal file_get_contents has difficulty readin ga unicode file. @see
97
+	 * http://stackoverflow.com/questions/15092764/how-to-read-unicode-text-file-in-php
98
+	 *
99
+	 * @param string $file_path
100
+	 * @return string
101
+	 * @throws EE_Error
102
+	 */
103
+	private function read_unicode_file($file_path)
104
+	{
105
+		$fc = "";
106
+		$fh = fopen($file_path, "rb");
107
+		if (! $fh) {
108
+			throw new EE_Error(sprintf(__("Cannot open file for read: %s<br>\n", 'event_espresso'), $file_path));
109
+		}
110
+		$flen = filesize($file_path);
111
+		$bc = fread($fh, $flen);
112
+		for ($i = 0; $i < $flen; $i++) {
113
+			$c = substr($bc, $i, 1);
114
+			if ((ord($c) != 0) && (ord($c) != 13)) {
115
+				$fc = $fc . $c;
116
+			}
117
+		}
118
+		if ((ord(substr($fc, 0, 1)) == 255) && (ord(substr($fc, 1, 1)) == 254)) {
119
+			$fc = substr($fc, 2);
120
+		}
121
+		return ($fc);
122
+	}
123
+
124
+
125
+	/**
126
+	 * Generic CSV-functionality to turn an entire CSV file into a single array that's
127
+	 * NOT in a specific format to EE. It's just a 2-level array, with top-level arrays
128
+	 * representing each row in the CSV file, and the second-level arrays being each column in that row
129
+	 *
130
+	 * @param string $path_to_file
131
+	 * @return array of arrays. Top-level array has rows, second-level array has each item
132
+	 */
133
+	public function import_csv_to_multi_dimensional_array($path_to_file)
134
+	{
135
+		// needed to deal with Mac line endings
136
+		ini_set('auto_detect_line_endings', true);
137
+
138
+		// because fgetcsv does not correctly deal with backslashed quotes such as \"
139
+		// we'll read the file into a string
140
+		$file_contents = $this->read_unicode_file($path_to_file);
141
+		// replace backslashed quotes with CSV enclosures
142
+		$file_contents = str_replace('\\"', '"""', $file_contents);
143
+		// HEY YOU! PUT THAT FILE BACK!!!
144
+		file_put_contents($path_to_file, $file_contents);
145
+
146
+		if (($file_handle = fopen($path_to_file, "r")) !== false) {
147
+			# Set the parent multidimensional array key to 0.
148
+			$nn = 0;
149
+			$csvarray = array();
150
+
151
+			// in PHP 5.3 fgetcsv accepts a 5th parameter, but the pre 5.3 versions of fgetcsv choke if passed more than 4 - is that crazy or what?
152
+			if (version_compare(PHP_VERSION, '5.3.0') < 0) {
153
+				//  PHP 5.2- version
154
+				// loop through each row of the file
155
+				while (($data = fgetcsv($file_handle, 0, ',', '"')) !== false) {
156
+					$csvarray[] = $data;
157
+				}
158
+			} else {
159
+				// loop through each row of the file
160
+				while (($data = fgetcsv($file_handle, 0, ',', '"', '\\')) !== false) {
161
+					$csvarray[] = $data;
162
+				}
163
+			}
164
+			# Close the File.
165
+			fclose($file_handle);
166
+			return $csvarray;
167
+		} else {
168
+			EE_Error::add_error(
169
+				sprintf(__("An error occurred - the file: %s could not opened.", "event_espresso"), $path_to_file),
170
+				__FILE__,
171
+				__FUNCTION__,
172
+				__LINE__
173
+			);
174
+			return false;
175
+		}
176
+	}
177
+
178
+
179
+	/**
180
+	 * @Import contents of csv file and store values in an array to be manipulated by other functions
181
+	 * @access public
182
+	 * @param string  $path_to_file         - the csv file to be imported including the path to it's location.
183
+	 *                                      If $model_name is provided, assumes that each row in the CSV represents a
184
+	 *                                      model object for that model If $model_name ISN'T provided, assumes that
185
+	 *                                      before model object data, there is a row where the first entry is simply
186
+	 *                                      'MODEL', and next entry is the model's name, (untranslated) like Event, and
187
+	 *                                      then maybe a row of headers, and then the model data. Eg.
188
+	 *                                      '<br>MODEL,Event,<br>EVT_ID,EVT_name,...<br>1,Monkey
189
+	 *                                      Party,...<br>2,Llamarama,...<br>MODEL,Venue,<br>VNU_ID,VNU_name<br>1,The
190
+	 *                                      Forest
191
+	 * @param string  $model_name           model name if we know what model we're importing
192
+	 * @param boolean $first_row_is_headers - whether the first row of data is headers or not - TRUE = headers, FALSE =
193
+	 *                                      data
194
+	 * @return mixed - array on success - multi dimensional with headers as keys (if headers exist) OR string on fail -
195
+	 *               error message like the following array('Event'=>array( array('EVT_ID'=>1,'EVT_name'=>'bob
196
+	 *               party',...), array('EVT_ID'=>2,'EVT_name'=>'llamarama',...),
197
+	 *                                      ...
198
+	 *                                      )
199
+	 *                                      'Venue'=>array(
200
+	 *                                      array('VNU_ID'=>1,'VNU_name'=>'the shack',...),
201
+	 *                                      array('VNU_ID'=>2,'VNU_name'=>'tree house',...),
202
+	 *                                      ...
203
+	 *                                      )
204
+	 *                                      ...
205
+	 *                                      )
206
+	 */
207
+	public function import_csv_to_model_data_array($path_to_file, $model_name = false, $first_row_is_headers = true)
208
+	{
209
+		$multi_dimensional_array = $this->import_csv_to_multi_dimensional_array($path_to_file);
210
+		if (! $multi_dimensional_array) {
211
+			return false;
212
+		}
213
+		// gotta start somewhere
214
+		$row = 1;
215
+		// array to store csv data in
216
+		$ee_formatted_data = array();
217
+		// array to store headers (column names)
218
+		$headers = array();
219
+		foreach ($multi_dimensional_array as $data) {
220
+			// if first cell is MODEL, then second cell is the MODEL name
221
+			if ($data[0] == 'MODEL') {
222
+				$model_name = $data[1];
223
+				// don't bother looking for model data in this row. The rest of this
224
+				// row should be blank
225
+				// AND pretend this is the first row again
226
+				$row = 1;
227
+				// reset headers
228
+				$headers = array();
229
+				continue;
230
+			}
231
+			if (strpos($data[0], EE_CSV::metadata_header) !== false) {
232
+				$model_name = EE_CSV::metadata_header;
233
+				// store like model data, we just won't try importing it etc.
234
+				$row = 1;
235
+				continue;
236
+			}
237
+
238
+
239
+			// how many columns are there?
240
+			$columns = count($data);
241
+
242
+			$model_entry = array();
243
+			// loop through each column
244
+			for ($i = 0; $i < $columns; $i++) {
245
+				// replace csv_enclosures with backslashed quotes
246
+				$data[ $i ] = str_replace('"""', '\\"', $data[ $i ]);
247
+				// do we need to grab the column names?
248
+				if ($row === 1) {
249
+					if ($first_row_is_headers) {
250
+						// store the column names to use for keys
251
+						$column_name = $data[ $i ];
252
+						// check it's not blank... sometimes CSV editign programs adda bunch of empty columns onto the end...
253
+						if (! $column_name) {
254
+							continue;
255
+						}
256
+						$matches = array();
257
+						if ($model_name == EE_CSV::metadata_header) {
258
+							$headers[ $i ] = $column_name;
259
+						} else {
260
+							// now get the db table name from it (the part between square brackets)
261
+							$success = preg_match('~(.*)\[(.*)\]~', $column_name, $matches);
262
+							if (! $success) {
263
+								EE_Error::add_error(
264
+									sprintf(
265
+										__(
266
+											"The column titled %s is invalid for importing. It must be be in the format of 'Nice Name[model_field_name]' in row %s",
267
+											"event_espresso"
268
+										),
269
+										$column_name,
270
+										implode(",", $data)
271
+									),
272
+									__FILE__,
273
+									__FUNCTION__,
274
+									__LINE__
275
+								);
276
+								return false;
277
+							}
278
+							$headers[ $i ] = $matches[2];
279
+						}
280
+					} else {
281
+						// no column names means our final array will just use counters for keys
282
+						$model_entry[ $headers[ $i ] ] = $data[ $i ];
283
+						$headers[ $i ] = $i;
284
+					}
285
+					// and we need to store csv data
286
+				} else {
287
+					// this column isn' ta header, store it if there is a header for it
288
+					if (isset($headers[ $i ])) {
289
+						$model_entry[ $headers[ $i ] ] = $data[ $i ];
290
+					}
291
+				}
292
+			}
293
+			// save the row's data IF it's a non-header-row
294
+			if (! $first_row_is_headers || ($first_row_is_headers && $row > 1)) {
295
+				$ee_formatted_data[ $model_name ][] = $model_entry;
296
+			}
297
+			// advance to next row
298
+			$row++;
299
+		}
300
+
301
+		// delete the uploaded file
302
+		unlink($path_to_file);
303
+		// echo '<pre style="height:auto;border:2px solid lightblue;">' . print_r( $ee_formatted_data, TRUE ) . '</pre><br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span>';
304
+		// die();
305
+
306
+		// it's good to give back
307
+		return $ee_formatted_data;
308
+	}
309
+
310
+
311
+	public function save_csv_to_db($csv_data_array, $model_name = false)
312
+	{
313
+		EE_Error::doing_it_wrong(
314
+			'save_csv_to_db',
315
+			__(
316
+				'Function moved to EE_Import and renamed to save_csv_data_array_to_db',
317
+				'event_espresso'
318
+			),
319
+			'4.6.7'
320
+		);
321
+		return EE_Import::instance()->save_csv_data_array_to_db($csv_data_array, $model_name);
322
+	}
323
+
324
+	/**
325
+	 * Sends HTTP headers to indicate that the browser should download a file,
326
+	 * and starts writing the file to PHP's output. Returns the file handle so other functions can
327
+	 * also write to it
328
+	 *
329
+	 * @param string $new_filename the name of the file that the user will download
330
+	 * @return resource, like the results of fopen(), which can be used for fwrite, fputcsv2, etc.
331
+	 */
332
+	public function begin_sending_csv($filename)
333
+	{
334
+		// grab file extension
335
+		$ext = substr(strrchr($filename, '.'), 1);
336
+		if ($ext == '.csv' or $ext == '.xls') {
337
+			str_replace($ext, '', $filename);
338
+		}
339
+		$filename .= '.csv';
340
+
341
+		// if somebody's been naughty and already started outputting stuff, trash it
342
+		// and start writing our stuff.
343
+		if (ob_get_length()) {
344
+			@ob_flush();
345
+			@flush();
346
+			@ob_end_flush();
347
+		}
348
+		@ob_start();
349
+		header("Pragma: public");
350
+		header("Expires: 0");
351
+		header("Pragma: no-cache");
352
+		header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0");
353
+		// header("Content-Type: application/force-download");
354
+		// header("Content-Type: application/octet-stream");
355
+		// header("Content-Type: application/download");
356
+		header('Content-disposition: attachment; filename=' . $filename);
357
+		header("Content-Type: text/csv; charset=utf-8");
358
+		do_action('AHEE__EE_CSV__begin_sending_csv__headers');
359
+		echo apply_filters(
360
+			'FHEE__EE_CSV__begin_sending_csv__start_writing',
361
+			"\xEF\xBB\xBF"
362
+		); // makes excel open it as UTF-8. UTF-8 BOM, see http://stackoverflow.com/a/4440143/2773835
363
+		$fh = fopen('php://output', 'w');
364
+		return $fh;
365
+	}
366
+
367
+	/**
368
+	 * Writes some meta data to the CSV as a bunch of columns. Initially we're only
369
+	 * mentioning the version and timezone
370
+	 *
371
+	 * @param resource $filehandle
372
+	 */
373
+	public function write_metadata_to_csv($filehandle)
374
+	{
375
+		$data_row = array(EE_CSV::metadata_header);// do NOT translate because this exact string is used when importing
376
+		$this->fputcsv2($filehandle, $data_row);
377
+		$meta_data = array(
378
+			0 => array(
379
+				'version'        => espresso_version(),
380
+				'timezone'       => EEH_DTT_Helper::get_timezone(),
381
+				'time_of_export' => current_time('mysql'),
382
+				'site_url'       => site_url(),
383
+			),
384
+		);
385
+		$this->write_data_array_to_csv($filehandle, $meta_data);
386
+	}
387
+
388
+
389
+	/**
390
+	 * Writes $data to the csv file open in $filehandle. uses the array indices of $data for column headers
391
+	 *
392
+	 * @param array   $data                 2D array, first numerically-indexed, and next-level-down preferably indexed
393
+	 *                                      by string
394
+	 * @param boolean $add_csv_column_names whether or not we should add the keys in the bottom-most array as a row for
395
+	 *                                      headers in the CSV. Eg, if $data looked like
396
+	 *                                      array(0=>array('EVT_ID'=>1,'EVT_name'=>'monkey'...), 1=>array(...),...))
397
+	 *                                      then the first row we'd write to the CSV would be "EVT_ID,EVT_name,..."
398
+	 * @return boolean if we successfully wrote to the CSV or not. If there's no $data, we consider that a success
399
+	 *                 (because we wrote everything there was...nothing)
400
+	 */
401
+	public function write_data_array_to_csv($filehandle, $data)
402
+	{
403
+
404
+
405
+		// determine if $data is actually a 2d array
406
+		if ($data && is_array($data) && is_array(EEH_Array::get_one_item_from_array($data))) {
407
+			// make sure top level is numerically indexed,
408
+
409
+			if (EEH_Array::is_associative_array($data)) {
410
+				throw new EE_Error(
411
+					sprintf(
412
+						__(
413
+							"top-level array must be numerically indexed. Does these look like numbers to you? %s",
414
+							"event_espresso"
415
+						),
416
+						implode(",", array_keys($data))
417
+					)
418
+				);
419
+			}
420
+			$item_in_top_level_array = EEH_Array::get_one_item_from_array($data);
421
+			// now, is the last item in the top-level array of $data an associative or numeric array?
422
+			if (EEH_Array::is_associative_array($item_in_top_level_array)) {
423
+				// its associative, so we want to output its keys as column headers
424
+				$keys = array_keys($item_in_top_level_array);
425
+				echo $this->fputcsv2($filehandle, $keys);
426
+			}
427
+			// start writing data
428
+			foreach ($data as $data_row) {
429
+				echo $this->fputcsv2($filehandle, $data_row);
430
+			}
431
+			return true;
432
+		} else {
433
+			// no data TO write... so we can assume that's a success
434
+			return true;
435
+		}
436
+		// //if 2nd level is indexed by strings, use those as csv column headers (ie, the first row)
437
+		//
438
+		//
439
+		// $no_table = TRUE;
440
+		//
441
+		// // loop through data and add each row to the file/stream as csv
442
+		// foreach ( $data as $model_name => $model_data ) {
443
+		// // test first row to see if it is data or a model name
444
+		// $model = EE_Registry::instance();->load_model($model_name);
445
+		// //if the model really exists,
446
+		// if ( $model ) {
447
+		//
448
+		// // we have a table name
449
+		// $no_table = FALSE;
450
+		//
451
+		// // put the tablename into an array cuz that's how fputcsv rolls
452
+		// $model_name_row = array( 'MODEL', $model_name );
453
+		//
454
+		// // add table name to csv output
455
+		// echo self::fputcsv2($filehandle, $model_name_row);
456
+		//
457
+		// // now get the rest of the data
458
+		// foreach ( $model_data as $row ) {
459
+		// // output the row
460
+		// echo self::fputcsv2($filehandle, $row);
461
+		// }
462
+		//
463
+		// }
464
+		//
465
+		// if ( $no_table ) {
466
+		// // no table so just put the data
467
+		// echo self::fputcsv2($filehandle, $model_data);
468
+		// }
469
+		//
470
+		// } // END OF foreach ( $data )
471
+	}
472
+
473
+	/**
474
+	 * Should be called after begin_sending_csv(), and one or more write_data_array_to_csv()s.
475
+	 * Calls exit to prevent polluting the CSV file with other junk
476
+	 *
477
+	 * @param resource $fh filehandle where we're writing the CSV to
478
+	 */
479
+	public function end_sending_csv($fh)
480
+	{
481
+		fclose($fh);
482
+		exit(0);
483
+	}
484
+
485
+	/**
486
+	 * Given an open file, writes all the model data to it in the format the importer expects.
487
+	 * Usually preceded by begin_sending_csv($filename), and followed by end_sending_csv($filehandle).
488
+	 *
489
+	 * @param resource $filehandle
490
+	 * @param array    $model_data_array is assumed to be a 3d array: 1st layer has keys of model names (eg 'Event'),
491
+	 *                                   next layer is numerically indexed to represent each model object (eg, each
492
+	 *                                   individual event), and the last layer has all the attributes o fthat model
493
+	 *                                   object (eg, the event's id, name, etc)
494
+	 * @return boolean success
495
+	 */
496
+	public function write_model_data_to_csv($filehandle, $model_data_array)
497
+	{
498
+		$this->write_metadata_to_csv($filehandle);
499
+		foreach ($model_data_array as $model_name => $model_instance_arrays) {
500
+			// first: output a special row stating the model
501
+			echo $this->fputcsv2($filehandle, array('MODEL', $model_name));
502
+			// if we have items to put in the CSV, do it normally
503
+
504
+			if (! empty($model_instance_arrays)) {
505
+				$this->write_data_array_to_csv($filehandle, $model_instance_arrays);
506
+			} else {
507
+				// echo "no data to write... so just write the headers";
508
+				// so there's actually NO model objects for that model.
509
+				// probably still want to show the columns
510
+				$model = EE_Registry::instance()->load_model($model_name);
511
+				$column_names = array();
512
+				foreach ($model->field_settings() as $field) {
513
+					$column_names[ $field->get_nicename() . "[" . $field->get_name() . "]" ] = null;
514
+				}
515
+				$this->write_data_array_to_csv($filehandle, array($column_names));
516
+			}
517
+		}
518
+	}
519
+
520
+	/**
521
+	 * Writes the CSV file to the output buffer, with rows corresponding to $model_data_array,
522
+	 * and dies (in order to avoid other plugins from messing up the csv output)
523
+	 *
524
+	 * @param string $filename         the filename you want to give the file
525
+	 * @param array  $model_data_array 3d array, as described in EE_CSV::write_model_data_to_csv()
526
+	 * @return bool | void writes CSV file to output and dies
527
+	 */
528
+	public function export_multiple_model_data_to_csv($filename, $model_data_array)
529
+	{
530
+		$filehandle = $this->begin_sending_csv($filename);
531
+		$this->write_model_data_to_csv($filehandle, $model_data_array);
532
+		$this->end_sending_csv($filehandle);
533
+	}
534
+
535
+	/**
536
+	 * @Export contents of an array to csv file
537
+	 * @access public
538
+	 * @param array  $data     - the array of data to be converted to csv and exported
539
+	 * @param string $filename - name for newly created csv file
540
+	 * @return TRUE on success, FALSE on fail
541
+	 */
542
+	public function export_array_to_csv($data = false, $filename = false)
543
+	{
544
+
545
+		// no data file?? get outta here
546
+		if (! $data or ! is_array($data) or empty($data)) {
547
+			return false;
548
+		}
549
+
550
+		// no filename?? get outta here
551
+		if (! $filename) {
552
+			return false;
553
+		}
554
+
555
+
556
+		// somebody told me i might need this ???
557
+		global $wpdb;
558
+		$prefix = $wpdb->prefix;
559
+
560
+
561
+		$fh = $this->begin_sending_csv($filename);
562
+
563
+
564
+		$this->end_sending_csv($fh);
565
+	}
566
+
567
+
568
+	/**
569
+	 * @Determine the maximum upload file size based on php.ini settings
570
+	 * @access    public
571
+	 * @param int $percent_of_max - desired percentage of the max upload_mb
572
+	 * @return int KB
573
+	 */
574
+	public function get_max_upload_size($percent_of_max = false)
575
+	{
576
+
577
+		$max_upload = (int) (ini_get('upload_max_filesize'));
578
+		$max_post = (int) (ini_get('post_max_size'));
579
+		$memory_limit = (int) (ini_get('memory_limit'));
580
+
581
+		// determine the smallest of the three values from above
582
+		$upload_mb = min($max_upload, $max_post, $memory_limit);
583
+
584
+		// convert MB to KB
585
+		$upload_mb = $upload_mb * 1024;
586
+
587
+		// don't want the full monty? then reduce the max uplaod size
588
+		if ($percent_of_max) {
589
+			// is percent_of_max like this -> 50 or like this -> 0.50 ?
590
+			if ($percent_of_max > 1) {
591
+				// chnages 50 to 0.50
592
+				$percent_of_max = $percent_of_max / 100;
593
+			}
594
+			// make upload_mb a percentage of the max upload_mb
595
+			$upload_mb = $upload_mb * $percent_of_max;
596
+		}
597
+
598
+		return $upload_mb;
599
+	}
600
+
601
+
602
+	/**
603
+	 * @Drop   in replacement for PHP's fputcsv function - but this one works!!!
604
+	 * @access private
605
+	 * @param resource $fh         - file handle - what we are writing to
606
+	 * @param array    $row        - individual row of csv data
607
+	 * @param string   $delimiter  - csv delimiter
608
+	 * @param string   $enclosure  - csv enclosure
609
+	 * @param string   $mysql_null - allows php NULL to be overridden with MySQl's insertable NULL value
610
+	 * @return void
611
+	 */
612
+	private function fputcsv2($fh, array $row, $delimiter = ',', $enclosure = '"', $mysql_null = false)
613
+	{
614
+		// Allow user to filter the csv delimiter and enclosure for other countries csv standards
615
+		$delimiter = apply_filters('FHEE__EE_CSV__fputcsv2__delimiter', $delimiter);
616
+		$enclosure = apply_filters('FHEE__EE_CSV__fputcsv2__enclosure', $enclosure);
617
+
618
+		$delimiter_esc = preg_quote($delimiter, '/');
619
+		$enclosure_esc = preg_quote($enclosure, '/');
620
+
621
+		$output = array();
622
+		foreach ($row as $field_value) {
623
+			if (is_object($field_value) || is_array($field_value)) {
624
+				$field_value = serialize($field_value);
625
+			}
626
+			if ($field_value === null && $mysql_null) {
627
+				$output[] = 'NULL';
628
+				continue;
629
+			}
630
+
631
+			$output[] = preg_match("/(?:${delimiter_esc}|${enclosure_esc}|\s)/", $field_value) ?
632
+				($enclosure . str_replace($enclosure, $enclosure . $enclosure, $field_value) . $enclosure)
633
+				: $field_value;
634
+		}
635
+
636
+		fwrite($fh, join($delimiter, $output) . PHP_EOL);
637
+	}
638
+
639
+
640
+	// /**
641
+	//  * @CSV    Import / Export messages
642
+	//  * @access public
643
+	//  * @return void
644
+	//  */
645
+	// public function csv_admin_notices()
646
+	// {
647
+	//
648
+	//     // We play both kinds of music here! Country AND Western! - err... I mean, cycle through both types of notices
649
+	//     foreach (array('updates', 'errors') as $type) {
650
+	//
651
+	//         // if particular notice type is not empty, then "You've got Mail"
652
+	//         if (! empty($this->_notices[ $type ])) {
653
+	//
654
+	//             // is it an update or an error ?
655
+	//             $msg_class = $type == 'updates' ? 'updated' : 'error';
656
+	//             echo '<div id="message" class="' . $msg_class . '">';
657
+	//             // display each notice, however many that may be
658
+	//             foreach ($this->_notices[ $type ] as $message) {
659
+	//                 echo '<p>' . $message . '</p>';
660
+	//             }
661
+	//             // wrap it up
662
+	//             echo '</div>';
663
+	//         }
664
+	//     }
665
+	// }
666
+
667
+	/**
668
+	 * Gets the date format to use in teh csv. filterable
669
+	 *
670
+	 * @param string $current_format
671
+	 * @return string
672
+	 */
673
+	public function get_date_format_for_csv($current_format = null)
674
+	{
675
+		return apply_filters('FHEE__EE_CSV__get_date_format_for_csv__format', 'Y-m-d', $current_format);
676
+	}
677
+
678
+	/**
679
+	 * Gets the time format we want to use in CSV reports. Filterable
680
+	 *
681
+	 * @param string $current_format
682
+	 * @return string
683
+	 */
684
+	public function get_time_format_for_csv($current_format = null)
685
+	{
686
+		return apply_filters('FHEE__EE_CSV__get_time_format_for_csv__format', 'H:i:s', $current_format);
687
+	}
688 688
 }
Please login to merge, or discard this patch.
Spacing   +48 added lines, -48 removed lines patch added patch discarded remove patch
@@ -48,31 +48,31 @@  discard block
 block discarded – undo
48 48
         global $wpdb;
49 49
 
50 50
         $this->_primary_keys = array(
51
-            $wpdb->prefix . 'esp_answer'                  => array('ANS_ID'),
52
-            $wpdb->prefix . 'esp_attendee'                => array('ATT_ID'),
53
-            $wpdb->prefix . 'esp_datetime'                => array('DTT_ID'),
54
-            $wpdb->prefix . 'esp_event_question_group'    => array('EQG_ID'),
55
-            $wpdb->prefix . 'esp_message_template'        => array('MTP_ID'),
56
-            $wpdb->prefix . 'esp_payment'                 => array('PAY_ID'),
57
-            $wpdb->prefix . 'esp_price'                   => array('PRC_ID'),
58
-            $wpdb->prefix . 'esp_price_type'              => array('PRT_ID'),
59
-            $wpdb->prefix . 'esp_question'                => array('QST_ID'),
60
-            $wpdb->prefix . 'esp_question_group'          => array('QSG_ID'),
61
-            $wpdb->prefix . 'esp_question_group_question' => array('QGQ_ID'),
62
-            $wpdb->prefix . 'esp_question_option'         => array('QSO_ID'),
63
-            $wpdb->prefix . 'esp_registration'            => array('REG_ID'),
64
-            $wpdb->prefix . 'esp_status'                  => array('STS_ID'),
65
-            $wpdb->prefix . 'esp_transaction'             => array('TXN_ID'),
66
-            $wpdb->prefix . 'esp_transaction'             => array('TXN_ID'),
67
-            $wpdb->prefix . 'events_detail'               => array('id'),
68
-            $wpdb->prefix . 'events_category_detail'      => array('id'),
69
-            $wpdb->prefix . 'events_category_rel'         => array('id'),
70
-            $wpdb->prefix . 'events_venue'                => array('id'),
71
-            $wpdb->prefix . 'events_venue_rel'            => array('emeta_id'),
72
-            $wpdb->prefix . 'events_locale'               => array('id'),
73
-            $wpdb->prefix . 'events_locale_rel'           => array('id'),
74
-            $wpdb->prefix . 'events_personnel'            => array('id'),
75
-            $wpdb->prefix . 'events_personnel_rel'        => array('id'),
51
+            $wpdb->prefix.'esp_answer'                  => array('ANS_ID'),
52
+            $wpdb->prefix.'esp_attendee'                => array('ATT_ID'),
53
+            $wpdb->prefix.'esp_datetime'                => array('DTT_ID'),
54
+            $wpdb->prefix.'esp_event_question_group'    => array('EQG_ID'),
55
+            $wpdb->prefix.'esp_message_template'        => array('MTP_ID'),
56
+            $wpdb->prefix.'esp_payment'                 => array('PAY_ID'),
57
+            $wpdb->prefix.'esp_price'                   => array('PRC_ID'),
58
+            $wpdb->prefix.'esp_price_type'              => array('PRT_ID'),
59
+            $wpdb->prefix.'esp_question'                => array('QST_ID'),
60
+            $wpdb->prefix.'esp_question_group'          => array('QSG_ID'),
61
+            $wpdb->prefix.'esp_question_group_question' => array('QGQ_ID'),
62
+            $wpdb->prefix.'esp_question_option'         => array('QSO_ID'),
63
+            $wpdb->prefix.'esp_registration'            => array('REG_ID'),
64
+            $wpdb->prefix.'esp_status'                  => array('STS_ID'),
65
+            $wpdb->prefix.'esp_transaction'             => array('TXN_ID'),
66
+            $wpdb->prefix.'esp_transaction'             => array('TXN_ID'),
67
+            $wpdb->prefix.'events_detail'               => array('id'),
68
+            $wpdb->prefix.'events_category_detail'      => array('id'),
69
+            $wpdb->prefix.'events_category_rel'         => array('id'),
70
+            $wpdb->prefix.'events_venue'                => array('id'),
71
+            $wpdb->prefix.'events_venue_rel'            => array('emeta_id'),
72
+            $wpdb->prefix.'events_locale'               => array('id'),
73
+            $wpdb->prefix.'events_locale_rel'           => array('id'),
74
+            $wpdb->prefix.'events_personnel'            => array('id'),
75
+            $wpdb->prefix.'events_personnel_rel'        => array('id'),
76 76
         );
77 77
     }
78 78
 
@@ -104,7 +104,7 @@  discard block
 block discarded – undo
104 104
     {
105 105
         $fc = "";
106 106
         $fh = fopen($file_path, "rb");
107
-        if (! $fh) {
107
+        if ( ! $fh) {
108 108
             throw new EE_Error(sprintf(__("Cannot open file for read: %s<br>\n", 'event_espresso'), $file_path));
109 109
         }
110 110
         $flen = filesize($file_path);
@@ -112,7 +112,7 @@  discard block
 block discarded – undo
112 112
         for ($i = 0; $i < $flen; $i++) {
113 113
             $c = substr($bc, $i, 1);
114 114
             if ((ord($c) != 0) && (ord($c) != 13)) {
115
-                $fc = $fc . $c;
115
+                $fc = $fc.$c;
116 116
             }
117 117
         }
118 118
         if ((ord(substr($fc, 0, 1)) == 255) && (ord(substr($fc, 1, 1)) == 254)) {
@@ -207,7 +207,7 @@  discard block
 block discarded – undo
207 207
     public function import_csv_to_model_data_array($path_to_file, $model_name = false, $first_row_is_headers = true)
208 208
     {
209 209
         $multi_dimensional_array = $this->import_csv_to_multi_dimensional_array($path_to_file);
210
-        if (! $multi_dimensional_array) {
210
+        if ( ! $multi_dimensional_array) {
211 211
             return false;
212 212
         }
213 213
         // gotta start somewhere
@@ -243,23 +243,23 @@  discard block
 block discarded – undo
243 243
             // loop through each column
244 244
             for ($i = 0; $i < $columns; $i++) {
245 245
                 // replace csv_enclosures with backslashed quotes
246
-                $data[ $i ] = str_replace('"""', '\\"', $data[ $i ]);
246
+                $data[$i] = str_replace('"""', '\\"', $data[$i]);
247 247
                 // do we need to grab the column names?
248 248
                 if ($row === 1) {
249 249
                     if ($first_row_is_headers) {
250 250
                         // store the column names to use for keys
251
-                        $column_name = $data[ $i ];
251
+                        $column_name = $data[$i];
252 252
                         // check it's not blank... sometimes CSV editign programs adda bunch of empty columns onto the end...
253
-                        if (! $column_name) {
253
+                        if ( ! $column_name) {
254 254
                             continue;
255 255
                         }
256 256
                         $matches = array();
257 257
                         if ($model_name == EE_CSV::metadata_header) {
258
-                            $headers[ $i ] = $column_name;
258
+                            $headers[$i] = $column_name;
259 259
                         } else {
260 260
                             // now get the db table name from it (the part between square brackets)
261 261
                             $success = preg_match('~(.*)\[(.*)\]~', $column_name, $matches);
262
-                            if (! $success) {
262
+                            if ( ! $success) {
263 263
                                 EE_Error::add_error(
264 264
                                     sprintf(
265 265
                                         __(
@@ -275,24 +275,24 @@  discard block
 block discarded – undo
275 275
                                 );
276 276
                                 return false;
277 277
                             }
278
-                            $headers[ $i ] = $matches[2];
278
+                            $headers[$i] = $matches[2];
279 279
                         }
280 280
                     } else {
281 281
                         // no column names means our final array will just use counters for keys
282
-                        $model_entry[ $headers[ $i ] ] = $data[ $i ];
283
-                        $headers[ $i ] = $i;
282
+                        $model_entry[$headers[$i]] = $data[$i];
283
+                        $headers[$i] = $i;
284 284
                     }
285 285
                     // and we need to store csv data
286 286
                 } else {
287 287
                     // this column isn' ta header, store it if there is a header for it
288
-                    if (isset($headers[ $i ])) {
289
-                        $model_entry[ $headers[ $i ] ] = $data[ $i ];
288
+                    if (isset($headers[$i])) {
289
+                        $model_entry[$headers[$i]] = $data[$i];
290 290
                     }
291 291
                 }
292 292
             }
293 293
             // save the row's data IF it's a non-header-row
294
-            if (! $first_row_is_headers || ($first_row_is_headers && $row > 1)) {
295
-                $ee_formatted_data[ $model_name ][] = $model_entry;
294
+            if ( ! $first_row_is_headers || ($first_row_is_headers && $row > 1)) {
295
+                $ee_formatted_data[$model_name][] = $model_entry;
296 296
             }
297 297
             // advance to next row
298 298
             $row++;
@@ -353,7 +353,7 @@  discard block
 block discarded – undo
353 353
         // header("Content-Type: application/force-download");
354 354
         // header("Content-Type: application/octet-stream");
355 355
         // header("Content-Type: application/download");
356
-        header('Content-disposition: attachment; filename=' . $filename);
356
+        header('Content-disposition: attachment; filename='.$filename);
357 357
         header("Content-Type: text/csv; charset=utf-8");
358 358
         do_action('AHEE__EE_CSV__begin_sending_csv__headers');
359 359
         echo apply_filters(
@@ -372,7 +372,7 @@  discard block
 block discarded – undo
372 372
      */
373 373
     public function write_metadata_to_csv($filehandle)
374 374
     {
375
-        $data_row = array(EE_CSV::metadata_header);// do NOT translate because this exact string is used when importing
375
+        $data_row = array(EE_CSV::metadata_header); // do NOT translate because this exact string is used when importing
376 376
         $this->fputcsv2($filehandle, $data_row);
377 377
         $meta_data = array(
378 378
             0 => array(
@@ -501,7 +501,7 @@  discard block
 block discarded – undo
501 501
             echo $this->fputcsv2($filehandle, array('MODEL', $model_name));
502 502
             // if we have items to put in the CSV, do it normally
503 503
 
504
-            if (! empty($model_instance_arrays)) {
504
+            if ( ! empty($model_instance_arrays)) {
505 505
                 $this->write_data_array_to_csv($filehandle, $model_instance_arrays);
506 506
             } else {
507 507
                 // echo "no data to write... so just write the headers";
@@ -510,7 +510,7 @@  discard block
 block discarded – undo
510 510
                 $model = EE_Registry::instance()->load_model($model_name);
511 511
                 $column_names = array();
512 512
                 foreach ($model->field_settings() as $field) {
513
-                    $column_names[ $field->get_nicename() . "[" . $field->get_name() . "]" ] = null;
513
+                    $column_names[$field->get_nicename()."[".$field->get_name()."]"] = null;
514 514
                 }
515 515
                 $this->write_data_array_to_csv($filehandle, array($column_names));
516 516
             }
@@ -543,12 +543,12 @@  discard block
 block discarded – undo
543 543
     {
544 544
 
545 545
         // no data file?? get outta here
546
-        if (! $data or ! is_array($data) or empty($data)) {
546
+        if ( ! $data or ! is_array($data) or empty($data)) {
547 547
             return false;
548 548
         }
549 549
 
550 550
         // no filename?? get outta here
551
-        if (! $filename) {
551
+        if ( ! $filename) {
552 552
             return false;
553 553
         }
554 554
 
@@ -629,11 +629,11 @@  discard block
 block discarded – undo
629 629
             }
630 630
 
631 631
             $output[] = preg_match("/(?:${delimiter_esc}|${enclosure_esc}|\s)/", $field_value) ?
632
-                ($enclosure . str_replace($enclosure, $enclosure . $enclosure, $field_value) . $enclosure)
632
+                ($enclosure.str_replace($enclosure, $enclosure.$enclosure, $field_value).$enclosure)
633 633
                 : $field_value;
634 634
         }
635 635
 
636
-        fwrite($fh, join($delimiter, $output) . PHP_EOL);
636
+        fwrite($fh, join($delimiter, $output).PHP_EOL);
637 637
     }
638 638
 
639 639
 
Please login to merge, or discard this patch.
core/db_classes/EE_Currency.class.php 2 patches
Doc Comments   +7 added lines, -7 removed lines patch added patch discarded remove patch
@@ -46,7 +46,7 @@  discard block
 block discarded – undo
46 46
      * @param array  $props_n_values  incoming values from the database
47 47
      * @param string $timezone        incoming timezone as set by the model.  If not set the timezone for
48 48
      *                                the website will be used.
49
-     * @return EE_Attendee
49
+     * @return EE_Currency
50 50
      */
51 51
     public static function new_instance_from_db($props_n_values = array(), $timezone = null)
52 52
     {
@@ -67,7 +67,7 @@  discard block
 block discarded – undo
67 67
      * Sets code
68 68
      *
69 69
      * @param string $code
70
-     * @return boolean
70
+     * @return boolean|null
71 71
      */
72 72
     public function set_code($code)
73 73
     {
@@ -88,7 +88,7 @@  discard block
 block discarded – undo
88 88
      * Sets active
89 89
      *
90 90
      * @param boolean $active
91
-     * @return boolean
91
+     * @return boolean|null
92 92
      */
93 93
     public function set_active($active)
94 94
     {
@@ -109,7 +109,7 @@  discard block
 block discarded – undo
109 109
      * Sets dec_plc
110 110
      *
111 111
      * @param int $dec_plc
112
-     * @return boolean
112
+     * @return boolean|null
113 113
      */
114 114
     public function set_dec_plc($dec_plc)
115 115
     {
@@ -130,7 +130,7 @@  discard block
 block discarded – undo
130 130
      * Sets plural
131 131
      *
132 132
      * @param string $plural
133
-     * @return boolean
133
+     * @return boolean|null
134 134
      */
135 135
     public function set_plural_name($plural)
136 136
     {
@@ -151,7 +151,7 @@  discard block
 block discarded – undo
151 151
      * Sets sign
152 152
      *
153 153
      * @param string $sign
154
-     * @return boolean
154
+     * @return boolean|null
155 155
      */
156 156
     public function set_sign($sign)
157 157
     {
@@ -172,7 +172,7 @@  discard block
 block discarded – undo
172 172
      * Sets single
173 173
      *
174 174
      * @param string $single
175
-     * @return boolean
175
+     * @return boolean|null
176 176
      */
177 177
     public function set_singular_name($single)
178 178
     {
Please login to merge, or discard this patch.
Indentation   +176 added lines, -176 removed lines patch added patch discarded remove patch
@@ -12,180 +12,180 @@
 block discarded – undo
12 12
 class EE_Currency extends EE_Base_Class
13 13
 {
14 14
 
15
-    /** Currency COde @var CUR_code */
16
-    protected $_CUR_code = null;
17
-    /** Currency Name Singular @var CUR_single */
18
-    protected $_CUR_single = null;
19
-    /** Currency Name Plural @var CUR_plural */
20
-    protected $_CUR_plural = null;
21
-    /** Currency Sign @var CUR_sign */
22
-    protected $_CUR_sign = null;
23
-    /** Currency Decimal Places @var CUR_dec_plc */
24
-    protected $_CUR_dec_plc = null;
25
-    /** Active? @var CUR_active */
26
-    protected $_CUR_active = null;
27
-    protected $_Payment_Method;
28
-
29
-    /**
30
-     *
31
-     * @param array  $props_n_values          incoming values
32
-     * @param string $timezone                incoming timezone (if not set the timezone set for the website will be
33
-     *                                        used.)
34
-     * @param array  $date_formats            incoming date_formats in an array where the first value is the
35
-     *                                        date_format and the second value is the time format
36
-     * @return EE_Attendee
37
-     */
38
-    public static function new_instance($props_n_values = array(), $timezone = null, $date_formats = array())
39
-    {
40
-        $has_object = parent::_check_for_object($props_n_values, __CLASS__, $timezone, $date_formats);
41
-        return $has_object ? $has_object : new self($props_n_values, false, $timezone, $date_formats);
42
-    }
43
-
44
-
45
-    /**
46
-     * @param array  $props_n_values  incoming values from the database
47
-     * @param string $timezone        incoming timezone as set by the model.  If not set the timezone for
48
-     *                                the website will be used.
49
-     * @return EE_Attendee
50
-     */
51
-    public static function new_instance_from_db($props_n_values = array(), $timezone = null)
52
-    {
53
-        return new self($props_n_values, true, $timezone);
54
-    }
55
-
56
-    /**
57
-     * Gets code
58
-     *
59
-     * @return string
60
-     */
61
-    public function code()
62
-    {
63
-        return $this->get('CUR_code');
64
-    }
65
-
66
-    /**
67
-     * Sets code
68
-     *
69
-     * @param string $code
70
-     * @return boolean
71
-     */
72
-    public function set_code($code)
73
-    {
74
-        return $this->set('CUR_code', $code);
75
-    }
76
-
77
-    /**
78
-     * Gets active
79
-     *
80
-     * @return boolean
81
-     */
82
-    public function active()
83
-    {
84
-        return $this->get('CUR_active');
85
-    }
86
-
87
-    /**
88
-     * Sets active
89
-     *
90
-     * @param boolean $active
91
-     * @return boolean
92
-     */
93
-    public function set_active($active)
94
-    {
95
-        return $this->set('CUR_active', $active);
96
-    }
97
-
98
-    /**
99
-     * Gets dec_plc
100
-     *
101
-     * @return int
102
-     */
103
-    public function dec_plc()
104
-    {
105
-        return $this->get('CUR_dec_plc');
106
-    }
107
-
108
-    /**
109
-     * Sets dec_plc
110
-     *
111
-     * @param int $dec_plc
112
-     * @return boolean
113
-     */
114
-    public function set_dec_plc($dec_plc)
115
-    {
116
-        return $this->set('CUR_dec_plc', $dec_plc);
117
-    }
118
-
119
-    /**
120
-     * Gets plural
121
-     *
122
-     * @return string
123
-     */
124
-    public function plural_name()
125
-    {
126
-        return $this->get('CUR_plural');
127
-    }
128
-
129
-    /**
130
-     * Sets plural
131
-     *
132
-     * @param string $plural
133
-     * @return boolean
134
-     */
135
-    public function set_plural_name($plural)
136
-    {
137
-        return $this->set('CUR_plural', $plural);
138
-    }
139
-
140
-    /**
141
-     * Gets sign
142
-     *
143
-     * @return string
144
-     */
145
-    public function sign()
146
-    {
147
-        return $this->get('CUR_sign');
148
-    }
149
-
150
-    /**
151
-     * Sets sign
152
-     *
153
-     * @param string $sign
154
-     * @return boolean
155
-     */
156
-    public function set_sign($sign)
157
-    {
158
-        return $this->set('CUR_sign', $sign);
159
-    }
160
-
161
-    /**
162
-     * Gets single
163
-     *
164
-     * @return string
165
-     */
166
-    public function singular_name()
167
-    {
168
-        return $this->get('CUR_single');
169
-    }
170
-
171
-    /**
172
-     * Sets single
173
-     *
174
-     * @param string $single
175
-     * @return boolean
176
-     */
177
-    public function set_singular_name($single)
178
-    {
179
-        return $this->set('CUR_single', $single);
180
-    }
181
-
182
-    /**
183
-     * Gets a prettier name
184
-     *
185
-     * @return string
186
-     */
187
-    public function name()
188
-    {
189
-        return sprintf(__("%s (%s)", "event_espresso"), $this->code(), $this->plural_name());
190
-    }
15
+	/** Currency COde @var CUR_code */
16
+	protected $_CUR_code = null;
17
+	/** Currency Name Singular @var CUR_single */
18
+	protected $_CUR_single = null;
19
+	/** Currency Name Plural @var CUR_plural */
20
+	protected $_CUR_plural = null;
21
+	/** Currency Sign @var CUR_sign */
22
+	protected $_CUR_sign = null;
23
+	/** Currency Decimal Places @var CUR_dec_plc */
24
+	protected $_CUR_dec_plc = null;
25
+	/** Active? @var CUR_active */
26
+	protected $_CUR_active = null;
27
+	protected $_Payment_Method;
28
+
29
+	/**
30
+	 *
31
+	 * @param array  $props_n_values          incoming values
32
+	 * @param string $timezone                incoming timezone (if not set the timezone set for the website will be
33
+	 *                                        used.)
34
+	 * @param array  $date_formats            incoming date_formats in an array where the first value is the
35
+	 *                                        date_format and the second value is the time format
36
+	 * @return EE_Attendee
37
+	 */
38
+	public static function new_instance($props_n_values = array(), $timezone = null, $date_formats = array())
39
+	{
40
+		$has_object = parent::_check_for_object($props_n_values, __CLASS__, $timezone, $date_formats);
41
+		return $has_object ? $has_object : new self($props_n_values, false, $timezone, $date_formats);
42
+	}
43
+
44
+
45
+	/**
46
+	 * @param array  $props_n_values  incoming values from the database
47
+	 * @param string $timezone        incoming timezone as set by the model.  If not set the timezone for
48
+	 *                                the website will be used.
49
+	 * @return EE_Attendee
50
+	 */
51
+	public static function new_instance_from_db($props_n_values = array(), $timezone = null)
52
+	{
53
+		return new self($props_n_values, true, $timezone);
54
+	}
55
+
56
+	/**
57
+	 * Gets code
58
+	 *
59
+	 * @return string
60
+	 */
61
+	public function code()
62
+	{
63
+		return $this->get('CUR_code');
64
+	}
65
+
66
+	/**
67
+	 * Sets code
68
+	 *
69
+	 * @param string $code
70
+	 * @return boolean
71
+	 */
72
+	public function set_code($code)
73
+	{
74
+		return $this->set('CUR_code', $code);
75
+	}
76
+
77
+	/**
78
+	 * Gets active
79
+	 *
80
+	 * @return boolean
81
+	 */
82
+	public function active()
83
+	{
84
+		return $this->get('CUR_active');
85
+	}
86
+
87
+	/**
88
+	 * Sets active
89
+	 *
90
+	 * @param boolean $active
91
+	 * @return boolean
92
+	 */
93
+	public function set_active($active)
94
+	{
95
+		return $this->set('CUR_active', $active);
96
+	}
97
+
98
+	/**
99
+	 * Gets dec_plc
100
+	 *
101
+	 * @return int
102
+	 */
103
+	public function dec_plc()
104
+	{
105
+		return $this->get('CUR_dec_plc');
106
+	}
107
+
108
+	/**
109
+	 * Sets dec_plc
110
+	 *
111
+	 * @param int $dec_plc
112
+	 * @return boolean
113
+	 */
114
+	public function set_dec_plc($dec_plc)
115
+	{
116
+		return $this->set('CUR_dec_plc', $dec_plc);
117
+	}
118
+
119
+	/**
120
+	 * Gets plural
121
+	 *
122
+	 * @return string
123
+	 */
124
+	public function plural_name()
125
+	{
126
+		return $this->get('CUR_plural');
127
+	}
128
+
129
+	/**
130
+	 * Sets plural
131
+	 *
132
+	 * @param string $plural
133
+	 * @return boolean
134
+	 */
135
+	public function set_plural_name($plural)
136
+	{
137
+		return $this->set('CUR_plural', $plural);
138
+	}
139
+
140
+	/**
141
+	 * Gets sign
142
+	 *
143
+	 * @return string
144
+	 */
145
+	public function sign()
146
+	{
147
+		return $this->get('CUR_sign');
148
+	}
149
+
150
+	/**
151
+	 * Sets sign
152
+	 *
153
+	 * @param string $sign
154
+	 * @return boolean
155
+	 */
156
+	public function set_sign($sign)
157
+	{
158
+		return $this->set('CUR_sign', $sign);
159
+	}
160
+
161
+	/**
162
+	 * Gets single
163
+	 *
164
+	 * @return string
165
+	 */
166
+	public function singular_name()
167
+	{
168
+		return $this->get('CUR_single');
169
+	}
170
+
171
+	/**
172
+	 * Sets single
173
+	 *
174
+	 * @param string $single
175
+	 * @return boolean
176
+	 */
177
+	public function set_singular_name($single)
178
+	{
179
+		return $this->set('CUR_single', $single);
180
+	}
181
+
182
+	/**
183
+	 * Gets a prettier name
184
+	 *
185
+	 * @return string
186
+	 */
187
+	public function name()
188
+	{
189
+		return sprintf(__("%s (%s)", "event_espresso"), $this->code(), $this->plural_name());
190
+	}
191 191
 }
Please login to merge, or discard this patch.