Completed
Pull Request — master (#893)
by Radoslav
02:08
created
includes/admin/class-wc-stripe-admin-notices.php 1 patch
Spacing   +90 added lines, -90 removed lines patch added patch discarded remove patch
@@ -1,5 +1,5 @@  discard block
 block discarded – undo
1 1
 <?php
2
-if ( ! defined( 'ABSPATH' ) ) {
2
+if ( ! defined('ABSPATH')) {
3 3
 	exit;
4 4
 }
5 5
 
@@ -21,8 +21,8 @@  discard block
 block discarded – undo
21 21
 	 * @since 4.1.0
22 22
 	 */
23 23
 	public function __construct() {
24
-		add_action( 'admin_notices', array( $this, 'admin_notices' ) );
25
-		add_action( 'wp_loaded', array( $this, 'hide_notices' ) );
24
+		add_action('admin_notices', array($this, 'admin_notices'));
25
+		add_action('wp_loaded', array($this, 'hide_notices'));
26 26
 	}
27 27
 
28 28
 	/**
@@ -31,8 +31,8 @@  discard block
 block discarded – undo
31 31
 	 * @since 1.0.0
32 32
 	 * @version 4.0.0
33 33
 	 */
34
-	public function add_admin_notice( $slug, $class, $message, $dismissible = false ) {
35
-		$this->notices[ $slug ] = array(
34
+	public function add_admin_notice($slug, $class, $message, $dismissible = false) {
35
+		$this->notices[$slug] = array(
36 36
 			'class'       => $class,
37 37
 			'message'     => $message,
38 38
 			'dismissible' => $dismissible,
@@ -46,7 +46,7 @@  discard block
 block discarded – undo
46 46
 	 * @version 4.0.0
47 47
 	 */
48 48
 	public function admin_notices() {
49
-		if ( ! current_user_can( 'manage_woocommerce' ) ) {
49
+		if ( ! current_user_can('manage_woocommerce')) {
50 50
 			return;
51 51
 		}
52 52
 
@@ -56,17 +56,17 @@  discard block
 block discarded – undo
56 56
 		// All other payment methods.
57 57
 		$this->payment_methods_check_environment();
58 58
 
59
-		foreach ( (array) $this->notices as $notice_key => $notice ) {
60
-			echo '<div class="' . esc_attr( $notice['class'] ) . '" style="position:relative;">';
59
+		foreach ((array) $this->notices as $notice_key => $notice) {
60
+			echo '<div class="' . esc_attr($notice['class']) . '" style="position:relative;">';
61 61
 
62
-			if ( $notice['dismissible'] ) {
62
+			if ($notice['dismissible']) {
63 63
 				?>
64
-				<a href="<?php echo esc_url( wp_nonce_url( add_query_arg( 'wc-stripe-hide-notice', $notice_key ), 'wc_stripe_hide_notices_nonce', '_wc_stripe_notice_nonce' ) ); ?>" class="woocommerce-message-close notice-dismiss" style="position:relative;float:right;padding:9px 0px 9px 9px 9px;text-decoration:none;"></a>
64
+				<a href="<?php echo esc_url(wp_nonce_url(add_query_arg('wc-stripe-hide-notice', $notice_key), 'wc_stripe_hide_notices_nonce', '_wc_stripe_notice_nonce')); ?>" class="woocommerce-message-close notice-dismiss" style="position:relative;float:right;padding:9px 0px 9px 9px 9px;text-decoration:none;"></a>
65 65
 				<?php
66 66
 			}
67 67
 
68 68
 			echo '<p>';
69
-			echo wp_kses( $notice['message'], array( 'a' => array( 'href' => array(), 'target' => array() ) ) );
69
+			echo wp_kses($notice['message'], array('a' => array('href' => array(), 'target' => array())));
70 70
 			echo '</p></div>';
71 71
 		}
72 72
 	}
@@ -99,104 +99,104 @@  discard block
 block discarded – undo
99 99
 	 * @version 4.0.0
100 100
 	 */
101 101
 	public function stripe_check_environment() {
102
-		$show_style_notice  = get_option( 'wc_stripe_show_style_notice' );
103
-		$show_ssl_notice    = get_option( 'wc_stripe_show_ssl_notice' );
104
-		$show_keys_notice   = get_option( 'wc_stripe_show_keys_notice' );
105
-		$show_3ds_notice    = get_option( 'wc_stripe_show_3ds_notice' );
106
-		$show_phpver_notice = get_option( 'wc_stripe_show_phpver_notice' );
107
-		$show_wcver_notice  = get_option( 'wc_stripe_show_wcver_notice' );
108
-		$show_curl_notice   = get_option( 'wc_stripe_show_curl_notice' );
109
-		$options            = get_option( 'woocommerce_stripe_settings' );
110
-		$testmode           = ( isset( $options['testmode'] ) && 'yes' === $options['testmode'] ) ? true : false;
111
-		$test_pub_key       = isset( $options['test_publishable_key'] ) ? $options['test_publishable_key'] : '';
112
-		$test_secret_key    = isset( $options['test_secret_key'] ) ? $options['test_secret_key'] : '';
113
-		$live_pub_key       = isset( $options['publishable_key'] ) ? $options['publishable_key'] : '';
114
-		$live_secret_key    = isset( $options['secret_key'] ) ? $options['secret_key'] : '';
115
-		$three_d_secure     = isset( $options['three_d_secure'] ) && 'yes' === $options['three_d_secure'];
116
-
117
-		if ( isset( $options['enabled'] ) && 'yes' === $options['enabled'] ) {
118
-			if ( empty( $show_3ds_notice ) && $three_d_secure ) {
102
+		$show_style_notice  = get_option('wc_stripe_show_style_notice');
103
+		$show_ssl_notice    = get_option('wc_stripe_show_ssl_notice');
104
+		$show_keys_notice   = get_option('wc_stripe_show_keys_notice');
105
+		$show_3ds_notice    = get_option('wc_stripe_show_3ds_notice');
106
+		$show_phpver_notice = get_option('wc_stripe_show_phpver_notice');
107
+		$show_wcver_notice  = get_option('wc_stripe_show_wcver_notice');
108
+		$show_curl_notice   = get_option('wc_stripe_show_curl_notice');
109
+		$options            = get_option('woocommerce_stripe_settings');
110
+		$testmode           = (isset($options['testmode']) && 'yes' === $options['testmode']) ? true : false;
111
+		$test_pub_key       = isset($options['test_publishable_key']) ? $options['test_publishable_key'] : '';
112
+		$test_secret_key    = isset($options['test_secret_key']) ? $options['test_secret_key'] : '';
113
+		$live_pub_key       = isset($options['publishable_key']) ? $options['publishable_key'] : '';
114
+		$live_secret_key    = isset($options['secret_key']) ? $options['secret_key'] : '';
115
+		$three_d_secure     = isset($options['three_d_secure']) && 'yes' === $options['three_d_secure'];
116
+
117
+		if (isset($options['enabled']) && 'yes' === $options['enabled']) {
118
+			if (empty($show_3ds_notice) && $three_d_secure) {
119 119
 				$url = 'https://stripe.com/docs/payments/3d-secure#three-ds-radar';
120 120
 
121 121
 				/* translators: 1) A URL that explains Stripe Radar. */
122
-				$message = __( 'WooCommerce Stripe - We see that you had the "Require 3D secure when applicable" setting turned on. This setting is not available here anymore, because it is now replaced by Stripe Radar. You can learn more about it <a href="%s" target="_blank">here</a>.', 'woocommerce-gateway-stripe' );
122
+				$message = __('WooCommerce Stripe - We see that you had the "Require 3D secure when applicable" setting turned on. This setting is not available here anymore, because it is now replaced by Stripe Radar. You can learn more about it <a href="%s" target="_blank">here</a>.', 'woocommerce-gateway-stripe');
123 123
 
124
-				$this->add_admin_notice( '3ds', 'notice notice-warning', sprintf( $message, $url ), true );
124
+				$this->add_admin_notice('3ds', 'notice notice-warning', sprintf($message, $url), true);
125 125
 			}
126 126
 
127
-			if ( empty( $show_style_notice ) ) {
127
+			if (empty($show_style_notice)) {
128 128
 				/* translators: 1) int version 2) int version */
129
-				$message = __( 'WooCommerce Stripe - We recently made changes to Stripe that may impact the appearance of your checkout. If your checkout has changed unexpectedly, please follow these <a href="https://docs.woocommerce.com/document/stripe/#section-45" target="_blank">instructions</a> to fix.', 'woocommerce-gateway-stripe' );
129
+				$message = __('WooCommerce Stripe - We recently made changes to Stripe that may impact the appearance of your checkout. If your checkout has changed unexpectedly, please follow these <a href="https://docs.woocommerce.com/document/stripe/#section-45" target="_blank">instructions</a> to fix.', 'woocommerce-gateway-stripe');
130 130
 
131
-				$this->add_admin_notice( 'style', 'error', $message, true );
131
+				$this->add_admin_notice('style', 'error', $message, true);
132 132
 
133 133
 				return;
134 134
 			}
135 135
 
136
-			if ( empty( $show_phpver_notice ) ) {
137
-				if ( version_compare( phpversion(), WC_STRIPE_MIN_PHP_VER, '<' ) ) {
136
+			if (empty($show_phpver_notice)) {
137
+				if (version_compare(phpversion(), WC_STRIPE_MIN_PHP_VER, '<')) {
138 138
 					/* translators: 1) int version 2) int version */
139
-					$message = __( 'WooCommerce Stripe - The minimum PHP version required for this plugin is %1$s. You are running %2$s.', 'woocommerce-gateway-stripe' );
139
+					$message = __('WooCommerce Stripe - The minimum PHP version required for this plugin is %1$s. You are running %2$s.', 'woocommerce-gateway-stripe');
140 140
 
141
-					$this->add_admin_notice( 'phpver', 'error', sprintf( $message, WC_STRIPE_MIN_PHP_VER, phpversion() ), true );
141
+					$this->add_admin_notice('phpver', 'error', sprintf($message, WC_STRIPE_MIN_PHP_VER, phpversion()), true);
142 142
 
143 143
 					return;
144 144
 				}
145 145
 			}
146 146
 
147
-			if ( empty( $show_wcver_notice ) ) {
148
-				if ( version_compare( WC_VERSION, WC_STRIPE_MIN_WC_VER, '<' ) ) {
147
+			if (empty($show_wcver_notice)) {
148
+				if (version_compare(WC_VERSION, WC_STRIPE_MIN_WC_VER, '<')) {
149 149
 					/* translators: 1) int version 2) int version */
150
-					$message = __( 'WooCommerce Stripe - The minimum WooCommerce version required for this plugin is %1$s. You are running %2$s.', 'woocommerce-gateway-stripe' );
150
+					$message = __('WooCommerce Stripe - The minimum WooCommerce version required for this plugin is %1$s. You are running %2$s.', 'woocommerce-gateway-stripe');
151 151
 
152
-					$this->add_admin_notice( 'wcver', 'notice notice-warning', sprintf( $message, WC_STRIPE_MIN_WC_VER, WC_VERSION ), true );
152
+					$this->add_admin_notice('wcver', 'notice notice-warning', sprintf($message, WC_STRIPE_MIN_WC_VER, WC_VERSION), true);
153 153
 
154 154
 					return;
155 155
 				}
156 156
 			}
157 157
 
158
-			if ( empty( $show_curl_notice ) ) {
159
-				if ( ! function_exists( 'curl_init' ) ) {
160
-					$this->add_admin_notice( 'curl', 'notice notice-warning', __( 'WooCommerce Stripe - cURL is not installed.', 'woocommerce-gateway-stripe' ), true );
158
+			if (empty($show_curl_notice)) {
159
+				if ( ! function_exists('curl_init')) {
160
+					$this->add_admin_notice('curl', 'notice notice-warning', __('WooCommerce Stripe - cURL is not installed.', 'woocommerce-gateway-stripe'), true);
161 161
 				}
162 162
 			}
163 163
 
164
-			if ( empty( $show_keys_notice ) ) {
164
+			if (empty($show_keys_notice)) {
165 165
 				$secret = WC_Stripe_API::get_secret_key();
166 166
 
167
-				if ( empty( $secret ) && ! ( isset( $_GET['page'], $_GET['section'] ) && 'wc-settings' === $_GET['page'] && 'stripe' === $_GET['section'] ) ) {
167
+				if (empty($secret) && ! (isset($_GET['page'], $_GET['section']) && 'wc-settings' === $_GET['page'] && 'stripe' === $_GET['section'])) {
168 168
 					$setting_link = $this->get_setting_link();
169 169
 					/* translators: 1) link */
170
-					$this->add_admin_notice( 'keys', 'notice notice-warning', sprintf( __( 'Stripe is almost ready. To get started, <a href="%s">set your Stripe account keys</a>.', 'woocommerce-gateway-stripe' ), $setting_link ), true );
170
+					$this->add_admin_notice('keys', 'notice notice-warning', sprintf(__('Stripe is almost ready. To get started, <a href="%s">set your Stripe account keys</a>.', 'woocommerce-gateway-stripe'), $setting_link), true);
171 171
 				}
172 172
 
173 173
 				// Check if keys are entered properly per live/test mode.
174
-				if ( $testmode ) {
174
+				if ($testmode) {
175 175
 					if (
176
-						! empty( $test_pub_key ) && ! preg_match( '/^pk_test_/', $test_pub_key )
177
-						|| ( ! empty( $test_secret_key ) && ! preg_match( '/^sk_test_/', $test_secret_key )
178
-						&& ! empty( $test_secret_key ) && ! preg_match( '/^rk_test_/', $test_secret_key ) ) ) {
176
+						! empty($test_pub_key) && ! preg_match('/^pk_test_/', $test_pub_key)
177
+						|| ( ! empty($test_secret_key) && ! preg_match('/^sk_test_/', $test_secret_key)
178
+						&& ! empty($test_secret_key) && ! preg_match('/^rk_test_/', $test_secret_key)) ) {
179 179
 						$setting_link = $this->get_setting_link();
180 180
 						/* translators: 1) link */
181
-						$this->add_admin_notice( 'keys', 'notice notice-error', sprintf( __( 'Stripe is in test mode however your test keys may not be valid. Test keys start with pk_test and sk_test or rk_test. Please go to your settings and, <a href="%s">set your Stripe account keys</a>.', 'woocommerce-gateway-stripe' ), $setting_link ), true );
181
+						$this->add_admin_notice('keys', 'notice notice-error', sprintf(__('Stripe is in test mode however your test keys may not be valid. Test keys start with pk_test and sk_test or rk_test. Please go to your settings and, <a href="%s">set your Stripe account keys</a>.', 'woocommerce-gateway-stripe'), $setting_link), true);
182 182
 					}
183 183
 				} else {
184 184
 					if (
185
-						! empty( $live_pub_key ) && ! preg_match( '/^pk_live_/', $live_pub_key )
186
-						|| ( ! empty( $live_secret_key ) && ! preg_match( '/^sk_live_/', $live_secret_key )
187
-						&& ! empty( $live_secret_key ) && ! preg_match( '/^rk_live_/', $live_secret_key ) ) ) {
185
+						! empty($live_pub_key) && ! preg_match('/^pk_live_/', $live_pub_key)
186
+						|| ( ! empty($live_secret_key) && ! preg_match('/^sk_live_/', $live_secret_key)
187
+						&& ! empty($live_secret_key) && ! preg_match('/^rk_live_/', $live_secret_key)) ) {
188 188
 						$setting_link = $this->get_setting_link();
189 189
 						/* translators: 1) link */
190
-						$this->add_admin_notice( 'keys', 'notice notice-error', sprintf( __( 'Stripe is in live mode however your test keys may not be valid. Live keys start with pk_live and sk_live or rk_live. Please go to your settings and, <a href="%s">set your Stripe account keys</a>.', 'woocommerce-gateway-stripe' ), $setting_link ), true );
190
+						$this->add_admin_notice('keys', 'notice notice-error', sprintf(__('Stripe is in live mode however your test keys may not be valid. Live keys start with pk_live and sk_live or rk_live. Please go to your settings and, <a href="%s">set your Stripe account keys</a>.', 'woocommerce-gateway-stripe'), $setting_link), true);
191 191
 					}
192 192
 				}
193 193
 			}
194 194
 
195
-			if ( empty( $show_ssl_notice ) ) {
195
+			if (empty($show_ssl_notice)) {
196 196
 				// Show message if enabled and FORCE SSL is disabled and WordpressHTTPS plugin is not detected.
197
-				if ( ! wc_checkout_is_https() ) {
197
+				if ( ! wc_checkout_is_https()) {
198 198
 					/* translators: 1) link */
199
-					$this->add_admin_notice( 'ssl', 'notice notice-warning', sprintf( __( 'Stripe is enabled, but a SSL certificate is not detected. Your checkout may not be secure! Please ensure your server has a valid <a href="%1$s" target="_blank">SSL certificate</a>', 'woocommerce-gateway-stripe' ), 'https://en.wikipedia.org/wiki/Transport_Layer_Security' ), true );
199
+					$this->add_admin_notice('ssl', 'notice notice-warning', sprintf(__('Stripe is enabled, but a SSL certificate is not detected. Your checkout may not be secure! Please ensure your server has a valid <a href="%1$s" target="_blank">SSL certificate</a>', 'woocommerce-gateway-stripe'), 'https://en.wikipedia.org/wiki/Transport_Layer_Security'), true);
200 200
 				}
201 201
 			}
202 202
 		}
@@ -210,17 +210,17 @@  discard block
 block discarded – undo
210 210
 	public function payment_methods_check_environment() {
211 211
 		$payment_methods = $this->get_payment_methods();
212 212
 
213
-		foreach ( $payment_methods as $method => $class ) {
214
-			$show_notice = get_option( 'wc_stripe_show_' . strtolower( $method ) . '_notice' );
213
+		foreach ($payment_methods as $method => $class) {
214
+			$show_notice = get_option('wc_stripe_show_' . strtolower($method) . '_notice');
215 215
 			$gateway     = new $class();
216 216
 
217
-			if ( 'yes' !== $gateway->enabled || 'no' === $show_notice ) {
217
+			if ('yes' !== $gateway->enabled || 'no' === $show_notice) {
218 218
 				continue;
219 219
 			}
220 220
 
221
-			if ( ! in_array( get_woocommerce_currency(), $gateway->get_supported_currency() ) ) {
221
+			if ( ! in_array(get_woocommerce_currency(), $gateway->get_supported_currency())) {
222 222
 				/* translators: %1$s Payment method, %2$s List of supported currencies */
223
-				$this->add_admin_notice( $method, 'notice notice-error', sprintf( __( '%1$s is enabled - it requires store currency to be set to %2$s', 'woocommerce-gateway-stripe' ), $method, implode( ', ', $gateway->get_supported_currency() ) ), true );
223
+				$this->add_admin_notice($method, 'notice notice-error', sprintf(__('%1$s is enabled - it requires store currency to be set to %2$s', 'woocommerce-gateway-stripe'), $method, implode(', ', $gateway->get_supported_currency())), true);
224 224
 			}
225 225
 		}
226 226
 	}
@@ -232,65 +232,65 @@  discard block
 block discarded – undo
232 232
 	 * @version 4.0.0
233 233
 	 */
234 234
 	public function hide_notices() {
235
-		if ( isset( $_GET['wc-stripe-hide-notice'] ) && isset( $_GET['_wc_stripe_notice_nonce'] ) ) {
236
-			if ( ! wp_verify_nonce( $_GET['_wc_stripe_notice_nonce'], 'wc_stripe_hide_notices_nonce' ) ) {
237
-				wp_die( __( 'Action failed. Please refresh the page and retry.', 'woocommerce-gateway-stripe' ) );
235
+		if (isset($_GET['wc-stripe-hide-notice']) && isset($_GET['_wc_stripe_notice_nonce'])) {
236
+			if ( ! wp_verify_nonce($_GET['_wc_stripe_notice_nonce'], 'wc_stripe_hide_notices_nonce')) {
237
+				wp_die(__('Action failed. Please refresh the page and retry.', 'woocommerce-gateway-stripe'));
238 238
 			}
239 239
 
240
-			if ( ! current_user_can( 'manage_woocommerce' ) ) {
241
-				wp_die( __( 'Cheatin&#8217; huh?', 'woocommerce-gateway-stripe' ) );
240
+			if ( ! current_user_can('manage_woocommerce')) {
241
+				wp_die(__('Cheatin&#8217; huh?', 'woocommerce-gateway-stripe'));
242 242
 			}
243 243
 
244
-			$notice = wc_clean( $_GET['wc-stripe-hide-notice'] );
244
+			$notice = wc_clean($_GET['wc-stripe-hide-notice']);
245 245
 
246
-			switch ( $notice ) {
246
+			switch ($notice) {
247 247
 				case 'style':
248
-					update_option( 'wc_stripe_show_style_notice', 'no' );
248
+					update_option('wc_stripe_show_style_notice', 'no');
249 249
 					break;
250 250
 				case 'phpver':
251
-					update_option( 'wc_stripe_show_phpver_notice', 'no' );
251
+					update_option('wc_stripe_show_phpver_notice', 'no');
252 252
 					break;
253 253
 				case 'wcver':
254
-					update_option( 'wc_stripe_show_wcver_notice', 'no' );
254
+					update_option('wc_stripe_show_wcver_notice', 'no');
255 255
 					break;
256 256
 				case 'curl':
257
-					update_option( 'wc_stripe_show_curl_notice', 'no' );
257
+					update_option('wc_stripe_show_curl_notice', 'no');
258 258
 					break;
259 259
 				case 'ssl':
260
-					update_option( 'wc_stripe_show_ssl_notice', 'no' );
260
+					update_option('wc_stripe_show_ssl_notice', 'no');
261 261
 					break;
262 262
 				case 'keys':
263
-					update_option( 'wc_stripe_show_keys_notice', 'no' );
263
+					update_option('wc_stripe_show_keys_notice', 'no');
264 264
 					break;
265 265
 				case '3ds':
266
-					update_option( 'wc_stripe_show_3ds_notice', 'no' );
266
+					update_option('wc_stripe_show_3ds_notice', 'no');
267 267
 					break;
268 268
 				case 'Alipay':
269
-					update_option( 'wc_stripe_show_alipay_notice', 'no' );
269
+					update_option('wc_stripe_show_alipay_notice', 'no');
270 270
 					break;
271 271
 				case 'Bancontact':
272
-					update_option( 'wc_stripe_show_bancontact_notice', 'no' );
272
+					update_option('wc_stripe_show_bancontact_notice', 'no');
273 273
 					break;
274 274
 				case 'EPS':
275
-					update_option( 'wc_stripe_show_eps_notice', 'no' );
275
+					update_option('wc_stripe_show_eps_notice', 'no');
276 276
 					break;
277 277
 				case 'Giropay':
278
-					update_option( 'wc_stripe_show_giropay_notice', 'no' );
278
+					update_option('wc_stripe_show_giropay_notice', 'no');
279 279
 					break;
280 280
 				case 'iDeal':
281
-					update_option( 'wc_stripe_show_ideal_notice', 'no' );
281
+					update_option('wc_stripe_show_ideal_notice', 'no');
282 282
 					break;
283 283
 				case 'Multibanco':
284
-					update_option( 'wc_stripe_show_multibanco_notice', 'no' );
284
+					update_option('wc_stripe_show_multibanco_notice', 'no');
285 285
 					break;
286 286
 				case 'P24':
287
-					update_option( 'wc_stripe_show_p24_notice', 'no' );
287
+					update_option('wc_stripe_show_p24_notice', 'no');
288 288
 					break;
289 289
 				case 'SEPA':
290
-					update_option( 'wc_stripe_show_sepa_notice', 'no' );
290
+					update_option('wc_stripe_show_sepa_notice', 'no');
291 291
 					break;
292 292
 				case 'SOFORT':
293
-					update_option( 'wc_stripe_show_sofort_notice', 'no' );
293
+					update_option('wc_stripe_show_sofort_notice', 'no');
294 294
 					break;
295 295
 			}
296 296
 		}
@@ -304,11 +304,11 @@  discard block
 block discarded – undo
304 304
 	 * @return string Setting link
305 305
 	 */
306 306
 	public function get_setting_link() {
307
-		$use_id_as_section = function_exists( 'WC' ) ? version_compare( WC()->version, '2.6', '>=' ) : false;
307
+		$use_id_as_section = function_exists('WC') ? version_compare(WC()->version, '2.6', '>=') : false;
308 308
 
309
-		$section_slug = $use_id_as_section ? 'stripe' : strtolower( 'WC_Gateway_Stripe' );
309
+		$section_slug = $use_id_as_section ? 'stripe' : strtolower('WC_Gateway_Stripe');
310 310
 
311
-		return admin_url( 'admin.php?page=wc-settings&tab=checkout&section=' . $section_slug );
311
+		return admin_url('admin.php?page=wc-settings&tab=checkout&section=' . $section_slug);
312 312
 	}
313 313
 }
314 314
 
Please login to merge, or discard this patch.