| @@ -24,8 +24,17 @@ | ||
| 24 | 24 | $is_freemium = $fs->is_freemium(); |
| 25 | 25 | |
| 26 | 26 | $fs->_enqueue_connect_essentials(); |
| 27 | 27 | |
| 28 | + /** | |
| 29 | + * Enqueueing the styles in `_enqueue_connect_essentials()` is too late, as we need them in the HEADER. Therefore, inject the styles inline to avoid FOUC. | |
| 30 | + * | |
| 31 | + * @author Vova Feldman (@svovaf) | |
| 32 | + */ | |
| 33 | + echo "<style>\n"; | |
| 34 | + include WP_FS__DIR_CSS . '/admin/connect.css'; | |
| 35 | + echo "</style>\n"; | |
| 36 | + | |
| 28 | 37 | $current_user = Freemius::_get_current_wp_user(); |
| 29 | 38 | |
| 30 | 39 | $first_name = $current_user->user_firstname; |
| 31 | 40 | if ( empty( $first_name ) ) { |
| @@ -31,36 +40,33 @@ | ||
| 31 | 40 | if ( empty( $first_name ) ) { |
| 32 | 41 | $first_name = $current_user->nickname; |
| 33 | 42 | } |
| 34 | 43 | |
| 35 | - $site_url = get_site_url(); | |
| 44 | + $site_url = Freemius::get_unfiltered_site_url(); | |
| 36 | 45 | $protocol_pos = strpos( $site_url, '://' ); |
| 37 | 46 | if ( false !== $protocol_pos ) { |
| 38 | 47 | $site_url = substr( $site_url, $protocol_pos + 3 ); |
| 39 | 48 | } |
| 40 | 49 | |
| 41 | - $freemius_site_www = 'https://freemius.com'; | |
| 42 | - | |
| 43 | 50 | $freemius_usage_tracking_url = $fs->get_usage_tracking_terms_url(); |
| 44 | 51 | $freemius_plugin_terms_url = $fs->get_eula_url(); |
| 45 | 52 | |
| 46 | - $freemius_site_url = $fs->is_premium() ? | |
| 47 | - $freemius_site_www : | |
| 48 | - $freemius_usage_tracking_url; | |
| 53 | + $error = fs_request_get( 'error' ); | |
| 49 | 54 | |
| 50 | - if ( $fs->is_premium() ) { | |
| 51 | - $freemius_site_url .= '?' . http_build_query( array( | |
| 52 | - 'id' => $fs->get_id(), | |
| 53 | - 'slug' => $slug, | |
| 54 | - ) ); | |
| 55 | - } | |
| 55 | + $has_release_on_freemius = $fs->has_release_on_freemius(); | |
| 56 | 56 | |
| 57 | - $freemius_link = '<a href="' . $freemius_site_url . '" target="_blank" tabindex="1">freemius.com</a>'; | |
| 57 | + $require_license_key = $is_premium_only || | |
| 58 | + ( | |
| 59 | + $is_freemium && | |
| 60 | + ( $is_premium_code || ! $has_release_on_freemius ) && | |
| 61 | + fs_request_get_bool( 'require_license', ( $is_premium_code || $has_release_on_freemius ) ) | |
| 62 | + ); | |
| 58 | 63 | |
| 59 | - $error = fs_request_get( 'error' ); | |
| 64 | + $freemius_activation_terms_url = ($fs->is_premium() && $require_license_key) ? | |
| 65 | + $fs->get_license_activation_terms_url() : | |
| 66 | + $freemius_usage_tracking_url; | |
| 60 | 67 | |
| 61 | - $require_license_key = $is_premium_only || | |
| 62 | - ( $is_freemium && $is_premium_code && fs_request_get_bool( 'require_license', true ) ); | |
| 68 | + $freemius_activation_terms_html = '<a href="' . esc_url( $freemius_activation_terms_url ) . '" target="_blank" rel="noopener" tabindex="1">freemius.com</a>'; | |
| 63 | 69 | |
| 64 | 70 | if ( $is_pending_activation ) { |
| 65 | 71 | $require_license_key = false; |
| 66 | 72 | } |
| @@ -110,15 +116,15 @@ | ||
| 110 | 116 | |
| 111 | 117 | /* translators: %s: name (e.g. Hey John,) */ |
| 112 | 118 | $hey_x_text = esc_html( sprintf( fs_text_x_inline( 'Hey %s,', 'greeting', 'hey-x', $slug ), $first_name ) ); |
| 113 | 119 | |
| 114 | - $is_gdpr_required = ( ! $is_pending_activation && ! $require_license_key ) ? | |
| 115 | - FS_GDPR_Manager::instance()->is_required() : | |
| 116 | - false; | |
| 117 | - | |
| 118 | - if ( is_null( $is_gdpr_required ) ) { | |
| 119 | - $is_gdpr_required = $fs->fetch_and_store_current_user_gdpr_anonymously(); | |
| 120 | - } | |
| 120 | + $activation_state = array( | |
| 121 | + 'is_license_activation' => $require_license_key, | |
| 122 | + 'is_pending_activation' => $is_pending_activation, | |
| 123 | + 'is_gdpr_required' => true, | |
| 124 | + 'is_network_level_activation' => $is_network_level_activation, | |
| 125 | + 'is_dialog' => $is_optin_dialog, | |
| 126 | + ); | |
| 121 | 127 | ?> |
| 122 | 128 | <?php |
| 123 | 129 | if ( $is_optin_dialog ) { ?> |
| 124 | 130 | <div id="fs_theme_connect_wrapper"> |
| @@ -137,28 +143,55 @@ | ||
| 137 | 143 | * |
| 138 | 144 | * @author Vova Feldman |
| 139 | 145 | * @since 2.3.2 |
| 140 | 146 | */ |
| 141 | - $fs->do_action( 'connect/before' ); | |
| 147 | + $fs->do_action( 'connect/before', $activation_state ); | |
| 142 | 148 | ?> |
| 143 | 149 | <div id="fs_connect" |
| 144 | 150 | class="wrap<?php if ( ! fs_is_network_admin() && ( ! $fs->is_enable_anonymous() || $is_pending_activation || $require_license_key ) ) { |
| 145 | 151 | echo ' fs-anonymous-disabled'; |
| 146 | 152 | } ?><?php echo $require_license_key ? ' require-license-key' : '' ?>"> |
| 147 | - <div class="fs-visual"> | |
| 148 | - <b class="fs-site-icon"><i class="dashicons dashicons-wordpress"></i></b> | |
| 149 | - <i class="dashicons dashicons-plus fs-first"></i> | |
| 150 | - <?php | |
| 151 | - $vars = array( 'id' => $fs->get_id() ); | |
| 152 | - fs_require_once_template( 'plugin-icon.php', $vars ); | |
| 153 | - ?> | |
| 154 | - <i class="dashicons dashicons-plus fs-second"></i> | |
| 155 | - <img class="fs-connect-logo" width="80" height="80" src="//img.freemius.com/connect-logo.png"/> | |
| 156 | - </div> | |
| 153 | + <div class="fs-header"> | |
| 154 | + <!-- <b class="fs-site-icon"><i class="dashicons dashicons-wordpress-alt"></i></b>--> | |
| 155 | + <?php | |
| 156 | + $size = 50; | |
| 157 | + $vars = array( | |
| 158 | + 'id' => $fs->get_id(), | |
| 159 | + 'size' => $size, | |
| 160 | + ); | |
| 161 | + | |
| 162 | + fs_require_once_template( 'plugin-icon.php', $vars ); | |
| 163 | + ?> | |
| 164 | + </div> | |
| 165 | + <div class="fs-box-container"> | |
| 157 | 166 | <div class="fs-content"> |
| 167 | + <?php $fs->do_action( 'connect/before_message', $activation_state ) ?> | |
| 168 | + | |
| 158 | 169 | <?php if ( ! empty( $error ) ) : ?> |
| 159 | - <p class="fs-error"><?php echo esc_html( $error ) ?></p> | |
| 170 | + <div class="fs-error"><?php echo $fs->apply_filters( 'connect_error_esc_html', esc_html( $error ) ) ?></div> | |
| 160 | 171 | <?php endif ?> |
| 172 | + <?php | |
| 173 | + if ( ! $is_pending_activation && ! $require_license_key ) { | |
| 174 | + if ( ! $fs->is_plugin_update() ) { | |
| 175 | + echo $fs->apply_filters( 'connect-header', sprintf( | |
| 176 | + '<h2 style="text-align: center">%s</h2>', | |
| 177 | + esc_html( fs_text_inline( 'Never miss an important update', 'connect-header' ) ) | |
| 178 | + ) ); | |
| 179 | + } else { | |
| 180 | + echo $fs->apply_filters( 'connect-header_on-update', sprintf( | |
| 181 | + '<h2>%s</h2>', | |
| 182 | + sprintf( | |
| 183 | + esc_html( | |
| 184 | + /* translators: %1$s: plugin name (e.g., "Awesome Plugin"); %2$s: version (e.g., "1.2.3") */ | |
| 185 | + fs_text_inline('Thank you for updating to %1$s v%2$s!', 'connect-header_on-update' ) | |
| 186 | + ), | |
| 187 | + esc_html( $fs->get_plugin_name() ), | |
| 188 | + $fs->get_plugin_version() | |
| 189 | + ) | |
| 190 | + ) ); | |
| 191 | + } | |
| 192 | + } | |
| 193 | + ?> | |
| 161 | 194 | <p><?php |
| 162 | 195 | $button_label = fs_text_inline( 'Allow & Continue', 'opt-in-connect', $slug ); |
| 163 | 196 | $message = ''; |
| 164 | 197 | |
| @@ -167,46 +200,50 @@ | ||
| 167 | 200 | |
| 168 | 201 | $message = $fs->apply_filters( 'pending_activation_message', sprintf( |
| 169 | 202 | /* translators: %s: name (e.g. Thanks John!) */ |
| 170 | 203 | fs_text_inline( 'Thanks %s!', 'thanks-x', $slug ) . '<br>' . |
| 171 | - fs_text_inline( 'You should receive an activation email for %s to your mailbox at %s. Please make sure you click the activation button in that email to %s.', 'pending-activation-message', $slug ), | |
| 204 | + fs_text_inline( 'You should receive a confirmation email for %s to your mailbox at %s. Please make sure you click the button in that email to %s.', 'pending-activation-message', $slug ), | |
| 172 | 205 | $first_name, |
| 173 | 206 | '<b>' . $fs->get_plugin_name() . '</b>', |
| 174 | 207 | '<b>' . $current_user->user_email . '</b>', |
| 175 | - fs_text_inline( 'complete the install', 'complete-the-install', $slug ) | |
| 208 | + fs_text_inline( 'complete the opt-in', 'complete-the-opt-in', $slug ) | |
| 176 | 209 | ) ); |
| 177 | 210 | } else if ( $require_license_key ) { |
| 178 | - $button_label = $is_network_upgrade_mode ? | |
| 179 | - fs_text_inline( 'Activate License', 'agree-activate-license', $slug ) : | |
| 180 | - fs_text_inline( 'Agree & Activate License', 'agree-activate-license', $slug ); | |
| 211 | + $button_label = fs_text_inline( 'Activate License', 'activate-license', $slug ); | |
| 181 | 212 | |
| 182 | 213 | $message = $fs->apply_filters( |
| 183 | 214 | 'connect-message_on-premium', |
| 184 | - ($is_network_upgrade_mode ? | |
| 185 | - '' : | |
| 186 | - /* translators: %s: name (e.g. Hey John,) */ | |
| 187 | - $hey_x_text . '<br>' | |
| 188 | - ) . | |
| 189 | - sprintf( fs_text_inline( 'Thanks for purchasing %s! To get started, please enter your license key:', 'thanks-for-purchasing', $slug ), '<b>' . $fs->get_plugin_name() . '</b>' ), | |
| 215 | + sprintf( fs_text_inline( 'Welcome to %s! To get started, please enter your license key:', 'thanks-for-purchasing', $slug ), '<b>' . $fs->get_plugin_name() . '</b>' ), | |
| 190 | 216 | $first_name, |
| 191 | 217 | $fs->get_plugin_name() |
| 192 | 218 | ); |
| 193 | 219 | } else { |
| 194 | - $filter = 'connect_message'; | |
| 195 | - $default_optin_message = $is_gdpr_required ? | |
| 196 | - fs_text_inline( 'Never miss an important update - opt in to our security & feature updates notifications, educational content, offers, and non-sensitive diagnostic tracking with %4$s.', 'connect-message', $slug) : | |
| 197 | - fs_text_inline( 'Never miss an important update - opt in to our security and feature updates notifications, and non-sensitive diagnostic tracking with %4$s.', 'connect-message', $slug); | |
| 220 | + $filter = 'connect_message'; | |
| 198 | 221 | |
| 199 | - if ( $fs->is_plugin_update() ) { | |
| 222 | + if ( ! $fs->is_plugin_update() ) { | |
| 223 | + $default_optin_message = esc_html( | |
| 224 | + sprintf( | |
| 225 | + /* translators: %s: module type (plugin, theme, or add-on) */ | |
| 226 | + fs_text_inline( 'Opt in to get email notifications for security & feature updates, educational content, and occasional offers, and to share some basic WordPress environment info. This will help us make the %s more compatible with your site and better at doing what you need it to.', 'connect-message', $slug ), | |
| 227 | + $fs->get_module_label( true ) | |
| 228 | + ) | |
| 229 | + ); | |
| 230 | + } else { | |
| 200 | 231 | // If Freemius was added on a plugin update, set different |
| 201 | 232 | // opt-in message. |
| 202 | - $default_optin_message = $is_gdpr_required ? | |
| 203 | - fs_text_inline( 'Never miss an important update - opt in to our security & feature updates notifications, educational content, offers, and non-sensitive diagnostic tracking with %4$s. If you skip this, that\'s okay! %1$s will still work just fine.', 'connect-message_on-update', $slug ) : | |
| 204 | - fs_text_inline( 'Never miss an important update - opt in to our security & feature updates notifications, and non-sensitive diagnostic tracking with %4$s. If you skip this, that\'s okay! %1$s will still work just fine.', 'connect-message_on-update', $slug ); | |
| 205 | 233 | |
| 206 | - // If user customized the opt-in message on update, use | |
| 234 | + /* translators: %s: module type (plugin, theme, or add-on) */ | |
| 235 | + $default_optin_message = esc_html( sprintf( fs_text_inline( 'We have introduced this opt-in so you never miss an important update and help us make the %s more compatible with your site and better at doing what you need it to.', 'connect-message_on-update_why' ), $fs->get_module_label( true ) ) ); | |
| 236 | + | |
| 237 | + $default_optin_message .= '<br><br>' . esc_html( fs_text_inline( 'Opt in to get email notifications for security & feature updates, educational content, and occasional offers, and to share some basic WordPress environment info.', 'connect-message_on-update', $slug ) ); | |
| 238 | + | |
| 239 | + if ( $fs->is_enable_anonymous() ) { | |
| 240 | + $default_optin_message .= ' ' . esc_html( fs_text_inline( 'If you skip this, that\'s okay! %1$s will still work just fine.', 'connect-message_on-update_skip', $slug ) ); | |
| 241 | + } | |
| 242 | + | |
| 243 | + // If user customized the opt-in message on update, use | |
| 207 | 244 | // that message. Otherwise, fallback to regular opt-in |
| 208 | - // custom message if exist. | |
| 245 | + // custom message if exists. | |
| 209 | 246 | if ( $fs->has_filter( 'connect_message_on_update' ) ) { |
| 210 | 247 | $filter = 'connect_message_on_update'; |
| 211 | 248 | } |
| 212 | 249 | } |
| @@ -212,26 +249,21 @@ | ||
| 212 | 249 | } |
| 213 | 250 | |
| 214 | 251 | $message = $fs->apply_filters( |
| 215 | 252 | $filter, |
| 216 | - ($is_network_upgrade_mode ? | |
| 217 | - '' : | |
| 218 | - /* translators: %s: name (e.g. Hey John,) */ | |
| 219 | - $hey_x_text . '<br>' | |
| 220 | - ) . | |
| 221 | 253 | sprintf( |
| 222 | - esc_html( $default_optin_message ), | |
| 254 | + $default_optin_message, | |
| 223 | 255 | '<b>' . esc_html( $fs->get_plugin_name() ) . '</b>', |
| 224 | 256 | '<b>' . $current_user->user_login . '</b>', |
| 225 | - '<a href="' . $site_url . '" target="_blank">' . $site_url . '</a>', | |
| 226 | - $freemius_link | |
| 257 | + '<a href="' . $site_url . '" target="_blank" rel="noopener noreferrer">' . $site_url . '</a>', | |
| 258 | + $freemius_activation_terms_html | |
| 227 | 259 | ), |
| 228 | 260 | $first_name, |
| 229 | 261 | $fs->get_plugin_name(), |
| 230 | 262 | $current_user->user_login, |
| 231 | - '<a href="' . $site_url . '" target="_blank">' . $site_url . '</a>', | |
| 232 | - $freemius_link, | |
| 233 | - $is_gdpr_required | |
| 263 | + '<a href="' . $site_url . '" target="_blank" rel="noopener noreferrer">' . $site_url . '</a>', | |
| 264 | + $freemius_activation_terms_html, | |
| 265 | + true | |
| 234 | 266 | ); |
| 235 | 267 | } |
| 236 | 268 | |
| 237 | 269 | if ( $is_network_upgrade_mode ) { |
| @@ -270,9 +302,9 @@ | ||
| 270 | 302 | * |
| 271 | 303 | * @author Vova Feldman |
| 272 | 304 | * @since 2.1.2 |
| 273 | 305 | */ |
| 274 | - $fs->do_action( 'connect/after_license_input' ); | |
| 306 | + $fs->do_action( 'connect/after_license_input', $activation_state ); | |
| 275 | 307 | ?> |
| 276 | 308 | |
| 277 | 309 | <?php |
| 278 | 310 | $send_updates_text = sprintf( |
| @@ -303,8 +335,11 @@ | ||
| 303 | 335 | <span class="fs-input-label"><?php echo $do_not_send_updates_text ?></span> |
| 304 | 336 | </label> |
| 305 | 337 | </div> |
| 306 | 338 | </div> |
| 339 | + <div id="fs_orphan_license_message"> | |
| 340 | + <span class="fs-message"><?php fs_echo_inline( "A user has not yet been associated with the license, which is necessary to prevent unauthorized activation. To assign the license to your user, you agree to share your WordPress user's full name and email address." ) ?></span> | |
| 341 | + </div> | |
| 307 | 342 | <?php endif ?> |
| 308 | 343 | <?php if ( $is_network_level_activation ) : ?> |
| 309 | 344 | <?php |
| 310 | 345 | $vars = array( |
| @@ -315,10 +350,14 @@ | ||
| 315 | 350 | |
| 316 | 351 | echo fs_get_template( 'partials/network-activation.php', $vars ); |
| 317 | 352 | ?> |
| 318 | 353 | <?php endif ?> |
| 354 | + | |
| 355 | + <?php $fs->do_action( 'connect/after_message', $activation_state ) ?> | |
| 319 | 356 | </div> |
| 320 | 357 | <div class="fs-actions"> |
| 358 | + <?php $fs->do_action( 'connect/before_actions', $activation_state ) ?> | |
| 359 | + | |
| 321 | 360 | <?php if ( $fs->is_enable_anonymous() && ! $is_pending_activation && ( ! $require_license_key || $is_network_upgrade_mode ) ) : ?> |
| 322 | 361 | <a id="skip_activation" href="<?php echo fs_nonce_url( $fs->_get_admin_page_url( '', array( 'fs_action' => $fs->get_unique_affix() . '_skip_activation' ), $is_network_level_activation ), $fs->get_unique_affix() . '_skip_activation' ) ?>" |
| 323 | 362 | class="button button-secondary" tabindex="2"><?php fs_esc_html_echo_x_inline( 'Skip', 'verb', 'skip', $slug ) ?></a> |
| 324 | 363 | <?php endif ?> |
| @@ -327,11 +366,12 @@ | ||
| 327 | 366 | <?php endif ?> |
| 328 | 367 | <?php if ( $activate_with_current_user ) : ?> |
| 329 | 368 | <form action="" method="POST"> |
| 330 | 369 | <input type="hidden" name="fs_action" |
| 331 | - value="<?php echo $fs->get_unique_affix() ?>_activate_existing"> | |
| 332 | - <?php wp_nonce_field( 'activate_existing_' . $fs->get_public_key() ) ?> | |
| 370 | + value="<?php echo esc_attr( $fs->get_unique_affix() . '_activate_existing' ) ?>"> | |
| 371 | + <?php wp_nonce_field( $fs->get_unique_affix() . '_activate_existing' ) ?> | |
| 333 | 372 | <input type="hidden" name="is_extensions_tracking_allowed" value="1"> |
| 373 | + <input type="hidden" name="is_diagnostic_tracking_allowed" value="1"> | |
| 334 | 374 | <button class="button button-primary" tabindex="1" |
| 335 | 375 | type="submit"><?php echo esc_html( $button_label ) ?></button> |
| 336 | 376 | </form> |
| 337 | 377 | <?php else : ?> |
| @@ -337,11 +377,12 @@ | ||
| 337 | 377 | <?php else : ?> |
| 338 | 378 | <form method="post" action="<?php echo WP_FS__ADDRESS ?>/action/service/user/install/"> |
| 339 | 379 | <?php unset( $optin_params['sites']); ?> |
| 340 | 380 | <?php foreach ( $optin_params as $name => $value ) : ?> |
| 341 | - <input type="hidden" name="<?php echo $name ?>" value="<?php echo esc_attr( $value ) ?>"> | |
| 381 | + <input type="hidden" name="<?php echo esc_attr( $name ) ?>" value="<?php echo esc_attr( $value ) ?>"> | |
| 342 | 382 | <?php endforeach ?> |
| 343 | 383 | <input type="hidden" name="is_extensions_tracking_allowed" value="1"> |
| 384 | + <input type="hidden" name="is_diagnostic_tracking_allowed" value="1"> | |
| 344 | 385 | <button class="button button-primary" tabindex="1" |
| 345 | 386 | type="submit"<?php if ( $require_license_key ) { |
| 346 | 387 | echo ' disabled="disabled"'; |
| 347 | 388 | } ?>><?php echo esc_html( $button_label ) ?></button> |
| @@ -346,103 +387,49 @@ | ||
| 346 | 387 | echo ' disabled="disabled"'; |
| 347 | 388 | } ?>><?php echo esc_html( $button_label ) ?></button> |
| 348 | 389 | </form> |
| 349 | 390 | <?php endif ?> |
| 391 | + <?php if ( $require_license_key ) : ?> | |
| 392 | + <a id="license_issues_link" | |
| 393 | + href="<?php echo esc_url( $fs->apply_filters( 'known_license_issues_url', 'https://freemius.com/help/documentation/wordpress-sdk/license-activation-issues/' ) ) ?>" | |
| 394 | + target="_blank"><?php fs_esc_html_echo_inline( 'License issues?', 'license-issues', $slug ) ?></a> | |
| 395 | + <?php endif ?> | |
| 396 | + | |
| 397 | + <?php $fs->do_action( 'connect/after_actions', $activation_state ) ?> | |
| 350 | 398 | </div><?php |
| 399 | + $permission_manager = FS_Permission_Manager::instance( $fs ); | |
| 351 | 400 | |
| 352 | 401 | // Set core permission list items. |
| 353 | 402 | $permissions = array(); |
| 354 | 403 | |
| 355 | - /** | |
| 356 | - * When activating a license key the information of the admin is not collected, we gather the user info from the license. | |
| 357 | - * | |
| 358 | - * @since 2.3.2 | |
| 359 | - * @author Vova Feldman | |
| 360 | - */ | |
| 361 | - if ( ! $require_license_key ) { | |
| 362 | - $permissions['profile'] = array( | |
| 363 | - 'icon-class' => 'dashicons dashicons-admin-users', | |
| 364 | - 'label' => $fs->get_text_inline( 'Your Profile Overview', 'permissions-profile' ), | |
| 365 | - 'desc' => $fs->get_text_inline( 'Name and email address', 'permissions-profile_desc' ), | |
| 366 | - 'priority' => 5, | |
| 367 | - ); | |
| 368 | - } | |
| 404 | + // Add newsletter permissions if enabled. | |
| 405 | + if ( $fs->is_permission_requested( 'newsletter' ) ) { | |
| 406 | + $permissions[] = $permission_manager->get_newsletter_permission(); | |
| 407 | + } | |
| 369 | 408 | |
| 370 | - $permissions['site'] = array( | |
| 371 | - 'icon-class' => 'dashicons dashicons-admin-settings', | |
| 372 | - 'label' => $fs->get_text_inline( 'Your Site Overview', 'permissions-site' ), | |
| 373 | - 'desc' => $fs->get_text_inline( 'Site URL, WP version, PHP info', 'permissions-site_desc' ), | |
| 374 | - 'priority' => 10, | |
| 375 | - ); | |
| 409 | + $permissions = $permission_manager->get_permissions( | |
| 410 | + $require_license_key, | |
| 411 | + $permissions | |
| 412 | + ); | |
| 376 | 413 | |
| 377 | - $permissions['notices'] = array( | |
| 378 | - 'icon-class' => 'dashicons dashicons-testimonial', | |
| 379 | - 'label' => $fs->get_text_inline( 'Admin Notices', 'permissions-admin-notices' ), | |
| 380 | - 'desc' => $fs->get_text_inline( 'Updates, announcements, marketing, no spam', 'permissions-newsletter_desc' ), | |
| 381 | - 'priority' => 13, | |
| 382 | - ); | |
| 383 | - | |
| 384 | - $permissions['events'] = array( | |
| 385 | - 'icon-class' => 'dashicons dashicons-admin-' . ( $fs->is_plugin() ? 'plugins' : 'appearance' ), | |
| 386 | - 'label' => sprintf( $fs->get_text_inline( 'Current %s Events', 'permissions-events' ), ucfirst( $fs->get_module_type() ) ), | |
| 387 | - 'desc' => $fs->get_text_inline( 'Activation, deactivation and uninstall', 'permissions-events_desc' ), | |
| 388 | - 'priority' => 20, | |
| 389 | - ); | |
| 390 | - | |
| 391 | - // Add newsletter permissions if enabled. | |
| 392 | - if ( $is_gdpr_required || $fs->is_permission_requested( 'newsletter' ) ) { | |
| 393 | - $permissions['newsletter'] = array( | |
| 394 | - 'icon-class' => 'dashicons dashicons-email-alt', | |
| 395 | - 'label' => $fs->get_text_inline( 'Newsletter', 'permissions-newsletter' ), | |
| 396 | - 'desc' => $fs->get_text_inline( 'Updates, announcements, marketing, no spam', 'permissions-newsletter_desc' ), | |
| 397 | - 'priority' => 15, | |
| 398 | - ); | |
| 399 | - } | |
| 400 | - | |
| 401 | - $permissions['extensions'] = array( | |
| 402 | - 'icon-class' => 'dashicons dashicons-menu', | |
| 403 | - 'label' => $fs->get_text_inline( 'Plugins & Themes', 'permissions-extensions' ), | |
| 404 | - 'desc' => $fs->get_text_inline( 'Title, slug, version, and is active', 'permissions-extensions_desc' ), | |
| 405 | - 'priority' => 25, | |
| 406 | - 'optional' => true, | |
| 407 | - ); | |
| 408 | - | |
| 409 | - // Allow filtering of the permissions list. | |
| 410 | - $permissions = $fs->apply_filters( 'permission_list', $permissions ); | |
| 411 | - | |
| 412 | - // Sort by priority. | |
| 413 | - uasort( $permissions, 'fs_sort_by_priority' ); | |
| 414 | - | |
| 415 | 414 | if ( ! empty( $permissions ) ) : ?> |
| 416 | 415 | <div class="fs-permissions"> |
| 417 | - <?php if ( $require_license_key ) : ?> | |
| 418 | - <p class="fs-license-sync-disclaimer"><?php | |
| 419 | - echo sprintf( | |
| 420 | - fs_esc_html_inline( 'The %1$s will be periodically sending data to %2$s to check for security and feature updates, and verify the validity of your license.', 'license-sync-disclaimer', $slug ), | |
| 421 | - $fs->get_module_label( true ), | |
| 422 | - $freemius_link | |
| 423 | - ) ?></p> | |
| 424 | - <?php endif ?> | |
| 425 | - <a class="fs-trigger" href="#" tabindex="1"><?php fs_esc_html_echo_inline( 'What permissions are being granted?', 'what-permissions', $slug ) ?></a> | |
| 416 | + <?php if ( $require_license_key ) : ?> | |
| 417 | + <a class="fs-trigger wp-core-ui" href="#" tabindex="1" style="color: inherit;"><?php echo sprintf( | |
| 418 | + fs_esc_html_inline( 'For delivery of security & feature updates, and license management, %s needs to', 'license-sync-disclaimer', $slug ) . '<b class="fs-arrow"></b>', | |
| 419 | + sprintf( '<nobr class="button-link" style="color: inherit;">%s</nobr>', esc_html( $fs->get_plugin_title() ) ) | |
| 420 | + ) ?></a> | |
| 421 | + <?php else : ?> | |
| 422 | + <a class="fs-trigger wp-core-ui" href="#" tabindex="1" style="color: inherit;"><?php printf( | |
| 423 | + fs_esc_html_inline( 'This will allow %s to', 'this-will-allow-x', $slug ) . '<b class="fs-arrow"></b>', | |
| 424 | + sprintf( '<nobr class="button-link" style="color: inherit;">%s</nobr>', esc_html( $fs->get_plugin_title() ) ) | |
| 425 | + ) ?></a> | |
| 426 | + <?php endif ?> | |
| 426 | 427 | <ul><?php |
| 427 | - foreach ( $permissions as $id => $permission ) : ?> | |
| 428 | - <li id="fs-permission-<?php echo esc_attr( $id ); ?>" | |
| 429 | - class="fs-permission fs-<?php echo esc_attr( $id ); ?>"> | |
| 430 | - <i class="<?php echo esc_attr( $permission['icon-class'] ); ?>"></i> | |
| 431 | - <?php if ( isset( $permission['optional'] ) && true === $permission['optional'] ) : ?> | |
| 432 | - <div class="fs-switch fs-small fs-round fs-on"> | |
| 433 | - <div class="fs-toggle"></div> | |
| 434 | - </div> | |
| 435 | - <?php endif ?> | |
| 436 | - | |
| 437 | - <div class="fs-permission-description"> | |
| 438 | - <span><?php echo esc_html( $permission['label'] ); ?></span> | |
| 439 | - | |
| 440 | - <p><?php echo esc_html( $permission['desc'] ); ?></p> | |
| 441 | - </div> | |
| 442 | - </li> | |
| 443 | - <?php endforeach; ?> | |
| 444 | - </ul> | |
| 428 | + foreach ( $permissions as $permission ) { | |
| 429 | + $permission_manager->render_permission( $permission ); | |
| 430 | + } | |
| 431 | + ?></ul> | |
| 445 | 432 | </div> |
| 446 | 433 | <?php endif ?> |
| 447 | 434 | <?php if ( $is_premium_code && $is_freemium ) : ?> |
| 448 | 435 | <div class="fs-freemium-licensing"> |
| @@ -456,13 +443,20 @@ | ||
| 456 | 443 | <?php endif ?> |
| 457 | 444 | </p> |
| 458 | 445 | </div> |
| 459 | 446 | <?php endif ?> |
| 447 | + </div> | |
| 460 | 448 | <div class="fs-terms"> |
| 461 | - <a href="https://freemius.com/privacy/" target="_blank" | |
| 449 | + <a class="fs-tooltip-trigger<?php echo is_rtl() ? ' rtl' : '' ?>" href="<?php echo esc_url( $freemius_activation_terms_url ) ?>" target="_blank" rel="noopener" tabindex="1">Powered by Freemius<?php if ( $require_license_key ) : ?> <span class="fs-tooltip" style="width: 170px"><?php echo esc_html( $fs->get_text_inline( 'Freemius is our licensing and software updates engine', 'permissions-extensions_desc' ) ) ?></span><?php endif ?></a> | |
| 450 | + - | |
| 451 | + <a href="https://freemius.com/privacy/" target="_blank" rel="noopener" | |
| 462 | 452 | tabindex="1"><?php fs_esc_html_echo_inline( 'Privacy Policy', 'privacy-policy', $slug ) ?></a> |
| 463 | 453 | - |
| 464 | - <a href="<?php echo $require_license_key ? $freemius_plugin_terms_url : $freemius_usage_tracking_url ?>" target="_blank" tabindex="1"><?php $require_license_key ? fs_echo_inline( 'License Agreement', 'license-agreement', $slug ) : fs_echo_inline( 'Terms of Service', 'tos', $slug ) ?></a> | |
| 454 | + <?php if ($require_license_key) : ?> | |
| 455 | + <a href="<?php echo esc_url( $freemius_plugin_terms_url ) ?>" target="_blank" rel="noopener" tabindex="1"><?php fs_echo_inline( 'License Agreement', 'license-agreement', $slug ) ?></a> | |
| 456 | + <?php else : ?> | |
| 457 | + <a href="<?php echo esc_url( $freemius_usage_tracking_url ) ?>" target="_blank" rel="noopener" tabindex="1"><?php fs_echo_inline( 'Terms of Service', 'tos', $slug ) ?></a> | |
| 458 | + <?php endif; ?> | |
| 465 | 459 | </div> |
| 466 | 460 | </div> |
| 467 | 461 | <?php |
| 468 | 462 | /** |
| @@ -470,9 +464,9 @@ | ||
| 470 | 464 | * |
| 471 | 465 | * @author Vova Feldman |
| 472 | 466 | * @since 2.3.2 |
| 473 | 467 | */ |
| 474 | - $fs->do_action( 'connect/after' ); | |
| 468 | + $fs->do_action( 'connect/after', $activation_state ); | |
| 475 | 469 | |
| 476 | 470 | if ( $is_optin_dialog ) { ?> |
| 477 | 471 | </div> |
| 478 | 472 | <?php |
| @@ -524,15 +518,14 @@ | ||
| 524 | 518 | resetLoadingMode = function() { |
| 525 | 519 | // Reset loading mode. |
| 526 | 520 | $primaryCta.html(primaryCtaLabel); |
| 527 | 521 | $primaryCta.prop('disabled', false); |
| 528 | - $(document.body).css({'cursor': 'auto'}); | |
| 529 | - $('.fs-loading').removeClass('fs-loading'); | |
| 522 | + $( '.fs-loading' ).removeClass( 'fs-loading' ); | |
| 530 | 523 | |
| 531 | 524 | console.log('resetLoadingMode - Primary button was enabled'); |
| 532 | 525 | }, |
| 533 | 526 | setLoadingMode = function () { |
| 534 | - $(document.body).css({'cursor': 'wait'}); | |
| 527 | + $( document.body ).addClass( 'fs-loading' ); | |
| 535 | 528 | }; |
| 536 | 529 | |
| 537 | 530 | $('.fs-actions .button').on('click', function () { |
| 538 | 531 | setLoadingMode(); |
| @@ -594,8 +587,13 @@ | ||
| 594 | 587 | |
| 595 | 588 | updatePrimaryCtaText( actionType ); |
| 596 | 589 | }); |
| 597 | 590 | |
| 591 | + $sitesListContainer.delegate( 'td:not(:first-child)', 'click', function() { | |
| 592 | + // If a site row is clicked, trigger a click on the checkbox. | |
| 593 | + $( this ).parent().find( 'td:first-child input' ).click(); | |
| 594 | + } ); | |
| 595 | + | |
| 598 | 596 | $sitesListContainer.delegate( '.action', 'click', function( evt ) { |
| 599 | 597 | var $this = $( evt.target ); |
| 600 | 598 | if ( $this.hasClass( 'selected' ) ) { |
| 601 | 599 | return false; |
| @@ -700,12 +698,29 @@ | ||
| 700 | 698 | |
| 701 | 699 | var ajaxOptin = ( requireLicenseKey || isNetworkActive ); |
| 702 | 700 | |
| 703 | 701 | $form.on('submit', function () { |
| 704 | - var isExtensionsTrackingAllowed = $( '#fs-permission-extensions .fs-switch' ).hasClass( 'fs-on' ); | |
| 702 | + var $extensionsPermission = $( '#fs_permission_extensions .fs-switch' ), | |
| 703 | + isExtensionsTrackingAllowed = ( $extensionsPermission.length > 0 ) ? | |
| 704 | + $extensionsPermission.hasClass( 'fs-on' ) : | |
| 705 | + null; | |
| 705 | 706 | |
| 706 | - $( 'input[name=is_extensions_tracking_allowed]' ).val( isExtensionsTrackingAllowed ? 1 : 0 ); | |
| 707 | + var $diagnosticPermission = $( '#fs_permission_diagnostic .fs-switch' ), | |
| 708 | + isDiagnosticTrackingAllowed = ( $diagnosticPermission.length > 0 ) ? | |
| 709 | + $diagnosticPermission.hasClass( 'fs-on' ) : | |
| 710 | + null; | |
| 707 | 711 | |
| 712 | + if ( null === isExtensionsTrackingAllowed ) { | |
| 713 | + $( 'input[name=is_extensions_tracking_allowed]' ).remove(); | |
| 714 | + } else { | |
| 715 | + $( 'input[name=is_extensions_tracking_allowed]' ).val( isExtensionsTrackingAllowed ? 1 : 0 ); | |
| 716 | + } | |
| 717 | + | |
| 718 | + // We are not showing switch to enable/disable diagnostic tracking while activating free version. So, don't remove hidden `is_diagnostic_tracking_allowed` element from DOM and change the value only if switch is available. | |
| 719 | + if ( null !== isDiagnosticTrackingAllowed ) { | |
| 720 | + $( 'input[name=is_diagnostic_tracking_allowed]' ).val( isDiagnosticTrackingAllowed ? 1 : 0 ); | |
| 721 | + } | |
| 722 | + | |
| 708 | 723 | /** |
| 709 | 724 | * @author Vova Feldman (@svovaf) |
| 710 | 725 | * @since 1.1.9 |
| 711 | 726 | */ |
| @@ -726,12 +741,13 @@ | ||
| 726 | 741 | |
| 727 | 742 | var |
| 728 | 743 | licenseKey = $licenseKeyInput.val(), |
| 729 | 744 | data = { |
| 730 | - action : action, | |
| 731 | - security : security, | |
| 732 | - license_key: licenseKey, | |
| 733 | - module_id : '<?php echo $fs->get_id() ?>' | |
| 745 | + action : action, | |
| 746 | + security : security, | |
| 747 | + license_key : licenseKey, | |
| 748 | + module_id : '<?php echo $fs->get_id() ?>', | |
| 749 | + license_owner_id: licenseOwnerIDByLicense[ licenseKey ] | |
| 734 | 750 | }; |
| 735 | 751 | |
| 736 | 752 | if ( |
| 737 | 753 | requireLicenseKey && |
| @@ -758,8 +774,10 @@ | ||
| 758 | 774 | |
| 759 | 775 | data.is_marketing_allowed = isMarketingAllowed; |
| 760 | 776 | |
| 761 | 777 | data.is_extensions_tracking_allowed = isExtensionsTrackingAllowed; |
| 778 | + | |
| 779 | + data.is_diagnostic_tracking_allowed = isDiagnosticTrackingAllowed; | |
| 762 | 780 | } |
| 763 | 781 | |
| 764 | 782 | $marketingOptin.removeClass( 'error' ); |
| 765 | 783 | |
| @@ -780,9 +798,8 @@ | ||
| 780 | 798 | uid : $this.find( '.uid' ).val(), |
| 781 | 799 | url : $this.find( '.url' ).val(), |
| 782 | 800 | title : $this.find( '.title' ).val(), |
| 783 | 801 | language: $this.find( '.language' ).val(), |
| 784 | - charset : $this.find( '.charset' ).val(), | |
| 785 | 802 | blog_id : $this.find( '.blog-id' ).find( 'span' ).text() |
| 786 | 803 | }; |
| 787 | 804 | |
| 788 | 805 | if ( ! requireLicenseKey) { |
| @@ -808,9 +825,9 @@ | ||
| 808 | 825 | * @author Vova Feldman (@svovaf) |
| 809 | 826 | * @since 1.2.1.5 |
| 810 | 827 | */ |
| 811 | 828 | $.ajax({ |
| 812 | - url : ajaxurl, | |
| 829 | + url : <?php echo Freemius::ajax_url() ?>, | |
| 813 | 830 | method : 'POST', |
| 814 | 831 | data : data, |
| 815 | 832 | success: function (result) { |
| 816 | 833 | var resultObj = $.parseJSON(result); |
| @@ -820,9 +837,9 @@ | ||
| 820 | 837 | } else { |
| 821 | 838 | resetLoadingMode(); |
| 822 | 839 | |
| 823 | 840 | // Show error. |
| 824 | - $('.fs-content').prepend('<p class="fs-error">' + (resultObj.error.message ? resultObj.error.message : resultObj.error) + '</p>'); | |
| 841 | + $('.fs-content').prepend('<div class="fs-error">' + (resultObj.error.message ? resultObj.error.message : resultObj.error) + '</div>'); | |
| 825 | 842 | } |
| 826 | 843 | }, |
| 827 | 844 | error: function () { |
| 828 | 845 | resetLoadingMode(); |
| @@ -844,8 +861,17 @@ | ||
| 844 | 861 | |
| 845 | 862 | return true; |
| 846 | 863 | }); |
| 847 | 864 | |
| 865 | + $( '#fs_connect .fs-permissions .fs-switch' ).on( 'click', function () { | |
| 866 | + $( this ) | |
| 867 | + .toggleClass( 'fs-on' ) | |
| 868 | + .toggleClass( 'fs-off' ); | |
| 869 | + | |
| 870 | + $( this ).closest( '.fs-permission' ) | |
| 871 | + .toggleClass( 'fs-disabled' ); | |
| 872 | + }); | |
| 873 | + | |
| 848 | 874 | $primaryCta.on('click', function () { |
| 849 | 875 | console.log('Primary button was clicked'); |
| 850 | 876 | |
| 851 | 877 | $(this).addClass('fs-loading'); |
| @@ -860,14 +886,8 @@ | ||
| 860 | 886 | |
| 861 | 887 | return false; |
| 862 | 888 | }); |
| 863 | 889 | |
| 864 | - $( '.fs-switch' ).click( function () { | |
| 865 | - $(this) | |
| 866 | - .toggleClass( 'fs-on' ) | |
| 867 | - .toggleClass( 'fs-off' ); | |
| 868 | - }); | |
| 869 | - | |
| 870 | 890 | if (requireLicenseKey) { |
| 871 | 891 | /** |
| 872 | 892 | * Submit license key on enter. |
| 873 | 893 | * |
| @@ -898,9 +918,9 @@ | ||
| 898 | 918 | } |
| 899 | 919 | |
| 900 | 920 | if ('' === key) { |
| 901 | 921 | $primaryCta.attr('disabled', 'disabled'); |
| 902 | - $marketingOptin.hide(); | |
| 922 | + hideOptinAndLicenseMessage(); | |
| 903 | 923 | } else { |
| 904 | 924 | $primaryCta.prop('disabled', false); |
| 905 | 925 | |
| 906 | 926 | if (32 <= key.length){ |
| @@ -905,9 +925,9 @@ | ||
| 905 | 925 | |
| 906 | 926 | if (32 <= key.length){ |
| 907 | 927 | fetchIsMarketingAllowedFlagAndToggleOptin(); |
| 908 | 928 | } else { |
| 909 | - $marketingOptin.hide(); | |
| 929 | + hideOptinAndLicenseMessage(); | |
| 910 | 930 | } |
| 911 | 931 | } |
| 912 | 932 | |
| 913 | 933 | previousLicenseKey = key; |
| @@ -941,10 +961,12 @@ | ||
| 941 | 961 | //-------------------------------------------------------------------------------- |
| 942 | 962 | //region GDPR |
| 943 | 963 | //-------------------------------------------------------------------------------- |
| 944 | 964 | var isMarketingAllowedByLicense = {}, |
| 945 | - $marketingOptin = $('#fs_marketing_optin'), | |
| 946 | - previousLicenseKey = null; | |
| 965 | + licenseOwnerIDByLicense = {}, | |
| 966 | + $marketingOptin = $( '#fs_marketing_optin' ), | |
| 967 | + $orphanLicenseMessage = $( '#fs_orphan_license_message' ), | |
| 968 | + previousLicenseKey = null; | |
| 947 | 969 | |
| 948 | 970 | if (requireLicenseKey) { |
| 949 | 971 | |
| 950 | 972 | var |
| @@ -964,8 +986,16 @@ | ||
| 964 | 986 | } else { |
| 965 | 987 | $marketingOptin.hide(); |
| 966 | 988 | $primaryCta.focus(); |
| 967 | 989 | } |
| 990 | + | |
| 991 | + $orphanLicenseMessage.toggle( false === licenseOwnerIDByLicense[ licenseKey ] ); | |
| 992 | + | |
| 993 | + if ( false !== licenseOwnerIDByLicense[ licenseKey ] ) { | |
| 994 | + $( 'input[name=user_firstname]' ).remove(); | |
| 995 | + $( 'input[name=user_lastname]' ).remove(); | |
| 996 | + $( 'input[name=user_email]' ).remove(); | |
| 997 | + } | |
| 968 | 998 | }, |
| 969 | 999 | /** |
| 970 | 1000 | * @author Leo Fajardo (@leorw) |
| 971 | 1001 | * @since 2.1.0 |
| @@ -973,9 +1003,10 @@ | ||
| 973 | 1003 | fetchIsMarketingAllowedFlagAndToggleOptin = function () { |
| 974 | 1004 | var licenseKey = $licenseKeyInput.val(); |
| 975 | 1005 | |
| 976 | 1006 | if (licenseKey.length < 32) { |
| 977 | - $marketingOptin.hide(); | |
| 1007 | + hideOptinAndLicenseMessage(); | |
| 1008 | + | |
| 978 | 1009 | return; |
| 979 | 1010 | } |
| 980 | 1011 | |
| 981 | 1012 | if (isMarketingAllowedByLicense.hasOwnProperty(licenseKey)) { |
| @@ -982,10 +1013,9 @@ | ||
| 982 | 1013 | afterMarketingFlagLoaded(); |
| 983 | 1014 | return; |
| 984 | 1015 | } |
| 985 | 1016 | |
| 986 | - $marketingOptin.hide(); | |
| 987 | - | |
| 1017 | + hideOptinAndLicenseMessage(); | |
| 988 | 1018 | setLoadingMode(); |
| 989 | 1019 | |
| 990 | 1020 | $primaryCta.addClass('fs-loading'); |
| 991 | 1021 | $primaryCta.attr('disabled', 'disabled'); |
| @@ -991,9 +1021,9 @@ | ||
| 991 | 1021 | $primaryCta.attr('disabled', 'disabled'); |
| 992 | 1022 | $primaryCta.html('<?php fs_esc_js_echo_inline( 'Please wait', 'please-wait', $slug ) ?>...'); |
| 993 | 1023 | |
| 994 | 1024 | $.ajax({ |
| 995 | - url : ajaxurl, | |
| 1025 | + url : <?php echo Freemius::ajax_url() ?>, | |
| 996 | 1026 | method : 'POST', |
| 997 | 1027 | data : { |
| 998 | 1028 | action : '<?php echo $fs->get_ajax_action( 'fetch_is_marketing_required_flag_value' ) ?>', |
| 999 | 1029 | security : '<?php echo $fs->get_ajax_security( 'fetch_is_marketing_required_flag_value' ) ?>', |
| @@ -1007,13 +1037,18 @@ | ||
| 1007 | 1037 | result = result.data; |
| 1008 | 1038 | |
| 1009 | 1039 | // Cache result. |
| 1010 | 1040 | isMarketingAllowedByLicense[licenseKey] = result.is_marketing_allowed; |
| 1041 | + licenseOwnerIDByLicense[ licenseKey ] = result.license_owner_id; | |
| 1011 | 1042 | } |
| 1012 | 1043 | |
| 1013 | 1044 | afterMarketingFlagLoaded(); |
| 1014 | 1045 | } |
| 1015 | 1046 | }); |
| 1047 | + }, | |
| 1048 | + hideOptinAndLicenseMessage = function() { | |
| 1049 | + $marketingOptin.hide(); | |
| 1050 | + $orphanLicenseMessage.hide(); | |
| 1016 | 1051 | }; |
| 1017 | 1052 | |
| 1018 | 1053 | $marketingOptin.find( 'input' ).click(function() { |
| 1019 | 1054 | $marketingOptin.removeClass( 'error' ); |
| @@ -1021,5 +1056,7 @@ | ||
| 1021 | 1056 | } |
| 1022 | 1057 | |
| 1023 | 1058 | //endregion |
| 1024 | 1059 | })(jQuery); |
| 1025 | -</script> | |
| 1060 | +</script> | |
| 1061 | +<?php | |
| 1062 | + fs_require_once_template( 'api-connectivity-message-js.php' ); | |