PluginProbe
Magic Login – Magic Link & Passwordless Authentication for WordPress – Login Without Password / 2.4
Magic Login – Magic Link & Passwordless Authentication for WordPress – Login Without Password v2.4
2.8.1 2.1 2.1.1 2.1.2 2.1.3 2.2 2.3 2.3.1 2.3.2 2.3.3 2.3.4 2.3.5 2.4 2.4.1 2.4.2 2.5 2.5.1 2.6 2.6.1 2.6.2 2.6.3 2.7 2.7.1 2.8 trunk All 48 releases
magic-login / includes / admin / partials / tabs / login.php

login.php in Magic Login – Magic Link & Passwordless Authentication for WordPress – Login Without Password 2.4, at includes/admin/partials/tabs/login.php

939 lines 38.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Login settings partial page
4 *
5 * @package MagicLogin\Admin
6 */
7
8 use function MagicLogin\Admin\Dashboard\maybe_display_license_message;
9 use function MagicLogin\Utils\get_license_info;
10 use function MagicLogin\Utils\get_license_status_message;
11 use function MagicLogin\Utils\get_ttl_with_interval;
12 use function MagicLogin\Utils\get_doc_url;
13
14 use function MagicLogin\Utils\get_allowed_intervals;
15 use function MagicLogin\Utils\get_license_key;
16 use function MagicLogin\Utils\mask_string;
17
18
19 if ( ! defined( 'ABSPATH' ) ) {
20 exit; // Exit if accessed directly.
21 }
22
23
24 // phpcs:disable WordPress.WhiteSpace.PrecisionAlignment.Found
25 // phpcs:disable Generic.WhiteSpace.DisallowSpaceIndent.SpacesUsed
26 // phpcs:disable WordPress.WP.I18n.MissingTranslatorsComment
27
28 ?>
29 <div role="tabpanel" tabindex="0" id="login_content" class="sui-tab-content magic-login-main-tab-content active" aria-labelledby="login__tab">
30 <!-- Force Magic Login -->
31 <div class="sui-box-settings-row">
32 <div class="sui-box-settings-col-1">
33 <span class="sui-settings-label" for="force-magic-login"><?php esc_html_e( 'Force Magic Login', 'magic-login' ); ?></span>
34 <span class="sui-description"><?php esc_html_e( 'Change default login behaviour and use magic login as default login method.', 'magic-login' ); ?></span>
35 </div>
36
37 <div class="sui-box-settings-col-2">
38 <div class="sui-form-field">
39 <label for="is_default" class="sui-toggle">
40 <input type="checkbox"
41 value="1"
42 name="is_default"
43 id="is_default"
44 aria-labelledby="force-magic-login-label"
45 <?php checked( 1, $settings['is_default'] ); ?>
46 >
47 <span class="sui-toggle-slider" aria-hidden="true"></span>
48 <span id="force-magic-login-label" class="sui-toggle-label"><?php esc_html_e( 'Use magic login by default', 'magic-login' ); ?></span>
49 </label>
50 <span class="sui-description">
51 <?php
52 echo wp_kses_post(
53 sprintf(
54 /* translators: 1: Login URL with Magic Login flavour */
55 __( 'Magic login form is accessible <a href="%1$s">%1$s</a>', 'magic-login' ),
56 esc_url( \MagicLogin\Utils\get_wp_login_url() )
57 )
58 );
59 ?>
60 </span>
61 <div class="sui-notice sui-notice-info" style="padding: 10px 20px 10px 0; margin:0;">
62 <div class="sui-notice-content">
63 <div class="sui-notice-message">
64 <span class="sui-notice-icon sui-icon-info sui-md" aria-hidden="true"></span>
65 <p>
66 <?php
67 echo wp_kses_post(
68 sprintf(
69 /* translators: 1: Magic Login shortcode 2: Documentation URL 3: 'Learn More' text */
70 __( 'In order to add a login form to any page, you can use shortcode <code>%1$s</code> or block. <a href="%2$s" target="_blank" rel="noopener">%3$s</a>' ),
71 '[magic_login_form]',
72 get_doc_url( 'docs/add-magic-login-form-to-a-page/' ),
73 __( 'Learn More.', 'magic-login' )
74 )
75 );
76 ?>
77 </p>
78 </div>
79 </div>
80 </div>
81 </div>
82 </div>
83 </div>
84
85 <!-- Add to login form -->
86 <div class="sui-box-settings-row">
87 <div class="sui-box-settings-col-1">
88 <span class="sui-settings-label" for="force-magic-login"><?php esc_html_e( 'Show on Login Form', 'magic-login' ); ?></span>
89 <span class="sui-description"><?php esc_html_e( 'Adds magic login button to WordPress login form.', 'magic-login' ); ?></span>
90 </div>
91
92 <div class="sui-box-settings-col-2">
93 <div class="sui-form-field">
94 <label for="add_login_button" class="sui-toggle">
95 <input type="checkbox"
96 value="1"
97 name="add_login_button"
98 id="add_login_button"
99 aria-labelledby="add-to-login-form-label"
100 <?php checked( 1, $settings['add_login_button'] ); ?>
101 >
102 <span class="sui-toggle-slider" aria-hidden="true"></span>
103 <span id="add-to-login-form-label" class="sui-toggle-label"><?php esc_html_e( 'Add magic login button to standard login form', 'magic-login' ); ?></span>
104 </label>
105 </div>
106 </div>
107 </div>
108
109 <!-- TTL -->
110 <?php list( $token_ttl, $selected_interval ) = get_ttl_with_interval( $settings['token_ttl'] ); ?>
111 <?php $allowed_intervals = get_allowed_intervals(); ?>
112 <div class="sui-box-settings-row">
113 <div class="sui-box-settings-col-1">
114 <span class="sui-settings-label" id="token_ttl_label"><?php esc_html_e( 'Token Lifespan', 'magic-login' ); ?></span>
115 <span class="sui-description">
116 <?php esc_html_e( 'The TTL (time to live) of the login link. WP-Cron removes expired tokens.', 'magic-login' ); ?>
117 <a href="<?php echo esc_url( get_doc_url( 'docs/magic-login-token-lifespan' ) ); ?>" target="_blank"><?php esc_html_e( 'Learn More.', 'magic-login' ); ?></a>
118 </span>
119 </div>
120
121 <div class="sui-box-settings-col-2">
122 <div class="sui-form-field">
123 <input
124 name="token_ttl"
125 id="token_ttl"
126 class="sui-form-control sui-field-has-suffix"
127 aria-labelledby="token_ttl_label"
128 type="number"
129 value="<?php echo absint( $token_ttl ); ?>"
130 min="0"
131 />
132 <span class="sui-field-suffix">
133 <select id="token_interval" name="token_interval" class="sui-form-control">
134 <?php foreach ( $allowed_intervals as $val => $label ) : ?>
135 <option <?php selected( $val, $selected_interval ); ?> value="<?php echo esc_attr( $val ); ?>"><?php echo esc_html( $label ); ?></option>
136 <?php endforeach; ?>
137 </select>
138 </span>
139 </div>
140 </div>
141 </div>
142
143 <!-- Token Validity -->
144 <div class="sui-box-settings-row">
145 <div class="sui-box-settings-col-1">
146 <span class="sui-settings-label" id="token_validity_label"><?php esc_html_e( 'Token Validity', 'magic-login' ); ?></span>
147 <span class="sui-description">
148 <?php esc_html_e( 'Specify how many times a token can be used.', 'magic-login' ); ?>
149 <a href="<?php echo esc_url( get_doc_url( 'docs/magic-login-token-validity/' ) ); ?>" target="_blank"><?php esc_html_e( 'Learn More.', 'magic-login' ); ?></a>
150 </span>
151 </div>
152
153 <div class="sui-box-settings-col-2">
154 <div class="sui-form-field">
155 <input
156 name="token_validity"
157 id="token_validity"
158 class="sui-form-control sui-field-has-suffix"
159 aria-labelledby="token_validity_label"
160 type="number"
161 value="<?php echo absint( $settings['token_validity'] ); ?>"
162 min="0"
163 max="10"
164 />
165 </div>
166 </div>
167 </div>
168
169 <!-- Auto Login links -->
170 <div class="sui-box-settings-row">
171 <div class="sui-box-settings-col-1">
172 <span class="sui-settings-label"><?php esc_html_e( 'Auto Login Links', 'magic-login' ); ?></span>
173 <span class="sui-description"><?php esc_html_e( 'If the recipient exists, automatically adds the login link to outgoing emails sent from WordPress. ', 'magic-login' ); ?></span>
174 </div>
175
176 <div class="sui-box-settings-col-2">
177 <div class="sui-form-field">
178 <label for="auto_login_links" class="sui-toggle">
179 <input type="checkbox"
180 value="1"
181 name="auto_login_links"
182 id="auto_login_links"
183 aria-labelledby="add-to-login-form-label"
184 <?php checked( 1, $settings['auto_login_links'] ); ?>
185 >
186 <span class="sui-toggle-slider" aria-hidden="true"></span>
187 <span id="add-to-login-form-label" class="sui-toggle-label"><?php esc_html_e( 'Add magic login links to outgoing emails', 'magic-login' ); ?></span>
188 <span class="sui-description">
189 <?php esc_html_e( 'This could be useful when there is an action waiting for the user. (eg: reply comment, complete shopping etc...)', 'magic-login' ); ?>
190 </span>
191 </label>
192 </div>
193 </div>
194 </div>
195
196 <!-- Woo Integration -->
197 <div class="sui-box-settings-row sui-disabled">
198 <div class="sui-box-settings-col-1">
199 <span class="sui-settings-label">
200 <?php esc_html_e( 'Enable Magic Login for WooCommerce', 'magic-login' ); ?>
201 <span class="sui-tag sui-tag-pro"><?php esc_html_e( 'Pro', 'magic-login' ); ?></span>
202 </span>
203 <span class="sui-description">
204 <?php esc_html_e( 'Integrates with WooCommerce login form.', 'magic-login' ); ?>
205 <a href="<?php echo esc_url( get_doc_url( 'docs/magic-login-woocommerce-integration/' ) ); ?>" target="_blank"><?php esc_html_e( 'Learn More.', 'magic-login' ); ?></a>
206 </span>
207 </div>
208
209 <div class="sui-box-settings-col-2">
210 <div class="sui-form-field">
211 <label for="enable_woo_integration" class="sui-toggle">
212 <input type="checkbox"
213 value="1"
214 name="enable_woo_integration"
215 id="enable_woo_integration"
216 aria-labelledby="integrate-to-woocommerce-form-label"
217 aria-controls="woo-detail-controls"
218 <?php checked( 1, $settings['enable_woo_integration'] ); ?>
219 >
220 <span class="sui-toggle-slider" aria-hidden="true"></span>
221 <span id="integrate-to-woocommerce-form-label" class="sui-toggle-label"><?php esc_html_e( 'Integrate magic login with WooCommerce login form', 'magic-login' ); ?></span>
222 <span class="sui-description">
223 <?php esc_html_e( 'Streamline checkout experience for returning customers.', 'magic-login' ); ?>
224 </span>
225 </label>
226 </div>
227 <div style=" <?php echo( ! $settings['enable_woo_integration'] ? 'display:none' : '' ); ?>" tabindex="0" id="woo-detail-controls" class="sui-toggle-content sui-border-frame">
228 <div class="sui-form-field" role="radiogroup">
229 <span class="sui-label"><?php esc_html_e( 'Magic Login Form Position on WooCommerce', 'magic-login' ); ?></span>
230
231 <label for="woo_position_before" class="sui-radio">
232 <input
233 type="radio"
234 name="woo_position"
235 id="woo_position_before"
236 aria-labelledby="label-woo_position"
237 value="before"
238 <?php checked( 'before', $settings['woo_position'] ); ?>
239 />
240 <span aria-hidden="true"></span>
241 <span id="label-woo_position"><?php esc_html_e( 'Before WooCommerce Login Form', 'magic-login' ); ?></span>
242 </label>
243 <label for="woo_position_after" class="sui-radio">
244 <input
245 type="radio"
246 name="woo_position"
247 id="woo_position_after"
248 aria-labelledby="label-woo_position"
249 value="after"
250 <?php checked( 'after', $settings['woo_position'] ); ?>
251 />
252 <span aria-hidden="true"></span>
253 <span id="label-woo_position"><?php esc_html_e( 'After WooCommerce Login Form', 'magic-login' ); ?></span>
254 </label>
255 </div>
256 </div>
257 <div class="sui-form-field">
258 <label for="enable_woo_customer_login" class="sui-toggle">
259 <input type="checkbox"
260 value="1"
261 name="enable_woo_customer_login"
262 id="enable_woo_customer_login"
263 aria-controls="woo-detail-my-account-controls"
264 <?php checked( 1, $settings['enable_woo_customer_login'] ); ?>
265 >
266 <span class="sui-toggle-slider" aria-hidden="true"></span>
267 <span class="sui-toggle-label">
268 <?php esc_html_e( 'Enable on Customer Login Form', 'magic-login' ); ?>
269 </span>
270 </label>
271 <span class="sui-description">
272 <?php esc_html_e( 'Automatically add Magic Login to WooCommerce customer login forms, including the My Account login page and other areas where the login form is used.', 'magic-login' ); ?>
273 </span>
274 </div>
275 <div style=" <?php echo( ! $settings['enable_woo_customer_login'] ? 'display:none' : '' ); ?>"
276 tabindex="0" id="woo-detail-my-account-controls" class="sui-toggle-content sui-border-frame">
277 <div class="sui-form-field" role="radiogroup">
278 <span class="sui-label"><?php esc_html_e( 'Magic Login Form Position on WooCommerce Customer Login Form', 'magic-login' ); ?></span>
279
280 <label for="woo_customer_login_position_before" class="sui-radio">
281 <input type="radio"
282 name="woo_customer_login_position"
283 id="woo_customer_login_position_before"
284 value="before"
285 <?php checked( 'before', $settings['woo_customer_login_position'] ); ?>
286 />
287 <span aria-hidden="true"></span>
288 <span><?php esc_html_e( 'Before Login Form', 'magic-login' ); ?></span>
289 </label>
290
291 <label for="woo_customer_login_position_after" class="sui-radio">
292 <input type="radio"
293 name="woo_customer_login_position"
294 id="woo_customer_login_position_after"
295 value="after"
296 <?php checked( 'after', $settings['woo_customer_login_position'] ); ?>
297 />
298 <span aria-hidden="true"></span>
299 <span><?php esc_html_e( 'After Login Form', 'magic-login' ); ?></span>
300 </label>
301 </div>
302 </div>
303 </div>
304 </div>
305
306 <!-- EDD Integration -->
307 <div class="sui-box-settings-row sui-disabled">
308 <div class="sui-box-settings-col-1">
309 <span class="sui-settings-label">
310 <?php esc_html_e( 'Enable Magic Login for Easy Digital Downloads', 'magic-login' ); ?>
311 </span>
312 <span class="sui-description">
313 <?php esc_html_e( 'Integrates with Easy Digital Downloads checkout page.', 'magic-login' ); ?>
314 <a href="<?php echo esc_url( get_doc_url( 'docs/magic-login-edd-integration/' ) ); ?>" target="_blank">
315 <?php esc_html_e( 'Learn More.', 'magic-login' ); ?>
316 </a>
317 </span>
318 </div>
319
320 <div class="sui-box-settings-col-2">
321 <div class="sui-form-field">
322 <label for="enable_edd_checkout" class="sui-toggle">
323 <input type="checkbox"
324 value="1"
325 name="enable_edd_checkout"
326 id="enable_edd_checkout"
327 aria-labelledby="integrate-to-edd-form-label"
328 aria-controls="edd-checkout-detail-controls"
329 <?php checked( 1, $settings['enable_edd_checkout'] ); ?>
330 >
331 <span class="sui-toggle-slider" aria-hidden="true"></span>
332 <span id="integrate-to-edd-form-label" class="sui-toggle-label">
333 <?php esc_html_e( 'Integrate magic login with EDD checkout page', 'magic-login' ); ?>
334 </span>
335 <span class="sui-description">
336 <?php esc_html_e( 'Allow customers to log in quickly during checkout.', 'magic-login' ); ?>
337 </span>
338 </label>
339 </div>
340
341 <div style=" <?php echo( ! $settings['enable_edd_checkout'] ? 'display:none' : '' ); ?>"
342 tabindex="0" id="edd-checkout-detail-controls" class="sui-toggle-content sui-border-frame">
343 <div class="sui-form-field" role="radiogroup">
344 <span class="sui-label"><?php esc_html_e( 'Magic Login Form Position on EDD Checkout', 'magic-login' ); ?></span>
345
346 <label for="edd_checkout_position_before_purchase_form" class="sui-radio">
347 <input
348 type="radio"
349 name="edd_checkout_position"
350 id="edd_checkout_position_before_purchase_form"
351 aria-labelledby="label-edd_checkout_position"
352 value="edd_before_purchase_form"
353 <?php checked( 'edd_before_purchase_form', $settings['edd_checkout_position'] ); ?>
354 />
355 <span aria-hidden="true"></span>
356 <span id="label-edd_checkout_position"><?php esc_html_e( 'Before purchase form', 'magic-login' ); ?></span>
357 </label>
358 <label for="edd_checkout_position_after_purchase_form" class="sui-radio">
359 <input
360 type="radio"
361 name="edd_checkout_position"
362 id="edd_checkout_position_after_purchase_form"
363 aria-labelledby="label-edd_checkout_position"
364 value="edd_after_purchase_form"
365 <?php checked( 'edd_after_purchase_form', $settings['edd_checkout_position'] ); ?>
366 />
367 <span aria-hidden="true"></span>
368 <span id="label-edd_checkout_position"><?php esc_html_e( 'After purchase form', 'magic-login' ); ?></span>
369 </label>
370
371 <label for="edd_checkout_position_before_checkout_cart" class="sui-radio">
372 <input
373 type="radio"
374 name="edd_checkout_position"
375 id="edd_checkout_position_before_checkout_cart"
376 aria-labelledby="label-edd_checkout_position"
377 value="edd_before_checkout_cart"
378 <?php checked( 'edd_before_checkout_cart', $settings['edd_checkout_position'] ); ?>
379 />
380 <span aria-hidden="true"></span>
381 <span id="label-edd_checkout_position"><?php esc_html_e( 'Before checkout cart', 'magic-login' ); ?></span>
382 </label>
383 <label for="edd_after_checkout_cart" class="sui-radio">
384 <input
385 type="radio"
386 name="edd_checkout_position"
387 id="edd_after_checkout_cart"
388 aria-labelledby="label-edd_checkout_position"
389 value="edd_after_checkout_cart"
390 <?php checked( 'edd_after_checkout_cart', $settings['edd_checkout_position'] ); ?>
391 />
392 <span aria-hidden="true"></span>
393 <span id="label-edd_checkout_position"><?php esc_html_e( 'After checkout cart', 'magic-login' ); ?></span>
394 </label>
395 </div>
396 </div>
397
398 <div class="sui-form-field">
399 <label for="enable_edd_login" class="sui-toggle">
400 <input type="checkbox"
401 value="1"
402 name="enable_edd_login"
403 id="enable_edd_login"
404 aria-labelledby="integrate-to-edd-form-label"
405 aria-controls="edd-login-detail-controls"
406 <?php checked( 1, $settings['enable_edd_login'] ); ?>
407 >
408 <span class="sui-toggle-slider" aria-hidden="true"></span>
409 <span id="integrate-to-edd-form-label" class="sui-toggle-label">
410 <?php esc_html_e( 'Integrate magic login with EDD login page', 'magic-login' ); ?>
411 </span>
412 <span class="sui-description">
413 <?php esc_html_e( 'Allow customers to log in without needing to remember password.', 'magic-login' ); ?>
414 </span>
415 </label>
416 </div>
417
418 <div style=" <?php echo( ! $settings['enable_edd_login'] ? 'display:none' : '' ); ?>"
419 tabindex="0" id="edd-login-detail-controls" class="sui-toggle-content sui-border-frame">
420 <div class="sui-form-field" role="radiogroup">
421 <span class="sui-label"><?php esc_html_e( 'Magic Login Form Position on EDD Login', 'magic-login' ); ?></span>
422
423 <label for="edd_login_position_before_purchase_form" class="sui-radio">
424 <input
425 type="radio"
426 name="edd_login_position"
427 id="edd_login_position_before_purchase_form"
428 aria-labelledby="label-edd_login_position"
429 value="before"
430 <?php checked( 'before', $settings['edd_login_position'] ); ?>
431 />
432 <span aria-hidden="true"></span>
433 <span id="label-edd_login_position"><?php esc_html_e( 'Before content', 'magic-login' ); ?></span>
434 </label>
435
436 <label for="edd_login_position_after_purchase_form" class="sui-radio">
437 <input
438 type="radio"
439 name="edd_login_position"
440 id="edd_login_position_after_purchase_form"
441 aria-labelledby="label-edd_login_position"
442 value="after"
443 <?php checked( 'after', $settings['edd_login_position'] ); ?>
444 />
445 <span aria-hidden="true"></span>
446 <span id="label-edd_login_position"><?php esc_html_e( 'After content', 'magic-login' ); ?></span>
447 </label>
448
449 </div>
450 </div>
451 </div>
452 </div>
453
454
455 <!-- Brute Force Protection -->
456 <div class="sui-box-settings-row sui-disabled">
457 <div class="sui-box-settings-col-1">
458 <span class="sui-settings-label-with-tag">
459 <?php esc_html_e( 'Brute Force Protection', 'magic-login' ); ?>
460 <span class="sui-tag sui-tag-pro"><?php esc_html_e( 'Pro', 'magic-login' ); ?></span>
461 </span>
462 <span id="brute-force-protection-description" class="sui-description"><?php esc_html_e( 'Enable additional security mechanisms to limit login requests.', 'magic-login' ); ?></span>
463 </div>
464 <div class="sui-box-settings-col-2">
465 <div class="sui-form-field">
466 <label for="enable_brute_force_protection" class="sui-toggle">
467 <input type="checkbox"
468 value="1"
469 name="enable_brute_force_protection"
470 id="enable_brute_force_protection"
471 aria-describedby="brute-force-protection-description"
472 aria-controls="brute-force-protection-controls"
473 <?php checked( 1, $settings['enable_brute_force_protection'] ); ?>
474 >
475 <span class="sui-toggle-slider" aria-hidden="true"></span>
476 <span id="brute-force-protection-label" class="sui-toggle-label"><?php esc_html_e( 'Enable brute force protection', 'magic-login' ); ?></span>
477 <span class="sui-description">
478 </span>
479 </label>
480
481 <div style=" <?php echo( ! $settings['enable_brute_force_protection'] ? 'display:none' : '' ); ?>" tabindex="0" id="brute-force-protection-controls" class="sui-toggle-content sui-border-frame">
482 <div class="sui-form-field">
483 <?php
484 $brute_force_fields = array(
485 'brute_force_bantime' => array(
486 'min' => 1,
487 'max' => 1440,
488 ),
489 'brute_force_login_attempt' => array(
490 'min' => 1,
491 'max' => 100,
492 ),
493 'brute_force_login_time' => array(
494 'min' => 1,
495 'max' => 600,
496 ),
497 );
498 foreach ( $brute_force_fields as $field => $args ) {
499 ${$field . '_input'} = sprintf(
500 '<input
501 id="%1$s"
502 name="%1$s"
503 min="%2$d"
504 max="%3$d"
505 type="number"
506 class="sui-form-control sui-field-has-suffix"
507 value="%4$d"
508 >',
509 esc_attr( $field ),
510 absint( $args['min'] ),
511 absint( $args['max'] ),
512 absint( $settings[ $field ] )
513 );
514 }
515 /* translators: 1: Ban duration input 2: Trial count input 3: Interval input */
516 printf(
517 __( 'Block the IP address for %1$s minutes when it fails to login %2$s times in %3$s minutes.', 'magic-login' ), // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
518 $brute_force_bantime_input, // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
519 $brute_force_login_attempt_input, // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
520 $brute_force_login_time_input // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
521 ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
522 ?>
523 </div>
524 </div>
525 </div>
526
527 </div>
528 </div>
529
530 <!-- Throttle -->
531 <div class="sui-box-settings-row sui-disabled">
532 <div class="sui-box-settings-col-1">
533 <span class="sui-settings-label-with-tag">
534 <?php esc_html_e( 'Login Request Throttling', 'magic-login' ); ?>
535 <span class="sui-tag sui-tag-pro"><?php esc_html_e( 'Pro', 'magic-login' ); ?></span>
536 </span>
537 <span id="magic-login-throttle-description" class="sui-description"><?php esc_html_e( 'Limit login URL generation for the given time span.', 'magic-login' ); ?></span>
538 </div>
539 <div class="sui-box-settings-col-2">
540 <div class="sui-form-field">
541 <label for="enable_login_throttling" class="sui-toggle">
542 <input
543 type="checkbox"
544 value="1"
545 name="enable_login_throttling"
546 id="enable_login_throttling"
547 aria-describedby="magic-login-throttle-description"
548 aria-controls="magic-login-throttle-controls"
549 <?php checked( 1, $settings['enable_login_throttling'] ); ?>
550 >
551 <span class="sui-toggle-slider" aria-hidden="true"></span>
552 <span id="magic-login-throttle-label" class="sui-toggle-label"><?php esc_html_e( 'Enable throttling' ); ?></span>
553 <span class="sui-description">
554 </span>
555 </label>
556
557 <div style=" <?php echo( ! $settings['enable_login_throttling'] ? 'display:none' : '' ); ?>" tabindex="0" id="magic-login-throttle-controls" class="sui-toggle-content sui-border-frame">
558 <div class="sui-form-field">
559 <?php esc_html_e( 'Allow to create maximum' ); ?>
560 <input
561 id="login_throttling_limit"
562 name="login_throttling_limit"
563 min="1"
564 max="30"
565 type="number"
566 class="sui-form-control sui-field-has-suffix"
567 value="<?php echo absint( $settings['login_throttling_limit'] ); ?>"
568 >
569 <?php esc_html_e( 'login links from the same IP within' ); ?>
570 <input
571 id="login_throttling_time"
572 name="login_throttling_time"
573 min="1"
574 max="1440"
575 type="number"
576 class="sui-form-control sui-field-has-suffix"
577 value="<?php echo absint( $settings['login_throttling_time'] ); ?>"
578 >
579 <?php esc_html_e( 'minutes.' ); ?>
580 </div>
581 </div>
582 </div>
583
584 </div>
585 </div>
586
587 <!-- IP Address Check -->
588 <div class="sui-box-settings-row sui-disabled">
589 <div class="sui-box-settings-col-1">
590 <span class="sui-settings-label">
591 <?php esc_html_e( 'IP Check', 'magic-login' ); ?>
592 <span class="sui-tag sui-tag-pro"><?php esc_html_e( 'Pro', 'magic-login' ); ?></span>
593 </span>
594 <span class="sui-description">
595 <?php esc_html_e( 'The user should log in from the same IP that makes a login request. (except for the login links generated via CLI)', 'magic-login' ); ?>
596 </span>
597 </div>
598
599 <div class="sui-box-settings-col-2">
600 <div class="sui-form-field">
601 <label for="enable_ip_check" class="sui-toggle">
602 <input
603 type="checkbox"
604 value="1"
605 name="enable_ip_check"
606 id="enable_ip_check"
607 aria-labelledby="enable-ip-check-label"
608 <?php checked( 1, $settings['enable_ip_check'] ); ?>
609 >
610 <span class="sui-toggle-slider" aria-hidden="true"></span>
611 <span id="enable-ip-check-label" class="sui-toggle-label"><?php esc_html_e( 'Enable IP address check', 'magic-login' ); ?></span>
612 </label>
613 </div>
614 </div>
615 </div>
616
617 <!-- Allowed Domain -->
618 <div class="sui-box-settings-row sui-disabled">
619 <div class="sui-box-settings-col-1">
620 <span class="sui-settings-label">
621 <?php esc_html_e( 'Domain Restriction', 'magic-login' ); ?>
622 <span class="sui-tag sui-tag-pro"><?php esc_html_e( 'Pro', 'magic-login' ); ?></span>
623 </span>
624 <span id="domain-restriction-description" class="sui-description"><?php esc_html_e( 'Allow only listed domains to login via magic links.', 'magic-login' ); ?></span>
625 </div>
626 <div class="sui-box-settings-col-2">
627 <div class="sui-form-field">
628 <label for="enable_domain_restriction" class="sui-toggle">
629 <input
630 type="checkbox"
631 value="1"
632 name="enable_domain_restriction"
633 id="enable_domain_restriction"
634 aria-describedby="enable-domain-restriction-description"
635 aria-controls="enable-domain-restriction-controls"
636 <?php checked( 1, $settings['enable_domain_restriction'] ); ?>
637 >
638 <span class="sui-toggle-slider" aria-hidden="true"></span>
639 <span id="domain-restriction-label" class="sui-toggle-label"><?php esc_html_e( 'Enable domain restriction', 'magic-login' ); ?></span>
640 <span class="sui-description">
641 </span>
642 </label>
643
644 <div style=" <?php echo( ! $settings['enable_domain_restriction'] ? 'display:none' : '' ); ?>" tabindex="0" id="enable-domain-restriction-controls" class="sui-toggle-content sui-border-frame">
645 <div class="sui-form-field">
646 <textarea
647 placeholder="example.com"
648 id="allowed_domains"
649 name="allowed_domains"
650 class="sui-form-control"
651 aria-describedby="allowed-domains-description"
652 rows="7"
653 ><?php echo esc_textarea( $settings['allowed_domains'] ); ?></textarea>
654 <span id="allowed-domains-description" class="sui-description"><?php esc_html_e( 'Enter allowed domains line by line.', 'magic-login' ); ?></span>
655 </div>
656 </div>
657 </div>
658
659 </div>
660 </div>
661
662 <!-- E-mail Subject -->
663 <div class="sui-box-settings-row sui-disabled">
664 <div class="sui-box-settings-col-1">
665 <span class="sui-settings-label" id="email_subject_label">
666 <?php esc_html_e( 'Email Subject', 'magic-login' ); ?>
667 <span class="sui-tag sui-tag-pro"><?php esc_html_e( 'Pro', 'magic-login' ); ?></span>
668 </span>
669 </div>
670
671 <div class="sui-box-settings-col-2">
672 <div class="sui-form-field">
673 <input
674 name="email_subject"
675 id="email_subject"
676 class="sui-form-control"
677 aria-labelledby="email_subject_label"
678 type="text"
679 value="<?php echo esc_attr( $settings['email_subject'] ); ?>"
680 />
681 </div>
682 </div>
683 </div>
684
685 <!-- E-mail Content -->
686 <div class="sui-box-settings-row sui-disabled">
687 <div class="sui-box-settings-col-2">
688 <div class="sui-form-field">
689 <!-- Email body -->
690 <div class="sui-form-field">
691 <label class="sui-settings-label sui-label sui-label-editor" for="login_email"><?php esc_html_e( 'Email Content', 'magic-login' ); ?>
692 <span class="sui-tag sui-tag-pro"><?php esc_html_e( 'Pro', 'magic-login' ); ?></span>
693 </span>
694 </label>
695 <?php
696 \wp_editor(
697 $settings['login_email'],
698 'login_email',
699 array(
700 'media_buttons' => false,
701 'textarea_name' => 'login_email',
702 'editor_css' => '',
703 'editor_height' => 192,
704 'drag_drop_upload' => false,
705 'tinymce' => false,
706 )
707 );
708 ?>
709 <span class="sui-description"><?php esc_html_e( 'Supported placeholders: {{SITEURL}}, {{USERNAME}}, {{FIRST_NAME}}, {{LAST_NAME}}, {{FULL_NAME}}, {{DISPLAY_NAME}}, {{USER_EMAIL}, {{SITENAME}}, {{EXPIRES}}, {{MAGIC_LINK}}, {{EXPIRES_WITH_INTERVAL}}, {{TOKEN_VALIDITY_COUNT}}', 'magic-login' ); ?></span>
710 </div>
711 </div>
712 </div>
713 </div>
714
715 <!-- Login redirect settings -->
716 <div class="sui-box-settings-row sui-disabled">
717
718 <div class="sui-box-settings-col-1">
719 <span class="sui-settings-label"><?php esc_html_e( 'Login Redirect', 'magic-login' ); ?>
720 <span class="sui-tag sui-tag-pro"><?php esc_html_e( 'Pro', 'magic-login' ); ?></span>
721 </span>
722 <span class="sui-description"><?php esc_html_e( 'Redirect users to custom URL after login.', 'magic-login' ); ?></span>
723 </div>
724
725 <div class="sui-box-settings-col-2">
726
727 <div class="sui-form-field">
728 <label for="enable_login_redirection" class="sui-toggle">
729 <input
730 type="checkbox"
731 id="enable_login_redirection"
732 name="enable_login_redirection"
733 aria-labelledby="enable-login-redirection-label"
734 aria-controls="login-redirection-controls"
735 <?php checked( 1, $settings['enable_login_redirection'] ); ?>
736 >
737 <span class="sui-toggle-slider" aria-hidden="true"></span>
738 <span id="enable-login-redirection-label" class="sui-toggle-label"><?php esc_html_e( 'Enable custom login redirection', 'magic-login' ); ?></span>
739 </label>
740
741 <div style=" <?php echo( ! $settings['enable_login_redirection'] ? 'display:none' : '' ); ?>" tabindex="0" id="login-redirection-controls" class="sui-toggle-content sui-border-frame">
742
743 <div class="sui-form-field">
744 <label for="default_redirection_url" id="label-login-redirection-url" class="sui-label"><?php esc_html_e( 'Target URL:', 'magic-login' ); ?></label>
745 <input
746 placeholder="https://example.com/wp-admin"
747 id="default_redirection_url"
748 name="default_redirection_url"
749 class="sui-form-control"
750 aria-labelledby="label-login-redirection-url"
751 aria-describedby="error-login-redirection-url description-login-redirection-url"
752 value="<?php echo esc_url( $settings['default_redirection_url'] ); ?>"
753 />
754 <span id="description-login-redirection-url" class="sui-description"><?php esc_html_e( 'By default it redirects to admin dashboard', 'magic-login' ); ?></span>
755 </div>
756
757 <div class="sui-form-field">
758 <label for="enable_wp_login_redirection" class="sui-toggle">
759 <input type="checkbox"
760 value="1"
761 id="enable_wp_login_redirection"
762 name="enable_wp_login_redirection"
763 aria-labelledby="enable-wp-login-redirection-label"
764 aria-describedby="enable-wp-login-redirection-description"
765 aria-controls="enable-wp-login-redirection-controls"
766 <?php checked( 1, $settings['enable_wp_login_redirection'] ); ?>
767 >
768 <span class="sui-toggle-slider" aria-hidden="true"></span>
769 <span id="enable-wp-login-redirection-label" class="sui-toggle-label"><?php esc_html_e( 'Apply redirection to normal WordPress login too.', 'magic-login' ); ?></span>
770 <span class="sui-description"><?php esc_html_e( 'Enable this option to apply redirection rules for both password and passwordless logins, ensuring a seamless navigation experience post-login.', 'magic-login' ); ?></span>
771 </label>
772 </div>
773
774 <div class="sui-form-field">
775 <label for="enforce_redirection_rules" class="sui-toggle">
776 <input type="checkbox"
777 value="1"
778 id="enforce_redirection_rules"
779 name="enforce_redirection_rules"
780 aria-labelledby="enforce-redirection-rules-label"
781 aria-describedby="enforce-redirection-rules-description"
782 <?php checked( 1, $settings['enforce_redirection_rules'] ); ?>
783 >
784 <span class="sui-toggle-slider" aria-hidden="true"></span>
785 <span id="enforce-redirection-rules-label" class="sui-toggle-label"><?php esc_html_e( 'Override block/shortcode specific redirections.', 'magic-login' ); ?></span>
786 <span class="sui-description"><?php esc_html_e( 'When this option is enabled, block/shortcode-based redirections will be ignored.', 'magic-login' ); ?></span>
787 </label>
788 </div>
789
790 <div class="sui-form-field">
791 <label for="enable_role_based_redirection" class="sui-toggle">
792 <input type="checkbox"
793 value="1"
794 id="enable_role_based_redirection"
795 name="enable_role_based_redirection"
796 aria-labelledby="enable-role-based-redirection-label"
797 aria-describedby="enable-role-based-redirection-description"
798 aria-controls="enable-role-based-redirection-controls"
799 <?php checked( 1, $settings['enable_role_based_redirection'] ); ?>
800 >
801 <span class="sui-toggle-slider" aria-hidden="true"></span>
802 <span id="enable-role-based-redirection-label" class="sui-toggle-label"><?php esc_html_e( 'Enable role-based redirection.', 'magic-login' ); ?></span>
803 <span id="description-role-based-login-redirect" class="sui-description"><?php esc_html_e( 'Leave it blank to use default redirection rule.', 'magic-login' ); ?></span>
804 </label>
805 </div>
806
807 <div style=" <?php echo( ! $settings['enable_role_based_redirection'] ? 'display:none' : '' ); ?>" tabindex="0" id="enable-role-based-redirection-controls" class="sui-toggle-content sui-border-frame">
808 <?php
809 $all_roles = wp_roles();
810 $roles = $all_roles->roles ? $all_roles->roles : [];
811 ?>
812 <table class="sui-table">
813 <thead>
814 <tr>
815 <th><?php esc_html_e( 'Role', 'magic-login' ); ?></th>
816 <th><?php esc_html_e( 'Target URL', 'magic-login' ); ?></th>
817 </tr>
818 </thead>
819
820 <tbody>
821
822 <?php if ( $roles ) : ?>
823 <?php foreach ( $roles as $role => $role_details ) : ?>
824 <tr>
825 <td class="sui-table-item-title"><?php echo esc_html( $role_details['name'] ); ?></td>
826 <td><input
827 type="text"
828 name="redirect_role[<?php echo esc_attr( $role ); ?>]"
829 class="sui-form-control"
830 value="<?php echo( isset( $settings['role_based_redirection_rules'][ $role ] ) ? esc_url( $settings['role_based_redirection_rules'][ $role ] ) : '' ); ?>"
831 /></td>
832 </tr>
833 <?php endforeach; ?>
834 <?php endif; ?>
835
836 </tbody>
837
838 <tfoot>
839 </tfoot>
840
841 </table>
842 </div>
843
844 </div>
845
846 </div>
847 </div>
848
849 </div>
850
851 <!-- Ajaxify magic login request -->
852 <div class="sui-box-settings-row">
853 <div class="sui-box-settings-col-1">
854 <span class="sui-settings-label" for="ajax-magic-login"><?php esc_html_e( 'Enable AJAX', 'magic-login' ); ?></span>
855 <span class="sui-description"><?php esc_html_e( 'It will ajaxify the login requests on pages that use shortcode or block.', 'magic-login' ); ?></span>
856 </div>
857
858 <div class="sui-box-settings-col-2">
859 <div class="sui-form-field">
860 <label for="enable_ajax" class="sui-toggle">
861 <input type="checkbox"
862 value="1"
863 name="enable_ajax"
864 id="enable_ajax"
865 aria-labelledby="enable-ajax-form-label"
866 <?php checked( 1, $settings['enable_ajax'] ); ?>
867 >
868 <span class="sui-toggle-slider" aria-hidden="true"></span>
869 <span id="enable-ajax-form-label" class="sui-toggle-label"><?php esc_html_e( 'Enable AJAX for requesting magic login links.', 'magic-login' ); ?></span>
870 <span class="sui-description"><?php esc_html_e( 'It allows to send links without refreshing the current page.', 'magic-login' ); ?></span>
871 </label>
872 </div>
873 </div>
874 </div>
875
876 <!-- Enable REST API -->
877 <div class="sui-box-settings-row sui-disabled">
878 <div class="sui-box-settings-col-1">
879 <span class="sui-settings-label" for="enable_rest_api">
880 <?php esc_html_e( 'API Access', 'magic-login' ); ?>
881 <span class="sui-tag sui-tag-pro"><?php esc_html_e( 'Pro', 'magic-login' ); ?></span>
882 </span>
883 <span class="sui-description">
884 <?php
885 echo wp_kses_post(
886 sprintf(
887 /* translators: 1: Documentation URL 2: 'Learn More' text */
888 __( 'Allows external systems to interact with your application programmatically by enabling REST API endpoints. <a href="%1$s" target="_blank" rel="noopener">%2$s</a>', 'magic-login' ),
889 get_doc_url( 'docs/magic-login-rest-api/' ),
890 __( 'Learn More.', 'magic-login' )
891 )
892 );
893 ?>
894 </span>
895 </div>
896
897 <div class="sui-box-settings-col-2">
898 <div class="sui-form-field">
899 <label for="enable_rest_api" class="sui-toggle">
900 <input type="checkbox"
901 value="1"
902 name="enable_rest_api"
903 id="enable_rest_api"
904 aria-labelledby="enable-ajax-form-label"
905 <?php checked( 1, $settings['enable_rest_api'] ); ?>
906 >
907 <span class="sui-toggle-slider" aria-hidden="true"></span>
908 <span id="enable-rest-api-form-label" class="sui-toggle-label"><?php esc_html_e( 'Enable REST API.', 'magic-login' ); ?></span>
909
910 </label>
911 </div>
912 </div>
913 </div>
914
915 <!-- Reset Tokens -->
916 <div class="sui-box-settings-row">
917 <div class="sui-box-settings-col-1">
918 <span class="sui-settings-label"><?php esc_html_e( 'Reset Tokens', 'magic-login' ); ?></span>
919 <span id="reset-tokens" class="sui-description"><?php esc_html_e( 'If you want to clean all tokens at once click to reset button.', 'magic-login' ); ?></span>
920 </div>
921 <div class="sui-box-settings-col-2">
922 <div class="sui-form-field">
923 <input type="submit" name="reset_tokens" id="reset_tokens" aria-describedby="reset-tokens" class="sui-button sui-button-ghost" value="<?php echo esc_attr( __( 'Reset', 'magic-login' ) ); ?>">
924 </div>
925 </div>
926 </div>
927
928 <!-- Upsell ads -->
929 <div class="sui-box-settings-row sui-upsell-row">
930 <div class="sui-upsell-notice" style="padding-left: 0;">
931 <p><?php esc_html_e( 'With our pro version of magic login, you will unlock the advanced configurations of the plugin and get access to the WP-CLI command along with our premium support.' ); ?><br>
932 <a href="https://handyplugins.co/magic-login-pro/?utm_source=wp_admin&utm_medium=plugin&utm_campaign=settings_page" rel="noopener noreferrer nofollow" target="_blank" class="sui-button sui-button-purple" style="margin-top: 10px;color:#fff;"><?php esc_html_e( 'Try Magic Login Pro Today', 'magic-login' ); ?></a>
933 </p>
934 </div>
935 </div>
936
937
938 </div>
939