Version Description
- Ensure proper retrieval of request parameters in all server configuration scenarios
- Ensure scripts and styles are loaded in the proper order on TML actions
- Ensure TML scripts are loaded in the footer
- Ensure password errors are only displayed where appropriate
- Ensure all strings not found in frontend core translation are translatable
- Implement callable usage of custom form field content
- Implement methods for manipulation of form field classes
- Add
tml_render_form
action hook - Add
tml_render_form_field
action hook - Add
tml_before_form
filter - Add
tml_after_form
filter - Add
tml_before_form_field
filter - Add
tml_after_form_field
filter - Add
tml_get_form_field_content
filter
Download this release
Release Info
Developer | jfarthing84 |
Plugin | Theme My Login |
Version | 7.0.13 |
Comparing to | |
See all releases |
Code changes from version 7.0.12 to 7.0.13
- admin/functions.php +0 -67
- admin/hooks.php +0 -3
- includes/class-theme-my-login-form-field.php +113 -26
- includes/class-theme-my-login-form.php +32 -0
- includes/class-theme-my-login-widget.php +2 -2
- includes/functions.php +25 -20
- includes/hooks.php +5 -2
- languages/theme-my-login.pot +23 -35
- readme.txt +22 -6
- theme-my-login.php +2 -2
admin/functions.php
CHANGED
@@ -333,73 +333,6 @@ function tml_admin_filter_edit_nav_menu_walker( $walker ) {
|
|
333 |
return $walker;
|
334 |
}
|
335 |
|
336 |
-
/**
|
337 |
-
* Ask for feedback when the plugin is deactivated.
|
338 |
-
*
|
339 |
-
* @since 7.0.8
|
340 |
-
*/
|
341 |
-
function tml_admin_deactivation_survey() {
|
342 |
-
global $pagenow, $wp_version;
|
343 |
-
|
344 |
-
// Bail if we're not on the plugins page
|
345 |
-
if ( 'plugins.php' != $pagenow ) {
|
346 |
-
return;
|
347 |
-
}
|
348 |
-
|
349 |
-
// Bail if we're not deactivating a plugin
|
350 |
-
if ( 'deactivate' != tml_get_request_value( 'action' ) ) {
|
351 |
-
return;
|
352 |
-
}
|
353 |
-
|
354 |
-
// Bail if not deactivating TML
|
355 |
-
if ( 'theme-my-login/theme-my-login.php' != tml_get_request_value( 'plugin' ) ) {
|
356 |
-
return;
|
357 |
-
}
|
358 |
-
|
359 |
-
// Bail if the survery has been submitted/ignored
|
360 |
-
if ( tml_get_request_value( 'skip_survey' ) ) {
|
361 |
-
return;
|
362 |
-
}
|
363 |
-
|
364 |
-
// Handle form submission
|
365 |
-
if ( tml_is_post_request() ) {
|
366 |
-
if ( $comments = tml_get_request_value( 'comments', 'post' ) ) {
|
367 |
-
$words = explode( ' ', trim( $comments ) );
|
368 |
-
if ( count( $words ) > 5 ) {
|
369 |
-
$message = wp_unslash( $comments ) . "\r\n\r\n";
|
370 |
-
$message .= implode( "\r\n", array(
|
371 |
-
'WP Version: ' . $wp_version,
|
372 |
-
'TML Version: ' . THEME_MY_LOGIN_VERSION,
|
373 |
-
'PHP Version: ' . phpversion(),
|
374 |
-
'Multisite: ' . ( is_multisite() ? 'Yes' : 'No' ),
|
375 |
-
) );
|
376 |
-
@wp_mail( 'deactivations@thememylogin.com', 'Deactivation Survey', $message );
|
377 |
-
}
|
378 |
-
}
|
379 |
-
wp_redirect( add_query_arg( 'skip_survey', 1 ) );
|
380 |
-
exit;
|
381 |
-
|
382 |
-
// Handle form output
|
383 |
-
} else {
|
384 |
-
ob_start(); ?>
|
385 |
-
|
386 |
-
<h2><?php esc_html_e( 'Deactivating Theme My Login', 'theme-my-login' ); ?></h2>
|
387 |
-
<p><?php esc_html_e( 'Before you go, please take a moment to let us know why you are deactivating:', 'theme-my-login' ); ?></p>
|
388 |
-
<form method="post">
|
389 |
-
<p>
|
390 |
-
<textarea name="comments" rows="8" cols="50" style="width: 100%;"></textarea><br />
|
391 |
-
<span style="color: #888; font-size: 13px; font-style: italic;"><?php esc_html_e( 'Submitting this form will also include your WordPress version, TML version, PHP version and whether this is a multisite installation or not.', 'theme-my-login' ); ?></span>
|
392 |
-
</p>
|
393 |
-
<p>
|
394 |
-
<input type="submit" name="submit_survey" value="<?php esc_attr_e( 'Submit & Deactivate', 'theme-my-login' ); ?>" class="button" style="margin-right: 10px;" />
|
395 |
-
<a href="<?php echo add_query_arg( 'skip_survey', 1 ); ?>" style="display: inline-block; font-size: 13px; height: 28px; line-height: 26px;"><?php esc_html_e( 'No thanks, just deactivate', 'theme-my-login' ); ?></a>
|
396 |
-
</p>
|
397 |
-
</form>
|
398 |
-
|
399 |
-
<?php wp_die( ob_get_clean(), __( 'Deactivating Theme My Login', 'theme-my-login' ) );
|
400 |
-
}
|
401 |
-
}
|
402 |
-
|
403 |
/**
|
404 |
* Filter the plugin action links.
|
405 |
*
|
333 |
return $walker;
|
334 |
}
|
335 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
336 |
/**
|
337 |
* Filter the plugin action links.
|
338 |
*
|
admin/hooks.php
CHANGED
@@ -40,9 +40,6 @@ add_action( 'admin_init', 'tml_admin_update' );
|
|
40 |
// Nav menus
|
41 |
add_action( 'admin_head-nav-menus.php', 'tml_admin_add_nav_menu_meta_box', 10 );
|
42 |
|
43 |
-
// Deactivation
|
44 |
-
add_action( 'admin_init', 'tml_admin_deactivation_survey' );
|
45 |
-
|
46 |
/**
|
47 |
* Add filters
|
48 |
*/
|
40 |
// Nav menus
|
41 |
add_action( 'admin_head-nav-menus.php', 'tml_admin_add_nav_menu_meta_box', 10 );
|
42 |
|
|
|
|
|
|
|
43 |
/**
|
44 |
* Add filters
|
45 |
*/
|
includes/class-theme-my-login-form-field.php
CHANGED
@@ -77,6 +77,13 @@ class Theme_My_Login_Form_Field {
|
|
77 |
*/
|
78 |
protected $attributes = array();
|
79 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
80 |
/**
|
81 |
* The field's parent form.
|
82 |
*
|
@@ -150,7 +157,7 @@ class Theme_My_Login_Form_Field {
|
|
150 |
}
|
151 |
|
152 |
if ( ! empty( $args['class'] ) ) {
|
153 |
-
$this->
|
154 |
} elseif ( 'hidden' != $this->get_type() ) {
|
155 |
if ( in_array( $args['type'], array( 'button', 'submit', 'reset' ) ) ) {
|
156 |
$class = 'tml-button';
|
@@ -159,7 +166,7 @@ class Theme_My_Login_Form_Field {
|
|
159 |
} else {
|
160 |
$class = 'tml-field';
|
161 |
}
|
162 |
-
$this->
|
163 |
}
|
164 |
|
165 |
if ( 'checkbox' == $args['type'] && ! empty( $args['checked'] ) ) {
|
@@ -334,7 +341,19 @@ class Theme_My_Login_Form_Field {
|
|
334 |
* @return string The field content.
|
335 |
*/
|
336 |
public function get_content() {
|
337 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
338 |
}
|
339 |
|
340 |
/**
|
@@ -342,34 +361,12 @@ class Theme_My_Login_Form_Field {
|
|
342 |
*
|
343 |
* @since 7.0
|
344 |
*
|
345 |
-
* @param string $content The field content.
|
346 |
*/
|
347 |
public function set_content( $content = '' ) {
|
348 |
$this->content = $content;
|
349 |
}
|
350 |
|
351 |
-
/**
|
352 |
-
* Get the wrap flag.
|
353 |
-
*
|
354 |
-
* @since 7.0
|
355 |
-
*
|
356 |
-
* @return bool The wrap flag.
|
357 |
-
*/
|
358 |
-
public function get_wrap() {
|
359 |
-
return $this->wrap;
|
360 |
-
}
|
361 |
-
|
362 |
-
/**
|
363 |
-
* Set the wrap flag.
|
364 |
-
*
|
365 |
-
* @since 7.0
|
366 |
-
*
|
367 |
-
* @param bool $wrap Whether to wrap the field or not.
|
368 |
-
*/
|
369 |
-
public function set_wrap( $wrap = true ) {
|
370 |
-
$this->wrap = (bool) $wrap;
|
371 |
-
}
|
372 |
-
|
373 |
/**
|
374 |
* Get the field options.
|
375 |
*
|
@@ -471,6 +468,58 @@ class Theme_My_Login_Form_Field {
|
|
471 |
return $this->attributes;
|
472 |
}
|
473 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
474 |
/**
|
475 |
* Set the priority.
|
476 |
*
|
@@ -521,6 +570,17 @@ class Theme_My_Login_Form_Field {
|
|
521 |
'control_after' => '',
|
522 |
) );
|
523 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
524 |
$args = wp_parse_args( $args, $defaults );
|
525 |
|
526 |
$output = '';
|
@@ -529,10 +589,25 @@ class Theme_My_Login_Form_Field {
|
|
529 |
$output .= sprintf( $args['before'], $this->get_name() ) . "\n";
|
530 |
}
|
531 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
532 |
$attributes = '';
|
533 |
foreach ( $this->get_attributes() as $key => $value ) {
|
534 |
$attributes .= ' ' . $key . '="' . esc_attr( $value ) . '"';
|
535 |
}
|
|
|
|
|
|
|
536 |
|
537 |
$label = '';
|
538 |
if ( $this->get_label() ) {
|
@@ -626,6 +701,18 @@ class Theme_My_Login_Form_Field {
|
|
626 |
$output .= '<span class="tml-description">' . $this->get_description() . "</span>\n";
|
627 |
}
|
628 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
629 |
if ( ! empty( $args['after'] ) ) {
|
630 |
$output .= $args['after'] . "\n";
|
631 |
}
|
77 |
*/
|
78 |
protected $attributes = array();
|
79 |
|
80 |
+
/**
|
81 |
+
* The field classes.
|
82 |
+
*
|
83 |
+
* @var array
|
84 |
+
*/
|
85 |
+
protected $classes = array();
|
86 |
+
|
87 |
/**
|
88 |
* The field's parent form.
|
89 |
*
|
157 |
}
|
158 |
|
159 |
if ( ! empty( $args['class'] ) ) {
|
160 |
+
$this->add_class( $args['class'] );
|
161 |
} elseif ( 'hidden' != $this->get_type() ) {
|
162 |
if ( in_array( $args['type'], array( 'button', 'submit', 'reset' ) ) ) {
|
163 |
$class = 'tml-button';
|
166 |
} else {
|
167 |
$class = 'tml-field';
|
168 |
}
|
169 |
+
$this->add_class( $class );
|
170 |
}
|
171 |
|
172 |
if ( 'checkbox' == $args['type'] && ! empty( $args['checked'] ) ) {
|
341 |
* @return string The field content.
|
342 |
*/
|
343 |
public function get_content() {
|
344 |
+
if ( is_callable( $this->content ) ) {
|
345 |
+
$content = call_user_func_array( $this->content, array( $this ) );
|
346 |
+
} else {
|
347 |
+
$content = $this->content;
|
348 |
+
}
|
349 |
+
|
350 |
+
/**
|
351 |
+
* Filters the form field content.
|
352 |
+
*
|
353 |
+
* @param string $content The field content.
|
354 |
+
* @param Theme_My_Login_Form_Field $field The field object.
|
355 |
+
*/
|
356 |
+
return apply_filters( 'tml_get_form_field_content', $content, $this );
|
357 |
}
|
358 |
|
359 |
/**
|
361 |
*
|
362 |
* @since 7.0
|
363 |
*
|
364 |
+
* @param string $content The field content or a callable function to generate it.
|
365 |
*/
|
366 |
public function set_content( $content = '' ) {
|
367 |
$this->content = $content;
|
368 |
}
|
369 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
370 |
/**
|
371 |
* Get the field options.
|
372 |
*
|
468 |
return $this->attributes;
|
469 |
}
|
470 |
|
471 |
+
/**
|
472 |
+
* Add a class.
|
473 |
+
*
|
474 |
+
* @since 7.0.13
|
475 |
+
*
|
476 |
+
* @param array|string $class The class or an array of classes.
|
477 |
+
*/
|
478 |
+
public function add_class( $class ) {
|
479 |
+
if ( ! is_array( $class ) ) {
|
480 |
+
$class = explode( ' ', $class );
|
481 |
+
}
|
482 |
+
$this->classes = array_unique( array_merge( $this->classes, $class ) );
|
483 |
+
}
|
484 |
+
|
485 |
+
/**
|
486 |
+
* Remove a class.
|
487 |
+
*
|
488 |
+
* @since 7.0.13
|
489 |
+
*
|
490 |
+
* @param string $class The class.
|
491 |
+
*/
|
492 |
+
public function remove_class( $class ) {
|
493 |
+
$classes = array_flip( $this->classes );
|
494 |
+
if ( isset( $classes[ $class ] ) ) {
|
495 |
+
unset( $classes[ $class ] );
|
496 |
+
$this->classes = array_keys( $classes );
|
497 |
+
}
|
498 |
+
}
|
499 |
+
|
500 |
+
/**
|
501 |
+
* Determine if the field has a given class.
|
502 |
+
*
|
503 |
+
* @since 7.0.13
|
504 |
+
*
|
505 |
+
* @param string $class The class.
|
506 |
+
* @return bool True if the field has the given class, false if not.
|
507 |
+
*/
|
508 |
+
public function has_class( $class ) {
|
509 |
+
return in_array( $class, $this->classes );
|
510 |
+
}
|
511 |
+
|
512 |
+
/**
|
513 |
+
* Get all classes.
|
514 |
+
*
|
515 |
+
* @since 7.0.13
|
516 |
+
*
|
517 |
+
* @return array The field classes.
|
518 |
+
*/
|
519 |
+
public function get_classes() {
|
520 |
+
return $this->classes;
|
521 |
+
}
|
522 |
+
|
523 |
/**
|
524 |
* Set the priority.
|
525 |
*
|
570 |
'control_after' => '',
|
571 |
) );
|
572 |
|
573 |
+
/**
|
574 |
+
* Fires before a form field is rendered.
|
575 |
+
*
|
576 |
+
* @since 7.0.13
|
577 |
+
*
|
578 |
+
* @param string $form_name The form name.
|
579 |
+
* @param string $field_name The field name.
|
580 |
+
* @param Theme_My_Login_Form_Field $field The field object.
|
581 |
+
*/
|
582 |
+
do_action( 'tml_render_form_field', $this->form->get_name(), $this->name, $this );
|
583 |
+
|
584 |
$args = wp_parse_args( $args, $defaults );
|
585 |
|
586 |
$output = '';
|
589 |
$output .= sprintf( $args['before'], $this->get_name() ) . "\n";
|
590 |
}
|
591 |
|
592 |
+
/**
|
593 |
+
* Filter the content before the field.
|
594 |
+
*
|
595 |
+
* @since 7.0.13
|
596 |
+
*
|
597 |
+
* @param string $output The output.
|
598 |
+
* @param string $form_name The form name.
|
599 |
+
* @param string $field_name The field name
|
600 |
+
* @param Theme_My_Login_Form_Field $field The form object.
|
601 |
+
*/
|
602 |
+
$output = apply_filters( 'tml_before_form_field', $output, $this->form->get_name(), $this->name, $this );
|
603 |
+
|
604 |
$attributes = '';
|
605 |
foreach ( $this->get_attributes() as $key => $value ) {
|
606 |
$attributes .= ' ' . $key . '="' . esc_attr( $value ) . '"';
|
607 |
}
|
608 |
+
if ( $classes = $this->get_classes() ) {
|
609 |
+
$attributes .= ' class="' . implode( ' ', $classes ) . '"';
|
610 |
+
}
|
611 |
|
612 |
$label = '';
|
613 |
if ( $this->get_label() ) {
|
701 |
$output .= '<span class="tml-description">' . $this->get_description() . "</span>\n";
|
702 |
}
|
703 |
|
704 |
+
/**
|
705 |
+
* Filter the content after the field.
|
706 |
+
*
|
707 |
+
* @since 7.0.13
|
708 |
+
*
|
709 |
+
* @param string $output The output.
|
710 |
+
* @param string $form_name The form name.
|
711 |
+
* @param string $field_name The field name
|
712 |
+
* @param Theme_My_Login_Form_Field $field The form object.
|
713 |
+
*/
|
714 |
+
$output = apply_filters( 'tml_after_form_field', $output, $this->form->get_name(), $this->name, $this );
|
715 |
+
|
716 |
if ( ! empty( $args['after'] ) ) {
|
717 |
$output .= $args['after'] . "\n";
|
718 |
}
|
includes/class-theme-my-login-form.php
CHANGED
@@ -543,6 +543,16 @@ class Theme_My_Login_Form {
|
|
543 |
'show_links' => true,
|
544 |
) );
|
545 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
546 |
$args = wp_parse_args( $args, $defaults );
|
547 |
|
548 |
$output = $args['before'];
|
@@ -558,6 +568,17 @@ class Theme_My_Login_Form {
|
|
558 |
$output .= ">\n";
|
559 |
}
|
560 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
561 |
$output .= $this->render_errors();
|
562 |
|
563 |
$output .= '<form name="' . esc_attr( $this->get_name() ) . '" action="' . esc_url( $this->get_action() ) . '" method="' . esc_attr( $this->get_method() ) . '"';
|
@@ -572,6 +593,17 @@ class Theme_My_Login_Form {
|
|
572 |
|
573 |
$output .= "</form>\n";
|
574 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
575 |
if ( $args['show_links'] ) {
|
576 |
$output .= $this->render_links();
|
577 |
}
|
543 |
'show_links' => true,
|
544 |
) );
|
545 |
|
546 |
+
/**
|
547 |
+
* Fires before rendering a form.
|
548 |
+
*
|
549 |
+
* @since 7.0.13
|
550 |
+
*
|
551 |
+
* @param string $name The form name.
|
552 |
+
* @param Theme_My_Login_Form $form The form object.
|
553 |
+
*/
|
554 |
+
do_action( 'tml_render_form', $this->name, $this );
|
555 |
+
|
556 |
$args = wp_parse_args( $args, $defaults );
|
557 |
|
558 |
$output = $args['before'];
|
568 |
$output .= ">\n";
|
569 |
}
|
570 |
|
571 |
+
/**
|
572 |
+
* Filter the content before the form.
|
573 |
+
*
|
574 |
+
* @since 7.0.13
|
575 |
+
*
|
576 |
+
* @param string $output The output.
|
577 |
+
* @param string $name The form name.
|
578 |
+
* @param Theme_My_Login_Form $form The form object.
|
579 |
+
*/
|
580 |
+
$output = apply_filters( 'tml_before_form', $output, $this->name, $this );
|
581 |
+
|
582 |
$output .= $this->render_errors();
|
583 |
|
584 |
$output .= '<form name="' . esc_attr( $this->get_name() ) . '" action="' . esc_url( $this->get_action() ) . '" method="' . esc_attr( $this->get_method() ) . '"';
|
593 |
|
594 |
$output .= "</form>\n";
|
595 |
|
596 |
+
/**
|
597 |
+
* Filter the content after the form.
|
598 |
+
*
|
599 |
+
* @since 7.0.13
|
600 |
+
*
|
601 |
+
* @param string $output The output.
|
602 |
+
* @param string $name The form name.
|
603 |
+
* @param Theme_My_Login_Form $form The form object.
|
604 |
+
*/
|
605 |
+
$output = apply_filters( 'tml_after_form', $output, $this->name, $this );
|
606 |
+
|
607 |
if ( $args['show_links'] ) {
|
608 |
$output .= $this->render_links();
|
609 |
}
|
includes/class-theme-my-login-widget.php
CHANGED
@@ -54,7 +54,7 @@ class Theme_My_Login_Widget extends WP_Widget {
|
|
54 |
}
|
55 |
|
56 |
if ( is_user_logged_in() ) {
|
57 |
-
$title = _x( 'Welcome', 'Howdy' );
|
58 |
} else {
|
59 |
$title = tml_get_action_title( $instance['action'] );
|
60 |
}
|
@@ -89,7 +89,7 @@ class Theme_My_Login_Widget extends WP_Widget {
|
|
89 |
'url' => admin_url(),
|
90 |
),
|
91 |
'profile' => array(
|
92 |
-
'title' => __( 'Profile' ),
|
93 |
'url' => admin_url( 'profile.php' ),
|
94 |
),
|
95 |
'logout' => array(
|
54 |
}
|
55 |
|
56 |
if ( is_user_logged_in() ) {
|
57 |
+
$title = _x( 'Welcome', 'Howdy', 'theme-my-login' );
|
58 |
} else {
|
59 |
$title = tml_get_action_title( $instance['action'] );
|
60 |
}
|
89 |
'url' => admin_url(),
|
90 |
),
|
91 |
'profile' => array(
|
92 |
+
'title' => __( 'Profile', 'theme-my-login' ),
|
93 |
'url' => admin_url( 'profile.php' ),
|
94 |
),
|
95 |
'logout' => array(
|
includes/functions.php
CHANGED
@@ -252,7 +252,7 @@ function tml_enqueue_scripts() {
|
|
252 |
$dependencies[] = 'password-strength-meter';
|
253 |
}
|
254 |
|
255 |
-
wp_enqueue_script( 'theme-my-login', THEME_MY_LOGIN_URL . "assets/scripts/theme-my-login$suffix.js", $dependencies, THEME_MY_LOGIN_VERSION );
|
256 |
wp_localize_script( 'theme-my-login', 'themeMyLogin', array(
|
257 |
'action' => tml_is_action() ? tml_get_action()->get_name() : '',
|
258 |
'errors' => tml_get_errors()->get_error_codes(),
|
@@ -261,10 +261,24 @@ function tml_enqueue_scripts() {
|
|
261 |
if ( tml_is_action() ) {
|
262 |
/** This action is documented in wp-login.php */
|
263 |
do_action( 'login_enqueue_scripts' );
|
|
|
|
|
264 |
|
265 |
-
|
266 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
267 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
268 |
}
|
269 |
|
270 |
/**
|
@@ -622,9 +636,6 @@ function tml_nav_menu_css_class( $classes, $item ) {
|
|
622 |
* @return WP_Error The registration errors.
|
623 |
*/
|
624 |
function tml_validate_new_user_password( $errors = null ) {
|
625 |
-
if ( ! tml_is_action( 'register' ) ) {
|
626 |
-
return $errors;
|
627 |
-
}
|
628 |
|
629 |
if ( empty( $errors ) ) {
|
630 |
$errors = new WP_Error();
|
@@ -950,21 +961,15 @@ function tml_set_data( $name, $value = '' ) {
|
|
950 |
* @return mixed The requested value.
|
951 |
*/
|
952 |
function tml_get_request_value( $key, $type = 'any' ) {
|
953 |
-
|
954 |
-
$value = '';
|
955 |
$type = strtoupper( $type );
|
956 |
-
|
957 |
-
|
958 |
-
|
959 |
-
$
|
960 |
-
}
|
961 |
-
|
962 |
-
|
963 |
-
$
|
964 |
-
if ( ! empty( $GLOBALS[ $type ] ) && array_key_exists( $key, $GLOBALS[ $type ] ) ) {
|
965 |
-
$value = $GLOBALS[ $type ][ $key ];
|
966 |
-
break;
|
967 |
-
}
|
968 |
}
|
969 |
|
970 |
if ( is_string( $value ) ) {
|
252 |
$dependencies[] = 'password-strength-meter';
|
253 |
}
|
254 |
|
255 |
+
wp_enqueue_script( 'theme-my-login', THEME_MY_LOGIN_URL . "assets/scripts/theme-my-login$suffix.js", $dependencies, THEME_MY_LOGIN_VERSION, true );
|
256 |
wp_localize_script( 'theme-my-login', 'themeMyLogin', array(
|
257 |
'action' => tml_is_action() ? tml_get_action()->get_name() : '',
|
258 |
'errors' => tml_get_errors()->get_error_codes(),
|
261 |
if ( tml_is_action() ) {
|
262 |
/** This action is documented in wp-login.php */
|
263 |
do_action( 'login_enqueue_scripts' );
|
264 |
+
}
|
265 |
+
}
|
266 |
|
267 |
+
/**
|
268 |
+
* Do the login_head action hook.
|
269 |
+
*
|
270 |
+
* @since 7.0.13
|
271 |
+
*/
|
272 |
+
function tml_do_login_head() {
|
273 |
+
if ( ! tml_is_action() ) {
|
274 |
+
return;
|
275 |
}
|
276 |
+
|
277 |
+
// This is already attached to "wp_head"
|
278 |
+
remove_action( 'login_head', 'wp_print_head_scripts', 9 );
|
279 |
+
|
280 |
+
/** This action is documented in wp-login.php */
|
281 |
+
do_action( 'login_head' );
|
282 |
}
|
283 |
|
284 |
/**
|
636 |
* @return WP_Error The registration errors.
|
637 |
*/
|
638 |
function tml_validate_new_user_password( $errors = null ) {
|
|
|
|
|
|
|
639 |
|
640 |
if ( empty( $errors ) ) {
|
641 |
$errors = new WP_Error();
|
961 |
* @return mixed The requested value.
|
962 |
*/
|
963 |
function tml_get_request_value( $key, $type = 'any' ) {
|
|
|
|
|
964 |
$type = strtoupper( $type );
|
965 |
+
if ( 'POST' == $type && array_key_exists( $key, $_POST ) ) {
|
966 |
+
$value = $_POST[ $key ];
|
967 |
+
} elseif ( 'GET' == $type && array_key_exists( $key, $_GET ) ) {
|
968 |
+
$value = $_GET[ $key ];
|
969 |
+
} elseif ( array_key_exists( $key, $_REQUEST ) ) {
|
970 |
+
$value = $_REQUEST[ $key ];
|
971 |
+
} else {
|
972 |
+
$value = '';
|
|
|
|
|
|
|
|
|
973 |
}
|
974 |
|
975 |
if ( is_string( $value ) ) {
|
includes/hooks.php
CHANGED
@@ -36,6 +36,7 @@ add_action( 'wp', 'tml_remove_default_actions_and_filters' );
|
|
36 |
add_action( 'template_redirect', 'tml_action_handler', 0 );
|
37 |
add_action( 'wp_enqueue_scripts', 'tml_enqueue_styles', 10 );
|
38 |
add_action( 'wp_enqueue_scripts', 'tml_enqueue_scripts', 10 );
|
|
|
39 |
|
40 |
// Registration
|
41 |
add_action( 'pre_user_login', 'tml_set_user_login' );
|
@@ -83,8 +84,10 @@ if ( tml_is_username_login_type() ) {
|
|
83 |
}
|
84 |
|
85 |
// Registration
|
86 |
-
|
87 |
-
add_filter( '
|
|
|
|
|
88 |
|
89 |
// Notifications
|
90 |
add_filter( 'wp_new_user_notification_email', 'tml_add_password_notice_to_new_user_notification_email' );
|
36 |
add_action( 'template_redirect', 'tml_action_handler', 0 );
|
37 |
add_action( 'wp_enqueue_scripts', 'tml_enqueue_styles', 10 );
|
38 |
add_action( 'wp_enqueue_scripts', 'tml_enqueue_scripts', 10 );
|
39 |
+
add_action( 'wp_head', 'tml_do_login_head', 10 );
|
40 |
|
41 |
// Registration
|
42 |
add_action( 'pre_user_login', 'tml_set_user_login' );
|
84 |
}
|
85 |
|
86 |
// Registration
|
87 |
+
if ( ! tml_is_wp_login() ) {
|
88 |
+
add_filter( 'registration_errors', 'tml_validate_new_user_password', 10 );
|
89 |
+
}
|
90 |
+
add_filter( 'tml_registration_redirect', 'tml_registration_redirect', 10, 2 );
|
91 |
|
92 |
// Notifications
|
93 |
add_filter( 'wp_new_user_notification_email', 'tml_add_password_notice_to_new_user_notification_email' );
|
languages/theme-my-login.pot
CHANGED
@@ -1,46 +1,46 @@
|
|
1 |
-
# Copyright (C)
|
2 |
# This file is distributed under the same license as the Theme My Login package.
|
3 |
msgid ""
|
4 |
msgstr ""
|
5 |
-
"Project-Id-Version: Theme My Login 7.0.
|
6 |
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/theme-my-login\n"
|
7 |
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
8 |
"Language-Team: LANGUAGE <LL@li.org>\n"
|
9 |
"MIME-Version: 1.0\n"
|
10 |
"Content-Type: text/plain; charset=UTF-8\n"
|
11 |
"Content-Transfer-Encoding: 8bit\n"
|
12 |
-
"POT-Creation-Date:
|
13 |
-
"PO-Revision-Date:
|
14 |
"X-Domain: theme-my-login\n"
|
15 |
|
16 |
-
#: includes/functions.php:
|
17 |
#: admin/functions.php:278
|
18 |
msgid "Theme My Login Actions"
|
19 |
msgstr ""
|
20 |
|
21 |
-
#: includes/functions.php:
|
22 |
msgid "Theme My Login Action"
|
23 |
msgstr ""
|
24 |
|
25 |
-
#: includes/functions.php:
|
26 |
-
#: includes/functions.php:
|
27 |
-
#: includes/functions.php:
|
28 |
msgid "TML Action"
|
29 |
msgstr ""
|
30 |
|
31 |
-
#: includes/functions.php:
|
32 |
msgid "<strong>ERROR</strong>: Please enter a password."
|
33 |
msgstr ""
|
34 |
|
35 |
-
#: includes/functions.php:
|
36 |
msgid "<strong>ERROR</strong>: Passwords may not contain the character \"\\\"."
|
37 |
msgstr ""
|
38 |
|
39 |
-
#: includes/functions.php:
|
40 |
msgid "<strong>ERROR</strong>: Please enter the same password in both password fields."
|
41 |
msgstr ""
|
42 |
|
43 |
-
#: includes/functions.php:
|
44 |
msgid "If you have already set your own password, you may disregard this email and use the password you have already set."
|
45 |
msgstr ""
|
46 |
|
@@ -63,6 +63,15 @@ msgstr ""
|
|
63 |
msgid "A login form for your site."
|
64 |
msgstr ""
|
65 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
66 |
#: includes/class-theme-my-login-widget.php:173
|
67 |
msgid "Show action links?"
|
68 |
msgstr ""
|
@@ -116,7 +125,7 @@ msgid "Theme My Login Extensions"
|
|
116 |
msgstr ""
|
117 |
|
118 |
#: admin/functions.php:112
|
119 |
-
#: admin/functions.php:
|
120 |
msgid "Extensions"
|
121 |
msgstr ""
|
122 |
|
@@ -133,27 +142,6 @@ msgstr ""
|
|
133 |
msgid "Get This Extension"
|
134 |
msgstr ""
|
135 |
|
136 |
-
#: admin/functions.php:386
|
137 |
-
#: admin/functions.php:399
|
138 |
-
msgid "Deactivating Theme My Login"
|
139 |
-
msgstr ""
|
140 |
-
|
141 |
-
#: admin/functions.php:387
|
142 |
-
msgid "Before you go, please take a moment to let us know why you are deactivating:"
|
143 |
-
msgstr ""
|
144 |
-
|
145 |
-
#: admin/functions.php:391
|
146 |
-
msgid "Submitting this form will also include your WordPress version, TML version, PHP version and whether this is a multisite installation or not."
|
147 |
-
msgstr ""
|
148 |
-
|
149 |
-
#: admin/functions.php:394
|
150 |
-
msgid "Submit & Deactivate"
|
151 |
-
msgstr ""
|
152 |
-
|
153 |
-
#: admin/functions.php:395
|
154 |
-
msgid "No thanks, just deactivate"
|
155 |
-
msgstr ""
|
156 |
-
|
157 |
#: admin/settings.php:96
|
158 |
msgid "Registration"
|
159 |
msgstr ""
|
1 |
+
# Copyright (C) 2019 Theme My Login
|
2 |
# This file is distributed under the same license as the Theme My Login package.
|
3 |
msgid ""
|
4 |
msgstr ""
|
5 |
+
"Project-Id-Version: Theme My Login 7.0.13\n"
|
6 |
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/theme-my-login\n"
|
7 |
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
8 |
"Language-Team: LANGUAGE <LL@li.org>\n"
|
9 |
"MIME-Version: 1.0\n"
|
10 |
"Content-Type: text/plain; charset=UTF-8\n"
|
11 |
"Content-Transfer-Encoding: 8bit\n"
|
12 |
+
"POT-Creation-Date: 2019-02-21T10:15:38-05:00\n"
|
13 |
+
"PO-Revision-Date: 2019-02-21T10:15:38-05:00\n"
|
14 |
"X-Domain: theme-my-login\n"
|
15 |
|
16 |
+
#: includes/functions.php:511
|
17 |
#: admin/functions.php:278
|
18 |
msgid "Theme My Login Actions"
|
19 |
msgstr ""
|
20 |
|
21 |
+
#: includes/functions.php:512
|
22 |
msgid "Theme My Login Action"
|
23 |
msgstr ""
|
24 |
|
25 |
+
#: includes/functions.php:540
|
26 |
+
#: includes/functions.php:567
|
27 |
+
#: includes/functions.php:582
|
28 |
msgid "TML Action"
|
29 |
msgstr ""
|
30 |
|
31 |
+
#: includes/functions.php:646
|
32 |
msgid "<strong>ERROR</strong>: Please enter a password."
|
33 |
msgstr ""
|
34 |
|
35 |
+
#: includes/functions.php:649
|
36 |
msgid "<strong>ERROR</strong>: Passwords may not contain the character \"\\\"."
|
37 |
msgstr ""
|
38 |
|
39 |
+
#: includes/functions.php:652
|
40 |
msgid "<strong>ERROR</strong>: Please enter the same password in both password fields."
|
41 |
msgstr ""
|
42 |
|
43 |
+
#: includes/functions.php:669
|
44 |
msgid "If you have already set your own password, you may disregard this email and use the password you have already set."
|
45 |
msgstr ""
|
46 |
|
63 |
msgid "A login form for your site."
|
64 |
msgstr ""
|
65 |
|
66 |
+
#: includes/class-theme-my-login-widget.php:57
|
67 |
+
msgctxt "Howdy"
|
68 |
+
msgid "Welcome"
|
69 |
+
msgstr ""
|
70 |
+
|
71 |
+
#: includes/class-theme-my-login-widget.php:92
|
72 |
+
msgid "Profile"
|
73 |
+
msgstr ""
|
74 |
+
|
75 |
#: includes/class-theme-my-login-widget.php:173
|
76 |
msgid "Show action links?"
|
77 |
msgstr ""
|
125 |
msgstr ""
|
126 |
|
127 |
#: admin/functions.php:112
|
128 |
+
#: admin/functions.php:356
|
129 |
msgid "Extensions"
|
130 |
msgstr ""
|
131 |
|
142 |
msgid "Get This Extension"
|
143 |
msgstr ""
|
144 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
145 |
#: admin/settings.php:96
|
146 |
msgid "Registration"
|
147 |
msgstr ""
|
readme.txt
CHANGED
@@ -2,8 +2,8 @@
|
|
2 |
Contributors: thememylogin, jfarthing84
|
3 |
Tags: login, register, password, branding, customize, widget, wp-login, wp-login.php
|
4 |
Requires at least: 4.6
|
5 |
-
Tested up to: 5.
|
6 |
-
Stable tag: 7.0.
|
7 |
|
8 |
The ultimate login branding solution! Theme My Login offers matchless customization of your WordPress user experience!
|
9 |
|
@@ -29,12 +29,12 @@ Ever wished that your WordPress login page matched the rest of your site? Your w
|
|
29 |
|
30 |
Boost your user experience even more with add-on plugins from our [extensions catalog](https://thememylogin.com/extensions). Some of our extensions include:
|
31 |
|
32 |
-
* [
|
33 |
-
* [
|
34 |
* [Profiles](https://thememylogin.com/extensions/profiles) lets your users edit their profile from the frontend of your site.
|
|
|
35 |
* [reCAPTCHA](https://thememylogin.com/extensions/recaptcha) enables Google reCAPTCHA support for your registration and login forms.
|
36 |
-
* [
|
37 |
-
* [Security](https://thememylogin.com/extensions/security) empowers you to secure you website and your users by offering brute-force protection via login throttling by IP address.
|
38 |
|
39 |
== Installation ==
|
40 |
|
@@ -59,6 +59,22 @@ Report bugs, suggest ideas and participate in development at [GitHub](https://gi
|
|
59 |
|
60 |
== Changelog ==
|
61 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
62 |
= 7.0.12 =
|
63 |
* Ensure that styles are more likely to be applied
|
64 |
* Ensure checkbox labels are inline
|
2 |
Contributors: thememylogin, jfarthing84
|
3 |
Tags: login, register, password, branding, customize, widget, wp-login, wp-login.php
|
4 |
Requires at least: 4.6
|
5 |
+
Tested up to: 5.1
|
6 |
+
Stable tag: 7.0.13
|
7 |
|
8 |
The ultimate login branding solution! Theme My Login offers matchless customization of your WordPress user experience!
|
9 |
|
29 |
|
30 |
Boost your user experience even more with add-on plugins from our [extensions catalog](https://thememylogin.com/extensions). Some of our extensions include:
|
31 |
|
32 |
+
* [Redirection](https://thememylogin.com/extensions/redirection) allows you to redirect your users on login, logout and registration based on their role.
|
33 |
+
* [Restrictions](https://thememylogin.com/extensions/restrictions) allows you to restrict posts/pages, widgets and nav menu items based on a users login status and/or role.
|
34 |
* [Profiles](https://thememylogin.com/extensions/profiles) lets your users edit their profile from the frontend of your site.
|
35 |
+
* [Moderation](https://thememylogin.com/extensions/moderation) allows you to moderate your users by requiring them to confirm their email or by requiring admin approval.
|
36 |
* [reCAPTCHA](https://thememylogin.com/extensions/recaptcha) enables Google reCAPTCHA support for your registration and login forms.
|
37 |
+
* [Social](https://thememylogin.com/extensions/social) allows you to allow your users to log in to your site using their favorite social providers.
|
|
|
38 |
|
39 |
== Installation ==
|
40 |
|
59 |
|
60 |
== Changelog ==
|
61 |
|
62 |
+
= 7.0.13 =
|
63 |
+
* Ensure proper retrieval of request parameters in all server configuration scenarios
|
64 |
+
* Ensure scripts and styles are loaded in the proper order on TML actions
|
65 |
+
* Ensure TML scripts are loaded in the footer
|
66 |
+
* Ensure password errors are only displayed where appropriate
|
67 |
+
* Ensure all strings not found in frontend core translation are translatable
|
68 |
+
* Implement callable usage of custom form field content
|
69 |
+
* Implement methods for manipulation of form field classes
|
70 |
+
* Add `tml_render_form` action hook
|
71 |
+
* Add `tml_render_form_field` action hook
|
72 |
+
* Add `tml_before_form` filter
|
73 |
+
* Add `tml_after_form` filter
|
74 |
+
* Add `tml_before_form_field` filter
|
75 |
+
* Add `tml_after_form_field` filter
|
76 |
+
* Add `tml_get_form_field_content` filter
|
77 |
+
|
78 |
= 7.0.12 =
|
79 |
* Ensure that styles are more likely to be applied
|
80 |
* Ensure checkbox labels are inline
|
theme-my-login.php
CHANGED
@@ -10,7 +10,7 @@
|
|
10 |
Plugin Name: Theme My Login
|
11 |
Plugin URI: https://thememylogin.com
|
12 |
Description: Creates an alternate login, registration and password recovery experience within your theme.
|
13 |
-
Version: 7.0.
|
14 |
Author: Theme My Login
|
15 |
Author URI: https://thememylogin.com
|
16 |
License: GPLv2
|
@@ -24,7 +24,7 @@ Network: true
|
|
24 |
*
|
25 |
* @since 7.0
|
26 |
*/
|
27 |
-
define( 'THEME_MY_LOGIN_VERSION', '7.0.
|
28 |
|
29 |
/**
|
30 |
* Stores the path to TML.
|
10 |
Plugin Name: Theme My Login
|
11 |
Plugin URI: https://thememylogin.com
|
12 |
Description: Creates an alternate login, registration and password recovery experience within your theme.
|
13 |
+
Version: 7.0.13
|
14 |
Author: Theme My Login
|
15 |
Author URI: https://thememylogin.com
|
16 |
License: GPLv2
|
24 |
*
|
25 |
* @since 7.0
|
26 |
*/
|
27 |
+
define( 'THEME_MY_LOGIN_VERSION', '7.0.13' );
|
28 |
|
29 |
/**
|
30 |
* Stores the path to TML.
|