@@ -99,7 +99,7 @@ discard block |
||
99 | 99 | } |
100 | 100 | // If not, then attempt to deal with any errors, |
101 | 101 | // otherwise, try to hobble along without the session |
102 | - if (! $this->handleSessionSaveHandlerErrors()) { |
|
102 | + if ( ! $this->handleSessionSaveHandlerErrors()) { |
|
103 | 103 | return; |
104 | 104 | } |
105 | 105 | // there is no record of a fatal error while trying to start the session |
@@ -249,7 +249,7 @@ discard block |
||
249 | 249 | ), |
250 | 250 | '<a href="https://wordpress.org/plugins/wp-native-php-sessions/">', |
251 | 251 | '</a>', |
252 | - '<a href="' . $retry_session_url . '">' |
|
252 | + '<a href="'.$retry_session_url.'">' |
|
253 | 253 | ), |
254 | 254 | __FILE__, |
255 | 255 | __FUNCTION__, |
@@ -27,237 +27,237 @@ |
||
27 | 27 | */ |
28 | 28 | class SessionStartHandler |
29 | 29 | { |
30 | - const OPTION_NAME_SESSION_SAVE_HANDLER_STATUS = 'ee_session_save_handler_status'; |
|
31 | - const REQUEST_PARAM_RETRY_SESSION = 'ee_retry_session'; |
|
32 | - const SESSION_SAVE_HANDLER_STATUS_FAILED = 'session_save_handler_failed'; |
|
33 | - const SESSION_SAVE_HANDLER_STATUS_SUCCESS = 'session_save_handler_success'; |
|
34 | - const SESSION_SAVE_HANDLER_STATUS_UNKNOWN = 'session_save_handler_untested'; |
|
30 | + const OPTION_NAME_SESSION_SAVE_HANDLER_STATUS = 'ee_session_save_handler_status'; |
|
31 | + const REQUEST_PARAM_RETRY_SESSION = 'ee_retry_session'; |
|
32 | + const SESSION_SAVE_HANDLER_STATUS_FAILED = 'session_save_handler_failed'; |
|
33 | + const SESSION_SAVE_HANDLER_STATUS_SUCCESS = 'session_save_handler_success'; |
|
34 | + const SESSION_SAVE_HANDLER_STATUS_UNKNOWN = 'session_save_handler_untested'; |
|
35 | 35 | |
36 | - /** |
|
37 | - * @var RequestInterface $request |
|
38 | - */ |
|
39 | - protected $request; |
|
36 | + /** |
|
37 | + * @var RequestInterface $request |
|
38 | + */ |
|
39 | + protected $request; |
|
40 | 40 | |
41 | - /** |
|
42 | - * StartSession constructor. |
|
43 | - * |
|
44 | - * @param RequestInterface $request |
|
45 | - */ |
|
46 | - public function __construct(RequestInterface $request) |
|
47 | - { |
|
48 | - $this->request = $request; |
|
49 | - } |
|
41 | + /** |
|
42 | + * StartSession constructor. |
|
43 | + * |
|
44 | + * @param RequestInterface $request |
|
45 | + */ |
|
46 | + public function __construct(RequestInterface $request) |
|
47 | + { |
|
48 | + $this->request = $request; |
|
49 | + } |
|
50 | 50 | |
51 | - /** |
|
52 | - * Check if a custom session save handler is in play |
|
53 | - * and attempt to start the PHP session |
|
54 | - * |
|
55 | - * @since 4.9.68.p |
|
56 | - */ |
|
57 | - public function startSession() |
|
58 | - { |
|
59 | - // check that session has started |
|
60 | - if (session_id() === '') { |
|
61 | - // starts a new session if one doesn't already exist, or re-initiates an existing one |
|
62 | - if ($this->hasKnownCustomSessionSaveHandler()) { |
|
63 | - $this->checkCustomSessionSaveHandler(); |
|
64 | - } else { |
|
65 | - session_start(); |
|
66 | - session_write_close(); |
|
67 | - } |
|
68 | - } |
|
69 | - } |
|
51 | + /** |
|
52 | + * Check if a custom session save handler is in play |
|
53 | + * and attempt to start the PHP session |
|
54 | + * |
|
55 | + * @since 4.9.68.p |
|
56 | + */ |
|
57 | + public function startSession() |
|
58 | + { |
|
59 | + // check that session has started |
|
60 | + if (session_id() === '') { |
|
61 | + // starts a new session if one doesn't already exist, or re-initiates an existing one |
|
62 | + if ($this->hasKnownCustomSessionSaveHandler()) { |
|
63 | + $this->checkCustomSessionSaveHandler(); |
|
64 | + } else { |
|
65 | + session_start(); |
|
66 | + session_write_close(); |
|
67 | + } |
|
68 | + } |
|
69 | + } |
|
70 | 70 | |
71 | - /** |
|
72 | - * Returns `true` if the 'session.save_handler' ini setting matches a known custom handler |
|
73 | - * |
|
74 | - * @since 4.9.68.p |
|
75 | - * @return bool |
|
76 | - */ |
|
77 | - private function hasKnownCustomSessionSaveHandler() |
|
78 | - { |
|
79 | - return in_array( |
|
80 | - ini_get('session.save_handler'), |
|
81 | - array( |
|
82 | - 'user', |
|
83 | - ), |
|
84 | - true |
|
85 | - ); |
|
86 | - } |
|
71 | + /** |
|
72 | + * Returns `true` if the 'session.save_handler' ini setting matches a known custom handler |
|
73 | + * |
|
74 | + * @since 4.9.68.p |
|
75 | + * @return bool |
|
76 | + */ |
|
77 | + private function hasKnownCustomSessionSaveHandler() |
|
78 | + { |
|
79 | + return in_array( |
|
80 | + ini_get('session.save_handler'), |
|
81 | + array( |
|
82 | + 'user', |
|
83 | + ), |
|
84 | + true |
|
85 | + ); |
|
86 | + } |
|
87 | 87 | |
88 | - /** |
|
89 | - * Attempt to start the PHP session when a custom Session Save Handler is known to be set. |
|
90 | - * |
|
91 | - * @since 4.9.68.p |
|
92 | - */ |
|
93 | - private function checkCustomSessionSaveHandler() |
|
94 | - { |
|
95 | - // If we've already successfully tested the session save handler |
|
96 | - // on a previous request then just start the session |
|
97 | - if ($this->sessionSaveHandlerIsValid()) { |
|
98 | - session_start(); |
|
99 | - session_write_close(); |
|
100 | - return; |
|
101 | - } |
|
102 | - // If not, then attempt to deal with any errors, |
|
103 | - // otherwise, try to hobble along without the session |
|
104 | - if (! $this->handleSessionSaveHandlerErrors()) { |
|
105 | - return; |
|
106 | - } |
|
107 | - // there is no record of a fatal error while trying to start the session |
|
108 | - // so let's see if there's a custom session save handler. Proceed with caution |
|
109 | - $this->initializeSessionSaveHandlerStatus(); |
|
110 | - // hold your breath, the custom session save handler might cause a fatal here... |
|
111 | - session_start(); |
|
112 | - session_write_close(); |
|
113 | - // phew! we made it! the custom session handler is a-ok |
|
114 | - $this->setSessionSaveHandlerStatusToValid(); |
|
115 | - } |
|
88 | + /** |
|
89 | + * Attempt to start the PHP session when a custom Session Save Handler is known to be set. |
|
90 | + * |
|
91 | + * @since 4.9.68.p |
|
92 | + */ |
|
93 | + private function checkCustomSessionSaveHandler() |
|
94 | + { |
|
95 | + // If we've already successfully tested the session save handler |
|
96 | + // on a previous request then just start the session |
|
97 | + if ($this->sessionSaveHandlerIsValid()) { |
|
98 | + session_start(); |
|
99 | + session_write_close(); |
|
100 | + return; |
|
101 | + } |
|
102 | + // If not, then attempt to deal with any errors, |
|
103 | + // otherwise, try to hobble along without the session |
|
104 | + if (! $this->handleSessionSaveHandlerErrors()) { |
|
105 | + return; |
|
106 | + } |
|
107 | + // there is no record of a fatal error while trying to start the session |
|
108 | + // so let's see if there's a custom session save handler. Proceed with caution |
|
109 | + $this->initializeSessionSaveHandlerStatus(); |
|
110 | + // hold your breath, the custom session save handler might cause a fatal here... |
|
111 | + session_start(); |
|
112 | + session_write_close(); |
|
113 | + // phew! we made it! the custom session handler is a-ok |
|
114 | + $this->setSessionSaveHandlerStatusToValid(); |
|
115 | + } |
|
116 | 116 | |
117 | 117 | |
118 | - /** |
|
119 | - * retrieves the value for the 'ee_session_save_handler_status' WP option. |
|
120 | - * default value = 'session_save_handler_untested' |
|
121 | - * |
|
122 | - * @since 4.9.68.p |
|
123 | - * @return string |
|
124 | - */ |
|
125 | - private function getSessionSaveHandlerStatus() |
|
126 | - { |
|
127 | - return get_option( |
|
128 | - SessionStartHandler::OPTION_NAME_SESSION_SAVE_HANDLER_STATUS, |
|
129 | - SessionStartHandler::SESSION_SAVE_HANDLER_STATUS_UNKNOWN |
|
130 | - ); |
|
131 | - } |
|
118 | + /** |
|
119 | + * retrieves the value for the 'ee_session_save_handler_status' WP option. |
|
120 | + * default value = 'session_save_handler_untested' |
|
121 | + * |
|
122 | + * @since 4.9.68.p |
|
123 | + * @return string |
|
124 | + */ |
|
125 | + private function getSessionSaveHandlerStatus() |
|
126 | + { |
|
127 | + return get_option( |
|
128 | + SessionStartHandler::OPTION_NAME_SESSION_SAVE_HANDLER_STATUS, |
|
129 | + SessionStartHandler::SESSION_SAVE_HANDLER_STATUS_UNKNOWN |
|
130 | + ); |
|
131 | + } |
|
132 | 132 | |
133 | - /** |
|
134 | - * Sets the 'ee_session_save_handler_status' WP option value to 'session_save_handler_failed' |
|
135 | - * which can then be upgraded is everything works correctly |
|
136 | - * |
|
137 | - * @since 4.9.68.p |
|
138 | - * @return bool |
|
139 | - */ |
|
140 | - private function initializeSessionSaveHandlerStatus() |
|
141 | - { |
|
142 | - return update_option( |
|
143 | - SessionStartHandler::OPTION_NAME_SESSION_SAVE_HANDLER_STATUS, |
|
144 | - SessionStartHandler::SESSION_SAVE_HANDLER_STATUS_FAILED |
|
145 | - ); |
|
146 | - } |
|
133 | + /** |
|
134 | + * Sets the 'ee_session_save_handler_status' WP option value to 'session_save_handler_failed' |
|
135 | + * which can then be upgraded is everything works correctly |
|
136 | + * |
|
137 | + * @since 4.9.68.p |
|
138 | + * @return bool |
|
139 | + */ |
|
140 | + private function initializeSessionSaveHandlerStatus() |
|
141 | + { |
|
142 | + return update_option( |
|
143 | + SessionStartHandler::OPTION_NAME_SESSION_SAVE_HANDLER_STATUS, |
|
144 | + SessionStartHandler::SESSION_SAVE_HANDLER_STATUS_FAILED |
|
145 | + ); |
|
146 | + } |
|
147 | 147 | |
148 | - /** |
|
149 | - * Sets the 'ee_session_save_handler_status' WP option value to 'session_save_handler_success' |
|
150 | - * |
|
151 | - * @since 4.9.68.p |
|
152 | - * @return bool |
|
153 | - */ |
|
154 | - private function setSessionSaveHandlerStatusToValid() |
|
155 | - { |
|
156 | - return update_option( |
|
157 | - SessionStartHandler::OPTION_NAME_SESSION_SAVE_HANDLER_STATUS, |
|
158 | - SessionStartHandler::SESSION_SAVE_HANDLER_STATUS_SUCCESS |
|
159 | - ); |
|
160 | - } |
|
148 | + /** |
|
149 | + * Sets the 'ee_session_save_handler_status' WP option value to 'session_save_handler_success' |
|
150 | + * |
|
151 | + * @since 4.9.68.p |
|
152 | + * @return bool |
|
153 | + */ |
|
154 | + private function setSessionSaveHandlerStatusToValid() |
|
155 | + { |
|
156 | + return update_option( |
|
157 | + SessionStartHandler::OPTION_NAME_SESSION_SAVE_HANDLER_STATUS, |
|
158 | + SessionStartHandler::SESSION_SAVE_HANDLER_STATUS_SUCCESS |
|
159 | + ); |
|
160 | + } |
|
161 | 161 | |
162 | - /** |
|
163 | - * Sets the 'ee_session_save_handler_status' WP option value to 'session_save_handler_untested' |
|
164 | - * |
|
165 | - * @since 4.9.68.p |
|
166 | - * @return bool |
|
167 | - */ |
|
168 | - private function resetSessionSaveHandlerStatus() |
|
169 | - { |
|
170 | - return update_option( |
|
171 | - SessionStartHandler::OPTION_NAME_SESSION_SAVE_HANDLER_STATUS, |
|
172 | - SessionStartHandler::SESSION_SAVE_HANDLER_STATUS_UNKNOWN |
|
173 | - ); |
|
174 | - } |
|
162 | + /** |
|
163 | + * Sets the 'ee_session_save_handler_status' WP option value to 'session_save_handler_untested' |
|
164 | + * |
|
165 | + * @since 4.9.68.p |
|
166 | + * @return bool |
|
167 | + */ |
|
168 | + private function resetSessionSaveHandlerStatus() |
|
169 | + { |
|
170 | + return update_option( |
|
171 | + SessionStartHandler::OPTION_NAME_SESSION_SAVE_HANDLER_STATUS, |
|
172 | + SessionStartHandler::SESSION_SAVE_HANDLER_STATUS_UNKNOWN |
|
173 | + ); |
|
174 | + } |
|
175 | 175 | |
176 | - /** |
|
177 | - * Returns `true` if the 'ee_session_save_handler_status' WP option value |
|
178 | - * is equal to 'session_save_handler_success' |
|
179 | - * |
|
180 | - * @since 4.9.68.p |
|
181 | - * @return bool |
|
182 | - */ |
|
183 | - private function sessionSaveHandlerIsValid() |
|
184 | - { |
|
185 | - return $this->getSessionSaveHandlerStatus() === SessionStartHandler::SESSION_SAVE_HANDLER_STATUS_SUCCESS; |
|
186 | - } |
|
176 | + /** |
|
177 | + * Returns `true` if the 'ee_session_save_handler_status' WP option value |
|
178 | + * is equal to 'session_save_handler_success' |
|
179 | + * |
|
180 | + * @since 4.9.68.p |
|
181 | + * @return bool |
|
182 | + */ |
|
183 | + private function sessionSaveHandlerIsValid() |
|
184 | + { |
|
185 | + return $this->getSessionSaveHandlerStatus() === SessionStartHandler::SESSION_SAVE_HANDLER_STATUS_SUCCESS; |
|
186 | + } |
|
187 | 187 | |
188 | - /** |
|
189 | - * Returns `true` if the 'ee_session_save_handler_status' WP option value |
|
190 | - * is equal to 'session_save_handler_failed' |
|
191 | - * |
|
192 | - * @since 4.9.68.p |
|
193 | - * @return bool |
|
194 | - */ |
|
195 | - private function sessionSaveHandlerFailed() |
|
196 | - { |
|
197 | - return $this->getSessionSaveHandlerStatus() === SessionStartHandler::SESSION_SAVE_HANDLER_STATUS_FAILED; |
|
198 | - } |
|
188 | + /** |
|
189 | + * Returns `true` if the 'ee_session_save_handler_status' WP option value |
|
190 | + * is equal to 'session_save_handler_failed' |
|
191 | + * |
|
192 | + * @since 4.9.68.p |
|
193 | + * @return bool |
|
194 | + */ |
|
195 | + private function sessionSaveHandlerFailed() |
|
196 | + { |
|
197 | + return $this->getSessionSaveHandlerStatus() === SessionStartHandler::SESSION_SAVE_HANDLER_STATUS_FAILED; |
|
198 | + } |
|
199 | 199 | |
200 | - /** |
|
201 | - * Returns `true` if no errors were detected with the session save handler, |
|
202 | - * otherwise attempts to work notify the appropriate authorities |
|
203 | - * with a suggestion for how to fix the issue, and returns `false`. |
|
204 | - * |
|
205 | - * |
|
206 | - * @since 4.9.68.p |
|
207 | - * @return bool |
|
208 | - */ |
|
209 | - private function handleSessionSaveHandlerErrors() |
|
210 | - { |
|
211 | - // Check if we had a fatal error last time while trying to start the session |
|
212 | - if ($this->sessionSaveHandlerFailed()) { |
|
213 | - // apparently, last time we tried using the custom session save handler there was a fatal |
|
214 | - if ($this->request->requestParamIsSet(SessionStartHandler::REQUEST_PARAM_RETRY_SESSION)) { |
|
215 | - $this->resetSessionSaveHandlerStatus(); |
|
216 | - // remove "ee_retry_session", otherwise if the problem still isn't fixed, |
|
217 | - // we'll just keep getting the fatal error over and over. |
|
218 | - // Better to remove it and redirect, and try on the next request |
|
219 | - EEH_URL::safeRedirectAndExit( |
|
220 | - remove_query_arg( |
|
221 | - array(SessionStartHandler::REQUEST_PARAM_RETRY_SESSION), |
|
222 | - EEH_URL::current_url() |
|
223 | - ) |
|
224 | - ); |
|
225 | - } |
|
226 | - // so the session is broken, don't try it again, |
|
227 | - // just show a message to users that can fix it |
|
228 | - $this->displaySessionSaveHandlerErrorNotice(); |
|
229 | - return false; |
|
230 | - } |
|
231 | - return true; |
|
232 | - } |
|
200 | + /** |
|
201 | + * Returns `true` if no errors were detected with the session save handler, |
|
202 | + * otherwise attempts to work notify the appropriate authorities |
|
203 | + * with a suggestion for how to fix the issue, and returns `false`. |
|
204 | + * |
|
205 | + * |
|
206 | + * @since 4.9.68.p |
|
207 | + * @return bool |
|
208 | + */ |
|
209 | + private function handleSessionSaveHandlerErrors() |
|
210 | + { |
|
211 | + // Check if we had a fatal error last time while trying to start the session |
|
212 | + if ($this->sessionSaveHandlerFailed()) { |
|
213 | + // apparently, last time we tried using the custom session save handler there was a fatal |
|
214 | + if ($this->request->requestParamIsSet(SessionStartHandler::REQUEST_PARAM_RETRY_SESSION)) { |
|
215 | + $this->resetSessionSaveHandlerStatus(); |
|
216 | + // remove "ee_retry_session", otherwise if the problem still isn't fixed, |
|
217 | + // we'll just keep getting the fatal error over and over. |
|
218 | + // Better to remove it and redirect, and try on the next request |
|
219 | + EEH_URL::safeRedirectAndExit( |
|
220 | + remove_query_arg( |
|
221 | + array(SessionStartHandler::REQUEST_PARAM_RETRY_SESSION), |
|
222 | + EEH_URL::current_url() |
|
223 | + ) |
|
224 | + ); |
|
225 | + } |
|
226 | + // so the session is broken, don't try it again, |
|
227 | + // just show a message to users that can fix it |
|
228 | + $this->displaySessionSaveHandlerErrorNotice(); |
|
229 | + return false; |
|
230 | + } |
|
231 | + return true; |
|
232 | + } |
|
233 | 233 | |
234 | - /** |
|
235 | - * Generates an EE_Error notice regarding the current session woes |
|
236 | - * but only if the current user is an admin with permission to 'install_plugins'. |
|
237 | - * |
|
238 | - * @since 4.9.68.p |
|
239 | - */ |
|
240 | - private function displaySessionSaveHandlerErrorNotice() |
|
241 | - { |
|
242 | - if (current_user_can('install_plugins')) { |
|
243 | - $retry_session_url = add_query_arg( |
|
244 | - array(SessionStartHandler::REQUEST_PARAM_RETRY_SESSION => true), |
|
245 | - EEH_URL::current_url() |
|
246 | - ); |
|
247 | - EE_Error::add_error( |
|
248 | - sprintf( |
|
249 | - esc_html__( |
|
250 | - 'It appears there was a fatal error while starting the session, so Event Espresso is not able to process registrations normally. Some hosting companies, like Pantheon, require an extra plugin for Event Espresso to work. Please install the %1$sWordPress Native PHP Sessions plugin%2$s, then %3$sclick here to check if the problem is resolved.%2$s', |
|
251 | - 'event_espresso' |
|
252 | - ), |
|
253 | - '<a href="https://wordpress.org/plugins/wp-native-php-sessions/">', |
|
254 | - '</a>', |
|
255 | - '<a href="' . $retry_session_url . '">' |
|
256 | - ), |
|
257 | - __FILE__, |
|
258 | - __FUNCTION__, |
|
259 | - __LINE__ |
|
260 | - ); |
|
261 | - } |
|
262 | - } |
|
234 | + /** |
|
235 | + * Generates an EE_Error notice regarding the current session woes |
|
236 | + * but only if the current user is an admin with permission to 'install_plugins'. |
|
237 | + * |
|
238 | + * @since 4.9.68.p |
|
239 | + */ |
|
240 | + private function displaySessionSaveHandlerErrorNotice() |
|
241 | + { |
|
242 | + if (current_user_can('install_plugins')) { |
|
243 | + $retry_session_url = add_query_arg( |
|
244 | + array(SessionStartHandler::REQUEST_PARAM_RETRY_SESSION => true), |
|
245 | + EEH_URL::current_url() |
|
246 | + ); |
|
247 | + EE_Error::add_error( |
|
248 | + sprintf( |
|
249 | + esc_html__( |
|
250 | + 'It appears there was a fatal error while starting the session, so Event Espresso is not able to process registrations normally. Some hosting companies, like Pantheon, require an extra plugin for Event Espresso to work. Please install the %1$sWordPress Native PHP Sessions plugin%2$s, then %3$sclick here to check if the problem is resolved.%2$s', |
|
251 | + 'event_espresso' |
|
252 | + ), |
|
253 | + '<a href="https://wordpress.org/plugins/wp-native-php-sessions/">', |
|
254 | + '</a>', |
|
255 | + '<a href="' . $retry_session_url . '">' |
|
256 | + ), |
|
257 | + __FILE__, |
|
258 | + __FUNCTION__, |
|
259 | + __LINE__ |
|
260 | + ); |
|
261 | + } |
|
262 | + } |
|
263 | 263 | } |
@@ -34,7 +34,7 @@ |
||
34 | 34 | */ |
35 | 35 | public function __construct($alias, $fqcn) |
36 | 36 | { |
37 | - if (! is_subclass_of($fqcn, $alias)) { |
|
37 | + if ( ! is_subclass_of($fqcn, $alias)) { |
|
38 | 38 | throw new InvalidAliasException($fqcn, $alias); |
39 | 39 | } |
40 | 40 | $this->alias = $alias; |
@@ -16,46 +16,46 @@ |
||
16 | 16 | */ |
17 | 17 | class ClassAlias |
18 | 18 | { |
19 | - /** |
|
20 | - * @var string $alias an interface or base class representing what object |
|
21 | - * can be utilized by another object and/or function |
|
22 | - */ |
|
23 | - private $alias; |
|
19 | + /** |
|
20 | + * @var string $alias an interface or base class representing what object |
|
21 | + * can be utilized by another object and/or function |
|
22 | + */ |
|
23 | + private $alias; |
|
24 | 24 | |
25 | - /** |
|
26 | - * @var string $fqcn the actual class that should be substituted for the alias above |
|
27 | - */ |
|
28 | - private $fqcn; |
|
25 | + /** |
|
26 | + * @var string $fqcn the actual class that should be substituted for the alias above |
|
27 | + */ |
|
28 | + private $fqcn; |
|
29 | 29 | |
30 | - /** |
|
31 | - * ClassAlias constructor. |
|
32 | - * |
|
33 | - * @param string $alias Interface specified by implementing class |
|
34 | - * @param string $fqcn Concrete class that satisfies interface |
|
35 | - * @throws InvalidAliasException |
|
36 | - */ |
|
37 | - public function __construct($alias, $fqcn) |
|
38 | - { |
|
39 | - if (! is_subclass_of($fqcn, $alias)) { |
|
40 | - throw new InvalidAliasException($fqcn, $alias); |
|
41 | - } |
|
42 | - $this->alias = $alias; |
|
43 | - $this->fqcn = $fqcn; |
|
44 | - } |
|
30 | + /** |
|
31 | + * ClassAlias constructor. |
|
32 | + * |
|
33 | + * @param string $alias Interface specified by implementing class |
|
34 | + * @param string $fqcn Concrete class that satisfies interface |
|
35 | + * @throws InvalidAliasException |
|
36 | + */ |
|
37 | + public function __construct($alias, $fqcn) |
|
38 | + { |
|
39 | + if (! is_subclass_of($fqcn, $alias)) { |
|
40 | + throw new InvalidAliasException($fqcn, $alias); |
|
41 | + } |
|
42 | + $this->alias = $alias; |
|
43 | + $this->fqcn = $fqcn; |
|
44 | + } |
|
45 | 45 | |
46 | - /** |
|
47 | - * @return string |
|
48 | - */ |
|
49 | - public function alias() |
|
50 | - { |
|
51 | - return $this->alias; |
|
52 | - } |
|
46 | + /** |
|
47 | + * @return string |
|
48 | + */ |
|
49 | + public function alias() |
|
50 | + { |
|
51 | + return $this->alias; |
|
52 | + } |
|
53 | 53 | |
54 | - /** |
|
55 | - * @return string |
|
56 | - */ |
|
57 | - public function fqcn() |
|
58 | - { |
|
59 | - return $this->fqcn; |
|
60 | - } |
|
54 | + /** |
|
55 | + * @return string |
|
56 | + */ |
|
57 | + public function fqcn() |
|
58 | + { |
|
59 | + return $this->fqcn; |
|
60 | + } |
|
61 | 61 | } |
@@ -18,41 +18,41 @@ |
||
18 | 18 | */ |
19 | 19 | abstract class FactoryWithDependencyResolver implements FactoryInterface |
20 | 20 | { |
21 | - /** |
|
22 | - * @var DependencyResolverInterface $dependency_resolver |
|
23 | - */ |
|
24 | - private $dependency_resolver; |
|
21 | + /** |
|
22 | + * @var DependencyResolverInterface $dependency_resolver |
|
23 | + */ |
|
24 | + private $dependency_resolver; |
|
25 | 25 | |
26 | - /** |
|
27 | - * @var LoaderInterface $loader |
|
28 | - */ |
|
29 | - private $loader; |
|
26 | + /** |
|
27 | + * @var LoaderInterface $loader |
|
28 | + */ |
|
29 | + private $loader; |
|
30 | 30 | |
31 | - /** |
|
32 | - * FactoryWithDependencyResolver constructor. |
|
33 | - * |
|
34 | - * @param DependencyResolverInterface $dependency_resolver |
|
35 | - * @param LoaderInterface $loader |
|
36 | - */ |
|
37 | - public function __construct(DependencyResolverInterface $dependency_resolver, LoaderInterface $loader) |
|
38 | - { |
|
39 | - $this->dependency_resolver = $dependency_resolver; |
|
40 | - $this->loader = $loader; |
|
41 | - } |
|
31 | + /** |
|
32 | + * FactoryWithDependencyResolver constructor. |
|
33 | + * |
|
34 | + * @param DependencyResolverInterface $dependency_resolver |
|
35 | + * @param LoaderInterface $loader |
|
36 | + */ |
|
37 | + public function __construct(DependencyResolverInterface $dependency_resolver, LoaderInterface $loader) |
|
38 | + { |
|
39 | + $this->dependency_resolver = $dependency_resolver; |
|
40 | + $this->loader = $loader; |
|
41 | + } |
|
42 | 42 | |
43 | - /** |
|
44 | - * @return DependencyResolverInterface |
|
45 | - */ |
|
46 | - public function dependencyResolver() |
|
47 | - { |
|
48 | - return $this->dependency_resolver; |
|
49 | - } |
|
43 | + /** |
|
44 | + * @return DependencyResolverInterface |
|
45 | + */ |
|
46 | + public function dependencyResolver() |
|
47 | + { |
|
48 | + return $this->dependency_resolver; |
|
49 | + } |
|
50 | 50 | |
51 | - /** |
|
52 | - * @return LoaderInterface |
|
53 | - */ |
|
54 | - public function loader() |
|
55 | - { |
|
56 | - return $this->loader; |
|
57 | - } |
|
51 | + /** |
|
52 | + * @return LoaderInterface |
|
53 | + */ |
|
54 | + public function loader() |
|
55 | + { |
|
56 | + return $this->loader; |
|
57 | + } |
|
58 | 58 | } |
@@ -23,7 +23,7 @@ |
||
23 | 23 | public function isMatchingRoute() |
24 | 24 | { |
25 | 25 | foreach ($this->specifications as $specification) { |
26 | - if (! $specification->isMatchingRoute()) { |
|
26 | + if ( ! $specification->isMatchingRoute()) { |
|
27 | 27 | return false; |
28 | 28 | } |
29 | 29 | } |
@@ -13,19 +13,19 @@ |
||
13 | 13 | */ |
14 | 14 | class MatchAllRouteSpecifications extends MultiRouteSpecification |
15 | 15 | { |
16 | - /** |
|
17 | - * returns true if current request matches specification |
|
18 | - * |
|
19 | - * @since 4.9.71.p |
|
20 | - * @return boolean |
|
21 | - */ |
|
22 | - public function isMatchingRoute() |
|
23 | - { |
|
24 | - foreach ($this->specifications as $specification) { |
|
25 | - if (! $specification->isMatchingRoute()) { |
|
26 | - return false; |
|
27 | - } |
|
28 | - } |
|
29 | - return true; |
|
30 | - } |
|
16 | + /** |
|
17 | + * returns true if current request matches specification |
|
18 | + * |
|
19 | + * @since 4.9.71.p |
|
20 | + * @return boolean |
|
21 | + */ |
|
22 | + public function isMatchingRoute() |
|
23 | + { |
|
24 | + foreach ($this->specifications as $specification) { |
|
25 | + if (! $specification->isMatchingRoute()) { |
|
26 | + return false; |
|
27 | + } |
|
28 | + } |
|
29 | + return true; |
|
30 | + } |
|
31 | 31 | } |
@@ -115,7 +115,7 @@ |
||
115 | 115 | { |
116 | 116 | /** @var RouteMatchSpecificationInterface $specification */ |
117 | 117 | $specification = $this->specifications->get($routeMatchSpecificationFqcn); |
118 | - if (! $specification instanceof $routeMatchSpecificationFqcn) { |
|
118 | + if ( ! $specification instanceof $routeMatchSpecificationFqcn) { |
|
119 | 119 | throw new InvalidClassException($routeMatchSpecificationFqcn); |
120 | 120 | } |
121 | 121 | return $specification->isMatchingRoute(); |
@@ -25,122 +25,122 @@ |
||
25 | 25 | */ |
26 | 26 | class RouteMatchSpecificationManager |
27 | 27 | { |
28 | - /** |
|
29 | - * @var CollectionInterface[]|RouteMatchSpecificationInterface[] $specifications |
|
30 | - */ |
|
31 | - private $specifications; |
|
28 | + /** |
|
29 | + * @var CollectionInterface[]|RouteMatchSpecificationInterface[] $specifications |
|
30 | + */ |
|
31 | + private $specifications; |
|
32 | 32 | |
33 | - /** |
|
34 | - * @var RouteMatchSpecificationFactory $specifications_factory |
|
35 | - */ |
|
36 | - private $specifications_factory; |
|
33 | + /** |
|
34 | + * @var RouteMatchSpecificationFactory $specifications_factory |
|
35 | + */ |
|
36 | + private $specifications_factory; |
|
37 | 37 | |
38 | 38 | |
39 | - /** |
|
40 | - * RouteMatchSpecificationManager constructor. |
|
41 | - * |
|
42 | - * @param RouteMatchSpecificationCollection $specifications |
|
43 | - * @param RouteMatchSpecificationFactory $specifications_factory |
|
44 | - */ |
|
45 | - public function __construct( |
|
46 | - RouteMatchSpecificationCollection $specifications, |
|
47 | - RouteMatchSpecificationFactory $specifications_factory |
|
48 | - ) { |
|
49 | - $this->specifications = $specifications; |
|
50 | - $this->specifications_factory = $specifications_factory; |
|
51 | - add_action('AHEE__EE_System__loadRouteMatchSpecifications', array($this, 'initialize')); |
|
52 | - } |
|
39 | + /** |
|
40 | + * RouteMatchSpecificationManager constructor. |
|
41 | + * |
|
42 | + * @param RouteMatchSpecificationCollection $specifications |
|
43 | + * @param RouteMatchSpecificationFactory $specifications_factory |
|
44 | + */ |
|
45 | + public function __construct( |
|
46 | + RouteMatchSpecificationCollection $specifications, |
|
47 | + RouteMatchSpecificationFactory $specifications_factory |
|
48 | + ) { |
|
49 | + $this->specifications = $specifications; |
|
50 | + $this->specifications_factory = $specifications_factory; |
|
51 | + add_action('AHEE__EE_System__loadRouteMatchSpecifications', array($this, 'initialize')); |
|
52 | + } |
|
53 | 53 | |
54 | 54 | |
55 | - /** |
|
56 | - * Perform any early setup required for block editors to functions |
|
57 | - * |
|
58 | - * @return void |
|
59 | - * @throws CollectionLoaderException |
|
60 | - * @throws CollectionDetailsException |
|
61 | - */ |
|
62 | - public function initialize() |
|
63 | - { |
|
64 | - $this->populateSpecificationCollection(); |
|
65 | - } |
|
55 | + /** |
|
56 | + * Perform any early setup required for block editors to functions |
|
57 | + * |
|
58 | + * @return void |
|
59 | + * @throws CollectionLoaderException |
|
60 | + * @throws CollectionDetailsException |
|
61 | + */ |
|
62 | + public function initialize() |
|
63 | + { |
|
64 | + $this->populateSpecificationCollection(); |
|
65 | + } |
|
66 | 66 | |
67 | 67 | |
68 | - /** |
|
69 | - * @return CollectionInterface|RouteMatchSpecificationInterface[] |
|
70 | - * @throws CollectionLoaderException |
|
71 | - * @throws CollectionDetailsException |
|
72 | - * @since 4.9.71.p |
|
73 | - */ |
|
74 | - private function populateSpecificationCollection() |
|
75 | - { |
|
76 | - $loader = new CollectionLoader( |
|
77 | - new CollectionDetails( |
|
78 | - // collection name |
|
79 | - RouteMatchSpecificationCollection::COLLECTION_NAME, |
|
80 | - // collection interface |
|
81 | - 'EventEspresso\core\domain\entities\route_match\RouteMatchSpecificationInterface', |
|
82 | - // FQCNs for classes to add (all classes within each namespace will be loaded) |
|
83 | - apply_filters( |
|
84 | - 'FHEE__EventEspresso_core_services_route_match_RouteMatchSpecificationManager__populateSpecificationCollection__collection_FQCNs', |
|
85 | - array( |
|
86 | - 'EventEspresso\core\domain\entities\route_match\specifications\admin', |
|
87 | - 'EventEspresso\core\domain\entities\route_match\specifications\frontend', |
|
88 | - ) |
|
89 | - ), |
|
90 | - // filepaths to classes to add |
|
91 | - array(), |
|
92 | - // file mask to use if parsing folder for files to add |
|
93 | - '', |
|
94 | - // what to use as identifier for collection entities |
|
95 | - // using CLASS NAME prevents duplicates (works like a singleton) |
|
96 | - CollectionDetails::ID_CLASS_NAME |
|
97 | - ), |
|
98 | - $this->specifications, |
|
99 | - null, |
|
100 | - $this->specifications_factory |
|
101 | - ); |
|
102 | - return $loader->getCollection(); |
|
103 | - } |
|
68 | + /** |
|
69 | + * @return CollectionInterface|RouteMatchSpecificationInterface[] |
|
70 | + * @throws CollectionLoaderException |
|
71 | + * @throws CollectionDetailsException |
|
72 | + * @since 4.9.71.p |
|
73 | + */ |
|
74 | + private function populateSpecificationCollection() |
|
75 | + { |
|
76 | + $loader = new CollectionLoader( |
|
77 | + new CollectionDetails( |
|
78 | + // collection name |
|
79 | + RouteMatchSpecificationCollection::COLLECTION_NAME, |
|
80 | + // collection interface |
|
81 | + 'EventEspresso\core\domain\entities\route_match\RouteMatchSpecificationInterface', |
|
82 | + // FQCNs for classes to add (all classes within each namespace will be loaded) |
|
83 | + apply_filters( |
|
84 | + 'FHEE__EventEspresso_core_services_route_match_RouteMatchSpecificationManager__populateSpecificationCollection__collection_FQCNs', |
|
85 | + array( |
|
86 | + 'EventEspresso\core\domain\entities\route_match\specifications\admin', |
|
87 | + 'EventEspresso\core\domain\entities\route_match\specifications\frontend', |
|
88 | + ) |
|
89 | + ), |
|
90 | + // filepaths to classes to add |
|
91 | + array(), |
|
92 | + // file mask to use if parsing folder for files to add |
|
93 | + '', |
|
94 | + // what to use as identifier for collection entities |
|
95 | + // using CLASS NAME prevents duplicates (works like a singleton) |
|
96 | + CollectionDetails::ID_CLASS_NAME |
|
97 | + ), |
|
98 | + $this->specifications, |
|
99 | + null, |
|
100 | + $this->specifications_factory |
|
101 | + ); |
|
102 | + return $loader->getCollection(); |
|
103 | + } |
|
104 | 104 | |
105 | 105 | |
106 | - /** |
|
107 | - * Given the FQCN for a RouteMatchSpecification, will return true if the current request matches |
|
108 | - * |
|
109 | - * @param string $routeMatchSpecificationFqcn fully qualified class name |
|
110 | - * @return bool |
|
111 | - * @throws InvalidClassException |
|
112 | - * @since 4.9.71.p |
|
113 | - */ |
|
114 | - public function routeMatchesCurrentRequest($routeMatchSpecificationFqcn) |
|
115 | - { |
|
116 | - /** @var RouteMatchSpecificationInterface $specification */ |
|
117 | - $specification = $this->specifications->get($routeMatchSpecificationFqcn); |
|
118 | - if (! $specification instanceof $routeMatchSpecificationFqcn) { |
|
119 | - throw new InvalidClassException($routeMatchSpecificationFqcn); |
|
120 | - } |
|
121 | - return $specification->isMatchingRoute(); |
|
122 | - } |
|
106 | + /** |
|
107 | + * Given the FQCN for a RouteMatchSpecification, will return true if the current request matches |
|
108 | + * |
|
109 | + * @param string $routeMatchSpecificationFqcn fully qualified class name |
|
110 | + * @return bool |
|
111 | + * @throws InvalidClassException |
|
112 | + * @since 4.9.71.p |
|
113 | + */ |
|
114 | + public function routeMatchesCurrentRequest($routeMatchSpecificationFqcn) |
|
115 | + { |
|
116 | + /** @var RouteMatchSpecificationInterface $specification */ |
|
117 | + $specification = $this->specifications->get($routeMatchSpecificationFqcn); |
|
118 | + if (! $specification instanceof $routeMatchSpecificationFqcn) { |
|
119 | + throw new InvalidClassException($routeMatchSpecificationFqcn); |
|
120 | + } |
|
121 | + return $specification->isMatchingRoute(); |
|
122 | + } |
|
123 | 123 | |
124 | 124 | |
125 | - /** |
|
126 | - * Handy method for development that returns |
|
127 | - * a list of existing RouteMatchSpecification classes |
|
128 | - * matching the current request that can be used to identify it. |
|
129 | - * If no matches are returned (or nothing acceptable) |
|
130 | - * then create a new one that better matches your requirements. |
|
131 | - * |
|
132 | - * @return array |
|
133 | - * @since 4.9.71.p |
|
134 | - */ |
|
135 | - public function findRouteMatchSpecificationsMatchingCurrentRequest() |
|
136 | - { |
|
137 | - $matches = array(); |
|
138 | - foreach ($this->specifications as $specification) { |
|
139 | - /** @var RouteMatchSpecificationInterface $specification */ |
|
140 | - if ($specification->isMatchingRoute()) { |
|
141 | - $matches[] = get_class($specification); |
|
142 | - } |
|
143 | - } |
|
144 | - return $matches; |
|
145 | - } |
|
125 | + /** |
|
126 | + * Handy method for development that returns |
|
127 | + * a list of existing RouteMatchSpecification classes |
|
128 | + * matching the current request that can be used to identify it. |
|
129 | + * If no matches are returned (or nothing acceptable) |
|
130 | + * then create a new one that better matches your requirements. |
|
131 | + * |
|
132 | + * @return array |
|
133 | + * @since 4.9.71.p |
|
134 | + */ |
|
135 | + public function findRouteMatchSpecificationsMatchingCurrentRequest() |
|
136 | + { |
|
137 | + $matches = array(); |
|
138 | + foreach ($this->specifications as $specification) { |
|
139 | + /** @var RouteMatchSpecificationInterface $specification */ |
|
140 | + if ($specification->isMatchingRoute()) { |
|
141 | + $matches[] = get_class($specification); |
|
142 | + } |
|
143 | + } |
|
144 | + return $matches; |
|
145 | + } |
|
146 | 146 | } |
@@ -31,7 +31,7 @@ |
||
31 | 31 | public function __construct(array $specifications, RequestInterface $request) |
32 | 32 | { |
33 | 33 | foreach ($specifications as $specification) { |
34 | - if (! $specification instanceof RouteMatchSpecificationInterface) { |
|
34 | + if ( ! $specification instanceof RouteMatchSpecificationInterface) { |
|
35 | 35 | throw new InvalidEntityException( |
36 | 36 | $specification, |
37 | 37 | 'EventEspresso\core\domain\entities\route_match\RouteMatchSpecificationInterface' |
@@ -15,29 +15,29 @@ |
||
15 | 15 | */ |
16 | 16 | abstract class MultiRouteSpecification extends RouteMatchSpecification |
17 | 17 | { |
18 | - /** |
|
19 | - * @var RouteMatchSpecificationInterface[] $specifications |
|
20 | - */ |
|
21 | - protected $specifications; |
|
18 | + /** |
|
19 | + * @var RouteMatchSpecificationInterface[] $specifications |
|
20 | + */ |
|
21 | + protected $specifications; |
|
22 | 22 | |
23 | - /** |
|
24 | - * MultiRouteSpecification constructor. |
|
25 | - * |
|
26 | - * @param RouteMatchSpecificationInterface[] $specifications |
|
27 | - * @param RequestInterface $request |
|
28 | - * @throws InvalidEntityException |
|
29 | - */ |
|
30 | - public function __construct(array $specifications, RequestInterface $request) |
|
31 | - { |
|
32 | - foreach ($specifications as $specification) { |
|
33 | - if (! $specification instanceof RouteMatchSpecificationInterface) { |
|
34 | - throw new InvalidEntityException( |
|
35 | - $specification, |
|
36 | - 'EventEspresso\core\domain\entities\route_match\RouteMatchSpecificationInterface' |
|
37 | - ); |
|
38 | - } |
|
39 | - } |
|
40 | - $this->specifications = $specifications; |
|
41 | - parent::__construct($request); |
|
42 | - } |
|
23 | + /** |
|
24 | + * MultiRouteSpecification constructor. |
|
25 | + * |
|
26 | + * @param RouteMatchSpecificationInterface[] $specifications |
|
27 | + * @param RequestInterface $request |
|
28 | + * @throws InvalidEntityException |
|
29 | + */ |
|
30 | + public function __construct(array $specifications, RequestInterface $request) |
|
31 | + { |
|
32 | + foreach ($specifications as $specification) { |
|
33 | + if (! $specification instanceof RouteMatchSpecificationInterface) { |
|
34 | + throw new InvalidEntityException( |
|
35 | + $specification, |
|
36 | + 'EventEspresso\core\domain\entities\route_match\RouteMatchSpecificationInterface' |
|
37 | + ); |
|
38 | + } |
|
39 | + } |
|
40 | + $this->specifications = $specifications; |
|
41 | + parent::__construct($request); |
|
42 | + } |
|
43 | 43 | } |
@@ -18,22 +18,22 @@ |
||
18 | 18 | */ |
19 | 19 | class WordPressPostsEditor extends MatchAnyRouteSpecification |
20 | 20 | { |
21 | - /** |
|
22 | - * WordPressPostsEditor constructor. |
|
23 | - * |
|
24 | - * @param WordPressPostsEditorEdit $edit_post_route_match |
|
25 | - * @param WordPressPostsEditorAddNew $create_post_route_match |
|
26 | - * @param RequestInterface $request |
|
27 | - * @throws \EventEspresso\core\exceptions\InvalidEntityException |
|
28 | - */ |
|
29 | - public function __construct( |
|
30 | - WordPressPostsEditorEdit $edit_post_route_match, |
|
31 | - WordPressPostsEditorAddNew $create_post_route_match, |
|
32 | - RequestInterface $request |
|
33 | - ) { |
|
34 | - parent::__construct( |
|
35 | - array($edit_post_route_match, $create_post_route_match), |
|
36 | - $request |
|
37 | - ); |
|
38 | - } |
|
21 | + /** |
|
22 | + * WordPressPostsEditor constructor. |
|
23 | + * |
|
24 | + * @param WordPressPostsEditorEdit $edit_post_route_match |
|
25 | + * @param WordPressPostsEditorAddNew $create_post_route_match |
|
26 | + * @param RequestInterface $request |
|
27 | + * @throws \EventEspresso\core\exceptions\InvalidEntityException |
|
28 | + */ |
|
29 | + public function __construct( |
|
30 | + WordPressPostsEditorEdit $edit_post_route_match, |
|
31 | + WordPressPostsEditorAddNew $create_post_route_match, |
|
32 | + RequestInterface $request |
|
33 | + ) { |
|
34 | + parent::__construct( |
|
35 | + array($edit_post_route_match, $create_post_route_match), |
|
36 | + $request |
|
37 | + ); |
|
38 | + } |
|
39 | 39 | } |
@@ -19,22 +19,22 @@ |
||
19 | 19 | */ |
20 | 20 | class EspressoEventEditor extends MatchAnyRouteSpecification |
21 | 21 | { |
22 | - /** |
|
23 | - * EspressoEventEditor constructor. |
|
24 | - * |
|
25 | - * @param EspressoEventEditorEdit $edit_event_route_match |
|
26 | - * @param EspressoEventEditorAddNew $create_event_route_match |
|
27 | - * @param RequestInterface $request |
|
28 | - * @throws InvalidEntityException |
|
29 | - */ |
|
30 | - public function __construct( |
|
31 | - EspressoEventEditorEdit $edit_event_route_match, |
|
32 | - EspressoEventEditorAddNew $create_event_route_match, |
|
33 | - RequestInterface $request |
|
34 | - ) { |
|
35 | - parent::__construct( |
|
36 | - array($edit_event_route_match, $create_event_route_match), |
|
37 | - $request |
|
38 | - ); |
|
39 | - } |
|
22 | + /** |
|
23 | + * EspressoEventEditor constructor. |
|
24 | + * |
|
25 | + * @param EspressoEventEditorEdit $edit_event_route_match |
|
26 | + * @param EspressoEventEditorAddNew $create_event_route_match |
|
27 | + * @param RequestInterface $request |
|
28 | + * @throws InvalidEntityException |
|
29 | + */ |
|
30 | + public function __construct( |
|
31 | + EspressoEventEditorEdit $edit_event_route_match, |
|
32 | + EspressoEventEditorAddNew $create_event_route_match, |
|
33 | + RequestInterface $request |
|
34 | + ) { |
|
35 | + parent::__construct( |
|
36 | + array($edit_event_route_match, $create_event_route_match), |
|
37 | + $request |
|
38 | + ); |
|
39 | + } |
|
40 | 40 | } |
@@ -19,22 +19,22 @@ |
||
19 | 19 | */ |
20 | 20 | class EspressoVenueEditor extends MatchAnyRouteSpecification |
21 | 21 | { |
22 | - /** |
|
23 | - * EspressoVenueEditor constructor. |
|
24 | - * |
|
25 | - * @param EspressoVenueEditorEdit $edit_venue_route_match |
|
26 | - * @param EspressoVenueEditorAddNew $create_venue_route_match |
|
27 | - * @param RequestInterface $request |
|
28 | - * @throws InvalidEntityException |
|
29 | - */ |
|
30 | - public function __construct( |
|
31 | - EspressoVenueEditorEdit $edit_venue_route_match, |
|
32 | - EspressoVenueEditorAddNew $create_venue_route_match, |
|
33 | - RequestInterface $request |
|
34 | - ) { |
|
35 | - parent::__construct( |
|
36 | - array($edit_venue_route_match, $create_venue_route_match), |
|
37 | - $request |
|
38 | - ); |
|
39 | - } |
|
22 | + /** |
|
23 | + * EspressoVenueEditor constructor. |
|
24 | + * |
|
25 | + * @param EspressoVenueEditorEdit $edit_venue_route_match |
|
26 | + * @param EspressoVenueEditorAddNew $create_venue_route_match |
|
27 | + * @param RequestInterface $request |
|
28 | + * @throws InvalidEntityException |
|
29 | + */ |
|
30 | + public function __construct( |
|
31 | + EspressoVenueEditorEdit $edit_venue_route_match, |
|
32 | + EspressoVenueEditorAddNew $create_venue_route_match, |
|
33 | + RequestInterface $request |
|
34 | + ) { |
|
35 | + parent::__construct( |
|
36 | + array($edit_venue_route_match, $create_venue_route_match), |
|
37 | + $request |
|
38 | + ); |
|
39 | + } |
|
40 | 40 | } |