Version Description
- Fix slow-loading extensions page
- Add dismissible notice of latest available extension
- Fix "stuck" license status by verifying when visiting the licenses page
- Ensure a form field object is returned when adding a form field
- Fix testcookie step causing a 403 error
- Fix links not being changed in emails sent from the Dashboard
Download this release
Release Info
Developer | jfarthing84 |
Plugin | Theme My Login |
Version | 7.0.8 |
Comparing to | |
See all releases |
Code changes from version 7.0.7 to 7.0.8
- admin/assets/scripts/theme-my-login-admin.js +31 -1
- admin/assets/scripts/theme-my-login-admin.min.js +1 -1
- admin/assets/styles/theme-my-login-admin.css +87 -0
- admin/assets/styles/theme-my-login-admin.min.css +1 -0
- admin/extensions.php +53 -110
- admin/functions.php +112 -5
- admin/hooks.php +10 -4
- admin/settings.php +1 -1
- includes/actions.php +1 -1
- includes/class-theme-my-login-form.php +3 -0
- includes/extensions.php +29 -1
- includes/forms.php +2 -1
- includes/functions.php +9 -5
- languages/theme-my-login.pot +48 -21
- readme.txt +11 -3
- theme-my-login.php +2 -2
admin/assets/scripts/theme-my-login-admin.js
CHANGED
@@ -1,5 +1,20 @@
|
|
1 |
( function( $ ) {
|
2 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
|
4 |
function initMetaBoxes() {
|
5 |
var metaboxes = $( '.postbox' );
|
@@ -24,3 +39,18 @@
|
|
24 |
}
|
25 |
}
|
26 |
} )( jQuery );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
( function( $ ) {
|
2 |
+
|
3 |
+
$( initAuthCheckForm );
|
4 |
+
|
5 |
+
function initAuthCheckForm() {
|
6 |
+
var authCheckForm = $( '#wp-auth-check-form' );
|
7 |
+
|
8 |
+
if ( authCheckForm.length ) {
|
9 |
+
authCheckForm.attr( 'data-src', tmlAdmin.interimLoginUrl );
|
10 |
+
}
|
11 |
+
}
|
12 |
+
} )( jQuery );
|
13 |
+
|
14 |
+
( function( $ ) {
|
15 |
+
if ( $( '#tml-settings' ).length ) {
|
16 |
+
$( initMetaBoxes );
|
17 |
+
}
|
18 |
|
19 |
function initMetaBoxes() {
|
20 |
var metaboxes = $( '.postbox' );
|
39 |
}
|
40 |
}
|
41 |
} )( jQuery );
|
42 |
+
|
43 |
+
( function( $ ) {
|
44 |
+
$( initNotices );
|
45 |
+
|
46 |
+
function initNotices() {
|
47 |
+
$( '.tml-notice' ).on( 'click', '.notice-dismiss', function( e ) {
|
48 |
+
var notice = $( e.delegateTarget );
|
49 |
+
|
50 |
+
$.post( ajaxurl, {
|
51 |
+
action: 'tml-dismiss-notice',
|
52 |
+
notice: notice.data( 'notice' )
|
53 |
+
} );
|
54 |
+
} );
|
55 |
+
}
|
56 |
+
} )( jQuery );
|
admin/assets/scripts/theme-my-login-admin.min.js
CHANGED
@@ -1 +1 @@
|
|
1 |
-
!function(
|
1 |
+
!function(o){o(function(){var t=o("#wp-auth-check-form");t.length&&t.attr("data-src",tmlAdmin.interimLoginUrl)})}(jQuery),function(o){o("#tml-settings").length&&o(function(){o(".postbox").length&&(postboxes.add_postbox_toggles(pagenow),o(".postbox").addClass("closed"),o(".metabox-holder").each(function(){var t=o(this);"off"==t.data("sortable")&&(t.find(".meta-box-sortables").sortable("destroy"),t.find(".postbox .hndle").css("cursor","default"))}))})}(jQuery),function(n){n(function(){n(".tml-notice").on("click",".notice-dismiss",function(t){var o=n(t.delegateTarget);n.post(ajaxurl,{action:"tml-dismiss-notice",notice:o.data("notice")})})})}(jQuery);
|
admin/assets/styles/theme-my-login-admin.css
CHANGED
@@ -0,0 +1,87 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
.tml-extensions-wrap {
|
2 |
+
margin: 0 -15px;
|
3 |
+
}
|
4 |
+
|
5 |
+
.tml-extensions-wrap:after {
|
6 |
+
content: "";
|
7 |
+
clear: both;
|
8 |
+
display: table;
|
9 |
+
}
|
10 |
+
|
11 |
+
.tml-extensions-wrap * {
|
12 |
+
-webkit-box-sizing: border-box;
|
13 |
+
box-sizing: border-box;
|
14 |
+
}
|
15 |
+
|
16 |
+
.tml-extension {
|
17 |
+
background-color: #fff;
|
18 |
+
border: 1px solid #ccc;
|
19 |
+
-webkit-box-shadow: 0 0 5px rgba(0, 0, 0, 0.15);
|
20 |
+
box-shadow: 0 0 5px rgba(0, 0, 0, 0.15);
|
21 |
+
float: left;
|
22 |
+
margin: 15px;
|
23 |
+
max-width: 350px;
|
24 |
+
}
|
25 |
+
|
26 |
+
@media (min-width: 576px) {
|
27 |
+
.tml-extension {
|
28 |
+
width: 40%;
|
29 |
+
}
|
30 |
+
}
|
31 |
+
|
32 |
+
@media (min-width: 783px) {
|
33 |
+
.tml-extension {
|
34 |
+
width: 30%;
|
35 |
+
}
|
36 |
+
}
|
37 |
+
|
38 |
+
.tml-extension-image {
|
39 |
+
height: auto;
|
40 |
+
max-width: 100%;
|
41 |
+
}
|
42 |
+
|
43 |
+
.tml-extension-body {
|
44 |
+
padding: 15px;
|
45 |
+
}
|
46 |
+
|
47 |
+
.tml-extension-body p {
|
48 |
+
min-height: 5em;
|
49 |
+
}
|
50 |
+
|
51 |
+
.tml-extension-title {
|
52 |
+
margin: 0 0 15px;
|
53 |
+
padding: 0;
|
54 |
+
}
|
55 |
+
|
56 |
+
.tml-extension-button {
|
57 |
+
background-color: #8d50c3;
|
58 |
+
color: #fff;
|
59 |
+
display: block;
|
60 |
+
font-size: 1.1em;
|
61 |
+
padding: 10px;
|
62 |
+
text-align: center;
|
63 |
+
text-decoration: none;
|
64 |
+
}
|
65 |
+
|
66 |
+
.tml-extension-button:hover {
|
67 |
+
color: #fff;
|
68 |
+
background-color: #7a3cb0;
|
69 |
+
}
|
70 |
+
|
71 |
+
.tml-extension-button:active,
|
72 |
+
.tml-extension-button:focus {
|
73 |
+
-webkit-box-shadow: 0 0 0 0.2em rgba(141, 80, 195, 0.5);
|
74 |
+
box-shadow: 0 0 0 0.2em rgba(141, 80, 195, 0.5);
|
75 |
+
color: #fff;
|
76 |
+
}
|
77 |
+
|
78 |
+
.tml-view-all-extensions-wrap {
|
79 |
+
padding: 15px 0;
|
80 |
+
text-align: center;
|
81 |
+
}
|
82 |
+
|
83 |
+
.tml-view-all-extensions-link {
|
84 |
+
display: inline-block;
|
85 |
+
font-size: 1.5em;
|
86 |
+
text-decoration: none;
|
87 |
+
}
|
admin/assets/styles/theme-my-login-admin.min.css
CHANGED
@@ -0,0 +1 @@
|
|
|
1 |
+
.tml-extensions-wrap{margin:0 -15px}.tml-extensions-wrap:after{content:"";clear:both;display:table}.tml-extensions-wrap *{-webkit-box-sizing:border-box;box-sizing:border-box}.tml-extension{background-color:#fff;border:1px solid #ccc;-webkit-box-shadow:0 0 5px rgba(0,0,0,.15);box-shadow:0 0 5px rgba(0,0,0,.15);float:left;margin:15px;max-width:350px}@media (min-width:576px){.tml-extension{width:40%}}@media (min-width:783px){.tml-extension{width:30%}}.tml-extension-image{height:auto;max-width:100%}.tml-extension-body{padding:15px}.tml-extension-body p{min-height:5em}.tml-extension-title{margin:0 0 15px;padding:0}.tml-extension-button{background-color:#8d50c3;color:#fff;display:block;font-size:1.1em;padding:10px;text-align:center;text-decoration:none}.tml-extension-button:hover{color:#fff;background-color:#7a3cb0}.tml-extension-button:active,.tml-extension-button:focus{-webkit-box-shadow:0 0 0 .2em rgba(141,80,195,.5);box-shadow:0 0 0 .2em rgba(141,80,195,.5);color:#fff}.tml-view-all-extensions-wrap{padding:15px 0;text-align:center}.tml-view-all-extensions-link{display:inline-block;font-size:1.5em;text-decoration:none}
|
admin/extensions.php
CHANGED
@@ -22,23 +22,34 @@ function tml_admin_get_extensions_feed( $args = array() ) {
|
|
22 |
'number' => 12,
|
23 |
) );
|
24 |
|
25 |
-
$
|
26 |
|
27 |
-
$
|
28 |
-
if (
|
29 |
-
|
30 |
-
}
|
31 |
|
32 |
-
|
33 |
-
|
|
|
|
|
|
|
|
|
34 |
|
35 |
-
|
36 |
-
|
37 |
-
|
|
|
|
|
|
|
38 |
|
39 |
-
|
40 |
|
41 |
-
|
|
|
|
|
|
|
|
|
|
|
42 |
}
|
43 |
|
44 |
/**
|
@@ -99,104 +110,6 @@ function tml_admin_extensions_page() {
|
|
99 |
<?php
|
100 |
}
|
101 |
|
102 |
-
/**
|
103 |
-
* Render the extensions styles.
|
104 |
-
*
|
105 |
-
* @since 7.0
|
106 |
-
*/
|
107 |
-
function tml_admin_extensions_styles() {
|
108 |
-
global $plugin_page;
|
109 |
-
|
110 |
-
if ( 'theme-my-login-extensions' != $plugin_page ) {
|
111 |
-
return;
|
112 |
-
}
|
113 |
-
?>
|
114 |
-
|
115 |
-
<style type="text/css">
|
116 |
-
.tml-extensions-wrap {
|
117 |
-
margin: 0 -15px;
|
118 |
-
}
|
119 |
-
|
120 |
-
.tml-extensions-wrap:after {
|
121 |
-
content: "";
|
122 |
-
clear: both;
|
123 |
-
display: table;
|
124 |
-
}
|
125 |
-
|
126 |
-
.tml-extensions-wrap * {
|
127 |
-
box-sizing: border-box;
|
128 |
-
}
|
129 |
-
|
130 |
-
.tml-extension {
|
131 |
-
background-color: #fff;
|
132 |
-
border: 1px solid #ccc;
|
133 |
-
box-shadow: 0 0 5px rgba(0, 0, 0, 0.15);
|
134 |
-
float: left;
|
135 |
-
margin: 15px;
|
136 |
-
}
|
137 |
-
|
138 |
-
.tml-extension-image {
|
139 |
-
height: auto;
|
140 |
-
max-width: 100%;
|
141 |
-
}
|
142 |
-
|
143 |
-
.tml-extension-body {
|
144 |
-
padding: 15px;
|
145 |
-
}
|
146 |
-
|
147 |
-
.tml-extension-title {
|
148 |
-
margin: 0 0 15px;
|
149 |
-
padding: 0;
|
150 |
-
}
|
151 |
-
|
152 |
-
.tml-extension-button {
|
153 |
-
background-color: #8d50c3;
|
154 |
-
color: #fff;
|
155 |
-
display: block;
|
156 |
-
font-size: 1.1em;
|
157 |
-
padding: 10px;
|
158 |
-
text-align: center;
|
159 |
-
text-decoration: none;
|
160 |
-
}
|
161 |
-
|
162 |
-
.tml-extension-button:hover {
|
163 |
-
color: #fff;
|
164 |
-
background-color: #7a3cb0;
|
165 |
-
}
|
166 |
-
|
167 |
-
.tml-extension-button:active,
|
168 |
-
.tml-extension-button:focus {
|
169 |
-
box-shadow: 0 0 0 0.2em rgba(141, 80, 195, 0.5);
|
170 |
-
color: #fff;
|
171 |
-
}
|
172 |
-
|
173 |
-
.tml-view-all-extensions-wrap {
|
174 |
-
padding: 15px 0;
|
175 |
-
text-align: center;
|
176 |
-
}
|
177 |
-
|
178 |
-
.tml-view-all-extensions-link {
|
179 |
-
display: inline-block;
|
180 |
-
font-size: 1.5em;
|
181 |
-
text-decoration: none;
|
182 |
-
}
|
183 |
-
|
184 |
-
@media (min-width: 576px) {
|
185 |
-
.tml-extension {
|
186 |
-
width: 40%;
|
187 |
-
}
|
188 |
-
}
|
189 |
-
|
190 |
-
@media (min-width: 783px) {
|
191 |
-
.tml-extension {
|
192 |
-
width: 30%;
|
193 |
-
}
|
194 |
-
}
|
195 |
-
</style>
|
196 |
-
|
197 |
-
<?php
|
198 |
-
}
|
199 |
-
|
200 |
/**
|
201 |
* Handle extension license activation and deactivation.
|
202 |
*
|
@@ -241,3 +154,33 @@ function tml_admin_handle_extension_licenses() {
|
|
241 |
}
|
242 |
}
|
243 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
22 |
'number' => 12,
|
23 |
) );
|
24 |
|
25 |
+
$transient_key = 'tml_extensions_feed-' . md5( http_build_query( $args ) );
|
26 |
|
27 |
+
$feed = get_site_transient( $transient_key );
|
28 |
+
if ( false === $feed ) {
|
29 |
+
$url = add_query_arg( $args, THEME_MY_LOGIN_EXTENSIONS_API_URL );
|
|
|
30 |
|
31 |
+
$response = wp_remote_get( $url, array(
|
32 |
+
'timeout' => 30,
|
33 |
+
) );
|
34 |
+
if ( is_wp_error( $response ) ) {
|
35 |
+
return $response;
|
36 |
+
}
|
37 |
|
38 |
+
$code = wp_remote_retrieve_response_code( $response );
|
39 |
+
$message = wp_remote_retrieve_response_message( $response );
|
40 |
+
|
41 |
+
if ( '200' != $code ) {
|
42 |
+
return new WP_Error( 'http_error_' . $code, $message );
|
43 |
+
}
|
44 |
|
45 |
+
$response = json_decode( wp_remote_retrieve_body( $response ) );
|
46 |
|
47 |
+
$feed = $response->products;
|
48 |
+
|
49 |
+
set_site_transient( $transient_key, $feed, DAY_IN_SECONDS / 2 );
|
50 |
+
}
|
51 |
+
|
52 |
+
return $feed;
|
53 |
}
|
54 |
|
55 |
/**
|
110 |
<?php
|
111 |
}
|
112 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
113 |
/**
|
114 |
* Handle extension license activation and deactivation.
|
115 |
*
|
154 |
}
|
155 |
}
|
156 |
}
|
157 |
+
|
158 |
+
/**
|
159 |
+
* Check that all of the licenses are valid.
|
160 |
+
*
|
161 |
+
* @since 7.0.8
|
162 |
+
*/
|
163 |
+
function tml_admin_check_extension_licenses() {
|
164 |
+
global $plugin_page;
|
165 |
+
|
166 |
+
if ( tml_is_post_request() ) {
|
167 |
+
return;
|
168 |
+
}
|
169 |
+
|
170 |
+
if ( 'theme-my-login-licenses' != $plugin_page ) {
|
171 |
+
return;
|
172 |
+
}
|
173 |
+
|
174 |
+
foreach ( tml_get_extensions() as $extension ) {
|
175 |
+
if ( empty( $extension->get_license_key() ) ) {
|
176 |
+
continue;
|
177 |
+
}
|
178 |
+
if ( 'valid' != $extension->get_license_status() ) {
|
179 |
+
continue;
|
180 |
+
}
|
181 |
+
$status = tml_check_extension_license( $extension );
|
182 |
+
if ( ! is_wp_error( $status ) ) {
|
183 |
+
$extension->set_license_status( $status );
|
184 |
+
}
|
185 |
+
}
|
186 |
+
}
|
admin/functions.php
CHANGED
@@ -121,14 +121,17 @@ function tml_admin_add_menu_items() {
|
|
121 |
*
|
122 |
* @since 7.0
|
123 |
*/
|
124 |
-
function
|
125 |
-
if ( ! tml_admin_is_plugin_page() ) {
|
126 |
-
return;
|
127 |
-
}
|
128 |
-
|
129 |
$suffix = SCRIPT_DEBUG ? '' : '.min';
|
130 |
|
|
|
131 |
wp_enqueue_script( 'theme-my-login-admin', THEME_MY_LOGIN_URL . "admin/assets/scripts/theme-my-login-admin$suffix.js", array( 'jquery', 'postbox' ), THEME_MY_LOGIN_VERSION );
|
|
|
|
|
|
|
|
|
|
|
|
|
132 |
}
|
133 |
|
134 |
/**
|
@@ -150,6 +153,46 @@ function tml_admin_notices() {
|
|
150 |
|
151 |
<?php
|
152 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
153 |
}
|
154 |
|
155 |
/**
|
@@ -277,3 +320,67 @@ function tml_admin_filter_edit_nav_menu_walker( $walker ) {
|
|
277 |
}
|
278 |
return $walker;
|
279 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
121 |
*
|
122 |
* @since 7.0
|
123 |
*/
|
124 |
+
function tml_admin_enqueue_style_and_scripts() {
|
|
|
|
|
|
|
|
|
125 |
$suffix = SCRIPT_DEBUG ? '' : '.min';
|
126 |
|
127 |
+
wp_enqueue_style( 'theme-my-login-admin', THEME_MY_LOGIN_URL . "admin/assets/styles/theme-my-login-admin$suffix.css", array(), THEME_MY_LOGIN_VERSION );
|
128 |
wp_enqueue_script( 'theme-my-login-admin', THEME_MY_LOGIN_URL . "admin/assets/scripts/theme-my-login-admin$suffix.js", array( 'jquery', 'postbox' ), THEME_MY_LOGIN_VERSION );
|
129 |
+
wp_localize_script( 'theme-my-login-admin', 'tmlAdmin', array(
|
130 |
+
'interimLoginUrl' => site_url( add_query_arg( array(
|
131 |
+
'interim-login' => 1,
|
132 |
+
'wp_lang' => get_user_locale(),
|
133 |
+
), 'wp-login.php' ), 'login' ),
|
134 |
+
) );
|
135 |
}
|
136 |
|
137 |
/**
|
153 |
|
154 |
<?php
|
155 |
}
|
156 |
+
|
157 |
+
$response = tml_admin_get_extensions_feed();
|
158 |
+
if ( ! empty( $response ) && ! is_wp_error( $response ) ) {
|
159 |
+
$extension = reset( $response );
|
160 |
+
|
161 |
+
$notice_key = 'new_extension-' . $extension->info->slug;
|
162 |
+
|
163 |
+
if ( ! in_array( $notice_key, get_site_option( '_tml_dismissed_notices', array() ) ) ) : ?>
|
164 |
+
|
165 |
+
<div class="notice notice-info tml-notice is-dismissible" data-notice="<?php echo $notice_key; ?>">
|
166 |
+
<?php echo implode( "\n", array(
|
167 |
+
'<p>' . __( 'A new <strong>Theme My Login</strong> extension is available!', 'theme-my-login' ) . '</p>',
|
168 |
+
'<p>' . sprintf( '<strong>%s</strong>: %s',
|
169 |
+
$extension->info->title,
|
170 |
+
$extension->info->excerpt
|
171 |
+
) . '</p>',
|
172 |
+
'<p>' . sprintf( '<a class="button button-primary" href="%s">%s</a>',
|
173 |
+
$extension->info->link,
|
174 |
+
__( 'Get This Extension', 'theme-my-login' )
|
175 |
+
) . '</p>',
|
176 |
+
) ); ?>
|
177 |
+
</div>
|
178 |
+
|
179 |
+
<?php endif;
|
180 |
+
}
|
181 |
+
}
|
182 |
+
|
183 |
+
/**
|
184 |
+
* Handle saving of notice dismissals.
|
185 |
+
*
|
186 |
+
* @since 7.0.8
|
187 |
+
*/
|
188 |
+
function tml_admin_ajax_dismiss_notice() {
|
189 |
+
if ( empty( $_POST['notice'] ) ) {
|
190 |
+
return;
|
191 |
+
}
|
192 |
+
$dismissed_notices = get_site_option( '_tml_dismissed_notices', array() );
|
193 |
+
$dismissed_notices[] = sanitize_key( $_POST['notice'] );
|
194 |
+
update_site_option( '_tml_dismissed_notices', $dismissed_notices );
|
195 |
+
wp_send_json_success();
|
196 |
}
|
197 |
|
198 |
/**
|
320 |
}
|
321 |
return $walker;
|
322 |
}
|
323 |
+
|
324 |
+
/**
|
325 |
+
* Ask for feedback when the plugin is deactivated.
|
326 |
+
*
|
327 |
+
* @since 7.0.8
|
328 |
+
*/
|
329 |
+
function tml_admin_deactivation_survey() {
|
330 |
+
global $pagenow, $wp_version;
|
331 |
+
|
332 |
+
// Bail if we're not on the plugins page
|
333 |
+
if ( 'plugins.php' != $pagenow ) {
|
334 |
+
return;
|
335 |
+
}
|
336 |
+
|
337 |
+
// Bail if we're not deactivating a plugin
|
338 |
+
if ( 'deactivate' != tml_get_request_value( 'action' ) ) {
|
339 |
+
return;
|
340 |
+
}
|
341 |
+
|
342 |
+
// Bail if not deactivating TML
|
343 |
+
if ( 'theme-my-login/theme-my-login.php' != tml_get_request_value( 'plugin' ) ) {
|
344 |
+
return;
|
345 |
+
}
|
346 |
+
|
347 |
+
// Bail if the survery has been submitted/ignored
|
348 |
+
if ( tml_get_request_value( 'skip_survey' ) ) {
|
349 |
+
return;
|
350 |
+
}
|
351 |
+
|
352 |
+
// Handle form submission
|
353 |
+
if ( tml_is_post_request() ) {
|
354 |
+
if ( $comments = tml_get_request_value( 'comments', 'post' ) ) {
|
355 |
+
$message = wp_unslash( $comments ) . "\r\n\r\n";
|
356 |
+
$message .= implode( "\r\n", array(
|
357 |
+
'WP Version: ' . $wp_version,
|
358 |
+
'TML Version: ' . THEME_MY_LOGIN_VERSION,
|
359 |
+
'PHP Version: ' . phpversion(),
|
360 |
+
'Multisite: ' . ( is_multisite() ? 'Yes' : 'No' ),
|
361 |
+
) );
|
362 |
+
@wp_mail( 'deactivations@thememylogin.com', 'Deactivation Survey', $message );
|
363 |
+
}
|
364 |
+
wp_redirect( add_query_arg( 'skip_survey', 1 ) );
|
365 |
+
exit;
|
366 |
+
|
367 |
+
// Handle form output
|
368 |
+
} else {
|
369 |
+
ob_start(); ?>
|
370 |
+
|
371 |
+
<h2><?php esc_html_e( 'Deactivating Theme My Login', 'theme-my-login' ); ?></h2>
|
372 |
+
<p><?php esc_html_e( 'Before you go, please take a moment to let us know why you are deactivating:', 'theme-my-login' ); ?></p>
|
373 |
+
<form method="post">
|
374 |
+
<p>
|
375 |
+
<textarea name="comments" rows="8" cols="50" style="width: 100%;"></textarea><br />
|
376 |
+
<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>
|
377 |
+
</p>
|
378 |
+
<p>
|
379 |
+
<input type="submit" name="submit_survey" value="<?php esc_attr_e( 'Submit & Deactivate', 'theme-my-login' ); ?>" class="button" style="margin-right: 10px;" />
|
380 |
+
<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>
|
381 |
+
</p>
|
382 |
+
</form>
|
383 |
+
|
384 |
+
<?php wp_die( ob_get_clean(), __( 'Deactivating Theme My Login', 'theme-my-login' ) );
|
385 |
+
}
|
386 |
+
}
|
admin/hooks.php
CHANGED
@@ -8,12 +8,15 @@
|
|
8 |
*/
|
9 |
|
10 |
// General
|
11 |
-
add_action( 'admin_enqueue_scripts', '
|
12 |
-
|
|
|
|
|
|
|
13 |
|
14 |
// Extensions
|
15 |
-
add_action( 'admin_init',
|
16 |
-
add_action( '
|
17 |
|
18 |
// Settings
|
19 |
if ( is_multisite() ) {
|
@@ -32,3 +35,6 @@ add_action( 'admin_init', 'tml_admin_update' );
|
|
32 |
// Nav menus
|
33 |
add_action( 'admin_head-nav-menus.php', 'tml_admin_add_nav_menu_meta_box', 10 );
|
34 |
add_filter( 'wp_edit_nav_menu_walker', 'tml_admin_filter_edit_nav_menu_walker', 99 );
|
|
|
|
|
|
8 |
*/
|
9 |
|
10 |
// General
|
11 |
+
add_action( 'admin_enqueue_scripts', 'tml_admin_enqueue_style_and_scripts' );
|
12 |
+
|
13 |
+
// Notices
|
14 |
+
add_action( 'admin_notices', 'tml_admin_notices' );
|
15 |
+
add_action( 'wp_ajax_tml-dismiss-notice', 'tml_admin_ajax_dismiss_notice' );
|
16 |
|
17 |
// Extensions
|
18 |
+
add_action( 'admin_init', 'tml_admin_handle_extension_licenses' );
|
19 |
+
add_action( 'admin_init', 'tml_admin_check_extension_licenses' );
|
20 |
|
21 |
// Settings
|
22 |
if ( is_multisite() ) {
|
35 |
// Nav menus
|
36 |
add_action( 'admin_head-nav-menus.php', 'tml_admin_add_nav_menu_meta_box', 10 );
|
37 |
add_filter( 'wp_edit_nav_menu_walker', 'tml_admin_filter_edit_nav_menu_walker', 99 );
|
38 |
+
|
39 |
+
// Deactivation
|
40 |
+
add_action( 'admin_init', 'tml_admin_deactivation_survey' );
|
admin/settings.php
CHANGED
@@ -467,7 +467,7 @@ function tml_admin_settings_page() {
|
|
467 |
<h1><?php echo esc_html( $title ) ?></h1>
|
468 |
<hr class="wp-header-end">
|
469 |
|
470 |
-
<form action="<?php echo is_network_admin() ? '' : 'options.php'; ?>" method="post">
|
471 |
|
472 |
<?php settings_fields( $plugin_page ); ?>
|
473 |
|
467 |
<h1><?php echo esc_html( $title ) ?></h1>
|
468 |
<hr class="wp-header-end">
|
469 |
|
470 |
+
<form id="tml-settings" action="<?php echo is_network_admin() ? '' : 'options.php'; ?>" method="post">
|
471 |
|
472 |
<?php settings_fields( $plugin_page ); ?>
|
473 |
|
includes/actions.php
CHANGED
@@ -389,7 +389,7 @@ function tml_login_handler() {
|
|
389 |
if ( ! is_wp_error( $user ) && empty( $_COOKIE[ LOGGED_IN_COOKIE ] ) ) {
|
390 |
$redirect_to = add_query_arg( array(
|
391 |
'testcookie' => 1,
|
392 |
-
'redirect_to' => $redirect_to
|
393 |
) );
|
394 |
wp_redirect( $redirect_to );
|
395 |
exit;
|
389 |
if ( ! is_wp_error( $user ) && empty( $_COOKIE[ LOGGED_IN_COOKIE ] ) ) {
|
390 |
$redirect_to = add_query_arg( array(
|
391 |
'testcookie' => 1,
|
392 |
+
'redirect_to' => urlencode( $redirect_to ),
|
393 |
) );
|
394 |
wp_redirect( $redirect_to );
|
395 |
exit;
|
includes/class-theme-my-login-form.php
CHANGED
@@ -259,7 +259,10 @@ class Theme_My_Login_Form {
|
|
259 |
* @param TML_Form_Field $field The field object.
|
260 |
*/
|
261 |
public function add_field( Theme_My_Login_Form_Field $field ) {
|
|
|
262 |
$this->fields[ $field->get_name() ] = $field;
|
|
|
|
|
263 |
}
|
264 |
|
265 |
/**
|
259 |
* @param TML_Form_Field $field The field object.
|
260 |
*/
|
261 |
public function add_field( Theme_My_Login_Form_Field $field ) {
|
262 |
+
|
263 |
$this->fields[ $field->get_name() ] = $field;
|
264 |
+
|
265 |
+
return $field;
|
266 |
}
|
267 |
|
268 |
/**
|
includes/extensions.php
CHANGED
@@ -253,6 +253,34 @@ function tml_deactivate_extension_license( $extension ) {
|
|
253 |
return $response->license;
|
254 |
}
|
255 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
256 |
/**
|
257 |
* Make an API call to an extension's store.
|
258 |
*
|
@@ -282,7 +310,7 @@ function tml_extension_api_call( $url, $args = array() ) {
|
|
282 |
) );
|
283 |
|
284 |
$response = wp_remote_post( $url, array(
|
285 |
-
'timeout' =>
|
286 |
'sslverify' => true,
|
287 |
'body' => $args,
|
288 |
) );
|
253 |
return $response->license;
|
254 |
}
|
255 |
|
256 |
+
/**
|
257 |
+
* Check an extenstion's license status.
|
258 |
+
*
|
259 |
+
* @since 7.0.8
|
260 |
+
*
|
261 |
+
* @param string|Theme_My_Login_Extension $extension The extension name or object.
|
262 |
+
* @return bool|string|WP_Error The license status on success, false if the
|
263 |
+
* extension doesn't exist or WP_Error on failure.
|
264 |
+
*/
|
265 |
+
function tml_check_extension_license( $extension ) {
|
266 |
+
if ( ! $extension = tml_get_extension( $extension ) ) {
|
267 |
+
return false;
|
268 |
+
}
|
269 |
+
|
270 |
+
$response = tml_extension_api_call( $extension->get_store_url(), array(
|
271 |
+
'edd_action' => 'check_license',
|
272 |
+
'license' => $extension->get_license_key(),
|
273 |
+
'item_id' => $extension->get_item_id(),
|
274 |
+
'url' => home_url(),
|
275 |
+
) );
|
276 |
+
|
277 |
+
if ( empty( $response ) ) {
|
278 |
+
return new WP_Error( 'http_error', __( 'An error occurred, please try again.', 'theme-my-login' ) );
|
279 |
+
}
|
280 |
+
|
281 |
+
return $response->license;
|
282 |
+
}
|
283 |
+
|
284 |
/**
|
285 |
* Make an API call to an extension's store.
|
286 |
*
|
310 |
) );
|
311 |
|
312 |
$response = wp_remote_post( $url, array(
|
313 |
+
'timeout' => 30,
|
314 |
'sslverify' => true,
|
315 |
'body' => $args,
|
316 |
) );
|
includes/forms.php
CHANGED
@@ -373,6 +373,7 @@ function tml_form_exists( $form ) {
|
|
373 |
* @param array {
|
374 |
* Optional. An array of arguments for registering a form field.
|
375 |
* }
|
|
|
376 |
*/
|
377 |
function tml_add_form_field( $form, $field, $args = array() ) {
|
378 |
|
@@ -384,7 +385,7 @@ function tml_add_form_field( $form, $field, $args = array() ) {
|
|
384 |
$field = new Theme_My_Login_Form_Field( $form, $field, $args );
|
385 |
}
|
386 |
|
387 |
-
$form->add_field( $field );
|
388 |
}
|
389 |
|
390 |
/**
|
373 |
* @param array {
|
374 |
* Optional. An array of arguments for registering a form field.
|
375 |
* }
|
376 |
+
* @return Theme_My_Login_Form_Field The field object.
|
377 |
*/
|
378 |
function tml_add_form_field( $form, $field, $args = array() ) {
|
379 |
|
385 |
$field = new Theme_My_Login_Form_Field( $form, $field, $args );
|
386 |
}
|
387 |
|
388 |
+
return $form->add_field( $field );
|
389 |
}
|
390 |
|
391 |
/**
|
includes/functions.php
CHANGED
@@ -270,11 +270,6 @@ function tml_filter_site_url( $url, $path, $scheme ) {
|
|
270 |
return $url;
|
271 |
}
|
272 |
|
273 |
-
// Bail if currently in /wp-admin
|
274 |
-
if ( is_admin() && did_action( 'admin_init' ) ) {
|
275 |
-
return $url;
|
276 |
-
}
|
277 |
-
|
278 |
// Bail if currently customizing
|
279 |
if ( is_customize_preview() ) {
|
280 |
return $url;
|
@@ -295,6 +290,15 @@ function tml_filter_site_url( $url, $path, $scheme ) {
|
|
295 |
parse_str( htmlspecialchars_decode( $parsed_url['query'] ), $query );
|
296 |
}
|
297 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
298 |
// Determine the action
|
299 |
switch ( $path ) {
|
300 |
case 'wp-login.php' :
|
270 |
return $url;
|
271 |
}
|
272 |
|
|
|
|
|
|
|
|
|
|
|
273 |
// Bail if currently customizing
|
274 |
if ( is_customize_preview() ) {
|
275 |
return $url;
|
290 |
parse_str( htmlspecialchars_decode( $parsed_url['query'] ), $query );
|
291 |
}
|
292 |
|
293 |
+
/**
|
294 |
+
* Bail if the URL is an interim-login URL
|
295 |
+
*
|
296 |
+
* @see https://core.trac.wordpress.org/ticket/31821
|
297 |
+
*/
|
298 |
+
if ( isset( $query['interim-login'] ) ) {
|
299 |
+
return $url;
|
300 |
+
}
|
301 |
+
|
302 |
// Determine the action
|
303 |
switch ( $path ) {
|
304 |
case 'wp-login.php' :
|
languages/theme-my-login.pot
CHANGED
@@ -2,45 +2,45 @@
|
|
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: 2018-
|
13 |
-
"PO-Revision-Date: 2018-
|
14 |
"X-Domain: theme-my-login\n"
|
15 |
|
16 |
-
#: includes/functions.php:
|
17 |
-
#: admin/functions.php:
|
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 |
|
@@ -74,6 +74,7 @@ msgstr ""
|
|
74 |
#: includes/extensions.php:189
|
75 |
#: includes/extensions.php:220
|
76 |
#: includes/extensions.php:250
|
|
|
77 |
msgid "An error occurred, please try again."
|
78 |
msgstr ""
|
79 |
|
@@ -118,10 +119,40 @@ msgstr ""
|
|
118 |
msgid "Extensions"
|
119 |
msgstr ""
|
120 |
|
121 |
-
#: admin/functions.php:
|
122 |
msgid "As a token of our gratitude, we would like to offer your an incentive for upgrading Theme My Login to version 7.0. For a limited time, we are offering a <strong>20% discount</strong> when you use the code <strong>SAVINGFACE</strong> at checkout. Act now - this offer won't last!"
|
123 |
msgstr ""
|
124 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
125 |
#: admin/settings.php:96
|
126 |
msgid "Registration"
|
127 |
msgstr ""
|
@@ -255,19 +286,15 @@ msgstr ""
|
|
255 |
msgid "On this page, you can configure the settings for the Theme My Login %s extension."
|
256 |
msgstr ""
|
257 |
|
258 |
-
#: admin/extensions.php:
|
259 |
msgid "Whoops! Looks like there was an error fetching extensions from the server. Please try again."
|
260 |
msgstr ""
|
261 |
|
262 |
-
#: admin/extensions.php:
|
263 |
msgid "Error: %s"
|
264 |
msgstr ""
|
265 |
|
266 |
-
#: admin/extensions.php:
|
267 |
-
msgid "Get This Extension"
|
268 |
-
msgstr ""
|
269 |
-
|
270 |
-
#: admin/extensions.php:94
|
271 |
msgid "View All Extensions"
|
272 |
msgstr ""
|
273 |
|
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.8\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-07-12T12:11:46-04:00\n"
|
13 |
+
"PO-Revision-Date: 2018-07-12T12:11:46-04:00\n"
|
14 |
"X-Domain: theme-my-login\n"
|
15 |
|
16 |
+
#: includes/functions.php:406
|
17 |
+
#: admin/functions.php:266
|
18 |
msgid "Theme My Login Actions"
|
19 |
msgstr ""
|
20 |
|
21 |
+
#: includes/functions.php:407
|
22 |
msgid "Theme My Login Action"
|
23 |
msgstr ""
|
24 |
|
25 |
+
#: includes/functions.php:435
|
26 |
+
#: includes/functions.php:462
|
27 |
+
#: includes/functions.php:477
|
28 |
msgid "TML Action"
|
29 |
msgstr ""
|
30 |
|
31 |
+
#: includes/functions.php:539
|
32 |
msgid "<strong>ERROR</strong>: Please enter a password."
|
33 |
msgstr ""
|
34 |
|
35 |
+
#: includes/functions.php:542
|
36 |
msgid "<strong>ERROR</strong>: Passwords may not contain the character \"\\\"."
|
37 |
msgstr ""
|
38 |
|
39 |
+
#: includes/functions.php:545
|
40 |
msgid "<strong>ERROR</strong>: Please enter the same password in both password fields."
|
41 |
msgstr ""
|
42 |
|
43 |
+
#: includes/functions.php:561
|
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 |
|
74 |
#: includes/extensions.php:189
|
75 |
#: includes/extensions.php:220
|
76 |
#: includes/extensions.php:250
|
77 |
+
#: includes/extensions.php:278
|
78 |
msgid "An error occurred, please try again."
|
79 |
msgstr ""
|
80 |
|
119 |
msgid "Extensions"
|
120 |
msgstr ""
|
121 |
|
122 |
+
#: admin/functions.php:151
|
123 |
msgid "As a token of our gratitude, we would like to offer your an incentive for upgrading Theme My Login to version 7.0. For a limited time, we are offering a <strong>20% discount</strong> when you use the code <strong>SAVINGFACE</strong> at checkout. Act now - this offer won't last!"
|
124 |
msgstr ""
|
125 |
|
126 |
+
#: admin/functions.php:167
|
127 |
+
msgid "A new <strong>Theme My Login</strong> extension is available!"
|
128 |
+
msgstr ""
|
129 |
+
|
130 |
+
#: admin/functions.php:174
|
131 |
+
#: admin/extensions.php:95
|
132 |
+
msgid "Get This Extension"
|
133 |
+
msgstr ""
|
134 |
+
|
135 |
+
#: admin/functions.php:371
|
136 |
+
#: admin/functions.php:384
|
137 |
+
msgid "Deactivating Theme My Login"
|
138 |
+
msgstr ""
|
139 |
+
|
140 |
+
#: admin/functions.php:372
|
141 |
+
msgid "Before you go, please take a moment to let us know why you are deactivating:"
|
142 |
+
msgstr ""
|
143 |
+
|
144 |
+
#: admin/functions.php:376
|
145 |
+
msgid "Submitting this form will also include your WordPress version, TML version, PHP version and whether this is a multisite installation or not."
|
146 |
+
msgstr ""
|
147 |
+
|
148 |
+
#: admin/functions.php:379
|
149 |
+
msgid "Submit & Deactivate"
|
150 |
+
msgstr ""
|
151 |
+
|
152 |
+
#: admin/functions.php:380
|
153 |
+
msgid "No thanks, just deactivate"
|
154 |
+
msgstr ""
|
155 |
+
|
156 |
#: admin/settings.php:96
|
157 |
msgid "Registration"
|
158 |
msgstr ""
|
286 |
msgid "On this page, you can configure the settings for the Theme My Login %s extension."
|
287 |
msgstr ""
|
288 |
|
289 |
+
#: admin/extensions.php:72
|
290 |
msgid "Whoops! Looks like there was an error fetching extensions from the server. Please try again."
|
291 |
msgstr ""
|
292 |
|
293 |
+
#: admin/extensions.php:73
|
294 |
msgid "Error: %s"
|
295 |
msgstr ""
|
296 |
|
297 |
+
#: admin/extensions.php:105
|
|
|
|
|
|
|
|
|
298 |
msgid "View All Extensions"
|
299 |
msgstr ""
|
300 |
|
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: 4.9.
|
6 |
-
Stable tag: 7.0.
|
7 |
|
8 |
The ultimate login branding solution! Theme My Login offers matchless customization of your WordPress user experience!
|
9 |
|
@@ -59,11 +59,19 @@ Report bugs, suggest ideas and participate in development at [GitHub](https://gi
|
|
59 |
|
60 |
== Changelog ==
|
61 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
62 |
= 7.0.7 =
|
63 |
* Fix sorting of form fields
|
64 |
* Fix "Remember Me" not being clickable
|
65 |
* Add "checked" property to form fields to allow for easy checking of checkboxes
|
66 |
-
* Add plugin textdomain to strings not found in front-end core
|
67 |
* Add `tml_send_new_user_notification` filter
|
68 |
* Add `tml_send_new_user_admin_notification` filter
|
69 |
* Add `tml_retrieve_password_email` filter
|
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: 4.9.7
|
6 |
+
Stable tag: 7.0.8
|
7 |
|
8 |
The ultimate login branding solution! Theme My Login offers matchless customization of your WordPress user experience!
|
9 |
|
59 |
|
60 |
== Changelog ==
|
61 |
|
62 |
+
= 7.0.8 =
|
63 |
+
* Fix slow-loading extensions page
|
64 |
+
* Add dismissible notice of latest available extension
|
65 |
+
* Fix "stuck" license status by verifying when visiting the licenses page
|
66 |
+
* Ensure a form field object is returned when adding a form field
|
67 |
+
* Fix testcookie step causing a 403 error
|
68 |
+
* Fix links not being changed in emails sent from the Dashboard
|
69 |
+
|
70 |
= 7.0.7 =
|
71 |
* Fix sorting of form fields
|
72 |
* Fix "Remember Me" not being clickable
|
73 |
* Add "checked" property to form fields to allow for easy checking of checkboxes
|
74 |
+
* Add plugin textdomain to strings not found in front-end core translations
|
75 |
* Add `tml_send_new_user_notification` filter
|
76 |
* Add `tml_send_new_user_admin_notification` filter
|
77 |
* Add `tml_retrieve_password_email` filter
|
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.8
|
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.8' );
|
28 |
|
29 |
/**
|
30 |
* Stores the path to TML.
|