Completed
Branch FET/allow-prices-to-be-more-pr... (276f1f)
by
unknown
17:42 queued 14:30
created
core/libraries/plugin_api/db/EEME_Base.lib.php 2 patches
Spacing   +17 added lines, -17 removed lines patch added patch discarded remove patch
@@ -71,7 +71,7 @@  discard block
 block discarded – undo
71 71
      */
72 72
     public function __construct()
73 73
     {
74
-        if (! $this->_model_name_extended) {
74
+        if ( ! $this->_model_name_extended) {
75 75
             throw new EE_Error(
76 76
                 esc_html__(
77 77
                     "When declaring a model extension, you must define its _model_name_extended property. It should be a model name like 'Attendee' or 'Event'",
@@ -79,7 +79,7 @@  discard block
 block discarded – undo
79 79
                 )
80 80
             );
81 81
         }
82
-        $construct_end_action = 'AHEE__EEM_' . $this->_model_name_extended . '__construct__end';
82
+        $construct_end_action = 'AHEE__EEM_'.$this->_model_name_extended.'__construct__end';
83 83
         if (did_action($construct_end_action)) {
84 84
             throw new EE_Error(
85 85
                 sprintf(
@@ -94,15 +94,15 @@  discard block
 block discarded – undo
94 94
             );
95 95
         }
96 96
         add_filter(
97
-            'FHEE__EEM_' . $this->_model_name_extended . '__construct__tables',
97
+            'FHEE__EEM_'.$this->_model_name_extended.'__construct__tables',
98 98
             array($this, 'add_extra_tables_on_filter')
99 99
         );
100 100
         add_filter(
101
-            'FHEE__EEM_' . $this->_model_name_extended . '__construct__fields',
101
+            'FHEE__EEM_'.$this->_model_name_extended.'__construct__fields',
102 102
             array($this, 'add_extra_fields_on_filter')
103 103
         );
104 104
         add_filter(
105
-            'FHEE__EEM_' . $this->_model_name_extended . '__construct__model_relations',
105
+            'FHEE__EEM_'.$this->_model_name_extended.'__construct__model_relations',
106 106
             array($this, 'add_extra_relations_on_filter')
107 107
         );
108 108
         $this->_register_extending_methods();
@@ -127,12 +127,12 @@  discard block
 block discarded – undo
127 127
     {
128 128
         if ($this->_extra_fields) {
129 129
             foreach ($this->_extra_fields as $table_alias => $fields) {
130
-                if (! isset($existing_fields[ $table_alias ])) {
131
-                    $existing_fields[ $table_alias ] = array();
130
+                if ( ! isset($existing_fields[$table_alias])) {
131
+                    $existing_fields[$table_alias] = array();
132 132
                 }
133
-                $existing_fields[ $table_alias ] = array_merge(
134
-                    (array) $existing_fields[ $table_alias ],
135
-                    $this->_extra_fields[ $table_alias ]
133
+                $existing_fields[$table_alias] = array_merge(
134
+                    (array) $existing_fields[$table_alias],
135
+                    $this->_extra_fields[$table_alias]
136 136
                 );
137 137
             }
138 138
         }
@@ -163,7 +163,7 @@  discard block
 block discarded – undo
163 163
                 $callback_name = "FHEE__EEM_{$this->_model_name_extended}__$method_name_on_model";
164 164
                 add_filter(
165 165
                     $callback_name,
166
-                    array($this, self::dynamic_callback_method_prefix . $method_name_on_model),
166
+                    array($this, self::dynamic_callback_method_prefix.$method_name_on_model),
167 167
                     10,
168 168
                     10
169 169
                 );
@@ -178,15 +178,15 @@  discard block
 block discarded – undo
178 178
     public function deregister()
179 179
     {
180 180
         remove_filter(
181
-            'FHEE__EEM_' . $this->_model_name_extended . '__construct__tables',
181
+            'FHEE__EEM_'.$this->_model_name_extended.'__construct__tables',
182 182
             array($this, 'add_extra_tables_on_filter')
183 183
         );
184 184
         remove_filter(
185
-            'FHEE__EEM_' . $this->_model_name_extended . '__construct__fields',
185
+            'FHEE__EEM_'.$this->_model_name_extended.'__construct__fields',
186 186
             array($this, 'add_extra_fields_on_filter')
187 187
         );
188 188
         remove_filter(
189
-            'FHEE__EEM_' . $this->_model_name_extended . '__construct__model_relations',
189
+            'FHEE__EEM_'.$this->_model_name_extended.'__construct__model_relations',
190 190
             array($this, 'add_extra_relations_on_filter')
191 191
         );
192 192
         $all_methods = get_class_methods(get_class($this));
@@ -196,13 +196,13 @@  discard block
 block discarded – undo
196 196
                 $callback_name = "FHEE__EEM_{$this->_model_name_extended}__$method_name_on_model";
197 197
                 remove_filter(
198 198
                     $callback_name,
199
-                    array($this, self::dynamic_callback_method_prefix . $method_name_on_model),
199
+                    array($this, self::dynamic_callback_method_prefix.$method_name_on_model),
200 200
                     10
201 201
                 );
202 202
             }
203 203
         }
204 204
         /** @var EEM_Base $model_to_reset */
205
-        $model_to_reset = 'EEM_' . $this->_model_name_extended;
205
+        $model_to_reset = 'EEM_'.$this->_model_name_extended;
206 206
         if (class_exists($model_to_reset)) {
207 207
             $model_to_reset::reset();
208 208
         }
@@ -224,7 +224,7 @@  discard block
 block discarded – undo
224 224
             // phpcs:disable WordPress.WP.I18n.SingleUnderscoreGetTextFunction
225 225
             $this->_ = $model_called;
226 226
             // phpcs:enable
227
-            $extending_method = self::extending_method_prefix . $method_called_on_model;
227
+            $extending_method = self::extending_method_prefix.$method_called_on_model;
228 228
             if (method_exists($this, $extending_method)) {
229 229
                 return call_user_func_array(array($this, $extending_method), $args_provided_to_method_on_model);
230 230
             } else {
Please login to merge, or discard this patch.
Indentation   +207 added lines, -207 removed lines patch added patch discarded remove patch
@@ -43,211 +43,211 @@
 block discarded – undo
43 43
  */
44 44
 abstract class EEME_Base
45 45
 {
46
-    const extending_method_prefix = 'ext_';
47
-    const dynamic_callback_method_prefix = 'dynamic_callback_method_';
48
-
49
-    protected $_extra_tables = array();
50
-    protected $_extra_fields = array();
51
-    protected $_extra_relations = array();
52
-
53
-    /**
54
-     * The model name that is extended (not classname)
55
-     *
56
-     * @var string
57
-     */
58
-    protected $_model_name_extended = null;
59
-
60
-    /**
61
-     * The model this extends
62
-     *
63
-     * @var EEM_Base
64
-     */
65
-    protected $_ = null;
66
-
67
-
68
-    /**
69
-     * @throws \EE_Error
70
-     */
71
-    public function __construct()
72
-    {
73
-        if (! $this->_model_name_extended) {
74
-            throw new EE_Error(
75
-                esc_html__(
76
-                    "When declaring a model extension, you must define its _model_name_extended property. It should be a model name like 'Attendee' or 'Event'",
77
-                    "event_espresso"
78
-                )
79
-            );
80
-        }
81
-        $construct_end_action = 'AHEE__EEM_' . $this->_model_name_extended . '__construct__end';
82
-        if (did_action($construct_end_action)) {
83
-            throw new EE_Error(
84
-                sprintf(
85
-                    esc_html__(
86
-                        "Hooked in model extension '%s' too late! The model %s has already been used! We know because the action %s has been fired",
87
-                        "event_espresso"
88
-                    ),
89
-                    get_class($this),
90
-                    $this->_model_name_extended,
91
-                    $construct_end_action
92
-                )
93
-            );
94
-        }
95
-        add_filter(
96
-            'FHEE__EEM_' . $this->_model_name_extended . '__construct__tables',
97
-            array($this, 'add_extra_tables_on_filter')
98
-        );
99
-        add_filter(
100
-            'FHEE__EEM_' . $this->_model_name_extended . '__construct__fields',
101
-            array($this, 'add_extra_fields_on_filter')
102
-        );
103
-        add_filter(
104
-            'FHEE__EEM_' . $this->_model_name_extended . '__construct__model_relations',
105
-            array($this, 'add_extra_relations_on_filter')
106
-        );
107
-        $this->_register_extending_methods();
108
-    }
109
-
110
-
111
-    /**
112
-     * @param array $existing_tables
113
-     * @return array
114
-     */
115
-    public function add_extra_tables_on_filter($existing_tables)
116
-    {
117
-        return array_merge((array) $existing_tables, $this->_extra_tables);
118
-    }
119
-
120
-
121
-    /**
122
-     * @param array $existing_fields
123
-     * @return array
124
-     */
125
-    public function add_extra_fields_on_filter($existing_fields)
126
-    {
127
-        if ($this->_extra_fields) {
128
-            foreach ($this->_extra_fields as $table_alias => $fields) {
129
-                if (! isset($existing_fields[ $table_alias ])) {
130
-                    $existing_fields[ $table_alias ] = array();
131
-                }
132
-                $existing_fields[ $table_alias ] = array_merge(
133
-                    (array) $existing_fields[ $table_alias ],
134
-                    $this->_extra_fields[ $table_alias ]
135
-                );
136
-            }
137
-        }
138
-        return $existing_fields;
139
-    }
140
-
141
-
142
-    /**
143
-     * @param array $existing_relations
144
-     * @return array
145
-     */
146
-    public function add_extra_relations_on_filter($existing_relations)
147
-    {
148
-        return array_merge((array) $existing_relations, $this->_extra_relations);
149
-    }
150
-
151
-
152
-    /**
153
-     * scans the child of EEME_Base for functions starting with ext_, and magically makes them functions on the
154
-     * model extended. (Internally uses filters, and the __call magic method)
155
-     */
156
-    protected function _register_extending_methods()
157
-    {
158
-        $all_methods = get_class_methods(get_class($this));
159
-        foreach ($all_methods as $method_name) {
160
-            if (strpos($method_name, self::extending_method_prefix) === 0) {
161
-                $method_name_on_model = str_replace(self::extending_method_prefix, '', $method_name);
162
-                $callback_name = "FHEE__EEM_{$this->_model_name_extended}__$method_name_on_model";
163
-                add_filter(
164
-                    $callback_name,
165
-                    array($this, self::dynamic_callback_method_prefix . $method_name_on_model),
166
-                    10,
167
-                    10
168
-                );
169
-            }
170
-        }
171
-    }
172
-
173
-    /**
174
-     * scans the child of EEME_Base for functions starting with ext_, and magically REMOVES them as functions on the
175
-     * model extended. (Internally uses filters, and the __call magic method)
176
-     */
177
-    public function deregister()
178
-    {
179
-        remove_filter(
180
-            'FHEE__EEM_' . $this->_model_name_extended . '__construct__tables',
181
-            array($this, 'add_extra_tables_on_filter')
182
-        );
183
-        remove_filter(
184
-            'FHEE__EEM_' . $this->_model_name_extended . '__construct__fields',
185
-            array($this, 'add_extra_fields_on_filter')
186
-        );
187
-        remove_filter(
188
-            'FHEE__EEM_' . $this->_model_name_extended . '__construct__model_relations',
189
-            array($this, 'add_extra_relations_on_filter')
190
-        );
191
-        $all_methods = get_class_methods(get_class($this));
192
-        foreach ($all_methods as $method_name) {
193
-            if (strpos($method_name, self::extending_method_prefix) === 0) {
194
-                $method_name_on_model = str_replace(self::extending_method_prefix, '', $method_name);
195
-                $callback_name = "FHEE__EEM_{$this->_model_name_extended}__$method_name_on_model";
196
-                remove_filter(
197
-                    $callback_name,
198
-                    array($this, self::dynamic_callback_method_prefix . $method_name_on_model),
199
-                    10
200
-                );
201
-            }
202
-        }
203
-        /** @var EEM_Base $model_to_reset */
204
-        $model_to_reset = 'EEM_' . $this->_model_name_extended;
205
-        if (class_exists($model_to_reset)) {
206
-            $model_to_reset::reset();
207
-        }
208
-    }
209
-
210
-
211
-    /**
212
-     * @param string $callback_method_name
213
-     * @param array  $args
214
-     * @return mixed
215
-     * @throws EE_Error
216
-     */
217
-    public function __call($callback_method_name, $args)
218
-    {
219
-        if (strpos($callback_method_name, self::dynamic_callback_method_prefix) === 0) {
220
-            // it's a dynamic callback for a method name
221
-            $method_called_on_model = str_replace(self::dynamic_callback_method_prefix, '', $callback_method_name);
222
-            list($original_return_val, $model_called, $args_provided_to_method_on_model) = (array) $args;
223
-            // phpcs:disable WordPress.WP.I18n.SingleUnderscoreGetTextFunction
224
-            $this->_ = $model_called;
225
-            // phpcs:enable
226
-            $extending_method = self::extending_method_prefix . $method_called_on_model;
227
-            if (method_exists($this, $extending_method)) {
228
-                return call_user_func_array(array($this, $extending_method), $args_provided_to_method_on_model);
229
-            } else {
230
-                throw new EE_Error(
231
-                    sprintf(
232
-                        esc_html__(
233
-                            "An odd error occurred. Model '%s' had a method called on it that it didn't recognize. So it passed it onto the model extension '%s' (because it had a function named '%s' which should be able to handle it), but the function '%s' doesnt exist!)",
234
-                            "event_espresso"
235
-                        ),
236
-                        $this->_model_name_extended,
237
-                        get_class($this),
238
-                        $extending_method,
239
-                        $extending_method
240
-                    )
241
-                );
242
-            }
243
-        } else {
244
-            throw new EE_Error(
245
-                sprintf(
246
-                    esc_html__("There is no method named '%s' on '%s'", "event_espresso"),
247
-                    $callback_method_name,
248
-                    get_class($this)
249
-                )
250
-            );
251
-        }
252
-    }
46
+	const extending_method_prefix = 'ext_';
47
+	const dynamic_callback_method_prefix = 'dynamic_callback_method_';
48
+
49
+	protected $_extra_tables = array();
50
+	protected $_extra_fields = array();
51
+	protected $_extra_relations = array();
52
+
53
+	/**
54
+	 * The model name that is extended (not classname)
55
+	 *
56
+	 * @var string
57
+	 */
58
+	protected $_model_name_extended = null;
59
+
60
+	/**
61
+	 * The model this extends
62
+	 *
63
+	 * @var EEM_Base
64
+	 */
65
+	protected $_ = null;
66
+
67
+
68
+	/**
69
+	 * @throws \EE_Error
70
+	 */
71
+	public function __construct()
72
+	{
73
+		if (! $this->_model_name_extended) {
74
+			throw new EE_Error(
75
+				esc_html__(
76
+					"When declaring a model extension, you must define its _model_name_extended property. It should be a model name like 'Attendee' or 'Event'",
77
+					"event_espresso"
78
+				)
79
+			);
80
+		}
81
+		$construct_end_action = 'AHEE__EEM_' . $this->_model_name_extended . '__construct__end';
82
+		if (did_action($construct_end_action)) {
83
+			throw new EE_Error(
84
+				sprintf(
85
+					esc_html__(
86
+						"Hooked in model extension '%s' too late! The model %s has already been used! We know because the action %s has been fired",
87
+						"event_espresso"
88
+					),
89
+					get_class($this),
90
+					$this->_model_name_extended,
91
+					$construct_end_action
92
+				)
93
+			);
94
+		}
95
+		add_filter(
96
+			'FHEE__EEM_' . $this->_model_name_extended . '__construct__tables',
97
+			array($this, 'add_extra_tables_on_filter')
98
+		);
99
+		add_filter(
100
+			'FHEE__EEM_' . $this->_model_name_extended . '__construct__fields',
101
+			array($this, 'add_extra_fields_on_filter')
102
+		);
103
+		add_filter(
104
+			'FHEE__EEM_' . $this->_model_name_extended . '__construct__model_relations',
105
+			array($this, 'add_extra_relations_on_filter')
106
+		);
107
+		$this->_register_extending_methods();
108
+	}
109
+
110
+
111
+	/**
112
+	 * @param array $existing_tables
113
+	 * @return array
114
+	 */
115
+	public function add_extra_tables_on_filter($existing_tables)
116
+	{
117
+		return array_merge((array) $existing_tables, $this->_extra_tables);
118
+	}
119
+
120
+
121
+	/**
122
+	 * @param array $existing_fields
123
+	 * @return array
124
+	 */
125
+	public function add_extra_fields_on_filter($existing_fields)
126
+	{
127
+		if ($this->_extra_fields) {
128
+			foreach ($this->_extra_fields as $table_alias => $fields) {
129
+				if (! isset($existing_fields[ $table_alias ])) {
130
+					$existing_fields[ $table_alias ] = array();
131
+				}
132
+				$existing_fields[ $table_alias ] = array_merge(
133
+					(array) $existing_fields[ $table_alias ],
134
+					$this->_extra_fields[ $table_alias ]
135
+				);
136
+			}
137
+		}
138
+		return $existing_fields;
139
+	}
140
+
141
+
142
+	/**
143
+	 * @param array $existing_relations
144
+	 * @return array
145
+	 */
146
+	public function add_extra_relations_on_filter($existing_relations)
147
+	{
148
+		return array_merge((array) $existing_relations, $this->_extra_relations);
149
+	}
150
+
151
+
152
+	/**
153
+	 * scans the child of EEME_Base for functions starting with ext_, and magically makes them functions on the
154
+	 * model extended. (Internally uses filters, and the __call magic method)
155
+	 */
156
+	protected function _register_extending_methods()
157
+	{
158
+		$all_methods = get_class_methods(get_class($this));
159
+		foreach ($all_methods as $method_name) {
160
+			if (strpos($method_name, self::extending_method_prefix) === 0) {
161
+				$method_name_on_model = str_replace(self::extending_method_prefix, '', $method_name);
162
+				$callback_name = "FHEE__EEM_{$this->_model_name_extended}__$method_name_on_model";
163
+				add_filter(
164
+					$callback_name,
165
+					array($this, self::dynamic_callback_method_prefix . $method_name_on_model),
166
+					10,
167
+					10
168
+				);
169
+			}
170
+		}
171
+	}
172
+
173
+	/**
174
+	 * scans the child of EEME_Base for functions starting with ext_, and magically REMOVES them as functions on the
175
+	 * model extended. (Internally uses filters, and the __call magic method)
176
+	 */
177
+	public function deregister()
178
+	{
179
+		remove_filter(
180
+			'FHEE__EEM_' . $this->_model_name_extended . '__construct__tables',
181
+			array($this, 'add_extra_tables_on_filter')
182
+		);
183
+		remove_filter(
184
+			'FHEE__EEM_' . $this->_model_name_extended . '__construct__fields',
185
+			array($this, 'add_extra_fields_on_filter')
186
+		);
187
+		remove_filter(
188
+			'FHEE__EEM_' . $this->_model_name_extended . '__construct__model_relations',
189
+			array($this, 'add_extra_relations_on_filter')
190
+		);
191
+		$all_methods = get_class_methods(get_class($this));
192
+		foreach ($all_methods as $method_name) {
193
+			if (strpos($method_name, self::extending_method_prefix) === 0) {
194
+				$method_name_on_model = str_replace(self::extending_method_prefix, '', $method_name);
195
+				$callback_name = "FHEE__EEM_{$this->_model_name_extended}__$method_name_on_model";
196
+				remove_filter(
197
+					$callback_name,
198
+					array($this, self::dynamic_callback_method_prefix . $method_name_on_model),
199
+					10
200
+				);
201
+			}
202
+		}
203
+		/** @var EEM_Base $model_to_reset */
204
+		$model_to_reset = 'EEM_' . $this->_model_name_extended;
205
+		if (class_exists($model_to_reset)) {
206
+			$model_to_reset::reset();
207
+		}
208
+	}
209
+
210
+
211
+	/**
212
+	 * @param string $callback_method_name
213
+	 * @param array  $args
214
+	 * @return mixed
215
+	 * @throws EE_Error
216
+	 */
217
+	public function __call($callback_method_name, $args)
218
+	{
219
+		if (strpos($callback_method_name, self::dynamic_callback_method_prefix) === 0) {
220
+			// it's a dynamic callback for a method name
221
+			$method_called_on_model = str_replace(self::dynamic_callback_method_prefix, '', $callback_method_name);
222
+			list($original_return_val, $model_called, $args_provided_to_method_on_model) = (array) $args;
223
+			// phpcs:disable WordPress.WP.I18n.SingleUnderscoreGetTextFunction
224
+			$this->_ = $model_called;
225
+			// phpcs:enable
226
+			$extending_method = self::extending_method_prefix . $method_called_on_model;
227
+			if (method_exists($this, $extending_method)) {
228
+				return call_user_func_array(array($this, $extending_method), $args_provided_to_method_on_model);
229
+			} else {
230
+				throw new EE_Error(
231
+					sprintf(
232
+						esc_html__(
233
+							"An odd error occurred. Model '%s' had a method called on it that it didn't recognize. So it passed it onto the model extension '%s' (because it had a function named '%s' which should be able to handle it), but the function '%s' doesnt exist!)",
234
+							"event_espresso"
235
+						),
236
+						$this->_model_name_extended,
237
+						get_class($this),
238
+						$extending_method,
239
+						$extending_method
240
+					)
241
+				);
242
+			}
243
+		} else {
244
+			throw new EE_Error(
245
+				sprintf(
246
+					esc_html__("There is no method named '%s' on '%s'", "event_espresso"),
247
+					$callback_method_name,
248
+					get_class($this)
249
+				)
250
+			);
251
+		}
252
+	}
253 253
 }
Please login to merge, or discard this patch.
core/libraries/plugin_api/db/EEE_Base_Class.lib.php 2 patches
Spacing   +5 added lines, -5 removed lines patch added patch discarded remove patch
@@ -49,7 +49,7 @@  discard block
 block discarded – undo
49 49
 
50 50
     public function __construct()
51 51
     {
52
-        if (! $this->_model_name_extended) {
52
+        if ( ! $this->_model_name_extended) {
53 53
             throw new EE_Error(
54 54
                 sprintf(
55 55
                     esc_html__(
@@ -59,7 +59,7 @@  discard block
 block discarded – undo
59 59
                 )
60 60
             );
61 61
         }
62
-        if (did_action('AHEE__EE_' . $this->_model_name_extended . '__construct__end')) {
62
+        if (did_action('AHEE__EE_'.$this->_model_name_extended.'__construct__end')) {
63 63
             throw new EE_Error(
64 64
                 sprintf(
65 65
                     esc_html__(
@@ -87,7 +87,7 @@  discard block
 block discarded – undo
87 87
                 $callback_name = "FHEE__EE_{$this->_model_name_extended}__$method_name_on_model";
88 88
                 add_filter(
89 89
                     $callback_name,
90
-                    array($this, self::dynamic_callback_method_prefix . $method_name_on_model),
90
+                    array($this, self::dynamic_callback_method_prefix.$method_name_on_model),
91 91
                     10,
92 92
                     10
93 93
                 );
@@ -108,7 +108,7 @@  discard block
 block discarded – undo
108 108
                 $callback_name = "FHEE__EE_{$this->_model_name_extended}__$method_name_on_model";
109 109
                 remove_filter(
110 110
                     $callback_name,
111
-                    array($this, self::dynamic_callback_method_prefix . $method_name_on_model),
111
+                    array($this, self::dynamic_callback_method_prefix.$method_name_on_model),
112 112
                     10
113 113
                 );
114 114
             }
@@ -127,7 +127,7 @@  discard block
 block discarded – undo
127 127
             $this->_ = $model_called;
128 128
             // phpcs:enable
129 129
             $args_provided_to_method_on_model = $args[2];
130
-            $extending_method = self::extending_method_prefix . $method_called_on_model;
130
+            $extending_method = self::extending_method_prefix.$method_called_on_model;
131 131
             if (method_exists($this, $extending_method)) {
132 132
                 return call_user_func_array(array($this, $extending_method), $args_provided_to_method_on_model);
133 133
             } else {
Please login to merge, or discard this patch.
Indentation   +117 added lines, -117 removed lines patch added patch discarded remove patch
@@ -31,126 +31,126 @@
 block discarded – undo
31 31
  */
32 32
 class EEE_Base_Class
33 33
 {
34
-    const extending_method_prefix = 'ext_';
35
-    const dynamic_callback_method_prefix = 'dynamic_callback_method_';
36
-    /**
37
-     * The model name that is extended (not classname)
38
-     *
39
-     * @var string
40
-     */
41
-    protected $_model_name_extended = null;
42
-    /**
43
-     * The model this extends
44
-     *
45
-     * @var EE_Base_Class
46
-     */
47
-    protected $_ = null;
34
+	const extending_method_prefix = 'ext_';
35
+	const dynamic_callback_method_prefix = 'dynamic_callback_method_';
36
+	/**
37
+	 * The model name that is extended (not classname)
38
+	 *
39
+	 * @var string
40
+	 */
41
+	protected $_model_name_extended = null;
42
+	/**
43
+	 * The model this extends
44
+	 *
45
+	 * @var EE_Base_Class
46
+	 */
47
+	protected $_ = null;
48 48
 
49
-    public function __construct()
50
-    {
51
-        if (! $this->_model_name_extended) {
52
-            throw new EE_Error(
53
-                sprintf(
54
-                    esc_html__(
55
-                        "When declaring a class extension, you must define its _model_name_extended property. It should be a model name like 'Attendee' or 'Event'",
56
-                        "event_espresso"
57
-                    )
58
-                )
59
-            );
60
-        }
61
-        if (did_action('AHEE__EE_' . $this->_model_name_extended . '__construct__end')) {
62
-            throw new EE_Error(
63
-                sprintf(
64
-                    esc_html__(
65
-                        "Hooked in model object extension '%s' too late! The model object %s has already been used!",
66
-                        "event_espresso"
67
-                    ),
68
-                    get_class($this),
69
-                    $this->_model_name_extended
70
-                )
71
-            );
72
-        }
73
-        $this->_register_extending_methods();
74
-    }
49
+	public function __construct()
50
+	{
51
+		if (! $this->_model_name_extended) {
52
+			throw new EE_Error(
53
+				sprintf(
54
+					esc_html__(
55
+						"When declaring a class extension, you must define its _model_name_extended property. It should be a model name like 'Attendee' or 'Event'",
56
+						"event_espresso"
57
+					)
58
+				)
59
+			);
60
+		}
61
+		if (did_action('AHEE__EE_' . $this->_model_name_extended . '__construct__end')) {
62
+			throw new EE_Error(
63
+				sprintf(
64
+					esc_html__(
65
+						"Hooked in model object extension '%s' too late! The model object %s has already been used!",
66
+						"event_espresso"
67
+					),
68
+					get_class($this),
69
+					$this->_model_name_extended
70
+				)
71
+			);
72
+		}
73
+		$this->_register_extending_methods();
74
+	}
75 75
 
76
-    /**
77
-     * scans the child of EEME_Base for functions starting with ext_, and magically makes them functions on the
78
-     * model extended. (Internally uses filters, and the __call magic method)
79
-     */
80
-    protected function _register_extending_methods()
81
-    {
82
-        $all_methods = get_class_methods(get_class($this));
83
-        foreach ($all_methods as $method_name) {
84
-            if (strpos($method_name, self::extending_method_prefix) === 0) {
85
-                $method_name_on_model = str_replace(self::extending_method_prefix, '', $method_name);
86
-                $callback_name = "FHEE__EE_{$this->_model_name_extended}__$method_name_on_model";
87
-                add_filter(
88
-                    $callback_name,
89
-                    array($this, self::dynamic_callback_method_prefix . $method_name_on_model),
90
-                    10,
91
-                    10
92
-                );
93
-            }
94
-        }
95
-    }
76
+	/**
77
+	 * scans the child of EEME_Base for functions starting with ext_, and magically makes them functions on the
78
+	 * model extended. (Internally uses filters, and the __call magic method)
79
+	 */
80
+	protected function _register_extending_methods()
81
+	{
82
+		$all_methods = get_class_methods(get_class($this));
83
+		foreach ($all_methods as $method_name) {
84
+			if (strpos($method_name, self::extending_method_prefix) === 0) {
85
+				$method_name_on_model = str_replace(self::extending_method_prefix, '', $method_name);
86
+				$callback_name = "FHEE__EE_{$this->_model_name_extended}__$method_name_on_model";
87
+				add_filter(
88
+					$callback_name,
89
+					array($this, self::dynamic_callback_method_prefix . $method_name_on_model),
90
+					10,
91
+					10
92
+				);
93
+			}
94
+		}
95
+	}
96 96
 
97
-    /**
98
-     * scans the child of EEME_Base for functions starting with ext_, and magically REMOVES them as functions on the
99
-     * model extended. (Internally uses filters, and the __call magic method)
100
-     */
101
-    public function deregister()
102
-    {
103
-        $all_methods = get_class_methods(get_class($this));
104
-        foreach ($all_methods as $method_name) {
105
-            if (strpos($method_name, self::extending_method_prefix) === 0) {
106
-                $method_name_on_model = str_replace(self::extending_method_prefix, '', $method_name);
107
-                $callback_name = "FHEE__EE_{$this->_model_name_extended}__$method_name_on_model";
108
-                remove_filter(
109
-                    $callback_name,
110
-                    array($this, self::dynamic_callback_method_prefix . $method_name_on_model),
111
-                    10
112
-                );
113
-            }
114
-        }
115
-    }
97
+	/**
98
+	 * scans the child of EEME_Base for functions starting with ext_, and magically REMOVES them as functions on the
99
+	 * model extended. (Internally uses filters, and the __call magic method)
100
+	 */
101
+	public function deregister()
102
+	{
103
+		$all_methods = get_class_methods(get_class($this));
104
+		foreach ($all_methods as $method_name) {
105
+			if (strpos($method_name, self::extending_method_prefix) === 0) {
106
+				$method_name_on_model = str_replace(self::extending_method_prefix, '', $method_name);
107
+				$callback_name = "FHEE__EE_{$this->_model_name_extended}__$method_name_on_model";
108
+				remove_filter(
109
+					$callback_name,
110
+					array($this, self::dynamic_callback_method_prefix . $method_name_on_model),
111
+					10
112
+				);
113
+			}
114
+		}
115
+	}
116 116
 
117 117
 
118
-    public function __call($callback_method_name, $args)
119
-    {
120
-        if (strpos($callback_method_name, self::dynamic_callback_method_prefix) === 0) {
121
-            // it's a dynamic callback for a method name
122
-            $method_called_on_model = str_replace(self::dynamic_callback_method_prefix, '', $callback_method_name);
123
-            $original_return_val = $args[0];
124
-            $model_called = $args[1];
125
-            // phpcs:disable WordPress.WP.I18n.SingleUnderscoreGetTextFunction
126
-            $this->_ = $model_called;
127
-            // phpcs:enable
128
-            $args_provided_to_method_on_model = $args[2];
129
-            $extending_method = self::extending_method_prefix . $method_called_on_model;
130
-            if (method_exists($this, $extending_method)) {
131
-                return call_user_func_array(array($this, $extending_method), $args_provided_to_method_on_model);
132
-            } else {
133
-                throw new EE_Error(
134
-                    sprintf(
135
-                        esc_html__(
136
-                            "An odd error occurred. Model '%s' had a method called on it that it didn't recognize. So it passed it onto the model extension '%s' (because it had a function named '%s' which should be able to handle it), but the function '%s' doesnt exist!)",
137
-                            "event_espresso"
138
-                        ),
139
-                        $this->_model_name_extended,
140
-                        get_class($this),
141
-                        $extending_method,
142
-                        $extending_method
143
-                    )
144
-                );
145
-            }
146
-        } else {
147
-            throw new EE_Error(
148
-                sprintf(
149
-                    esc_html__("There is no method named '%s' on '%s'", "event_espresso"),
150
-                    $callback_method_name,
151
-                    get_class($this)
152
-                )
153
-            );
154
-        }
155
-    }
118
+	public function __call($callback_method_name, $args)
119
+	{
120
+		if (strpos($callback_method_name, self::dynamic_callback_method_prefix) === 0) {
121
+			// it's a dynamic callback for a method name
122
+			$method_called_on_model = str_replace(self::dynamic_callback_method_prefix, '', $callback_method_name);
123
+			$original_return_val = $args[0];
124
+			$model_called = $args[1];
125
+			// phpcs:disable WordPress.WP.I18n.SingleUnderscoreGetTextFunction
126
+			$this->_ = $model_called;
127
+			// phpcs:enable
128
+			$args_provided_to_method_on_model = $args[2];
129
+			$extending_method = self::extending_method_prefix . $method_called_on_model;
130
+			if (method_exists($this, $extending_method)) {
131
+				return call_user_func_array(array($this, $extending_method), $args_provided_to_method_on_model);
132
+			} else {
133
+				throw new EE_Error(
134
+					sprintf(
135
+						esc_html__(
136
+							"An odd error occurred. Model '%s' had a method called on it that it didn't recognize. So it passed it onto the model extension '%s' (because it had a function named '%s' which should be able to handle it), but the function '%s' doesnt exist!)",
137
+							"event_espresso"
138
+						),
139
+						$this->_model_name_extended,
140
+						get_class($this),
141
+						$extending_method,
142
+						$extending_method
143
+					)
144
+				);
145
+			}
146
+		} else {
147
+			throw new EE_Error(
148
+				sprintf(
149
+					esc_html__("There is no method named '%s' on '%s'", "event_espresso"),
150
+					$callback_method_name,
151
+					get_class($this)
152
+				)
153
+			);
154
+		}
155
+	}
156 156
 }
Please login to merge, or discard this patch.
core/libraries/plugin_api/EE_Register_Addon.lib.php 2 patches
Spacing   +116 added lines, -116 removed lines patch added patch discarded remove patch
@@ -70,15 +70,15 @@  discard block
 block discarded – undo
70 70
         // offsets:    0 . 1 . 2 . 3 . 4
71 71
         $version_parts = explode('.', $min_core_version);
72 72
         // check they specified the micro version (after 2nd period)
73
-        if (! isset($version_parts[2])) {
73
+        if ( ! isset($version_parts[2])) {
74 74
             $version_parts[2] = '0';
75 75
         }
76 76
         // if they didn't specify the 'p', or 'rc' part. Just assume the lowest possible
77 77
         // soon we can assume that's 'rc', but this current version is 'alpha'
78
-        if (! isset($version_parts[3])) {
78
+        if ( ! isset($version_parts[3])) {
79 79
             $version_parts[3] = 'dev';
80 80
         }
81
-        if (! isset($version_parts[4])) {
81
+        if ( ! isset($version_parts[4])) {
82 82
             $version_parts[4] = '000';
83 83
         }
84 84
         return implode('.', $version_parts);
@@ -265,7 +265,7 @@  discard block
 block discarded – undo
265 265
         EE_Register_Addon::_parse_pue_options($addon_name, $class_name, $setup_args);
266 266
         // does this addon work with this version of core or WordPress ?
267 267
         // does this addon work with this version of core or WordPress ?
268
-        if (! EE_Register_Addon::_addon_is_compatible($addon_name, $addon_settings)) {
268
+        if ( ! EE_Register_Addon::_addon_is_compatible($addon_name, $addon_settings)) {
269 269
             return;
270 270
         }
271 271
         // register namespaces
@@ -329,7 +329,7 @@  discard block
 block discarded – undo
329 329
                 )
330 330
             );
331 331
         }
332
-        if (! isset($setup_args['main_file_path']) || empty($setup_args['main_file_path'])) {
332
+        if ( ! isset($setup_args['main_file_path']) || empty($setup_args['main_file_path'])) {
333 333
             throw new EE_Error(
334 334
                 sprintf(
335 335
                     esc_html__(
@@ -341,7 +341,7 @@  discard block
 block discarded – undo
341 341
             );
342 342
         }
343 343
         // check that addon has not already been registered with that name
344
-        if (isset(self::$_settings[ $addon_name ]) && ! did_action('activate_plugin')) {
344
+        if (isset(self::$_settings[$addon_name]) && ! did_action('activate_plugin')) {
345 345
             throw new EE_Error(
346 346
                 sprintf(
347 347
                     esc_html__(
@@ -373,7 +373,7 @@  discard block
 block discarded – undo
373 373
         // check if classname is fully  qualified or is a legacy classname already prefixed with 'EE_'
374 374
         return strpos($class_name, '\\') || strpos($class_name, 'EE_') === 0
375 375
             ? $class_name
376
-            : 'EE_' . $class_name;
376
+            : 'EE_'.$class_name;
377 377
     }
378 378
 
379 379
 
@@ -539,9 +539,9 @@  discard block
 block discarded – undo
539 539
         $incompatibility_message = '';
540 540
         // check whether this addon version is compatible with EE core
541 541
         if (
542
-            isset(EE_Register_Addon::$_incompatible_addons[ $addon_name ])
542
+            isset(EE_Register_Addon::$_incompatible_addons[$addon_name])
543 543
             && ! self::_meets_min_core_version_requirement(
544
-                EE_Register_Addon::$_incompatible_addons[ $addon_name ],
544
+                EE_Register_Addon::$_incompatible_addons[$addon_name],
545 545
                 $addon_settings['version']
546 546
             )
547 547
         ) {
@@ -552,7 +552,7 @@  discard block
 block discarded – undo
552 552
                 ),
553 553
                 $addon_name,
554 554
                 '<br />',
555
-                EE_Register_Addon::$_incompatible_addons[ $addon_name ],
555
+                EE_Register_Addon::$_incompatible_addons[$addon_name],
556 556
                 '<span style="font-weight: bold; color: #D54E21;">',
557 557
                 '</span><br />'
558 558
             );
@@ -584,7 +584,7 @@  discard block
 block discarded – undo
584 584
                 '</span><br />'
585 585
             );
586 586
         }
587
-        if (! empty($incompatibility_message)) {
587
+        if ( ! empty($incompatibility_message)) {
588 588
             // remove 'activate' from the REQUEST
589 589
             // so WP doesn't erroneously tell the user the plugin activated fine when it didn't
590 590
             /** @var RequestInterface $request */
@@ -614,11 +614,11 @@  discard block
 block discarded – undo
614 614
      */
615 615
     private static function _parse_pue_options($addon_name, $class_name, array $setup_args)
616 616
     {
617
-        if (! empty($setup_args['pue_options'])) {
618
-            self::$_settings[ $addon_name ]['pue_options'] = array(
617
+        if ( ! empty($setup_args['pue_options'])) {
618
+            self::$_settings[$addon_name]['pue_options'] = array(
619 619
                 'pue_plugin_slug' => isset($setup_args['pue_options']['pue_plugin_slug'])
620 620
                     ? (string) $setup_args['pue_options']['pue_plugin_slug']
621
-                    : 'espresso_' . strtolower($class_name),
621
+                    : 'espresso_'.strtolower($class_name),
622 622
                 'plugin_basename' => isset($setup_args['pue_options']['plugin_basename'])
623 623
                     ? (string) $setup_args['pue_options']['plugin_basename']
624 624
                     : plugin_basename($setup_args['main_file_path']),
@@ -677,12 +677,12 @@  discard block
 block discarded – undo
677 677
             // Note: the presence of pue_options in the addon registration options will initialize the $_settings
678 678
             // property for the add-on, but the add-on is only partially initialized.  Hence, the additional check.
679 679
             if (
680
-                ! isset(self::$_settings[ $addon_name ])
681
-                || (isset(self::$_settings[ $addon_name ])
682
-                    && ! isset(self::$_settings[ $addon_name ]['class_name'])
680
+                ! isset(self::$_settings[$addon_name])
681
+                || (isset(self::$_settings[$addon_name])
682
+                    && ! isset(self::$_settings[$addon_name]['class_name'])
683 683
                 )
684 684
             ) {
685
-                self::$_settings[ $addon_name ] = $addon_settings;
685
+                self::$_settings[$addon_name] = $addon_settings;
686 686
                 $addon = self::_load_and_init_addon_class($addon_name);
687 687
                 $addon->set_activation_indicator_option();
688 688
                 // dont bother setting up the rest of the addon.
@@ -708,10 +708,10 @@  discard block
 block discarded – undo
708 708
             );
709 709
         }
710 710
         // make sure addon settings are set correctly without overwriting anything existing
711
-        if (isset(self::$_settings[ $addon_name ])) {
712
-            self::$_settings[ $addon_name ] += $addon_settings;
711
+        if (isset(self::$_settings[$addon_name])) {
712
+            self::$_settings[$addon_name] += $addon_settings;
713 713
         } else {
714
-            self::$_settings[ $addon_name ] = $addon_settings;
714
+            self::$_settings[$addon_name] = $addon_settings;
715 715
         }
716 716
         return false;
717 717
     }
@@ -724,13 +724,13 @@  discard block
 block discarded – undo
724 724
      */
725 725
     private static function _setup_autoloaders($addon_name)
726 726
     {
727
-        if (! empty(self::$_settings[ $addon_name ]['autoloader_paths'])) {
727
+        if ( ! empty(self::$_settings[$addon_name]['autoloader_paths'])) {
728 728
             // setup autoloader for single file
729
-            EEH_Autoloader::instance()->register_autoloader(self::$_settings[ $addon_name ]['autoloader_paths']);
729
+            EEH_Autoloader::instance()->register_autoloader(self::$_settings[$addon_name]['autoloader_paths']);
730 730
         }
731 731
         // setup autoloaders for folders
732
-        if (! empty(self::$_settings[ $addon_name ]['autoloader_folders'])) {
733
-            foreach ((array) self::$_settings[ $addon_name ]['autoloader_folders'] as $autoloader_folder) {
732
+        if ( ! empty(self::$_settings[$addon_name]['autoloader_folders'])) {
733
+            foreach ((array) self::$_settings[$addon_name]['autoloader_folders'] as $autoloader_folder) {
734 734
                 EEH_Autoloader::register_autoloaders_for_each_file_in_folder($autoloader_folder);
735 735
             }
736 736
         }
@@ -748,27 +748,27 @@  discard block
 block discarded – undo
748 748
     {
749 749
         // register new models
750 750
         if (
751
-            ! empty(self::$_settings[ $addon_name ]['model_paths'])
752
-            || ! empty(self::$_settings[ $addon_name ]['class_paths'])
751
+            ! empty(self::$_settings[$addon_name]['model_paths'])
752
+            || ! empty(self::$_settings[$addon_name]['class_paths'])
753 753
         ) {
754 754
             EE_Register_Model::register(
755 755
                 $addon_name,
756 756
                 array(
757
-                    'model_paths' => self::$_settings[ $addon_name ]['model_paths'],
758
-                    'class_paths' => self::$_settings[ $addon_name ]['class_paths'],
757
+                    'model_paths' => self::$_settings[$addon_name]['model_paths'],
758
+                    'class_paths' => self::$_settings[$addon_name]['class_paths'],
759 759
                 )
760 760
             );
761 761
         }
762 762
         // register model extensions
763 763
         if (
764
-            ! empty(self::$_settings[ $addon_name ]['model_extension_paths'])
765
-            || ! empty(self::$_settings[ $addon_name ]['class_extension_paths'])
764
+            ! empty(self::$_settings[$addon_name]['model_extension_paths'])
765
+            || ! empty(self::$_settings[$addon_name]['class_extension_paths'])
766 766
         ) {
767 767
             EE_Register_Model_Extensions::register(
768 768
                 $addon_name,
769 769
                 array(
770
-                    'model_extension_paths' => self::$_settings[ $addon_name ]['model_extension_paths'],
771
-                    'class_extension_paths' => self::$_settings[ $addon_name ]['class_extension_paths'],
770
+                    'model_extension_paths' => self::$_settings[$addon_name]['model_extension_paths'],
771
+                    'class_extension_paths' => self::$_settings[$addon_name]['class_extension_paths'],
772 772
                 )
773 773
             );
774 774
         }
@@ -783,10 +783,10 @@  discard block
 block discarded – undo
783 783
     private static function _register_data_migration_scripts($addon_name)
784 784
     {
785 785
         // setup DMS
786
-        if (! empty(self::$_settings[ $addon_name ]['dms_paths'])) {
786
+        if ( ! empty(self::$_settings[$addon_name]['dms_paths'])) {
787 787
             EE_Register_Data_Migration_Scripts::register(
788 788
                 $addon_name,
789
-                array('dms_paths' => self::$_settings[ $addon_name ]['dms_paths'])
789
+                array('dms_paths' => self::$_settings[$addon_name]['dms_paths'])
790 790
             );
791 791
         }
792 792
     }
@@ -800,12 +800,12 @@  discard block
 block discarded – undo
800 800
     private static function _register_config($addon_name)
801 801
     {
802 802
         // if config_class is present let's register config.
803
-        if (! empty(self::$_settings[ $addon_name ]['config_class'])) {
803
+        if ( ! empty(self::$_settings[$addon_name]['config_class'])) {
804 804
             EE_Register_Config::register(
805
-                self::$_settings[ $addon_name ]['config_class'],
805
+                self::$_settings[$addon_name]['config_class'],
806 806
                 array(
807
-                    'config_section' => self::$_settings[ $addon_name ]['config_section'],
808
-                    'config_name'    => self::$_settings[ $addon_name ]['config_name'],
807
+                    'config_section' => self::$_settings[$addon_name]['config_section'],
808
+                    'config_name'    => self::$_settings[$addon_name]['config_name'],
809 809
                 )
810 810
             );
811 811
         }
@@ -819,10 +819,10 @@  discard block
 block discarded – undo
819 819
      */
820 820
     private static function _register_admin_pages($addon_name)
821 821
     {
822
-        if (! empty(self::$_settings[ $addon_name ]['admin_path'])) {
822
+        if ( ! empty(self::$_settings[$addon_name]['admin_path'])) {
823 823
             EE_Register_Admin_Page::register(
824 824
                 $addon_name,
825
-                array('page_path' => self::$_settings[ $addon_name ]['admin_path'])
825
+                array('page_path' => self::$_settings[$addon_name]['admin_path'])
826 826
             );
827 827
         }
828 828
     }
@@ -835,10 +835,10 @@  discard block
 block discarded – undo
835 835
      */
836 836
     private static function _register_modules($addon_name)
837 837
     {
838
-        if (! empty(self::$_settings[ $addon_name ]['module_paths'])) {
838
+        if ( ! empty(self::$_settings[$addon_name]['module_paths'])) {
839 839
             EE_Register_Module::register(
840 840
                 $addon_name,
841
-                array('module_paths' => self::$_settings[ $addon_name ]['module_paths'])
841
+                array('module_paths' => self::$_settings[$addon_name]['module_paths'])
842 842
             );
843 843
         }
844 844
     }
@@ -852,16 +852,16 @@  discard block
 block discarded – undo
852 852
     private static function _register_shortcodes($addon_name)
853 853
     {
854 854
         if (
855
-            ! empty(self::$_settings[ $addon_name ]['shortcode_paths'])
856
-            || ! empty(self::$_settings[ $addon_name ]['shortcode_fqcns'])
855
+            ! empty(self::$_settings[$addon_name]['shortcode_paths'])
856
+            || ! empty(self::$_settings[$addon_name]['shortcode_fqcns'])
857 857
         ) {
858 858
             EE_Register_Shortcode::register(
859 859
                 $addon_name,
860 860
                 array(
861
-                    'shortcode_paths' => isset(self::$_settings[ $addon_name ]['shortcode_paths'])
862
-                        ? self::$_settings[ $addon_name ]['shortcode_paths'] : array(),
863
-                    'shortcode_fqcns' => isset(self::$_settings[ $addon_name ]['shortcode_fqcns'])
864
-                        ? self::$_settings[ $addon_name ]['shortcode_fqcns'] : array(),
861
+                    'shortcode_paths' => isset(self::$_settings[$addon_name]['shortcode_paths'])
862
+                        ? self::$_settings[$addon_name]['shortcode_paths'] : array(),
863
+                    'shortcode_fqcns' => isset(self::$_settings[$addon_name]['shortcode_fqcns'])
864
+                        ? self::$_settings[$addon_name]['shortcode_fqcns'] : array(),
865 865
                 )
866 866
             );
867 867
         }
@@ -875,10 +875,10 @@  discard block
 block discarded – undo
875 875
      */
876 876
     private static function _register_widgets($addon_name)
877 877
     {
878
-        if (! empty(self::$_settings[ $addon_name ]['widget_paths'])) {
878
+        if ( ! empty(self::$_settings[$addon_name]['widget_paths'])) {
879 879
             EE_Register_Widget::register(
880 880
                 $addon_name,
881
-                array('widget_paths' => self::$_settings[ $addon_name ]['widget_paths'])
881
+                array('widget_paths' => self::$_settings[$addon_name]['widget_paths'])
882 882
             );
883 883
         }
884 884
     }
@@ -891,12 +891,12 @@  discard block
 block discarded – undo
891 891
      */
892 892
     private static function _register_capabilities($addon_name)
893 893
     {
894
-        if (! empty(self::$_settings[ $addon_name ]['capabilities'])) {
894
+        if ( ! empty(self::$_settings[$addon_name]['capabilities'])) {
895 895
             EE_Register_Capabilities::register(
896 896
                 $addon_name,
897 897
                 array(
898
-                    'capabilities'    => self::$_settings[ $addon_name ]['capabilities'],
899
-                    'capability_maps' => self::$_settings[ $addon_name ]['capability_maps'],
898
+                    'capabilities'    => self::$_settings[$addon_name]['capabilities'],
899
+                    'capability_maps' => self::$_settings[$addon_name]['capability_maps'],
900 900
                 )
901 901
             );
902 902
         }
@@ -909,7 +909,7 @@  discard block
 block discarded – undo
909 909
      */
910 910
     private static function _register_message_types($addon_name)
911 911
     {
912
-        if (! empty(self::$_settings[ $addon_name ]['message_types'])) {
912
+        if ( ! empty(self::$_settings[$addon_name]['message_types'])) {
913 913
             add_action(
914 914
                 'EE_Brewing_Regular___messages_caf',
915 915
                 array('EE_Register_Addon', 'register_message_types')
@@ -926,15 +926,15 @@  discard block
 block discarded – undo
926 926
     private static function _register_custom_post_types($addon_name)
927 927
     {
928 928
         if (
929
-            ! empty(self::$_settings[ $addon_name ]['custom_post_types'])
930
-            || ! empty(self::$_settings[ $addon_name ]['custom_taxonomies'])
929
+            ! empty(self::$_settings[$addon_name]['custom_post_types'])
930
+            || ! empty(self::$_settings[$addon_name]['custom_taxonomies'])
931 931
         ) {
932 932
             EE_Register_CPT::register(
933 933
                 $addon_name,
934 934
                 array(
935
-                    'cpts'          => self::$_settings[ $addon_name ]['custom_post_types'],
936
-                    'cts'           => self::$_settings[ $addon_name ]['custom_taxonomies'],
937
-                    'default_terms' => self::$_settings[ $addon_name ]['default_terms'],
935
+                    'cpts'          => self::$_settings[$addon_name]['custom_post_types'],
936
+                    'cts'           => self::$_settings[$addon_name]['custom_taxonomies'],
937
+                    'default_terms' => self::$_settings[$addon_name]['default_terms'],
938 938
                 )
939 939
             );
940 940
         }
@@ -952,10 +952,10 @@  discard block
 block discarded – undo
952 952
      */
953 953
     private static function _register_payment_methods($addon_name)
954 954
     {
955
-        if (! empty(self::$_settings[ $addon_name ]['payment_method_paths'])) {
955
+        if ( ! empty(self::$_settings[$addon_name]['payment_method_paths'])) {
956 956
             EE_Register_Payment_Method::register(
957 957
                 $addon_name,
958
-                array('payment_method_paths' => self::$_settings[ $addon_name ]['payment_method_paths'])
958
+                array('payment_method_paths' => self::$_settings[$addon_name]['payment_method_paths'])
959 959
             );
960 960
         }
961 961
     }
@@ -971,10 +971,10 @@  discard block
 block discarded – undo
971 971
      */
972 972
     private static function registerPrivacyPolicies($addon_name)
973 973
     {
974
-        if (! empty(self::$_settings[ $addon_name ]['privacy_policies'])) {
974
+        if ( ! empty(self::$_settings[$addon_name]['privacy_policies'])) {
975 975
             EE_Register_Privacy_Policy::register(
976 976
                 $addon_name,
977
-                self::$_settings[ $addon_name ]['privacy_policies']
977
+                self::$_settings[$addon_name]['privacy_policies']
978 978
             );
979 979
         }
980 980
     }
@@ -986,10 +986,10 @@  discard block
 block discarded – undo
986 986
      */
987 987
     private static function registerPersonalDataExporters($addon_name)
988 988
     {
989
-        if (! empty(self::$_settings[ $addon_name ]['personal_data_exporters'])) {
989
+        if ( ! empty(self::$_settings[$addon_name]['personal_data_exporters'])) {
990 990
             EE_Register_Personal_Data_Eraser::register(
991 991
                 $addon_name,
992
-                self::$_settings[ $addon_name ]['personal_data_exporters']
992
+                self::$_settings[$addon_name]['personal_data_exporters']
993 993
             );
994 994
         }
995 995
     }
@@ -1001,10 +1001,10 @@  discard block
 block discarded – undo
1001 1001
      */
1002 1002
     private static function registerPersonalDataErasers($addon_name)
1003 1003
     {
1004
-        if (! empty(self::$_settings[ $addon_name ]['personal_data_erasers'])) {
1004
+        if ( ! empty(self::$_settings[$addon_name]['personal_data_erasers'])) {
1005 1005
             EE_Register_Personal_Data_Eraser::register(
1006 1006
                 $addon_name,
1007
-                self::$_settings[ $addon_name ]['personal_data_erasers']
1007
+                self::$_settings[$addon_name]['personal_data_erasers']
1008 1008
             );
1009 1009
         }
1010 1010
     }
@@ -1022,10 +1022,10 @@  discard block
 block discarded – undo
1022 1022
     private static function _load_and_init_addon_class($addon_name)
1023 1023
     {
1024 1024
         $addon = LoaderFactory::getLoader()->getShared(
1025
-            self::$_settings[ $addon_name ]['class_name'],
1025
+            self::$_settings[$addon_name]['class_name'],
1026 1026
             array('EE_Registry::create(addon)' => true)
1027 1027
         );
1028
-        if (! $addon instanceof EE_Addon) {
1028
+        if ( ! $addon instanceof EE_Addon) {
1029 1029
             throw new DomainException(
1030 1030
                 sprintf(
1031 1031
                     esc_html__(
@@ -1044,28 +1044,28 @@  discard block
 block discarded – undo
1044 1044
         EE_Register_Addon::injectAddonDomain($addon_name, $addon);
1045 1045
 
1046 1046
         $addon->set_name($addon_name);
1047
-        $addon->set_plugin_slug(self::$_settings[ $addon_name ]['plugin_slug']);
1048
-        $addon->set_plugin_basename(self::$_settings[ $addon_name ]['plugin_basename']);
1049
-        $addon->set_main_plugin_file(self::$_settings[ $addon_name ]['main_file_path']);
1050
-        $addon->set_plugin_action_slug(self::$_settings[ $addon_name ]['plugin_action_slug']);
1051
-        $addon->set_plugins_page_row(self::$_settings[ $addon_name ]['plugins_page_row']);
1052
-        $addon->set_version(self::$_settings[ $addon_name ]['version']);
1053
-        $addon->set_min_core_version(self::_effective_version(self::$_settings[ $addon_name ]['min_core_version']));
1054
-        $addon->set_config_section(self::$_settings[ $addon_name ]['config_section']);
1055
-        $addon->set_config_class(self::$_settings[ $addon_name ]['config_class']);
1056
-        $addon->set_config_name(self::$_settings[ $addon_name ]['config_name']);
1047
+        $addon->set_plugin_slug(self::$_settings[$addon_name]['plugin_slug']);
1048
+        $addon->set_plugin_basename(self::$_settings[$addon_name]['plugin_basename']);
1049
+        $addon->set_main_plugin_file(self::$_settings[$addon_name]['main_file_path']);
1050
+        $addon->set_plugin_action_slug(self::$_settings[$addon_name]['plugin_action_slug']);
1051
+        $addon->set_plugins_page_row(self::$_settings[$addon_name]['plugins_page_row']);
1052
+        $addon->set_version(self::$_settings[$addon_name]['version']);
1053
+        $addon->set_min_core_version(self::_effective_version(self::$_settings[$addon_name]['min_core_version']));
1054
+        $addon->set_config_section(self::$_settings[$addon_name]['config_section']);
1055
+        $addon->set_config_class(self::$_settings[$addon_name]['config_class']);
1056
+        $addon->set_config_name(self::$_settings[$addon_name]['config_name']);
1057 1057
         // setup the add-on's pue_slug if we have one.
1058
-        if (! empty(self::$_settings[ $addon_name ]['pue_options']['pue_plugin_slug'])) {
1059
-            $addon->setPueSlug(self::$_settings[ $addon_name ]['pue_options']['pue_plugin_slug']);
1058
+        if ( ! empty(self::$_settings[$addon_name]['pue_options']['pue_plugin_slug'])) {
1059
+            $addon->setPueSlug(self::$_settings[$addon_name]['pue_options']['pue_plugin_slug']);
1060 1060
         }
1061 1061
         // unfortunately this can't be hooked in upon construction,
1062 1062
         // because we don't have the plugin's mainfile path upon construction.
1063 1063
         register_deactivation_hook($addon->get_main_plugin_file(), array($addon, 'deactivation'));
1064 1064
         // call any additional admin_callback functions during load_admin_controller hook
1065
-        if (! empty(self::$_settings[ $addon_name ]['admin_callback'])) {
1065
+        if ( ! empty(self::$_settings[$addon_name]['admin_callback'])) {
1066 1066
             add_action(
1067 1067
                 'AHEE__EE_System__load_controllers__load_admin_controllers',
1068
-                array($addon, self::$_settings[ $addon_name ]['admin_callback'])
1068
+                array($addon, self::$_settings[$addon_name]['admin_callback'])
1069 1069
             );
1070 1070
         }
1071 1071
         return $addon;
@@ -1081,19 +1081,19 @@  discard block
 block discarded – undo
1081 1081
     {
1082 1082
         if ($addon instanceof RequiresDomainInterface && $addon->domain() === null) {
1083 1083
             // using supplied Domain object
1084
-            $domain = self::$_settings[ $addon_name ]['domain'] instanceof DomainInterface
1085
-                ? self::$_settings[ $addon_name ]['domain']
1084
+            $domain = self::$_settings[$addon_name]['domain'] instanceof DomainInterface
1085
+                ? self::$_settings[$addon_name]['domain']
1086 1086
                 : null;
1087 1087
             // or construct one using Domain FQCN
1088
-            if ($domain === null && self::$_settings[ $addon_name ]['domain_fqcn'] !== '') {
1088
+            if ($domain === null && self::$_settings[$addon_name]['domain_fqcn'] !== '') {
1089 1089
                 $domain = LoaderFactory::getLoader()->getShared(
1090
-                    self::$_settings[ $addon_name ]['domain_fqcn'],
1090
+                    self::$_settings[$addon_name]['domain_fqcn'],
1091 1091
                     [
1092 1092
                         new EventEspresso\core\domain\values\FilePath(
1093
-                            self::$_settings[ $addon_name ]['main_file_path']
1093
+                            self::$_settings[$addon_name]['main_file_path']
1094 1094
                         ),
1095 1095
                         EventEspresso\core\domain\values\Version::fromString(
1096
-                            self::$_settings[ $addon_name ]['version']
1096
+                            self::$_settings[$addon_name]['version']
1097 1097
                         ),
1098 1098
                     ]
1099 1099
                 );
@@ -1116,11 +1116,11 @@  discard block
 block discarded – undo
1116 1116
     public static function load_pue_update()
1117 1117
     {
1118 1118
         // load PUE client
1119
-        require_once EE_THIRD_PARTY . 'pue/pue-client.php';
1119
+        require_once EE_THIRD_PARTY.'pue/pue-client.php';
1120 1120
         $license_server = defined('PUE_UPDATES_ENDPOINT') ? PUE_UPDATES_ENDPOINT : 'https://eventespresso.com';
1121 1121
         // cycle thru settings
1122 1122
         foreach (self::$_settings as $settings) {
1123
-            if (! empty($settings['pue_options'])) {
1123
+            if ( ! empty($settings['pue_options'])) {
1124 1124
                 // initiate the class and start the plugin update engine!
1125 1125
                 new PluginUpdateEngineChecker(
1126 1126
                     // host file URL
@@ -1128,7 +1128,7 @@  discard block
 block discarded – undo
1128 1128
                     // plugin slug(s)
1129 1129
                     array(
1130 1130
                         'premium'    => array('p' => $settings['pue_options']['pue_plugin_slug']),
1131
-                        'prerelease' => array('beta' => $settings['pue_options']['pue_plugin_slug'] . '-pr'),
1131
+                        'prerelease' => array('beta' => $settings['pue_options']['pue_plugin_slug'].'-pr'),
1132 1132
                     ),
1133 1133
                     // options
1134 1134
                     array(
@@ -1157,7 +1157,7 @@  discard block
 block discarded – undo
1157 1157
     public static function register_message_types()
1158 1158
     {
1159 1159
         foreach (self::$_settings as $settings) {
1160
-            if (! empty($settings['message_types'])) {
1160
+            if ( ! empty($settings['message_types'])) {
1161 1161
                 foreach ((array) $settings['message_types'] as $message_type => $message_type_settings) {
1162 1162
                     EE_Register_Message_Type::register($message_type, $message_type_settings);
1163 1163
                 }
@@ -1178,74 +1178,74 @@  discard block
 block discarded – undo
1178 1178
      */
1179 1179
     public static function deregister($addon_name = '')
1180 1180
     {
1181
-        if (isset(self::$_settings[ $addon_name ]['class_name'])) {
1181
+        if (isset(self::$_settings[$addon_name]['class_name'])) {
1182 1182
             try {
1183 1183
                 do_action('AHEE__EE_Register_Addon__deregister__before', $addon_name);
1184
-                $class_name = self::$_settings[ $addon_name ]['class_name'];
1185
-                if (! empty(self::$_settings[ $addon_name ]['dms_paths'])) {
1184
+                $class_name = self::$_settings[$addon_name]['class_name'];
1185
+                if ( ! empty(self::$_settings[$addon_name]['dms_paths'])) {
1186 1186
                     // setup DMS
1187 1187
                     EE_Register_Data_Migration_Scripts::deregister($addon_name);
1188 1188
                 }
1189
-                if (! empty(self::$_settings[ $addon_name ]['admin_path'])) {
1189
+                if ( ! empty(self::$_settings[$addon_name]['admin_path'])) {
1190 1190
                     // register admin page
1191 1191
                     EE_Register_Admin_Page::deregister($addon_name);
1192 1192
                 }
1193
-                if (! empty(self::$_settings[ $addon_name ]['module_paths'])) {
1193
+                if ( ! empty(self::$_settings[$addon_name]['module_paths'])) {
1194 1194
                     // add to list of modules to be registered
1195 1195
                     EE_Register_Module::deregister($addon_name);
1196 1196
                 }
1197 1197
                 if (
1198
-                    ! empty(self::$_settings[ $addon_name ]['shortcode_paths'])
1199
-                    || ! empty(self::$_settings[ $addon_name ]['shortcode_fqcns'])
1198
+                    ! empty(self::$_settings[$addon_name]['shortcode_paths'])
1199
+                    || ! empty(self::$_settings[$addon_name]['shortcode_fqcns'])
1200 1200
                 ) {
1201 1201
                     // add to list of shortcodes to be registered
1202 1202
                     EE_Register_Shortcode::deregister($addon_name);
1203 1203
                 }
1204
-                if (! empty(self::$_settings[ $addon_name ]['config_class'])) {
1204
+                if ( ! empty(self::$_settings[$addon_name]['config_class'])) {
1205 1205
                     // if config_class present let's register config.
1206
-                    EE_Register_Config::deregister(self::$_settings[ $addon_name ]['config_class']);
1206
+                    EE_Register_Config::deregister(self::$_settings[$addon_name]['config_class']);
1207 1207
                 }
1208
-                if (! empty(self::$_settings[ $addon_name ]['widget_paths'])) {
1208
+                if ( ! empty(self::$_settings[$addon_name]['widget_paths'])) {
1209 1209
                     // add to list of widgets to be registered
1210 1210
                     EE_Register_Widget::deregister($addon_name);
1211 1211
                 }
1212 1212
                 if (
1213
-                    ! empty(self::$_settings[ $addon_name ]['model_paths'])
1214
-                    || ! empty(self::$_settings[ $addon_name ]['class_paths'])
1213
+                    ! empty(self::$_settings[$addon_name]['model_paths'])
1214
+                    || ! empty(self::$_settings[$addon_name]['class_paths'])
1215 1215
                 ) {
1216 1216
                     // add to list of shortcodes to be registered
1217 1217
                     EE_Register_Model::deregister($addon_name);
1218 1218
                 }
1219 1219
                 if (
1220
-                    ! empty(self::$_settings[ $addon_name ]['model_extension_paths'])
1221
-                    || ! empty(self::$_settings[ $addon_name ]['class_extension_paths'])
1220
+                    ! empty(self::$_settings[$addon_name]['model_extension_paths'])
1221
+                    || ! empty(self::$_settings[$addon_name]['class_extension_paths'])
1222 1222
                 ) {
1223 1223
                     // add to list of shortcodes to be registered
1224 1224
                     EE_Register_Model_Extensions::deregister($addon_name);
1225 1225
                 }
1226
-                if (! empty(self::$_settings[ $addon_name ]['message_types'])) {
1227
-                    foreach ((array) self::$_settings[ $addon_name ]['message_types'] as $message_type => $message_type_settings) {
1226
+                if ( ! empty(self::$_settings[$addon_name]['message_types'])) {
1227
+                    foreach ((array) self::$_settings[$addon_name]['message_types'] as $message_type => $message_type_settings) {
1228 1228
                         EE_Register_Message_Type::deregister($message_type);
1229 1229
                     }
1230 1230
                 }
1231 1231
                 // deregister capabilities for addon
1232 1232
                 if (
1233
-                    ! empty(self::$_settings[ $addon_name ]['capabilities'])
1234
-                    || ! empty(self::$_settings[ $addon_name ]['capability_maps'])
1233
+                    ! empty(self::$_settings[$addon_name]['capabilities'])
1234
+                    || ! empty(self::$_settings[$addon_name]['capability_maps'])
1235 1235
                 ) {
1236 1236
                     EE_Register_Capabilities::deregister($addon_name);
1237 1237
                 }
1238 1238
                 // deregister custom_post_types for addon
1239
-                if (! empty(self::$_settings[ $addon_name ]['custom_post_types'])) {
1239
+                if ( ! empty(self::$_settings[$addon_name]['custom_post_types'])) {
1240 1240
                     EE_Register_CPT::deregister($addon_name);
1241 1241
                 }
1242
-                if (! empty(self::$_settings[ $addon_name ]['payment_method_paths'])) {
1242
+                if ( ! empty(self::$_settings[$addon_name]['payment_method_paths'])) {
1243 1243
                     EE_Register_Payment_Method::deregister($addon_name);
1244 1244
                 }
1245 1245
                 $addon = EE_Registry::instance()->getAddon($class_name);
1246 1246
                 if ($addon instanceof EE_Addon) {
1247 1247
                     remove_action(
1248
-                        'deactivate_' . $addon->get_main_plugin_file_basename(),
1248
+                        'deactivate_'.$addon->get_main_plugin_file_basename(),
1249 1249
                         array($addon, 'deactivation')
1250 1250
                     );
1251 1251
                     remove_action(
@@ -1269,7 +1269,7 @@  discard block
 block discarded – undo
1269 1269
             } catch (Exception $e) {
1270 1270
                 new ExceptionLogger($e);
1271 1271
             }
1272
-            unset(self::$_settings[ $addon_name ]);
1272
+            unset(self::$_settings[$addon_name]);
1273 1273
             do_action('AHEE__EE_Register_Addon__deregister__after', $addon_name);
1274 1274
         }
1275 1275
     }
Please login to merge, or discard this patch.
Indentation   +1252 added lines, -1252 removed lines patch added patch discarded remove patch
@@ -22,1256 +22,1256 @@
 block discarded – undo
22 22
  */
23 23
 class EE_Register_Addon implements EEI_Plugin_API
24 24
 {
25
-    /**
26
-     * possibly truncated version of the EE core version string
27
-     *
28
-     * @var string
29
-     */
30
-    protected static $_core_version = '';
31
-
32
-    /**
33
-     * Holds values for registered addons
34
-     *
35
-     * @var array
36
-     */
37
-    protected static $_settings = array();
38
-
39
-    /**
40
-     * @var  array $_incompatible_addons keys are addon SLUGS
41
-     * (first argument passed to EE_Register_Addon::register()), keys are
42
-     * their MINIMUM VERSION (with all 5 parts. Eg 1.2.3.rc.004).
43
-     * Generally this should be used sparingly, as we don't want to muddle up
44
-     * EE core with knowledge of ALL the addons out there.
45
-     * If you want NO versions of an addon to run with a certain version of core,
46
-     * it's usually best to define the addon's "min_core_version" as part of its call
47
-     * to EE_Register_Addon::register(), rather than using this array with a super high value for its
48
-     * minimum plugin version.
49
-     * @access    protected
50
-     */
51
-    protected static $_incompatible_addons = array(
52
-        'Multi_Event_Registration' => '2.0.11.rc.002',
53
-        'Promotions'               => '1.0.0.rc.084',
54
-    );
55
-
56
-
57
-    /**
58
-     * We should always be comparing core to a version like '4.3.0.rc.000',
59
-     * not just '4.3.0'.
60
-     * So if the addon developer doesn't provide that full version string,
61
-     * fill in the blanks for them
62
-     *
63
-     * @param string $min_core_version
64
-     * @return string always like '4.3.0.rc.000'
65
-     */
66
-    protected static function _effective_version($min_core_version)
67
-    {
68
-        // versions: 4 . 3 . 1 . p . 123
69
-        // offsets:    0 . 1 . 2 . 3 . 4
70
-        $version_parts = explode('.', $min_core_version);
71
-        // check they specified the micro version (after 2nd period)
72
-        if (! isset($version_parts[2])) {
73
-            $version_parts[2] = '0';
74
-        }
75
-        // if they didn't specify the 'p', or 'rc' part. Just assume the lowest possible
76
-        // soon we can assume that's 'rc', but this current version is 'alpha'
77
-        if (! isset($version_parts[3])) {
78
-            $version_parts[3] = 'dev';
79
-        }
80
-        if (! isset($version_parts[4])) {
81
-            $version_parts[4] = '000';
82
-        }
83
-        return implode('.', $version_parts);
84
-    }
85
-
86
-
87
-    /**
88
-     * Returns whether or not the min core version requirement of the addon is met
89
-     *
90
-     * @param string $min_core_version    the minimum core version required by the addon
91
-     * @param string $actual_core_version the actual core version, optional
92
-     * @return boolean
93
-     */
94
-    public static function _meets_min_core_version_requirement(
95
-        $min_core_version,
96
-        $actual_core_version = EVENT_ESPRESSO_VERSION
97
-    ) {
98
-        return version_compare(
99
-            self::_effective_version($actual_core_version),
100
-            self::_effective_version($min_core_version),
101
-            '>='
102
-        );
103
-    }
104
-
105
-
106
-    /**
107
-     * Method for registering new EE_Addons.
108
-     * Should be called AFTER AHEE__EE_System__load_espresso_addons but BEFORE
109
-     * AHEE__EE_System___detect_if_activation_or_upgrade__begin in order to register all its components. However, it
110
-     * may also be called after the 'activate_plugin' action (when an addon is activated), because an activating addon
111
-     * won't be loaded by WP until after AHEE__EE_System__load_espresso_addons has fired. If its called after
112
-     * 'activate_plugin', it registers the addon still, but its components are not registered
113
-     * (they shouldn't be needed anyways, because it's just an activation request and they won't have a chance to do
114
-     * anything anyways). Instead, it just sets the newly-activated addon's activation indicator wp option and returns
115
-     * (so that we can detect that the addon has activated on the subsequent request)
116
-     *
117
-     * @since    4.3.0
118
-     * @param string                  $addon_name                       [Required] the EE_Addon's name.
119
-     * @param  array                  $setup_args                       {
120
-     *                                                                  An array of arguments provided for registering
121
-     *                                                                  the message type.
122
-     * @type  string                  $class_name                       the addon's main file name.
123
-     *                                                                  If left blank, generated from the addon name,
124
-     *                                                                  changes something like "calendar" to
125
-     *                                                                  "EE_Calendar"
126
-     * @type string                   $min_core_version                 the minimum version of EE Core that the
127
-     *                                                                  addon will work with. eg "4.8.1.rc.084"
128
-     * @type string                   $version                          the "software" version for the addon. eg
129
-     *                                                                  "1.0.0.p" for a first stable release, or
130
-     *                                                                  "1.0.0.rc.043" for a version in progress
131
-     * @type string                   $main_file_path                   the full server path to the main file
132
-     *                                                                  loaded directly by WP
133
-     * @type DomainInterface $domain                                    child class of
134
-     *                                                                  EventEspresso\core\domain\DomainBase
135
-     * @type string                   $domain_fqcn                      Fully Qualified Class Name
136
-     *                                                                  for the addon's Domain class
137
-     *                                                                  (see EventEspresso\core\domain\Domain)
138
-     * @type string                   $admin_path                       full server path to the folder where the
139
-     *                                                                  addon\'s admin files reside
140
-     * @type string                   $admin_callback                   a method to be called when the EE Admin is
141
-     *                                                                  first invoked, can be used for hooking into
142
-     *                                                                  any admin page
143
-     * @type string                   $config_section                   the section name for this addon's
144
-     *                                                                  configuration settings section
145
-     *                                                                  (defaults to "addons")
146
-     * @type string                   $config_class                     the class name for this addon's
147
-     *                                                                  configuration settings object
148
-     * @type string                   $config_name                      the class name for this addon's
149
-     *                                                                  configuration settings object
150
-     * @type string                   $autoloader_paths                 [Required] an array of class names and the full
151
-     *                                                                  server paths to those files.
152
-     * @type string                   $autoloader_folders               an array of  "full server paths" for any
153
-     *                                                                  folders containing classes that might be
154
-     *                                                                  invoked by the addon
155
-     * @type string                   $dms_paths                        [Required] an array of full server paths to
156
-     *                                                                  folders that contain data migration scripts.
157
-     *                                                                  The key should be the EE_Addon class name that
158
-     *                                                                  this set of data migration scripts belongs to.
159
-     *                                                                  If the EE_Addon class is namespaced, then this
160
-     *                                                                  needs to be the Fully Qualified Class Name
161
-     * @type string                   $module_paths                     an array of full server paths to any
162
-     *                                                                  EED_Modules used by the addon
163
-     * @type string                   $shortcode_paths                  an array of full server paths to folders
164
-     *                                                                  that contain EES_Shortcodes
165
-     * @type string                   $widget_paths                     an array of full server paths to folders
166
-     *                                                                  that contain WP_Widgets
167
-     * @type string                   $pue_options
168
-     * @type array                    $capabilities                     an array indexed by role name
169
-     *                                                                  (i.e administrator,author ) and the values
170
-     *                                                                  are an array of caps to add to the role.
171
-     *                                                                  'administrator' => array(
172
-     *                                                                  'read_addon',
173
-     *                                                                  'edit_addon',
174
-     *                                                                  etc.
175
-     *                                                                  ).
176
-     * @type EE_Meta_Capability_Map[] $capability_maps                  an array of EE_Meta_Capability_Map object
177
-     *                                                                  for any addons that need to register any
178
-     *                                                                  special meta mapped capabilities.  Should
179
-     *                                                                  be indexed where the key is the
180
-     *                                                                  EE_Meta_Capability_Map class name and the
181
-     *                                                                  values are the arguments sent to the class.
182
-     * @type array                    $model_paths                      array of folders containing DB models
183
-     * @see      EE_Register_Model
184
-     * @type array                    $class_paths                      array of folders containing DB classes
185
-     * @see      EE_Register_Model
186
-     * @type array                    $model_extension_paths            array of folders containing DB model
187
-     *                                                                  extensions
188
-     * @see      EE_Register_Model_Extension
189
-     * @type array                    $class_extension_paths            array of folders containing DB class
190
-     *                                                                  extensions
191
-     * @see      EE_Register_Model_Extension
192
-     * @type array message_types {
193
-     *                                                                  An array of message types with the key as
194
-     *                                                                  the message type name and the values as
195
-     *                                                                  below:
196
-     * @type string                   $mtfilename                       [Required] The filename of the message type
197
-     *                                                                  being registered. This will be the main
198
-     *                                                                  EE_{Message Type Name}_message_type class.
199
-     *                                                                  for example:
200
-     *                                                                  EE_Declined_Registration_message_type.class.php
201
-     * @type array                    $autoloadpaths                    [Required] An array of paths to add to the
202
-     *                                                                  messages autoloader for the new message type.
203
-     * @type array                    $messengers_to_activate_with      An array of messengers that this message
204
-     *                                                                  type should activate with. Each value in
205
-     *                                                                  the
206
-     *                                                                  array
207
-     *                                                                  should match the name property of a
208
-     *                                                                  EE_messenger. Optional.
209
-     * @type array                    $messengers_to_validate_with      An array of messengers that this message
210
-     *                                                                  type should validate with. Each value in
211
-     *                                                                  the
212
-     *                                                                  array
213
-     *                                                                  should match the name property of an
214
-     *                                                                  EE_messenger.
215
-     *                                                                  Optional.
216
-     *                                                                  }
217
-     * @type array                    $custom_post_types
218
-     * @type array                    $custom_taxonomies
219
-     * @type array                    $payment_method_paths             each element is the folder containing the
220
-     *                                                                  EE_PMT_Base child class
221
-     *                                                                  (eg,
222
-     *                                                                  '/wp-content/plugins/my_plugin/Payomatic/'
223
-     *                                                                  which contains the files
224
-     *                                                                  EE_PMT_Payomatic.pm.php)
225
-     * @type array                    $default_terms
226
-     * @type array                    $namespace                        {
227
-     *                                                                  An array with two items for registering the
228
-     *                                                                  addon's namespace. (If, for some reason, you
229
-     *                                                                  require additional namespaces,
230
-     *                                                                  use
231
-     *                                                                  EventEspresso\core\Psr4Autoloader::addNamespace()
232
-     *                                                                  directly)
233
-     * @see      EventEspresso\core\Psr4Autoloader::addNamespace()
234
-     * @type string                   $FQNS                             the namespace prefix
235
-     * @type string                   $DIR                              a base directory for class files in the
236
-     *                                                                  namespace.
237
-     *                                                                  }
238
-     *                                                                  }
239
-     * @type string                   $privacy_policies                 FQNSs (namespaces, each of which contains only
240
-     *                                                                  privacy policy classes) or FQCNs (specific
241
-     *                                                                  classnames of privacy policy classes)
242
-     * @type string                   $personal_data_exporters          FQNSs (namespaces, each of which contains only
243
-     *                                                                  privacy policy classes) or FQCNs (specific
244
-     *                                                                  classnames of privacy policy classes)
245
-     * @type string                   $personal_data_erasers            FQNSs (namespaces, each of which contains only
246
-     *                                                                  privacy policy classes) or FQCNs (specific
247
-     *                                                                  classnames of privacy policy classes)
248
-     * @return void
249
-     * @throws DomainException
250
-     * @throws EE_Error
251
-     * @throws InvalidArgumentException
252
-     * @throws InvalidDataTypeException
253
-     * @throws InvalidInterfaceException
254
-     */
255
-    public static function register($addon_name = '', array $setup_args = array())
256
-    {
257
-        // required fields MUST be present, so let's make sure they are.
258
-        EE_Register_Addon::_verify_parameters($addon_name, $setup_args);
259
-        // get class name for addon
260
-        $class_name = EE_Register_Addon::_parse_class_name($addon_name, $setup_args);
261
-        // setup $_settings array from incoming values.
262
-        $addon_settings = EE_Register_Addon::_get_addon_settings($class_name, $setup_args);
263
-        // setup PUE
264
-        EE_Register_Addon::_parse_pue_options($addon_name, $class_name, $setup_args);
265
-        // does this addon work with this version of core or WordPress ?
266
-        // does this addon work with this version of core or WordPress ?
267
-        if (! EE_Register_Addon::_addon_is_compatible($addon_name, $addon_settings)) {
268
-            return;
269
-        }
270
-        // register namespaces
271
-        EE_Register_Addon::_setup_namespaces($addon_settings);
272
-        // check if this is an activation request
273
-        if (EE_Register_Addon::_addon_activation($addon_name, $addon_settings)) {
274
-            // dont bother setting up the rest of the addon atm
275
-            return;
276
-        }
277
-        // we need cars
278
-        EE_Register_Addon::_setup_autoloaders($addon_name);
279
-        // register new models and extensions
280
-        EE_Register_Addon::_register_models_and_extensions($addon_name);
281
-        // setup DMS
282
-        EE_Register_Addon::_register_data_migration_scripts($addon_name);
283
-        // if config_class is present let's register config.
284
-        EE_Register_Addon::_register_config($addon_name);
285
-        // register admin pages
286
-        EE_Register_Addon::_register_admin_pages($addon_name);
287
-        // add to list of modules to be registered
288
-        EE_Register_Addon::_register_modules($addon_name);
289
-        // add to list of shortcodes to be registered
290
-        EE_Register_Addon::_register_shortcodes($addon_name);
291
-        // add to list of widgets to be registered
292
-        EE_Register_Addon::_register_widgets($addon_name);
293
-        // register capability related stuff.
294
-        EE_Register_Addon::_register_capabilities($addon_name);
295
-        // any message type to register?
296
-        EE_Register_Addon::_register_message_types($addon_name);
297
-        // any custom post type/ custom capabilities or default terms to register
298
-        EE_Register_Addon::_register_custom_post_types($addon_name);
299
-        // and any payment methods
300
-        EE_Register_Addon::_register_payment_methods($addon_name);
301
-        // and privacy policy generators
302
-        EE_Register_Addon::registerPrivacyPolicies($addon_name);
303
-        // and privacy policy generators
304
-        EE_Register_Addon::registerPersonalDataExporters($addon_name);
305
-        // and privacy policy generators
306
-        EE_Register_Addon::registerPersonalDataErasers($addon_name);
307
-        // load and instantiate main addon class
308
-        $addon = EE_Register_Addon::_load_and_init_addon_class($addon_name);
309
-        // delay calling after_registration hook on each addon until after all add-ons have been registered.
310
-        add_action('AHEE__EE_System__load_espresso_addons__complete', array($addon, 'after_registration'), 999);
311
-    }
312
-
313
-
314
-    /**
315
-     * @param string $addon_name
316
-     * @param array  $setup_args
317
-     * @return void
318
-     * @throws EE_Error
319
-     */
320
-    private static function _verify_parameters($addon_name, array $setup_args)
321
-    {
322
-        // required fields MUST be present, so let's make sure they are.
323
-        if (empty($addon_name) || ! is_array($setup_args)) {
324
-            throw new EE_Error(
325
-                esc_html__(
326
-                    'In order to register an EE_Addon with EE_Register_Addon::register(), you must include the "addon_name" (the name of the addon), and an array of arguments.',
327
-                    'event_espresso'
328
-                )
329
-            );
330
-        }
331
-        if (! isset($setup_args['main_file_path']) || empty($setup_args['main_file_path'])) {
332
-            throw new EE_Error(
333
-                sprintf(
334
-                    esc_html__(
335
-                        'When registering an addon, you didn\'t provide the "main_file_path", which is the full path to the main file loaded directly by Wordpress. You only provided %s',
336
-                        'event_espresso'
337
-                    ),
338
-                    implode(',', array_keys($setup_args))
339
-                )
340
-            );
341
-        }
342
-        // check that addon has not already been registered with that name
343
-        if (isset(self::$_settings[ $addon_name ]) && ! did_action('activate_plugin')) {
344
-            throw new EE_Error(
345
-                sprintf(
346
-                    esc_html__(
347
-                        'An EE_Addon with the name "%s" has already been registered and each EE_Addon requires a unique name.',
348
-                        'event_espresso'
349
-                    ),
350
-                    $addon_name
351
-                )
352
-            );
353
-        }
354
-    }
355
-
356
-
357
-    /**
358
-     * @param string $addon_name
359
-     * @param array  $setup_args
360
-     * @return string
361
-     */
362
-    private static function _parse_class_name($addon_name, array $setup_args)
363
-    {
364
-        if (empty($setup_args['class_name'])) {
365
-            // generate one by first separating name with spaces
366
-            $class_name = str_replace(array('-', '_'), ' ', trim($addon_name));
367
-            // capitalize, then replace spaces with underscores
368
-            $class_name = str_replace(' ', '_', ucwords($class_name));
369
-        } else {
370
-            $class_name = $setup_args['class_name'];
371
-        }
372
-        // check if classname is fully  qualified or is a legacy classname already prefixed with 'EE_'
373
-        return strpos($class_name, '\\') || strpos($class_name, 'EE_') === 0
374
-            ? $class_name
375
-            : 'EE_' . $class_name;
376
-    }
377
-
378
-
379
-    /**
380
-     * @param string $class_name
381
-     * @param array  $setup_args
382
-     * @return array
383
-     */
384
-    private static function _get_addon_settings($class_name, array $setup_args)
385
-    {
386
-        // setup $_settings array from incoming values.
387
-        $addon_settings = array(
388
-            // generated from the addon name, changes something like "calendar" to "EE_Calendar"
389
-            'class_name'            => $class_name,
390
-            // the addon slug for use in URLs, etc
391
-            'plugin_slug'           => isset($setup_args['plugin_slug'])
392
-                ? (string) $setup_args['plugin_slug']
393
-                : '',
394
-            // page slug to be used when generating the "Settings" link on the WP plugin page
395
-            'plugin_action_slug'    => isset($setup_args['plugin_action_slug'])
396
-                ? (string) $setup_args['plugin_action_slug']
397
-                : '',
398
-            // the "software" version for the addon
399
-            'version'               => isset($setup_args['version'])
400
-                ? (string) $setup_args['version']
401
-                : '',
402
-            // the minimum version of EE Core that the addon will work with
403
-            'min_core_version'      => isset($setup_args['min_core_version'])
404
-                ? (string) $setup_args['min_core_version']
405
-                : '',
406
-            // the minimum version of WordPress that the addon will work with
407
-            'min_wp_version'        => isset($setup_args['min_wp_version'])
408
-                ? (string) $setup_args['min_wp_version']
409
-                : EE_MIN_WP_VER_REQUIRED,
410
-            // full server path to main file (file loaded directly by WP)
411
-            'main_file_path'        => isset($setup_args['main_file_path'])
412
-                ? (string) $setup_args['main_file_path']
413
-                : '',
414
-            // instance of \EventEspresso\core\domain\DomainInterface
415
-            'domain'                => isset($setup_args['domain']) && $setup_args['domain'] instanceof DomainInterface
416
-                ? $setup_args['domain']
417
-                : null,
418
-            // Fully Qualified Class Name for the addon's Domain class
419
-            'domain_fqcn'           => isset($setup_args['domain_fqcn'])
420
-                ? (string) $setup_args['domain_fqcn']
421
-                : '',
422
-            // path to folder containing files for integrating with the EE core admin and/or setting up EE admin pages
423
-            'admin_path'            => isset($setup_args['admin_path'])
424
-                ? (string) $setup_args['admin_path'] : '',
425
-            // a method to be called when the EE Admin is first invoked, can be used for hooking into any admin page
426
-            'admin_callback'        => isset($setup_args['admin_callback'])
427
-                ? (string) $setup_args['admin_callback']
428
-                : '',
429
-            // the section name for this addon's configuration settings section (defaults to "addons")
430
-            'config_section'        => isset($setup_args['config_section'])
431
-                ? (string) $setup_args['config_section']
432
-                : 'addons',
433
-            // the class name for this addon's configuration settings object
434
-            'config_class'          => isset($setup_args['config_class'])
435
-                ? (string) $setup_args['config_class'] : '',
436
-            // the name given to the config for this addons' configuration settings object (optional)
437
-            'config_name'           => isset($setup_args['config_name'])
438
-                ? (string) $setup_args['config_name'] : '',
439
-            // an array of "class names" => "full server paths" for any classes that might be invoked by the addon
440
-            'autoloader_paths'      => isset($setup_args['autoloader_paths'])
441
-                ? (array) $setup_args['autoloader_paths']
442
-                : array(),
443
-            // an array of  "full server paths" for any folders containing classes that might be invoked by the addon
444
-            'autoloader_folders'    => isset($setup_args['autoloader_folders'])
445
-                ? (array) $setup_args['autoloader_folders']
446
-                : array(),
447
-            // array of full server paths to any EE_DMS data migration scripts used by the addon.
448
-            // The key should be the EE_Addon class name that this set of data migration scripts belongs to.
449
-            // If the EE_Addon class is namespaced, then this needs to be the Fully Qualified Class Name
450
-            'dms_paths'             => isset($setup_args['dms_paths'])
451
-                ? (array) $setup_args['dms_paths']
452
-                : array(),
453
-            // array of full server paths to any EED_Modules used by the addon
454
-            'module_paths'          => isset($setup_args['module_paths'])
455
-                ? (array) $setup_args['module_paths']
456
-                : array(),
457
-            // array of full server paths to any EES_Shortcodes used by the addon
458
-            'shortcode_paths'       => isset($setup_args['shortcode_paths'])
459
-                ? (array) $setup_args['shortcode_paths']
460
-                : array(),
461
-            'shortcode_fqcns'       => isset($setup_args['shortcode_fqcns'])
462
-                ? (array) $setup_args['shortcode_fqcns']
463
-                : array(),
464
-            // array of full server paths to any WP_Widgets used by the addon
465
-            'widget_paths'          => isset($setup_args['widget_paths'])
466
-                ? (array) $setup_args['widget_paths']
467
-                : array(),
468
-            // array of PUE options used by the addon
469
-            'pue_options'           => isset($setup_args['pue_options'])
470
-                ? (array) $setup_args['pue_options']
471
-                : array(),
472
-            'message_types'         => isset($setup_args['message_types'])
473
-                ? (array) $setup_args['message_types']
474
-                : array(),
475
-            'capabilities'          => isset($setup_args['capabilities'])
476
-                ? (array) $setup_args['capabilities']
477
-                : array(),
478
-            'capability_maps'       => isset($setup_args['capability_maps'])
479
-                ? (array) $setup_args['capability_maps']
480
-                : array(),
481
-            'model_paths'           => isset($setup_args['model_paths'])
482
-                ? (array) $setup_args['model_paths']
483
-                : array(),
484
-            'class_paths'           => isset($setup_args['class_paths'])
485
-                ? (array) $setup_args['class_paths']
486
-                : array(),
487
-            'model_extension_paths' => isset($setup_args['model_extension_paths'])
488
-                ? (array) $setup_args['model_extension_paths']
489
-                : array(),
490
-            'class_extension_paths' => isset($setup_args['class_extension_paths'])
491
-                ? (array) $setup_args['class_extension_paths']
492
-                : array(),
493
-            'custom_post_types'     => isset($setup_args['custom_post_types'])
494
-                ? (array) $setup_args['custom_post_types']
495
-                : array(),
496
-            'custom_taxonomies'     => isset($setup_args['custom_taxonomies'])
497
-                ? (array) $setup_args['custom_taxonomies']
498
-                : array(),
499
-            'payment_method_paths'  => isset($setup_args['payment_method_paths'])
500
-                ? (array) $setup_args['payment_method_paths']
501
-                : array(),
502
-            'default_terms'         => isset($setup_args['default_terms'])
503
-                ? (array) $setup_args['default_terms']
504
-                : array(),
505
-            // if not empty, inserts a new table row after this plugin's row on the WP Plugins page
506
-            // that can be used for adding upgrading/marketing info
507
-            'plugins_page_row'      => isset($setup_args['plugins_page_row']) ? $setup_args['plugins_page_row'] : '',
508
-            'namespace'             => isset(
509
-                $setup_args['namespace']['FQNS'],
510
-                $setup_args['namespace']['DIR']
511
-            )
512
-                ? (array) $setup_args['namespace']
513
-                : array(),
514
-            'privacy_policies'      => isset($setup_args['privacy_policies'])
515
-                ? (array) $setup_args['privacy_policies']
516
-                : '',
517
-        );
518
-        // if plugin_action_slug is NOT set, but an admin page path IS set,
519
-        // then let's just use the plugin_slug since that will be used for linking to the admin page
520
-        $addon_settings['plugin_action_slug'] = empty($addon_settings['plugin_action_slug'])
521
-                                                && ! empty($addon_settings['admin_path'])
522
-            ? $addon_settings['plugin_slug']
523
-            : $addon_settings['plugin_action_slug'];
524
-        // full server path to main file (file loaded directly by WP)
525
-        $addon_settings['plugin_basename'] = plugin_basename($addon_settings['main_file_path']);
526
-        return $addon_settings;
527
-    }
528
-
529
-
530
-    /**
531
-     * @param string $addon_name
532
-     * @param array  $addon_settings
533
-     * @return boolean
534
-     */
535
-    private static function _addon_is_compatible($addon_name, array $addon_settings)
536
-    {
537
-        global $wp_version;
538
-        $incompatibility_message = '';
539
-        // check whether this addon version is compatible with EE core
540
-        if (
541
-            isset(EE_Register_Addon::$_incompatible_addons[ $addon_name ])
542
-            && ! self::_meets_min_core_version_requirement(
543
-                EE_Register_Addon::$_incompatible_addons[ $addon_name ],
544
-                $addon_settings['version']
545
-            )
546
-        ) {
547
-            $incompatibility_message = sprintf(
548
-                esc_html__(
549
-                    '%4$sIMPORTANT!%5$sThe Event Espresso "%1$s" addon is not compatible with this version of Event Espresso.%2$sPlease upgrade your "%1$s" addon to version %3$s or newer to resolve this issue.',
550
-                    'event_espresso'
551
-                ),
552
-                $addon_name,
553
-                '<br />',
554
-                EE_Register_Addon::$_incompatible_addons[ $addon_name ],
555
-                '<span style="font-weight: bold; color: #D54E21;">',
556
-                '</span><br />'
557
-            );
558
-        } elseif (
559
-            ! self::_meets_min_core_version_requirement($addon_settings['min_core_version'], espresso_version())
560
-        ) {
561
-            $incompatibility_message = sprintf(
562
-                esc_html__(
563
-                    '%5$sIMPORTANT!%6$sThe Event Espresso "%1$s" addon requires Event Espresso Core version "%2$s" or higher in order to run.%4$sYour version of Event Espresso Core is currently at "%3$s". Please upgrade Event Espresso Core first and then re-activate "%1$s".',
564
-                    'event_espresso'
565
-                ),
566
-                $addon_name,
567
-                self::_effective_version($addon_settings['min_core_version']),
568
-                self::_effective_version(espresso_version()),
569
-                '<br />',
570
-                '<span style="font-weight: bold; color: #D54E21;">',
571
-                '</span><br />'
572
-            );
573
-        } elseif (version_compare($wp_version, $addon_settings['min_wp_version'], '<')) {
574
-            $incompatibility_message = sprintf(
575
-                esc_html__(
576
-                    '%4$sIMPORTANT!%5$sThe Event Espresso "%1$s" addon requires WordPress version "%2$s" or greater.%3$sPlease update your version of WordPress to use the "%1$s" addon and to keep your site secure.',
577
-                    'event_espresso'
578
-                ),
579
-                $addon_name,
580
-                $addon_settings['min_wp_version'],
581
-                '<br />',
582
-                '<span style="font-weight: bold; color: #D54E21;">',
583
-                '</span><br />'
584
-            );
585
-        }
586
-        if (! empty($incompatibility_message)) {
587
-            // remove 'activate' from the REQUEST
588
-            // so WP doesn't erroneously tell the user the plugin activated fine when it didn't
589
-            /** @var RequestInterface $request */
590
-            $request = LoaderFactory::getLoader()->getShared(RequestInterface::class);
591
-            $request->unSetRequestParam('activate', true);
592
-            if (current_user_can('activate_plugins')) {
593
-                // show an error message indicating the plugin didn't activate properly
594
-                EE_Error::add_error($incompatibility_message, __FILE__, __FUNCTION__, __LINE__);
595
-            }
596
-            // BAIL FROM THE ADDON REGISTRATION PROCESS
597
-            return false;
598
-        }
599
-        // addon IS compatible
600
-        return true;
601
-    }
602
-
603
-
604
-    /**
605
-     * if plugin update engine is being used for auto-updates,
606
-     * then let's set that up now before going any further so that ALL addons can be updated
607
-     * (not needed if PUE is not being used)
608
-     *
609
-     * @param string $addon_name
610
-     * @param string $class_name
611
-     * @param array  $setup_args
612
-     * @return void
613
-     */
614
-    private static function _parse_pue_options($addon_name, $class_name, array $setup_args)
615
-    {
616
-        if (! empty($setup_args['pue_options'])) {
617
-            self::$_settings[ $addon_name ]['pue_options'] = array(
618
-                'pue_plugin_slug' => isset($setup_args['pue_options']['pue_plugin_slug'])
619
-                    ? (string) $setup_args['pue_options']['pue_plugin_slug']
620
-                    : 'espresso_' . strtolower($class_name),
621
-                'plugin_basename' => isset($setup_args['pue_options']['plugin_basename'])
622
-                    ? (string) $setup_args['pue_options']['plugin_basename']
623
-                    : plugin_basename($setup_args['main_file_path']),
624
-                'checkPeriod'     => isset($setup_args['pue_options']['checkPeriod'])
625
-                    ? (string) $setup_args['pue_options']['checkPeriod']
626
-                    : '24',
627
-                'use_wp_update'   => isset($setup_args['pue_options']['use_wp_update'])
628
-                    ? (string) $setup_args['pue_options']['use_wp_update']
629
-                    : false,
630
-            );
631
-            add_action(
632
-                'AHEE__EE_System__brew_espresso__after_pue_init',
633
-                array('EE_Register_Addon', 'load_pue_update')
634
-            );
635
-        }
636
-    }
637
-
638
-
639
-    /**
640
-     * register namespaces right away before any other files or classes get loaded, but AFTER the version checks
641
-     *
642
-     * @param array $addon_settings
643
-     * @return void
644
-     */
645
-    private static function _setup_namespaces(array $addon_settings)
646
-    {
647
-        //
648
-        if (
649
-            isset(
650
-                $addon_settings['namespace']['FQNS'],
651
-                $addon_settings['namespace']['DIR']
652
-            )
653
-        ) {
654
-            EE_Psr4AutoloaderInit::psr4_loader()->addNamespace(
655
-                $addon_settings['namespace']['FQNS'],
656
-                $addon_settings['namespace']['DIR']
657
-            );
658
-        }
659
-    }
660
-
661
-
662
-    /**
663
-     * @param string $addon_name
664
-     * @param array  $addon_settings
665
-     * @return bool
666
-     * @throws InvalidArgumentException
667
-     * @throws InvalidDataTypeException
668
-     * @throws InvalidInterfaceException
669
-     */
670
-    private static function _addon_activation($addon_name, array $addon_settings)
671
-    {
672
-        // this is an activation request
673
-        if (did_action('activate_plugin')) {
674
-            // to find if THIS is the addon that was activated, just check if we have already registered it or not
675
-            // (as the newly-activated addon wasn't around the first time addons were registered).
676
-            // Note: the presence of pue_options in the addon registration options will initialize the $_settings
677
-            // property for the add-on, but the add-on is only partially initialized.  Hence, the additional check.
678
-            if (
679
-                ! isset(self::$_settings[ $addon_name ])
680
-                || (isset(self::$_settings[ $addon_name ])
681
-                    && ! isset(self::$_settings[ $addon_name ]['class_name'])
682
-                )
683
-            ) {
684
-                self::$_settings[ $addon_name ] = $addon_settings;
685
-                $addon = self::_load_and_init_addon_class($addon_name);
686
-                $addon->set_activation_indicator_option();
687
-                // dont bother setting up the rest of the addon.
688
-                // we know it was just activated and the request will end soon
689
-            }
690
-            return true;
691
-        }
692
-
693
-        // make sure this was called in the right place!
694
-        if (
695
-            ! did_action('AHEE__EE_System__load_espresso_addons')
696
-            || did_action('AHEE__EE_System___detect_if_activation_or_upgrade__begin')
697
-        ) {
698
-            EE_Error::doing_it_wrong(
699
-                __METHOD__,
700
-                sprintf(
701
-                    esc_html__(
702
-                        'An attempt to register an EE_Addon named "%s" has failed because it was not registered at the correct time.  Please use the "AHEE__EE_System__load_espresso_addons" hook to register addons.',
703
-                        'event_espresso'
704
-                    ),
705
-                    $addon_name
706
-                ),
707
-                '4.3.0'
708
-            );
709
-        }
710
-        // make sure addon settings are set correctly without overwriting anything existing
711
-        if (isset(self::$_settings[ $addon_name ])) {
712
-            self::$_settings[ $addon_name ] += $addon_settings;
713
-        } else {
714
-            self::$_settings[ $addon_name ] = $addon_settings;
715
-        }
716
-        return false;
717
-    }
718
-
719
-
720
-    /**
721
-     * @param string $addon_name
722
-     * @return void
723
-     * @throws EE_Error
724
-     */
725
-    private static function _setup_autoloaders($addon_name)
726
-    {
727
-        if (! empty(self::$_settings[ $addon_name ]['autoloader_paths'])) {
728
-            // setup autoloader for single file
729
-            EEH_Autoloader::instance()->register_autoloader(self::$_settings[ $addon_name ]['autoloader_paths']);
730
-        }
731
-        // setup autoloaders for folders
732
-        if (! empty(self::$_settings[ $addon_name ]['autoloader_folders'])) {
733
-            foreach ((array) self::$_settings[ $addon_name ]['autoloader_folders'] as $autoloader_folder) {
734
-                EEH_Autoloader::register_autoloaders_for_each_file_in_folder($autoloader_folder);
735
-            }
736
-        }
737
-    }
738
-
739
-
740
-
741
-    /**
742
-     * register new models and extensions
743
-     *
744
-     * @param string $addon_name
745
-     * @return void
746
-     * @throws EE_Error
747
-     */
748
-    private static function _register_models_and_extensions($addon_name)
749
-    {
750
-        // register new models
751
-        if (
752
-            ! empty(self::$_settings[ $addon_name ]['model_paths'])
753
-            || ! empty(self::$_settings[ $addon_name ]['class_paths'])
754
-        ) {
755
-            EE_Register_Model::register(
756
-                $addon_name,
757
-                array(
758
-                    'model_paths' => self::$_settings[ $addon_name ]['model_paths'],
759
-                    'class_paths' => self::$_settings[ $addon_name ]['class_paths'],
760
-                )
761
-            );
762
-        }
763
-        // register model extensions
764
-        if (
765
-            ! empty(self::$_settings[ $addon_name ]['model_extension_paths'])
766
-            || ! empty(self::$_settings[ $addon_name ]['class_extension_paths'])
767
-        ) {
768
-            EE_Register_Model_Extensions::register(
769
-                $addon_name,
770
-                array(
771
-                    'model_extension_paths' => self::$_settings[ $addon_name ]['model_extension_paths'],
772
-                    'class_extension_paths' => self::$_settings[ $addon_name ]['class_extension_paths'],
773
-                )
774
-            );
775
-        }
776
-    }
777
-
778
-
779
-    /**
780
-     * @param string $addon_name
781
-     * @return void
782
-     * @throws EE_Error
783
-     */
784
-    private static function _register_data_migration_scripts($addon_name)
785
-    {
786
-        // setup DMS
787
-        if (! empty(self::$_settings[ $addon_name ]['dms_paths'])) {
788
-            EE_Register_Data_Migration_Scripts::register(
789
-                $addon_name,
790
-                array('dms_paths' => self::$_settings[ $addon_name ]['dms_paths'])
791
-            );
792
-        }
793
-    }
794
-
795
-
796
-    /**
797
-     * @param string $addon_name
798
-     * @return void
799
-     * @throws EE_Error
800
-     */
801
-    private static function _register_config($addon_name)
802
-    {
803
-        // if config_class is present let's register config.
804
-        if (! empty(self::$_settings[ $addon_name ]['config_class'])) {
805
-            EE_Register_Config::register(
806
-                self::$_settings[ $addon_name ]['config_class'],
807
-                array(
808
-                    'config_section' => self::$_settings[ $addon_name ]['config_section'],
809
-                    'config_name'    => self::$_settings[ $addon_name ]['config_name'],
810
-                )
811
-            );
812
-        }
813
-    }
814
-
815
-
816
-    /**
817
-     * @param string $addon_name
818
-     * @return void
819
-     * @throws EE_Error
820
-     */
821
-    private static function _register_admin_pages($addon_name)
822
-    {
823
-        if (! empty(self::$_settings[ $addon_name ]['admin_path'])) {
824
-            EE_Register_Admin_Page::register(
825
-                $addon_name,
826
-                array('page_path' => self::$_settings[ $addon_name ]['admin_path'])
827
-            );
828
-        }
829
-    }
830
-
831
-
832
-    /**
833
-     * @param string $addon_name
834
-     * @return void
835
-     * @throws EE_Error
836
-     */
837
-    private static function _register_modules($addon_name)
838
-    {
839
-        if (! empty(self::$_settings[ $addon_name ]['module_paths'])) {
840
-            EE_Register_Module::register(
841
-                $addon_name,
842
-                array('module_paths' => self::$_settings[ $addon_name ]['module_paths'])
843
-            );
844
-        }
845
-    }
846
-
847
-
848
-    /**
849
-     * @param string $addon_name
850
-     * @return void
851
-     * @throws EE_Error
852
-     */
853
-    private static function _register_shortcodes($addon_name)
854
-    {
855
-        if (
856
-            ! empty(self::$_settings[ $addon_name ]['shortcode_paths'])
857
-            || ! empty(self::$_settings[ $addon_name ]['shortcode_fqcns'])
858
-        ) {
859
-            EE_Register_Shortcode::register(
860
-                $addon_name,
861
-                array(
862
-                    'shortcode_paths' => isset(self::$_settings[ $addon_name ]['shortcode_paths'])
863
-                        ? self::$_settings[ $addon_name ]['shortcode_paths'] : array(),
864
-                    'shortcode_fqcns' => isset(self::$_settings[ $addon_name ]['shortcode_fqcns'])
865
-                        ? self::$_settings[ $addon_name ]['shortcode_fqcns'] : array(),
866
-                )
867
-            );
868
-        }
869
-    }
870
-
871
-
872
-    /**
873
-     * @param string $addon_name
874
-     * @return void
875
-     * @throws EE_Error
876
-     */
877
-    private static function _register_widgets($addon_name)
878
-    {
879
-        if (! empty(self::$_settings[ $addon_name ]['widget_paths'])) {
880
-            EE_Register_Widget::register(
881
-                $addon_name,
882
-                array('widget_paths' => self::$_settings[ $addon_name ]['widget_paths'])
883
-            );
884
-        }
885
-    }
886
-
887
-
888
-    /**
889
-     * @param string $addon_name
890
-     * @return void
891
-     * @throws EE_Error
892
-     */
893
-    private static function _register_capabilities($addon_name)
894
-    {
895
-        if (! empty(self::$_settings[ $addon_name ]['capabilities'])) {
896
-            EE_Register_Capabilities::register(
897
-                $addon_name,
898
-                array(
899
-                    'capabilities'    => self::$_settings[ $addon_name ]['capabilities'],
900
-                    'capability_maps' => self::$_settings[ $addon_name ]['capability_maps'],
901
-                )
902
-            );
903
-        }
904
-    }
905
-
906
-
907
-    /**
908
-     * @param string $addon_name
909
-     * @return void
910
-     */
911
-    private static function _register_message_types($addon_name)
912
-    {
913
-        if (! empty(self::$_settings[ $addon_name ]['message_types'])) {
914
-            add_action(
915
-                'EE_Brewing_Regular___messages_caf',
916
-                array('EE_Register_Addon', 'register_message_types')
917
-            );
918
-        }
919
-    }
920
-
921
-
922
-    /**
923
-     * @param string $addon_name
924
-     * @return void
925
-     * @throws EE_Error
926
-     */
927
-    private static function _register_custom_post_types($addon_name)
928
-    {
929
-        if (
930
-            ! empty(self::$_settings[ $addon_name ]['custom_post_types'])
931
-            || ! empty(self::$_settings[ $addon_name ]['custom_taxonomies'])
932
-        ) {
933
-            EE_Register_CPT::register(
934
-                $addon_name,
935
-                array(
936
-                    'cpts'          => self::$_settings[ $addon_name ]['custom_post_types'],
937
-                    'cts'           => self::$_settings[ $addon_name ]['custom_taxonomies'],
938
-                    'default_terms' => self::$_settings[ $addon_name ]['default_terms'],
939
-                )
940
-            );
941
-        }
942
-    }
943
-
944
-
945
-    /**
946
-     * @param string $addon_name
947
-     * @return void
948
-     * @throws InvalidArgumentException
949
-     * @throws InvalidInterfaceException
950
-     * @throws InvalidDataTypeException
951
-     * @throws DomainException
952
-     * @throws EE_Error
953
-     */
954
-    private static function _register_payment_methods($addon_name)
955
-    {
956
-        if (! empty(self::$_settings[ $addon_name ]['payment_method_paths'])) {
957
-            EE_Register_Payment_Method::register(
958
-                $addon_name,
959
-                array('payment_method_paths' => self::$_settings[ $addon_name ]['payment_method_paths'])
960
-            );
961
-        }
962
-    }
963
-
964
-
965
-    /**
966
-     * @param string $addon_name
967
-     * @return void
968
-     * @throws InvalidArgumentException
969
-     * @throws InvalidInterfaceException
970
-     * @throws InvalidDataTypeException
971
-     * @throws DomainException
972
-     */
973
-    private static function registerPrivacyPolicies($addon_name)
974
-    {
975
-        if (! empty(self::$_settings[ $addon_name ]['privacy_policies'])) {
976
-            EE_Register_Privacy_Policy::register(
977
-                $addon_name,
978
-                self::$_settings[ $addon_name ]['privacy_policies']
979
-            );
980
-        }
981
-    }
982
-
983
-
984
-    /**
985
-     * @param string $addon_name
986
-     * @return void
987
-     */
988
-    private static function registerPersonalDataExporters($addon_name)
989
-    {
990
-        if (! empty(self::$_settings[ $addon_name ]['personal_data_exporters'])) {
991
-            EE_Register_Personal_Data_Eraser::register(
992
-                $addon_name,
993
-                self::$_settings[ $addon_name ]['personal_data_exporters']
994
-            );
995
-        }
996
-    }
997
-
998
-
999
-    /**
1000
-     * @param string $addon_name
1001
-     * @return void
1002
-     */
1003
-    private static function registerPersonalDataErasers($addon_name)
1004
-    {
1005
-        if (! empty(self::$_settings[ $addon_name ]['personal_data_erasers'])) {
1006
-            EE_Register_Personal_Data_Eraser::register(
1007
-                $addon_name,
1008
-                self::$_settings[ $addon_name ]['personal_data_erasers']
1009
-            );
1010
-        }
1011
-    }
1012
-
1013
-
1014
-    /**
1015
-     * Loads and instantiates the EE_Addon class and adds it onto the registry
1016
-     *
1017
-     * @param string $addon_name
1018
-     * @return EE_Addon
1019
-     * @throws InvalidArgumentException
1020
-     * @throws InvalidInterfaceException
1021
-     * @throws InvalidDataTypeException
1022
-     */
1023
-    private static function _load_and_init_addon_class($addon_name)
1024
-    {
1025
-        $addon = LoaderFactory::getLoader()->getShared(
1026
-            self::$_settings[ $addon_name ]['class_name'],
1027
-            array('EE_Registry::create(addon)' => true)
1028
-        );
1029
-        if (! $addon instanceof EE_Addon) {
1030
-            throw new DomainException(
1031
-                sprintf(
1032
-                    esc_html__(
1033
-                        'Failed to instantiate the %1$s class. PLease check that the class exists.',
1034
-                        'event_espresso'
1035
-                    ),
1036
-                    $addon_name
1037
-                )
1038
-            );
1039
-        }
1040
-        // setter inject dep map if required
1041
-        if ($addon->dependencyMap() === null) {
1042
-            $addon->setDependencyMap(LoaderFactory::getLoader()->getShared('EE_Dependency_Map'));
1043
-        }
1044
-        // setter inject domain if required
1045
-        EE_Register_Addon::injectAddonDomain($addon_name, $addon);
1046
-
1047
-        $addon->set_name($addon_name);
1048
-        $addon->set_plugin_slug(self::$_settings[ $addon_name ]['plugin_slug']);
1049
-        $addon->set_plugin_basename(self::$_settings[ $addon_name ]['plugin_basename']);
1050
-        $addon->set_main_plugin_file(self::$_settings[ $addon_name ]['main_file_path']);
1051
-        $addon->set_plugin_action_slug(self::$_settings[ $addon_name ]['plugin_action_slug']);
1052
-        $addon->set_plugins_page_row(self::$_settings[ $addon_name ]['plugins_page_row']);
1053
-        $addon->set_version(self::$_settings[ $addon_name ]['version']);
1054
-        $addon->set_min_core_version(self::_effective_version(self::$_settings[ $addon_name ]['min_core_version']));
1055
-        $addon->set_config_section(self::$_settings[ $addon_name ]['config_section']);
1056
-        $addon->set_config_class(self::$_settings[ $addon_name ]['config_class']);
1057
-        $addon->set_config_name(self::$_settings[ $addon_name ]['config_name']);
1058
-        // setup the add-on's pue_slug if we have one.
1059
-        if (! empty(self::$_settings[ $addon_name ]['pue_options']['pue_plugin_slug'])) {
1060
-            $addon->setPueSlug(self::$_settings[ $addon_name ]['pue_options']['pue_plugin_slug']);
1061
-        }
1062
-        // unfortunately this can't be hooked in upon construction,
1063
-        // because we don't have the plugin's mainfile path upon construction.
1064
-        register_deactivation_hook($addon->get_main_plugin_file(), array($addon, 'deactivation'));
1065
-        // call any additional admin_callback functions during load_admin_controller hook
1066
-        if (! empty(self::$_settings[ $addon_name ]['admin_callback'])) {
1067
-            add_action(
1068
-                'AHEE__EE_System__load_controllers__load_admin_controllers',
1069
-                array($addon, self::$_settings[ $addon_name ]['admin_callback'])
1070
-            );
1071
-        }
1072
-        return $addon;
1073
-    }
1074
-
1075
-
1076
-    /**
1077
-     * @param string   $addon_name
1078
-     * @param EE_Addon $addon
1079
-     * @since   4.10.13.p
1080
-     */
1081
-    private static function injectAddonDomain($addon_name, EE_Addon $addon)
1082
-    {
1083
-        if ($addon instanceof RequiresDomainInterface && $addon->domain() === null) {
1084
-            // using supplied Domain object
1085
-            $domain = self::$_settings[ $addon_name ]['domain'] instanceof DomainInterface
1086
-                ? self::$_settings[ $addon_name ]['domain']
1087
-                : null;
1088
-            // or construct one using Domain FQCN
1089
-            if ($domain === null && self::$_settings[ $addon_name ]['domain_fqcn'] !== '') {
1090
-                $domain = LoaderFactory::getLoader()->getShared(
1091
-                    self::$_settings[ $addon_name ]['domain_fqcn'],
1092
-                    [
1093
-                        new EventEspresso\core\domain\values\FilePath(
1094
-                            self::$_settings[ $addon_name ]['main_file_path']
1095
-                        ),
1096
-                        EventEspresso\core\domain\values\Version::fromString(
1097
-                            self::$_settings[ $addon_name ]['version']
1098
-                        ),
1099
-                    ]
1100
-                );
1101
-            }
1102
-            if ($domain instanceof DomainInterface) {
1103
-                $addon->setDomain($domain);
1104
-            }
1105
-        }
1106
-    }
1107
-
1108
-
1109
-    /**
1110
-     *    load_pue_update - Update notifications
1111
-     *
1112
-     * @return void
1113
-     * @throws InvalidArgumentException
1114
-     * @throws InvalidDataTypeException
1115
-     * @throws InvalidInterfaceException
1116
-     */
1117
-    public static function load_pue_update()
1118
-    {
1119
-        // load PUE client
1120
-        require_once EE_THIRD_PARTY . 'pue/pue-client.php';
1121
-        $license_server = defined('PUE_UPDATES_ENDPOINT') ? PUE_UPDATES_ENDPOINT : 'https://eventespresso.com';
1122
-        // cycle thru settings
1123
-        foreach (self::$_settings as $settings) {
1124
-            if (! empty($settings['pue_options'])) {
1125
-                // initiate the class and start the plugin update engine!
1126
-                new PluginUpdateEngineChecker(
1127
-                    // host file URL
1128
-                    $license_server,
1129
-                    // plugin slug(s)
1130
-                    array(
1131
-                        'premium'    => array('p' => $settings['pue_options']['pue_plugin_slug']),
1132
-                        'prerelease' => array('beta' => $settings['pue_options']['pue_plugin_slug'] . '-pr'),
1133
-                    ),
1134
-                    // options
1135
-                    array(
1136
-                        'apikey'            => EE_Registry::instance()->NET_CFG->core->site_license_key,
1137
-                        'lang_domain'       => 'event_espresso',
1138
-                        'checkPeriod'       => $settings['pue_options']['checkPeriod'],
1139
-                        'option_key'        => 'ee_site_license_key',
1140
-                        'options_page_slug' => 'event_espresso',
1141
-                        'plugin_basename'   => $settings['pue_options']['plugin_basename'],
1142
-                        // if use_wp_update is TRUE it means you want FREE versions of the plugin to be updated from WP
1143
-                        'use_wp_update'     => $settings['pue_options']['use_wp_update'],
1144
-                    )
1145
-                );
1146
-            }
1147
-        }
1148
-    }
1149
-
1150
-
1151
-    /**
1152
-     * Callback for EE_Brewing_Regular__messages_caf hook used to register message types.
1153
-     *
1154
-     * @since 4.4.0
1155
-     * @return void
1156
-     * @throws EE_Error
1157
-     */
1158
-    public static function register_message_types()
1159
-    {
1160
-        foreach (self::$_settings as $settings) {
1161
-            if (! empty($settings['message_types'])) {
1162
-                foreach ((array) $settings['message_types'] as $message_type => $message_type_settings) {
1163
-                    EE_Register_Message_Type::register($message_type, $message_type_settings);
1164
-                }
1165
-            }
1166
-        }
1167
-    }
1168
-
1169
-
1170
-    /**
1171
-     * This deregisters an addon that was previously registered with a specific addon_name.
1172
-     *
1173
-     * @param string $addon_name the name for the addon that was previously registered
1174
-     * @throws DomainException
1175
-     * @throws InvalidArgumentException
1176
-     * @throws InvalidDataTypeException
1177
-     * @throws InvalidInterfaceException
1178
-     *@since    4.3.0
1179
-     */
1180
-    public static function deregister($addon_name = '')
1181
-    {
1182
-        if (isset(self::$_settings[ $addon_name ]['class_name'])) {
1183
-            try {
1184
-                do_action('AHEE__EE_Register_Addon__deregister__before', $addon_name);
1185
-                $class_name = self::$_settings[ $addon_name ]['class_name'];
1186
-                if (! empty(self::$_settings[ $addon_name ]['dms_paths'])) {
1187
-                    // setup DMS
1188
-                    EE_Register_Data_Migration_Scripts::deregister($addon_name);
1189
-                }
1190
-                if (! empty(self::$_settings[ $addon_name ]['admin_path'])) {
1191
-                    // register admin page
1192
-                    EE_Register_Admin_Page::deregister($addon_name);
1193
-                }
1194
-                if (! empty(self::$_settings[ $addon_name ]['module_paths'])) {
1195
-                    // add to list of modules to be registered
1196
-                    EE_Register_Module::deregister($addon_name);
1197
-                }
1198
-                if (
1199
-                    ! empty(self::$_settings[ $addon_name ]['shortcode_paths'])
1200
-                    || ! empty(self::$_settings[ $addon_name ]['shortcode_fqcns'])
1201
-                ) {
1202
-                    // add to list of shortcodes to be registered
1203
-                    EE_Register_Shortcode::deregister($addon_name);
1204
-                }
1205
-                if (! empty(self::$_settings[ $addon_name ]['config_class'])) {
1206
-                    // if config_class present let's register config.
1207
-                    EE_Register_Config::deregister(self::$_settings[ $addon_name ]['config_class']);
1208
-                }
1209
-                if (! empty(self::$_settings[ $addon_name ]['widget_paths'])) {
1210
-                    // add to list of widgets to be registered
1211
-                    EE_Register_Widget::deregister($addon_name);
1212
-                }
1213
-                if (
1214
-                    ! empty(self::$_settings[ $addon_name ]['model_paths'])
1215
-                    || ! empty(self::$_settings[ $addon_name ]['class_paths'])
1216
-                ) {
1217
-                    // add to list of shortcodes to be registered
1218
-                    EE_Register_Model::deregister($addon_name);
1219
-                }
1220
-                if (
1221
-                    ! empty(self::$_settings[ $addon_name ]['model_extension_paths'])
1222
-                    || ! empty(self::$_settings[ $addon_name ]['class_extension_paths'])
1223
-                ) {
1224
-                    // add to list of shortcodes to be registered
1225
-                    EE_Register_Model_Extensions::deregister($addon_name);
1226
-                }
1227
-                if (! empty(self::$_settings[ $addon_name ]['message_types'])) {
1228
-                    foreach ((array) self::$_settings[ $addon_name ]['message_types'] as $message_type => $message_type_settings) {
1229
-                        EE_Register_Message_Type::deregister($message_type);
1230
-                    }
1231
-                }
1232
-                // deregister capabilities for addon
1233
-                if (
1234
-                    ! empty(self::$_settings[ $addon_name ]['capabilities'])
1235
-                    || ! empty(self::$_settings[ $addon_name ]['capability_maps'])
1236
-                ) {
1237
-                    EE_Register_Capabilities::deregister($addon_name);
1238
-                }
1239
-                // deregister custom_post_types for addon
1240
-                if (! empty(self::$_settings[ $addon_name ]['custom_post_types'])) {
1241
-                    EE_Register_CPT::deregister($addon_name);
1242
-                }
1243
-                if (! empty(self::$_settings[ $addon_name ]['payment_method_paths'])) {
1244
-                    EE_Register_Payment_Method::deregister($addon_name);
1245
-                }
1246
-                $addon = EE_Registry::instance()->getAddon($class_name);
1247
-                if ($addon instanceof EE_Addon) {
1248
-                    remove_action(
1249
-                        'deactivate_' . $addon->get_main_plugin_file_basename(),
1250
-                        array($addon, 'deactivation')
1251
-                    );
1252
-                    remove_action(
1253
-                        'AHEE__EE_System__perform_activations_upgrades_and_migrations',
1254
-                        array($addon, 'initialize_db_if_no_migrations_required')
1255
-                    );
1256
-                    // remove `after_registration` call
1257
-                    remove_action(
1258
-                        'AHEE__EE_System__load_espresso_addons__complete',
1259
-                        array($addon, 'after_registration'),
1260
-                        999
1261
-                    );
1262
-                }
1263
-                EE_Registry::instance()->removeAddon($class_name);
1264
-                LoaderFactory::getLoader()->remove($class_name, $addon);
1265
-            } catch (OutOfBoundsException $addon_not_yet_registered_exception) {
1266
-                // the add-on was not yet registered in the registry,
1267
-                // so RegistryContainer::__get() throws this exception.
1268
-                // also no need to worry about this or log it,
1269
-                // it's ok to deregister an add-on before its registered in the registry
1270
-            } catch (Exception $e) {
1271
-                new ExceptionLogger($e);
1272
-            }
1273
-            unset(self::$_settings[ $addon_name ]);
1274
-            do_action('AHEE__EE_Register_Addon__deregister__after', $addon_name);
1275
-        }
1276
-    }
25
+	/**
26
+	 * possibly truncated version of the EE core version string
27
+	 *
28
+	 * @var string
29
+	 */
30
+	protected static $_core_version = '';
31
+
32
+	/**
33
+	 * Holds values for registered addons
34
+	 *
35
+	 * @var array
36
+	 */
37
+	protected static $_settings = array();
38
+
39
+	/**
40
+	 * @var  array $_incompatible_addons keys are addon SLUGS
41
+	 * (first argument passed to EE_Register_Addon::register()), keys are
42
+	 * their MINIMUM VERSION (with all 5 parts. Eg 1.2.3.rc.004).
43
+	 * Generally this should be used sparingly, as we don't want to muddle up
44
+	 * EE core with knowledge of ALL the addons out there.
45
+	 * If you want NO versions of an addon to run with a certain version of core,
46
+	 * it's usually best to define the addon's "min_core_version" as part of its call
47
+	 * to EE_Register_Addon::register(), rather than using this array with a super high value for its
48
+	 * minimum plugin version.
49
+	 * @access    protected
50
+	 */
51
+	protected static $_incompatible_addons = array(
52
+		'Multi_Event_Registration' => '2.0.11.rc.002',
53
+		'Promotions'               => '1.0.0.rc.084',
54
+	);
55
+
56
+
57
+	/**
58
+	 * We should always be comparing core to a version like '4.3.0.rc.000',
59
+	 * not just '4.3.0'.
60
+	 * So if the addon developer doesn't provide that full version string,
61
+	 * fill in the blanks for them
62
+	 *
63
+	 * @param string $min_core_version
64
+	 * @return string always like '4.3.0.rc.000'
65
+	 */
66
+	protected static function _effective_version($min_core_version)
67
+	{
68
+		// versions: 4 . 3 . 1 . p . 123
69
+		// offsets:    0 . 1 . 2 . 3 . 4
70
+		$version_parts = explode('.', $min_core_version);
71
+		// check they specified the micro version (after 2nd period)
72
+		if (! isset($version_parts[2])) {
73
+			$version_parts[2] = '0';
74
+		}
75
+		// if they didn't specify the 'p', or 'rc' part. Just assume the lowest possible
76
+		// soon we can assume that's 'rc', but this current version is 'alpha'
77
+		if (! isset($version_parts[3])) {
78
+			$version_parts[3] = 'dev';
79
+		}
80
+		if (! isset($version_parts[4])) {
81
+			$version_parts[4] = '000';
82
+		}
83
+		return implode('.', $version_parts);
84
+	}
85
+
86
+
87
+	/**
88
+	 * Returns whether or not the min core version requirement of the addon is met
89
+	 *
90
+	 * @param string $min_core_version    the minimum core version required by the addon
91
+	 * @param string $actual_core_version the actual core version, optional
92
+	 * @return boolean
93
+	 */
94
+	public static function _meets_min_core_version_requirement(
95
+		$min_core_version,
96
+		$actual_core_version = EVENT_ESPRESSO_VERSION
97
+	) {
98
+		return version_compare(
99
+			self::_effective_version($actual_core_version),
100
+			self::_effective_version($min_core_version),
101
+			'>='
102
+		);
103
+	}
104
+
105
+
106
+	/**
107
+	 * Method for registering new EE_Addons.
108
+	 * Should be called AFTER AHEE__EE_System__load_espresso_addons but BEFORE
109
+	 * AHEE__EE_System___detect_if_activation_or_upgrade__begin in order to register all its components. However, it
110
+	 * may also be called after the 'activate_plugin' action (when an addon is activated), because an activating addon
111
+	 * won't be loaded by WP until after AHEE__EE_System__load_espresso_addons has fired. If its called after
112
+	 * 'activate_plugin', it registers the addon still, but its components are not registered
113
+	 * (they shouldn't be needed anyways, because it's just an activation request and they won't have a chance to do
114
+	 * anything anyways). Instead, it just sets the newly-activated addon's activation indicator wp option and returns
115
+	 * (so that we can detect that the addon has activated on the subsequent request)
116
+	 *
117
+	 * @since    4.3.0
118
+	 * @param string                  $addon_name                       [Required] the EE_Addon's name.
119
+	 * @param  array                  $setup_args                       {
120
+	 *                                                                  An array of arguments provided for registering
121
+	 *                                                                  the message type.
122
+	 * @type  string                  $class_name                       the addon's main file name.
123
+	 *                                                                  If left blank, generated from the addon name,
124
+	 *                                                                  changes something like "calendar" to
125
+	 *                                                                  "EE_Calendar"
126
+	 * @type string                   $min_core_version                 the minimum version of EE Core that the
127
+	 *                                                                  addon will work with. eg "4.8.1.rc.084"
128
+	 * @type string                   $version                          the "software" version for the addon. eg
129
+	 *                                                                  "1.0.0.p" for a first stable release, or
130
+	 *                                                                  "1.0.0.rc.043" for a version in progress
131
+	 * @type string                   $main_file_path                   the full server path to the main file
132
+	 *                                                                  loaded directly by WP
133
+	 * @type DomainInterface $domain                                    child class of
134
+	 *                                                                  EventEspresso\core\domain\DomainBase
135
+	 * @type string                   $domain_fqcn                      Fully Qualified Class Name
136
+	 *                                                                  for the addon's Domain class
137
+	 *                                                                  (see EventEspresso\core\domain\Domain)
138
+	 * @type string                   $admin_path                       full server path to the folder where the
139
+	 *                                                                  addon\'s admin files reside
140
+	 * @type string                   $admin_callback                   a method to be called when the EE Admin is
141
+	 *                                                                  first invoked, can be used for hooking into
142
+	 *                                                                  any admin page
143
+	 * @type string                   $config_section                   the section name for this addon's
144
+	 *                                                                  configuration settings section
145
+	 *                                                                  (defaults to "addons")
146
+	 * @type string                   $config_class                     the class name for this addon's
147
+	 *                                                                  configuration settings object
148
+	 * @type string                   $config_name                      the class name for this addon's
149
+	 *                                                                  configuration settings object
150
+	 * @type string                   $autoloader_paths                 [Required] an array of class names and the full
151
+	 *                                                                  server paths to those files.
152
+	 * @type string                   $autoloader_folders               an array of  "full server paths" for any
153
+	 *                                                                  folders containing classes that might be
154
+	 *                                                                  invoked by the addon
155
+	 * @type string                   $dms_paths                        [Required] an array of full server paths to
156
+	 *                                                                  folders that contain data migration scripts.
157
+	 *                                                                  The key should be the EE_Addon class name that
158
+	 *                                                                  this set of data migration scripts belongs to.
159
+	 *                                                                  If the EE_Addon class is namespaced, then this
160
+	 *                                                                  needs to be the Fully Qualified Class Name
161
+	 * @type string                   $module_paths                     an array of full server paths to any
162
+	 *                                                                  EED_Modules used by the addon
163
+	 * @type string                   $shortcode_paths                  an array of full server paths to folders
164
+	 *                                                                  that contain EES_Shortcodes
165
+	 * @type string                   $widget_paths                     an array of full server paths to folders
166
+	 *                                                                  that contain WP_Widgets
167
+	 * @type string                   $pue_options
168
+	 * @type array                    $capabilities                     an array indexed by role name
169
+	 *                                                                  (i.e administrator,author ) and the values
170
+	 *                                                                  are an array of caps to add to the role.
171
+	 *                                                                  'administrator' => array(
172
+	 *                                                                  'read_addon',
173
+	 *                                                                  'edit_addon',
174
+	 *                                                                  etc.
175
+	 *                                                                  ).
176
+	 * @type EE_Meta_Capability_Map[] $capability_maps                  an array of EE_Meta_Capability_Map object
177
+	 *                                                                  for any addons that need to register any
178
+	 *                                                                  special meta mapped capabilities.  Should
179
+	 *                                                                  be indexed where the key is the
180
+	 *                                                                  EE_Meta_Capability_Map class name and the
181
+	 *                                                                  values are the arguments sent to the class.
182
+	 * @type array                    $model_paths                      array of folders containing DB models
183
+	 * @see      EE_Register_Model
184
+	 * @type array                    $class_paths                      array of folders containing DB classes
185
+	 * @see      EE_Register_Model
186
+	 * @type array                    $model_extension_paths            array of folders containing DB model
187
+	 *                                                                  extensions
188
+	 * @see      EE_Register_Model_Extension
189
+	 * @type array                    $class_extension_paths            array of folders containing DB class
190
+	 *                                                                  extensions
191
+	 * @see      EE_Register_Model_Extension
192
+	 * @type array message_types {
193
+	 *                                                                  An array of message types with the key as
194
+	 *                                                                  the message type name and the values as
195
+	 *                                                                  below:
196
+	 * @type string                   $mtfilename                       [Required] The filename of the message type
197
+	 *                                                                  being registered. This will be the main
198
+	 *                                                                  EE_{Message Type Name}_message_type class.
199
+	 *                                                                  for example:
200
+	 *                                                                  EE_Declined_Registration_message_type.class.php
201
+	 * @type array                    $autoloadpaths                    [Required] An array of paths to add to the
202
+	 *                                                                  messages autoloader for the new message type.
203
+	 * @type array                    $messengers_to_activate_with      An array of messengers that this message
204
+	 *                                                                  type should activate with. Each value in
205
+	 *                                                                  the
206
+	 *                                                                  array
207
+	 *                                                                  should match the name property of a
208
+	 *                                                                  EE_messenger. Optional.
209
+	 * @type array                    $messengers_to_validate_with      An array of messengers that this message
210
+	 *                                                                  type should validate with. Each value in
211
+	 *                                                                  the
212
+	 *                                                                  array
213
+	 *                                                                  should match the name property of an
214
+	 *                                                                  EE_messenger.
215
+	 *                                                                  Optional.
216
+	 *                                                                  }
217
+	 * @type array                    $custom_post_types
218
+	 * @type array                    $custom_taxonomies
219
+	 * @type array                    $payment_method_paths             each element is the folder containing the
220
+	 *                                                                  EE_PMT_Base child class
221
+	 *                                                                  (eg,
222
+	 *                                                                  '/wp-content/plugins/my_plugin/Payomatic/'
223
+	 *                                                                  which contains the files
224
+	 *                                                                  EE_PMT_Payomatic.pm.php)
225
+	 * @type array                    $default_terms
226
+	 * @type array                    $namespace                        {
227
+	 *                                                                  An array with two items for registering the
228
+	 *                                                                  addon's namespace. (If, for some reason, you
229
+	 *                                                                  require additional namespaces,
230
+	 *                                                                  use
231
+	 *                                                                  EventEspresso\core\Psr4Autoloader::addNamespace()
232
+	 *                                                                  directly)
233
+	 * @see      EventEspresso\core\Psr4Autoloader::addNamespace()
234
+	 * @type string                   $FQNS                             the namespace prefix
235
+	 * @type string                   $DIR                              a base directory for class files in the
236
+	 *                                                                  namespace.
237
+	 *                                                                  }
238
+	 *                                                                  }
239
+	 * @type string                   $privacy_policies                 FQNSs (namespaces, each of which contains only
240
+	 *                                                                  privacy policy classes) or FQCNs (specific
241
+	 *                                                                  classnames of privacy policy classes)
242
+	 * @type string                   $personal_data_exporters          FQNSs (namespaces, each of which contains only
243
+	 *                                                                  privacy policy classes) or FQCNs (specific
244
+	 *                                                                  classnames of privacy policy classes)
245
+	 * @type string                   $personal_data_erasers            FQNSs (namespaces, each of which contains only
246
+	 *                                                                  privacy policy classes) or FQCNs (specific
247
+	 *                                                                  classnames of privacy policy classes)
248
+	 * @return void
249
+	 * @throws DomainException
250
+	 * @throws EE_Error
251
+	 * @throws InvalidArgumentException
252
+	 * @throws InvalidDataTypeException
253
+	 * @throws InvalidInterfaceException
254
+	 */
255
+	public static function register($addon_name = '', array $setup_args = array())
256
+	{
257
+		// required fields MUST be present, so let's make sure they are.
258
+		EE_Register_Addon::_verify_parameters($addon_name, $setup_args);
259
+		// get class name for addon
260
+		$class_name = EE_Register_Addon::_parse_class_name($addon_name, $setup_args);
261
+		// setup $_settings array from incoming values.
262
+		$addon_settings = EE_Register_Addon::_get_addon_settings($class_name, $setup_args);
263
+		// setup PUE
264
+		EE_Register_Addon::_parse_pue_options($addon_name, $class_name, $setup_args);
265
+		// does this addon work with this version of core or WordPress ?
266
+		// does this addon work with this version of core or WordPress ?
267
+		if (! EE_Register_Addon::_addon_is_compatible($addon_name, $addon_settings)) {
268
+			return;
269
+		}
270
+		// register namespaces
271
+		EE_Register_Addon::_setup_namespaces($addon_settings);
272
+		// check if this is an activation request
273
+		if (EE_Register_Addon::_addon_activation($addon_name, $addon_settings)) {
274
+			// dont bother setting up the rest of the addon atm
275
+			return;
276
+		}
277
+		// we need cars
278
+		EE_Register_Addon::_setup_autoloaders($addon_name);
279
+		// register new models and extensions
280
+		EE_Register_Addon::_register_models_and_extensions($addon_name);
281
+		// setup DMS
282
+		EE_Register_Addon::_register_data_migration_scripts($addon_name);
283
+		// if config_class is present let's register config.
284
+		EE_Register_Addon::_register_config($addon_name);
285
+		// register admin pages
286
+		EE_Register_Addon::_register_admin_pages($addon_name);
287
+		// add to list of modules to be registered
288
+		EE_Register_Addon::_register_modules($addon_name);
289
+		// add to list of shortcodes to be registered
290
+		EE_Register_Addon::_register_shortcodes($addon_name);
291
+		// add to list of widgets to be registered
292
+		EE_Register_Addon::_register_widgets($addon_name);
293
+		// register capability related stuff.
294
+		EE_Register_Addon::_register_capabilities($addon_name);
295
+		// any message type to register?
296
+		EE_Register_Addon::_register_message_types($addon_name);
297
+		// any custom post type/ custom capabilities or default terms to register
298
+		EE_Register_Addon::_register_custom_post_types($addon_name);
299
+		// and any payment methods
300
+		EE_Register_Addon::_register_payment_methods($addon_name);
301
+		// and privacy policy generators
302
+		EE_Register_Addon::registerPrivacyPolicies($addon_name);
303
+		// and privacy policy generators
304
+		EE_Register_Addon::registerPersonalDataExporters($addon_name);
305
+		// and privacy policy generators
306
+		EE_Register_Addon::registerPersonalDataErasers($addon_name);
307
+		// load and instantiate main addon class
308
+		$addon = EE_Register_Addon::_load_and_init_addon_class($addon_name);
309
+		// delay calling after_registration hook on each addon until after all add-ons have been registered.
310
+		add_action('AHEE__EE_System__load_espresso_addons__complete', array($addon, 'after_registration'), 999);
311
+	}
312
+
313
+
314
+	/**
315
+	 * @param string $addon_name
316
+	 * @param array  $setup_args
317
+	 * @return void
318
+	 * @throws EE_Error
319
+	 */
320
+	private static function _verify_parameters($addon_name, array $setup_args)
321
+	{
322
+		// required fields MUST be present, so let's make sure they are.
323
+		if (empty($addon_name) || ! is_array($setup_args)) {
324
+			throw new EE_Error(
325
+				esc_html__(
326
+					'In order to register an EE_Addon with EE_Register_Addon::register(), you must include the "addon_name" (the name of the addon), and an array of arguments.',
327
+					'event_espresso'
328
+				)
329
+			);
330
+		}
331
+		if (! isset($setup_args['main_file_path']) || empty($setup_args['main_file_path'])) {
332
+			throw new EE_Error(
333
+				sprintf(
334
+					esc_html__(
335
+						'When registering an addon, you didn\'t provide the "main_file_path", which is the full path to the main file loaded directly by Wordpress. You only provided %s',
336
+						'event_espresso'
337
+					),
338
+					implode(',', array_keys($setup_args))
339
+				)
340
+			);
341
+		}
342
+		// check that addon has not already been registered with that name
343
+		if (isset(self::$_settings[ $addon_name ]) && ! did_action('activate_plugin')) {
344
+			throw new EE_Error(
345
+				sprintf(
346
+					esc_html__(
347
+						'An EE_Addon with the name "%s" has already been registered and each EE_Addon requires a unique name.',
348
+						'event_espresso'
349
+					),
350
+					$addon_name
351
+				)
352
+			);
353
+		}
354
+	}
355
+
356
+
357
+	/**
358
+	 * @param string $addon_name
359
+	 * @param array  $setup_args
360
+	 * @return string
361
+	 */
362
+	private static function _parse_class_name($addon_name, array $setup_args)
363
+	{
364
+		if (empty($setup_args['class_name'])) {
365
+			// generate one by first separating name with spaces
366
+			$class_name = str_replace(array('-', '_'), ' ', trim($addon_name));
367
+			// capitalize, then replace spaces with underscores
368
+			$class_name = str_replace(' ', '_', ucwords($class_name));
369
+		} else {
370
+			$class_name = $setup_args['class_name'];
371
+		}
372
+		// check if classname is fully  qualified or is a legacy classname already prefixed with 'EE_'
373
+		return strpos($class_name, '\\') || strpos($class_name, 'EE_') === 0
374
+			? $class_name
375
+			: 'EE_' . $class_name;
376
+	}
377
+
378
+
379
+	/**
380
+	 * @param string $class_name
381
+	 * @param array  $setup_args
382
+	 * @return array
383
+	 */
384
+	private static function _get_addon_settings($class_name, array $setup_args)
385
+	{
386
+		// setup $_settings array from incoming values.
387
+		$addon_settings = array(
388
+			// generated from the addon name, changes something like "calendar" to "EE_Calendar"
389
+			'class_name'            => $class_name,
390
+			// the addon slug for use in URLs, etc
391
+			'plugin_slug'           => isset($setup_args['plugin_slug'])
392
+				? (string) $setup_args['plugin_slug']
393
+				: '',
394
+			// page slug to be used when generating the "Settings" link on the WP plugin page
395
+			'plugin_action_slug'    => isset($setup_args['plugin_action_slug'])
396
+				? (string) $setup_args['plugin_action_slug']
397
+				: '',
398
+			// the "software" version for the addon
399
+			'version'               => isset($setup_args['version'])
400
+				? (string) $setup_args['version']
401
+				: '',
402
+			// the minimum version of EE Core that the addon will work with
403
+			'min_core_version'      => isset($setup_args['min_core_version'])
404
+				? (string) $setup_args['min_core_version']
405
+				: '',
406
+			// the minimum version of WordPress that the addon will work with
407
+			'min_wp_version'        => isset($setup_args['min_wp_version'])
408
+				? (string) $setup_args['min_wp_version']
409
+				: EE_MIN_WP_VER_REQUIRED,
410
+			// full server path to main file (file loaded directly by WP)
411
+			'main_file_path'        => isset($setup_args['main_file_path'])
412
+				? (string) $setup_args['main_file_path']
413
+				: '',
414
+			// instance of \EventEspresso\core\domain\DomainInterface
415
+			'domain'                => isset($setup_args['domain']) && $setup_args['domain'] instanceof DomainInterface
416
+				? $setup_args['domain']
417
+				: null,
418
+			// Fully Qualified Class Name for the addon's Domain class
419
+			'domain_fqcn'           => isset($setup_args['domain_fqcn'])
420
+				? (string) $setup_args['domain_fqcn']
421
+				: '',
422
+			// path to folder containing files for integrating with the EE core admin and/or setting up EE admin pages
423
+			'admin_path'            => isset($setup_args['admin_path'])
424
+				? (string) $setup_args['admin_path'] : '',
425
+			// a method to be called when the EE Admin is first invoked, can be used for hooking into any admin page
426
+			'admin_callback'        => isset($setup_args['admin_callback'])
427
+				? (string) $setup_args['admin_callback']
428
+				: '',
429
+			// the section name for this addon's configuration settings section (defaults to "addons")
430
+			'config_section'        => isset($setup_args['config_section'])
431
+				? (string) $setup_args['config_section']
432
+				: 'addons',
433
+			// the class name for this addon's configuration settings object
434
+			'config_class'          => isset($setup_args['config_class'])
435
+				? (string) $setup_args['config_class'] : '',
436
+			// the name given to the config for this addons' configuration settings object (optional)
437
+			'config_name'           => isset($setup_args['config_name'])
438
+				? (string) $setup_args['config_name'] : '',
439
+			// an array of "class names" => "full server paths" for any classes that might be invoked by the addon
440
+			'autoloader_paths'      => isset($setup_args['autoloader_paths'])
441
+				? (array) $setup_args['autoloader_paths']
442
+				: array(),
443
+			// an array of  "full server paths" for any folders containing classes that might be invoked by the addon
444
+			'autoloader_folders'    => isset($setup_args['autoloader_folders'])
445
+				? (array) $setup_args['autoloader_folders']
446
+				: array(),
447
+			// array of full server paths to any EE_DMS data migration scripts used by the addon.
448
+			// The key should be the EE_Addon class name that this set of data migration scripts belongs to.
449
+			// If the EE_Addon class is namespaced, then this needs to be the Fully Qualified Class Name
450
+			'dms_paths'             => isset($setup_args['dms_paths'])
451
+				? (array) $setup_args['dms_paths']
452
+				: array(),
453
+			// array of full server paths to any EED_Modules used by the addon
454
+			'module_paths'          => isset($setup_args['module_paths'])
455
+				? (array) $setup_args['module_paths']
456
+				: array(),
457
+			// array of full server paths to any EES_Shortcodes used by the addon
458
+			'shortcode_paths'       => isset($setup_args['shortcode_paths'])
459
+				? (array) $setup_args['shortcode_paths']
460
+				: array(),
461
+			'shortcode_fqcns'       => isset($setup_args['shortcode_fqcns'])
462
+				? (array) $setup_args['shortcode_fqcns']
463
+				: array(),
464
+			// array of full server paths to any WP_Widgets used by the addon
465
+			'widget_paths'          => isset($setup_args['widget_paths'])
466
+				? (array) $setup_args['widget_paths']
467
+				: array(),
468
+			// array of PUE options used by the addon
469
+			'pue_options'           => isset($setup_args['pue_options'])
470
+				? (array) $setup_args['pue_options']
471
+				: array(),
472
+			'message_types'         => isset($setup_args['message_types'])
473
+				? (array) $setup_args['message_types']
474
+				: array(),
475
+			'capabilities'          => isset($setup_args['capabilities'])
476
+				? (array) $setup_args['capabilities']
477
+				: array(),
478
+			'capability_maps'       => isset($setup_args['capability_maps'])
479
+				? (array) $setup_args['capability_maps']
480
+				: array(),
481
+			'model_paths'           => isset($setup_args['model_paths'])
482
+				? (array) $setup_args['model_paths']
483
+				: array(),
484
+			'class_paths'           => isset($setup_args['class_paths'])
485
+				? (array) $setup_args['class_paths']
486
+				: array(),
487
+			'model_extension_paths' => isset($setup_args['model_extension_paths'])
488
+				? (array) $setup_args['model_extension_paths']
489
+				: array(),
490
+			'class_extension_paths' => isset($setup_args['class_extension_paths'])
491
+				? (array) $setup_args['class_extension_paths']
492
+				: array(),
493
+			'custom_post_types'     => isset($setup_args['custom_post_types'])
494
+				? (array) $setup_args['custom_post_types']
495
+				: array(),
496
+			'custom_taxonomies'     => isset($setup_args['custom_taxonomies'])
497
+				? (array) $setup_args['custom_taxonomies']
498
+				: array(),
499
+			'payment_method_paths'  => isset($setup_args['payment_method_paths'])
500
+				? (array) $setup_args['payment_method_paths']
501
+				: array(),
502
+			'default_terms'         => isset($setup_args['default_terms'])
503
+				? (array) $setup_args['default_terms']
504
+				: array(),
505
+			// if not empty, inserts a new table row after this plugin's row on the WP Plugins page
506
+			// that can be used for adding upgrading/marketing info
507
+			'plugins_page_row'      => isset($setup_args['plugins_page_row']) ? $setup_args['plugins_page_row'] : '',
508
+			'namespace'             => isset(
509
+				$setup_args['namespace']['FQNS'],
510
+				$setup_args['namespace']['DIR']
511
+			)
512
+				? (array) $setup_args['namespace']
513
+				: array(),
514
+			'privacy_policies'      => isset($setup_args['privacy_policies'])
515
+				? (array) $setup_args['privacy_policies']
516
+				: '',
517
+		);
518
+		// if plugin_action_slug is NOT set, but an admin page path IS set,
519
+		// then let's just use the plugin_slug since that will be used for linking to the admin page
520
+		$addon_settings['plugin_action_slug'] = empty($addon_settings['plugin_action_slug'])
521
+												&& ! empty($addon_settings['admin_path'])
522
+			? $addon_settings['plugin_slug']
523
+			: $addon_settings['plugin_action_slug'];
524
+		// full server path to main file (file loaded directly by WP)
525
+		$addon_settings['plugin_basename'] = plugin_basename($addon_settings['main_file_path']);
526
+		return $addon_settings;
527
+	}
528
+
529
+
530
+	/**
531
+	 * @param string $addon_name
532
+	 * @param array  $addon_settings
533
+	 * @return boolean
534
+	 */
535
+	private static function _addon_is_compatible($addon_name, array $addon_settings)
536
+	{
537
+		global $wp_version;
538
+		$incompatibility_message = '';
539
+		// check whether this addon version is compatible with EE core
540
+		if (
541
+			isset(EE_Register_Addon::$_incompatible_addons[ $addon_name ])
542
+			&& ! self::_meets_min_core_version_requirement(
543
+				EE_Register_Addon::$_incompatible_addons[ $addon_name ],
544
+				$addon_settings['version']
545
+			)
546
+		) {
547
+			$incompatibility_message = sprintf(
548
+				esc_html__(
549
+					'%4$sIMPORTANT!%5$sThe Event Espresso "%1$s" addon is not compatible with this version of Event Espresso.%2$sPlease upgrade your "%1$s" addon to version %3$s or newer to resolve this issue.',
550
+					'event_espresso'
551
+				),
552
+				$addon_name,
553
+				'<br />',
554
+				EE_Register_Addon::$_incompatible_addons[ $addon_name ],
555
+				'<span style="font-weight: bold; color: #D54E21;">',
556
+				'</span><br />'
557
+			);
558
+		} elseif (
559
+			! self::_meets_min_core_version_requirement($addon_settings['min_core_version'], espresso_version())
560
+		) {
561
+			$incompatibility_message = sprintf(
562
+				esc_html__(
563
+					'%5$sIMPORTANT!%6$sThe Event Espresso "%1$s" addon requires Event Espresso Core version "%2$s" or higher in order to run.%4$sYour version of Event Espresso Core is currently at "%3$s". Please upgrade Event Espresso Core first and then re-activate "%1$s".',
564
+					'event_espresso'
565
+				),
566
+				$addon_name,
567
+				self::_effective_version($addon_settings['min_core_version']),
568
+				self::_effective_version(espresso_version()),
569
+				'<br />',
570
+				'<span style="font-weight: bold; color: #D54E21;">',
571
+				'</span><br />'
572
+			);
573
+		} elseif (version_compare($wp_version, $addon_settings['min_wp_version'], '<')) {
574
+			$incompatibility_message = sprintf(
575
+				esc_html__(
576
+					'%4$sIMPORTANT!%5$sThe Event Espresso "%1$s" addon requires WordPress version "%2$s" or greater.%3$sPlease update your version of WordPress to use the "%1$s" addon and to keep your site secure.',
577
+					'event_espresso'
578
+				),
579
+				$addon_name,
580
+				$addon_settings['min_wp_version'],
581
+				'<br />',
582
+				'<span style="font-weight: bold; color: #D54E21;">',
583
+				'</span><br />'
584
+			);
585
+		}
586
+		if (! empty($incompatibility_message)) {
587
+			// remove 'activate' from the REQUEST
588
+			// so WP doesn't erroneously tell the user the plugin activated fine when it didn't
589
+			/** @var RequestInterface $request */
590
+			$request = LoaderFactory::getLoader()->getShared(RequestInterface::class);
591
+			$request->unSetRequestParam('activate', true);
592
+			if (current_user_can('activate_plugins')) {
593
+				// show an error message indicating the plugin didn't activate properly
594
+				EE_Error::add_error($incompatibility_message, __FILE__, __FUNCTION__, __LINE__);
595
+			}
596
+			// BAIL FROM THE ADDON REGISTRATION PROCESS
597
+			return false;
598
+		}
599
+		// addon IS compatible
600
+		return true;
601
+	}
602
+
603
+
604
+	/**
605
+	 * if plugin update engine is being used for auto-updates,
606
+	 * then let's set that up now before going any further so that ALL addons can be updated
607
+	 * (not needed if PUE is not being used)
608
+	 *
609
+	 * @param string $addon_name
610
+	 * @param string $class_name
611
+	 * @param array  $setup_args
612
+	 * @return void
613
+	 */
614
+	private static function _parse_pue_options($addon_name, $class_name, array $setup_args)
615
+	{
616
+		if (! empty($setup_args['pue_options'])) {
617
+			self::$_settings[ $addon_name ]['pue_options'] = array(
618
+				'pue_plugin_slug' => isset($setup_args['pue_options']['pue_plugin_slug'])
619
+					? (string) $setup_args['pue_options']['pue_plugin_slug']
620
+					: 'espresso_' . strtolower($class_name),
621
+				'plugin_basename' => isset($setup_args['pue_options']['plugin_basename'])
622
+					? (string) $setup_args['pue_options']['plugin_basename']
623
+					: plugin_basename($setup_args['main_file_path']),
624
+				'checkPeriod'     => isset($setup_args['pue_options']['checkPeriod'])
625
+					? (string) $setup_args['pue_options']['checkPeriod']
626
+					: '24',
627
+				'use_wp_update'   => isset($setup_args['pue_options']['use_wp_update'])
628
+					? (string) $setup_args['pue_options']['use_wp_update']
629
+					: false,
630
+			);
631
+			add_action(
632
+				'AHEE__EE_System__brew_espresso__after_pue_init',
633
+				array('EE_Register_Addon', 'load_pue_update')
634
+			);
635
+		}
636
+	}
637
+
638
+
639
+	/**
640
+	 * register namespaces right away before any other files or classes get loaded, but AFTER the version checks
641
+	 *
642
+	 * @param array $addon_settings
643
+	 * @return void
644
+	 */
645
+	private static function _setup_namespaces(array $addon_settings)
646
+	{
647
+		//
648
+		if (
649
+			isset(
650
+				$addon_settings['namespace']['FQNS'],
651
+				$addon_settings['namespace']['DIR']
652
+			)
653
+		) {
654
+			EE_Psr4AutoloaderInit::psr4_loader()->addNamespace(
655
+				$addon_settings['namespace']['FQNS'],
656
+				$addon_settings['namespace']['DIR']
657
+			);
658
+		}
659
+	}
660
+
661
+
662
+	/**
663
+	 * @param string $addon_name
664
+	 * @param array  $addon_settings
665
+	 * @return bool
666
+	 * @throws InvalidArgumentException
667
+	 * @throws InvalidDataTypeException
668
+	 * @throws InvalidInterfaceException
669
+	 */
670
+	private static function _addon_activation($addon_name, array $addon_settings)
671
+	{
672
+		// this is an activation request
673
+		if (did_action('activate_plugin')) {
674
+			// to find if THIS is the addon that was activated, just check if we have already registered it or not
675
+			// (as the newly-activated addon wasn't around the first time addons were registered).
676
+			// Note: the presence of pue_options in the addon registration options will initialize the $_settings
677
+			// property for the add-on, but the add-on is only partially initialized.  Hence, the additional check.
678
+			if (
679
+				! isset(self::$_settings[ $addon_name ])
680
+				|| (isset(self::$_settings[ $addon_name ])
681
+					&& ! isset(self::$_settings[ $addon_name ]['class_name'])
682
+				)
683
+			) {
684
+				self::$_settings[ $addon_name ] = $addon_settings;
685
+				$addon = self::_load_and_init_addon_class($addon_name);
686
+				$addon->set_activation_indicator_option();
687
+				// dont bother setting up the rest of the addon.
688
+				// we know it was just activated and the request will end soon
689
+			}
690
+			return true;
691
+		}
692
+
693
+		// make sure this was called in the right place!
694
+		if (
695
+			! did_action('AHEE__EE_System__load_espresso_addons')
696
+			|| did_action('AHEE__EE_System___detect_if_activation_or_upgrade__begin')
697
+		) {
698
+			EE_Error::doing_it_wrong(
699
+				__METHOD__,
700
+				sprintf(
701
+					esc_html__(
702
+						'An attempt to register an EE_Addon named "%s" has failed because it was not registered at the correct time.  Please use the "AHEE__EE_System__load_espresso_addons" hook to register addons.',
703
+						'event_espresso'
704
+					),
705
+					$addon_name
706
+				),
707
+				'4.3.0'
708
+			);
709
+		}
710
+		// make sure addon settings are set correctly without overwriting anything existing
711
+		if (isset(self::$_settings[ $addon_name ])) {
712
+			self::$_settings[ $addon_name ] += $addon_settings;
713
+		} else {
714
+			self::$_settings[ $addon_name ] = $addon_settings;
715
+		}
716
+		return false;
717
+	}
718
+
719
+
720
+	/**
721
+	 * @param string $addon_name
722
+	 * @return void
723
+	 * @throws EE_Error
724
+	 */
725
+	private static function _setup_autoloaders($addon_name)
726
+	{
727
+		if (! empty(self::$_settings[ $addon_name ]['autoloader_paths'])) {
728
+			// setup autoloader for single file
729
+			EEH_Autoloader::instance()->register_autoloader(self::$_settings[ $addon_name ]['autoloader_paths']);
730
+		}
731
+		// setup autoloaders for folders
732
+		if (! empty(self::$_settings[ $addon_name ]['autoloader_folders'])) {
733
+			foreach ((array) self::$_settings[ $addon_name ]['autoloader_folders'] as $autoloader_folder) {
734
+				EEH_Autoloader::register_autoloaders_for_each_file_in_folder($autoloader_folder);
735
+			}
736
+		}
737
+	}
738
+
739
+
740
+
741
+	/**
742
+	 * register new models and extensions
743
+	 *
744
+	 * @param string $addon_name
745
+	 * @return void
746
+	 * @throws EE_Error
747
+	 */
748
+	private static function _register_models_and_extensions($addon_name)
749
+	{
750
+		// register new models
751
+		if (
752
+			! empty(self::$_settings[ $addon_name ]['model_paths'])
753
+			|| ! empty(self::$_settings[ $addon_name ]['class_paths'])
754
+		) {
755
+			EE_Register_Model::register(
756
+				$addon_name,
757
+				array(
758
+					'model_paths' => self::$_settings[ $addon_name ]['model_paths'],
759
+					'class_paths' => self::$_settings[ $addon_name ]['class_paths'],
760
+				)
761
+			);
762
+		}
763
+		// register model extensions
764
+		if (
765
+			! empty(self::$_settings[ $addon_name ]['model_extension_paths'])
766
+			|| ! empty(self::$_settings[ $addon_name ]['class_extension_paths'])
767
+		) {
768
+			EE_Register_Model_Extensions::register(
769
+				$addon_name,
770
+				array(
771
+					'model_extension_paths' => self::$_settings[ $addon_name ]['model_extension_paths'],
772
+					'class_extension_paths' => self::$_settings[ $addon_name ]['class_extension_paths'],
773
+				)
774
+			);
775
+		}
776
+	}
777
+
778
+
779
+	/**
780
+	 * @param string $addon_name
781
+	 * @return void
782
+	 * @throws EE_Error
783
+	 */
784
+	private static function _register_data_migration_scripts($addon_name)
785
+	{
786
+		// setup DMS
787
+		if (! empty(self::$_settings[ $addon_name ]['dms_paths'])) {
788
+			EE_Register_Data_Migration_Scripts::register(
789
+				$addon_name,
790
+				array('dms_paths' => self::$_settings[ $addon_name ]['dms_paths'])
791
+			);
792
+		}
793
+	}
794
+
795
+
796
+	/**
797
+	 * @param string $addon_name
798
+	 * @return void
799
+	 * @throws EE_Error
800
+	 */
801
+	private static function _register_config($addon_name)
802
+	{
803
+		// if config_class is present let's register config.
804
+		if (! empty(self::$_settings[ $addon_name ]['config_class'])) {
805
+			EE_Register_Config::register(
806
+				self::$_settings[ $addon_name ]['config_class'],
807
+				array(
808
+					'config_section' => self::$_settings[ $addon_name ]['config_section'],
809
+					'config_name'    => self::$_settings[ $addon_name ]['config_name'],
810
+				)
811
+			);
812
+		}
813
+	}
814
+
815
+
816
+	/**
817
+	 * @param string $addon_name
818
+	 * @return void
819
+	 * @throws EE_Error
820
+	 */
821
+	private static function _register_admin_pages($addon_name)
822
+	{
823
+		if (! empty(self::$_settings[ $addon_name ]['admin_path'])) {
824
+			EE_Register_Admin_Page::register(
825
+				$addon_name,
826
+				array('page_path' => self::$_settings[ $addon_name ]['admin_path'])
827
+			);
828
+		}
829
+	}
830
+
831
+
832
+	/**
833
+	 * @param string $addon_name
834
+	 * @return void
835
+	 * @throws EE_Error
836
+	 */
837
+	private static function _register_modules($addon_name)
838
+	{
839
+		if (! empty(self::$_settings[ $addon_name ]['module_paths'])) {
840
+			EE_Register_Module::register(
841
+				$addon_name,
842
+				array('module_paths' => self::$_settings[ $addon_name ]['module_paths'])
843
+			);
844
+		}
845
+	}
846
+
847
+
848
+	/**
849
+	 * @param string $addon_name
850
+	 * @return void
851
+	 * @throws EE_Error
852
+	 */
853
+	private static function _register_shortcodes($addon_name)
854
+	{
855
+		if (
856
+			! empty(self::$_settings[ $addon_name ]['shortcode_paths'])
857
+			|| ! empty(self::$_settings[ $addon_name ]['shortcode_fqcns'])
858
+		) {
859
+			EE_Register_Shortcode::register(
860
+				$addon_name,
861
+				array(
862
+					'shortcode_paths' => isset(self::$_settings[ $addon_name ]['shortcode_paths'])
863
+						? self::$_settings[ $addon_name ]['shortcode_paths'] : array(),
864
+					'shortcode_fqcns' => isset(self::$_settings[ $addon_name ]['shortcode_fqcns'])
865
+						? self::$_settings[ $addon_name ]['shortcode_fqcns'] : array(),
866
+				)
867
+			);
868
+		}
869
+	}
870
+
871
+
872
+	/**
873
+	 * @param string $addon_name
874
+	 * @return void
875
+	 * @throws EE_Error
876
+	 */
877
+	private static function _register_widgets($addon_name)
878
+	{
879
+		if (! empty(self::$_settings[ $addon_name ]['widget_paths'])) {
880
+			EE_Register_Widget::register(
881
+				$addon_name,
882
+				array('widget_paths' => self::$_settings[ $addon_name ]['widget_paths'])
883
+			);
884
+		}
885
+	}
886
+
887
+
888
+	/**
889
+	 * @param string $addon_name
890
+	 * @return void
891
+	 * @throws EE_Error
892
+	 */
893
+	private static function _register_capabilities($addon_name)
894
+	{
895
+		if (! empty(self::$_settings[ $addon_name ]['capabilities'])) {
896
+			EE_Register_Capabilities::register(
897
+				$addon_name,
898
+				array(
899
+					'capabilities'    => self::$_settings[ $addon_name ]['capabilities'],
900
+					'capability_maps' => self::$_settings[ $addon_name ]['capability_maps'],
901
+				)
902
+			);
903
+		}
904
+	}
905
+
906
+
907
+	/**
908
+	 * @param string $addon_name
909
+	 * @return void
910
+	 */
911
+	private static function _register_message_types($addon_name)
912
+	{
913
+		if (! empty(self::$_settings[ $addon_name ]['message_types'])) {
914
+			add_action(
915
+				'EE_Brewing_Regular___messages_caf',
916
+				array('EE_Register_Addon', 'register_message_types')
917
+			);
918
+		}
919
+	}
920
+
921
+
922
+	/**
923
+	 * @param string $addon_name
924
+	 * @return void
925
+	 * @throws EE_Error
926
+	 */
927
+	private static function _register_custom_post_types($addon_name)
928
+	{
929
+		if (
930
+			! empty(self::$_settings[ $addon_name ]['custom_post_types'])
931
+			|| ! empty(self::$_settings[ $addon_name ]['custom_taxonomies'])
932
+		) {
933
+			EE_Register_CPT::register(
934
+				$addon_name,
935
+				array(
936
+					'cpts'          => self::$_settings[ $addon_name ]['custom_post_types'],
937
+					'cts'           => self::$_settings[ $addon_name ]['custom_taxonomies'],
938
+					'default_terms' => self::$_settings[ $addon_name ]['default_terms'],
939
+				)
940
+			);
941
+		}
942
+	}
943
+
944
+
945
+	/**
946
+	 * @param string $addon_name
947
+	 * @return void
948
+	 * @throws InvalidArgumentException
949
+	 * @throws InvalidInterfaceException
950
+	 * @throws InvalidDataTypeException
951
+	 * @throws DomainException
952
+	 * @throws EE_Error
953
+	 */
954
+	private static function _register_payment_methods($addon_name)
955
+	{
956
+		if (! empty(self::$_settings[ $addon_name ]['payment_method_paths'])) {
957
+			EE_Register_Payment_Method::register(
958
+				$addon_name,
959
+				array('payment_method_paths' => self::$_settings[ $addon_name ]['payment_method_paths'])
960
+			);
961
+		}
962
+	}
963
+
964
+
965
+	/**
966
+	 * @param string $addon_name
967
+	 * @return void
968
+	 * @throws InvalidArgumentException
969
+	 * @throws InvalidInterfaceException
970
+	 * @throws InvalidDataTypeException
971
+	 * @throws DomainException
972
+	 */
973
+	private static function registerPrivacyPolicies($addon_name)
974
+	{
975
+		if (! empty(self::$_settings[ $addon_name ]['privacy_policies'])) {
976
+			EE_Register_Privacy_Policy::register(
977
+				$addon_name,
978
+				self::$_settings[ $addon_name ]['privacy_policies']
979
+			);
980
+		}
981
+	}
982
+
983
+
984
+	/**
985
+	 * @param string $addon_name
986
+	 * @return void
987
+	 */
988
+	private static function registerPersonalDataExporters($addon_name)
989
+	{
990
+		if (! empty(self::$_settings[ $addon_name ]['personal_data_exporters'])) {
991
+			EE_Register_Personal_Data_Eraser::register(
992
+				$addon_name,
993
+				self::$_settings[ $addon_name ]['personal_data_exporters']
994
+			);
995
+		}
996
+	}
997
+
998
+
999
+	/**
1000
+	 * @param string $addon_name
1001
+	 * @return void
1002
+	 */
1003
+	private static function registerPersonalDataErasers($addon_name)
1004
+	{
1005
+		if (! empty(self::$_settings[ $addon_name ]['personal_data_erasers'])) {
1006
+			EE_Register_Personal_Data_Eraser::register(
1007
+				$addon_name,
1008
+				self::$_settings[ $addon_name ]['personal_data_erasers']
1009
+			);
1010
+		}
1011
+	}
1012
+
1013
+
1014
+	/**
1015
+	 * Loads and instantiates the EE_Addon class and adds it onto the registry
1016
+	 *
1017
+	 * @param string $addon_name
1018
+	 * @return EE_Addon
1019
+	 * @throws InvalidArgumentException
1020
+	 * @throws InvalidInterfaceException
1021
+	 * @throws InvalidDataTypeException
1022
+	 */
1023
+	private static function _load_and_init_addon_class($addon_name)
1024
+	{
1025
+		$addon = LoaderFactory::getLoader()->getShared(
1026
+			self::$_settings[ $addon_name ]['class_name'],
1027
+			array('EE_Registry::create(addon)' => true)
1028
+		);
1029
+		if (! $addon instanceof EE_Addon) {
1030
+			throw new DomainException(
1031
+				sprintf(
1032
+					esc_html__(
1033
+						'Failed to instantiate the %1$s class. PLease check that the class exists.',
1034
+						'event_espresso'
1035
+					),
1036
+					$addon_name
1037
+				)
1038
+			);
1039
+		}
1040
+		// setter inject dep map if required
1041
+		if ($addon->dependencyMap() === null) {
1042
+			$addon->setDependencyMap(LoaderFactory::getLoader()->getShared('EE_Dependency_Map'));
1043
+		}
1044
+		// setter inject domain if required
1045
+		EE_Register_Addon::injectAddonDomain($addon_name, $addon);
1046
+
1047
+		$addon->set_name($addon_name);
1048
+		$addon->set_plugin_slug(self::$_settings[ $addon_name ]['plugin_slug']);
1049
+		$addon->set_plugin_basename(self::$_settings[ $addon_name ]['plugin_basename']);
1050
+		$addon->set_main_plugin_file(self::$_settings[ $addon_name ]['main_file_path']);
1051
+		$addon->set_plugin_action_slug(self::$_settings[ $addon_name ]['plugin_action_slug']);
1052
+		$addon->set_plugins_page_row(self::$_settings[ $addon_name ]['plugins_page_row']);
1053
+		$addon->set_version(self::$_settings[ $addon_name ]['version']);
1054
+		$addon->set_min_core_version(self::_effective_version(self::$_settings[ $addon_name ]['min_core_version']));
1055
+		$addon->set_config_section(self::$_settings[ $addon_name ]['config_section']);
1056
+		$addon->set_config_class(self::$_settings[ $addon_name ]['config_class']);
1057
+		$addon->set_config_name(self::$_settings[ $addon_name ]['config_name']);
1058
+		// setup the add-on's pue_slug if we have one.
1059
+		if (! empty(self::$_settings[ $addon_name ]['pue_options']['pue_plugin_slug'])) {
1060
+			$addon->setPueSlug(self::$_settings[ $addon_name ]['pue_options']['pue_plugin_slug']);
1061
+		}
1062
+		// unfortunately this can't be hooked in upon construction,
1063
+		// because we don't have the plugin's mainfile path upon construction.
1064
+		register_deactivation_hook($addon->get_main_plugin_file(), array($addon, 'deactivation'));
1065
+		// call any additional admin_callback functions during load_admin_controller hook
1066
+		if (! empty(self::$_settings[ $addon_name ]['admin_callback'])) {
1067
+			add_action(
1068
+				'AHEE__EE_System__load_controllers__load_admin_controllers',
1069
+				array($addon, self::$_settings[ $addon_name ]['admin_callback'])
1070
+			);
1071
+		}
1072
+		return $addon;
1073
+	}
1074
+
1075
+
1076
+	/**
1077
+	 * @param string   $addon_name
1078
+	 * @param EE_Addon $addon
1079
+	 * @since   4.10.13.p
1080
+	 */
1081
+	private static function injectAddonDomain($addon_name, EE_Addon $addon)
1082
+	{
1083
+		if ($addon instanceof RequiresDomainInterface && $addon->domain() === null) {
1084
+			// using supplied Domain object
1085
+			$domain = self::$_settings[ $addon_name ]['domain'] instanceof DomainInterface
1086
+				? self::$_settings[ $addon_name ]['domain']
1087
+				: null;
1088
+			// or construct one using Domain FQCN
1089
+			if ($domain === null && self::$_settings[ $addon_name ]['domain_fqcn'] !== '') {
1090
+				$domain = LoaderFactory::getLoader()->getShared(
1091
+					self::$_settings[ $addon_name ]['domain_fqcn'],
1092
+					[
1093
+						new EventEspresso\core\domain\values\FilePath(
1094
+							self::$_settings[ $addon_name ]['main_file_path']
1095
+						),
1096
+						EventEspresso\core\domain\values\Version::fromString(
1097
+							self::$_settings[ $addon_name ]['version']
1098
+						),
1099
+					]
1100
+				);
1101
+			}
1102
+			if ($domain instanceof DomainInterface) {
1103
+				$addon->setDomain($domain);
1104
+			}
1105
+		}
1106
+	}
1107
+
1108
+
1109
+	/**
1110
+	 *    load_pue_update - Update notifications
1111
+	 *
1112
+	 * @return void
1113
+	 * @throws InvalidArgumentException
1114
+	 * @throws InvalidDataTypeException
1115
+	 * @throws InvalidInterfaceException
1116
+	 */
1117
+	public static function load_pue_update()
1118
+	{
1119
+		// load PUE client
1120
+		require_once EE_THIRD_PARTY . 'pue/pue-client.php';
1121
+		$license_server = defined('PUE_UPDATES_ENDPOINT') ? PUE_UPDATES_ENDPOINT : 'https://eventespresso.com';
1122
+		// cycle thru settings
1123
+		foreach (self::$_settings as $settings) {
1124
+			if (! empty($settings['pue_options'])) {
1125
+				// initiate the class and start the plugin update engine!
1126
+				new PluginUpdateEngineChecker(
1127
+					// host file URL
1128
+					$license_server,
1129
+					// plugin slug(s)
1130
+					array(
1131
+						'premium'    => array('p' => $settings['pue_options']['pue_plugin_slug']),
1132
+						'prerelease' => array('beta' => $settings['pue_options']['pue_plugin_slug'] . '-pr'),
1133
+					),
1134
+					// options
1135
+					array(
1136
+						'apikey'            => EE_Registry::instance()->NET_CFG->core->site_license_key,
1137
+						'lang_domain'       => 'event_espresso',
1138
+						'checkPeriod'       => $settings['pue_options']['checkPeriod'],
1139
+						'option_key'        => 'ee_site_license_key',
1140
+						'options_page_slug' => 'event_espresso',
1141
+						'plugin_basename'   => $settings['pue_options']['plugin_basename'],
1142
+						// if use_wp_update is TRUE it means you want FREE versions of the plugin to be updated from WP
1143
+						'use_wp_update'     => $settings['pue_options']['use_wp_update'],
1144
+					)
1145
+				);
1146
+			}
1147
+		}
1148
+	}
1149
+
1150
+
1151
+	/**
1152
+	 * Callback for EE_Brewing_Regular__messages_caf hook used to register message types.
1153
+	 *
1154
+	 * @since 4.4.0
1155
+	 * @return void
1156
+	 * @throws EE_Error
1157
+	 */
1158
+	public static function register_message_types()
1159
+	{
1160
+		foreach (self::$_settings as $settings) {
1161
+			if (! empty($settings['message_types'])) {
1162
+				foreach ((array) $settings['message_types'] as $message_type => $message_type_settings) {
1163
+					EE_Register_Message_Type::register($message_type, $message_type_settings);
1164
+				}
1165
+			}
1166
+		}
1167
+	}
1168
+
1169
+
1170
+	/**
1171
+	 * This deregisters an addon that was previously registered with a specific addon_name.
1172
+	 *
1173
+	 * @param string $addon_name the name for the addon that was previously registered
1174
+	 * @throws DomainException
1175
+	 * @throws InvalidArgumentException
1176
+	 * @throws InvalidDataTypeException
1177
+	 * @throws InvalidInterfaceException
1178
+	 *@since    4.3.0
1179
+	 */
1180
+	public static function deregister($addon_name = '')
1181
+	{
1182
+		if (isset(self::$_settings[ $addon_name ]['class_name'])) {
1183
+			try {
1184
+				do_action('AHEE__EE_Register_Addon__deregister__before', $addon_name);
1185
+				$class_name = self::$_settings[ $addon_name ]['class_name'];
1186
+				if (! empty(self::$_settings[ $addon_name ]['dms_paths'])) {
1187
+					// setup DMS
1188
+					EE_Register_Data_Migration_Scripts::deregister($addon_name);
1189
+				}
1190
+				if (! empty(self::$_settings[ $addon_name ]['admin_path'])) {
1191
+					// register admin page
1192
+					EE_Register_Admin_Page::deregister($addon_name);
1193
+				}
1194
+				if (! empty(self::$_settings[ $addon_name ]['module_paths'])) {
1195
+					// add to list of modules to be registered
1196
+					EE_Register_Module::deregister($addon_name);
1197
+				}
1198
+				if (
1199
+					! empty(self::$_settings[ $addon_name ]['shortcode_paths'])
1200
+					|| ! empty(self::$_settings[ $addon_name ]['shortcode_fqcns'])
1201
+				) {
1202
+					// add to list of shortcodes to be registered
1203
+					EE_Register_Shortcode::deregister($addon_name);
1204
+				}
1205
+				if (! empty(self::$_settings[ $addon_name ]['config_class'])) {
1206
+					// if config_class present let's register config.
1207
+					EE_Register_Config::deregister(self::$_settings[ $addon_name ]['config_class']);
1208
+				}
1209
+				if (! empty(self::$_settings[ $addon_name ]['widget_paths'])) {
1210
+					// add to list of widgets to be registered
1211
+					EE_Register_Widget::deregister($addon_name);
1212
+				}
1213
+				if (
1214
+					! empty(self::$_settings[ $addon_name ]['model_paths'])
1215
+					|| ! empty(self::$_settings[ $addon_name ]['class_paths'])
1216
+				) {
1217
+					// add to list of shortcodes to be registered
1218
+					EE_Register_Model::deregister($addon_name);
1219
+				}
1220
+				if (
1221
+					! empty(self::$_settings[ $addon_name ]['model_extension_paths'])
1222
+					|| ! empty(self::$_settings[ $addon_name ]['class_extension_paths'])
1223
+				) {
1224
+					// add to list of shortcodes to be registered
1225
+					EE_Register_Model_Extensions::deregister($addon_name);
1226
+				}
1227
+				if (! empty(self::$_settings[ $addon_name ]['message_types'])) {
1228
+					foreach ((array) self::$_settings[ $addon_name ]['message_types'] as $message_type => $message_type_settings) {
1229
+						EE_Register_Message_Type::deregister($message_type);
1230
+					}
1231
+				}
1232
+				// deregister capabilities for addon
1233
+				if (
1234
+					! empty(self::$_settings[ $addon_name ]['capabilities'])
1235
+					|| ! empty(self::$_settings[ $addon_name ]['capability_maps'])
1236
+				) {
1237
+					EE_Register_Capabilities::deregister($addon_name);
1238
+				}
1239
+				// deregister custom_post_types for addon
1240
+				if (! empty(self::$_settings[ $addon_name ]['custom_post_types'])) {
1241
+					EE_Register_CPT::deregister($addon_name);
1242
+				}
1243
+				if (! empty(self::$_settings[ $addon_name ]['payment_method_paths'])) {
1244
+					EE_Register_Payment_Method::deregister($addon_name);
1245
+				}
1246
+				$addon = EE_Registry::instance()->getAddon($class_name);
1247
+				if ($addon instanceof EE_Addon) {
1248
+					remove_action(
1249
+						'deactivate_' . $addon->get_main_plugin_file_basename(),
1250
+						array($addon, 'deactivation')
1251
+					);
1252
+					remove_action(
1253
+						'AHEE__EE_System__perform_activations_upgrades_and_migrations',
1254
+						array($addon, 'initialize_db_if_no_migrations_required')
1255
+					);
1256
+					// remove `after_registration` call
1257
+					remove_action(
1258
+						'AHEE__EE_System__load_espresso_addons__complete',
1259
+						array($addon, 'after_registration'),
1260
+						999
1261
+					);
1262
+				}
1263
+				EE_Registry::instance()->removeAddon($class_name);
1264
+				LoaderFactory::getLoader()->remove($class_name, $addon);
1265
+			} catch (OutOfBoundsException $addon_not_yet_registered_exception) {
1266
+				// the add-on was not yet registered in the registry,
1267
+				// so RegistryContainer::__get() throws this exception.
1268
+				// also no need to worry about this or log it,
1269
+				// it's ok to deregister an add-on before its registered in the registry
1270
+			} catch (Exception $e) {
1271
+				new ExceptionLogger($e);
1272
+			}
1273
+			unset(self::$_settings[ $addon_name ]);
1274
+			do_action('AHEE__EE_Register_Addon__deregister__after', $addon_name);
1275
+		}
1276
+	}
1277 1277
 }
Please login to merge, or discard this patch.
core/libraries/plugin_api/EE_Register_CPT.lib.php 2 patches
Spacing   +10 added lines, -10 removed lines patch added patch discarded remove patch
@@ -73,7 +73,7 @@  discard block
 block discarded – undo
73 73
             );
74 74
         }
75 75
 
76
-        if (! is_array($setup_args) || (empty($setup_args['cpts']) && empty($setup_args['cts']))) {
76
+        if ( ! is_array($setup_args) || (empty($setup_args['cpts']) && empty($setup_args['cts']))) {
77 77
             throw new EE_Error(
78 78
                 esc_html__(
79 79
                     'In order to register custom post types or custom taxonomies, you must include an array containing either an array of custom post types to register (key "cpts"), an array of custom taxonomies ("cts") or both.',
@@ -83,13 +83,13 @@  discard block
 block discarded – undo
83 83
         }
84 84
 
85 85
         // make sure we don't register twice
86
-        if (isset(self::$_registry[ $identifier ])) {
86
+        if (isset(self::$_registry[$identifier])) {
87 87
             return;
88 88
         }
89 89
 
90 90
         // make sure cpt ref is unique.
91
-        if (isset(self::$_registry[ $identifier ])) {
92
-            $identifier = uniqid() . '_' . $identifier;
91
+        if (isset(self::$_registry[$identifier])) {
92
+            $identifier = uniqid().'_'.$identifier;
93 93
         }
94 94
 
95 95
         // make sure this was called in the right place!
@@ -119,7 +119,7 @@  discard block
 block discarded – undo
119 119
                 : [],
120 120
         ];
121 121
 
122
-        self::$_registry[ $identifier ] = $validated;
122
+        self::$_registry[$identifier] = $validated;
123 123
 
124 124
         // hook into to cpt system
125 125
         add_filter(
@@ -152,7 +152,7 @@  discard block
 block discarded – undo
152 152
     {
153 153
         foreach (self::$_registry as $registries) {
154 154
             foreach ($registries['cpts'] as $cpt_name => $cpt_settings) {
155
-                $custom_post_type_definitions[ $cpt_name ] = $cpt_settings;
155
+                $custom_post_type_definitions[$cpt_name] = $cpt_settings;
156 156
             }
157 157
         }
158 158
         return $custom_post_type_definitions;
@@ -171,7 +171,7 @@  discard block
 block discarded – undo
171 171
     {
172 172
         foreach (self::$_registry as $registries) {
173 173
             foreach ($registries['cts'] as $ct_name => $ct_settings) {
174
-                $custom_taxonomy_definitions[ $ct_name ] = $ct_settings;
174
+                $custom_taxonomy_definitions[$ct_name] = $ct_settings;
175 175
             }
176 176
         }
177 177
         return $custom_taxonomy_definitions;
@@ -211,7 +211,7 @@  discard block
 block discarded – undo
211 211
     {
212 212
         foreach (self::$_registry as $registries) {
213 213
             foreach ($registries['cpts'] as $cpt_name => $cpt_settings) {
214
-                $cpts[ $cpt_name ] = $cpt_settings;
214
+                $cpts[$cpt_name] = $cpt_settings;
215 215
             }
216 216
         }
217 217
         return $cpts;
@@ -227,7 +227,7 @@  discard block
 block discarded – undo
227 227
     {
228 228
         foreach (self::$_registry as $registries) {
229 229
             foreach ($registries['cts'] as $ct_name => $ct_settings) {
230
-                $cts[ $ct_name ] = $ct_settings;
230
+                $cts[$ct_name] = $ct_settings;
231 231
             }
232 232
         }
233 233
         return $cts;
@@ -262,6 +262,6 @@  discard block
 block discarded – undo
262 262
      */
263 263
     public static function deregister($identifier = '')
264 264
     {
265
-        unset(self::$_registry[ $identifier ]);
265
+        unset(self::$_registry[$identifier]);
266 266
     }
267 267
 }
Please login to merge, or discard this patch.
Indentation   +228 added lines, -228 removed lines patch added patch discarded remove patch
@@ -12,255 +12,255 @@
 block discarded – undo
12 12
  */
13 13
 class EE_Register_CPT implements EEI_Plugin_API
14 14
 {
15
-    /**
16
-     * Holds values for registered variations
17
-     *
18
-     * @since 4.5.0
19
-     *
20
-     * @var array[][][]
21
-     */
22
-    protected static $_registry = [];
15
+	/**
16
+	 * Holds values for registered variations
17
+	 *
18
+	 * @since 4.5.0
19
+	 *
20
+	 * @var array[][][]
21
+	 */
22
+	protected static $_registry = [];
23 23
 
24 24
 
25
-    /**
26
-     * Used to register new CPTs and Taxonomies.
27
-     *
28
-     * @param string $identifier              reference used for the addon registering cpts and cts
29
-     * @param array  $setup_args              {
30
-     *                                        An array of required values for registering the cpts and taxonomies
31
-     * @type array   $cpts                    {
32
-     *                                        An array of cpts and their arguments.(short example below)
33
-     * @return void
34
-     * @throws  EE_Error
35
-     * @see CustomPostTypeDefinitions::setDefinitions for a more complete example.
36
-     *                                        'people' => array(
37
-     *                                        'singular_name' => esc_html__('People', 'event_espresso'),
38
-     *                                        'plural_name' => esc_html__('People', 'event_espresso'),
39
-     *                                        'singular_slug' => esc_html__('people', 'event_espresso'),
40
-     *                                        'plural_slug' => esc_html__('peoples', 'event_espresso'),
41
-     *                                        'class_name' => 'EE_People'
42
-     *                                        )
43
-     *                                        },
44
-     * @type array   $cts                     {
45
-     *                                        An array of custom taxonomies and their arguments (short example below).
46
-     * @see CustomTaxonomyDefinitions::setTaxonomies() for a more complete example.
47
-     *                                        'espresso_people_type' => array(
48
-     *                                        'singular_name' => esc_html__('People Type', 'event_espresso'),
49
-     *                                        'plural_name' => esc_html__('People Types', 'event_espresso'),
50
-     *                                        'args' => array()
51
-     *                                        )
52
-     *                                        },
53
-     * @type array   $default_terms           {
54
-     *                                        An array of terms to set as the default for a given taxonomy and the
55
-     *                                        custom post types applied to.
56
-     *                                        'taxonomy_name' => array(
57
-     *                                        'term' => array( 'cpt_a_name', 'cpt_b_name' )
58
-     *                                        )
59
-     *                                        }
60
-     *                                        }
61
-     */
62
-    public static function register($identifier = '', array $setup_args = [])
63
-    {
25
+	/**
26
+	 * Used to register new CPTs and Taxonomies.
27
+	 *
28
+	 * @param string $identifier              reference used for the addon registering cpts and cts
29
+	 * @param array  $setup_args              {
30
+	 *                                        An array of required values for registering the cpts and taxonomies
31
+	 * @type array   $cpts                    {
32
+	 *                                        An array of cpts and their arguments.(short example below)
33
+	 * @return void
34
+	 * @throws  EE_Error
35
+	 * @see CustomPostTypeDefinitions::setDefinitions for a more complete example.
36
+	 *                                        'people' => array(
37
+	 *                                        'singular_name' => esc_html__('People', 'event_espresso'),
38
+	 *                                        'plural_name' => esc_html__('People', 'event_espresso'),
39
+	 *                                        'singular_slug' => esc_html__('people', 'event_espresso'),
40
+	 *                                        'plural_slug' => esc_html__('peoples', 'event_espresso'),
41
+	 *                                        'class_name' => 'EE_People'
42
+	 *                                        )
43
+	 *                                        },
44
+	 * @type array   $cts                     {
45
+	 *                                        An array of custom taxonomies and their arguments (short example below).
46
+	 * @see CustomTaxonomyDefinitions::setTaxonomies() for a more complete example.
47
+	 *                                        'espresso_people_type' => array(
48
+	 *                                        'singular_name' => esc_html__('People Type', 'event_espresso'),
49
+	 *                                        'plural_name' => esc_html__('People Types', 'event_espresso'),
50
+	 *                                        'args' => array()
51
+	 *                                        )
52
+	 *                                        },
53
+	 * @type array   $default_terms           {
54
+	 *                                        An array of terms to set as the default for a given taxonomy and the
55
+	 *                                        custom post types applied to.
56
+	 *                                        'taxonomy_name' => array(
57
+	 *                                        'term' => array( 'cpt_a_name', 'cpt_b_name' )
58
+	 *                                        )
59
+	 *                                        }
60
+	 *                                        }
61
+	 */
62
+	public static function register($identifier = '', array $setup_args = [])
63
+	{
64 64
 
65
-        // check for required params
66
-        if (empty($identifier)) {
67
-            throw new EE_Error(
68
-                esc_html__(
69
-                    'In order to register custom post types and custom taxonomies, you must include a value to reference what had been registered',
70
-                    'event_espresso'
71
-                )
72
-            );
73
-        }
65
+		// check for required params
66
+		if (empty($identifier)) {
67
+			throw new EE_Error(
68
+				esc_html__(
69
+					'In order to register custom post types and custom taxonomies, you must include a value to reference what had been registered',
70
+					'event_espresso'
71
+				)
72
+			);
73
+		}
74 74
 
75
-        if (! is_array($setup_args) || (empty($setup_args['cpts']) && empty($setup_args['cts']))) {
76
-            throw new EE_Error(
77
-                esc_html__(
78
-                    'In order to register custom post types or custom taxonomies, you must include an array containing either an array of custom post types to register (key "cpts"), an array of custom taxonomies ("cts") or both.',
79
-                    'event_espresso'
80
-                )
81
-            );
82
-        }
75
+		if (! is_array($setup_args) || (empty($setup_args['cpts']) && empty($setup_args['cts']))) {
76
+			throw new EE_Error(
77
+				esc_html__(
78
+					'In order to register custom post types or custom taxonomies, you must include an array containing either an array of custom post types to register (key "cpts"), an array of custom taxonomies ("cts") or both.',
79
+					'event_espresso'
80
+				)
81
+			);
82
+		}
83 83
 
84
-        // make sure we don't register twice
85
-        if (isset(self::$_registry[ $identifier ])) {
86
-            return;
87
-        }
84
+		// make sure we don't register twice
85
+		if (isset(self::$_registry[ $identifier ])) {
86
+			return;
87
+		}
88 88
 
89
-        // make sure cpt ref is unique.
90
-        if (isset(self::$_registry[ $identifier ])) {
91
-            $identifier = uniqid() . '_' . $identifier;
92
-        }
89
+		// make sure cpt ref is unique.
90
+		if (isset(self::$_registry[ $identifier ])) {
91
+			$identifier = uniqid() . '_' . $identifier;
92
+		}
93 93
 
94
-        // make sure this was called in the right place!
95
-        if (did_action('AHEE__EE_System__load_CPTs_and_session__complete')) {
96
-            EE_Error::doing_it_wrong(
97
-                __METHOD__,
98
-                sprintf(
99
-                    esc_html__(
100
-                        'EE_Register_CPT has been called and given a reference of "%s".  It may or may not work because it should be called on or before "AHEE__EE_System__load_CPTs_and_session__complete" action hook.',
101
-                        'event_espresso'
102
-                    ),
103
-                    $identifier
104
-                ),
105
-                '4.5.0'
106
-            );
107
-        }
108
-        // validate incoming args
109
-        $validated = [
110
-            'cpts'          => isset($setup_args['cpts'])
111
-                ? (array) $setup_args['cpts']
112
-                : [],
113
-            'cts'           => isset($setup_args['cts'])
114
-                ? (array) $setup_args['cts']
115
-                : [],
116
-            'default_terms' => isset($setup_args['default_terms'])
117
-                ? (array) $setup_args['default_terms']
118
-                : [],
119
-        ];
94
+		// make sure this was called in the right place!
95
+		if (did_action('AHEE__EE_System__load_CPTs_and_session__complete')) {
96
+			EE_Error::doing_it_wrong(
97
+				__METHOD__,
98
+				sprintf(
99
+					esc_html__(
100
+						'EE_Register_CPT has been called and given a reference of "%s".  It may or may not work because it should be called on or before "AHEE__EE_System__load_CPTs_and_session__complete" action hook.',
101
+						'event_espresso'
102
+					),
103
+					$identifier
104
+				),
105
+				'4.5.0'
106
+			);
107
+		}
108
+		// validate incoming args
109
+		$validated = [
110
+			'cpts'          => isset($setup_args['cpts'])
111
+				? (array) $setup_args['cpts']
112
+				: [],
113
+			'cts'           => isset($setup_args['cts'])
114
+				? (array) $setup_args['cts']
115
+				: [],
116
+			'default_terms' => isset($setup_args['default_terms'])
117
+				? (array) $setup_args['default_terms']
118
+				: [],
119
+		];
120 120
 
121
-        self::$_registry[ $identifier ] = $validated;
121
+		self::$_registry[ $identifier ] = $validated;
122 122
 
123
-        // hook into to cpt system
124
-        add_filter(
125
-            'FHEE__EventEspresso_core_domain_entities_custom_post_types_CustomPostTypeDefinitions__getCustomPostTypes',
126
-            [__CLASS__, 'filterCustomPostTypeDefinitions'],
127
-            5
128
-        );
129
-        add_filter(
130
-            'FHEE__EventEspresso_core_domain_entities_custom_post_types_TaxonomyDefinitions__getTaxonomies',
131
-            [__CLASS__, 'filterCustomTaxonomyDefinitions'],
132
-            5
133
-        );
134
-        add_action(
135
-            'AHEE__EventEspresso_core_domain_services_custom_post_types_RegisterCustomTaxonomyTerms__construct_end',
136
-            [__CLASS__, 'registerCustomTaxonomyTerm'],
137
-            5
138
-        );
139
-    }
123
+		// hook into to cpt system
124
+		add_filter(
125
+			'FHEE__EventEspresso_core_domain_entities_custom_post_types_CustomPostTypeDefinitions__getCustomPostTypes',
126
+			[__CLASS__, 'filterCustomPostTypeDefinitions'],
127
+			5
128
+		);
129
+		add_filter(
130
+			'FHEE__EventEspresso_core_domain_entities_custom_post_types_TaxonomyDefinitions__getTaxonomies',
131
+			[__CLASS__, 'filterCustomTaxonomyDefinitions'],
132
+			5
133
+		);
134
+		add_action(
135
+			'AHEE__EventEspresso_core_domain_services_custom_post_types_RegisterCustomTaxonomyTerms__construct_end',
136
+			[__CLASS__, 'registerCustomTaxonomyTerm'],
137
+			5
138
+		);
139
+	}
140 140
 
141 141
 
142
-    /**
143
-     * Callback for
144
-     * FHEE__EventEspresso_core_domain_entities_custom_post_types_CustomPostTypeDefinitions__getCustomPostTypes
145
-     * that adds additional custom post types to be registered.
146
-     *
147
-     * @param array $custom_post_type_definitions array of cpts that are already set
148
-     * @return array new array of cpts and their registration information
149
-     */
150
-    public static function filterCustomPostTypeDefinitions(array $custom_post_type_definitions)
151
-    {
152
-        foreach (self::$_registry as $registries) {
153
-            foreach ($registries['cpts'] as $cpt_name => $cpt_settings) {
154
-                $custom_post_type_definitions[ $cpt_name ] = $cpt_settings;
155
-            }
156
-        }
157
-        return $custom_post_type_definitions;
158
-    }
142
+	/**
143
+	 * Callback for
144
+	 * FHEE__EventEspresso_core_domain_entities_custom_post_types_CustomPostTypeDefinitions__getCustomPostTypes
145
+	 * that adds additional custom post types to be registered.
146
+	 *
147
+	 * @param array $custom_post_type_definitions array of cpts that are already set
148
+	 * @return array new array of cpts and their registration information
149
+	 */
150
+	public static function filterCustomPostTypeDefinitions(array $custom_post_type_definitions)
151
+	{
152
+		foreach (self::$_registry as $registries) {
153
+			foreach ($registries['cpts'] as $cpt_name => $cpt_settings) {
154
+				$custom_post_type_definitions[ $cpt_name ] = $cpt_settings;
155
+			}
156
+		}
157
+		return $custom_post_type_definitions;
158
+	}
159 159
 
160 160
 
161
-    /**
162
-     * Callback for
163
-     * FHEE__EventEspresso_core_domain_entities_custom_post_types_TaxonomyDefinitions__getTaxonomies
164
-     * that adds additional custom taxonomies to be registered.
165
-     *
166
-     * @param array $custom_taxonomy_definitions array of cts that are already set.
167
-     * @return array new array of cts and their registration information.
168
-     */
169
-    public static function filterCustomTaxonomyDefinitions(array $custom_taxonomy_definitions)
170
-    {
171
-        foreach (self::$_registry as $registries) {
172
-            foreach ($registries['cts'] as $ct_name => $ct_settings) {
173
-                $custom_taxonomy_definitions[ $ct_name ] = $ct_settings;
174
-            }
175
-        }
176
-        return $custom_taxonomy_definitions;
177
-    }
161
+	/**
162
+	 * Callback for
163
+	 * FHEE__EventEspresso_core_domain_entities_custom_post_types_TaxonomyDefinitions__getTaxonomies
164
+	 * that adds additional custom taxonomies to be registered.
165
+	 *
166
+	 * @param array $custom_taxonomy_definitions array of cts that are already set.
167
+	 * @return array new array of cts and their registration information.
168
+	 */
169
+	public static function filterCustomTaxonomyDefinitions(array $custom_taxonomy_definitions)
170
+	{
171
+		foreach (self::$_registry as $registries) {
172
+			foreach ($registries['cts'] as $ct_name => $ct_settings) {
173
+				$custom_taxonomy_definitions[ $ct_name ] = $ct_settings;
174
+			}
175
+		}
176
+		return $custom_taxonomy_definitions;
177
+	}
178 178
 
179 179
 
180
-    /**
181
-     * Callback for
182
-     * AHEE__EventEspresso_core_domain_services_custom_post_types_RegisterCustomTaxonomyTerms__construct_end
183
-     * which is used to set the default terms
184
-     *
185
-     * @param RegisterCustomTaxonomyTerms $register_custom_taxonomy_terms
186
-     * @return void
187
-     */
188
-    public static function registerCustomTaxonomyTerm(RegisterCustomTaxonomyTerms $register_custom_taxonomy_terms)
189
-    {
190
-        foreach (self::$_registry as $registries) {
191
-            foreach ($registries['default_terms'] as $taxonomy => $terms) {
192
-                foreach ($terms as $term => $cpts) {
193
-                    $register_custom_taxonomy_terms->registerCustomTaxonomyTerm(
194
-                        $taxonomy,
195
-                        $term,
196
-                        $cpts
197
-                    );
198
-                }
199
-            }
200
-        }
201
-    }
180
+	/**
181
+	 * Callback for
182
+	 * AHEE__EventEspresso_core_domain_services_custom_post_types_RegisterCustomTaxonomyTerms__construct_end
183
+	 * which is used to set the default terms
184
+	 *
185
+	 * @param RegisterCustomTaxonomyTerms $register_custom_taxonomy_terms
186
+	 * @return void
187
+	 */
188
+	public static function registerCustomTaxonomyTerm(RegisterCustomTaxonomyTerms $register_custom_taxonomy_terms)
189
+	{
190
+		foreach (self::$_registry as $registries) {
191
+			foreach ($registries['default_terms'] as $taxonomy => $terms) {
192
+				foreach ($terms as $term => $cpts) {
193
+					$register_custom_taxonomy_terms->registerCustomTaxonomyTerm(
194
+						$taxonomy,
195
+						$term,
196
+						$cpts
197
+					);
198
+				}
199
+			}
200
+		}
201
+	}
202 202
 
203 203
 
204
-    /**
205
-     * @param array $cpts array of cpts that are already set
206
-     * @return array new array of cpts and their registration information
207
-     * @deprecated 4.9.62.p
208
-     */
209
-    public static function filter_cpts(array $cpts)
210
-    {
211
-        foreach (self::$_registry as $registries) {
212
-            foreach ($registries['cpts'] as $cpt_name => $cpt_settings) {
213
-                $cpts[ $cpt_name ] = $cpt_settings;
214
-            }
215
-        }
216
-        return $cpts;
217
-    }
204
+	/**
205
+	 * @param array $cpts array of cpts that are already set
206
+	 * @return array new array of cpts and their registration information
207
+	 * @deprecated 4.9.62.p
208
+	 */
209
+	public static function filter_cpts(array $cpts)
210
+	{
211
+		foreach (self::$_registry as $registries) {
212
+			foreach ($registries['cpts'] as $cpt_name => $cpt_settings) {
213
+				$cpts[ $cpt_name ] = $cpt_settings;
214
+			}
215
+		}
216
+		return $cpts;
217
+	}
218 218
 
219 219
 
220
-    /**
221
-     * @param array $cts array of cts that are already set.
222
-     * @return array new array of cts and their registration information.
223
-     * @deprecated 4.9.62.p
224
-     */
225
-    public static function filter_cts(array $cts)
226
-    {
227
-        foreach (self::$_registry as $registries) {
228
-            foreach ($registries['cts'] as $ct_name => $ct_settings) {
229
-                $cts[ $ct_name ] = $ct_settings;
230
-            }
231
-        }
232
-        return $cts;
233
-    }
220
+	/**
221
+	 * @param array $cts array of cts that are already set.
222
+	 * @return array new array of cts and their registration information.
223
+	 * @deprecated 4.9.62.p
224
+	 */
225
+	public static function filter_cts(array $cts)
226
+	{
227
+		foreach (self::$_registry as $registries) {
228
+			foreach ($registries['cts'] as $ct_name => $ct_settings) {
229
+				$cts[ $ct_name ] = $ct_settings;
230
+			}
231
+		}
232
+		return $cts;
233
+	}
234 234
 
235 235
 
236
-    /**
237
-     * @param EE_Register_CPTs $cpt_class
238
-     * @return void
239
-     * @deprecated 4.9.62.p
240
-     */
241
-    public static function default_terms(EE_Register_CPTs $cpt_class)
242
-    {
243
-        foreach (self::$_registry as $registries) {
244
-            foreach ($registries['default_terms'] as $taxonomy => $terms) {
245
-                foreach ($terms as $term => $cpts) {
246
-                    $cpt_class->set_default_term($taxonomy, $term, $cpts);
247
-                }
248
-            }
249
-        }
250
-    }
236
+	/**
237
+	 * @param EE_Register_CPTs $cpt_class
238
+	 * @return void
239
+	 * @deprecated 4.9.62.p
240
+	 */
241
+	public static function default_terms(EE_Register_CPTs $cpt_class)
242
+	{
243
+		foreach (self::$_registry as $registries) {
244
+			foreach ($registries['default_terms'] as $taxonomy => $terms) {
245
+				foreach ($terms as $term => $cpts) {
246
+					$cpt_class->set_default_term($taxonomy, $term, $cpts);
247
+				}
248
+			}
249
+		}
250
+	}
251 251
 
252 252
 
253
-    /**
254
-     * This deregisters whats been registered on this class (for the given slug).
255
-     *
256
-     * @param string $identifier The reference for the item registered to be removed.
257
-     *
258
-     * @return void
259
-     * @since 4.5.0
260
-     *
261
-     */
262
-    public static function deregister($identifier = '')
263
-    {
264
-        unset(self::$_registry[ $identifier ]);
265
-    }
253
+	/**
254
+	 * This deregisters whats been registered on this class (for the given slug).
255
+	 *
256
+	 * @param string $identifier The reference for the item registered to be removed.
257
+	 *
258
+	 * @return void
259
+	 * @since 4.5.0
260
+	 *
261
+	 */
262
+	public static function deregister($identifier = '')
263
+	{
264
+		unset(self::$_registry[ $identifier ]);
265
+	}
266 266
 }
Please login to merge, or discard this patch.
core/libraries/plugin_api/EE_Register_Admin_Page.lib.php 2 patches
Spacing   +8 added lines, -8 removed lines patch added patch discarded remove patch
@@ -44,7 +44,7 @@  discard block
 block discarded – undo
44 44
     {
45 45
 
46 46
         // check that an admin_page has not already been registered with that name
47
-        if (isset(self::$_ee_admin_page_registry[ $identifier ])) {
47
+        if (isset(self::$_ee_admin_page_registry[$identifier])) {
48 48
             throw new EE_Error(
49 49
                 sprintf(
50 50
                     esc_html__(
@@ -67,11 +67,11 @@  discard block
 block discarded – undo
67 67
         }
68 68
 
69 69
         // make sure we don't register twice
70
-        if (isset(self::$_ee_admin_page_registry[ $identifier ])) {
70
+        if (isset(self::$_ee_admin_page_registry[$identifier])) {
71 71
             return;
72 72
         }
73 73
 
74
-        if (! did_action('AHEE__EE_System__load_espresso_addons') || did_action('AHEE__EE_Admin__loaded')) {
74
+        if ( ! did_action('AHEE__EE_System__load_espresso_addons') || did_action('AHEE__EE_Admin__loaded')) {
75 75
             EE_Error::doing_it_wrong(
76 76
                 __METHOD__,
77 77
                 sprintf(
@@ -86,7 +86,7 @@  discard block
 block discarded – undo
86 86
         }
87 87
 
88 88
         // add incoming stuff to our registry property
89
-        self::$_ee_admin_page_registry[ $identifier ] = [
89
+        self::$_ee_admin_page_registry[$identifier] = [
90 90
             'page_path' => $setup_args['page_path'],
91 91
             'config'    => $setup_args,
92 92
         ];
@@ -113,7 +113,7 @@  discard block
 block discarded – undo
113 113
      */
114 114
     public static function deregister($identifier = '')
115 115
     {
116
-        unset(self::$_ee_admin_page_registry[ $identifier ]);
116
+        unset(self::$_ee_admin_page_registry[$identifier]);
117 117
     }
118 118
 
119 119
 
@@ -125,9 +125,9 @@  discard block
 block discarded – undo
125 125
      */
126 126
     public static function set_page_basename($installed_refs)
127 127
     {
128
-        if (! empty(self::$_ee_admin_page_registry)) {
128
+        if ( ! empty(self::$_ee_admin_page_registry)) {
129 129
             foreach (self::$_ee_admin_page_registry as $basename => $args) {
130
-                $installed_refs[ $basename ] = $args['page_path'];
130
+                $installed_refs[$basename] = $args['page_path'];
131 131
             }
132 132
         }
133 133
         return $installed_refs;
@@ -143,7 +143,7 @@  discard block
 block discarded – undo
143 143
     public static function set_page_path($paths)
144 144
     {
145 145
         foreach (self::$_ee_admin_page_registry as $basename => $args) {
146
-            $paths[ $basename ] = $args['page_path'];
146
+            $paths[$basename] = $args['page_path'];
147 147
         }
148 148
         return $paths;
149 149
     }
Please login to merge, or discard this patch.
Indentation   +135 added lines, -135 removed lines patch added patch discarded remove patch
@@ -10,139 +10,139 @@
 block discarded – undo
10 10
  */
11 11
 class EE_Register_Admin_Page implements EEI_Plugin_API
12 12
 {
13
-    /**
14
-     * Holds registered EE_Admin_Pages
15
-     *
16
-     * @var array
17
-     */
18
-    protected static $_ee_admin_page_registry = [];
19
-
20
-
21
-    /**
22
-     * The purpose of this method is to provide an easy way for addons to register their admin pages (using the EE
23
-     * Admin Page loader system).
24
-     *
25
-     * @param string $identifier                                      This string represents the basename of the Admin
26
-     *                                                                Page init. The init file must use this basename
27
-     *                                                                in its name and class (i.e.
28
-     *                                                                {page_basename}_Admin_Page_Init.core.php).
29
-     * @param array  $setup_args                                      {              An array of configuration options
30
-     *                                                                that will be used in different circumstances
31
-     *
32
-     * @type  string $page_path                                       This is the path where the registered admin pages
33
-     *        reside ( used to setup autoloaders).
34
-     *
35
-     *    }
36
-     * @return void
37
-     * @throws EE_Error
38
-     * @since 4.3.0
39
-     *
40
-     */
41
-    public static function register($identifier = '', array $setup_args = [])
42
-    {
43
-
44
-        // check that an admin_page has not already been registered with that name
45
-        if (isset(self::$_ee_admin_page_registry[ $identifier ])) {
46
-            throw new EE_Error(
47
-                sprintf(
48
-                    esc_html__(
49
-                        'An Admin Page with the name "%s" has already been registered and each Admin Page requires a unique name.',
50
-                        'event_espresso'
51
-                    ),
52
-                    $identifier
53
-                )
54
-            );
55
-        }
56
-
57
-        // required fields MUST be present, so let's make sure they are.
58
-        if (empty($identifier) || ! is_array($setup_args) || empty($setup_args['page_path'])) {
59
-            throw new EE_Error(
60
-                esc_html__(
61
-                    'In order to register an Admin Page with EE_Register_Admin_Page::register(), you must include the "page_basename" (the class name of the page), and an array containing the following keys: "page_path" (the path where the registered admin pages reside)',
62
-                    'event_espresso'
63
-                )
64
-            );
65
-        }
66
-
67
-        // make sure we don't register twice
68
-        if (isset(self::$_ee_admin_page_registry[ $identifier ])) {
69
-            return;
70
-        }
71
-
72
-        if (! did_action('AHEE__EE_System__load_espresso_addons') || did_action('AHEE__EE_Admin__loaded')) {
73
-            EE_Error::doing_it_wrong(
74
-                __METHOD__,
75
-                sprintf(
76
-                    esc_html__(
77
-                        'An attempt was made to register "%s" as an EE Admin page has failed because it was not registered at the correct time.  Please use the "AHEE__EE_Admin__loaded" hook to register Admin pages.',
78
-                        'event_espresso'
79
-                    ),
80
-                    $identifier
81
-                ),
82
-                '4.3'
83
-            );
84
-        }
85
-
86
-        // add incoming stuff to our registry property
87
-        self::$_ee_admin_page_registry[ $identifier ] = [
88
-            'page_path' => $setup_args['page_path'],
89
-            'config'    => $setup_args,
90
-        ];
91
-
92
-        // add filters
93
-
94
-        add_filter(
95
-            'FHEE__EE_Admin_Page_Loader___get_installed_pages__installed_refs',
96
-            ['EE_Register_Admin_Page', 'set_page_basename'],
97
-            10
98
-        );
99
-        add_filter('FHEE__EEH_Autoloader__load_admin_core', ['EE_Register_Admin_Page', 'set_page_path'], 10);
100
-    }
101
-
102
-
103
-    /**
104
-     * This deregisters a EE_Admin page that is already registered.  Note, this MUST be loaded after the
105
-     * page being deregistered is loaded.
106
-     *
107
-     * @param string $identifier Use whatever string was used to register the admin page.
108
-     * @return  void
109
-     * @since    4.3.0
110
-     *
111
-     */
112
-    public static function deregister($identifier = '')
113
-    {
114
-        unset(self::$_ee_admin_page_registry[ $identifier ]);
115
-    }
116
-
117
-
118
-    /**
119
-     * set_page_basename
120
-     *
121
-     * @param $installed_refs
122
-     * @return mixed
123
-     */
124
-    public static function set_page_basename($installed_refs)
125
-    {
126
-        if (! empty(self::$_ee_admin_page_registry)) {
127
-            foreach (self::$_ee_admin_page_registry as $basename => $args) {
128
-                $installed_refs[ $basename ] = $args['page_path'];
129
-            }
130
-        }
131
-        return $installed_refs;
132
-    }
133
-
134
-
135
-    /**
136
-     * set_page_path
137
-     *
138
-     * @param $paths
139
-     * @return mixed
140
-     */
141
-    public static function set_page_path($paths)
142
-    {
143
-        foreach (self::$_ee_admin_page_registry as $basename => $args) {
144
-            $paths[ $basename ] = $args['page_path'];
145
-        }
146
-        return $paths;
147
-    }
13
+	/**
14
+	 * Holds registered EE_Admin_Pages
15
+	 *
16
+	 * @var array
17
+	 */
18
+	protected static $_ee_admin_page_registry = [];
19
+
20
+
21
+	/**
22
+	 * The purpose of this method is to provide an easy way for addons to register their admin pages (using the EE
23
+	 * Admin Page loader system).
24
+	 *
25
+	 * @param string $identifier                                      This string represents the basename of the Admin
26
+	 *                                                                Page init. The init file must use this basename
27
+	 *                                                                in its name and class (i.e.
28
+	 *                                                                {page_basename}_Admin_Page_Init.core.php).
29
+	 * @param array  $setup_args                                      {              An array of configuration options
30
+	 *                                                                that will be used in different circumstances
31
+	 *
32
+	 * @type  string $page_path                                       This is the path where the registered admin pages
33
+	 *        reside ( used to setup autoloaders).
34
+	 *
35
+	 *    }
36
+	 * @return void
37
+	 * @throws EE_Error
38
+	 * @since 4.3.0
39
+	 *
40
+	 */
41
+	public static function register($identifier = '', array $setup_args = [])
42
+	{
43
+
44
+		// check that an admin_page has not already been registered with that name
45
+		if (isset(self::$_ee_admin_page_registry[ $identifier ])) {
46
+			throw new EE_Error(
47
+				sprintf(
48
+					esc_html__(
49
+						'An Admin Page with the name "%s" has already been registered and each Admin Page requires a unique name.',
50
+						'event_espresso'
51
+					),
52
+					$identifier
53
+				)
54
+			);
55
+		}
56
+
57
+		// required fields MUST be present, so let's make sure they are.
58
+		if (empty($identifier) || ! is_array($setup_args) || empty($setup_args['page_path'])) {
59
+			throw new EE_Error(
60
+				esc_html__(
61
+					'In order to register an Admin Page with EE_Register_Admin_Page::register(), you must include the "page_basename" (the class name of the page), and an array containing the following keys: "page_path" (the path where the registered admin pages reside)',
62
+					'event_espresso'
63
+				)
64
+			);
65
+		}
66
+
67
+		// make sure we don't register twice
68
+		if (isset(self::$_ee_admin_page_registry[ $identifier ])) {
69
+			return;
70
+		}
71
+
72
+		if (! did_action('AHEE__EE_System__load_espresso_addons') || did_action('AHEE__EE_Admin__loaded')) {
73
+			EE_Error::doing_it_wrong(
74
+				__METHOD__,
75
+				sprintf(
76
+					esc_html__(
77
+						'An attempt was made to register "%s" as an EE Admin page has failed because it was not registered at the correct time.  Please use the "AHEE__EE_Admin__loaded" hook to register Admin pages.',
78
+						'event_espresso'
79
+					),
80
+					$identifier
81
+				),
82
+				'4.3'
83
+			);
84
+		}
85
+
86
+		// add incoming stuff to our registry property
87
+		self::$_ee_admin_page_registry[ $identifier ] = [
88
+			'page_path' => $setup_args['page_path'],
89
+			'config'    => $setup_args,
90
+		];
91
+
92
+		// add filters
93
+
94
+		add_filter(
95
+			'FHEE__EE_Admin_Page_Loader___get_installed_pages__installed_refs',
96
+			['EE_Register_Admin_Page', 'set_page_basename'],
97
+			10
98
+		);
99
+		add_filter('FHEE__EEH_Autoloader__load_admin_core', ['EE_Register_Admin_Page', 'set_page_path'], 10);
100
+	}
101
+
102
+
103
+	/**
104
+	 * This deregisters a EE_Admin page that is already registered.  Note, this MUST be loaded after the
105
+	 * page being deregistered is loaded.
106
+	 *
107
+	 * @param string $identifier Use whatever string was used to register the admin page.
108
+	 * @return  void
109
+	 * @since    4.3.0
110
+	 *
111
+	 */
112
+	public static function deregister($identifier = '')
113
+	{
114
+		unset(self::$_ee_admin_page_registry[ $identifier ]);
115
+	}
116
+
117
+
118
+	/**
119
+	 * set_page_basename
120
+	 *
121
+	 * @param $installed_refs
122
+	 * @return mixed
123
+	 */
124
+	public static function set_page_basename($installed_refs)
125
+	{
126
+		if (! empty(self::$_ee_admin_page_registry)) {
127
+			foreach (self::$_ee_admin_page_registry as $basename => $args) {
128
+				$installed_refs[ $basename ] = $args['page_path'];
129
+			}
130
+		}
131
+		return $installed_refs;
132
+	}
133
+
134
+
135
+	/**
136
+	 * set_page_path
137
+	 *
138
+	 * @param $paths
139
+	 * @return mixed
140
+	 */
141
+	public static function set_page_path($paths)
142
+	{
143
+		foreach (self::$_ee_admin_page_registry as $basename => $args) {
144
+			$paths[ $basename ] = $args['page_path'];
145
+		}
146
+		return $paths;
147
+	}
148 148
 }
Please login to merge, or discard this patch.
core/libraries/shortcodes/EE_Ticket_Shortcodes.lib.php 2 patches
Spacing   +13 added lines, -13 removed lines patch added patch discarded remove patch
@@ -47,20 +47,20 @@  discard block
 block discarded – undo
47 47
             '[TKT_USES_*]'              => esc_html__(
48 48
                 'This attribute based shortcode parses to show the number of uses the ticket has.  The optional "schema" attribute can be used to indicate what schema is used when the uses is infinite.  Options are:',
49 49
                 'event_espresso'
50
-            ) .
51
-                                           '<p><ul>' .
52
-                                           '<li><strong>symbol</strong>:' . esc_html__(
50
+            ).
51
+                                           '<p><ul>'.
52
+                                           '<li><strong>symbol</strong>:'.esc_html__(
53 53
                                                'This returns the &infin; symbol.',
54 54
                                                'event_espresso'
55
-                                           ) . '</li>' .
56
-                                           '<li><strong>text</strong>:' . esc_html__(
55
+                                           ).'</li>'.
56
+                                           '<li><strong>text</strong>:'.esc_html__(
57 57
                                                'This returns the word, "Unlimited". This is also the default if the "schema" attribute is not used.',
58 58
                                                'event_espresso'
59
-                                           ) . '</li>' .
60
-                                           '<li><strong>{custom}</strong>:' . esc_html__(
59
+                                           ).'</li>'.
60
+                                           '<li><strong>{custom}</strong>:'.esc_html__(
61 61
                                                'You can put anything you want as a string instead and that will be used.  So you could have the world "any" and whenever uses for a ticket is infinity, this shortcode will parse to "any".',
62 62
                                                'event_espresso'
63
-                                           ) . '</li>' .
63
+                                           ).'</li>'.
64 64
                                            '</ul></p>',
65 65
         );
66 66
     }
@@ -82,9 +82,9 @@  discard block
 block discarded – undo
82 82
         $this->_ticket = empty($this->_ticket)
83 83
                          && $this->_data instanceof EE_Line_Item
84 84
                          && $aee instanceof EE_Messages_Addressee
85
-                         && ! empty($aee->line_items_with_children[ $this->_data->ID() ]['EE_Ticket'])
86
-                         && $aee->line_items_with_children[ $this->_data->ID() ]['EE_Ticket'] instanceof EE_Ticket
87
-            ? $aee->line_items_with_children[ $this->_data->ID() ]['EE_Ticket']
85
+                         && ! empty($aee->line_items_with_children[$this->_data->ID()]['EE_Ticket'])
86
+                         && $aee->line_items_with_children[$this->_data->ID()]['EE_Ticket'] instanceof EE_Ticket
87
+            ? $aee->line_items_with_children[$this->_data->ID()]['EE_Ticket']
88 88
             : $this->_ticket;
89 89
 
90 90
         // if still no ticket, then let's see if there is a reg_obj.  If there IS, then we'll try and grab the ticket from the reg_obj instead.
@@ -95,7 +95,7 @@  discard block
 block discarded – undo
95 95
 
96 96
 
97 97
         // If there is no event object by now then get out.
98
-        if (! $this->_ticket instanceof EE_Ticket) {
98
+        if ( ! $this->_ticket instanceof EE_Ticket) {
99 99
             return '';
100 100
         }
101 101
 
@@ -121,7 +121,7 @@  discard block
 block discarded – undo
121 121
                 break;
122 122
 
123 123
             case '[TKT_QTY_PURCHASED]':
124
-                return $aee instanceof EE_Messages_Addressee ? $aee->tickets[ $this->_ticket->ID() ]['count'] : '';
124
+                return $aee instanceof EE_Messages_Addressee ? $aee->tickets[$this->_ticket->ID()]['count'] : '';
125 125
                 break;
126 126
         }
127 127
 
Please login to merge, or discard this patch.
Indentation   +122 added lines, -122 removed lines patch added patch discarded remove patch
@@ -19,126 +19,126 @@
 block discarded – undo
19 19
  */
20 20
 class EE_Ticket_Shortcodes extends EE_Shortcodes
21 21
 {
22
-    /**
23
-     * Will hold the EE_Ticket if available
24
-     *
25
-     * @var EE_Ticket
26
-     */
27
-    protected $_ticket;
28
-
29
-
30
-    protected function _init_props()
31
-    {
32
-        $this->label = esc_html__('Ticket Shortcodes', 'event_espresso');
33
-        $this->description = esc_html__('All shortcodes specific to ticket related data', 'event_espresso');
34
-        $this->_shortcodes = array(
35
-            '[TICKET_ID]'               => esc_html__('Will be replaced by the ticket ID of a ticket', 'event_espresso'),
36
-            '[TICKET_NAME]'             => esc_html__('The name of the ticket', 'event_espresso'),
37
-            '[TICKET_DESCRIPTION]'      => esc_html__('The description of the ticket', 'event_espresso'),
38
-            '[TICKET_PRICE]'            => esc_html__('The price of the ticket', 'event_espresso'),
39
-            '[TICKET_PRICE_WITH_TAXES]' => esc_html__(
40
-                'The price of the ticket including any taxes that might be on the ticket',
41
-                'event_espresso'
42
-            ),
43
-            '[TKT_QTY_PURCHASED]'       => esc_html__(
44
-                'The total quantity of the current ticket in the list that has been purchased in this transaction',
45
-                'event_espresso'
46
-            ),
47
-            '[TKT_USES_*]'              => esc_html__(
48
-                'This attribute based shortcode parses to show the number of uses the ticket has.  The optional "schema" attribute can be used to indicate what schema is used when the uses is infinite.  Options are:',
49
-                'event_espresso'
50
-            ) .
51
-                                           '<p><ul>' .
52
-                                           '<li><strong>symbol</strong>:' . esc_html__(
53
-                                               'This returns the &infin; symbol.',
54
-                                               'event_espresso'
55
-                                           ) . '</li>' .
56
-                                           '<li><strong>text</strong>:' . esc_html__(
57
-                                               'This returns the word, "Unlimited". This is also the default if the "schema" attribute is not used.',
58
-                                               'event_espresso'
59
-                                           ) . '</li>' .
60
-                                           '<li><strong>{custom}</strong>:' . esc_html__(
61
-                                               'You can put anything you want as a string instead and that will be used.  So you could have the world "any" and whenever uses for a ticket is infinity, this shortcode will parse to "any".',
62
-                                               'event_espresso'
63
-                                           ) . '</li>' .
64
-                                           '</ul></p>',
65
-        );
66
-    }
67
-
68
-
69
-    protected function _parser($shortcode)
70
-    {
71
-
72
-        $this->_ticket = $this->_data instanceof EE_Ticket ? $this->_data : null;
73
-
74
-        $aee = $this->_data instanceof EE_Messages_Addressee ? $this->_data : null;
75
-        $aee = ! $aee instanceof EE_Messages_Addressee && is_array(
76
-            $this->_extra_data
77
-        ) && isset($this->_extra_data['data']) && $this->_extra_data['data'] instanceof EE_Messages_Addressee
78
-            ? $this->_extra_data['data'] : $aee;
79
-
80
-
81
-        // possible EE_Line_Item may be incoming data
82
-        $this->_ticket = empty($this->_ticket)
83
-                         && $this->_data instanceof EE_Line_Item
84
-                         && $aee instanceof EE_Messages_Addressee
85
-                         && ! empty($aee->line_items_with_children[ $this->_data->ID() ]['EE_Ticket'])
86
-                         && $aee->line_items_with_children[ $this->_data->ID() ]['EE_Ticket'] instanceof EE_Ticket
87
-            ? $aee->line_items_with_children[ $this->_data->ID() ]['EE_Ticket']
88
-            : $this->_ticket;
89
-
90
-        // if still no ticket, then let's see if there is a reg_obj.  If there IS, then we'll try and grab the ticket from the reg_obj instead.
91
-        if (empty($this->_ticket)) {
92
-            $this->_ticket = $aee instanceof EE_Messages_Addressee && $aee->reg_obj instanceof EE_Registration
93
-                ? $aee->reg_obj->ticket() : null;
94
-        }
95
-
96
-
97
-        // If there is no event object by now then get out.
98
-        if (! $this->_ticket instanceof EE_Ticket) {
99
-            return '';
100
-        }
101
-
102
-        switch ($shortcode) {
103
-            case '[TICKET_ID]':
104
-                return $this->_ticket->ID();
105
-                break;
106
-
107
-            case '[TICKET_NAME]':
108
-                return $this->_ticket->get('TKT_name');
109
-                break;
110
-
111
-            case '[TICKET_DESCRIPTION]':
112
-                return $this->_ticket->get('TKT_description');
113
-                break;
114
-
115
-            case '[TICKET_PRICE]':
116
-                return $this->_ticket->pretty_price();
117
-                break;
118
-
119
-            case '[TICKET_PRICE_WITH_TAXES]':
120
-                return EEH_Money::formatForLocale(
121
-                    $this->_ticket->get_ticket_total_with_taxes(),
122
-                    CurrencyFormatter::FORMAT_LOCALIZED_CURRENCY_HTML_CODE
123
-                );
124
-                break;
125
-
126
-            case '[TKT_QTY_PURCHASED]':
127
-                return $aee instanceof EE_Messages_Addressee ? $aee->tickets[ $this->_ticket->ID() ]['count'] : '';
128
-                break;
129
-        }
130
-
131
-        if (strpos($shortcode, '[TKT_USES_*') !== false) {
132
-            $attrs = $this->_get_shortcode_attrs($shortcode);
133
-            $schema = empty($attrs['schema']) ? null : $attrs['schema'];
134
-            return $this->_ticket->get_pretty('TKT_uses', $schema);
135
-        }
136
-        return '';
137
-    }
138
-
139
-
140
-    public function get_ticket_set()
141
-    {
142
-        return $this->_ticket;
143
-    }
22
+	/**
23
+	 * Will hold the EE_Ticket if available
24
+	 *
25
+	 * @var EE_Ticket
26
+	 */
27
+	protected $_ticket;
28
+
29
+
30
+	protected function _init_props()
31
+	{
32
+		$this->label = esc_html__('Ticket Shortcodes', 'event_espresso');
33
+		$this->description = esc_html__('All shortcodes specific to ticket related data', 'event_espresso');
34
+		$this->_shortcodes = array(
35
+			'[TICKET_ID]'               => esc_html__('Will be replaced by the ticket ID of a ticket', 'event_espresso'),
36
+			'[TICKET_NAME]'             => esc_html__('The name of the ticket', 'event_espresso'),
37
+			'[TICKET_DESCRIPTION]'      => esc_html__('The description of the ticket', 'event_espresso'),
38
+			'[TICKET_PRICE]'            => esc_html__('The price of the ticket', 'event_espresso'),
39
+			'[TICKET_PRICE_WITH_TAXES]' => esc_html__(
40
+				'The price of the ticket including any taxes that might be on the ticket',
41
+				'event_espresso'
42
+			),
43
+			'[TKT_QTY_PURCHASED]'       => esc_html__(
44
+				'The total quantity of the current ticket in the list that has been purchased in this transaction',
45
+				'event_espresso'
46
+			),
47
+			'[TKT_USES_*]'              => esc_html__(
48
+				'This attribute based shortcode parses to show the number of uses the ticket has.  The optional "schema" attribute can be used to indicate what schema is used when the uses is infinite.  Options are:',
49
+				'event_espresso'
50
+			) .
51
+										   '<p><ul>' .
52
+										   '<li><strong>symbol</strong>:' . esc_html__(
53
+											   'This returns the &infin; symbol.',
54
+											   'event_espresso'
55
+										   ) . '</li>' .
56
+										   '<li><strong>text</strong>:' . esc_html__(
57
+											   'This returns the word, "Unlimited". This is also the default if the "schema" attribute is not used.',
58
+											   'event_espresso'
59
+										   ) . '</li>' .
60
+										   '<li><strong>{custom}</strong>:' . esc_html__(
61
+											   'You can put anything you want as a string instead and that will be used.  So you could have the world "any" and whenever uses for a ticket is infinity, this shortcode will parse to "any".',
62
+											   'event_espresso'
63
+										   ) . '</li>' .
64
+										   '</ul></p>',
65
+		);
66
+	}
67
+
68
+
69
+	protected function _parser($shortcode)
70
+	{
71
+
72
+		$this->_ticket = $this->_data instanceof EE_Ticket ? $this->_data : null;
73
+
74
+		$aee = $this->_data instanceof EE_Messages_Addressee ? $this->_data : null;
75
+		$aee = ! $aee instanceof EE_Messages_Addressee && is_array(
76
+			$this->_extra_data
77
+		) && isset($this->_extra_data['data']) && $this->_extra_data['data'] instanceof EE_Messages_Addressee
78
+			? $this->_extra_data['data'] : $aee;
79
+
80
+
81
+		// possible EE_Line_Item may be incoming data
82
+		$this->_ticket = empty($this->_ticket)
83
+						 && $this->_data instanceof EE_Line_Item
84
+						 && $aee instanceof EE_Messages_Addressee
85
+						 && ! empty($aee->line_items_with_children[ $this->_data->ID() ]['EE_Ticket'])
86
+						 && $aee->line_items_with_children[ $this->_data->ID() ]['EE_Ticket'] instanceof EE_Ticket
87
+			? $aee->line_items_with_children[ $this->_data->ID() ]['EE_Ticket']
88
+			: $this->_ticket;
89
+
90
+		// if still no ticket, then let's see if there is a reg_obj.  If there IS, then we'll try and grab the ticket from the reg_obj instead.
91
+		if (empty($this->_ticket)) {
92
+			$this->_ticket = $aee instanceof EE_Messages_Addressee && $aee->reg_obj instanceof EE_Registration
93
+				? $aee->reg_obj->ticket() : null;
94
+		}
95
+
96
+
97
+		// If there is no event object by now then get out.
98
+		if (! $this->_ticket instanceof EE_Ticket) {
99
+			return '';
100
+		}
101
+
102
+		switch ($shortcode) {
103
+			case '[TICKET_ID]':
104
+				return $this->_ticket->ID();
105
+				break;
106
+
107
+			case '[TICKET_NAME]':
108
+				return $this->_ticket->get('TKT_name');
109
+				break;
110
+
111
+			case '[TICKET_DESCRIPTION]':
112
+				return $this->_ticket->get('TKT_description');
113
+				break;
114
+
115
+			case '[TICKET_PRICE]':
116
+				return $this->_ticket->pretty_price();
117
+				break;
118
+
119
+			case '[TICKET_PRICE_WITH_TAXES]':
120
+				return EEH_Money::formatForLocale(
121
+					$this->_ticket->get_ticket_total_with_taxes(),
122
+					CurrencyFormatter::FORMAT_LOCALIZED_CURRENCY_HTML_CODE
123
+				);
124
+				break;
125
+
126
+			case '[TKT_QTY_PURCHASED]':
127
+				return $aee instanceof EE_Messages_Addressee ? $aee->tickets[ $this->_ticket->ID() ]['count'] : '';
128
+				break;
129
+		}
130
+
131
+		if (strpos($shortcode, '[TKT_USES_*') !== false) {
132
+			$attrs = $this->_get_shortcode_attrs($shortcode);
133
+			$schema = empty($attrs['schema']) ? null : $attrs['schema'];
134
+			return $this->_ticket->get_pretty('TKT_uses', $schema);
135
+		}
136
+		return '';
137
+	}
138
+
139
+
140
+	public function get_ticket_set()
141
+	{
142
+		return $this->_ticket;
143
+	}
144 144
 }
Please login to merge, or discard this patch.
core/libraries/shortcodes/EE_Payment_List_Shortcodes.lib.php 2 patches
Spacing   +4 added lines, -4 removed lines patch added patch discarded remove patch
@@ -29,15 +29,15 @@  discard block
 block discarded – undo
29 29
                 'Outputs a list of payment items. Note, this is a dynamic shortcode in that it accepts some attributes for setting certain defaults.  Attributes that are available are:',
30 30
                 'event_espresso'
31 31
             )
32
-                                  . '<p><ul>' .
33
-                                  '<li><strong>no_payments</strong>:' . sprintf(
32
+                                  . '<p><ul>'.
33
+                                  '<li><strong>no_payments</strong>:'.sprintf(
34 34
                                       esc_html__(
35 35
                                           'Indicate with this attribute what will be used if there are no payments present.  Default is: "%sNo approved payments have been received.%s"',
36 36
                                           'event_espresso'
37 37
                                       ),
38 38
                                       htmlspecialchars('<td class="aln-cntr" colspan="6">'),
39 39
                                       htmlspecialchars('</td>')
40
-                                  ) . '</li>' .
40
+                                  ).'</li>'.
41 41
                                   '</ul></p>',
42 42
         );
43 43
     }
@@ -67,7 +67,7 @@  discard block
 block discarded – undo
67 67
         $this->_validate_list_requirements();
68 68
 
69 69
 
70
-        if (! $this->_data['data'] instanceof EE_Messages_Addressee) {
70
+        if ( ! $this->_data['data'] instanceof EE_Messages_Addressee) {
71 71
             return '';
72 72
         }
73 73
 
Please login to merge, or discard this patch.
Indentation   +84 added lines, -84 removed lines patch added patch discarded remove patch
@@ -18,88 +18,88 @@
 block discarded – undo
18 18
  */
19 19
 class EE_Payment_List_Shortcodes extends EE_Shortcodes
20 20
 {
21
-    protected function _init_props()
22
-    {
23
-        $this->label = esc_html__('Payment List Shortcodes', 'event_espresso');
24
-        $this->description = esc_html__('All shortcodes specific to payment lists', 'event_espresso');
25
-        $this->_shortcodes = array(
26
-            '[PAYMENT_LIST_*]' => esc_html__(
27
-                'Outputs a list of payment items. Note, this is a dynamic shortcode in that it accepts some attributes for setting certain defaults.  Attributes that are available are:',
28
-                'event_espresso'
29
-            )
30
-                                  . '<p><ul>' .
31
-                                  '<li><strong>no_payments</strong>:' . sprintf(
32
-                                      esc_html__(
33
-                                          'Indicate with this attribute what will be used if there are no payments present.  Default is: "%sNo approved payments have been received.%s"',
34
-                                          'event_espresso'
35
-                                      ),
36
-                                      htmlspecialchars('<td class="aln-cntr" colspan="6">'),
37
-                                      htmlspecialchars('</td>')
38
-                                  ) . '</li>' .
39
-                                  '</ul></p>',
40
-        );
41
-    }
42
-
43
-
44
-    protected function _parser($shortcode)
45
-    {
46
-
47
-        if (strpos($shortcode, '[PAYMENT_LIST_*') !== false) {
48
-            return $this->_get_payment_list($shortcode);
49
-        }
50
-        return '';
51
-    }
52
-
53
-
54
-    /**
55
-     * verify incoming data contains what is needed for retrieving and parsing each payment for transaction.
56
-     *
57
-     * @since 4.5.0
58
-     *
59
-     * @param string $shortcode The incoming shortcode.
60
-     *
61
-     * @return string parsed ticket line item list.
62
-     */
63
-    private function _get_payment_list($shortcode)
64
-    {
65
-        $this->_validate_list_requirements();
66
-
67
-
68
-        if (! $this->_data['data'] instanceof EE_Messages_Addressee) {
69
-            return '';
70
-        }
71
-
72
-        $valid_shortcodes = array('payment');
73
-
74
-        $addressee_obj = $this->_data['data'];
75
-        $templates = $this->_extra_data['template'];
76
-        $payments = apply_filters(
77
-            'FHEE__Payment_List_Shortcodes___get_payments_list__payments',
78
-            $addressee_obj->payments
79
-        );
80
-
81
-        // let's get any attributes that may be present and set the defaults.
82
-        $atts = $this->_get_shortcode_attrs($shortcode);
83
-
84
-        $no_payments_msg = empty($atts['no_payments']) ? esc_html__(
85
-            'No approved payments have been received.',
86
-            'event_espresso'
87
-        ) : $atts['no_payments'];
88
-
89
-        // made it here so we have an array of paymnets, so we should have what we need.
90
-        $payment_content = empty($payments) ? $no_payments_msg : '';
91
-
92
-        $payments = (array) $payments;
93
-
94
-        foreach ($payments as $payment) {
95
-            $payment_content .= $this->_shortcode_helper->parse_payment_list_template(
96
-                $templates['payment_list'],
97
-                $payment,
98
-                $valid_shortcodes,
99
-                $this->_extra_data
100
-            );
101
-        }
102
-
103
-        return $payment_content;
104
-    }
21
+	protected function _init_props()
22
+	{
23
+		$this->label = esc_html__('Payment List Shortcodes', 'event_espresso');
24
+		$this->description = esc_html__('All shortcodes specific to payment lists', 'event_espresso');
25
+		$this->_shortcodes = array(
26
+			'[PAYMENT_LIST_*]' => esc_html__(
27
+				'Outputs a list of payment items. Note, this is a dynamic shortcode in that it accepts some attributes for setting certain defaults.  Attributes that are available are:',
28
+				'event_espresso'
29
+			)
30
+								  . '<p><ul>' .
31
+								  '<li><strong>no_payments</strong>:' . sprintf(
32
+									  esc_html__(
33
+										  'Indicate with this attribute what will be used if there are no payments present.  Default is: "%sNo approved payments have been received.%s"',
34
+										  'event_espresso'
35
+									  ),
36
+									  htmlspecialchars('<td class="aln-cntr" colspan="6">'),
37
+									  htmlspecialchars('</td>')
38
+								  ) . '</li>' .
39
+								  '</ul></p>',
40
+		);
41
+	}
42
+
43
+
44
+	protected function _parser($shortcode)
45
+	{
46
+
47
+		if (strpos($shortcode, '[PAYMENT_LIST_*') !== false) {
48
+			return $this->_get_payment_list($shortcode);
49
+		}
50
+		return '';
51
+	}
52
+
53
+
54
+	/**
55
+	 * verify incoming data contains what is needed for retrieving and parsing each payment for transaction.
56
+	 *
57
+	 * @since 4.5.0
58
+	 *
59
+	 * @param string $shortcode The incoming shortcode.
60
+	 *
61
+	 * @return string parsed ticket line item list.
62
+	 */
63
+	private function _get_payment_list($shortcode)
64
+	{
65
+		$this->_validate_list_requirements();
66
+
67
+
68
+		if (! $this->_data['data'] instanceof EE_Messages_Addressee) {
69
+			return '';
70
+		}
71
+
72
+		$valid_shortcodes = array('payment');
73
+
74
+		$addressee_obj = $this->_data['data'];
75
+		$templates = $this->_extra_data['template'];
76
+		$payments = apply_filters(
77
+			'FHEE__Payment_List_Shortcodes___get_payments_list__payments',
78
+			$addressee_obj->payments
79
+		);
80
+
81
+		// let's get any attributes that may be present and set the defaults.
82
+		$atts = $this->_get_shortcode_attrs($shortcode);
83
+
84
+		$no_payments_msg = empty($atts['no_payments']) ? esc_html__(
85
+			'No approved payments have been received.',
86
+			'event_espresso'
87
+		) : $atts['no_payments'];
88
+
89
+		// made it here so we have an array of paymnets, so we should have what we need.
90
+		$payment_content = empty($payments) ? $no_payments_msg : '';
91
+
92
+		$payments = (array) $payments;
93
+
94
+		foreach ($payments as $payment) {
95
+			$payment_content .= $this->_shortcode_helper->parse_payment_list_template(
96
+				$templates['payment_list'],
97
+				$payment,
98
+				$valid_shortcodes,
99
+				$this->_extra_data
100
+			);
101
+		}
102
+
103
+		return $payment_content;
104
+	}
105 105
 }
Please login to merge, or discard this patch.
core/libraries/shortcodes/EE_Messenger_Shortcodes.lib.php 2 patches
Spacing   +5 added lines, -5 removed lines patch added patch discarded remove patch
@@ -61,7 +61,7 @@  discard block
 block discarded – undo
61 61
         $action = $request->getRequestParam('action');
62 62
         // show error message about buttons/urls not working as expected if messenger deactivated.
63 63
         if ($action === 'update_message_template' && is_admin()) {
64
-            if (! isset($this->_active_messengers['pdf'])) {
64
+            if ( ! isset($this->_active_messengers['pdf'])) {
65 65
                 EE_Error::add_attention(
66 66
                     esc_html__(
67 67
                         'Be aware that the pdf messenger is inactive.  This means that any pdf related shortcodes will parse to an empty string.',
@@ -70,7 +70,7 @@  discard block
 block discarded – undo
70 70
                 );
71 71
             }
72 72
 
73
-            if (! isset($this->_active_messengers['html'])) {
73
+            if ( ! isset($this->_active_messengers['html'])) {
74 74
                 EE_Error::add_attention(
75 75
                     esc_html__(
76 76
                         'Be aware that the html messenger is inactive. This means that any html related shortcodes will parse to an empty string.',
@@ -93,7 +93,7 @@  discard block
 block discarded – undo
93 93
         $recipient = ! $recipient instanceof EE_Messages_Addressee && ! empty($this->_extra_data['data']) && $this->_extra_data['data'] instanceof EE_Messages_Addressee
94 94
             ? $this->_extra_data['data'] : $recipient;
95 95
 
96
-        if (! $recipient instanceof EE_Messages_Addressee) {
96
+        if ( ! $recipient instanceof EE_Messages_Addressee) {
97 97
             return '';
98 98
         }
99 99
 
@@ -132,8 +132,8 @@  discard block
 block discarded – undo
132 132
                 'event_espresso'
133 133
             );
134 134
         $content = '
135
-<form method="post" action="' . $this->_get_url($recipient, $sending_messenger) . '" >
136
-	<input class="print_button" type="submit" value="' . $download_text . '" />
135
+<form method="post" action="' . $this->_get_url($recipient, $sending_messenger).'" >
136
+	<input class="print_button" type="submit" value="' . $download_text.'" />
137 137
 </form>
138 138
 		';
139 139
         return $content;
Please login to merge, or discard this patch.
Indentation   +149 added lines, -149 removed lines patch added patch discarded remove patch
@@ -22,157 +22,157 @@
 block discarded – undo
22 22
  */
23 23
 class EE_Messenger_Shortcodes extends EE_Shortcodes
24 24
 {
25
-    /**
26
-     * Hold array of active messengers indexed by messenger name.
27
-     *
28
-     * @since 4.5.0
29
-     *
30
-     * @var EE_messenger[]
31
-     */
32
-    protected $_active_messengers = array();
33
-
34
-
35
-    protected function _init_props()
36
-    {
37
-        $this->label = esc_html__('Messenger Shortcodes', 'event_espresso');
38
-        $this->description = esc_html__('All shortcodes that are messenger specific.', 'event_espresso');
39
-        /** @type EE_Message_Resource_Manager $message_resource_manager */
40
-        $message_resource_manager = EE_Registry::instance()->load_lib('Message_Resource_Manager');
41
-        // add messages about what happens  when the messenger is active.
42
-        $this->_active_messengers = $message_resource_manager->active_messengers();
43
-
44
-        $this->_shortcodes['[DISPLAY_HTML_URL]'] = esc_html__(
45
-            'This will return a link to view the template in a browser if the html messenger is active.',
46
-            'event_espresso'
47
-        );
48
-        $this->_shortcodes['[DISPLAY_PDF_URL]'] = esc_html__(
49
-            'This will return a link to generate a pdf for the template if the pdf messenger is active.',
50
-            'event_espresso'
51
-        );
52
-        $this->_shortcodes['[DISPLAY_PDF_BUTTON]'] = esc_html__(
53
-            'This will return html for a download pdf button trigger if the pdf messenger is active.',
54
-            'event_espresso'
55
-        );
56
-
57
-        /** @var RequestInterface $request */
58
-        $request = LoaderFactory::getLoader()->getShared(RequestInterface::class);
59
-        $action = $request->getRequestParam('action');
60
-        // show error message about buttons/urls not working as expected if messenger deactivated.
61
-        if ($action === 'update_message_template' && is_admin()) {
62
-            if (! isset($this->_active_messengers['pdf'])) {
63
-                EE_Error::add_attention(
64
-                    esc_html__(
65
-                        'Be aware that the pdf messenger is inactive.  This means that any pdf related shortcodes will parse to an empty string.',
66
-                        'event_espresso'
67
-                    )
68
-                );
69
-            }
70
-
71
-            if (! isset($this->_active_messengers['html'])) {
72
-                EE_Error::add_attention(
73
-                    esc_html__(
74
-                        'Be aware that the html messenger is inactive. This means that any html related shortcodes will parse to an empty string.',
75
-                        'event_espresso'
76
-                    )
77
-                );
78
-            }
79
-        }
80
-    }
81
-
82
-
83
-    protected function _parser($shortcode)
84
-    {
85
-        // make sure we end up with a copy of the EE_Messages_Addressee object
86
-        $recipient = $this->_data instanceof EE_Messages_Addressee ? $this->_data : null;
87
-        $recipient = ! $recipient instanceof EE_Messages_Addressee && is_array(
88
-            $this->_data
89
-        ) && isset($this->_data['data']) && $this->_data['data'] instanceof EE_Messages_Addressee ? $this->_data['data']
90
-            : $recipient;
91
-        $recipient = ! $recipient instanceof EE_Messages_Addressee && ! empty($this->_extra_data['data']) && $this->_extra_data['data'] instanceof EE_Messages_Addressee
92
-            ? $this->_extra_data['data'] : $recipient;
93
-
94
-        if (! $recipient instanceof EE_Messages_Addressee) {
95
-            return '';
96
-        }
97
-
98
-        switch ($shortcode) {
99
-            case '[DISPLAY_HTML_URL]':
100
-                return isset($this->_active_messengers['html']) ? $this->_get_url($recipient, 'html') : '';
101
-                break;
102
-            case '[DISPLAY_PDF_URL]':
103
-                return isset($this->_active_messengers['pdf']) ? $this->_get_url($recipient, 'pdf') : '';
104
-                break;
105
-            case '[DISPLAY_PDF_BUTTON]':
106
-                return isset($this->_active_messengers['pdf']) ? $this->_get_button($recipient, 'pdf') : '';
107
-                break;
108
-        }
109
-        return '';
110
-    }
111
-
112
-
113
-    /**
114
-     * This method takes the incoming data and figures out from it what the message type is and evt_id/grp_id and uses
115
-     * that to generate the html for a button in the template.
116
-     *
117
-     * @since 4.5.0
118
-     *
119
-     * @param EE_Messages_Addressee $recipient
120
-     * @param string                $sending_messenger 'html' or 'pdf'
121
-     *
122
-     * @return string                Generated html
123
-     */
124
-    private function _get_button(EE_Messages_Addressee $recipient, $sending_messenger)
125
-    {
126
-        $download_text = $sending_messenger == 'pdf'
127
-            ? esc_html__('Download PDF', 'event_espresso')
128
-            : esc_html__(
129
-                'Show HTML',
130
-                'event_espresso'
131
-            );
132
-        $content = '
25
+	/**
26
+	 * Hold array of active messengers indexed by messenger name.
27
+	 *
28
+	 * @since 4.5.0
29
+	 *
30
+	 * @var EE_messenger[]
31
+	 */
32
+	protected $_active_messengers = array();
33
+
34
+
35
+	protected function _init_props()
36
+	{
37
+		$this->label = esc_html__('Messenger Shortcodes', 'event_espresso');
38
+		$this->description = esc_html__('All shortcodes that are messenger specific.', 'event_espresso');
39
+		/** @type EE_Message_Resource_Manager $message_resource_manager */
40
+		$message_resource_manager = EE_Registry::instance()->load_lib('Message_Resource_Manager');
41
+		// add messages about what happens  when the messenger is active.
42
+		$this->_active_messengers = $message_resource_manager->active_messengers();
43
+
44
+		$this->_shortcodes['[DISPLAY_HTML_URL]'] = esc_html__(
45
+			'This will return a link to view the template in a browser if the html messenger is active.',
46
+			'event_espresso'
47
+		);
48
+		$this->_shortcodes['[DISPLAY_PDF_URL]'] = esc_html__(
49
+			'This will return a link to generate a pdf for the template if the pdf messenger is active.',
50
+			'event_espresso'
51
+		);
52
+		$this->_shortcodes['[DISPLAY_PDF_BUTTON]'] = esc_html__(
53
+			'This will return html for a download pdf button trigger if the pdf messenger is active.',
54
+			'event_espresso'
55
+		);
56
+
57
+		/** @var RequestInterface $request */
58
+		$request = LoaderFactory::getLoader()->getShared(RequestInterface::class);
59
+		$action = $request->getRequestParam('action');
60
+		// show error message about buttons/urls not working as expected if messenger deactivated.
61
+		if ($action === 'update_message_template' && is_admin()) {
62
+			if (! isset($this->_active_messengers['pdf'])) {
63
+				EE_Error::add_attention(
64
+					esc_html__(
65
+						'Be aware that the pdf messenger is inactive.  This means that any pdf related shortcodes will parse to an empty string.',
66
+						'event_espresso'
67
+					)
68
+				);
69
+			}
70
+
71
+			if (! isset($this->_active_messengers['html'])) {
72
+				EE_Error::add_attention(
73
+					esc_html__(
74
+						'Be aware that the html messenger is inactive. This means that any html related shortcodes will parse to an empty string.',
75
+						'event_espresso'
76
+					)
77
+				);
78
+			}
79
+		}
80
+	}
81
+
82
+
83
+	protected function _parser($shortcode)
84
+	{
85
+		// make sure we end up with a copy of the EE_Messages_Addressee object
86
+		$recipient = $this->_data instanceof EE_Messages_Addressee ? $this->_data : null;
87
+		$recipient = ! $recipient instanceof EE_Messages_Addressee && is_array(
88
+			$this->_data
89
+		) && isset($this->_data['data']) && $this->_data['data'] instanceof EE_Messages_Addressee ? $this->_data['data']
90
+			: $recipient;
91
+		$recipient = ! $recipient instanceof EE_Messages_Addressee && ! empty($this->_extra_data['data']) && $this->_extra_data['data'] instanceof EE_Messages_Addressee
92
+			? $this->_extra_data['data'] : $recipient;
93
+
94
+		if (! $recipient instanceof EE_Messages_Addressee) {
95
+			return '';
96
+		}
97
+
98
+		switch ($shortcode) {
99
+			case '[DISPLAY_HTML_URL]':
100
+				return isset($this->_active_messengers['html']) ? $this->_get_url($recipient, 'html') : '';
101
+				break;
102
+			case '[DISPLAY_PDF_URL]':
103
+				return isset($this->_active_messengers['pdf']) ? $this->_get_url($recipient, 'pdf') : '';
104
+				break;
105
+			case '[DISPLAY_PDF_BUTTON]':
106
+				return isset($this->_active_messengers['pdf']) ? $this->_get_button($recipient, 'pdf') : '';
107
+				break;
108
+		}
109
+		return '';
110
+	}
111
+
112
+
113
+	/**
114
+	 * This method takes the incoming data and figures out from it what the message type is and evt_id/grp_id and uses
115
+	 * that to generate the html for a button in the template.
116
+	 *
117
+	 * @since 4.5.0
118
+	 *
119
+	 * @param EE_Messages_Addressee $recipient
120
+	 * @param string                $sending_messenger 'html' or 'pdf'
121
+	 *
122
+	 * @return string                Generated html
123
+	 */
124
+	private function _get_button(EE_Messages_Addressee $recipient, $sending_messenger)
125
+	{
126
+		$download_text = $sending_messenger == 'pdf'
127
+			? esc_html__('Download PDF', 'event_espresso')
128
+			: esc_html__(
129
+				'Show HTML',
130
+				'event_espresso'
131
+			);
132
+		$content = '
133 133
 <form method="post" action="' . $this->_get_url($recipient, $sending_messenger) . '" >
134 134
 	<input class="print_button" type="submit" value="' . $download_text . '" />
135 135
 </form>
136 136
 		';
137
-        return $content;
138
-    }
139
-
140
-
141
-    /**
142
-     * This method takes the incoming data and figures out from it what the message type is and
143
-     * evt_id/grp_id and uses that to generate the url for displaying the template in a browser.
144
-     *
145
-     * @since 4.5.0
146
-     *
147
-     * @param EE_Messages_Addressee $recipient
148
-     * @param string                $sending_messenger
149
-     *
150
-     * @return string The generated url for displaying the link.
151
-     * @throws EE_Error
152
-     */
153
-    private function _get_url(EE_Messages_Addressee $recipient, $sending_messenger)
154
-    {
155
-
156
-        $reg = $recipient->reg_obj;
157
-        $reg = ! $reg instanceof EE_Registration ? $recipient->primary_reg_obj : $reg;
158
-
159
-
160
-        if ($this->_message_type instanceof EE_message_type && $this->_message instanceof EE_Message) {
161
-            EE_Registry::instance()->load_helper('MSG_Template');
162
-            try {
163
-                return EEH_MSG_Template::get_url_trigger(
164
-                    $this->_message_type,
165
-                    $this->_message,
166
-                    $reg,
167
-                    $sending_messenger
168
-                );
169
-            } catch (EE_Error $e) {
170
-                if (WP_DEBUG) {
171
-                    $e->get_error();
172
-                }
173
-            }
174
-        }
175
-
176
-        return '';
177
-    }
137
+		return $content;
138
+	}
139
+
140
+
141
+	/**
142
+	 * This method takes the incoming data and figures out from it what the message type is and
143
+	 * evt_id/grp_id and uses that to generate the url for displaying the template in a browser.
144
+	 *
145
+	 * @since 4.5.0
146
+	 *
147
+	 * @param EE_Messages_Addressee $recipient
148
+	 * @param string                $sending_messenger
149
+	 *
150
+	 * @return string The generated url for displaying the link.
151
+	 * @throws EE_Error
152
+	 */
153
+	private function _get_url(EE_Messages_Addressee $recipient, $sending_messenger)
154
+	{
155
+
156
+		$reg = $recipient->reg_obj;
157
+		$reg = ! $reg instanceof EE_Registration ? $recipient->primary_reg_obj : $reg;
158
+
159
+
160
+		if ($this->_message_type instanceof EE_message_type && $this->_message instanceof EE_Message) {
161
+			EE_Registry::instance()->load_helper('MSG_Template');
162
+			try {
163
+				return EEH_MSG_Template::get_url_trigger(
164
+					$this->_message_type,
165
+					$this->_message,
166
+					$reg,
167
+					$sending_messenger
168
+				);
169
+			} catch (EE_Error $e) {
170
+				if (WP_DEBUG) {
171
+					$e->get_error();
172
+				}
173
+			}
174
+		}
175
+
176
+		return '';
177
+	}
178 178
 }
Please login to merge, or discard this patch.
core/libraries/payment_methods/EE_PMT_Base.lib.php 2 patches
Spacing   +18 added lines, -18 removed lines patch added patch discarded remove patch
@@ -118,7 +118,7 @@  discard block
 block discarded – undo
118 118
             $this->_gateway->set_unsupported_character_remover(new AsciiOnly());
119 119
             do_action('AHEE__EE_PMT_Base___construct__done_initializing_gateway_class', $this, $this->_gateway);
120 120
         }
121
-        if (! isset($this->_has_billing_form)) {
121
+        if ( ! isset($this->_has_billing_form)) {
122 122
             // by default, On Site gateways have a billing form
123 123
             if ($this->payment_occurs() == EE_PMT_Base::onsite) {
124 124
                 $this->set_has_billing_form(true);
@@ -127,7 +127,7 @@  discard block
 block discarded – undo
127 127
             }
128 128
         }
129 129
 
130
-        if (! $this->_pretty_name) {
130
+        if ( ! $this->_pretty_name) {
131 131
             throw new EE_Error(
132 132
                 sprintf(
133 133
                     esc_html__(
@@ -139,7 +139,7 @@  discard block
 block discarded – undo
139 139
         }
140 140
         // if the child didn't specify a default button, use the credit card one
141 141
         if ($this->_default_button_url === null) {
142
-            $this->_default_button_url = EE_PLUGIN_DIR_URL . 'payment_methods/pay-by-credit-card.png';
142
+            $this->_default_button_url = EE_PLUGIN_DIR_URL.'payment_methods/pay-by-credit-card.png';
143 143
         }
144 144
     }
145 145
 
@@ -160,7 +160,7 @@  discard block
 block discarded – undo
160 160
     {
161 161
         $reflector = new ReflectionClass(get_class($this));
162 162
         $fn = $reflector->getFileName();
163
-        $this->_file_folder = dirname($fn) . '/';
163
+        $this->_file_folder = dirname($fn).'/';
164 164
     }
165 165
 
166 166
 
@@ -193,7 +193,7 @@  discard block
 block discarded – undo
193 193
      */
194 194
     public function file_folder()
195 195
     {
196
-        if (! $this->_file_folder) {
196
+        if ( ! $this->_file_folder) {
197 197
             $this->_set_file_folder();
198 198
         }
199 199
         return $this->_file_folder;
@@ -205,7 +205,7 @@  discard block
 block discarded – undo
205 205
      */
206 206
     public function file_url()
207 207
     {
208
-        if (! $this->_file_url) {
208
+        if ( ! $this->_file_url) {
209 209
             $this->_set_file_url();
210 210
         }
211 211
         return $this->_file_url;
@@ -239,7 +239,7 @@  discard block
 block discarded – undo
239 239
      */
240 240
     public function settings_form()
241 241
     {
242
-        if (! $this->_settings_form) {
242
+        if ( ! $this->_settings_form) {
243 243
             $this->_settings_form = $this->generate_new_settings_form();
244 244
             $this->_settings_form->set_payment_method_type($this);
245 245
             // if we have already assigned a model object to this pmt, make
@@ -293,7 +293,7 @@  discard block
 block discarded – undo
293 293
     public function billing_form(EE_Transaction $transaction = null, $extra_args = array())
294 294
     {
295 295
         // has billing form already been regenerated ? or overwrite cache?
296
-        if (! $this->_billing_form instanceof EE_Billing_Info_Form || ! $this->_cache_billing_form) {
296
+        if ( ! $this->_billing_form instanceof EE_Billing_Info_Form || ! $this->_cache_billing_form) {
297 297
             $this->_billing_form = $this->generate_new_billing_form($transaction, $extra_args);
298 298
         }
299 299
         // if we know who the attendee is, and this is a billing form
@@ -397,7 +397,7 @@  discard block
 block discarded – undo
397 397
             $payment = EEM_Payment::instance()->get_one(array($duplicate_properties));
398 398
             // if we didn't already have a payment in progress for the same thing,
399 399
             // then we actually want to make a new payment
400
-            if (! $payment instanceof EE_Payment) {
400
+            if ( ! $payment instanceof EE_Payment) {
401 401
                 $payment = EE_Payment::new_instance(
402 402
                     array_merge(
403 403
                         $duplicate_properties,
@@ -498,7 +498,7 @@  discard block
 block discarded – undo
498 498
     public function handle_ipn($req_data, $transaction)
499 499
     {
500 500
         $transaction = EEM_Transaction::instance()->ensure_is_obj($transaction);
501
-        if (! $this->_gateway instanceof EE_Offsite_Gateway) {
501
+        if ( ! $this->_gateway instanceof EE_Offsite_Gateway) {
502 502
             throw new EE_Error(
503 503
                 sprintf(
504 504
                     esc_html__("Could not handle IPN because '%s' is not an offsite gateway", "event_espresso"),
@@ -521,7 +521,7 @@  discard block
 block discarded – undo
521 521
      */
522 522
     protected function _save_billing_info_to_attendee($billing_form, $transaction)
523 523
     {
524
-        if (! $transaction || ! $transaction instanceof EE_Transaction) {
524
+        if ( ! $transaction || ! $transaction instanceof EE_Transaction) {
525 525
             EE_Error::add_error(
526 526
                 esc_html__("Cannot save billing info because no transaction was specified", "event_espresso"),
527 527
                 __FILE__,
@@ -531,7 +531,7 @@  discard block
 block discarded – undo
531 531
             return false;
532 532
         }
533 533
         $primary_reg = $transaction->primary_registration();
534
-        if (! $primary_reg) {
534
+        if ( ! $primary_reg) {
535 535
             EE_Error::add_error(
536 536
                 esc_html__("Cannot save billing info because the transaction has no primary registration", "event_espresso"),
537 537
                 __FILE__,
@@ -541,7 +541,7 @@  discard block
 block discarded – undo
541 541
             return false;
542 542
         }
543 543
         $attendee = $primary_reg->attendee();
544
-        if (! $attendee) {
544
+        if ( ! $attendee) {
545 545
             EE_Error::add_error(
546 546
                 esc_html__(
547 547
                     "Cannot save billing info because the transaction's primary registration has no attendee!",
@@ -654,7 +654,7 @@  discard block
 block discarded – undo
654 654
      */
655 655
     public function payment_occurs()
656 656
     {
657
-        if (! $this->_gateway) {
657
+        if ( ! $this->_gateway) {
658 658
             return EE_PMT_Base::offline;
659 659
         } elseif ($this->_gateway instanceof EE_Onsite_Gateway) {
660 660
             return EE_PMT_Base::onsite;
@@ -685,7 +685,7 @@  discard block
 block discarded – undo
685 685
     public function payment_overview_content(EE_Payment $payment)
686 686
     {
687 687
         return EEH_Template::display_template(
688
-            EE_LIBRARIES . 'payment_methods/templates/payment_details_content.template.php',
688
+            EE_LIBRARIES.'payment_methods/templates/payment_details_content.template.php',
689 689
             array('payment_method' => $this->_pm_instance, 'payment' => $payment),
690 690
             true
691 691
         );
@@ -783,7 +783,7 @@  discard block
 block discarded – undo
783 783
      */
784 784
     public function get_help_tab_name()
785 785
     {
786
-        return 'ee_' . strtolower($this->system_name()) . '_help_tab';
786
+        return 'ee_'.strtolower($this->system_name()).'_help_tab';
787 787
     }
788 788
 
789 789
     /**
@@ -794,7 +794,7 @@  discard block
 block discarded – undo
794 794
      */
795 795
     public function cap_name()
796 796
     {
797
-        return 'ee_payment_method_' . strtolower($this->system_name());
797
+        return 'ee_payment_method_'.strtolower($this->system_name());
798 798
     }
799 799
 
800 800
     /**
@@ -828,7 +828,7 @@  discard block
 block discarded – undo
828 828
     public function introductory_html()
829 829
     {
830 830
         return EEH_Template::locate_template(
831
-            $this->file_folder() . 'templates/' . strtolower($this->system_name()) . '_intro.template.php',
831
+            $this->file_folder().'templates/'.strtolower($this->system_name()).'_intro.template.php',
832 832
             array('pmt_obj' => $this, 'pm_instance' => $this->_pm_instance)
833 833
         );
834 834
     }
Please login to merge, or discard this patch.
Indentation   +810 added lines, -810 removed lines patch added patch discarded remove patch
@@ -21,814 +21,814 @@
 block discarded – undo
21 21
  */
22 22
 abstract class EE_PMT_Base
23 23
 {
24
-    const onsite = 'on-site';
25
-    const offsite = 'off-site';
26
-    const offline = 'off-line';
27
-
28
-    /**
29
-     * @var EE_Payment_Method
30
-     */
31
-    protected $_pm_instance = null;
32
-
33
-    /**
34
-     * @var boolean
35
-     */
36
-    protected $_requires_https = false;
37
-
38
-    /**
39
-     * @var boolean
40
-     */
41
-    protected $_has_billing_form;
42
-
43
-    /**
44
-     * @var EE_Gateway
45
-     */
46
-    protected $_gateway = null;
47
-
48
-    /**
49
-     * @var EE_Payment_Method_Form
50
-     */
51
-    protected $_settings_form = null;
52
-
53
-    /**
54
-     * @var EE_Form_Section_Proper
55
-     */
56
-    protected $_billing_form = null;
57
-
58
-    /**
59
-     * @var boolean
60
-     */
61
-    protected $_cache_billing_form = true;
62
-
63
-    /**
64
-     * String of the absolute path to the folder containing this file, with a trailing slash.
65
-     * eg '/public_html/wp-site/wp-content/plugins/event-espresso/payment_methods/Invoice/'
66
-     *
67
-     * @var string
68
-     */
69
-    protected $_file_folder = null;
70
-
71
-    /**
72
-     * String to the absolute URL to this file (useful for getting its web-accessible resources
73
-     * like images, js, or css)
74
-     *
75
-     * @var string
76
-     */
77
-    protected $_file_url = null;
78
-
79
-    /**
80
-     * Pretty name for the payment method
81
-     *
82
-     * @var string
83
-     */
84
-    protected $_pretty_name = null;
85
-
86
-    /**
87
-     *
88
-     * @var string
89
-     */
90
-    protected $_default_button_url = null;
91
-
92
-    /**
93
-     *
94
-     * @var string
95
-     */
96
-    protected $_default_description = null;
97
-
98
-
99
-    /**
100
-     *
101
-     * @param EE_Payment_Method $pm_instance
102
-     * @throws EE_Error
103
-     * @return EE_PMT_Base
104
-     */
105
-    public function __construct($pm_instance = null)
106
-    {
107
-        if ($pm_instance instanceof EE_Payment_Method) {
108
-            $this->set_instance($pm_instance);
109
-        }
110
-        if ($this->_gateway) {
111
-            $this->_gateway->set_payment_model(EEM_Payment::instance());
112
-            $this->_gateway->set_payment_log(EEM_Change_Log::instance());
113
-            $this->_gateway->set_template_helper(new EEH_Template());
114
-            $this->_gateway->set_line_item_helper(new EEH_Line_Item());
115
-            $this->_gateway->set_money_helper(new EEH_Money());
116
-            $this->_gateway->set_gateway_data_formatter(new GatewayDataFormatter());
117
-            $this->_gateway->set_unsupported_character_remover(new AsciiOnly());
118
-            do_action('AHEE__EE_PMT_Base___construct__done_initializing_gateway_class', $this, $this->_gateway);
119
-        }
120
-        if (! isset($this->_has_billing_form)) {
121
-            // by default, On Site gateways have a billing form
122
-            if ($this->payment_occurs() == EE_PMT_Base::onsite) {
123
-                $this->set_has_billing_form(true);
124
-            } else {
125
-                $this->set_has_billing_form(false);
126
-            }
127
-        }
128
-
129
-        if (! $this->_pretty_name) {
130
-            throw new EE_Error(
131
-                sprintf(
132
-                    esc_html__(
133
-                        "You must set the pretty name for the Payment Method Type in the constructor (_pretty_name), and please make it internationalized",
134
-                        "event_espresso"
135
-                    )
136
-                )
137
-            );
138
-        }
139
-        // if the child didn't specify a default button, use the credit card one
140
-        if ($this->_default_button_url === null) {
141
-            $this->_default_button_url = EE_PLUGIN_DIR_URL . 'payment_methods/pay-by-credit-card.png';
142
-        }
143
-    }
144
-
145
-
146
-    /**
147
-     * @param boolean $has_billing_form
148
-     */
149
-    public function set_has_billing_form($has_billing_form)
150
-    {
151
-        $this->_has_billing_form = filter_var($has_billing_form, FILTER_VALIDATE_BOOLEAN);
152
-    }
153
-
154
-
155
-    /**
156
-     * sets the file_folder property
157
-     */
158
-    protected function _set_file_folder()
159
-    {
160
-        $reflector = new ReflectionClass(get_class($this));
161
-        $fn = $reflector->getFileName();
162
-        $this->_file_folder = dirname($fn) . '/';
163
-    }
164
-
165
-
166
-    /**
167
-     * sets the file URL with a trailing slash for this PMT
168
-     */
169
-    protected function _set_file_url()
170
-    {
171
-        $plugins_dir_fixed = str_replace('\\', '/', WP_PLUGIN_DIR);
172
-        $file_folder_fixed = str_replace('\\', '/', $this->file_folder());
173
-        $file_path = str_replace($plugins_dir_fixed, WP_PLUGIN_URL, $file_folder_fixed);
174
-        $this->_file_url = set_url_scheme($file_path);
175
-    }
176
-
177
-    /**
178
-     * Gets the default description on all payment methods of this type
179
-     *
180
-     * @return string
181
-     */
182
-    public function default_description()
183
-    {
184
-        return $this->_default_description;
185
-    }
186
-
187
-
188
-    /**
189
-     * Returns the folder containing the PMT child class, with a trailing slash
190
-     *
191
-     * @return string
192
-     */
193
-    public function file_folder()
194
-    {
195
-        if (! $this->_file_folder) {
196
-            $this->_set_file_folder();
197
-        }
198
-        return $this->_file_folder;
199
-    }
200
-
201
-
202
-    /**
203
-     * @return string
204
-     */
205
-    public function file_url()
206
-    {
207
-        if (! $this->_file_url) {
208
-            $this->_set_file_url();
209
-        }
210
-        return $this->_file_url;
211
-    }
212
-
213
-
214
-    /**
215
-     * Sets the payment method instance this payment method type is for.
216
-     * Its important teh payment method instance is set before
217
-     *
218
-     * @param EE_Payment_Method $payment_method_instance
219
-     */
220
-    public function set_instance($payment_method_instance)
221
-    {
222
-        $this->_pm_instance = $payment_method_instance;
223
-        // if they have already requested the settings form, make sure its
224
-        // data matches this model object
225
-        if ($this->_settings_form) {
226
-            $this->settings_form()->populate_model_obj($payment_method_instance);
227
-        }
228
-        if ($this->_gateway && $this->_gateway instanceof EE_Gateway) {
229
-            $this->_gateway->set_settings($payment_method_instance->settings_array());
230
-        }
231
-    }
232
-
233
-
234
-    /**
235
-     * Gets teh form for displaying to admins where they setup the payment method
236
-     *
237
-     * @return EE_Payment_Method_Form
238
-     */
239
-    public function settings_form()
240
-    {
241
-        if (! $this->_settings_form) {
242
-            $this->_settings_form = $this->generate_new_settings_form();
243
-            $this->_settings_form->set_payment_method_type($this);
244
-            // if we have already assigned a model object to this pmt, make
245
-            // sure its reflected in teh form we just generated
246
-            if ($this->_pm_instance) {
247
-                $this->_settings_form->populate_model_obj($this->_pm_instance);
248
-            }
249
-        }
250
-        return $this->_settings_form;
251
-    }
252
-
253
-
254
-    /**
255
-     * Gets the form for all the settings related to this payment method type
256
-     *
257
-     * @return EE_Payment_Method_Form
258
-     */
259
-    abstract public function generate_new_settings_form();
260
-
261
-
262
-    /**
263
-     * Sets the form for settings. This may be useful if we have already received
264
-     * a form submission and have form data it in, and want to use it anytime we're showing
265
-     * this payment method type's settings form later in the request
266
-     *
267
-     * @param EE_Payment_Method_Form $form
268
-     */
269
-    public function set_settings_form($form)
270
-    {
271
-        $this->_settings_form = $form;
272
-    }
273
-
274
-
275
-    /**
276
-     * @return boolean
277
-     */
278
-    public function has_billing_form()
279
-    {
280
-        return $this->_has_billing_form;
281
-    }
282
-
283
-
284
-    /**
285
-     * Gets the form for displaying to attendees where they can enter their billing info
286
-     * which will be sent to teh gateway (can be null)
287
-     *
288
-     * @param \EE_Transaction $transaction
289
-     * @param array           $extra_args
290
-     * @return \EE_Billing_Attendee_Info_Form|\EE_Billing_Info_Form|null
291
-     */
292
-    public function billing_form(EE_Transaction $transaction = null, $extra_args = array())
293
-    {
294
-        // has billing form already been regenerated ? or overwrite cache?
295
-        if (! $this->_billing_form instanceof EE_Billing_Info_Form || ! $this->_cache_billing_form) {
296
-            $this->_billing_form = $this->generate_new_billing_form($transaction, $extra_args);
297
-        }
298
-        // if we know who the attendee is, and this is a billing form
299
-        // that uses attendee info, populate it
300
-        if (
301
-            apply_filters(
302
-                'FHEE__populate_billing_form_fields_from_attendee',
303
-                ($this->_billing_form instanceof EE_Billing_Attendee_Info_Form
304
-                && $transaction instanceof EE_Transaction
305
-                && $transaction->primary_registration() instanceof EE_Registration
306
-                && $transaction->primary_registration()->attendee() instanceof EE_Attendee
307
-                ),
308
-                $this->_billing_form,
309
-                $transaction
310
-            )
311
-        ) {
312
-            $this->_billing_form->populate_from_attendee($transaction->primary_registration()->attendee());
313
-        }
314
-        return $this->_billing_form;
315
-    }
316
-
317
-
318
-    /**
319
-     * Creates the billing form for this payment method type
320
-     *
321
-     * @param \EE_Transaction $transaction
322
-     * @return \EE_Billing_Info_Form
323
-     */
324
-    abstract public function generate_new_billing_form(EE_Transaction $transaction = null);
325
-
326
-
327
-    /**
328
-     * apply_billing_form_debug_settings
329
-     * applies debug data to the form
330
-     *
331
-     * @param \EE_Billing_Info_Form $billing_form
332
-     * @return \EE_Billing_Info_Form
333
-     */
334
-    public function apply_billing_form_debug_settings(EE_Billing_Info_Form $billing_form)
335
-    {
336
-        return $billing_form;
337
-    }
338
-
339
-
340
-    /**
341
-     * Sets the billing form for this payment method type. You may want to use this
342
-     * if you have form
343
-     *
344
-     * @param EE_Payment_Method $form
345
-     */
346
-    public function set_billing_form($form)
347
-    {
348
-        $this->_billing_form = $form;
349
-    }
350
-
351
-
352
-    /**
353
-     * Returns whether or not this payment method requires HTTPS to be used
354
-     *
355
-     * @return boolean
356
-     */
357
-    public function requires_https()
358
-    {
359
-        return $this->_requires_https;
360
-    }
361
-
362
-
363
-    /**
364
-     *
365
-     * @param EE_Transaction       $transaction
366
-     * @param float                $amount
367
-     * @param EE_Billing_Info_Form $billing_info
368
-     * @param string               $return_url
369
-     * @param string               $fail_url
370
-     * @param string               $method
371
-     * @param bool                 $by_admin
372
-     * @return EE_Payment
373
-     * @throws EE_Error
374
-     */
375
-    public function process_payment(
376
-        EE_Transaction $transaction,
377
-        $amount = null,
378
-        $billing_info = null,
379
-        $return_url = null,
380
-        $fail_url = '',
381
-        $method = 'CART',
382
-        $by_admin = false
383
-    ) {
384
-        // @todo: add surcharge for the payment method, if any
385
-        if ($this->_gateway) {
386
-            // there is a gateway, so we're going to make a payment object
387
-            // but wait! do they already have a payment in progress that we thought was failed?
388
-            $duplicate_properties = array(
389
-                'STS_ID'               => EEM_Payment::status_id_failed,
390
-                'TXN_ID'               => $transaction->ID(),
391
-                'PMD_ID'               => $this->_pm_instance->ID(),
392
-                'PAY_source'           => $method,
393
-                'PAY_amount'           => $amount !== null ? $amount : $transaction->remaining(),
394
-                'PAY_gateway_response' => null,
395
-            );
396
-            $payment = EEM_Payment::instance()->get_one(array($duplicate_properties));
397
-            // if we didn't already have a payment in progress for the same thing,
398
-            // then we actually want to make a new payment
399
-            if (! $payment instanceof EE_Payment) {
400
-                $payment = EE_Payment::new_instance(
401
-                    array_merge(
402
-                        $duplicate_properties,
403
-                        array(
404
-                            'PAY_timestamp'       => time(),
405
-                            'PAY_txn_id_chq_nmbr' => null,
406
-                            'PAY_po_number'       => null,
407
-                            'PAY_extra_accntng'   => null,
408
-                            'PAY_details'         => null,
409
-                        )
410
-                    )
411
-                );
412
-            }
413
-            // make sure the payment has been saved to show we started it, and so it has an ID should the gateway try to log it
414
-            $payment->save();
415
-            $billing_values = $this->_get_billing_values_from_form($billing_info);
416
-
417
-            //  Offsite Gateway
418
-            if ($this->_gateway instanceof EE_Offsite_Gateway) {
419
-                $payment = $this->_gateway->set_redirection_info(
420
-                    $payment,
421
-                    $billing_values,
422
-                    $return_url,
423
-                    EE_Config::instance()->core->txn_page_url(
424
-                        array(
425
-                            'e_reg_url_link'    => $transaction->primary_registration()->reg_url_link(),
426
-                            'ee_payment_method' => $this->_pm_instance->slug(),
427
-                        )
428
-                    ),
429
-                    $fail_url
430
-                );
431
-                $payment->save();
432
-                //  Onsite Gateway
433
-            } elseif ($this->_gateway instanceof EE_Onsite_Gateway) {
434
-                $payment = $this->_gateway->do_direct_payment($payment, $billing_values);
435
-                $payment->save();
436
-            } else {
437
-                throw new EE_Error(
438
-                    sprintf(
439
-                        esc_html__(
440
-                            'Gateway for payment method type "%s" is "%s", not a subclass of either EE_Offsite_Gateway or EE_Onsite_Gateway, or null (to indicate NO gateway)',
441
-                            'event_espresso'
442
-                        ),
443
-                        get_class($this),
444
-                        gettype($this->_gateway)
445
-                    )
446
-                );
447
-            }
448
-        } else {
449
-            // no gateway provided
450
-            // there is no payment. Must be an offline gateway
451
-            // create a payment object anyways, but dont save it
452
-            $payment = EE_Payment::new_instance(
453
-                array(
454
-                    'STS_ID'        => EEM_Payment::status_id_pending,
455
-                    'TXN_ID'        => $transaction->ID(),
456
-                    'PMD_ID'        => $transaction->payment_method_ID(),
457
-                    'PAY_amount'    => 0.00,
458
-                    'PAY_timestamp' => time(),
459
-                )
460
-            );
461
-        }
462
-
463
-        // if there is billing info, clean it and save it now
464
-        if ($billing_info instanceof EE_Billing_Attendee_Info_Form) {
465
-            $this->_save_billing_info_to_attendee($billing_info, $transaction);
466
-        }
467
-
468
-        return $payment;
469
-    }
470
-
471
-    /**
472
-     * Gets the values we want to pass onto the gateway. Normally these
473
-     * are just the 'pretty' values, but there may be times the data may need
474
-     * a  little massaging. Proper subsections will become arrays of inputs
475
-     *
476
-     * @param EE_Billing_Info_Form $billing_form
477
-     * @return array
478
-     */
479
-    protected function _get_billing_values_from_form($billing_form)
480
-    {
481
-        if ($billing_form instanceof EE_Form_Section_Proper) {
482
-            return $billing_form->input_pretty_values(true);
483
-        } else {
484
-            return null;
485
-        }
486
-    }
487
-
488
-
489
-    /**
490
-     * Handles an instant payment notification when the transaction is known (by default).
491
-     *
492
-     * @param array          $req_data
493
-     * @param EE_Transaction $transaction
494
-     * @return EE_Payment
495
-     * @throws EE_Error
496
-     */
497
-    public function handle_ipn($req_data, $transaction)
498
-    {
499
-        $transaction = EEM_Transaction::instance()->ensure_is_obj($transaction);
500
-        if (! $this->_gateway instanceof EE_Offsite_Gateway) {
501
-            throw new EE_Error(
502
-                sprintf(
503
-                    esc_html__("Could not handle IPN because '%s' is not an offsite gateway", "event_espresso"),
504
-                    print_r($this->_gateway, true)
505
-                )
506
-            );
507
-        }
508
-        $payment = $this->_gateway->handle_payment_update($req_data, $transaction);
509
-        return $payment;
510
-    }
511
-
512
-
513
-    /**
514
-     * Saves the billing info onto the attendee of the primary registrant on this transaction, and
515
-     * cleans it first.
516
-     *
517
-     * @param EE_Billing_Attendee_Info_Form $billing_form
518
-     * @param EE_Transaction                $transaction
519
-     * @return boolean success
520
-     */
521
-    protected function _save_billing_info_to_attendee($billing_form, $transaction)
522
-    {
523
-        if (! $transaction || ! $transaction instanceof EE_Transaction) {
524
-            EE_Error::add_error(
525
-                esc_html__("Cannot save billing info because no transaction was specified", "event_espresso"),
526
-                __FILE__,
527
-                __FUNCTION__,
528
-                __LINE__
529
-            );
530
-            return false;
531
-        }
532
-        $primary_reg = $transaction->primary_registration();
533
-        if (! $primary_reg) {
534
-            EE_Error::add_error(
535
-                esc_html__("Cannot save billing info because the transaction has no primary registration", "event_espresso"),
536
-                __FILE__,
537
-                __FUNCTION__,
538
-                __LINE__
539
-            );
540
-            return false;
541
-        }
542
-        $attendee = $primary_reg->attendee();
543
-        if (! $attendee) {
544
-            EE_Error::add_error(
545
-                esc_html__(
546
-                    "Cannot save billing info because the transaction's primary registration has no attendee!",
547
-                    "event_espresso"
548
-                ),
549
-                __FILE__,
550
-                __FUNCTION__,
551
-                __LINE__
552
-            );
553
-            return false;
554
-        }
555
-        return $attendee->save_and_clean_billing_info_for_payment_method($billing_form, $transaction->payment_method());
556
-    }
557
-
558
-
559
-    /**
560
-     * Gets the payment this IPN is for. Children may often want to
561
-     * override this to inspect the request
562
-     *
563
-     * @param EE_Transaction $transaction
564
-     * @param array          $req_data
565
-     * @return EE_Payment
566
-     */
567
-    protected function find_payment_for_ipn(EE_Transaction $transaction, $req_data = array())
568
-    {
569
-        return $transaction->last_payment();
570
-    }
571
-
572
-
573
-    /**
574
-     * In case generic code cannot provide the payment processor with a specific payment method
575
-     * and transaction, it will try calling this method on each activate payment method.
576
-     * If the payment method is able to identify the request as being for it, it should fetch
577
-     * the payment its for and return it. If not, it should throw an EE_Error to indicate it cannot
578
-     * handle the IPN
579
-     *
580
-     * @param array $req_data
581
-     * @return EE_Payment only if this payment method can find the info its needs from $req_data
582
-     * and identifies the IPN as being for this payment method (not just fo ra payment method of this type)
583
-     * @throws EE_Error
584
-     */
585
-    public function handle_unclaimed_ipn($req_data = array())
586
-    {
587
-        throw new EE_Error(
588
-            sprintf(esc_html__("Payment Method '%s' cannot handle unclaimed IPNs", "event_espresso"), get_class($this))
589
-        );
590
-    }
591
-
592
-
593
-    /**
594
-     * Logic to be accomplished when the payment attempt is complete.
595
-     * Most payment methods don't need to do anything at this point; but some, like Mijireh, do.
596
-     * (Mijireh is an offsite gateway which doesn't send an IPN. So when the user returns to EE from
597
-     * mijireh, this method needs to be called so the Mijireh PM can ping Mijireh to know the status
598
-     * of the payment). Fed a transaction because it's always assumed to be the last payment that
599
-     * we're dealing with. Returns that last payment (if there is one)
600
-     *
601
-     * @param EE_Transaction $transaction
602
-     * @return EE_Payment
603
-     */
604
-    public function finalize_payment_for($transaction)
605
-    {
606
-        return $transaction->last_payment();
607
-    }
608
-
609
-
610
-    /**
611
-     * Whether or not this payment method's gateway supports sending refund requests
612
-     *
613
-     * @return boolean
614
-     */
615
-    public function supports_sending_refunds()
616
-    {
617
-        if ($this->_gateway && $this->_gateway instanceof EE_Gateway) {
618
-            return $this->_gateway->supports_sending_refunds();
619
-        } else {
620
-            return false;
621
-        }
622
-    }
623
-
624
-
625
-    /**
626
-     *
627
-     * @param EE_Payment $payment
628
-     * @param array      $refund_info
629
-     * @throws EE_Error
630
-     * @return EE_Payment
631
-     */
632
-    public function process_refund(EE_Payment $payment, $refund_info = array())
633
-    {
634
-        if ($this->_gateway && $this->_gateway instanceof EE_Gateway) {
635
-            return $this->_gateway->do_direct_refund($payment, $refund_info);
636
-        } else {
637
-            throw new EE_Error(
638
-                sprintf(
639
-                    esc_html__('Payment Method Type "%s" does not support sending refund requests', 'event_espresso'),
640
-                    get_class($this)
641
-                )
642
-            );
643
-        }
644
-    }
645
-
646
-
647
-    /**
648
-     * Returns one the class's constants onsite,offsite, or offline, depending on this
649
-     * payment method's gateway.
650
-     *
651
-     * @return string
652
-     * @throws EE_Error
653
-     */
654
-    public function payment_occurs()
655
-    {
656
-        if (! $this->_gateway) {
657
-            return EE_PMT_Base::offline;
658
-        } elseif ($this->_gateway instanceof EE_Onsite_Gateway) {
659
-            return EE_PMT_Base::onsite;
660
-        } elseif ($this->_gateway instanceof EE_Offsite_Gateway) {
661
-            return EE_PMT_Base::offsite;
662
-        } else {
663
-            throw new EE_Error(
664
-                sprintf(
665
-                    esc_html__(
666
-                        "Payment method type '%s's gateway isn't an instance of EE_Onsite_Gateway, EE_Offsite_Gateway, or null. It must be one of those",
667
-                        "event_espresso"
668
-                    ),
669
-                    get_class($this)
670
-                )
671
-            );
672
-        }
673
-    }
674
-
675
-
676
-    /**
677
-     * For adding any html output ab ove the payment overview.
678
-     * Many gateways won't want ot display anything, so this function just returns an empty string.
679
-     * Other gateways may want to override this, such as offline gateways.
680
-     *
681
-     * @param EE_Payment $payment
682
-     * @return string
683
-     */
684
-    public function payment_overview_content(EE_Payment $payment)
685
-    {
686
-        return EEH_Template::display_template(
687
-            EE_LIBRARIES . 'payment_methods/templates/payment_details_content.template.php',
688
-            array('payment_method' => $this->_pm_instance, 'payment' => $payment),
689
-            true
690
-        );
691
-    }
692
-
693
-
694
-    /**
695
-     * @return array where keys are the help tab name,
696
-     * values are: array {
697
-     * @type string $title         i18n name for the help tab
698
-     * @type string $filename      name of the file located in ./help_tabs/ (ie, in a folder next to this file)
699
-     * @type array  $template_args any arguments you want passed to the template file while rendering.
700
-     *                Keys will be variable names and values with be their values.
701
-     */
702
-    public function help_tabs_config()
703
-    {
704
-        return array();
705
-    }
706
-
707
-
708
-    /**
709
-     * The system name for this PMT (eg AIM, Paypal_Pro, Invoice... what gets put into
710
-     * the payment method's table's PMT_type column)
711
-     *
712
-     * @return string
713
-     */
714
-    public function system_name()
715
-    {
716
-        $classname = get_class($this);
717
-        return str_replace("EE_PMT_", '', $classname);
718
-    }
719
-
720
-
721
-    /**
722
-     * A pretty i18n version of the PMT name. Often the same as the "pretty_name", but you can change it by overriding
723
-     * this method.
724
-     * @return string
725
-     */
726
-    public function defaultFrontendName()
727
-    {
728
-        return $this->pretty_name();
729
-    }
730
-
731
-
732
-    /**
733
-     * A pretty i18n version of the PMT name
734
-     *
735
-     * @return string
736
-     */
737
-    public function pretty_name()
738
-    {
739
-        return $this->_pretty_name;
740
-    }
741
-
742
-
743
-    /**
744
-     * Gets the default absolute URL to the payment method type's button
745
-     *
746
-     * @return string
747
-     */
748
-    public function default_button_url()
749
-    {
750
-        return $this->_default_button_url;
751
-    }
752
-
753
-
754
-    /**
755
-     * Gets the gateway used by this payment method (if any)
756
-     *
757
-     * @return EE_Gateway
758
-     */
759
-    public function get_gateway()
760
-    {
761
-        return $this->_gateway;
762
-    }
763
-
764
-
765
-    /**
766
-     * @return string html for the link to a help tab
767
-     */
768
-    public function get_help_tab_link()
769
-    {
770
-        return EEH_Template::get_help_tab_link(
771
-            $this->get_help_tab_name(),
772
-            'espresso_payment_settings',
773
-            'default'
774
-        );
775
-    }
776
-
777
-
778
-    /**
779
-     * Returns the name of the help tab for this PMT
780
-     *
781
-     * @return string
782
-     */
783
-    public function get_help_tab_name()
784
-    {
785
-        return 'ee_' . strtolower($this->system_name()) . '_help_tab';
786
-    }
787
-
788
-    /**
789
-     * The name of the wp capability that should be associated with the usage of
790
-     * this PMT by an admin
791
-     *
792
-     * @return string
793
-     */
794
-    public function cap_name()
795
-    {
796
-        return 'ee_payment_method_' . strtolower($this->system_name());
797
-    }
798
-
799
-    /**
800
-     * Called by client code to tell the gateway that if it wants to change
801
-     * the transaction or line items or registrations related to teh payment it already
802
-     * processed (we think, but possibly not) that now's the time to do it.
803
-     * It is expected that gateways will store any info they need for this on the PAY_details,
804
-     * or maybe an extra meta value
805
-     *
806
-     * @param EE_Payment $payment
807
-     * @return void
808
-     */
809
-    public function update_txn_based_on_payment($payment)
810
-    {
811
-        if ($this->_gateway instanceof EE_Gateway) {
812
-            $this->_gateway->update_txn_based_on_payment($payment);
813
-        }
814
-    }
815
-
816
-    /**
817
-     * Returns a string of HTML describing this payment method type for an admin,
818
-     * primarily intended for them to read before activating it.
819
-     * The easiest way to set this is to create a folder 'templates' alongside
820
-     * your EE_PMT_{System_Name} file, and in it create a file named "{system_name}_intro.template.php".
821
-     * Eg, if your payment method file is named "EE_PMT_Foo_Bar.pm.php",
822
-     * then you'd create a file named "templates" in the same folder as it, and name the file
823
-     * "foo_bar_intro.template.php", and its content will be returned by this method
824
-     *
825
-     * @return string
826
-     */
827
-    public function introductory_html()
828
-    {
829
-        return EEH_Template::locate_template(
830
-            $this->file_folder() . 'templates/' . strtolower($this->system_name()) . '_intro.template.php',
831
-            array('pmt_obj' => $this, 'pm_instance' => $this->_pm_instance)
832
-        );
833
-    }
24
+	const onsite = 'on-site';
25
+	const offsite = 'off-site';
26
+	const offline = 'off-line';
27
+
28
+	/**
29
+	 * @var EE_Payment_Method
30
+	 */
31
+	protected $_pm_instance = null;
32
+
33
+	/**
34
+	 * @var boolean
35
+	 */
36
+	protected $_requires_https = false;
37
+
38
+	/**
39
+	 * @var boolean
40
+	 */
41
+	protected $_has_billing_form;
42
+
43
+	/**
44
+	 * @var EE_Gateway
45
+	 */
46
+	protected $_gateway = null;
47
+
48
+	/**
49
+	 * @var EE_Payment_Method_Form
50
+	 */
51
+	protected $_settings_form = null;
52
+
53
+	/**
54
+	 * @var EE_Form_Section_Proper
55
+	 */
56
+	protected $_billing_form = null;
57
+
58
+	/**
59
+	 * @var boolean
60
+	 */
61
+	protected $_cache_billing_form = true;
62
+
63
+	/**
64
+	 * String of the absolute path to the folder containing this file, with a trailing slash.
65
+	 * eg '/public_html/wp-site/wp-content/plugins/event-espresso/payment_methods/Invoice/'
66
+	 *
67
+	 * @var string
68
+	 */
69
+	protected $_file_folder = null;
70
+
71
+	/**
72
+	 * String to the absolute URL to this file (useful for getting its web-accessible resources
73
+	 * like images, js, or css)
74
+	 *
75
+	 * @var string
76
+	 */
77
+	protected $_file_url = null;
78
+
79
+	/**
80
+	 * Pretty name for the payment method
81
+	 *
82
+	 * @var string
83
+	 */
84
+	protected $_pretty_name = null;
85
+
86
+	/**
87
+	 *
88
+	 * @var string
89
+	 */
90
+	protected $_default_button_url = null;
91
+
92
+	/**
93
+	 *
94
+	 * @var string
95
+	 */
96
+	protected $_default_description = null;
97
+
98
+
99
+	/**
100
+	 *
101
+	 * @param EE_Payment_Method $pm_instance
102
+	 * @throws EE_Error
103
+	 * @return EE_PMT_Base
104
+	 */
105
+	public function __construct($pm_instance = null)
106
+	{
107
+		if ($pm_instance instanceof EE_Payment_Method) {
108
+			$this->set_instance($pm_instance);
109
+		}
110
+		if ($this->_gateway) {
111
+			$this->_gateway->set_payment_model(EEM_Payment::instance());
112
+			$this->_gateway->set_payment_log(EEM_Change_Log::instance());
113
+			$this->_gateway->set_template_helper(new EEH_Template());
114
+			$this->_gateway->set_line_item_helper(new EEH_Line_Item());
115
+			$this->_gateway->set_money_helper(new EEH_Money());
116
+			$this->_gateway->set_gateway_data_formatter(new GatewayDataFormatter());
117
+			$this->_gateway->set_unsupported_character_remover(new AsciiOnly());
118
+			do_action('AHEE__EE_PMT_Base___construct__done_initializing_gateway_class', $this, $this->_gateway);
119
+		}
120
+		if (! isset($this->_has_billing_form)) {
121
+			// by default, On Site gateways have a billing form
122
+			if ($this->payment_occurs() == EE_PMT_Base::onsite) {
123
+				$this->set_has_billing_form(true);
124
+			} else {
125
+				$this->set_has_billing_form(false);
126
+			}
127
+		}
128
+
129
+		if (! $this->_pretty_name) {
130
+			throw new EE_Error(
131
+				sprintf(
132
+					esc_html__(
133
+						"You must set the pretty name for the Payment Method Type in the constructor (_pretty_name), and please make it internationalized",
134
+						"event_espresso"
135
+					)
136
+				)
137
+			);
138
+		}
139
+		// if the child didn't specify a default button, use the credit card one
140
+		if ($this->_default_button_url === null) {
141
+			$this->_default_button_url = EE_PLUGIN_DIR_URL . 'payment_methods/pay-by-credit-card.png';
142
+		}
143
+	}
144
+
145
+
146
+	/**
147
+	 * @param boolean $has_billing_form
148
+	 */
149
+	public function set_has_billing_form($has_billing_form)
150
+	{
151
+		$this->_has_billing_form = filter_var($has_billing_form, FILTER_VALIDATE_BOOLEAN);
152
+	}
153
+
154
+
155
+	/**
156
+	 * sets the file_folder property
157
+	 */
158
+	protected function _set_file_folder()
159
+	{
160
+		$reflector = new ReflectionClass(get_class($this));
161
+		$fn = $reflector->getFileName();
162
+		$this->_file_folder = dirname($fn) . '/';
163
+	}
164
+
165
+
166
+	/**
167
+	 * sets the file URL with a trailing slash for this PMT
168
+	 */
169
+	protected function _set_file_url()
170
+	{
171
+		$plugins_dir_fixed = str_replace('\\', '/', WP_PLUGIN_DIR);
172
+		$file_folder_fixed = str_replace('\\', '/', $this->file_folder());
173
+		$file_path = str_replace($plugins_dir_fixed, WP_PLUGIN_URL, $file_folder_fixed);
174
+		$this->_file_url = set_url_scheme($file_path);
175
+	}
176
+
177
+	/**
178
+	 * Gets the default description on all payment methods of this type
179
+	 *
180
+	 * @return string
181
+	 */
182
+	public function default_description()
183
+	{
184
+		return $this->_default_description;
185
+	}
186
+
187
+
188
+	/**
189
+	 * Returns the folder containing the PMT child class, with a trailing slash
190
+	 *
191
+	 * @return string
192
+	 */
193
+	public function file_folder()
194
+	{
195
+		if (! $this->_file_folder) {
196
+			$this->_set_file_folder();
197
+		}
198
+		return $this->_file_folder;
199
+	}
200
+
201
+
202
+	/**
203
+	 * @return string
204
+	 */
205
+	public function file_url()
206
+	{
207
+		if (! $this->_file_url) {
208
+			$this->_set_file_url();
209
+		}
210
+		return $this->_file_url;
211
+	}
212
+
213
+
214
+	/**
215
+	 * Sets the payment method instance this payment method type is for.
216
+	 * Its important teh payment method instance is set before
217
+	 *
218
+	 * @param EE_Payment_Method $payment_method_instance
219
+	 */
220
+	public function set_instance($payment_method_instance)
221
+	{
222
+		$this->_pm_instance = $payment_method_instance;
223
+		// if they have already requested the settings form, make sure its
224
+		// data matches this model object
225
+		if ($this->_settings_form) {
226
+			$this->settings_form()->populate_model_obj($payment_method_instance);
227
+		}
228
+		if ($this->_gateway && $this->_gateway instanceof EE_Gateway) {
229
+			$this->_gateway->set_settings($payment_method_instance->settings_array());
230
+		}
231
+	}
232
+
233
+
234
+	/**
235
+	 * Gets teh form for displaying to admins where they setup the payment method
236
+	 *
237
+	 * @return EE_Payment_Method_Form
238
+	 */
239
+	public function settings_form()
240
+	{
241
+		if (! $this->_settings_form) {
242
+			$this->_settings_form = $this->generate_new_settings_form();
243
+			$this->_settings_form->set_payment_method_type($this);
244
+			// if we have already assigned a model object to this pmt, make
245
+			// sure its reflected in teh form we just generated
246
+			if ($this->_pm_instance) {
247
+				$this->_settings_form->populate_model_obj($this->_pm_instance);
248
+			}
249
+		}
250
+		return $this->_settings_form;
251
+	}
252
+
253
+
254
+	/**
255
+	 * Gets the form for all the settings related to this payment method type
256
+	 *
257
+	 * @return EE_Payment_Method_Form
258
+	 */
259
+	abstract public function generate_new_settings_form();
260
+
261
+
262
+	/**
263
+	 * Sets the form for settings. This may be useful if we have already received
264
+	 * a form submission and have form data it in, and want to use it anytime we're showing
265
+	 * this payment method type's settings form later in the request
266
+	 *
267
+	 * @param EE_Payment_Method_Form $form
268
+	 */
269
+	public function set_settings_form($form)
270
+	{
271
+		$this->_settings_form = $form;
272
+	}
273
+
274
+
275
+	/**
276
+	 * @return boolean
277
+	 */
278
+	public function has_billing_form()
279
+	{
280
+		return $this->_has_billing_form;
281
+	}
282
+
283
+
284
+	/**
285
+	 * Gets the form for displaying to attendees where they can enter their billing info
286
+	 * which will be sent to teh gateway (can be null)
287
+	 *
288
+	 * @param \EE_Transaction $transaction
289
+	 * @param array           $extra_args
290
+	 * @return \EE_Billing_Attendee_Info_Form|\EE_Billing_Info_Form|null
291
+	 */
292
+	public function billing_form(EE_Transaction $transaction = null, $extra_args = array())
293
+	{
294
+		// has billing form already been regenerated ? or overwrite cache?
295
+		if (! $this->_billing_form instanceof EE_Billing_Info_Form || ! $this->_cache_billing_form) {
296
+			$this->_billing_form = $this->generate_new_billing_form($transaction, $extra_args);
297
+		}
298
+		// if we know who the attendee is, and this is a billing form
299
+		// that uses attendee info, populate it
300
+		if (
301
+			apply_filters(
302
+				'FHEE__populate_billing_form_fields_from_attendee',
303
+				($this->_billing_form instanceof EE_Billing_Attendee_Info_Form
304
+				&& $transaction instanceof EE_Transaction
305
+				&& $transaction->primary_registration() instanceof EE_Registration
306
+				&& $transaction->primary_registration()->attendee() instanceof EE_Attendee
307
+				),
308
+				$this->_billing_form,
309
+				$transaction
310
+			)
311
+		) {
312
+			$this->_billing_form->populate_from_attendee($transaction->primary_registration()->attendee());
313
+		}
314
+		return $this->_billing_form;
315
+	}
316
+
317
+
318
+	/**
319
+	 * Creates the billing form for this payment method type
320
+	 *
321
+	 * @param \EE_Transaction $transaction
322
+	 * @return \EE_Billing_Info_Form
323
+	 */
324
+	abstract public function generate_new_billing_form(EE_Transaction $transaction = null);
325
+
326
+
327
+	/**
328
+	 * apply_billing_form_debug_settings
329
+	 * applies debug data to the form
330
+	 *
331
+	 * @param \EE_Billing_Info_Form $billing_form
332
+	 * @return \EE_Billing_Info_Form
333
+	 */
334
+	public function apply_billing_form_debug_settings(EE_Billing_Info_Form $billing_form)
335
+	{
336
+		return $billing_form;
337
+	}
338
+
339
+
340
+	/**
341
+	 * Sets the billing form for this payment method type. You may want to use this
342
+	 * if you have form
343
+	 *
344
+	 * @param EE_Payment_Method $form
345
+	 */
346
+	public function set_billing_form($form)
347
+	{
348
+		$this->_billing_form = $form;
349
+	}
350
+
351
+
352
+	/**
353
+	 * Returns whether or not this payment method requires HTTPS to be used
354
+	 *
355
+	 * @return boolean
356
+	 */
357
+	public function requires_https()
358
+	{
359
+		return $this->_requires_https;
360
+	}
361
+
362
+
363
+	/**
364
+	 *
365
+	 * @param EE_Transaction       $transaction
366
+	 * @param float                $amount
367
+	 * @param EE_Billing_Info_Form $billing_info
368
+	 * @param string               $return_url
369
+	 * @param string               $fail_url
370
+	 * @param string               $method
371
+	 * @param bool                 $by_admin
372
+	 * @return EE_Payment
373
+	 * @throws EE_Error
374
+	 */
375
+	public function process_payment(
376
+		EE_Transaction $transaction,
377
+		$amount = null,
378
+		$billing_info = null,
379
+		$return_url = null,
380
+		$fail_url = '',
381
+		$method = 'CART',
382
+		$by_admin = false
383
+	) {
384
+		// @todo: add surcharge for the payment method, if any
385
+		if ($this->_gateway) {
386
+			// there is a gateway, so we're going to make a payment object
387
+			// but wait! do they already have a payment in progress that we thought was failed?
388
+			$duplicate_properties = array(
389
+				'STS_ID'               => EEM_Payment::status_id_failed,
390
+				'TXN_ID'               => $transaction->ID(),
391
+				'PMD_ID'               => $this->_pm_instance->ID(),
392
+				'PAY_source'           => $method,
393
+				'PAY_amount'           => $amount !== null ? $amount : $transaction->remaining(),
394
+				'PAY_gateway_response' => null,
395
+			);
396
+			$payment = EEM_Payment::instance()->get_one(array($duplicate_properties));
397
+			// if we didn't already have a payment in progress for the same thing,
398
+			// then we actually want to make a new payment
399
+			if (! $payment instanceof EE_Payment) {
400
+				$payment = EE_Payment::new_instance(
401
+					array_merge(
402
+						$duplicate_properties,
403
+						array(
404
+							'PAY_timestamp'       => time(),
405
+							'PAY_txn_id_chq_nmbr' => null,
406
+							'PAY_po_number'       => null,
407
+							'PAY_extra_accntng'   => null,
408
+							'PAY_details'         => null,
409
+						)
410
+					)
411
+				);
412
+			}
413
+			// make sure the payment has been saved to show we started it, and so it has an ID should the gateway try to log it
414
+			$payment->save();
415
+			$billing_values = $this->_get_billing_values_from_form($billing_info);
416
+
417
+			//  Offsite Gateway
418
+			if ($this->_gateway instanceof EE_Offsite_Gateway) {
419
+				$payment = $this->_gateway->set_redirection_info(
420
+					$payment,
421
+					$billing_values,
422
+					$return_url,
423
+					EE_Config::instance()->core->txn_page_url(
424
+						array(
425
+							'e_reg_url_link'    => $transaction->primary_registration()->reg_url_link(),
426
+							'ee_payment_method' => $this->_pm_instance->slug(),
427
+						)
428
+					),
429
+					$fail_url
430
+				);
431
+				$payment->save();
432
+				//  Onsite Gateway
433
+			} elseif ($this->_gateway instanceof EE_Onsite_Gateway) {
434
+				$payment = $this->_gateway->do_direct_payment($payment, $billing_values);
435
+				$payment->save();
436
+			} else {
437
+				throw new EE_Error(
438
+					sprintf(
439
+						esc_html__(
440
+							'Gateway for payment method type "%s" is "%s", not a subclass of either EE_Offsite_Gateway or EE_Onsite_Gateway, or null (to indicate NO gateway)',
441
+							'event_espresso'
442
+						),
443
+						get_class($this),
444
+						gettype($this->_gateway)
445
+					)
446
+				);
447
+			}
448
+		} else {
449
+			// no gateway provided
450
+			// there is no payment. Must be an offline gateway
451
+			// create a payment object anyways, but dont save it
452
+			$payment = EE_Payment::new_instance(
453
+				array(
454
+					'STS_ID'        => EEM_Payment::status_id_pending,
455
+					'TXN_ID'        => $transaction->ID(),
456
+					'PMD_ID'        => $transaction->payment_method_ID(),
457
+					'PAY_amount'    => 0.00,
458
+					'PAY_timestamp' => time(),
459
+				)
460
+			);
461
+		}
462
+
463
+		// if there is billing info, clean it and save it now
464
+		if ($billing_info instanceof EE_Billing_Attendee_Info_Form) {
465
+			$this->_save_billing_info_to_attendee($billing_info, $transaction);
466
+		}
467
+
468
+		return $payment;
469
+	}
470
+
471
+	/**
472
+	 * Gets the values we want to pass onto the gateway. Normally these
473
+	 * are just the 'pretty' values, but there may be times the data may need
474
+	 * a  little massaging. Proper subsections will become arrays of inputs
475
+	 *
476
+	 * @param EE_Billing_Info_Form $billing_form
477
+	 * @return array
478
+	 */
479
+	protected function _get_billing_values_from_form($billing_form)
480
+	{
481
+		if ($billing_form instanceof EE_Form_Section_Proper) {
482
+			return $billing_form->input_pretty_values(true);
483
+		} else {
484
+			return null;
485
+		}
486
+	}
487
+
488
+
489
+	/**
490
+	 * Handles an instant payment notification when the transaction is known (by default).
491
+	 *
492
+	 * @param array          $req_data
493
+	 * @param EE_Transaction $transaction
494
+	 * @return EE_Payment
495
+	 * @throws EE_Error
496
+	 */
497
+	public function handle_ipn($req_data, $transaction)
498
+	{
499
+		$transaction = EEM_Transaction::instance()->ensure_is_obj($transaction);
500
+		if (! $this->_gateway instanceof EE_Offsite_Gateway) {
501
+			throw new EE_Error(
502
+				sprintf(
503
+					esc_html__("Could not handle IPN because '%s' is not an offsite gateway", "event_espresso"),
504
+					print_r($this->_gateway, true)
505
+				)
506
+			);
507
+		}
508
+		$payment = $this->_gateway->handle_payment_update($req_data, $transaction);
509
+		return $payment;
510
+	}
511
+
512
+
513
+	/**
514
+	 * Saves the billing info onto the attendee of the primary registrant on this transaction, and
515
+	 * cleans it first.
516
+	 *
517
+	 * @param EE_Billing_Attendee_Info_Form $billing_form
518
+	 * @param EE_Transaction                $transaction
519
+	 * @return boolean success
520
+	 */
521
+	protected function _save_billing_info_to_attendee($billing_form, $transaction)
522
+	{
523
+		if (! $transaction || ! $transaction instanceof EE_Transaction) {
524
+			EE_Error::add_error(
525
+				esc_html__("Cannot save billing info because no transaction was specified", "event_espresso"),
526
+				__FILE__,
527
+				__FUNCTION__,
528
+				__LINE__
529
+			);
530
+			return false;
531
+		}
532
+		$primary_reg = $transaction->primary_registration();
533
+		if (! $primary_reg) {
534
+			EE_Error::add_error(
535
+				esc_html__("Cannot save billing info because the transaction has no primary registration", "event_espresso"),
536
+				__FILE__,
537
+				__FUNCTION__,
538
+				__LINE__
539
+			);
540
+			return false;
541
+		}
542
+		$attendee = $primary_reg->attendee();
543
+		if (! $attendee) {
544
+			EE_Error::add_error(
545
+				esc_html__(
546
+					"Cannot save billing info because the transaction's primary registration has no attendee!",
547
+					"event_espresso"
548
+				),
549
+				__FILE__,
550
+				__FUNCTION__,
551
+				__LINE__
552
+			);
553
+			return false;
554
+		}
555
+		return $attendee->save_and_clean_billing_info_for_payment_method($billing_form, $transaction->payment_method());
556
+	}
557
+
558
+
559
+	/**
560
+	 * Gets the payment this IPN is for. Children may often want to
561
+	 * override this to inspect the request
562
+	 *
563
+	 * @param EE_Transaction $transaction
564
+	 * @param array          $req_data
565
+	 * @return EE_Payment
566
+	 */
567
+	protected function find_payment_for_ipn(EE_Transaction $transaction, $req_data = array())
568
+	{
569
+		return $transaction->last_payment();
570
+	}
571
+
572
+
573
+	/**
574
+	 * In case generic code cannot provide the payment processor with a specific payment method
575
+	 * and transaction, it will try calling this method on each activate payment method.
576
+	 * If the payment method is able to identify the request as being for it, it should fetch
577
+	 * the payment its for and return it. If not, it should throw an EE_Error to indicate it cannot
578
+	 * handle the IPN
579
+	 *
580
+	 * @param array $req_data
581
+	 * @return EE_Payment only if this payment method can find the info its needs from $req_data
582
+	 * and identifies the IPN as being for this payment method (not just fo ra payment method of this type)
583
+	 * @throws EE_Error
584
+	 */
585
+	public function handle_unclaimed_ipn($req_data = array())
586
+	{
587
+		throw new EE_Error(
588
+			sprintf(esc_html__("Payment Method '%s' cannot handle unclaimed IPNs", "event_espresso"), get_class($this))
589
+		);
590
+	}
591
+
592
+
593
+	/**
594
+	 * Logic to be accomplished when the payment attempt is complete.
595
+	 * Most payment methods don't need to do anything at this point; but some, like Mijireh, do.
596
+	 * (Mijireh is an offsite gateway which doesn't send an IPN. So when the user returns to EE from
597
+	 * mijireh, this method needs to be called so the Mijireh PM can ping Mijireh to know the status
598
+	 * of the payment). Fed a transaction because it's always assumed to be the last payment that
599
+	 * we're dealing with. Returns that last payment (if there is one)
600
+	 *
601
+	 * @param EE_Transaction $transaction
602
+	 * @return EE_Payment
603
+	 */
604
+	public function finalize_payment_for($transaction)
605
+	{
606
+		return $transaction->last_payment();
607
+	}
608
+
609
+
610
+	/**
611
+	 * Whether or not this payment method's gateway supports sending refund requests
612
+	 *
613
+	 * @return boolean
614
+	 */
615
+	public function supports_sending_refunds()
616
+	{
617
+		if ($this->_gateway && $this->_gateway instanceof EE_Gateway) {
618
+			return $this->_gateway->supports_sending_refunds();
619
+		} else {
620
+			return false;
621
+		}
622
+	}
623
+
624
+
625
+	/**
626
+	 *
627
+	 * @param EE_Payment $payment
628
+	 * @param array      $refund_info
629
+	 * @throws EE_Error
630
+	 * @return EE_Payment
631
+	 */
632
+	public function process_refund(EE_Payment $payment, $refund_info = array())
633
+	{
634
+		if ($this->_gateway && $this->_gateway instanceof EE_Gateway) {
635
+			return $this->_gateway->do_direct_refund($payment, $refund_info);
636
+		} else {
637
+			throw new EE_Error(
638
+				sprintf(
639
+					esc_html__('Payment Method Type "%s" does not support sending refund requests', 'event_espresso'),
640
+					get_class($this)
641
+				)
642
+			);
643
+		}
644
+	}
645
+
646
+
647
+	/**
648
+	 * Returns one the class's constants onsite,offsite, or offline, depending on this
649
+	 * payment method's gateway.
650
+	 *
651
+	 * @return string
652
+	 * @throws EE_Error
653
+	 */
654
+	public function payment_occurs()
655
+	{
656
+		if (! $this->_gateway) {
657
+			return EE_PMT_Base::offline;
658
+		} elseif ($this->_gateway instanceof EE_Onsite_Gateway) {
659
+			return EE_PMT_Base::onsite;
660
+		} elseif ($this->_gateway instanceof EE_Offsite_Gateway) {
661
+			return EE_PMT_Base::offsite;
662
+		} else {
663
+			throw new EE_Error(
664
+				sprintf(
665
+					esc_html__(
666
+						"Payment method type '%s's gateway isn't an instance of EE_Onsite_Gateway, EE_Offsite_Gateway, or null. It must be one of those",
667
+						"event_espresso"
668
+					),
669
+					get_class($this)
670
+				)
671
+			);
672
+		}
673
+	}
674
+
675
+
676
+	/**
677
+	 * For adding any html output ab ove the payment overview.
678
+	 * Many gateways won't want ot display anything, so this function just returns an empty string.
679
+	 * Other gateways may want to override this, such as offline gateways.
680
+	 *
681
+	 * @param EE_Payment $payment
682
+	 * @return string
683
+	 */
684
+	public function payment_overview_content(EE_Payment $payment)
685
+	{
686
+		return EEH_Template::display_template(
687
+			EE_LIBRARIES . 'payment_methods/templates/payment_details_content.template.php',
688
+			array('payment_method' => $this->_pm_instance, 'payment' => $payment),
689
+			true
690
+		);
691
+	}
692
+
693
+
694
+	/**
695
+	 * @return array where keys are the help tab name,
696
+	 * values are: array {
697
+	 * @type string $title         i18n name for the help tab
698
+	 * @type string $filename      name of the file located in ./help_tabs/ (ie, in a folder next to this file)
699
+	 * @type array  $template_args any arguments you want passed to the template file while rendering.
700
+	 *                Keys will be variable names and values with be their values.
701
+	 */
702
+	public function help_tabs_config()
703
+	{
704
+		return array();
705
+	}
706
+
707
+
708
+	/**
709
+	 * The system name for this PMT (eg AIM, Paypal_Pro, Invoice... what gets put into
710
+	 * the payment method's table's PMT_type column)
711
+	 *
712
+	 * @return string
713
+	 */
714
+	public function system_name()
715
+	{
716
+		$classname = get_class($this);
717
+		return str_replace("EE_PMT_", '', $classname);
718
+	}
719
+
720
+
721
+	/**
722
+	 * A pretty i18n version of the PMT name. Often the same as the "pretty_name", but you can change it by overriding
723
+	 * this method.
724
+	 * @return string
725
+	 */
726
+	public function defaultFrontendName()
727
+	{
728
+		return $this->pretty_name();
729
+	}
730
+
731
+
732
+	/**
733
+	 * A pretty i18n version of the PMT name
734
+	 *
735
+	 * @return string
736
+	 */
737
+	public function pretty_name()
738
+	{
739
+		return $this->_pretty_name;
740
+	}
741
+
742
+
743
+	/**
744
+	 * Gets the default absolute URL to the payment method type's button
745
+	 *
746
+	 * @return string
747
+	 */
748
+	public function default_button_url()
749
+	{
750
+		return $this->_default_button_url;
751
+	}
752
+
753
+
754
+	/**
755
+	 * Gets the gateway used by this payment method (if any)
756
+	 *
757
+	 * @return EE_Gateway
758
+	 */
759
+	public function get_gateway()
760
+	{
761
+		return $this->_gateway;
762
+	}
763
+
764
+
765
+	/**
766
+	 * @return string html for the link to a help tab
767
+	 */
768
+	public function get_help_tab_link()
769
+	{
770
+		return EEH_Template::get_help_tab_link(
771
+			$this->get_help_tab_name(),
772
+			'espresso_payment_settings',
773
+			'default'
774
+		);
775
+	}
776
+
777
+
778
+	/**
779
+	 * Returns the name of the help tab for this PMT
780
+	 *
781
+	 * @return string
782
+	 */
783
+	public function get_help_tab_name()
784
+	{
785
+		return 'ee_' . strtolower($this->system_name()) . '_help_tab';
786
+	}
787
+
788
+	/**
789
+	 * The name of the wp capability that should be associated with the usage of
790
+	 * this PMT by an admin
791
+	 *
792
+	 * @return string
793
+	 */
794
+	public function cap_name()
795
+	{
796
+		return 'ee_payment_method_' . strtolower($this->system_name());
797
+	}
798
+
799
+	/**
800
+	 * Called by client code to tell the gateway that if it wants to change
801
+	 * the transaction or line items or registrations related to teh payment it already
802
+	 * processed (we think, but possibly not) that now's the time to do it.
803
+	 * It is expected that gateways will store any info they need for this on the PAY_details,
804
+	 * or maybe an extra meta value
805
+	 *
806
+	 * @param EE_Payment $payment
807
+	 * @return void
808
+	 */
809
+	public function update_txn_based_on_payment($payment)
810
+	{
811
+		if ($this->_gateway instanceof EE_Gateway) {
812
+			$this->_gateway->update_txn_based_on_payment($payment);
813
+		}
814
+	}
815
+
816
+	/**
817
+	 * Returns a string of HTML describing this payment method type for an admin,
818
+	 * primarily intended for them to read before activating it.
819
+	 * The easiest way to set this is to create a folder 'templates' alongside
820
+	 * your EE_PMT_{System_Name} file, and in it create a file named "{system_name}_intro.template.php".
821
+	 * Eg, if your payment method file is named "EE_PMT_Foo_Bar.pm.php",
822
+	 * then you'd create a file named "templates" in the same folder as it, and name the file
823
+	 * "foo_bar_intro.template.php", and its content will be returned by this method
824
+	 *
825
+	 * @return string
826
+	 */
827
+	public function introductory_html()
828
+	{
829
+		return EEH_Template::locate_template(
830
+			$this->file_folder() . 'templates/' . strtolower($this->system_name()) . '_intro.template.php',
831
+			array('pmt_obj' => $this, 'pm_instance' => $this->_pm_instance)
832
+		);
833
+	}
834 834
 }
Please login to merge, or discard this patch.