PluginProbe
BlockSpare – Gutenberg Blocks for News, Magazine, Blog & Business Websites / trunk
BlockSpare – Gutenberg Blocks for News, Magazine, Blog & Business Websites vtrunk
4.1.0 trunk 1.0.0 1.0.1 1.0.2 1.0.3 1.0.4 1.0.5 1.1.0 1.1.1 1.1.2 1.2.0 1.2.1 1.2.2 1.2.3 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.3.5 2.1.2 2.5.0 2.5.3 2.6.1 All 38 releases
← All changes | freemius/templates/connect.php +220 -184 1.3.1trunk View file →
@@ -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" rel="noopener" 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 257 '<a href="' . $site_url . '" target="_blank" rel="noopener noreferrer">' . $site_url . '</a>',
226 - $freemius_link
258 + $freemius_activation_terms_html
227 259 ),
228 260 $first_name,
229 261 $fs->get_plugin_name(),
230 262 $current_user->user_login,
231 263 '<a href="' . $site_url . '" target="_blank" rel="noopener noreferrer">' . $site_url . '</a>',
232 - $freemius_link,
233 - $is_gdpr_required
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,104 +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 - 'default' => $fs->apply_filters( 'permission_extensions_default', true )
408 - );
409 -
410 - // Allow filtering of the permissions list.
411 - $permissions = $fs->apply_filters( 'permission_list', $permissions );
412 -
413 - // Sort by priority.
414 - uasort( $permissions, 'fs_sort_by_priority' );
415 -
416 414 if ( ! empty( $permissions ) ) : ?>
417 415 <div class="fs-permissions">
418 - <?php if ( $require_license_key ) : ?>
419 - <p class="fs-license-sync-disclaimer"><?php
420 - echo sprintf(
421 - 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 ),
422 - $fs->get_module_label( true ),
423 - $freemius_link
424 - ) ?></p>
425 - <?php endif ?>
426 - <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 ?>
427 427 <ul><?php
428 - foreach ( $permissions as $id => $permission ) : ?>
429 - <li id="fs-permission-<?php echo esc_attr( $id ); ?>"
430 - class="fs-permission fs-<?php echo esc_attr( $id ); ?>">
431 - <i class="<?php echo esc_attr( $permission['icon-class'] ); ?>"></i>
432 - <?php if ( isset( $permission['optional'] ) && true === $permission['optional'] ) : ?>
433 - <div class="fs-switch fs-small fs-round fs-<?php echo (! isset( $permission['default'] ) || true === $permission['default'] ) ? 'on' : 'off' ?>">
434 - <div class="fs-toggle"></div>
435 - </div>
436 - <?php endif ?>
437 -
438 - <div class="fs-permission-description">
439 - <span><?php echo esc_html( $permission['label'] ); ?></span>
440 -
441 - <p><?php echo esc_html( $permission['desc'] ); ?></p>
442 - </div>
443 - </li>
444 - <?php endforeach; ?>
445 - </ul>
428 + foreach ( $permissions as $permission ) {
429 + $permission_manager->render_permission( $permission );
430 + }
431 + ?></ul>
446 432 </div>
447 433 <?php endif ?>
448 434 <?php if ( $is_premium_code && $is_freemium ) : ?>
449 435 <div class="fs-freemium-licensing">
@@ -457,13 +443,20 @@
457 443 <?php endif ?>
458 444 </p>
459 445 </div>
460 446 <?php endif ?>
447 + </div>
461 448 <div class="fs-terms">
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 + &nbsp;&nbsp;-&nbsp;&nbsp;
462 451 <a href="https://freemius.com/privacy/" target="_blank" rel="noopener"
463 452 tabindex="1"><?php fs_esc_html_echo_inline( 'Privacy Policy', 'privacy-policy', $slug ) ?></a>
464 453 &nbsp;&nbsp;-&nbsp;&nbsp;
465 - <a href="<?php echo $require_license_key ? $freemius_plugin_terms_url : $freemius_usage_tracking_url ?>" target="_blank" rel="noopener" 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; ?>
466 459 </div>
467 460 </div>
468 461 <?php
469 462 /**
@@ -471,9 +464,9 @@
471 464 *
472 465 * @author Vova Feldman
473 466 * @since 2.3.2
474 467 */
475 - $fs->do_action( 'connect/after' );
468 + $fs->do_action( 'connect/after', $activation_state );
476 469
477 470 if ( $is_optin_dialog ) { ?>
478 471 </div>
479 472 <?php
@@ -525,15 +518,14 @@
525 518 resetLoadingMode = function() {
526 519 // Reset loading mode.
527 520 $primaryCta.html(primaryCtaLabel);
528 521 $primaryCta.prop('disabled', false);
529 - $(document.body).css({'cursor': 'auto'});
530 - $('.fs-loading').removeClass('fs-loading');
522 + $( '.fs-loading' ).removeClass( 'fs-loading' );
531 523
532 524 console.log('resetLoadingMode - Primary button was enabled');
533 525 },
534 526 setLoadingMode = function () {
535 - $(document.body).css({'cursor': 'wait'});
527 + $( document.body ).addClass( 'fs-loading' );
536 528 };
537 529
538 530 $('.fs-actions .button').on('click', function () {
539 531 setLoadingMode();
@@ -595,8 +587,13 @@
595 587
596 588 updatePrimaryCtaText( actionType );
597 589 });
598 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 +
599 596 $sitesListContainer.delegate( '.action', 'click', function( evt ) {
600 597 var $this = $( evt.target );
601 598 if ( $this.hasClass( 'selected' ) ) {
602 599 return false;
@@ -701,12 +698,29 @@
701 698
702 699 var ajaxOptin = ( requireLicenseKey || isNetworkActive );
703 700
704 701 $form.on('submit', function () {
705 - 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;
706 706
707 - $( '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;
708 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 +
709 723 /**
710 724 * @author Vova Feldman (@svovaf)
711 725 * @since 1.1.9
712 726 */
@@ -727,12 +741,13 @@
727 741
728 742 var
729 743 licenseKey = $licenseKeyInput.val(),
730 744 data = {
731 - action : action,
732 - security : security,
733 - license_key: licenseKey,
734 - 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 ]
735 750 };
736 751
737 752 if (
738 753 requireLicenseKey &&
@@ -759,8 +774,10 @@
759 774
760 775 data.is_marketing_allowed = isMarketingAllowed;
761 776
762 777 data.is_extensions_tracking_allowed = isExtensionsTrackingAllowed;
778 +
779 + data.is_diagnostic_tracking_allowed = isDiagnosticTrackingAllowed;
763 780 }
764 781
765 782 $marketingOptin.removeClass( 'error' );
766 783
@@ -781,9 +798,8 @@
781 798 uid : $this.find( '.uid' ).val(),
782 799 url : $this.find( '.url' ).val(),
783 800 title : $this.find( '.title' ).val(),
784 801 language: $this.find( '.language' ).val(),
785 - charset : $this.find( '.charset' ).val(),
786 802 blog_id : $this.find( '.blog-id' ).find( 'span' ).text()
787 803 };
788 804
789 805 if ( ! requireLicenseKey) {
@@ -809,9 +825,9 @@
809 825 * @author Vova Feldman (@svovaf)
810 826 * @since 1.2.1.5
811 827 */
812 828 $.ajax({
813 - url : ajaxurl,
829 + url : <?php echo Freemius::ajax_url() ?>,
814 830 method : 'POST',
815 831 data : data,
816 832 success: function (result) {
817 833 var resultObj = $.parseJSON(result);
@@ -821,9 +837,9 @@
821 837 } else {
822 838 resetLoadingMode();
823 839
824 840 // Show error.
825 - $('.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>');
826 842 }
827 843 },
828 844 error: function () {
829 845 resetLoadingMode();
@@ -845,8 +861,17 @@
845 861
846 862 return true;
847 863 });
848 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 +
849 874 $primaryCta.on('click', function () {
850 875 console.log('Primary button was clicked');
851 876
852 877 $(this).addClass('fs-loading');
@@ -861,14 +886,8 @@
861 886
862 887 return false;
863 888 });
864 889
865 - $( '.fs-switch' ).click( function () {
866 - $(this)
867 - .toggleClass( 'fs-on' )
868 - .toggleClass( 'fs-off' );
869 - });
870 -
871 890 if (requireLicenseKey) {
872 891 /**
873 892 * Submit license key on enter.
874 893 *
@@ -899,9 +918,9 @@
899 918 }
900 919
901 920 if ('' === key) {
902 921 $primaryCta.attr('disabled', 'disabled');
903 - $marketingOptin.hide();
922 + hideOptinAndLicenseMessage();
904 923 } else {
905 924 $primaryCta.prop('disabled', false);
906 925
907 926 if (32 <= key.length){
@@ -906,9 +925,9 @@
906 925
907 926 if (32 <= key.length){
908 927 fetchIsMarketingAllowedFlagAndToggleOptin();
909 928 } else {
910 - $marketingOptin.hide();
929 + hideOptinAndLicenseMessage();
911 930 }
912 931 }
913 932
914 933 previousLicenseKey = key;
@@ -942,10 +961,12 @@
942 961 //--------------------------------------------------------------------------------
943 962 //region GDPR
944 963 //--------------------------------------------------------------------------------
945 964 var isMarketingAllowedByLicense = {},
946 - $marketingOptin = $('#fs_marketing_optin'),
947 - previousLicenseKey = null;
965 + licenseOwnerIDByLicense = {},
966 + $marketingOptin = $( '#fs_marketing_optin' ),
967 + $orphanLicenseMessage = $( '#fs_orphan_license_message' ),
968 + previousLicenseKey = null;
948 969
949 970 if (requireLicenseKey) {
950 971
951 972 var
@@ -965,8 +986,16 @@
965 986 } else {
966 987 $marketingOptin.hide();
967 988 $primaryCta.focus();
968 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 + }
969 998 },
970 999 /**
971 1000 * @author Leo Fajardo (@leorw)
972 1001 * @since 2.1.0
@@ -974,9 +1003,10 @@
974 1003 fetchIsMarketingAllowedFlagAndToggleOptin = function () {
975 1004 var licenseKey = $licenseKeyInput.val();
976 1005
977 1006 if (licenseKey.length < 32) {
978 - $marketingOptin.hide();
1007 + hideOptinAndLicenseMessage();
1008 +
979 1009 return;
980 1010 }
981 1011
982 1012 if (isMarketingAllowedByLicense.hasOwnProperty(licenseKey)) {
@@ -983,10 +1013,9 @@
983 1013 afterMarketingFlagLoaded();
984 1014 return;
985 1015 }
986 1016
987 - $marketingOptin.hide();
988 -
1017 + hideOptinAndLicenseMessage();
989 1018 setLoadingMode();
990 1019
991 1020 $primaryCta.addClass('fs-loading');
992 1021 $primaryCta.attr('disabled', 'disabled');
@@ -992,9 +1021,9 @@
992 1021 $primaryCta.attr('disabled', 'disabled');
993 1022 $primaryCta.html('<?php fs_esc_js_echo_inline( 'Please wait', 'please-wait', $slug ) ?>...');
994 1023
995 1024 $.ajax({
996 - url : ajaxurl,
1025 + url : <?php echo Freemius::ajax_url() ?>,
997 1026 method : 'POST',
998 1027 data : {
999 1028 action : '<?php echo $fs->get_ajax_action( 'fetch_is_marketing_required_flag_value' ) ?>',
1000 1029 security : '<?php echo $fs->get_ajax_security( 'fetch_is_marketing_required_flag_value' ) ?>',
@@ -1008,13 +1037,18 @@
1008 1037 result = result.data;
1009 1038
1010 1039 // Cache result.
1011 1040 isMarketingAllowedByLicense[licenseKey] = result.is_marketing_allowed;
1041 + licenseOwnerIDByLicense[ licenseKey ] = result.license_owner_id;
1012 1042 }
1013 1043
1014 1044 afterMarketingFlagLoaded();
1015 1045 }
1016 1046 });
1047 + },
1048 + hideOptinAndLicenseMessage = function() {
1049 + $marketingOptin.hide();
1050 + $orphanLicenseMessage.hide();
1017 1051 };
1018 1052
1019 1053 $marketingOptin.find( 'input' ).click(function() {
1020 1054 $marketingOptin.removeClass( 'error' );
@@ -1022,5 +1056,7 @@
1022 1056 }
1023 1057
1024 1058 //endregion
1025 1059 })(jQuery);
1026 -</script>
1060 +</script>
1061 +<?php
1062 + fs_require_once_template( 'api-connectivity-message-js.php' );