Version Description
- Created Add-On Page in Profile Builder
- Added support for Twenty Fifteen theme to better target inputs
- Add support for "redirect_url" parameter to Login shortcode (will do the same thing as "redirect" - for consistency)
- Added "redirect_url" parameter to Register and Edit-profile shortcodes
Download this release
Release Info
Developer | madalin.ungureanu |
Plugin | User registration & user profile – Profile Builder |
Version | 2.1.2 |
Comparing to | |
See all releases |
Code changes from version 2.1.1 to 2.1.2
- admin/add-ons.php +299 -0
- assets/css/style-back-end.css +88 -0
- assets/css/style-front-end.css +1 -1
- assets/images/spinner.gif +0 -0
- assets/js/jquery-pb-add-ons.js +329 -0
- assets/js/jquery-pb-sitewide.js +1 -1
- features/functions.php +5 -2
- front-end/class-formbuilder.php +6 -5
- front-end/edit-profile.php +2 -2
- front-end/login.php +4 -1
- front-end/recover.php +58 -58
- front-end/register.php +3 -2
- index.php +4 -2
- readme.txt +15 -3
admin/add-ons.php
ADDED
@@ -0,0 +1,299 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Function that creates the "Add-Ons" submenu page
|
4 |
+
*
|
5 |
+
* @since v.2.1.0
|
6 |
+
*
|
7 |
+
* @return void
|
8 |
+
*/
|
9 |
+
function wppb_register_add_ons_submenu_page() {
|
10 |
+
add_submenu_page( 'profile-builder', __( 'Add-Ons', 'profilebuilder' ), __( 'Add-Ons', 'profilebuilder' ), 'manage_options', 'profile-builder-add-ons', 'wppb_add_ons_content' );
|
11 |
+
}
|
12 |
+
add_action( 'admin_menu', 'wppb_register_add_ons_submenu_page', 19 );
|
13 |
+
|
14 |
+
|
15 |
+
/**
|
16 |
+
* Function that adds content to the "Add-Ons" submenu page
|
17 |
+
*
|
18 |
+
* @since v.2.1.0
|
19 |
+
*
|
20 |
+
* @return string
|
21 |
+
*/
|
22 |
+
function wppb_add_ons_content() {
|
23 |
+
|
24 |
+
$version = 'Free';
|
25 |
+
$version = ( ( PROFILE_BUILDER == 'Profile Builder Pro' ) ? 'Pro' : $version );
|
26 |
+
$version = ( ( PROFILE_BUILDER == 'Profile Builder Hobbyist' ) ? 'Hobbyist' : $version );
|
27 |
+
|
28 |
+
?>
|
29 |
+
|
30 |
+
<div class="wrap wppb-add-on-wrap">
|
31 |
+
|
32 |
+
<h2><?php _e( 'Add-Ons', 'profilebuilder' ); ?></h2>
|
33 |
+
|
34 |
+
<span id="wppb-add-on-activate-button-text" class="wppb-add-on-user-messages"><?php echo __( 'Activate', 'profilebuilder' ); ?></span>
|
35 |
+
|
36 |
+
<span id="wppb-add-on-downloading-message-text" class="wppb-add-on-user-messages"><?php echo __( 'Downloading and installing...', 'profilebuilder' ); ?></span>
|
37 |
+
<span id="wppb-add-on-download-finished-message-text" class="wppb-add-on-user-messages"><?php echo __( 'Installation complete', 'profilebuilder' ); ?></span>
|
38 |
+
|
39 |
+
<span id="wppb-add-on-activated-button-text" class="wppb-add-on-user-messages"><?php echo __( 'Add-On is Active', 'profilebuilder' ); ?></span>
|
40 |
+
<span id="wppb-add-on-activated-message-text" class="wppb-add-on-user-messages"><?php echo __( 'Add-On has been activated', 'profilebuilder' ) ?></span>
|
41 |
+
<span id="wppb-add-on-activated-error-button-text" class="wppb-add-on-user-messages"><?php echo __( 'Retry Install', 'profilebuilder' ) ?></span>
|
42 |
+
|
43 |
+
<span id="wppb-add-on-is-active-message-text" class="wppb-add-on-user-messages"><?php echo __( 'Add-On is <strong>active</strong>', 'profilebuilder' ); ?></span>
|
44 |
+
<span id="wppb-add-on-is-not-active-message-text" class="wppb-add-on-user-messages"><?php echo __( 'Add-On is <strong>inactive</strong>', 'profilebuilder' ); ?></span>
|
45 |
+
|
46 |
+
<span id="wppb-add-on-deactivate-button-text" class="wppb-add-on-user-messages"><?php echo __( 'Deactivate', 'profilebuilder' ) ?></span>
|
47 |
+
<span id="wppb-add-on-deactivated-message-text" class="wppb-add-on-user-messages"><?php echo __( 'Add-On has been deactivated.', 'profilebuilder' ) ?></span>
|
48 |
+
|
49 |
+
<div id="the-list">
|
50 |
+
|
51 |
+
<?php
|
52 |
+
|
53 |
+
$wppb_add_ons = wppb_add_ons_get_remote_content();
|
54 |
+
$wppb_get_all_plugins = get_plugins();
|
55 |
+
$wppb_get_active_plugins = get_option('active_plugins');
|
56 |
+
|
57 |
+
|
58 |
+
|
59 |
+
if( $wppb_add_ons === false ) {
|
60 |
+
|
61 |
+
echo __('Something went wrong, we could not connect to the server. Please try again later.', 'profilebuilder');
|
62 |
+
|
63 |
+
} else {
|
64 |
+
|
65 |
+
foreach( $wppb_add_ons as $key => $wppb_add_on ):
|
66 |
+
|
67 |
+
$wppb_add_on_exists = 0;
|
68 |
+
$wppb_add_on_is_active = 0;
|
69 |
+
|
70 |
+
// Check to see if add-on is in the plugins folder
|
71 |
+
foreach( $wppb_get_all_plugins as $wppb_plugin_key => $wppb_plugin ) {
|
72 |
+
if( strpos( $wppb_plugin['Name'], $wppb_add_on['name'] ) !== false && strpos( $wppb_plugin['AuthorName'], 'Cozmoslabs' ) !== false ) {
|
73 |
+
$wppb_add_on_exists = 1;
|
74 |
+
|
75 |
+
if( in_array( $wppb_plugin_key, $wppb_get_active_plugins ) ) {
|
76 |
+
$wppb_add_on_is_active = 1;
|
77 |
+
}
|
78 |
+
|
79 |
+
$wppb_add_on['plugin_file'] = $wppb_plugin_key;
|
80 |
+
}
|
81 |
+
}
|
82 |
+
|
83 |
+
echo '<div class="plugin-card wppb-add-on">';
|
84 |
+
echo '<div class="plugin-card-top">';
|
85 |
+
|
86 |
+
echo '<a target="_blank" href="' . $wppb_add_on['url'] . '?utm_source=wpbackend&utm_medium=clientsite&utm_content=add-on-page&utm_campaign=PB' . $version . '">';
|
87 |
+
echo '<img src="' . $wppb_add_on['thumbnail_url'] . '" />';
|
88 |
+
echo '</a>';
|
89 |
+
|
90 |
+
echo '<h3 class="wppb-add-on-title">';
|
91 |
+
echo '<a target="_blank" href="' . $wppb_add_on['url'] . '?utm_source=wpbackend&utm_medium=clientsite&utm_content=add-on-page&utm_campaign=PB' . $version . '">';
|
92 |
+
echo $wppb_add_on['name'];
|
93 |
+
echo '</a>';
|
94 |
+
echo '</h3>';
|
95 |
+
|
96 |
+
echo '<h3 class="wppb-add-on-price">' . $wppb_add_on['price'] . '</h3>';
|
97 |
+
echo '<p class="wppb-add-on-description">' . $wppb_add_on['description'] . '</p>';
|
98 |
+
|
99 |
+
echo '</div>';
|
100 |
+
|
101 |
+
$wppb_version_validation = version_compare( PROFILE_BUILDER_VERSION, $wppb_add_on['product_version'] );
|
102 |
+
|
103 |
+
( $wppb_version_validation != -1 ) ? $wppb_version_validation_class = 'wppb-add-on-compatible' : $wppb_version_validation_class = 'wppb-add-on-not-compatible';
|
104 |
+
|
105 |
+
echo '<div class="plugin-card-bottom ' . $wppb_version_validation_class . '">';
|
106 |
+
|
107 |
+
if( $wppb_version_validation != -1 ) {
|
108 |
+
|
109 |
+
if( $wppb_add_on_exists ) {
|
110 |
+
|
111 |
+
if( !$wppb_add_on_is_active ) {
|
112 |
+
|
113 |
+
echo '<a class="wppb-add-on-activate right button button-secondary" href="' . $wppb_add_on['plugin_file'] . '">' . __( 'Activate', 'profilebuilder' ) . '</a>';
|
114 |
+
echo '<span class="dashicons dashicons-no-alt"></span><span class="wppb-add-on-message">' . __( 'Add-On is <strong>inactive</strong>', 'profilebuilder' ) . '</span>';
|
115 |
+
|
116 |
+
} else {
|
117 |
+
|
118 |
+
echo '<a class="wppb-add-on-deactivate right button button-secondary" href="' . $wppb_add_on['plugin_file'] . '">' . __( 'Deactivate', 'profilebuilder' ) . '</a>';
|
119 |
+
echo '<span class="dashicons dashicons-yes"></span><span class="wppb-add-on-message">' . __( 'Add-On is <strong>active</strong>', 'profilebuilder' ) . '</span>';
|
120 |
+
|
121 |
+
}
|
122 |
+
|
123 |
+
} else {
|
124 |
+
|
125 |
+
( $wppb_add_on['paid'] ) ? $wppb_paid_link_class = 'button-primary' : $wppb_paid_link_class = 'button-secondary wppb-add-on-download';
|
126 |
+
( $wppb_add_on['paid'] ) ? $wppb_paid_link_text = __( 'Buy Now', 'profilebuilder' ) : $wppb_paid_link_text = __( 'Install Now', 'profilebuilder' );
|
127 |
+
( $wppb_add_on['paid'] ) ? $wppb_paid_href_utm_text = '?utm_source=wpbackend&utm_medium=clientsite&utm_content=add-on-page-buy-button&utm_campaign=PB' . $version : $wppb_paid_href_utm_text = '&utm_source=wpbackend&utm_medium=clientsite&utm_content=add-on-page&utm_campaign=PB' . $version;
|
128 |
+
|
129 |
+
echo '<a target="_blank" class="right button ' . $wppb_paid_link_class . '" href="' . $wppb_add_on['download_url'] . $wppb_paid_href_utm_text . '" data-add-on-slug="profile-builder-' . $wppb_add_on['slug'] . '" data-add-on-name="' . $wppb_add_on['name'] . '" >' . $wppb_paid_link_text . '</a>';
|
130 |
+
echo '<span class="dashicons dashicons-yes"></span><span class="wppb-add-on-message">' . __( 'Compatible with your version of Profile Builder.', 'profilebuilder' ) . '</span>';
|
131 |
+
|
132 |
+
}
|
133 |
+
|
134 |
+
echo '<div class="spinner"></div>';
|
135 |
+
|
136 |
+
} else {
|
137 |
+
echo ' ' . '<a class="button button-secondary right" href="' . admin_url('plugins.php') . '">' . __( 'Update', 'profilebuilder' ) . '</a>';
|
138 |
+
echo '<span class="wppb-add-on-message">' . __( 'Not compatible with your version of Profile Builder.', 'profilebuilder' ) . '</span><br />';
|
139 |
+
echo '<span class="wppb-add-on-message">' . __( 'Minimum required Profile Builder version:', 'profilebuilder' ) . '<strong> ' . $wppb_add_on['product_version'] . '</strong></span>';
|
140 |
+
}
|
141 |
+
|
142 |
+
// We had to put this error here because we need the url of the add-on
|
143 |
+
echo '<span class="wppb-add-on-user-messages wppb-error-manual-install">' . sprintf( __( 'Could not install add-on. Retry or <a href="%s" target="_blank">install manually</a>.', 'profilebuilder' ), esc_url( $wppb_add_on['url'] ) ) . '</span>';
|
144 |
+
|
145 |
+
echo '</div>';
|
146 |
+
echo '</div>';
|
147 |
+
|
148 |
+
endforeach;
|
149 |
+
}
|
150 |
+
|
151 |
+
?>
|
152 |
+
</div>
|
153 |
+
</div>
|
154 |
+
<?php
|
155 |
+
}
|
156 |
+
|
157 |
+
/*
|
158 |
+
* Function that returns the array of add-ons from cozmoslabs.com if it finds the file
|
159 |
+
* If something goes wrong it returns false
|
160 |
+
*
|
161 |
+
* @since v.2.1.0
|
162 |
+
*/
|
163 |
+
function wppb_add_ons_get_remote_content() {
|
164 |
+
|
165 |
+
$response = wp_remote_get('http://www.cozmoslabs.com/wp-content/plugins/cozmoslabs-products-add-ons/profile-builder-add-ons.json');
|
166 |
+
|
167 |
+
if( is_wp_error($response) ) {
|
168 |
+
return false;
|
169 |
+
} else {
|
170 |
+
$json_file_contents = $response['body'];
|
171 |
+
$wppb_add_ons = json_decode( $json_file_contents, true );
|
172 |
+
}
|
173 |
+
|
174 |
+
if( !is_object( $wppb_add_ons ) && !is_array( $wppb_add_ons ) ) {
|
175 |
+
return false;
|
176 |
+
}
|
177 |
+
|
178 |
+
return $wppb_add_ons;
|
179 |
+
|
180 |
+
}
|
181 |
+
|
182 |
+
|
183 |
+
/*
|
184 |
+
* Function that is triggered through Ajax to activate an add-on
|
185 |
+
*
|
186 |
+
* @since v.2.1.0
|
187 |
+
*/
|
188 |
+
function wppb_add_on_activate() {
|
189 |
+
|
190 |
+
// Setup variables from POST
|
191 |
+
$wppb_add_on_to_activate = $_POST['wppb_add_on_to_activate'];
|
192 |
+
$response = $_POST['wppb_add_on_index'];
|
193 |
+
|
194 |
+
if( !is_plugin_active( $wppb_add_on_to_activate )) {
|
195 |
+
activate_plugin( $wppb_add_on_to_activate );
|
196 |
+
}
|
197 |
+
|
198 |
+
echo $response;
|
199 |
+
wp_die();
|
200 |
+
}
|
201 |
+
add_action( 'wp_ajax_wppb_add_on_activate', 'wppb_add_on_activate' );
|
202 |
+
|
203 |
+
|
204 |
+
/*
|
205 |
+
* Function that is triggered through Ajax to deactivate an add-on
|
206 |
+
*
|
207 |
+
* @since v.2.1.0
|
208 |
+
*/
|
209 |
+
function wppb_add_on_deactivate() {
|
210 |
+
|
211 |
+
// Setup variables from POST
|
212 |
+
$wppb_add_on_to_deactivate = $_POST['wppb_add_on_to_deactivate'];
|
213 |
+
$response = $_POST['wppb_add_on_index'];
|
214 |
+
|
215 |
+
deactivate_plugins( $wppb_add_on_to_deactivate );
|
216 |
+
|
217 |
+
echo $response;
|
218 |
+
wp_die();
|
219 |
+
|
220 |
+
}
|
221 |
+
add_action( 'wp_ajax_wppb_add_on_deactivate', 'wppb_add_on_deactivate' );
|
222 |
+
|
223 |
+
|
224 |
+
/*
|
225 |
+
* Function that downloads and unzips the .zip file returned from Cozmoslabs
|
226 |
+
*
|
227 |
+
* @since v.2.1.0
|
228 |
+
*/
|
229 |
+
function wppb_add_on_download_zip_file() {
|
230 |
+
|
231 |
+
// Set the response to success and change it later if needed
|
232 |
+
$response = $_POST['wppb_add_on_index'];
|
233 |
+
$add_on_index = $response;
|
234 |
+
|
235 |
+
// Setup variables from POST
|
236 |
+
$wppb_add_on_download_url = $_POST['wppb_add_on_download_url'];
|
237 |
+
$wppb_add_on_zip_name = $_POST['wppb_add_on_zip_name'];
|
238 |
+
|
239 |
+
|
240 |
+
// Get .zip file
|
241 |
+
$remote_response = wp_remote_get( $wppb_add_on_download_url );
|
242 |
+
if( is_wp_error( $remote_response ) ) {
|
243 |
+
$response = 'error-' . $add_on_index;
|
244 |
+
} else {
|
245 |
+
$file_contents = $remote_response['body'];
|
246 |
+
}
|
247 |
+
|
248 |
+
|
249 |
+
// Put the file in the plugins directory
|
250 |
+
if( isset( $file_contents ) ) {
|
251 |
+
if( file_put_contents( WP_PLUGIN_DIR . '/' . $wppb_add_on_zip_name, $file_contents ) === false ) {
|
252 |
+
$response = 'error-' . $add_on_index;
|
253 |
+
}
|
254 |
+
}
|
255 |
+
|
256 |
+
|
257 |
+
// Unzip the file
|
258 |
+
if( $response != 'error' ) {
|
259 |
+
WP_Filesystem();
|
260 |
+
if( unzip_file( WP_PLUGIN_DIR . '/' . $wppb_add_on_zip_name , WP_PLUGIN_DIR ) ) {
|
261 |
+
// Remove the zip file after we are all done
|
262 |
+
unlink( WP_PLUGIN_DIR . '/' . $wppb_add_on_zip_name );
|
263 |
+
} else {
|
264 |
+
$response = 'error-' . $add_on_index;
|
265 |
+
}
|
266 |
+
}
|
267 |
+
|
268 |
+
echo $response;
|
269 |
+
wp_die();
|
270 |
+
}
|
271 |
+
add_action( 'wp_ajax_wppb_add_on_download_zip_file', 'wppb_add_on_download_zip_file' );
|
272 |
+
|
273 |
+
|
274 |
+
/*
|
275 |
+
* Function that retrieves the data of the newly added plugin
|
276 |
+
*
|
277 |
+
* @since v.2.1.0
|
278 |
+
*/
|
279 |
+
function wppb_add_on_get_new_plugin_data() {
|
280 |
+
$wppb_add_on_name = $_POST['wppb_add_on_name'];
|
281 |
+
|
282 |
+
$wppb_get_all_plugins = get_plugins();
|
283 |
+
foreach( $wppb_get_all_plugins as $wppb_plugin_key => $wppb_plugin ) {
|
284 |
+
|
285 |
+
if( strpos( $wppb_plugin['Name'], $wppb_add_on_name ) !== false && strpos( $wppb_plugin['AuthorName'], 'Cozmoslabs' ) !== false ) {
|
286 |
+
|
287 |
+
// Deactivate the add-on if it's active
|
288 |
+
if( is_plugin_active( $wppb_plugin_key )) {
|
289 |
+
deactivate_plugins( $wppb_plugin_key );
|
290 |
+
}
|
291 |
+
|
292 |
+
// Return the plugin path
|
293 |
+
echo $wppb_plugin_key;
|
294 |
+
}
|
295 |
+
}
|
296 |
+
|
297 |
+
wp_die();
|
298 |
+
}
|
299 |
+
add_action( 'wp_ajax_wppb_add_on_get_new_plugin_data', 'wppb_add_on_get_new_plugin_data' );
|
assets/css/style-back-end.css
CHANGED
@@ -437,6 +437,94 @@
|
|
437 |
display: block;
|
438 |
}
|
439 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
440 |
/* Manage Fields Responsive CSS */
|
441 |
@media screen and ( max-width: 1125px ) {
|
442 |
/* Manage Fields Responsive */
|
437 |
display: block;
|
438 |
}
|
439 |
|
440 |
+
/* Add-Ons page */
|
441 |
+
.wppb-add-on-user-messages{ display: none; }
|
442 |
+
|
443 |
+
.wppb-add-on-wrap .plugin-card-bottom:after {
|
444 |
+
display: block;
|
445 |
+
content: '';
|
446 |
+
clear: both;
|
447 |
+
}
|
448 |
+
|
449 |
+
.wppb-add-on a:focus {
|
450 |
+
box-shadow: none;
|
451 |
+
}
|
452 |
+
|
453 |
+
.wppb-add-on img {
|
454 |
+
max-width: 100%;
|
455 |
+
height: auto;
|
456 |
+
}
|
457 |
+
|
458 |
+
.wppb-add-on .wppb-add-on-title {
|
459 |
+
letter-spacing: -0.7px;
|
460 |
+
margin-bottom: 7px;
|
461 |
+
}
|
462 |
+
|
463 |
+
.wppb-add-on .wppb-add-on-title a {
|
464 |
+
text-decoration: none;
|
465 |
+
color: inherit;
|
466 |
+
}
|
467 |
+
|
468 |
+
.wppb-add-on .wppb-add-on-price {
|
469 |
+
font-size: 1.1em;
|
470 |
+
letter-spacing: -0.7px;
|
471 |
+
margin-top: 7px;
|
472 |
+
}
|
473 |
+
|
474 |
+
.wppb-add-on-compatible span {
|
475 |
+
line-height: 28px;
|
476 |
+
}
|
477 |
+
|
478 |
+
.wppb-add-on-not-compatible {
|
479 |
+
position: relative;
|
480 |
+
}
|
481 |
+
|
482 |
+
.wppb-add-on-not-compatible:before {
|
483 |
+
display: block;
|
484 |
+
content: '';
|
485 |
+
position: absolute;
|
486 |
+
width: 4px;
|
487 |
+
height: 100%;
|
488 |
+
background: #d54e21;
|
489 |
+
top: 0;
|
490 |
+
left: 0;
|
491 |
+
}
|
492 |
+
|
493 |
+
.wppb-add-on .button {
|
494 |
+
position: relative;
|
495 |
+
}
|
496 |
+
|
497 |
+
.wppb-add-on .button.wppb-add-on-deactivate {
|
498 |
+
opacity: 0;
|
499 |
+
}
|
500 |
+
|
501 |
+
.wppb-add-on .spinner {
|
502 |
+
display: block;
|
503 |
+
margin-top: 4px;
|
504 |
+
opacity: 0;
|
505 |
+
}
|
506 |
+
|
507 |
+
.wppb-add-on-spinner {
|
508 |
+
opacity: 0;
|
509 |
+
position: absolute;
|
510 |
+
top: 50%;
|
511 |
+
left: 50%;
|
512 |
+
margin-top: -10px;
|
513 |
+
margin-left: -10px;
|
514 |
+
display: block;
|
515 |
+
width: 20px;
|
516 |
+
height: 20px;
|
517 |
+
background: url('../images/spinner.gif') no-repeat center;
|
518 |
+
}
|
519 |
+
|
520 |
+
.wppb-confirmation-success {
|
521 |
+
color: #27ae60;
|
522 |
+
}
|
523 |
+
|
524 |
+
.wppb-confirmation-error {
|
525 |
+
color: #c0392b;
|
526 |
+
}
|
527 |
+
|
528 |
/* Manage Fields Responsive CSS */
|
529 |
@media screen and ( max-width: 1125px ) {
|
530 |
/* Manage Fields Responsive */
|
assets/css/style-front-end.css
CHANGED
@@ -151,8 +151,8 @@
|
|
151 |
float:left;
|
152 |
min-height:1px;
|
153 |
}
|
154 |
-
|
155 |
.wppb-form-field input,
|
|
|
156 |
.wppb-form-field select,
|
157 |
.wppb-form-field textarea,
|
158 |
.wppb-checkboxes,
|
151 |
float:left;
|
152 |
min-height:1px;
|
153 |
}
|
|
|
154 |
.wppb-form-field input,
|
155 |
+
.wppb-form-field input[type="text"], .wppb-form-field input[type="email"], .wppb-form-field input[type="url"], .wppb-form-field input[type="password"], .wppb-form-field input[type="search"],
|
156 |
.wppb-form-field select,
|
157 |
.wppb-form-field textarea,
|
158 |
.wppb-checkboxes,
|
assets/images/spinner.gif
ADDED
Binary file
|
assets/js/jquery-pb-add-ons.js
ADDED
@@ -0,0 +1,329 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
|
2 |
+
/*
|
3 |
+
* Function to download/activate add-ons on button click
|
4 |
+
*/
|
5 |
+
jQuery('.wppb-add-on .button').on( 'click', function(e) {
|
6 |
+
if( jQuery(this).attr('disabled') ) {
|
7 |
+
return false;
|
8 |
+
}
|
9 |
+
|
10 |
+
// Download add-on
|
11 |
+
if( jQuery(this).hasClass('wppb-add-on-download') ) {
|
12 |
+
e.preventDefault();
|
13 |
+
wppb_add_on_download_and_install( jQuery(this) );
|
14 |
+
}
|
15 |
+
|
16 |
+
// Activate add-on
|
17 |
+
if( jQuery(this).hasClass('wppb-add-on-activate') ) {
|
18 |
+
e.preventDefault();
|
19 |
+
wppb_add_on_activate( jQuery(this) );
|
20 |
+
}
|
21 |
+
|
22 |
+
// Deactivate add-on
|
23 |
+
if( jQuery(this).hasClass('wppb-add-on-deactivate') ) {
|
24 |
+
e.preventDefault();
|
25 |
+
wppb_add_on_deactivate( jQuery(this) );
|
26 |
+
}
|
27 |
+
});
|
28 |
+
|
29 |
+
|
30 |
+
/*
|
31 |
+
* Make deactivate button from Add-On is Active message button
|
32 |
+
*/
|
33 |
+
jQuery('.wppb-add-on').on( 'hover', function() {
|
34 |
+
|
35 |
+
$button = jQuery(this).find('.wppb-add-on-deactivate');
|
36 |
+
|
37 |
+
if( $button.length > 0 ) {
|
38 |
+
$button
|
39 |
+
.animate({
|
40 |
+
opacity: 1
|
41 |
+
}, 100);
|
42 |
+
}
|
43 |
+
});
|
44 |
+
|
45 |
+
/*
|
46 |
+
* Make Add-On is Active message button from deactivate button
|
47 |
+
*/
|
48 |
+
jQuery('.wppb-add-on').on( 'mouseleave', function() {
|
49 |
+
|
50 |
+
$button = jQuery(this).find('.wppb-add-on-deactivate');
|
51 |
+
|
52 |
+
if( $button.length > 0 ) {
|
53 |
+
$button
|
54 |
+
.animate({
|
55 |
+
opacity: 0
|
56 |
+
}, 100);
|
57 |
+
}
|
58 |
+
});
|
59 |
+
|
60 |
+
|
61 |
+
/*
|
62 |
+
* Download Add-On from Cozmoslabs on click
|
63 |
+
*/
|
64 |
+
function wppb_add_on_download_and_install( $button ) {
|
65 |
+
$download_button = $button;
|
66 |
+
|
67 |
+
var fade_in_out_speed = 300;
|
68 |
+
var download_url = $download_button.attr('href');
|
69 |
+
var file_name = $download_button.attr('data-add-on-slug') + '.zip';
|
70 |
+
var add_on_name = $download_button.attr('data-add-on-name');
|
71 |
+
var add_on_index = $download_button.parents('.wppb-add-on').index('.wppb-add-on');
|
72 |
+
|
73 |
+
$download_button
|
74 |
+
.attr('disabled', true);
|
75 |
+
|
76 |
+
$spinner = $download_button.siblings('.spinner');
|
77 |
+
|
78 |
+
$spinner.animate({
|
79 |
+
opacity: 0.7
|
80 |
+
}, 100);
|
81 |
+
|
82 |
+
// Remove the current displayed message
|
83 |
+
wppb_add_on_remove_status_message( $download_button, fade_in_out_speed );
|
84 |
+
|
85 |
+
// Set status confirmation message
|
86 |
+
wppb_add_on_set_status_message( $download_button, 'dashicons-download', jQuery('#wppb-add-on-downloading-message-text').text(), fade_in_out_speed, fade_in_out_speed );
|
87 |
+
|
88 |
+
|
89 |
+
jQuery.post( ajaxurl, { action: 'wppb_add_on_download_zip_file', wppb_add_on_download_url: download_url, wppb_add_on_zip_name: file_name, wppb_add_on_name: add_on_name, wppb_add_on_index: add_on_index }, function( response ) {
|
90 |
+
|
91 |
+
// Check if we have any errors and display a message to the user
|
92 |
+
if( response.indexOf('error') === 0 ) {
|
93 |
+
response = response.split('-');
|
94 |
+
add_on_index = response[1];
|
95 |
+
|
96 |
+
$download_button = jQuery('.wppb-add-on').eq( add_on_index ).find('.button');
|
97 |
+
$error_message = jQuery('.wppb-add-on').eq( add_on_index).find('.wppb-error-manual-install');
|
98 |
+
|
99 |
+
$download_button
|
100 |
+
.blur()
|
101 |
+
.removeAttr('disabled')
|
102 |
+
.text( jQuery('#wppb-add-on-activated-error-button-text').text() );
|
103 |
+
|
104 |
+
$spinner = $download_button.siblings('.spinner');
|
105 |
+
$spinner.animate({
|
106 |
+
opacity: 0
|
107 |
+
}, 0);
|
108 |
+
|
109 |
+
// Remove the current displayed message
|
110 |
+
wppb_add_on_remove_status_message( $download_button, fade_in_out_speed);
|
111 |
+
|
112 |
+
// Set status confirmation message
|
113 |
+
wppb_add_on_set_status_message( $download_button, 'dashicons-no-alt', $error_message.html(), fade_in_out_speed, fade_in_out_speed, false );
|
114 |
+
|
115 |
+
return false;
|
116 |
+
}
|
117 |
+
|
118 |
+
// If everything goes well go ahead and
|
119 |
+
var add_on_index = response;
|
120 |
+
jQuery.post( ajaxurl, { action: 'wppb_add_on_get_new_plugin_data', wppb_add_on_name: add_on_name }, function( plugin_path ) {
|
121 |
+
|
122 |
+
$download_button = jQuery('.wppb-add-on').eq( add_on_index ).find('.button');
|
123 |
+
|
124 |
+
$download_button
|
125 |
+
.blur()
|
126 |
+
.removeClass('wppb-add-on-download')
|
127 |
+
.addClass('wppb-add-on-activate')
|
128 |
+
.attr('href', plugin_path )
|
129 |
+
.removeAttr('disabled')
|
130 |
+
.text( jQuery('#wppb-add-on-activate-button-text').text() );
|
131 |
+
|
132 |
+
$spinner = $download_button.siblings('.spinner');
|
133 |
+
$spinner.animate({
|
134 |
+
opacity: 0
|
135 |
+
}, 0);
|
136 |
+
|
137 |
+
// Remove the current displayed message
|
138 |
+
wppb_add_on_remove_status_message( $download_button, fade_in_out_speed);
|
139 |
+
|
140 |
+
// Set status confirmation message
|
141 |
+
wppb_add_on_set_status_message( $download_button, 'dashicons-yes', jQuery('#wppb-add-on-download-finished-message-text').text(), fade_in_out_speed, fade_in_out_speed, true );
|
142 |
+
|
143 |
+
});
|
144 |
+
|
145 |
+
});
|
146 |
+
}
|
147 |
+
|
148 |
+
|
149 |
+
/*
|
150 |
+
* Function that activates the add-on
|
151 |
+
*/
|
152 |
+
function wppb_add_on_activate( $button ) {
|
153 |
+
$activate_button = $button;
|
154 |
+
|
155 |
+
var fade_in_out_speed = 300;
|
156 |
+
var plugin = $activate_button.attr('href');
|
157 |
+
var add_on_index = $activate_button.parents('.wppb-add-on').index('.wppb-add-on');
|
158 |
+
|
159 |
+
$activate_button
|
160 |
+
.attr('disabled', true);
|
161 |
+
|
162 |
+
$spinner = $activate_button.siblings('.spinner');
|
163 |
+
|
164 |
+
$spinner.animate({
|
165 |
+
opacity: 0.7
|
166 |
+
}, 100);
|
167 |
+
|
168 |
+
// Remove the current displayed message
|
169 |
+
wppb_add_on_remove_status_message( $activate_button, fade_in_out_speed);
|
170 |
+
|
171 |
+
jQuery.post( ajaxurl, { action: 'wppb_add_on_activate', wppb_add_on_to_activate: plugin, wppb_add_on_index: add_on_index }, function( response ) {
|
172 |
+
|
173 |
+
add_on_index = response;
|
174 |
+
|
175 |
+
$activate_button = jQuery('.wppb-add-on').eq( add_on_index ).find('.button');
|
176 |
+
|
177 |
+
$activate_button
|
178 |
+
.blur()
|
179 |
+
.removeClass('wppb-add-on-activate')
|
180 |
+
.addClass('wppb-add-on-deactivate')
|
181 |
+
.removeAttr('disabled')
|
182 |
+
.text( jQuery('#wppb-add-on-deactivate-button-text').text() );
|
183 |
+
|
184 |
+
$spinner = $activate_button.siblings('.spinner');
|
185 |
+
|
186 |
+
$spinner.animate({
|
187 |
+
opacity: 0
|
188 |
+
}, 0);
|
189 |
+
|
190 |
+
// Set status confirmation message
|
191 |
+
wppb_add_on_set_status_message( $activate_button, 'dashicons-yes', jQuery('#wppb-add-on-activated-message-text').text(), fade_in_out_speed, 0, true );
|
192 |
+
wppb_add_on_remove_status_message( $activate_button, fade_in_out_speed, 2000 );
|
193 |
+
|
194 |
+
// Set is active message
|
195 |
+
wppb_add_on_set_status_message( $activate_button, 'dashicons-yes', jQuery('#wppb-add-on-is-active-message-text').html(), fade_in_out_speed, 2000 + fade_in_out_speed );
|
196 |
+
});
|
197 |
+
}
|
198 |
+
|
199 |
+
|
200 |
+
|
201 |
+
/*
|
202 |
+
* Function that deactivates the add-on
|
203 |
+
*/
|
204 |
+
function wppb_add_on_deactivate( $button ) {
|
205 |
+
|
206 |
+
var fade_in_out_speed = 300;
|
207 |
+
var plugin = $button.attr('href');
|
208 |
+
var add_on_index = $button.parents('.wppb-add-on').index('.wppb-add-on');
|
209 |
+
|
210 |
+
$button
|
211 |
+
.removeClass('wppb-add-on-deactivate')
|
212 |
+
.attr('disabled', true);
|
213 |
+
|
214 |
+
$spinner = $button.siblings('.spinner');
|
215 |
+
|
216 |
+
$spinner.animate({
|
217 |
+
opacity: 0.7
|
218 |
+
}, 100);
|
219 |
+
|
220 |
+
// Remove the current displayed message
|
221 |
+
wppb_add_on_remove_status_message( $button, fade_in_out_speed );
|
222 |
+
|
223 |
+
jQuery.post( ajaxurl, { action: 'wppb_add_on_deactivate', wppb_add_on_to_deactivate: plugin, wppb_add_on_index: add_on_index }, function( response ) {
|
224 |
+
|
225 |
+
add_on_index = response;
|
226 |
+
|
227 |
+
$button = jQuery('.wppb-add-on').eq( add_on_index ).find('.button');
|
228 |
+
|
229 |
+
$button
|
230 |
+
.blur()
|
231 |
+
.removeClass('wppb-add-on-is-active')
|
232 |
+
.addClass('wppb-add-on-activate')
|
233 |
+
.attr( 'disabled', false )
|
234 |
+
.text( jQuery('#wppb-add-on-activate-button-text').text() );
|
235 |
+
|
236 |
+
$spinner = $button.siblings('.spinner');
|
237 |
+
|
238 |
+
$spinner.animate({
|
239 |
+
opacity: 0
|
240 |
+
}, 0);
|
241 |
+
|
242 |
+
// Set status confirmation message
|
243 |
+
wppb_add_on_set_status_message( $button, 'dashicons-yes', jQuery('#wppb-add-on-deactivated-message-text').text(), fade_in_out_speed, 0, true );
|
244 |
+
wppb_add_on_remove_status_message( $button, fade_in_out_speed, 2000 );
|
245 |
+
|
246 |
+
// Set is active message
|
247 |
+
wppb_add_on_set_status_message( $button, 'dashicons-no-alt', jQuery('#wppb-add-on-is-not-active-message-text').html(), fade_in_out_speed, 2000 + fade_in_out_speed );
|
248 |
+
|
249 |
+
});
|
250 |
+
}
|
251 |
+
|
252 |
+
|
253 |
+
/*
|
254 |
+
* Function used to remove the status message of an add-on
|
255 |
+
*
|
256 |
+
* @param object $button - The jQuery object of the add-on box button that was pressed
|
257 |
+
* @param int fade_in_out_speed - The speed of the fade in and out animations
|
258 |
+
* @param int delay - Delay removing of the message
|
259 |
+
*
|
260 |
+
*/
|
261 |
+
function wppb_add_on_remove_status_message( $button, fade_in_out_speed, delay ) {
|
262 |
+
|
263 |
+
if( typeof( delay ) == 'undefined' ) {
|
264 |
+
delay = 0;
|
265 |
+
}
|
266 |
+
|
267 |
+
setTimeout( function() {
|
268 |
+
|
269 |
+
$button.siblings('.dashicons')
|
270 |
+
.animate({
|
271 |
+
opacity: 0
|
272 |
+
}, fade_in_out_speed );
|
273 |
+
|
274 |
+
$button.siblings('.wppb-add-on-message')
|
275 |
+
.animate({
|
276 |
+
opacity: 0
|
277 |
+
}, fade_in_out_speed );
|
278 |
+
|
279 |
+
}, delay);
|
280 |
+
|
281 |
+
}
|
282 |
+
|
283 |
+
/*
|
284 |
+
* Function used to remove the status message of an add-on
|
285 |
+
*
|
286 |
+
* @param object $button - The jQuery object of the add-on box button that was pressed
|
287 |
+
* @param string message_icon_class - The string name of the class we want the icon to have
|
288 |
+
* @param string message_text - The text we want the user to see
|
289 |
+
* @param int fade_in_out_speed - The speed of the fade in and out animations
|
290 |
+
* @param bool success - If true adds a class to style the message as a success one, if false adds a class to style the message as a failure
|
291 |
+
*
|
292 |
+
*/
|
293 |
+
function wppb_add_on_set_status_message( $button, message_icon_class, message_text, fade_in_out_speed, delay, success ) {
|
294 |
+
|
295 |
+
if( typeof( delay ) == 'undefined' ) {
|
296 |
+
delay = 0;
|
297 |
+
}
|
298 |
+
|
299 |
+
setTimeout(function() {
|
300 |
+
|
301 |
+
$button.siblings('.dashicons')
|
302 |
+
.css('opacity', 0)
|
303 |
+
.attr('class', 'dashicons')
|
304 |
+
.addClass( message_icon_class )
|
305 |
+
.animate({ opacity: 1}, fade_in_out_speed);
|
306 |
+
|
307 |
+
$button.siblings('.wppb-add-on-message')
|
308 |
+
.css('opacity', 0)
|
309 |
+
.attr( 'class', 'wppb-add-on-message' )
|
310 |
+
.html( message_text )
|
311 |
+
.animate({ opacity: 1}, fade_in_out_speed);
|
312 |
+
|
313 |
+
if( typeof( success ) != 'undefined' ) {
|
314 |
+
if( success == true ) {
|
315 |
+
$button.siblings('.dashicons')
|
316 |
+
.addClass('wppb-confirmation-success');
|
317 |
+
$button.siblings('.wppb-add-on-message')
|
318 |
+
.addClass('wppb-confirmation-success');
|
319 |
+
} else if( success == false ) {
|
320 |
+
$button.siblings('.dashicons')
|
321 |
+
.addClass('wppb-confirmation-error');
|
322 |
+
$button.siblings('.wppb-add-on-message')
|
323 |
+
.addClass('wppb-confirmation-error');
|
324 |
+
}
|
325 |
+
}
|
326 |
+
|
327 |
+
}, delay );
|
328 |
+
|
329 |
+
}
|
assets/js/jquery-pb-sitewide.js
CHANGED
@@ -106,4 +106,4 @@ jQuery( function() {
|
|
106 |
jQuery('#' + jQuery(this).attr('href')).dialog('open');
|
107 |
});
|
108 |
});
|
109 |
-
});
|
106 |
jQuery('#' + jQuery(this).attr('href')).dialog('open');
|
107 |
});
|
108 |
});
|
109 |
+
});
|
features/functions.php
CHANGED
@@ -234,13 +234,16 @@ function wppb_print_cpt_script( $hook ){
|
|
234 |
wp_enqueue_script( 'wppb-manage-fields-live-change', WPPB_PLUGIN_URL . 'assets/js/jquery-manage-fields-live-change.js', array(), PROFILE_BUILDER_VERSION, true );
|
235 |
}
|
236 |
|
237 |
-
if ( ( $hook == 'profile-builder_page_manage-fields' ) || ( $hook == 'profile-builder_page_profile-builder-basic-info' ) || ( $hook == 'profile-builder_page_profile-builder-modules' ) || ( $hook == 'profile-builder_page_profile-builder-general-settings' ) || ( $hook == 'profile-builder_page_profile-builder-admin-bar-settings' ) || ( $hook == 'profile-builder_page_profile-builder-register' ) || ( $hook == 'profile-builder_page_profile-builder-wppb_userListing' ) || ( $hook == 'profile-builder_page_profile-builder-wppb_customRedirect' ) || ( $hook == 'profile-builder_page_profile-builder-wppb_emailCustomizer' ) || ( $hook == 'profile-builder_page_profile-builder-wppb_emailCustomizerAdmin' ) ){
|
238 |
wp_enqueue_style( 'wppb-back-end-style', WPPB_PLUGIN_URL . 'assets/css/style-back-end.css', false, PROFILE_BUILDER_VERSION );
|
239 |
}
|
240 |
|
241 |
if ( $hook == 'profile-builder_page_profile-builder-general-settings' )
|
242 |
wp_enqueue_script( 'wppb-manage-fields-live-change', WPPB_PLUGIN_URL . 'assets/js/jquery-email-confirmation.js', array(), PROFILE_BUILDER_VERSION, true );
|
243 |
-
|
|
|
|
|
|
|
244 |
if ( isset( $_GET['post_type'] ) || isset( $_GET['post'] ) ){
|
245 |
if ( isset( $_GET['post_type'] ) )
|
246 |
$post_type = $_GET['post_type'];
|
234 |
wp_enqueue_script( 'wppb-manage-fields-live-change', WPPB_PLUGIN_URL . 'assets/js/jquery-manage-fields-live-change.js', array(), PROFILE_BUILDER_VERSION, true );
|
235 |
}
|
236 |
|
237 |
+
if ( ( $hook == 'profile-builder_page_manage-fields' ) || ( $hook == 'profile-builder_page_profile-builder-basic-info' ) || ( $hook == 'profile-builder_page_profile-builder-modules' ) || ( $hook == 'profile-builder_page_profile-builder-general-settings' ) || ( $hook == 'profile-builder_page_profile-builder-admin-bar-settings' ) || ( $hook == 'profile-builder_page_profile-builder-register' ) || ( $hook == 'profile-builder_page_profile-builder-wppb_userListing' ) || ( $hook == 'profile-builder_page_profile-builder-wppb_customRedirect' ) || ( $hook == 'profile-builder_page_profile-builder-wppb_emailCustomizer' ) || ( $hook == 'profile-builder_page_profile-builder-wppb_emailCustomizerAdmin' ) || ( $hook == 'profile-builder_page_profile-builder-add-ons' ) ){
|
238 |
wp_enqueue_style( 'wppb-back-end-style', WPPB_PLUGIN_URL . 'assets/css/style-back-end.css', false, PROFILE_BUILDER_VERSION );
|
239 |
}
|
240 |
|
241 |
if ( $hook == 'profile-builder_page_profile-builder-general-settings' )
|
242 |
wp_enqueue_script( 'wppb-manage-fields-live-change', WPPB_PLUGIN_URL . 'assets/js/jquery-email-confirmation.js', array(), PROFILE_BUILDER_VERSION, true );
|
243 |
+
|
244 |
+
if( $hook == 'profile-builder_page_profile-builder-add-ons' )
|
245 |
+
wp_enqueue_script( 'wppb-add-ons', WPPB_PLUGIN_URL . 'assets/js/jquery-pb-add-ons.js', array(), PROFILE_BUILDER_VERSION, true );
|
246 |
+
|
247 |
if ( isset( $_GET['post_type'] ) || isset( $_GET['post'] ) ){
|
248 |
if ( isset( $_GET['post_type'] ) )
|
249 |
$post_type = $_GET['post_type'];
|
front-end/class-formbuilder.php
CHANGED
@@ -5,6 +5,7 @@ class Profile_Builder_Form_Creator{
|
|
5 |
'form_fields' => array(),
|
6 |
'form_name' => '',
|
7 |
'role' => '', //used only for the register-form settings
|
|
|
8 |
);
|
9 |
private $args;
|
10 |
|
@@ -36,14 +37,15 @@ class Profile_Builder_Form_Creator{
|
|
36 |
function wppb_retrieve_custom_settings(){
|
37 |
$this->args['login_after_register'] = apply_filters( 'wppb_automatically_login_after_register', 'No' ); //used only for the register-form settings
|
38 |
$this->args['redirect_activated'] = apply_filters( 'wppb_redirect_default_setting', '' );
|
39 |
-
$this->args['redirect_url'] = apply_filters( 'wppb_redirect_default_location', wppb_curpageurl() );
|
40 |
/* for register forms check to see if we have a custom redirect "Redirect After Register" */
|
41 |
if( PROFILE_BUILDER == 'Profile Builder Pro' ) {
|
42 |
if ($this->args['form_type'] == 'register') {
|
43 |
$wppb_module_settings = get_option('wppb_module_settings');
|
44 |
if (isset($wppb_module_settings['wppb_customRedirect']) && ($wppb_module_settings['wppb_customRedirect'] == 'show')) {
|
45 |
$custom_redirect = get_option('customRedirectSettings');
|
46 |
-
|
|
|
47 |
$this->args['redirect_url'] = $this->args['custom_redirect_after_register_url'] = apply_filters('wppb_redirect_default_location', $custom_redirect['afterRegisterTarget']);
|
48 |
}
|
49 |
}
|
@@ -124,11 +126,10 @@ class Profile_Builder_Form_Creator{
|
|
124 |
}
|
125 |
|
126 |
function wppb_get_redirect(){
|
127 |
-
|
128 |
return $this->wppb_log_in_user();
|
129 |
-
if ( $this->args['redirect_activated'] == 'No' || ( $this->args['form_type'] == 'edit_profile' && $this->args['form_name'] == 'unspecified' ) || ( $this->args['form_type'] == 'register' && $this->args['form_name'] == 'unspecified' && wppb_curpageurl() == $this->args['redirect_url'] ) )
|
130 |
return '';
|
131 |
-
|
132 |
/* if we don't have a preference on the form for redirect then if we have a custom redirect "after register redirect" option redirect to that if not don't do anything */
|
133 |
if ( $this->args['redirect_activated'] == '-' ){
|
134 |
if( !empty( $this->args['custom_redirect_after_register_url'] ) )
|
5 |
'form_fields' => array(),
|
6 |
'form_name' => '',
|
7 |
'role' => '', //used only for the register-form settings
|
8 |
+
'redirect_url' => '',
|
9 |
);
|
10 |
private $args;
|
11 |
|
37 |
function wppb_retrieve_custom_settings(){
|
38 |
$this->args['login_after_register'] = apply_filters( 'wppb_automatically_login_after_register', 'No' ); //used only for the register-form settings
|
39 |
$this->args['redirect_activated'] = apply_filters( 'wppb_redirect_default_setting', '' );
|
40 |
+
$this->args['redirect_url'] = apply_filters( 'wppb_redirect_default_location', ($this->args['redirect_url'] != '') ? $this->args['redirect_url'] : wppb_curpageurl() );
|
41 |
/* for register forms check to see if we have a custom redirect "Redirect After Register" */
|
42 |
if( PROFILE_BUILDER == 'Profile Builder Pro' ) {
|
43 |
if ($this->args['form_type'] == 'register') {
|
44 |
$wppb_module_settings = get_option('wppb_module_settings');
|
45 |
if (isset($wppb_module_settings['wppb_customRedirect']) && ($wppb_module_settings['wppb_customRedirect'] == 'show')) {
|
46 |
$custom_redirect = get_option('customRedirectSettings');
|
47 |
+
//Make sure Custom Redirects are set and there was no "redirect_url" parameter set in the shortcode
|
48 |
+
if (isset($custom_redirect['afterRegister']) && ($custom_redirect['afterRegister'] == 'yes') && (trim($custom_redirect['afterRegisterTarget']) != '') && ($this->args['redirect_url'] == wppb_curpageurl())) {
|
49 |
$this->args['redirect_url'] = $this->args['custom_redirect_after_register_url'] = apply_filters('wppb_redirect_default_location', $custom_redirect['afterRegisterTarget']);
|
50 |
}
|
51 |
}
|
126 |
}
|
127 |
|
128 |
function wppb_get_redirect(){
|
129 |
+
if ( $this->args['login_after_register'] == 'Yes' )
|
130 |
return $this->wppb_log_in_user();
|
131 |
+
if ( $this->args['redirect_activated'] == 'No' || ( $this->args['form_type'] == 'edit_profile' && $this->args['form_name'] == 'unspecified' && wppb_curpageurl() == $this->args['redirect_url'] ) || ( $this->args['form_type'] == 'register' && $this->args['form_name'] == 'unspecified' && wppb_curpageurl() == $this->args['redirect_url'] ) )
|
132 |
return '';
|
|
|
133 |
/* if we don't have a preference on the form for redirect then if we have a custom redirect "after register redirect" option redirect to that if not don't do anything */
|
134 |
if ( $this->args['redirect_activated'] == '-' ){
|
135 |
if( !empty( $this->args['custom_redirect_after_register_url'] ) )
|
front-end/edit-profile.php
CHANGED
@@ -52,9 +52,9 @@ function wppb_autologin_after_password_changed(){
|
|
52 |
|
53 |
function wppb_front_end_profile_info( $atts ){
|
54 |
// get value set in the shortcode as parameter, still need to default to something else than empty string
|
55 |
-
extract( shortcode_atts( array( 'form_name' => 'unspecified' ), $atts, 'wppb-edit-profile' ) );
|
56 |
global $$form_name;
|
57 |
-
$$form_name = new Profile_Builder_Form_Creator( array( 'form_type' => 'edit_profile', 'form_name' => $form_name ) );
|
58 |
|
59 |
return $$form_name;
|
60 |
}
|
52 |
|
53 |
function wppb_front_end_profile_info( $atts ){
|
54 |
// get value set in the shortcode as parameter, still need to default to something else than empty string
|
55 |
+
extract( shortcode_atts( array( 'form_name' => 'unspecified', 'redirect_url' => '' ), $atts, 'wppb-edit-profile' ) );
|
56 |
global $$form_name;
|
57 |
+
$$form_name = new Profile_Builder_Form_Creator( array( 'form_type' => 'edit_profile', 'form_name' => $form_name, 'redirect_url' => $redirect_url ) );
|
58 |
|
59 |
return $$form_name;
|
60 |
}
|
front-end/login.php
CHANGED
@@ -132,7 +132,7 @@ add_filter( 'login_redirect', 'wppb_login_redirect', 10, 3 );
|
|
132 |
/* shortcode function */
|
133 |
function wppb_front_end_login( $atts ){
|
134 |
|
135 |
-
extract( shortcode_atts( array( 'display' => true, 'redirect' =>'', 'register_url'=>'', 'lostpassword_url'=>'' ), $atts ) );
|
136 |
|
137 |
$wppb_generalSettings = get_option('wppb_general_settings');
|
138 |
|
@@ -140,6 +140,9 @@ function wppb_front_end_login( $atts ){
|
|
140 |
// set up the form arguments
|
141 |
$form_args = array( 'echo' => false, 'id_submit' => 'wppb-submit' );
|
142 |
|
|
|
|
|
|
|
143 |
// maybe set up the redirect argument
|
144 |
if( empty( $redirect ) ){
|
145 |
if( PROFILE_BUILDER == 'Profile Builder Pro' ) {
|
132 |
/* shortcode function */
|
133 |
function wppb_front_end_login( $atts ){
|
134 |
|
135 |
+
extract( shortcode_atts( array( 'display' => true, 'redirect' => '', 'redirect_url' => '', 'register_url' => '', 'lostpassword_url' => '' ), $atts ) );
|
136 |
|
137 |
$wppb_generalSettings = get_option('wppb_general_settings');
|
138 |
|
140 |
// set up the form arguments
|
141 |
$form_args = array( 'echo' => false, 'id_submit' => 'wppb-submit' );
|
142 |
|
143 |
+
//Add support for "redirect_url" parameter for Login shortcode (will do the same thing as "redirect" - for consistency with Register, Edit Profile shortcodes)
|
144 |
+
if ( !empty($redirect_url) ) $redirect = $redirect_url;
|
145 |
+
|
146 |
// maybe set up the redirect argument
|
147 |
if( empty( $redirect ) ){
|
148 |
if( PROFILE_BUILDER == 'Profile Builder Pro' ) {
|
front-end/recover.php
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
<?php
|
2 |
/**
|
3 |
-
* Function that checks if a user is approved before reseting the password
|
4 |
*
|
5 |
* @param string $data either the user login or the users email
|
6 |
* @param string $what what field we query for when getting the user
|
@@ -8,7 +8,7 @@
|
|
8 |
function wppb_check_for_unapproved_user( $data, $what ){
|
9 |
$retMessage = '';
|
10 |
$messageNo = '';
|
11 |
-
|
12 |
$wppb_generalSettings = get_option( 'wppb_general_settings' );
|
13 |
if( !empty( $wppb_generalSettings['adminApproval'] ) && $wppb_generalSettings['adminApproval'] == 'yes' ){
|
14 |
$user = ( ( $what == 'user_email' ) ? get_user_by( 'email', $data ) : get_user_by( 'login', $data ) );
|
@@ -16,11 +16,11 @@ function wppb_check_for_unapproved_user( $data, $what ){
|
|
16 |
if ( wp_get_object_terms( $user->data->ID, 'user_status' ) ){
|
17 |
$retMessage = '<strong>'. __('ERROR', 'profilebuilder') . '</strong>: ' . __('Your account has to be confirmed by an administrator before you can use the "Password Reset" feature.', 'profilebuilder');
|
18 |
$retMessage = apply_filters('wppb_recover_password_unapporved_user', $retMessage);
|
19 |
-
|
20 |
$messageNo = '6';
|
21 |
}
|
22 |
}
|
23 |
-
|
24 |
return array( $retMessage, $messageNo );
|
25 |
}
|
26 |
|
@@ -28,7 +28,7 @@ function wppb_check_for_unapproved_user( $data, $what ){
|
|
28 |
* Function that retrieves the unique user key from the database. If we don't have one we generate one and add it to the database
|
29 |
*
|
30 |
* @param string $requested_user_login the user login
|
31 |
-
*
|
32 |
*/
|
33 |
function wppb_retrieve_activation_key( $requested_user_login ){
|
34 |
global $wpdb;
|
@@ -40,11 +40,11 @@ function wppb_retrieve_activation_key( $requested_user_login ){
|
|
40 |
// Generate something random for a key...
|
41 |
$key = wp_generate_password( 20, false );
|
42 |
do_action('wppb_retrieve_password_key', $requested_user_login, $key);
|
43 |
-
|
44 |
// Now insert the new md5 key into the db
|
45 |
$wpdb->update($wpdb->users, array('user_activation_key' => $key), array('user_login' => $requested_user_login));
|
46 |
}
|
47 |
-
|
48 |
return $key;
|
49 |
}
|
50 |
|
@@ -52,7 +52,7 @@ function wppb_retrieve_activation_key( $requested_user_login ){
|
|
52 |
* Function that creates a generate new password form
|
53 |
*
|
54 |
* @param array $post_data $_POST
|
55 |
-
*
|
56 |
*/
|
57 |
function wppb_create_recover_password_form( $user, $post_data ){
|
58 |
?>
|
@@ -92,8 +92,8 @@ function wppb_create_recover_password_form( $user, $post_data ){
|
|
92 |
<input name="recover_password2" type="submit" id="wppb-recover-password-button" class="submit button" value="<?php echo apply_filters('wppb_recover_password_button_name1', $button_name); ?>" />
|
93 |
<input name="action2" type="hidden" id="action2" value="recover_password2" />
|
94 |
</p><!-- .form-submit -->
|
95 |
-
<?php wp_nonce_field( 'verify_true_password_recovery2_'.$user->ID, 'password_recovery_nonce_field2' ); ?>
|
96 |
-
</form><!-- #recover_password -->
|
97 |
<?php
|
98 |
}
|
99 |
|
@@ -102,16 +102,16 @@ function wppb_create_recover_password_form( $user, $post_data ){
|
|
102 |
*
|
103 |
* @param WP_User $user the user object
|
104 |
* @param array $post_data $_POST
|
105 |
-
*
|
106 |
*/
|
107 |
function wppb_create_generate_password_form( $post_data ){
|
108 |
?>
|
109 |
<form enctype="multipart/form-data" method="post" id="wppb-recover-password" class="wppb-user-forms" action="<?php echo add_query_arg( 'submitted', 'yes', wppb_curpageurl() ); ?>">
|
110 |
-
<?php
|
111 |
$recover_notification = '<p>' . __( 'Please enter your username or email address.', 'profilebuilder' );
|
112 |
$recover_notification .= '<br/>'.__( 'You will receive a link to create a new password via email.', 'profilebuilder' ).'</p>';
|
113 |
echo apply_filters( 'wppb_recover_password_message1', $recover_notification );
|
114 |
-
|
115 |
$username_email = ( isset( $post_data['username_email'] ) ? $post_data['username_email'] : '' );
|
116 |
|
117 |
$recover_input = '<ul>
|
@@ -120,7 +120,7 @@ function wppb_create_recover_password_form( $user, $post_data ){
|
|
120 |
<input class="text-input" name="username_email" type="text" id="username_email" value="'.trim( $username_email ).'" />
|
121 |
</li><!-- .username_email --></ul>';
|
122 |
echo apply_filters( 'wppb_recover_password_gemerate_password_input', $recover_input, trim( $username_email ) );
|
123 |
-
?>
|
124 |
<p class="form-submit">
|
125 |
<?php $button_name = __('Get New Password', 'profilebuilder'); ?>
|
126 |
<input name="recover_password" type="submit" id="wppb-recover-password-button" class="submit button" value="<?php echo apply_filters('wppb_recover_password_button_name3', $button_name); ?>" />
|
@@ -139,36 +139,36 @@ function wppb_front_end_password_recovery(){
|
|
139 |
global $wppb_shortcode_on_front;
|
140 |
$wppb_shortcode_on_front = true;
|
141 |
$message = $messageNo = $message2 = $messageNo2 = $linkLoginName = $linkKey = '';
|
142 |
-
|
143 |
global $wpdb;
|
144 |
|
145 |
ob_start();
|
146 |
|
147 |
//Get general settings
|
148 |
$wppb_generalSettings = get_option( 'wppb_general_settings' );
|
149 |
-
|
150 |
// If the user entered an email/username, process the request
|
151 |
if ( 'POST' == $_SERVER['REQUEST_METHOD'] && !empty( $_POST['action'] ) && $_POST['action'] == 'recover_password' && wp_verify_nonce($_POST['password_recovery_nonce_field'],'verify_true_password_recovery') ) {
|
152 |
-
|
153 |
$postedData = $_POST['username_email']; //we get the raw data
|
154 |
//check to see if it's an e-mail (and if this is valid/present in the database) or is a username
|
155 |
-
|
156 |
-
|
157 |
// if we do not have an email in the posted date we try to get the email for that user
|
158 |
if( !is_email( $postedData ) ){
|
159 |
if (username_exists($postedData)){
|
160 |
$query = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM $wpdb->users WHERE user_login= %s", $postedData ) );
|
161 |
if( !empty( $query[0] ) ){
|
162 |
-
$postedData = $query[0]->user_email;
|
163 |
}
|
164 |
}
|
165 |
else{
|
166 |
$message = __( 'The username entered wasn\'t found in the database!', 'profilebuilder').'<br/>'.__('Please check that you entered the correct username.', 'profilebuilder' );
|
167 |
$message = apply_filters( 'wppb_recover_password_sent_message4', $message );
|
168 |
$messageNo = '4';
|
169 |
-
}
|
170 |
}
|
171 |
-
|
172 |
// we should have an email by this point
|
173 |
if ( is_email( $postedData ) ){
|
174 |
if ( email_exists( $postedData ) ){
|
@@ -176,34 +176,34 @@ function wppb_front_end_password_recovery(){
|
|
176 |
if ($retVal[0] != ''){
|
177 |
$message = $retVal[0];
|
178 |
$messageNo = $retVal [1];
|
179 |
-
|
180 |
}else{
|
181 |
$message = sprintf( __( 'Check your e-mail for the confirmation link.', 'profilebuilder'), $postedData );
|
182 |
$message = apply_filters( 'wppb_recover_password_sent_message1', $message, $postedData );
|
183 |
$messageNo = '1';
|
184 |
-
|
185 |
//verify e-mail validity
|
186 |
$query = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM $wpdb->users WHERE user_email= %s", $postedData ) );
|
187 |
if( !empty( $query[0] ) ){
|
188 |
$requestedUserID = $query[0]->ID;
|
189 |
-
$requestedUserLogin = $query[0]->user_login;
|
190 |
$requestedUserEmail = $query[0]->user_email;
|
191 |
|
192 |
if( $wppb_generalSettings['loginWith'] == 'username' )
|
193 |
$display_username_email = $query[0]->user_login;
|
194 |
else
|
195 |
$display_username_email = $query[0]->user_email;
|
196 |
-
|
197 |
//search if there is already an activation key present, if not create one
|
198 |
$key = wppb_retrieve_activation_key( $requestedUserLogin );
|
199 |
-
|
200 |
//send primary email message
|
201 |
$recoveruserMailMessage1 = sprintf( __('Someone requested that the password be reset for the following account: <b>%1$s</b><br/>If this was a mistake, just ignore this email and nothing will happen.<br/>To reset your password, visit the following link:%2$s', 'profilebuilder'), $display_username_email, '<a href="'.add_query_arg( array( 'loginName' => $requestedUserLogin, 'key' => $key ), wppb_curpageurl() ).'">'.add_query_arg( array( 'loginName' => $requestedUserLogin, 'key' => $key ), wppb_curpageurl() ).'</a>');
|
202 |
-
$recoveruserMailMessage1 = apply_filters( 'wppb_recover_password_message_content_sent_to_user1', $recoveruserMailMessage1, $requestedUserID, $requestedUserLogin );
|
203 |
-
|
204 |
$recoveruserMailMessageTitle1 = sprintf(__('Password Reset from "%1$s"', 'profilebuilder'), $blogname = wp_specialchars_decode(get_option('blogname'), ENT_QUOTES));
|
205 |
-
$recoveruserMailMessageTitle1 = apply_filters('wppb_recover_password_message_title_sent_to_user1', $recoveruserMailMessageTitle1);
|
206 |
-
|
207 |
//we add this filter to enable html encoding
|
208 |
add_filter('wp_mail_content_type',create_function('', 'return "text/html"; '));
|
209 |
//send mail to the user notifying him of the reset request
|
@@ -217,14 +217,14 @@ function wppb_front_end_password_recovery(){
|
|
217 |
}
|
218 |
}
|
219 |
}
|
220 |
-
|
221 |
}elseif ( !email_exists( $postedData ) ){
|
222 |
$message = __('The email address entered wasn\'t found in the database!', 'profilebuilder').'<br/>'.__('Please check that you entered the correct email address.', 'profilebuilder');
|
223 |
$message = apply_filters('wppb_recover_password_sent_message2', $message);
|
224 |
$messageNo = '2';
|
225 |
}
|
226 |
-
}
|
227 |
-
|
228 |
}
|
229 |
// If the user used the correct key-code, update his/her password
|
230 |
elseif ( 'POST' == $_SERVER['REQUEST_METHOD'] && !empty( $_POST['action2'] ) && $_POST['action2'] == 'recover_password2' && wp_verify_nonce( $_POST['password_recovery_nonce_field2'], 'verify_true_password_recovery2_'.$_POST['userData'] ) ) {
|
@@ -264,10 +264,10 @@ function wppb_front_end_password_recovery(){
|
|
264 |
|
265 |
//send secondary mail to the user containing the username and the new password
|
266 |
$recoveruserMailMessage2 = sprintf( __( 'You have successfully reset your password to: %1$s', 'profilebuilder' ), $new_pass );
|
267 |
-
$recoveruserMailMessage2 = apply_filters( 'wppb_recover_password_message_content_sent_to_user2', $recoveruserMailMessage2, $display_username_email );
|
268 |
|
269 |
$recoveruserMailMessageTitle2 = sprintf( __('Password Successfully Reset for %1$s on "%2$s"', 'profilebuilder' ), $display_username_email, $blogname = wp_specialchars_decode( get_option('blogname'), ENT_QUOTES ) );
|
270 |
-
$recoveruserMailMessageTitle2 = apply_filters( 'wppb_recover_password_message_title_sent_to_user2', $recoveruserMailMessageTitle2 );
|
271 |
|
272 |
//we add this filter to enable html encoding
|
273 |
add_filter( 'wp_mail_content_type',create_function( '', 'return "text/html"; ') );
|
@@ -278,15 +278,15 @@ function wppb_front_end_password_recovery(){
|
|
278 |
|
279 |
//send email to admin
|
280 |
$recoveradminMailMessage = sprintf( __( '%1$s has requested a password change via the password reset feature.<br/>His/her new password is:%2$s', 'profilebuilder' ), $display_username_email, $_POST['passw1'] );
|
281 |
-
$recoveradminMailMessage = apply_filters( 'wppb_recover_password_message_content_sent_to_admin', $recoveradminMailMessage );
|
282 |
|
283 |
$recoveradminMailMessageTitle = sprintf( __( 'Password Successfully Reset for %1$s on "%2$s"', 'profilebuilder' ), $display_username_email, $blogname = wp_specialchars_decode( get_option('blogname'), ENT_QUOTES ) );
|
284 |
-
$recoveradminMailMessageTitle = apply_filters( 'wppb_recover_password_message_title_sent_to_admin', $recoveradminMailMessageTitle );
|
285 |
|
286 |
|
287 |
//we disable the feature to send the admin a notification mail but can be still used using filters
|
288 |
$recoveradminMailMessageTitle = '';
|
289 |
-
$recoveradminMailMessageTitle = apply_filters( 'wppb_recover_password_message_title_sent_to_admin', $recoveradminMailMessageTitle );
|
290 |
|
291 |
//we add this filter to enable html encoding
|
292 |
add_filter('wp_mail_content_type',create_function('', 'return "text/html"; '));
|
@@ -299,9 +299,9 @@ function wppb_front_end_password_recovery(){
|
|
299 |
$message2 = __( 'The entered passwords don\'t match!', 'profilebuilder' );
|
300 |
$messageNo2 = '2';
|
301 |
}
|
302 |
-
|
303 |
}
|
304 |
-
|
305 |
?>
|
306 |
|
307 |
<div class="wppb_holder" id="wppb-recover-password">
|
@@ -318,54 +318,54 @@ function wppb_front_end_password_recovery(){
|
|
318 |
$login = $_GET['loginName'];
|
319 |
|
320 |
$user = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $wpdb->users WHERE user_activation_key = %s AND user_login = %s", $key, $login ) );
|
321 |
-
|
322 |
if( !empty( $user ) ){
|
323 |
//check if the "finalAction" variable is not in the address bar, if it is, don't display the form anymore
|
324 |
if( isset( $_GET['finalAction'] ) && ( $_GET['finalAction'] == 'yes' ) ){
|
325 |
if( $messageNo2 == '2' ){
|
326 |
echo apply_filters( 'wppb_recover_password_password_changed_message2', '<p class="wppb-error">'.$message2.'</p>', $message2 );
|
327 |
-
|
328 |
wppb_create_recover_password_form( $user, $_POST );
|
329 |
|
330 |
}elseif( $messageNo2 == '1' )
|
331 |
-
echo apply_filters( 'wppb_recover_password_password_changed_message1', '<p class="wppb-success">'.$message2.'</p>', $message2 );
|
332 |
-
|
333 |
}else{
|
334 |
wppb_create_recover_password_form( $user, $_POST );
|
335 |
}
|
336 |
}else{
|
337 |
if( $messageNo2 == '1' )
|
338 |
-
echo apply_filters( 'wppb_recover_password_password_changed_message1', '<p class="wppb-success">'.$message2.'</p>', $message2 );
|
339 |
-
|
340 |
elseif( $messageNo2 == '2' )
|
341 |
echo apply_filters( 'wppb_recover_password_password_changed_message2', '<p class="wppb-error">'.$message2.'</p>', $message2 );
|
342 |
-
|
343 |
else
|
344 |
echo apply_filters( 'wppb_recover_password_invalid_key_message', '<p class="wppb-warning"><b>'.__( 'ERROR:', 'profilebuilder' ).'</b>'.__( 'Invalid key!', 'profilebuilder' ).'</p>' );
|
345 |
}
|
346 |
-
|
347 |
}else{
|
348 |
//display error message and the form
|
349 |
if (($messageNo == '') || ($messageNo == '2') || ($messageNo == '4')){
|
350 |
echo apply_filters( 'wppb_recover_password_displayed_message1', '<p class="wppb-warning">'.$message.'</p>' );
|
351 |
-
|
352 |
wppb_create_generate_password_form( $_POST );
|
353 |
-
|
354 |
}elseif (($messageNo == '5') || ($messageNo == '6'))
|
355 |
-
echo apply_filters( 'wppb_recover_password_displayed_message1', '<p class="wppb-warning">'.$message.'</p>' );
|
356 |
-
|
357 |
else
|
358 |
-
echo apply_filters( 'wppb_recover_password_displayed_message2', '<p class="wppb-success">'.$message.'</p>' ); //display success message
|
359 |
}
|
360 |
-
|
361 |
// use this action hook to add extra content after the password recovery form.
|
362 |
do_action( 'wppb_after_recover_password_fields' );
|
363 |
?>
|
364 |
</div>
|
365 |
-
|
366 |
<?php
|
367 |
$output = ob_get_contents();
|
368 |
-
ob_end_clean();
|
369 |
-
|
370 |
return $output;
|
371 |
}
|
1 |
<?php
|
2 |
/**
|
3 |
+
* Function that checks if a user is approved before reseting the password
|
4 |
*
|
5 |
* @param string $data either the user login or the users email
|
6 |
* @param string $what what field we query for when getting the user
|
8 |
function wppb_check_for_unapproved_user( $data, $what ){
|
9 |
$retMessage = '';
|
10 |
$messageNo = '';
|
11 |
+
|
12 |
$wppb_generalSettings = get_option( 'wppb_general_settings' );
|
13 |
if( !empty( $wppb_generalSettings['adminApproval'] ) && $wppb_generalSettings['adminApproval'] == 'yes' ){
|
14 |
$user = ( ( $what == 'user_email' ) ? get_user_by( 'email', $data ) : get_user_by( 'login', $data ) );
|
16 |
if ( wp_get_object_terms( $user->data->ID, 'user_status' ) ){
|
17 |
$retMessage = '<strong>'. __('ERROR', 'profilebuilder') . '</strong>: ' . __('Your account has to be confirmed by an administrator before you can use the "Password Reset" feature.', 'profilebuilder');
|
18 |
$retMessage = apply_filters('wppb_recover_password_unapporved_user', $retMessage);
|
19 |
+
|
20 |
$messageNo = '6';
|
21 |
}
|
22 |
}
|
23 |
+
|
24 |
return array( $retMessage, $messageNo );
|
25 |
}
|
26 |
|
28 |
* Function that retrieves the unique user key from the database. If we don't have one we generate one and add it to the database
|
29 |
*
|
30 |
* @param string $requested_user_login the user login
|
31 |
+
*
|
32 |
*/
|
33 |
function wppb_retrieve_activation_key( $requested_user_login ){
|
34 |
global $wpdb;
|
40 |
// Generate something random for a key...
|
41 |
$key = wp_generate_password( 20, false );
|
42 |
do_action('wppb_retrieve_password_key', $requested_user_login, $key);
|
43 |
+
|
44 |
// Now insert the new md5 key into the db
|
45 |
$wpdb->update($wpdb->users, array('user_activation_key' => $key), array('user_login' => $requested_user_login));
|
46 |
}
|
47 |
+
|
48 |
return $key;
|
49 |
}
|
50 |
|
52 |
* Function that creates a generate new password form
|
53 |
*
|
54 |
* @param array $post_data $_POST
|
55 |
+
*
|
56 |
*/
|
57 |
function wppb_create_recover_password_form( $user, $post_data ){
|
58 |
?>
|
92 |
<input name="recover_password2" type="submit" id="wppb-recover-password-button" class="submit button" value="<?php echo apply_filters('wppb_recover_password_button_name1', $button_name); ?>" />
|
93 |
<input name="action2" type="hidden" id="action2" value="recover_password2" />
|
94 |
</p><!-- .form-submit -->
|
95 |
+
<?php wp_nonce_field( 'verify_true_password_recovery2_'.$user->ID, 'password_recovery_nonce_field2' ); ?>
|
96 |
+
</form><!-- #recover_password -->
|
97 |
<?php
|
98 |
}
|
99 |
|
102 |
*
|
103 |
* @param WP_User $user the user object
|
104 |
* @param array $post_data $_POST
|
105 |
+
*
|
106 |
*/
|
107 |
function wppb_create_generate_password_form( $post_data ){
|
108 |
?>
|
109 |
<form enctype="multipart/form-data" method="post" id="wppb-recover-password" class="wppb-user-forms" action="<?php echo add_query_arg( 'submitted', 'yes', wppb_curpageurl() ); ?>">
|
110 |
+
<?php
|
111 |
$recover_notification = '<p>' . __( 'Please enter your username or email address.', 'profilebuilder' );
|
112 |
$recover_notification .= '<br/>'.__( 'You will receive a link to create a new password via email.', 'profilebuilder' ).'</p>';
|
113 |
echo apply_filters( 'wppb_recover_password_message1', $recover_notification );
|
114 |
+
|
115 |
$username_email = ( isset( $post_data['username_email'] ) ? $post_data['username_email'] : '' );
|
116 |
|
117 |
$recover_input = '<ul>
|
120 |
<input class="text-input" name="username_email" type="text" id="username_email" value="'.trim( $username_email ).'" />
|
121 |
</li><!-- .username_email --></ul>';
|
122 |
echo apply_filters( 'wppb_recover_password_gemerate_password_input', $recover_input, trim( $username_email ) );
|
123 |
+
?>
|
124 |
<p class="form-submit">
|
125 |
<?php $button_name = __('Get New Password', 'profilebuilder'); ?>
|
126 |
<input name="recover_password" type="submit" id="wppb-recover-password-button" class="submit button" value="<?php echo apply_filters('wppb_recover_password_button_name3', $button_name); ?>" />
|
139 |
global $wppb_shortcode_on_front;
|
140 |
$wppb_shortcode_on_front = true;
|
141 |
$message = $messageNo = $message2 = $messageNo2 = $linkLoginName = $linkKey = '';
|
142 |
+
|
143 |
global $wpdb;
|
144 |
|
145 |
ob_start();
|
146 |
|
147 |
//Get general settings
|
148 |
$wppb_generalSettings = get_option( 'wppb_general_settings' );
|
149 |
+
|
150 |
// If the user entered an email/username, process the request
|
151 |
if ( 'POST' == $_SERVER['REQUEST_METHOD'] && !empty( $_POST['action'] ) && $_POST['action'] == 'recover_password' && wp_verify_nonce($_POST['password_recovery_nonce_field'],'verify_true_password_recovery') ) {
|
152 |
+
|
153 |
$postedData = $_POST['username_email']; //we get the raw data
|
154 |
//check to see if it's an e-mail (and if this is valid/present in the database) or is a username
|
155 |
+
|
156 |
+
|
157 |
// if we do not have an email in the posted date we try to get the email for that user
|
158 |
if( !is_email( $postedData ) ){
|
159 |
if (username_exists($postedData)){
|
160 |
$query = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM $wpdb->users WHERE user_login= %s", $postedData ) );
|
161 |
if( !empty( $query[0] ) ){
|
162 |
+
$postedData = $query[0]->user_email;
|
163 |
}
|
164 |
}
|
165 |
else{
|
166 |
$message = __( 'The username entered wasn\'t found in the database!', 'profilebuilder').'<br/>'.__('Please check that you entered the correct username.', 'profilebuilder' );
|
167 |
$message = apply_filters( 'wppb_recover_password_sent_message4', $message );
|
168 |
$messageNo = '4';
|
169 |
+
}
|
170 |
}
|
171 |
+
|
172 |
// we should have an email by this point
|
173 |
if ( is_email( $postedData ) ){
|
174 |
if ( email_exists( $postedData ) ){
|
176 |
if ($retVal[0] != ''){
|
177 |
$message = $retVal[0];
|
178 |
$messageNo = $retVal [1];
|
179 |
+
|
180 |
}else{
|
181 |
$message = sprintf( __( 'Check your e-mail for the confirmation link.', 'profilebuilder'), $postedData );
|
182 |
$message = apply_filters( 'wppb_recover_password_sent_message1', $message, $postedData );
|
183 |
$messageNo = '1';
|
184 |
+
|
185 |
//verify e-mail validity
|
186 |
$query = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM $wpdb->users WHERE user_email= %s", $postedData ) );
|
187 |
if( !empty( $query[0] ) ){
|
188 |
$requestedUserID = $query[0]->ID;
|
189 |
+
$requestedUserLogin = $query[0]->user_login;
|
190 |
$requestedUserEmail = $query[0]->user_email;
|
191 |
|
192 |
if( $wppb_generalSettings['loginWith'] == 'username' )
|
193 |
$display_username_email = $query[0]->user_login;
|
194 |
else
|
195 |
$display_username_email = $query[0]->user_email;
|
196 |
+
|
197 |
//search if there is already an activation key present, if not create one
|
198 |
$key = wppb_retrieve_activation_key( $requestedUserLogin );
|
199 |
+
|
200 |
//send primary email message
|
201 |
$recoveruserMailMessage1 = sprintf( __('Someone requested that the password be reset for the following account: <b>%1$s</b><br/>If this was a mistake, just ignore this email and nothing will happen.<br/>To reset your password, visit the following link:%2$s', 'profilebuilder'), $display_username_email, '<a href="'.add_query_arg( array( 'loginName' => $requestedUserLogin, 'key' => $key ), wppb_curpageurl() ).'">'.add_query_arg( array( 'loginName' => $requestedUserLogin, 'key' => $key ), wppb_curpageurl() ).'</a>');
|
202 |
+
$recoveruserMailMessage1 = apply_filters( 'wppb_recover_password_message_content_sent_to_user1', $recoveruserMailMessage1, $requestedUserID, $requestedUserLogin, $requestedUserEmail );
|
203 |
+
|
204 |
$recoveruserMailMessageTitle1 = sprintf(__('Password Reset from "%1$s"', 'profilebuilder'), $blogname = wp_specialchars_decode(get_option('blogname'), ENT_QUOTES));
|
205 |
+
$recoveruserMailMessageTitle1 = apply_filters('wppb_recover_password_message_title_sent_to_user1', $recoveruserMailMessageTitle1, $requestedUserLogin);
|
206 |
+
|
207 |
//we add this filter to enable html encoding
|
208 |
add_filter('wp_mail_content_type',create_function('', 'return "text/html"; '));
|
209 |
//send mail to the user notifying him of the reset request
|
217 |
}
|
218 |
}
|
219 |
}
|
220 |
+
|
221 |
}elseif ( !email_exists( $postedData ) ){
|
222 |
$message = __('The email address entered wasn\'t found in the database!', 'profilebuilder').'<br/>'.__('Please check that you entered the correct email address.', 'profilebuilder');
|
223 |
$message = apply_filters('wppb_recover_password_sent_message2', $message);
|
224 |
$messageNo = '2';
|
225 |
}
|
226 |
+
}
|
227 |
+
|
228 |
}
|
229 |
// If the user used the correct key-code, update his/her password
|
230 |
elseif ( 'POST' == $_SERVER['REQUEST_METHOD'] && !empty( $_POST['action2'] ) && $_POST['action2'] == 'recover_password2' && wp_verify_nonce( $_POST['password_recovery_nonce_field2'], 'verify_true_password_recovery2_'.$_POST['userData'] ) ) {
|
264 |
|
265 |
//send secondary mail to the user containing the username and the new password
|
266 |
$recoveruserMailMessage2 = sprintf( __( 'You have successfully reset your password to: %1$s', 'profilebuilder' ), $new_pass );
|
267 |
+
$recoveruserMailMessage2 = apply_filters( 'wppb_recover_password_message_content_sent_to_user2', $recoveruserMailMessage2, $display_username_email, $new_pass, $userID );
|
268 |
|
269 |
$recoveruserMailMessageTitle2 = sprintf( __('Password Successfully Reset for %1$s on "%2$s"', 'profilebuilder' ), $display_username_email, $blogname = wp_specialchars_decode( get_option('blogname'), ENT_QUOTES ) );
|
270 |
+
$recoveruserMailMessageTitle2 = apply_filters( 'wppb_recover_password_message_title_sent_to_user2', $recoveruserMailMessageTitle2, $display_username_email );
|
271 |
|
272 |
//we add this filter to enable html encoding
|
273 |
add_filter( 'wp_mail_content_type',create_function( '', 'return "text/html"; ') );
|
278 |
|
279 |
//send email to admin
|
280 |
$recoveradminMailMessage = sprintf( __( '%1$s has requested a password change via the password reset feature.<br/>His/her new password is:%2$s', 'profilebuilder' ), $display_username_email, $_POST['passw1'] );
|
281 |
+
$recoveradminMailMessage = apply_filters( 'wppb_recover_password_message_content_sent_to_admin', $recoveradminMailMessage, $display_username_email, $_POST['passw1'], $userID );
|
282 |
|
283 |
$recoveradminMailMessageTitle = sprintf( __( 'Password Successfully Reset for %1$s on "%2$s"', 'profilebuilder' ), $display_username_email, $blogname = wp_specialchars_decode( get_option('blogname'), ENT_QUOTES ) );
|
284 |
+
$recoveradminMailMessageTitle = apply_filters( 'wppb_recover_password_message_title_sent_to_admin', $recoveradminMailMessageTitle, $display_username_email );
|
285 |
|
286 |
|
287 |
//we disable the feature to send the admin a notification mail but can be still used using filters
|
288 |
$recoveradminMailMessageTitle = '';
|
289 |
+
$recoveradminMailMessageTitle = apply_filters( 'wppb_recover_password_message_title_sent_to_admin', $recoveradminMailMessageTitle, $display_username_email );
|
290 |
|
291 |
//we add this filter to enable html encoding
|
292 |
add_filter('wp_mail_content_type',create_function('', 'return "text/html"; '));
|
299 |
$message2 = __( 'The entered passwords don\'t match!', 'profilebuilder' );
|
300 |
$messageNo2 = '2';
|
301 |
}
|
302 |
+
|
303 |
}
|
304 |
+
|
305 |
?>
|
306 |
|
307 |
<div class="wppb_holder" id="wppb-recover-password">
|
318 |
$login = $_GET['loginName'];
|
319 |
|
320 |
$user = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $wpdb->users WHERE user_activation_key = %s AND user_login = %s", $key, $login ) );
|
321 |
+
|
322 |
if( !empty( $user ) ){
|
323 |
//check if the "finalAction" variable is not in the address bar, if it is, don't display the form anymore
|
324 |
if( isset( $_GET['finalAction'] ) && ( $_GET['finalAction'] == 'yes' ) ){
|
325 |
if( $messageNo2 == '2' ){
|
326 |
echo apply_filters( 'wppb_recover_password_password_changed_message2', '<p class="wppb-error">'.$message2.'</p>', $message2 );
|
327 |
+
|
328 |
wppb_create_recover_password_form( $user, $_POST );
|
329 |
|
330 |
}elseif( $messageNo2 == '1' )
|
331 |
+
echo apply_filters( 'wppb_recover_password_password_changed_message1', '<p class="wppb-success">'.$message2.'</p>', $message2 );
|
332 |
+
|
333 |
}else{
|
334 |
wppb_create_recover_password_form( $user, $_POST );
|
335 |
}
|
336 |
}else{
|
337 |
if( $messageNo2 == '1' )
|
338 |
+
echo apply_filters( 'wppb_recover_password_password_changed_message1', '<p class="wppb-success">'.$message2.'</p>', $message2 );
|
339 |
+
|
340 |
elseif( $messageNo2 == '2' )
|
341 |
echo apply_filters( 'wppb_recover_password_password_changed_message2', '<p class="wppb-error">'.$message2.'</p>', $message2 );
|
342 |
+
|
343 |
else
|
344 |
echo apply_filters( 'wppb_recover_password_invalid_key_message', '<p class="wppb-warning"><b>'.__( 'ERROR:', 'profilebuilder' ).'</b>'.__( 'Invalid key!', 'profilebuilder' ).'</p>' );
|
345 |
}
|
346 |
+
|
347 |
}else{
|
348 |
//display error message and the form
|
349 |
if (($messageNo == '') || ($messageNo == '2') || ($messageNo == '4')){
|
350 |
echo apply_filters( 'wppb_recover_password_displayed_message1', '<p class="wppb-warning">'.$message.'</p>' );
|
351 |
+
|
352 |
wppb_create_generate_password_form( $_POST );
|
353 |
+
|
354 |
}elseif (($messageNo == '5') || ($messageNo == '6'))
|
355 |
+
echo apply_filters( 'wppb_recover_password_displayed_message1', '<p class="wppb-warning">'.$message.'</p>' );
|
356 |
+
|
357 |
else
|
358 |
+
echo apply_filters( 'wppb_recover_password_displayed_message2', '<p class="wppb-success">'.$message.'</p>' ); //display success message
|
359 |
}
|
360 |
+
|
361 |
// use this action hook to add extra content after the password recovery form.
|
362 |
do_action( 'wppb_after_recover_password_fields' );
|
363 |
?>
|
364 |
</div>
|
365 |
+
|
366 |
<?php
|
367 |
$output = ob_get_contents();
|
368 |
+
ob_end_clean();
|
369 |
+
|
370 |
return $output;
|
371 |
}
|
front-end/register.php
CHANGED
@@ -116,9 +116,10 @@ function wppb_activate_signup( $key ) {
|
|
116 |
|
117 |
//function to display the registration page
|
118 |
function wppb_front_end_register( $atts ){
|
119 |
-
extract( shortcode_atts( array( 'role' => get_option( 'default_role' ), 'form_name' => 'unspecified' ), $atts, 'wppb-register' ) );
|
120 |
global $$form_name;
|
121 |
-
|
|
|
122 |
|
123 |
return $$form_name;
|
124 |
}
|
116 |
|
117 |
//function to display the registration page
|
118 |
function wppb_front_end_register( $atts ){
|
119 |
+
extract( shortcode_atts( array( 'role' => get_option( 'default_role' ), 'form_name' => 'unspecified', 'redirect_url' => '' ), $atts, 'wppb-register' ) );
|
120 |
global $$form_name;
|
121 |
+
|
122 |
+
$$form_name = new Profile_Builder_Form_Creator( array( 'form_type' => 'register', 'form_name' => $form_name, 'role' => ( is_object( get_role( $role ) ) ? $role : get_option( 'default_role' ) ) , 'redirect_url' => $redirect_url ) );
|
123 |
|
124 |
return $$form_name;
|
125 |
}
|
index.php
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
Plugin Name: Profile Builder
|
4 |
Plugin URI: http://www.cozmoslabs.com/wordpress-profile-builder/
|
5 |
Description: Login, registration and edit profile shortcodes for the front-end. Also you can chose what fields should be displayed or add new (custom) ones both in the front-end and in the dashboard.
|
6 |
-
Version: 2.1.
|
7 |
Author: Cozmoslabs, Madalin Ungureanu, Antohe Cristian, Barina Gabriel
|
8 |
Author URI: http://www.cozmoslabs.com/
|
9 |
License: GPL2
|
@@ -73,7 +73,7 @@ function wppb_free_plugin_init() {
|
|
73 |
*
|
74 |
*
|
75 |
*/
|
76 |
-
define('PROFILE_BUILDER_VERSION', '2.1.
|
77 |
define('WPPB_PLUGIN_DIR', WP_PLUGIN_DIR . '/' . dirname(plugin_basename(__FILE__)));
|
78 |
define('WPPB_PLUGIN_URL', plugin_dir_url(__FILE__));
|
79 |
define('WPPB_SERVER_MAX_UPLOAD_SIZE_BYTE', apply_filters('wppb_server_max_upload_size_byte_constant', wppb_return_bytes(ini_get('upload_max_filesize'))));
|
@@ -155,6 +155,8 @@ function wppb_free_plugin_init() {
|
|
155 |
include_once(WPPB_PLUGIN_DIR . '/modules/email-customizer/user-email-customizer.php');
|
156 |
}
|
157 |
|
|
|
|
|
158 |
|
159 |
/**
|
160 |
* Check for updates
|
3 |
Plugin Name: Profile Builder
|
4 |
Plugin URI: http://www.cozmoslabs.com/wordpress-profile-builder/
|
5 |
Description: Login, registration and edit profile shortcodes for the front-end. Also you can chose what fields should be displayed or add new (custom) ones both in the front-end and in the dashboard.
|
6 |
+
Version: 2.1.2
|
7 |
Author: Cozmoslabs, Madalin Ungureanu, Antohe Cristian, Barina Gabriel
|
8 |
Author URI: http://www.cozmoslabs.com/
|
9 |
License: GPL2
|
73 |
*
|
74 |
*
|
75 |
*/
|
76 |
+
define('PROFILE_BUILDER_VERSION', '2.1.2' );
|
77 |
define('WPPB_PLUGIN_DIR', WP_PLUGIN_DIR . '/' . dirname(plugin_basename(__FILE__)));
|
78 |
define('WPPB_PLUGIN_URL', plugin_dir_url(__FILE__));
|
79 |
define('WPPB_SERVER_MAX_UPLOAD_SIZE_BYTE', apply_filters('wppb_server_max_upload_size_byte_constant', wppb_return_bytes(ini_get('upload_max_filesize'))));
|
155 |
include_once(WPPB_PLUGIN_DIR . '/modules/email-customizer/user-email-customizer.php');
|
156 |
}
|
157 |
|
158 |
+
include_once(WPPB_PLUGIN_DIR . '/admin/add-ons.php');
|
159 |
+
|
160 |
|
161 |
/**
|
162 |
* Check for updates
|
readme.txt
CHANGED
@@ -6,7 +6,7 @@ Tags: registration, user profile, user registration, custom field registration,
|
|
6 |
|
7 |
Requires at least: 3.1
|
8 |
Tested up to: 4.1
|
9 |
-
Stable tag: 2.1.
|
10 |
|
11 |
Simple to use profile plugin allowing front-end login, user registration and edit profile by using shortcodes.
|
12 |
|
@@ -38,18 +38,19 @@ Users with administrator rights have access to the following features:
|
|
38 |
* allow users to **Log-in with their Username or Email**
|
39 |
* enforce a **minimum password length** and **minimum password strength** (using the default WordPress password strength meter)
|
40 |
* assign users a specific role at registration (using **[wppb-register role="desired_role"]** shortcode argument for the register form)
|
41 |
-
* redirect users after login
|
42 |
* add register and lost password links below the login form (using **[wppb-login register_url="www.example.com" lostpassword_url="www.example.com"]** shortcode arguments)
|
43 |
* customizable login widget
|
44 |
* add a custom stylesheet/inherit values from the current theme or use the default one built into this plugin.
|
45 |
* chose which user roles view the admin bar in the front-end of the website (Admin Bar Settings page).
|
46 |
* select which profile fields users can see/modify.
|
|
|
47 |
|
48 |
**PROFILE BUILDER PRO**
|
49 |
|
50 |
The [Pro version](http://www.cozmoslabs.com/wordpress-profile-builder/?utm_source=wp.org&utm_medium=plugin-description-page&utm_campaign=PBFree) has the following extra features:
|
51 |
|
52 |
-
* Create Extra User Fields (Heading, Input, Hidden-Input, Checkbox, Agree to Terms Checkbox, Radio Buttons, DatePicker, Textareas, reCAPTCHA, Upload fields, Selects, User Role Select, Country Selects, Timezone selects, Avatar Upload)
|
53 |
* Add Avatar Upload for users
|
54 |
* Front-end User Listing (fully customizable, sorting included)
|
55 |
* Create Multiple User Listings
|
@@ -65,6 +66,11 @@ The [Pro version](http://www.cozmoslabs.com/wordpress-profile-builder/?utm_sourc
|
|
65 |
|
66 |
[Find out more about Profile Builder PRO](http://www.cozmoslabs.com/wordpress-profile-builder/?utm_source=wp.org&utm_medium=plugin-description-page&utm_campaign=PBFree)
|
67 |
|
|
|
|
|
|
|
|
|
|
|
68 |
= Profile Builder in your Language =
|
69 |
We're focusing on translating Profile Builder in as many languages as we can. So far, the translations for 10 languages are almost complete, but we still need help on a lot of other languages, so please join us at [translate.cozmoslabs.com.](http://translate.cozmoslabs.com/projects/profilebuilder)
|
70 |
You will be able to download all the [available language packs](http://translate.cozmoslabs.com/projects/profilebuilder) as well as help us translate Profile Builder in your language.
|
@@ -108,6 +114,12 @@ This plugin adds/removes user fields in the front-end. Both default and extra pr
|
|
108 |
10. Profile Builder Login Widget
|
109 |
|
110 |
== Changelog ==
|
|
|
|
|
|
|
|
|
|
|
|
|
111 |
= 2.1.1 =
|
112 |
* Added username validation for illegal characters
|
113 |
* Fixed wp_mail() From headers being set sitewide
|
6 |
|
7 |
Requires at least: 3.1
|
8 |
Tested up to: 4.1
|
9 |
+
Stable tag: 2.1.2
|
10 |
|
11 |
Simple to use profile plugin allowing front-end login, user registration and edit profile by using shortcodes.
|
12 |
|
38 |
* allow users to **Log-in with their Username or Email**
|
39 |
* enforce a **minimum password length** and **minimum password strength** (using the default WordPress password strength meter)
|
40 |
* assign users a specific role at registration (using **[wppb-register role="desired_role"]** shortcode argument for the register form)
|
41 |
+
* redirect users after login, register and edit-profile using redirect_url shortcode argument ( e.g **[wppb-login redirect_url="www.example.com"]** )
|
42 |
* add register and lost password links below the login form (using **[wppb-login register_url="www.example.com" lostpassword_url="www.example.com"]** shortcode arguments)
|
43 |
* customizable login widget
|
44 |
* add a custom stylesheet/inherit values from the current theme or use the default one built into this plugin.
|
45 |
* chose which user roles view the admin bar in the front-end of the website (Admin Bar Settings page).
|
46 |
* select which profile fields users can see/modify.
|
47 |
+
* extended functionality available via [Add-ons](http://www.cozmoslabs.com/profile-builder-add-ons/?utm_source=wp.org&utm_medium=plugin-description-page&utm_campaign=PBFree)
|
48 |
|
49 |
**PROFILE BUILDER PRO**
|
50 |
|
51 |
The [Pro version](http://www.cozmoslabs.com/wordpress-profile-builder/?utm_source=wp.org&utm_medium=plugin-description-page&utm_campaign=PBFree) has the following extra features:
|
52 |
|
53 |
+
* Create Extra User Fields (Heading, Input, Hidden-Input, Checkbox, Agree to Terms Checkbox, Radio Buttons, DatePicker, Textareas, WYSIWYG, reCAPTCHA, Upload fields, Selects, User Role Select, Country Selects, Timezone selects, Avatar Upload)
|
54 |
* Add Avatar Upload for users
|
55 |
* Front-end User Listing (fully customizable, sorting included)
|
56 |
* Create Multiple User Listings
|
66 |
|
67 |
[Find out more about Profile Builder PRO](http://www.cozmoslabs.com/wordpress-profile-builder/?utm_source=wp.org&utm_medium=plugin-description-page&utm_campaign=PBFree)
|
68 |
|
69 |
+
|
70 |
+
**Profile Builder Add-ons**
|
71 |
+
|
72 |
+
For more functionality check out Profile Builder [Add-ons page](http://www.cozmoslabs.com/profile-builder-add-ons/?utm_source=wp.org&utm_medium=plugin-description-page&utm_campaign=PBFree)
|
73 |
+
|
74 |
= Profile Builder in your Language =
|
75 |
We're focusing on translating Profile Builder in as many languages as we can. So far, the translations for 10 languages are almost complete, but we still need help on a lot of other languages, so please join us at [translate.cozmoslabs.com.](http://translate.cozmoslabs.com/projects/profilebuilder)
|
76 |
You will be able to download all the [available language packs](http://translate.cozmoslabs.com/projects/profilebuilder) as well as help us translate Profile Builder in your language.
|
114 |
10. Profile Builder Login Widget
|
115 |
|
116 |
== Changelog ==
|
117 |
+
= 2.1.2 =
|
118 |
+
* Created Add-On Page in Profile Builder
|
119 |
+
* Added support for Twenty Fifteen theme to better target inputs
|
120 |
+
* Add support for "redirect_url" parameter to Login shortcode (will do the same thing as "redirect" - for consistency)
|
121 |
+
* Added "redirect_url" parameter to Register and Edit-profile shortcodes
|
122 |
+
|
123 |
= 2.1.1 =
|
124 |
* Added username validation for illegal characters
|
125 |
* Fixed wp_mail() From headers being set sitewide
|