Theme My Login - Version 7.0.13

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 Icon 128x128 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 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->add_attribute( 'class', $args['class'] );
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->add_attribute( 'class', $class );
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
- return $this->content;
 
 
 
 
 
 
 
 
 
 
 
 
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
- /** This action is documented in wp-login.php */
266
- do_action( 'login_head' );
 
 
 
 
 
 
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
- $types = array( 'POST', 'GET', 'REQUEST' );
958
- if ( in_array( $type, $types ) ) {
959
- $types = array( $type );
960
- }
961
-
962
- foreach ( $types as $type ) {
963
- $type = '_' . $type;
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
- add_filter( 'registration_errors', 'tml_validate_new_user_password', 10, 1 );
87
- add_filter( 'tml_registration_redirect', 'tml_registration_redirect', 10, 2 );
 
 
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) 2018 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.12\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: 2018-12-24T13:13:41-05:00\n"
13
- "PO-Revision-Date: 2018-12-24T13:13:41-05:00\n"
14
  "X-Domain: theme-my-login\n"
15
 
16
- #: includes/functions.php:497
17
  #: admin/functions.php:278
18
  msgid "Theme My Login Actions"
19
  msgstr ""
20
 
21
- #: includes/functions.php:498
22
  msgid "Theme My Login Action"
23
  msgstr ""
24
 
25
- #: includes/functions.php:526
26
- #: includes/functions.php:553
27
- #: includes/functions.php:568
28
  msgid "TML Action"
29
  msgstr ""
30
 
31
- #: includes/functions.php:635
32
  msgid "<strong>ERROR</strong>: Please enter a password."
33
  msgstr ""
34
 
35
- #: includes/functions.php:638
36
  msgid "<strong>ERROR</strong>: Passwords may not contain the character \"\\\"."
37
  msgstr ""
38
 
39
- #: includes/functions.php:641
40
  msgid "<strong>ERROR</strong>: Please enter the same password in both password fields."
41
  msgstr ""
42
 
43
- #: includes/functions.php:658
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:423
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.0.2
6
- Stable tag: 7.0.12
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
- * [Moderation](https://thememylogin.com/extensions/moderation) allows you to moderate your users by requiring them to confirm their email or by requiring admin approval.
33
- * [Notifications](https://thememylogin.com/extensions/notification) allows you to send customized notification for many different actions that take place within your site.
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
- * [Redirection](https://thememylogin.com/extensions/redirection) allows you to redirect your users on login, logout and registration based on their role.
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.12
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.12' );
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.