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 +223 -186 1.2.3trunk 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" 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 + &nbsp;&nbsp;-&nbsp;&nbsp;
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 &nbsp;&nbsp;-&nbsp;&nbsp;
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' );