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 +211 -187 1.3.4trunk 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,18 +200,16 @@
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 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>' ),
@@ -185,23 +216,34 @@
185 216 $first_name,
186 217 $fs->get_plugin_name()
187 218 );
188 219 } else {
189 - $filter = 'connect_message';
190 - $default_optin_message = $is_gdpr_required ?
191 - 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) :
192 - 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';
193 221
194 - 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 {
195 231 // If Freemius was added on a plugin update, set different
196 232 // opt-in message.
197 - $default_optin_message = $is_gdpr_required ?
198 - 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 ) :
199 - 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 );
200 233
201 - // 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
202 244 // that message. Otherwise, fallback to regular opt-in
203 - // custom message if exist.
245 + // custom message if exists.
204 246 if ( $fs->has_filter( 'connect_message_on_update' ) ) {
205 247 $filter = 'connect_message_on_update';
206 248 }
207 249 }
@@ -207,26 +249,21 @@
207 249 }
208 250
209 251 $message = $fs->apply_filters(
210 252 $filter,
211 - ($is_network_upgrade_mode ?
212 - '' :
213 - /* translators: %s: name (e.g. Hey John,) */
214 - $hey_x_text . '<br>'
215 - ) .
216 253 sprintf(
217 - esc_html( $default_optin_message ),
254 + $default_optin_message,
218 255 '<b>' . esc_html( $fs->get_plugin_name() ) . '</b>',
219 256 '<b>' . $current_user->user_login . '</b>',
220 257 '<a href="' . $site_url . '" target="_blank" rel="noopener noreferrer">' . $site_url . '</a>',
221 - $freemius_link
258 + $freemius_activation_terms_html
222 259 ),
223 260 $first_name,
224 261 $fs->get_plugin_name(),
225 262 $current_user->user_login,
226 263 '<a href="' . $site_url . '" target="_blank" rel="noopener noreferrer">' . $site_url . '</a>',
227 - $freemius_link,
228 - $is_gdpr_required
264 + $freemius_activation_terms_html,
265 + true
229 266 );
230 267 }
231 268
232 269 if ( $is_network_upgrade_mode ) {
@@ -265,9 +302,9 @@
265 302 *
266 303 * @author Vova Feldman
267 304 * @since 2.1.2
268 305 */
269 - $fs->do_action( 'connect/after_license_input' );
306 + $fs->do_action( 'connect/after_license_input', $activation_state );
270 307 ?>
271 308
272 309 <?php
273 310 $send_updates_text = sprintf(
@@ -298,8 +335,11 @@
298 335 <span class="fs-input-label"><?php echo $do_not_send_updates_text ?></span>
299 336 </label>
300 337 </div>
301 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>
302 342 <?php endif ?>
303 343 <?php if ( $is_network_level_activation ) : ?>
304 344 <?php
305 345 $vars = array(
@@ -310,10 +350,14 @@
310 350
311 351 echo fs_get_template( 'partials/network-activation.php', $vars );
312 352 ?>
313 353 <?php endif ?>
354 +
355 + <?php $fs->do_action( 'connect/after_message', $activation_state ) ?>
314 356 </div>
315 357 <div class="fs-actions">
358 + <?php $fs->do_action( 'connect/before_actions', $activation_state ) ?>
359 +
316 360 <?php if ( $fs->is_enable_anonymous() && ! $is_pending_activation && ( ! $require_license_key || $is_network_upgrade_mode ) ) : ?>
317 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' ) ?>"
318 362 class="button button-secondary" tabindex="2"><?php fs_esc_html_echo_x_inline( 'Skip', 'verb', 'skip', $slug ) ?></a>
319 363 <?php endif ?>
@@ -322,11 +366,12 @@
322 366 <?php endif ?>
323 367 <?php if ( $activate_with_current_user ) : ?>
324 368 <form action="" method="POST">
325 369 <input type="hidden" name="fs_action"
326 - value="<?php echo $fs->get_unique_affix() ?>_activate_existing">
327 - <?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' ) ?>
328 372 <input type="hidden" name="is_extensions_tracking_allowed" value="1">
373 + <input type="hidden" name="is_diagnostic_tracking_allowed" value="1">
329 374 <button class="button button-primary" tabindex="1"
330 375 type="submit"><?php echo esc_html( $button_label ) ?></button>
331 376 </form>
332 377 <?php else : ?>
@@ -332,11 +377,12 @@
332 377 <?php else : ?>
333 378 <form method="post" action="<?php echo WP_FS__ADDRESS ?>/action/service/user/install/">
334 379 <?php unset( $optin_params['sites']); ?>
335 380 <?php foreach ( $optin_params as $name => $value ) : ?>
336 - <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 ) ?>">
337 382 <?php endforeach ?>
338 383 <input type="hidden" name="is_extensions_tracking_allowed" value="1">
384 + <input type="hidden" name="is_diagnostic_tracking_allowed" value="1">
339 385 <button class="button button-primary" tabindex="1"
340 386 type="submit"<?php if ( $require_license_key ) {
341 387 echo ' disabled="disabled"';
342 388 } ?>><?php echo esc_html( $button_label ) ?></button>
@@ -342,113 +388,48 @@
342 388 } ?>><?php echo esc_html( $button_label ) ?></button>
343 389 </form>
344 390 <?php endif ?>
345 391 <?php if ( $require_license_key ) : ?>
346 - <a id="license_issues_link" href="<?php echo $fs->apply_filters( 'known_license_issues_url', 'https://freemius.com/help/documentation/wordpress-sdk/license-activation-issues/' ) ?>" target="_blank"><?php fs_esc_html_echo_inline( 'License issues?', 'license-issues', $slug ) ?></a>
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>
347 395 <?php endif ?>
396 +
397 + <?php $fs->do_action( 'connect/after_actions', $activation_state ) ?>
348 398 </div><?php
399 + $permission_manager = FS_Permission_Manager::instance( $fs );
349 400
350 401 // Set core permission list items.
351 402 $permissions = array();
352 403
353 - /**
354 - * When activating a license key the information of the admin is not collected, we gather the user info from the license.
355 - *
356 - * @since 2.3.2
357 - * @author Vova Feldman
358 - */
359 - if ( ! $require_license_key ) {
360 - $permissions['profile'] = array(
361 - 'icon-class' => 'dashicons dashicons-admin-users',
362 - 'label' => $fs->get_text_inline( 'Your Profile Overview', 'permissions-profile' ),
363 - 'desc' => $fs->get_text_inline( 'Name and email address', 'permissions-profile_desc' ),
364 - 'priority' => 5,
365 - );
366 - }
367 -
368 - $permissions['site'] = array(
369 - 'icon-class' => 'dashicons dashicons-admin-settings',
370 - 'tooltip' => ( $require_license_key ? sprintf( $fs->get_text_inline( 'So you can manage and control your license remotely from the User Dashboard.', 'permissions-site_tooltip' ), $fs->get_module_type() ) : '' ),
371 - 'label' => $fs->get_text_inline( 'Your Site Overview', 'permissions-site' ),
372 - 'desc' => $fs->get_text_inline( 'Site URL, WP version, PHP info', 'permissions-site_desc' ),
373 - 'priority' => 10,
374 - );
375 -
376 - if ( ! $require_license_key ) {
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 - );
404 + // Add newsletter permissions if enabled.
405 + if ( $fs->is_permission_requested( 'newsletter' ) ) {
406 + $permissions[] = $permission_manager->get_newsletter_permission();
383 407 }
384 408
385 - $permissions['events'] = array(
386 - 'icon-class' => 'dashicons dashicons-admin-' . ( $fs->is_plugin() ? 'plugins' : 'appearance' ),
387 - 'tooltip' => ( $require_license_key ? sprintf( $fs->get_text_inline( 'So you can reuse the license when the %s is no longer active.', 'permissions-events_tooltip' ), $fs->get_module_type() ) : '' ),
388 - 'label' => sprintf( $fs->get_text_inline( 'Current %s Status', 'permissions-events' ), ucfirst( $fs->get_module_type() ) ),
389 - 'desc' => $fs->get_text_inline( 'Active, deactivated, or uninstalled', 'permissions-events_desc' ),
390 - 'priority' => 20,
409 + $permissions = $permission_manager->get_permissions(
410 + $require_license_key,
411 + $permissions
391 412 );
392 413
393 - // Add newsletter permissions if enabled.
394 - if ( $is_gdpr_required || $fs->is_permission_requested( 'newsletter' ) ) {
395 - $permissions['newsletter'] = array(
396 - 'icon-class' => 'dashicons dashicons-email-alt',
397 - 'label' => $fs->get_text_inline( 'Newsletter', 'permissions-newsletter' ),
398 - 'desc' => $fs->get_text_inline( 'Updates, announcements, marketing, no spam', 'permissions-newsletter_desc' ),
399 - 'priority' => 15,
400 - );
401 - }
402 -
403 - $permissions['extensions'] = array(
404 - 'icon-class' => 'dashicons dashicons-menu',
405 - 'label' => $fs->get_text_inline( 'Plugins & Themes', 'permissions-extensions' ) . ( $require_license_key ? ' (' . $fs->get_text_inline( 'optional' ) . ')' : '' ),
406 - 'tooltip' => $fs->get_text_inline( 'To help us troubleshoot any potential issues that may arise from other plugin or theme conflicts.', 'permissions-events_tooltip' ),
407 - 'desc' => $fs->get_text_inline( 'Title, slug, version, and is active', 'permissions-extensions_desc' ),
408 - 'priority' => 25,
409 - 'optional' => true,
410 - 'default' => $fs->apply_filters( 'permission_extensions_default', ! $require_license_key )
411 - );
412 -
413 - // Allow filtering of the permissions list.
414 - $permissions = $fs->apply_filters( 'permission_list', $permissions );
415 -
416 - // Sort by priority.
417 - uasort( $permissions, 'fs_sort_by_priority' );
418 -
419 414 if ( ! empty( $permissions ) ) : ?>
420 415 <div class="fs-permissions">
421 - <?php if ( $require_license_key ) : ?>
422 - <p class="fs-license-sync-disclaimer"><?php
423 - echo sprintf(
424 - fs_esc_html_inline( 'The %1$s will periodically send %2$s to %3$s for security & feature updates delivery, and license management.', 'license-sync-disclaimer', $slug ),
425 - $fs->get_module_label( true ),
426 - sprintf('<a class="fs-trigger" href="#" tabindex="1">%s</a>', fs_esc_html_inline('diagnostic data', 'send-data')),
427 - '<a class="fs-tooltip-trigger' . (is_rtl() ? ' rtl' : '') . '" href="' . $freemius_site_url . '" target="_blank" rel="noopener" tabindex="1">freemius.com <i class="dashicons dashicons-editor-help" style="text-decoration: none;"><span class="fs-tooltip" style="width: 170px">' . $fs->get_text_inline( 'Freemius is our licensing and software updates engine', 'permissions-extensions_desc' ) . '</span></i></a>'
428 - ) ?></p>
429 - <?php else : ?>
430 - <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>
431 426 <?php endif ?>
432 427 <ul><?php
433 - foreach ( $permissions as $id => $permission ) : ?>
434 - <li id="fs-permission-<?php echo esc_attr( $id ); ?>"
435 - class="fs-permission fs-<?php echo esc_attr( $id ); ?>">
436 - <i class="<?php echo esc_attr( $permission['icon-class'] ); ?>"></i>
437 - <?php if ( isset( $permission['optional'] ) && true === $permission['optional'] ) : ?>
438 - <div class="fs-switch fs-small fs-round fs-<?php echo (! isset( $permission['default'] ) || true === $permission['default'] ) ? 'on' : 'off' ?>">
439 - <div class="fs-toggle"></div>
440 - </div>
441 - <?php endif ?>
442 -
443 - <div class="fs-permission-description">
444 - <span<?php if ( ! empty($permission['tooltip']) ) : ?> class="fs-tooltip-trigger"<?php endif ?>><?php echo esc_html( $permission['label'] ); ?><?php if ( ! empty($permission['tooltip']) ) : ?><i class="dashicons dashicons-editor-help"><span class="fs-tooltip" style="width: 200px"><?php echo $permission['tooltip'] ?></span></i><?php endif ?></span>
445 -
446 - <p><?php echo esc_html( $permission['desc'] ); ?></p>
447 - </div>
448 - </li>
449 - <?php endforeach; ?>
450 - </ul>
428 + foreach ( $permissions as $permission ) {
429 + $permission_manager->render_permission( $permission );
430 + }
431 + ?></ul>
451 432 </div>
452 433 <?php endif ?>
453 434 <?php if ( $is_premium_code && $is_freemium ) : ?>
454 435 <div class="fs-freemium-licensing">
@@ -462,13 +443,20 @@
462 443 <?php endif ?>
463 444 </p>
464 445 </div>
465 446 <?php endif ?>
447 + </div>
466 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;
467 451 <a href="https://freemius.com/privacy/" target="_blank" rel="noopener"
468 452 tabindex="1"><?php fs_esc_html_echo_inline( 'Privacy Policy', 'privacy-policy', $slug ) ?></a>
469 453 &nbsp;&nbsp;-&nbsp;&nbsp;
470 - <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; ?>
471 459 </div>
472 460 </div>
473 461 <?php
474 462 /**
@@ -476,9 +464,9 @@
476 464 *
477 465 * @author Vova Feldman
478 466 * @since 2.3.2
479 467 */
480 - $fs->do_action( 'connect/after' );
468 + $fs->do_action( 'connect/after', $activation_state );
481 469
482 470 if ( $is_optin_dialog ) { ?>
483 471 </div>
484 472 <?php
@@ -530,15 +518,14 @@
530 518 resetLoadingMode = function() {
531 519 // Reset loading mode.
532 520 $primaryCta.html(primaryCtaLabel);
533 521 $primaryCta.prop('disabled', false);
534 - $(document.body).css({'cursor': 'auto'});
535 - $('.fs-loading').removeClass('fs-loading');
522 + $( '.fs-loading' ).removeClass( 'fs-loading' );
536 523
537 524 console.log('resetLoadingMode - Primary button was enabled');
538 525 },
539 526 setLoadingMode = function () {
540 - $(document.body).css({'cursor': 'wait'});
527 + $( document.body ).addClass( 'fs-loading' );
541 528 };
542 529
543 530 $('.fs-actions .button').on('click', function () {
544 531 setLoadingMode();
@@ -600,8 +587,13 @@
600 587
601 588 updatePrimaryCtaText( actionType );
602 589 });
603 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 +
604 596 $sitesListContainer.delegate( '.action', 'click', function( evt ) {
605 597 var $this = $( evt.target );
606 598 if ( $this.hasClass( 'selected' ) ) {
607 599 return false;
@@ -706,19 +698,29 @@
706 698
707 699 var ajaxOptin = ( requireLicenseKey || isNetworkActive );
708 700
709 701 $form.on('submit', function () {
710 - var $extensionsPermission = $('#fs-permission-extensions .fs-switch'),
711 - isExtensionsTrackingAllowed = ($extensionsPermission.length > 0) ?
712 - $extensionsPermission.hasClass('fs-on') :
702 + var $extensionsPermission = $( '#fs_permission_extensions .fs-switch' ),
703 + isExtensionsTrackingAllowed = ( $extensionsPermission.length > 0 ) ?
704 + $extensionsPermission.hasClass( 'fs-on' ) :
713 705 null;
714 706
715 - if (null === isExtensionsTrackingAllowed) {
716 - $('input[name=is_extensions_tracking_allowed]').remove();
707 + var $diagnosticPermission = $( '#fs_permission_diagnostic .fs-switch' ),
708 + isDiagnosticTrackingAllowed = ( $diagnosticPermission.length > 0 ) ?
709 + $diagnosticPermission.hasClass( 'fs-on' ) :
710 + null;
711 +
712 + if ( null === isExtensionsTrackingAllowed ) {
713 + $( 'input[name=is_extensions_tracking_allowed]' ).remove();
717 714 } else {
718 - $('input[name=is_extensions_tracking_allowed]').val(isExtensionsTrackingAllowed ? 1 : 0);
715 + $( 'input[name=is_extensions_tracking_allowed]' ).val( isExtensionsTrackingAllowed ? 1 : 0 );
719 716 }
720 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 +
721 723 /**
722 724 * @author Vova Feldman (@svovaf)
723 725 * @since 1.1.9
724 726 */
@@ -739,12 +741,13 @@
739 741
740 742 var
741 743 licenseKey = $licenseKeyInput.val(),
742 744 data = {
743 - action : action,
744 - security : security,
745 - license_key: licenseKey,
746 - 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 ]
747 750 };
748 751
749 752 if (
750 753 requireLicenseKey &&
@@ -771,8 +774,10 @@
771 774
772 775 data.is_marketing_allowed = isMarketingAllowed;
773 776
774 777 data.is_extensions_tracking_allowed = isExtensionsTrackingAllowed;
778 +
779 + data.is_diagnostic_tracking_allowed = isDiagnosticTrackingAllowed;
775 780 }
776 781
777 782 $marketingOptin.removeClass( 'error' );
778 783
@@ -793,9 +798,8 @@
793 798 uid : $this.find( '.uid' ).val(),
794 799 url : $this.find( '.url' ).val(),
795 800 title : $this.find( '.title' ).val(),
796 801 language: $this.find( '.language' ).val(),
797 - charset : $this.find( '.charset' ).val(),
798 802 blog_id : $this.find( '.blog-id' ).find( 'span' ).text()
799 803 };
800 804
801 805 if ( ! requireLicenseKey) {
@@ -821,9 +825,9 @@
821 825 * @author Vova Feldman (@svovaf)
822 826 * @since 1.2.1.5
823 827 */
824 828 $.ajax({
825 - url : ajaxurl,
829 + url : <?php echo Freemius::ajax_url() ?>,
826 830 method : 'POST',
827 831 data : data,
828 832 success: function (result) {
829 833 var resultObj = $.parseJSON(result);
@@ -833,9 +837,9 @@
833 837 } else {
834 838 resetLoadingMode();
835 839
836 840 // Show error.
837 - $('.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>');
838 842 }
839 843 },
840 844 error: function () {
841 845 resetLoadingMode();
@@ -857,8 +861,17 @@
857 861
858 862 return true;
859 863 });
860 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 +
861 874 $primaryCta.on('click', function () {
862 875 console.log('Primary button was clicked');
863 876
864 877 $(this).addClass('fs-loading');
@@ -873,14 +886,8 @@
873 886
874 887 return false;
875 888 });
876 889
877 - $( '.fs-switch' ).click( function () {
878 - $(this)
879 - .toggleClass( 'fs-on' )
880 - .toggleClass( 'fs-off' );
881 - });
882 -
883 890 if (requireLicenseKey) {
884 891 /**
885 892 * Submit license key on enter.
886 893 *
@@ -911,9 +918,9 @@
911 918 }
912 919
913 920 if ('' === key) {
914 921 $primaryCta.attr('disabled', 'disabled');
915 - $marketingOptin.hide();
922 + hideOptinAndLicenseMessage();
916 923 } else {
917 924 $primaryCta.prop('disabled', false);
918 925
919 926 if (32 <= key.length){
@@ -918,9 +925,9 @@
918 925
919 926 if (32 <= key.length){
920 927 fetchIsMarketingAllowedFlagAndToggleOptin();
921 928 } else {
922 - $marketingOptin.hide();
929 + hideOptinAndLicenseMessage();
923 930 }
924 931 }
925 932
926 933 previousLicenseKey = key;
@@ -954,10 +961,12 @@
954 961 //--------------------------------------------------------------------------------
955 962 //region GDPR
956 963 //--------------------------------------------------------------------------------
957 964 var isMarketingAllowedByLicense = {},
958 - $marketingOptin = $('#fs_marketing_optin'),
959 - previousLicenseKey = null;
965 + licenseOwnerIDByLicense = {},
966 + $marketingOptin = $( '#fs_marketing_optin' ),
967 + $orphanLicenseMessage = $( '#fs_orphan_license_message' ),
968 + previousLicenseKey = null;
960 969
961 970 if (requireLicenseKey) {
962 971
963 972 var
@@ -977,8 +986,16 @@
977 986 } else {
978 987 $marketingOptin.hide();
979 988 $primaryCta.focus();
980 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 + }
981 998 },
982 999 /**
983 1000 * @author Leo Fajardo (@leorw)
984 1001 * @since 2.1.0
@@ -986,9 +1003,10 @@
986 1003 fetchIsMarketingAllowedFlagAndToggleOptin = function () {
987 1004 var licenseKey = $licenseKeyInput.val();
988 1005
989 1006 if (licenseKey.length < 32) {
990 - $marketingOptin.hide();
1007 + hideOptinAndLicenseMessage();
1008 +
991 1009 return;
992 1010 }
993 1011
994 1012 if (isMarketingAllowedByLicense.hasOwnProperty(licenseKey)) {
@@ -995,10 +1013,9 @@
995 1013 afterMarketingFlagLoaded();
996 1014 return;
997 1015 }
998 1016
999 - $marketingOptin.hide();
1000 -
1017 + hideOptinAndLicenseMessage();
1001 1018 setLoadingMode();
1002 1019
1003 1020 $primaryCta.addClass('fs-loading');
1004 1021 $primaryCta.attr('disabled', 'disabled');
@@ -1004,9 +1021,9 @@
1004 1021 $primaryCta.attr('disabled', 'disabled');
1005 1022 $primaryCta.html('<?php fs_esc_js_echo_inline( 'Please wait', 'please-wait', $slug ) ?>...');
1006 1023
1007 1024 $.ajax({
1008 - url : ajaxurl,
1025 + url : <?php echo Freemius::ajax_url() ?>,
1009 1026 method : 'POST',
1010 1027 data : {
1011 1028 action : '<?php echo $fs->get_ajax_action( 'fetch_is_marketing_required_flag_value' ) ?>',
1012 1029 security : '<?php echo $fs->get_ajax_security( 'fetch_is_marketing_required_flag_value' ) ?>',
@@ -1020,13 +1037,18 @@
1020 1037 result = result.data;
1021 1038
1022 1039 // Cache result.
1023 1040 isMarketingAllowedByLicense[licenseKey] = result.is_marketing_allowed;
1041 + licenseOwnerIDByLicense[ licenseKey ] = result.license_owner_id;
1024 1042 }
1025 1043
1026 1044 afterMarketingFlagLoaded();
1027 1045 }
1028 1046 });
1047 + },
1048 + hideOptinAndLicenseMessage = function() {
1049 + $marketingOptin.hide();
1050 + $orphanLicenseMessage.hide();
1029 1051 };
1030 1052
1031 1053 $marketingOptin.find( 'input' ).click(function() {
1032 1054 $marketingOptin.removeClass( 'error' );
@@ -1034,5 +1056,7 @@
1034 1056 }
1035 1057
1036 1058 //endregion
1037 1059 })(jQuery);
1038 -</script>
1060 +</script>
1061 +<?php
1062 + fs_require_once_template( 'api-connectivity-message-js.php' );