PluginProbe
Buttonizer – Floating Menus, Sticky Buttons, & Popup Builder / 3.6.0
Buttonizer – Floating Menus, Sticky Buttons, & Popup Builder v3.6.0
3.6.0 3.5.0 trunk 1.0.10 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.0.6.1 1.0.7 1.0.8 1.0.9 1.1 1.1.1 1.2 1.3 1.4 1.4.1 1.4.2 1.4.3 1.4.4 1.4.5 1.5 1.5.1 All 110 releases
← All changes | freemius/templates/account.php +583 -198 1.4.53.6.0 View file →
@@ -20,9 +20,11 @@
20 20
21 21 /**
22 22 * @var FS_Plugin_Tag $update
23 23 */
24 - $update = $fs->get_update( false, false, WP_FS__TIME_24_HOURS_IN_SEC / 24 );
24 + $update = $fs->has_release_on_freemius() ?
25 + $fs->get_update( false, false ) :
26 + null;
25 27
26 28 if ( is_object($update) ) {
27 29 /**
28 30 * This logic is particularly required for multisite environment.
@@ -43,8 +45,11 @@
43 45 $user = $fs->get_user();
44 46 $site = $fs->get_site();
45 47 $name = $user->get_name();
46 48 $license = $fs->_get_license();
49 + $is_license_foreign = ( is_object( $license ) && $user->id != $license->user_id );
50 + $is_data_debug_mode = $fs->is_data_debug_mode();
51 + $is_whitelabeled = $fs->is_whitelabeled();
47 52 $subscription = ( is_object( $license ) ?
48 53 $fs->_get_subscription( $license->id ) :
49 54 null );
50 55 $plan = $fs->get_plan();
@@ -49,16 +54,37 @@
49 54 null );
50 55 $plan = $fs->get_plan();
51 56 $is_active_subscription = ( is_object( $subscription ) && $subscription->is_active() );
52 57 $is_paid_trial = $fs->is_paid_trial();
53 - $has_paid_plan = $fs->has_paid_plan();
54 - $show_upgrade = ( $has_paid_plan && ! $is_paying && ! $is_paid_trial );
58 + $has_paid_plan = $fs->apply_filters( 'has_paid_plan_account', $fs->has_paid_plan() );
59 + $show_upgrade = ( ! $is_whitelabeled && $has_paid_plan && ! $is_paying && ! $is_paid_trial );
55 60 $trial_plan = $fs->get_trial_plan();
56 61
62 + $is_plan_change_supported = (
63 + ! $fs->is_single_plan() &&
64 + ! $fs->apply_filters( 'hide_plan_change', false )
65 + );
66 +
57 67 if ( $has_paid_plan ) {
58 68 $fs->_add_license_activation_dialog_box();
59 69 }
60 70
71 + if ( $fs->should_handle_user_change() ) {
72 + $fs->_add_email_address_update_dialog_box();
73 + }
74 +
75 + $ids_of_installs_activated_with_foreign_licenses = $fs->should_handle_user_change() ?
76 + $fs->get_installs_ids_with_foreign_licenses() :
77 + array();
78 +
79 + if ( ! empty( $ids_of_installs_activated_with_foreign_licenses ) ) {
80 + $fs->_add_user_change_dialog_box( $ids_of_installs_activated_with_foreign_licenses );
81 + }
82 +
83 + if ( $fs->is_whitelabeled( true ) || $fs->is_data_debug_mode() ) {
84 + $fs->_add_data_debug_mode_dialog_box();
85 + }
86 +
61 87 if ( fs_request_get_bool( 'auto_install' ) ) {
62 88 $fs->_add_auto_installation_dialog_box();
63 89 }
64 90
@@ -69,38 +95,47 @@
69 95 '_open_license_activation_dialog_box'
70 96 ) );
71 97 }
72 98
73 - $has_tabs = $fs->_add_tabs_before_content();
99 + $show_billing = ( ! $is_whitelabeled && ! $fs->apply_filters( 'hide_billing_and_payments_info', false ) );
100 + if ( $show_billing ) {
101 + $payments = $fs->_fetch_payments();
74 102
75 - if ( $has_tabs ) {
76 - $query_params['tabs'] = 'true';
77 - }
103 + $show_billing = ( is_array( $payments ) && 0 < count( $payments ) );
104 + }
78 105
79 - // Aliases.
80 - $download_latest_text = fs_text_x_inline( 'Download Latest', 'as download latest version', 'download-latest', $slug );
81 - $downgrade_x_confirm_text = fs_text_inline( 'Downgrading your plan will immediately stop all future recurring payments and your %s plan license will expire in %s.', 'downgrade-x-confirm', $slug );
82 - $cancel_trial_confirm_text = fs_text_inline( 'Cancelling the trial will immediately block access to all premium features. Are you sure?', 'cancel-trial-confirm', $slug );
83 - $after_downgrade_non_blocking_text = fs_text_inline( 'You can still enjoy all %s features but you will not have access to %s updates and support.', 'after-downgrade-non-blocking', $slug );
84 - $after_downgrade_blocking_text = fs_text_inline( 'Once your license expires you can still use the Free version but you will NOT have access to the %s features.', 'after-downgrade-blocking', $slug );
85 - /* translators: %s: Plan title (e.g. "Professional") */
86 - $activate_plan_text = fs_text_inline( 'Activate %s Plan', 'activate-x-plan', $slug );
87 - $version_text = fs_text_x_inline( 'Version', 'product version', 'version', $slug );
88 - /* translators: %s: Time period (e.g. Auto renews in "2 months") */
89 - $renews_in_text = fs_text_inline( 'Auto renews in %s', 'renews-in', $slug );
90 - /* translators: %s: Time period (e.g. Expires in "2 months") */
91 - $expires_in_text = fs_text_inline( 'Expires in %s', 'expires-in', $slug );
92 - $sync_license_text = fs_text_x_inline( 'Sync License', 'as synchronize license', 'sync-license', $slug );
93 - $cancel_trial_text = fs_text_inline( 'Cancel Trial', 'cancel-trial', $slug );
94 - $change_plan_text = fs_text_inline( 'Change Plan', 'change-plan', $slug );
95 - $upgrade_text = fs_text_x_inline( 'Upgrade', 'verb', 'upgrade', $slug );
96 - $addons_text = fs_text_inline( 'Add-Ons', 'add-ons', $slug );
97 - $downgrade_text = fs_text_x_inline( 'Downgrade', 'verb', 'downgrade', $slug );
98 - $trial_text = fs_text_x_inline( 'Trial', 'trial period', 'trial', $slug );
99 - $free_text = fs_text_inline( 'Free', 'free', $slug );
100 - $activate_text = fs_text_inline( 'Activate', 'activate', $slug );
101 - $plan_text = fs_text_x_inline( 'Plan', 'as product pricing plan', 'plan', $slug );
102 106
107 + $has_tabs = $fs->_add_tabs_before_content();
108 +
109 + // Aliases.
110 + $download_latest_text = fs_text_x_inline( 'Download Latest', 'as download latest version', 'download-latest', $slug );
111 + $downgrading_plan_text = fs_text_inline( 'Downgrading your plan', 'downgrading-plan', $slug );
112 + $cancelling_subscription_text = fs_text_inline( 'Cancelling the subscription', 'cancelling-subscription', $slug );
113 + /* translators: %1$s: Either 'Downgrading your plan' or 'Cancelling the subscription' */
114 + $downgrade_x_confirm_text = fs_text_inline( '%1$s will immediately stop all future recurring payments and your %2$s plan license will expire in %3$s.', 'downgrade-x-confirm', $slug );
115 + $prices_increase_text = fs_text_inline( 'Please note that we will not be able to grandfather outdated pricing for renewals/new subscriptions after a cancellation. If you choose to renew the subscription manually in the future, after a price increase, which typically occurs once a year, you will be charged the updated price.', 'pricing-increase-warning', $slug );
116 + $cancel_trial_confirm_text = fs_text_inline( 'Cancelling the trial will immediately block access to all premium features. Are you sure?', 'cancel-trial-confirm', $slug );
117 + $after_downgrade_non_blocking_text = fs_text_inline( 'You can still enjoy all %s features but you will not have access to %s security & feature updates, nor support.', 'after-downgrade-non-blocking', $slug );
118 + $after_downgrade_blocking_text = fs_text_inline( 'Once your license expires you can still use the Free version but you will NOT have access to the %s features.', 'after-downgrade-blocking', $slug );
119 + /* translators: %s: Plan title (e.g. "Professional") */
120 + $activate_plan_text = fs_text_inline( 'Activate %s Plan', 'activate-x-plan', $slug );
121 + $version_text = fs_text_x_inline( 'Version', 'product version', 'version', $slug );
122 + /* translators: %s: Time period (e.g. Auto renews in "2 months") */
123 + $renews_in_text = fs_text_inline( 'Auto renews in %s', 'renews-in', $slug );
124 + /* translators: %s: Time period (e.g. Expires in "2 months") */
125 + $expires_in_text = fs_text_inline( 'Expires in %s', 'expires-in', $slug );
126 + $sync_license_text = fs_text_x_inline( 'Sync License', 'as synchronize license', 'sync-license', $slug );
127 + $cancel_trial_text = fs_text_inline( 'Cancel Trial', 'cancel-trial', $slug );
128 + $change_plan_text = fs_text_inline( 'Change Plan', 'change-plan', $slug );
129 + $upgrade_text = fs_text_x_inline( 'Upgrade', 'verb', 'upgrade', $slug );
130 + $addons_text = fs_text_inline( 'Add-Ons', 'add-ons', $slug );
131 + $downgrade_text = fs_text_x_inline( 'Downgrade', 'verb', 'downgrade', $slug );
132 + $trial_text = fs_text_x_inline( 'Trial', 'trial period', 'trial', $slug );
133 + $free_text = fs_text_inline( 'Free', 'free', $slug );
134 + $activate_text = fs_text_inline( 'Activate', 'activate', $slug );
135 + $plan_text = fs_text_x_inline( 'Plan', 'as product pricing plan', 'plan', $slug );
136 + $bundle_plan_text = fs_text_inline( 'Bundle Plan', 'bundle-plan', $slug );
137 +
103 138 $show_plan_row = true;
104 139 $show_license_row = is_object( $license );
105 140
106 141 $site_view_params = array();
@@ -113,8 +148,9 @@
113 148 $site_info = $fs->get_site_info( $s );
114 149 $install = $fs->get_install_by_blog_id( $site_info['blog_id'] );
115 150 $view_params = array(
116 151 'freemius' => $fs,
152 + 'user' => $fs->get_user(),
117 153 'license' => $license,
118 154 'site' => $site_info,
119 155 'install' => $install,
120 156 );
@@ -137,22 +173,100 @@
137 173 $show_license_row = false;
138 174 }
139 175 }
140 176 }
177 +
178 + $has_bundle_license = false;
179 +
180 + if ( is_object( $license ) &&
181 + FS_Plugin_License::is_valid_id( $license->parent_license_id )
182 + ) {
183 + // Context license has a parent license, therefore, the account has a bundle license.
184 + $has_bundle_license = true;
185 + }
186 +
187 + $bundle_subscription = null;
188 + $is_bundle_first_payment_pending = false;
189 +
190 + if (
191 + $show_plan_row &&
192 + is_object( $license ) &&
193 + $has_bundle_license
194 + ) {
195 + $bundle_plan_title = strtoupper( $license->parent_plan_title );
196 + $bundle_subscription = $fs->_get_subscription( $license->parent_license_id );
197 + $is_bundle_first_payment_pending = $license->is_first_payment_pending();
198 + }
199 +
200 + $fs_blog_id = ( is_multisite() && ! is_network_admin() ) ?
201 + get_current_blog_id() :
202 + 0;
203 +
204 + $active_plugins_directories_map = Freemius::get_active_plugins_directories_map( $fs_blog_id );
205 +
206 + $is_premium = $fs->is_premium();
207 +
208 + $account_addons = $fs->get_updated_account_addons();
209 + $installed_addons = $fs->get_installed_addons();
210 + $installed_addons_ids = array();
211 +
212 + /**
213 + * Store the installed add-ons' IDs into a collection which will be used in determining the add-ons to show on the "Account" page, and at the same time try to find an add-on that is activated with a bundle license if the core product is not.
214 + *
215 + * @author Leo Fajardo
216 + *
217 + * @since 2.4.0
218 + */
219 + foreach ( $installed_addons as $fs_addon ) {
220 + $installed_addons_ids[] = $fs_addon->get_id();
221 +
222 + if ( $has_bundle_license ) {
223 + // We already have the context bundle license details, skip.
224 + continue;
225 + }
226 +
227 + if (
228 + $show_plan_row &&
229 + $fs_addon->has_active_valid_license()
230 + ) {
231 + $addon_license = $fs_addon->_get_license();
232 +
233 + if ( FS_Plugin_License::is_valid_id( $addon_license->parent_license_id ) ) {
234 + // Add-on's license is associated with a parent/bundle license.
235 + $has_bundle_license = true;
236 +
237 + $bundle_plan_title = strtoupper( $addon_license->parent_plan_title );
238 + $bundle_subscription = $fs_addon->_get_subscription( $addon_license->parent_license_id );
239 + $is_bundle_first_payment_pending = $addon_license->is_first_payment_pending();
240 + }
241 + }
242 + }
243 +
244 + $addons_to_show = array_unique( array_merge( $installed_addons_ids, $account_addons ) );
245 +
246 + $is_active_bundle_subscription = ( is_object( $bundle_subscription ) && $bundle_subscription->is_active() );
247 +
248 + $available_license = ( $fs->is_free_plan() && ! fs_is_network_admin() ) ?
249 + $fs->_get_available_premium_license( $site->is_localhost() ) :
250 + null;
251 +
252 + $available_license_paid_plan = is_object( $available_license ) ?
253 + $fs->_get_plan_by_id( $available_license->plan_id ) :
254 + null;
141 255 ?>
142 256 <div class="wrap fs-section">
143 257 <?php if ( ! $has_tabs && ! $fs->apply_filters( 'hide_account_tabs', false ) ) : ?>
144 258 <h2 class="nav-tab-wrapper">
145 - <a href="<?php echo $fs->get_account_url() ?>"
259 + <a href="<?php echo esc_url( $fs->get_account_url() ) ?>"
146 260 class="nav-tab nav-tab-active"><?php fs_esc_html_echo_inline( 'Account', 'account', $slug ) ?></a>
147 261 <?php if ( $fs->has_addons() ) : ?>
148 - <a href="<?php echo $fs->_get_admin_page_url( 'addons' ) ?>"
262 + <a href="<?php echo esc_url( $fs->_get_admin_page_url( 'addons' ) ) ?>"
149 263 class="nav-tab"><?php echo esc_html( $addons_text ) ?></a>
150 264 <?php endif ?>
151 265 <?php if ( $show_upgrade ) : ?>
152 - <a href="<?php echo $fs->get_upgrade_url() ?>" class="nav-tab"><?php echo esc_html( $upgrade_text ) ?></a>
266 + <a href="<?php echo esc_url( $fs->get_upgrade_url() ) ?>" class="nav-tab"><?php echo esc_html( $upgrade_text ) ?></a>
153 267 <?php if ( $fs->apply_filters( 'show_trial', true ) && ! $fs->is_trial_utilized() && $fs->has_trial_plan() ) : ?>
154 - <a href="<?php echo $fs->get_trial_url() ?>" class="nav-tab"><?php fs_esc_html_echo_inline( 'Free Trial', 'free-trial', $slug ) ?></a>
268 + <a href="<?php echo esc_url( $fs->get_trial_url() ) ?>" class="nav-tab"><?php fs_esc_html_echo_inline( 'Free Trial', 'free-trial', $slug ) ?></a>
155 269 <?php endif ?>
156 270 <?php endif ?>
157 271 </h2>
158 272 <?php endif ?>
@@ -164,83 +278,99 @@
164 278 <div class="postbox">
165 279 <h3><span class="dashicons dashicons-businessman"></span> <?php fs_esc_html_echo_inline( 'Account Details', 'account-details', $slug ) ?></h3>
166 280 <div class="fs-header-actions">
167 281 <ul>
168 - <?php if ( ! $is_paying ) : ?>
169 - <li>
170 - <form action="<?php echo $fs->_get_admin_page_url( 'account' ) ?>" method="POST">
171 - <input type="hidden" name="fs_action" value="delete_account">
172 - <?php wp_nonce_field( 'delete_account' ) ?>
173 - <a class="fs-delete-account" href="#" onclick="if (confirm('<?php
174 - if ( $is_active_subscription ) {
175 - echo esc_attr( sprintf( fs_text_inline( 'Deleting the account will automatically deactivate your %s plan license so you can use it on other sites. If you want to terminate the recurring payments as well, click the "Cancel" button, and first "Downgrade" your account. Are you sure you would like to continue with the deletion?', 'delete-account-x-confirm', $slug ), $plan->title ) );
176 - } else {
177 - echo esc_attr( sprintf( fs_text_inline( 'Deletion is not temporary. Only delete if you no longer want to use this %s anymore. Are you sure you would like to continue with the deletion?', 'delete-account-confirm', $slug ), $fs->get_module_label( true ) ) );
178 - }
179 - ?>')) this.parentNode.submit(); return false;"><i
180 - class="dashicons dashicons-no"></i> <?php fs_esc_html_echo_inline( 'Delete Account', 'delete-account', $slug ) ?></a>
181 - </form>
182 - </li>
282 + <?php if ( $fs->is_whitelabeled( true ) ) : ?>
283 + <li>
284 + <a href="#" class="debug-license-trigger"><i class="dashicons dashicons-<?php echo $is_whitelabeled ? 'editor-code' : 'controls-pause' ?>"></i> <span><?php
285 + if ( $is_whitelabeled ) {
286 + fs_esc_html_echo_inline( 'Start Debug', 'start-debug-license', $slug );
287 + } else {
288 + fs_esc_html_echo_inline( 'Stop Debug', 'stop-debug-license', $slug );
289 + }
290 + ?></span></a>
291 + </li>
292 + <li>&nbsp;&bull;&nbsp;</li>
293 + <?php endif ?>
294 + <?php if ( $show_billing ) : ?>
295 + <li><a href="#fs_billing"><i class="dashicons dashicons-portfolio"></i> <?php fs_esc_html_echo_inline( 'Billing & Invoices', 'billing-invoices', $slug ) ?></a></li>
183 296 <li>&nbsp;&bull;&nbsp;</li>
184 297 <?php endif ?>
185 - <?php if ( $is_paying ) : ?>
186 - <?php if ( ! fs_is_network_admin() ) : ?>
187 - <li>
188 - <form action="<?php echo $fs->_get_admin_page_url( 'account' ) ?>" method="POST">
189 - <input type="hidden" name="fs_action" value="deactivate_license">
190 - <?php wp_nonce_field( 'deactivate_license' ) ?>
191 - <a href="#" class="fs-deactivate-license"><i
192 - class="dashicons dashicons-admin-network"></i> <?php fs_echo_inline( 'Deactivate License', 'deactivate-license', $slug ) ?>
193 - </a>
194 - </form>
195 - </li>
196 - <li>&nbsp;&bull;&nbsp;</li>
298 + <?php if ( ! $is_whitelabeled ) : ?>
299 + <?php if ( ! $is_paying ) : ?>
300 + <li>
301 + <?php
302 + $view_params = array(
303 + 'freemius' => $fs,
304 + 'license' => $available_license,
305 + 'license_paid_plan' => $available_license_paid_plan,
306 + );
307 + fs_require_template( 'account/partials/disconnect-button.php', $view_params ); ?>
308 + </li>
309 + <li>&nbsp;&bull;&nbsp;</li>
197 310 <?php endif ?>
198 - <?php if ( ! $license->is_lifetime() &&
199 - $is_active_subscription
200 - ) : ?>
201 - <li>
202 - <form action="<?php echo $fs->_get_admin_page_url( 'account' ) ?>" method="POST">
203 - <input type="hidden" name="fs_action" value="downgrade_account">
204 - <?php wp_nonce_field( 'downgrade_account' ) ?>
205 - <a href="#"
206 - onclick="if ( confirm('<?php echo esc_attr( sprintf( $downgrade_x_confirm_text, $plan->title, human_time_diff( time(), strtotime( $license->expiration ) ) ) ) ?> <?php if ( ! $license->is_block_features ) {
207 - echo esc_attr( sprintf( $after_downgrade_non_blocking_text, $plan->title, $fs->get_module_label( true ) ) );
208 - } else {
209 - echo esc_attr( sprintf( $after_downgrade_blocking_text, $plan->title ) );
210 - }?> <?php fs_esc_attr_echo_inline( 'Are you sure you want to proceed?', 'proceed-confirmation', $slug ) ?>') ) this.parentNode.submit(); return false;"><i class="dashicons dashicons-download"></i> <?php echo esc_html( $fs->is_only_premium() ? fs_text_inline( 'Cancel Subscription', 'cancel-subscription', $slug ) : $downgrade_text ) ?></a>
211 - </form>
212 - </li>
213 - <li>&nbsp;&bull;&nbsp;</li>
214 - <?php endif ?>
215 - <?php if ( ! $fs->is_single_plan() ) : ?>
216 - <li>
217 - <a href="<?php echo $fs->get_upgrade_url() ?>"><i
218 - class="dashicons dashicons-grid-view"></i> <?php echo esc_html( $change_plan_text ) ?></a>
219 - </li>
220 - <li>&nbsp;&bull;&nbsp;</li>
221 - <?php endif ?>
222 - <?php elseif ( $is_paid_trial ) : ?>
223 - <li>
224 - <form action="<?php echo $fs->_get_admin_page_url( 'account' ) ?>" method="POST">
225 - <input type="hidden" name="fs_action" value="cancel_trial">
226 - <?php wp_nonce_field( 'cancel_trial' ) ?>
227 - <a href="#"
228 - onclick="if (confirm('<?php echo esc_attr( $cancel_trial_confirm_text ) ?>')) this.parentNode.submit(); return false;"><i
229 - class="dashicons dashicons-download"></i> <?php echo esc_html( $cancel_trial_text ) ?></a>
230 - </form>
231 - </li>
232 - <li>&nbsp;&bull;&nbsp;</li>
233 - <?php endif ?>
234 - <li>
235 - <form action="<?php echo $fs->_get_admin_page_url( 'account' ) ?>" method="POST">
236 - <input type="hidden" name="fs_action" value="<?php echo $fs->get_unique_affix() ?>_sync_license">
237 - <?php wp_nonce_field( $fs->get_unique_affix() . '_sync_license' ) ?>
238 - <a href="#" onclick="this.parentNode.submit(); return false;"><i
239 - class="dashicons dashicons-image-rotate"></i> <?php fs_esc_html_echo_x_inline( 'Sync', 'as synchronize', 'sync', $slug ) ?></a>
240 - </form>
241 - </li>
242 -
311 + <?php if ( $is_paying ) : ?>
312 + <?php if ( ! fs_is_network_admin() ) : ?>
313 + <li>
314 + <form action="<?php echo esc_url( $fs->_get_admin_page_url( 'account' ) ) ?>" method="POST">
315 + <input type="hidden" name="fs_action" value="deactivate_license">
316 + <?php wp_nonce_field( 'deactivate_license' ) ?>
317 + <a href="#" class="fs-deactivate-license"><i
318 + class="dashicons dashicons-admin-network"></i> <?php fs_echo_inline( 'Deactivate License', 'deactivate-license', $slug ) ?>
319 + </a>
320 + </form>
321 + </li>
322 + <li>&nbsp;&bull;&nbsp;</li>
323 + <?php endif ?>
324 + <?php if ( ! $license->is_lifetime() &&
325 + $is_active_subscription
326 + ) : ?>
327 + <li>
328 + <form action="<?php echo esc_url( $fs->_get_admin_page_url( 'account' ) ) ?>" method="POST">
329 + <input type="hidden" name="fs_action" value="downgrade_account">
330 + <?php wp_nonce_field( 'downgrade_account' ) ?>
331 + <a href="#"
332 + onclick="if ( confirm('<?php echo esc_attr( sprintf(
333 + $downgrade_x_confirm_text,
334 + ( $fs->is_only_premium() ? $cancelling_subscription_text : $downgrading_plan_text ),
335 + $plan->title,
336 + human_time_diff( time(), strtotime( $license->expiration ) )
337 + ) ) ?> <?php if ( ! $license->is_block_features ) {
338 + echo esc_attr( sprintf( $after_downgrade_non_blocking_text, $plan->title, $fs->get_module_label( true ) ) );
339 + } else {
340 + echo esc_attr( sprintf( $after_downgrade_blocking_text, $plan->title ) );
341 + }?> <?php echo esc_attr( $prices_increase_text ) ?> <?php fs_esc_attr_echo_inline( 'Are you sure you want to proceed?', 'proceed-confirmation', $slug ) ?>') ) this.parentNode.submit(); return false;"><i class="dashicons dashicons-download"></i> <?php echo esc_html( $fs->is_only_premium() ? fs_text_inline( 'Cancel Subscription', 'cancel-subscription', $slug ) : $downgrade_text ) ?></a>
342 + </form>
343 + </li>
344 + <li>&nbsp;&bull;&nbsp;</li>
345 + <?php endif ?>
346 + <?php if ( $is_plan_change_supported ) : ?>
347 + <li>
348 + <a href="<?php echo esc_url( $fs->get_upgrade_url() ) ?>"><i
349 + class="dashicons dashicons-grid-view"></i> <?php echo esc_html( $change_plan_text ) ?></a>
350 + </li>
351 + <li>&nbsp;&bull;&nbsp;</li>
352 + <?php endif ?>
353 + <?php elseif ( $is_paid_trial ) : ?>
354 + <li>
355 + <form action="<?php echo esc_url( $fs->_get_admin_page_url( 'account' ) ) ?>" method="POST">
356 + <input type="hidden" name="fs_action" value="cancel_trial">
357 + <?php wp_nonce_field( 'cancel_trial' ) ?>
358 + <a href="#" class="fs-cancel-trial"><i
359 + class="dashicons dashicons-download"></i> <?php echo esc_html( $cancel_trial_text ) ?></a>
360 + </form>
361 + </li>
362 + <li>&nbsp;&bull;&nbsp;</li>
363 + <?php endif ?>
364 + <?php endif ?>
365 + <li>
366 + <form action="<?php echo esc_url( $fs->_get_admin_page_url( 'account' ) ) ?>" method="POST">
367 + <input type="hidden" name="fs_action" value="<?php echo esc_attr( $fs->get_unique_affix() ) ?>_sync_license">
368 + <?php wp_nonce_field( $fs->get_unique_affix() . '_sync_license' ) ?>
369 + <a href="#" onclick="this.parentNode.submit(); return false;"><i
370 + class="dashicons dashicons-image-rotate"></i> <?php fs_esc_html_echo_x_inline( 'Sync', 'as synchronize', 'sync', $slug ) ?></a>
371 + </form>
372 + </li>
243 373 </ul>
244 374 </div>
245 375 <div class="inside">
246 376 <table id="fs_account_details" cellspacing="0" class="fs-key-value-table">
@@ -247,28 +377,47 @@
247 377 <?php
248 378 $hide_license_key = ( ! $show_license_row || $fs->apply_filters( 'hide_license_key', false ) );
249 379
250 380 $profile = array();
381 +
382 + if ( ! $is_whitelabeled ) {
383 + $profile[] = array(
384 + 'id' => 'user_name',
385 + 'title' => fs_text_inline( 'Name', 'name', $slug ),
386 + 'value' => $name
387 + );
388 + // if (isset($user->email) && false !== strpos($user->email, '@'))
389 + $profile[] = array(
390 + 'id' => 'email',
391 + 'title' => fs_text_inline( 'Email', 'email', $slug ),
392 + 'value' => $user->email
393 + );
394 +
395 + if ( is_numeric( $user->id ) ) {
396 + $profile[] = array(
397 + 'id' => 'user_id',
398 + 'title' => fs_text_inline( 'User ID', 'user-id', $slug ),
399 + 'value' => $user->id
400 + );
401 + }
402 + }
403 +
251 404 $profile[] = array(
252 - 'id' => 'user_name',
253 - 'title' => fs_text_inline( 'Name', 'name', $slug ),
254 - 'value' => $name
405 + 'id' => 'product',
406 + 'title' => ( $fs->is_plugin() ?
407 + fs_text_inline( 'Plugin', 'plugin', $slug ) :
408 + fs_text_inline( 'Theme', 'theme', $slug ) ),
409 + 'value' => $fs->get_plugin_title()
255 410 );
256 - // if (isset($user->email) && false !== strpos($user->email, '@'))
411 +
257 412 $profile[] = array(
258 - 'id' => 'email',
259 - 'title' => fs_text_inline( 'Email', 'email', $slug ),
260 - 'value' => $user->email
413 + 'id' => 'product_id',
414 + 'title' => ( $fs->is_plugin() ?
415 + fs_text_inline( 'Plugin', 'plugin', $slug ) :
416 + fs_text_inline( 'Theme', 'theme', $slug ) ) . ' ' . fs_text_inline( 'ID', 'id', $slug ),
417 + 'value' => $fs->get_id()
261 418 );
262 419
263 - if ( is_numeric( $user->id ) ) {
264 - $profile[] = array(
265 - 'id' => 'user_id',
266 - 'title' => fs_text_inline( 'User ID', 'user-id', $slug ),
267 - 'value' => $user->id
268 - );
269 - }
270 -
271 420 if ( ! fs_is_network_admin()) {
272 421 $profile[] = array(
273 422 'id' => 'site_id',
274 423 'title' => fs_text_inline( 'Site ID', 'site-id', $slug ),
@@ -298,9 +447,17 @@
298 447 'title' => $version_text,
299 448 'value' => $fs->get_plugin_version()
300 449 );
301 450
302 - if ( $has_paid_plan ) {
451 + if ( ! fs_is_network_admin() && $is_premium ) {
452 + $profile[] = array(
453 + 'id' => 'beta_program',
454 + 'title' => '',
455 + 'value' => $site->is_beta
456 + );
457 + }
458 +
459 + if ( $has_paid_plan || $has_bundle_license ) {
303 460 if ( $fs->is_trial() ) {
304 461 if ( $show_plan_row ) {
305 462 $profile[] = array(
306 463 'id' => 'plan',
@@ -313,14 +470,22 @@
313 470 } else {
314 471 if ( $show_plan_row ) {
315 472 $profile[] = array(
316 473 'id' => 'plan',
317 - 'title' => $plan_text,
474 + 'title' => ( $has_bundle_license ? ucfirst( $fs->get_module_type() ) . ' ' : '' ) . $plan_text,
318 475 'value' => strtoupper( is_string( $plan->name ) ?
319 476 $plan->title :
320 477 strtoupper( $free_text )
321 478 )
322 479 );
480 +
481 + if ( $has_bundle_license ) {
482 + $profile[] = array(
483 + 'id' => 'bundle_plan',
484 + 'title' => $bundle_plan_text,
485 + 'value' => $bundle_plan_title
486 + );
487 + }
323 488 }
324 489
325 490 if ( is_object( $license ) ) {
326 491 if ( ! $hide_license_key ) {
@@ -342,17 +507,24 @@
342 507 // to show current plan.
343 508 continue;
344 509 }
345 510 ?>
346 - <tr class="fs-field-<?php echo $p['id'] ?><?php if ( $odd ) : ?> alternate<?php endif ?>">
511 + <tr class="fs-field-<?php echo esc_attr( $p['id'] ) ?><?php if ( $odd ) : ?> alternate<?php endif ?>">
347 512 <td>
348 - <nobr><?php echo $p['title'] ?>:</nobr>
513 + <nobr><?php echo esc_html( $p['title'] ) ?><?php echo ( ! empty( $p['title'] ) ) ? ':' : '' ?></nobr>
349 514 </td>
350 - <td<?php if ( 'plan' === $p['id'] ) { echo ' colspan="2"'; }?>>
515 + <td<?php if ( 'plan' === $p['id'] || 'bundle_plan' === $p['id'] ) { echo ' colspan="2"'; }?>>
351 516 <?php if ( in_array( $p['id'], array( 'license_key', 'site_secret_key' ) ) ) : ?>
352 - <code><?php echo htmlspecialchars( substr( $p['value'], 0, 6 ) ) . str_pad( '', 23 * 6, '&bull;' ) . htmlspecialchars( substr( $p['value'], - 3 ) ) ?></code>
353 - <input type="text" value="<?php echo htmlspecialchars( $p['value'] ) ?>" style="display: none"
517 + <code><?php echo FS_Plugin_License::mask_secret_key_for_html( $p['value'] ) ?></code>
518 + <?php if ( ! $is_whitelabeled ) : ?>
519 + <input type="text" value="<?php echo htmlspecialchars( $p['value'] ) ?>" style="display: none"
354 520 readonly/>
521 + <?php endif ?>
522 + <?php elseif ( 'beta_program' === $p['id'] ) : ?>
523 + <label>
524 + <input type="checkbox" class="fs-toggle-beta-mode" <?php checked( true, $p['value'] ) ?>/><span><?php
525 + fs_esc_html_echo_inline( 'Join the Beta program', 'join-beta', $slug )
526 + ?></span></label>
355 527 <?php else : ?>
356 528 <code><?php echo htmlspecialchars( $p['value'] ) ?></code>
357 529 <?php endif ?>
358 530 <?php if ( 'email' === $p['id'] && ! $user->is_verified() ) : ?>
@@ -362,11 +534,15 @@
362 534 <?php if ( $fs->is_trial() ) : ?>
363 535 <label class="fs-tag fs-success"><?php echo esc_html( $trial_text ) ?></label>
364 536 <?php endif ?>
365 537 <?php if ( is_object( $license ) && ! $license->is_lifetime() ) : ?>
366 - <?php if ( ! $is_active_subscription && ! $license->is_first_payment_pending() ) : ?>
538 + <?php if ( ! $is_active_subscription && ! $is_active_bundle_subscription && ! $license->is_first_payment_pending() ) : ?>
539 + <?php $is_license_expired = $license->is_expired() ?>
540 + <?php $expired_ago_text = ( fs_text_inline( 'Expired', 'expired', $slug ) . ' ' . fs_text_x_inline( '%s ago', 'x-ago', $slug ) ) ?>
367 541 <label
368 - class="fs-tag fs-warn"><?php echo esc_html( sprintf( $expires_in_text, human_time_diff( time(), strtotime( $license->expiration ) ) ) ) ?></label>
542 + class="fs-tag <?php echo $is_license_expired ? 'fs-error' : 'fs-warn' ?>"><?php
543 + echo esc_html( sprintf( $is_license_expired ? $expired_ago_text : $expires_in_text, human_time_diff( time(), strtotime( $license->expiration ) ) ) )
544 + ?></label>
369 545 <?php elseif ( $is_active_subscription && ! $subscription->is_first_payment_pending() ) : ?>
370 546 <label class="fs-tag fs-success"><?php echo esc_html( sprintf( $renews_in_text, human_time_diff( time(), strtotime( $subscription->next_payment ) ) ) ) ?></label>
371 547 <?php endif ?>
372 548 <?php elseif ( $fs->is_trial() ) : ?>
@@ -371,18 +547,17 @@
371 547 <?php endif ?>
372 548 <?php elseif ( $fs->is_trial() ) : ?>
373 549 <label class="fs-tag fs-warn"><?php echo esc_html( sprintf( $expires_in_text, human_time_diff( time(), strtotime( $site->trial_ends ) ) ) ) ?></label>
374 550 <?php endif ?>
551 + <?php if ( ! $is_whitelabeled ) : ?>
375 552 <div class="button-group">
376 - <?php $available_license = $fs->is_free_plan() && ! fs_is_network_admin() ? $fs->_get_available_premium_license( $site->is_localhost() ) : false ?>
377 553 <?php if ( is_object( $available_license ) ) : ?>
378 - <?php $premium_plan = $fs->_get_plan_by_id( $available_license->plan_id ) ?>
379 554 <?php
380 555 $view_params = array(
381 556 'freemius' => $fs,
382 557 'slug' => $slug,
383 558 'license' => $available_license,
384 - 'plan' => $premium_plan,
559 + 'plan' => $available_license_paid_plan,
385 560 'is_localhost' => $site->is_localhost(),
386 561 'install_id' => $site->id,
387 562 'class' => 'button-primary',
388 563 );
@@ -387,20 +562,20 @@
387 562 'class' => 'button-primary',
388 563 );
389 564 fs_require_template( 'account/partials/activate-license-button.php', $view_params ); ?>
390 565 <?php else : ?>
391 - <form action="<?php echo $fs->_get_admin_page_url( 'account' ) ?>"
566 + <form action="<?php echo esc_url( $fs->_get_admin_page_url( 'account' ) ) ?>"
392 567 method="POST" class="button-group">
393 - <?php if ( $show_upgrade && $fs->is_premium() ) : ?>
394 - <a class="button activate-license-trigger <?php echo $fs->get_unique_affix() ?>" href="#"><?php fs_esc_html_echo_inline( 'Activate License', 'activate-license', $slug ) ?></a>
568 + <?php if ( $show_upgrade && $is_premium ) : ?>
569 + <a class="button activate-license-trigger <?php echo esc_attr( $fs->get_unique_affix() ) ?>" href="#"><?php fs_esc_html_echo_inline( 'Activate License', 'activate-license', $slug ) ?></a>
395 570 <?php endif ?>
396 571 <input type="submit" class="button"
397 572 value="<?php echo esc_attr( $sync_license_text ) ?>">
398 573 <input type="hidden" name="fs_action"
399 - value="<?php echo $fs->get_unique_affix() ?>_sync_license">
574 + value="<?php echo esc_attr( $fs->get_unique_affix() ) ?>_sync_license">
400 575 <?php wp_nonce_field( $fs->get_unique_affix() . '_sync_license' ) ?>
401 - <?php if ( $show_upgrade || ! $fs->is_single_plan() ) : ?>
402 - <a href="<?php echo $fs->get_upgrade_url() ?>"
576 + <?php if ( $show_upgrade || $is_plan_change_supported ) : ?>
577 + <a href="<?php echo esc_url( $fs->get_upgrade_url() ) ?>"
403 578 class="button<?php
404 579 echo $show_upgrade ?
405 580 ' button-primary fs-upgrade' :
406 581 ' fs-change-plan'; ?> button-upgrade"><i
@@ -408,11 +583,18 @@
408 583 <?php endif ?>
409 584 </form>
410 585 <?php endif ?>
411 586 </div>
587 + <?php endif ?>
588 + <?php elseif ( 'bundle_plan' === $p['id'] ) : ?>
589 + <?php if ( is_object( $bundle_subscription ) ) : ?>
590 + <?php if ( $is_active_bundle_subscription && ! $is_bundle_first_payment_pending ) : ?>
591 + <label class="fs-tag fs-success"><?php echo esc_html( sprintf( $renews_in_text, human_time_diff( time(), strtotime( $bundle_subscription->next_payment ) ) ) ) ?></label>
592 + <?php endif ?>
593 + <?php endif ?>
412 594 <?php elseif ( 'version' === $p['id'] && $has_paid_plan ) : ?>
413 595 <?php if ( $fs->has_premium_version() ) : ?>
414 - <?php if ( $fs->is_premium() ) : ?>
596 + <?php if ( $is_premium ) : ?>
415 597 <label
416 598 class="fs-tag fs-<?php echo $fs->can_use_premium_code() ? 'success' : 'warn' ?>"><?php fs_esc_html_echo_inline( 'Premium version', 'premium-version', $slug ) ?></label>
417 599 <?php elseif ( $fs->can_use_premium_code() ) : ?>
418 600 <label class="fs-tag fs-warn"><?php fs_esc_html_echo_inline( 'Free version', 'free-version', $slug ) ?></label>
@@ -419,9 +601,9 @@
419 601 <?php endif ?>
420 602 <?php endif ?>
421 603 <?php endif ?>
422 604 </td>
423 - <?php if ( 'plan' !== $p['id'] ) : ?>
605 + <?php if ( 'plan' !== $p['id'] && 'bundle_plan' !== $p['id'] ) : ?>
424 606 <td class="fs-right">
425 607 <?php if ( 'email' === $p['id'] && ! $user->is_verified() ) : ?>
426 608 <form action="<?php echo $fs->_get_admin_page_url( 'account' ) ?>" method="POST">
427 609 <input type="hidden" name="fs_action" value="verify_email">
@@ -434,13 +616,35 @@
434 616 <?php if ( $fs->has_release_on_freemius() ) : ?>
435 617 <div class="button-group">
436 618 <?php if ( $is_paying || $fs->is_trial() ) : ?>
437 619 <?php if ( ! $fs->is_allowed_to_install() ) : ?>
438 - <a target="_blank" class="button button-primary"
439 - href="<?php echo $fs->_get_latest_download_local_url() ?>"><?php echo sprintf(
440 - /* translators: %s: plan name (e.g. Download "Professional" Version) */
441 - fs_text_inline( 'Download %s Version', 'download-x-version', $slug ),
442 - ( $fs->is_trial() ? $trial_plan->title : $plan->title ) ) . ( is_object( $update ) ? ' [' . $update->version . ']' : '' ) ?></a>
620 + <a target="_blank" rel="noopener" class="button button-primary"
621 + href="<?php echo $fs->_get_latest_download_local_url() ?>"><?php
622 + $download_version_text_suffix = ( is_object( $update ) ? ' [' . $update->version . ']' : '' );
623 +
624 + $download_version_text = sprintf(
625 + /* translators: %s: plan name (e.g. Download "Professional" Version) */
626 + fs_text_inline( 'Download %s Version', 'download-x-version', $slug ),
627 + ( $fs->is_trial() ? $trial_plan->title : $plan->title )
628 + ) .
629 + $download_version_text_suffix;
630 +
631 + $download_version_text_length = function_exists( 'mb_strlen' ) ?
632 + mb_strlen( $download_version_text ) :
633 + strlen( $download_version_text );
634 +
635 + if ( $download_version_text_length > 31 ) {
636 + /**
637 + * Try to limit the number of characters to 31 for now.
638 + *
639 + * @author Leo Fajardo (@leorw)
640 + * @aince 2.3.2
641 + */
642 + $download_version_text = fs_text_inline( 'Download Paid Version', 'download-paid-version', $slug ) . $download_version_text_suffix;
643 + }
644 +
645 + echo $download_version_text;
646 + ?></a>
443 647 <?php elseif ( is_object( $update ) ) : ?>
444 648 <?php
445 649 $module_type = $fs->get_module_type();
446 650 ?>
@@ -451,12 +655,14 @@
451 655 </div>
452 656 <?php endif ?>
453 657 <?php
454 658 elseif ( in_array( $p['id'], array( 'license_key', 'site_secret_key' ) ) ) : ?>
455 - <button class="button button-small fs-toggle-visibility"><?php fs_esc_html_echo_x_inline( 'Show', 'verb', 'show', $slug ) ?></button>
456 - <?php if ('license_key' === $p['id']) : ?>
457 - <button class="button button-small activate-license-trigger <?php echo $fs->get_unique_affix() ?>"><?php fs_esc_html_echo_inline( 'Change License', 'change-license', $slug ) ?></button>
458 - <?php endif ?>
659 + <?php if ( ! $is_whitelabeled && ( 'site_secret_key' === $p['id'] || ! $is_license_foreign ) ) : ?>
660 + <button class="button button-small fs-toggle-visibility"><?php fs_esc_html_echo_x_inline( 'Show', 'verb', 'show', $slug ) ?></button>
661 + <?php endif ?>
662 + <?php if ('license_key' === $p['id']) : ?>
663 + <button class="button button-small activate-license-trigger <?php echo $fs->get_unique_affix() ?>"><?php fs_esc_html_echo_inline( 'Change License', 'change-license', $slug ) ?></button>
664 + <?php endif ?>
459 665 <?php
460 666 elseif (/*in_array($p['id'], array('site_secret_key', 'site_id', 'site_public_key')) ||*/
461 667 ( is_string( $user->secret_key ) && in_array( $p['id'], array(
462 668 'email',
@@ -462,8 +668,9 @@
462 668 'email',
463 669 'user_name'
464 670 ) ) )
465 671 ) : ?>
672 + <?php if ( 'email' !== $p['id'] || ! fs_is_network_admin() ) : ?>
466 673 <form action="<?php echo $fs->_get_admin_page_url( 'account' ) ?>" method="POST"
467 674 onsubmit="var val = prompt('<?php echo esc_attr( sprintf(
468 675 /* translators: %s: User's account property (e.g. name, email) */
469 676 fs_text_inline( 'What is your %s?', 'what-is-your-x', $slug ),
@@ -472,17 +679,33 @@
472 679 <input type="hidden" name="fs_action" value="update_<?php echo $p['id'] ?>">
473 680 <input type="hidden" name="fs_<?php echo $p['id'] ?>_<?php echo $fs->get_unique_affix() ?>"
474 681 value="">
475 682 <?php wp_nonce_field( 'update_' . $p['id'] ) ?>
476 - <input type="submit" class="button button-small"
683 + <input type="submit" class="button button-small <?php if ( 'email' === $p['id'] ) echo 'button-edit-email-address' ?>"
477 684 value="<?php echo fs_esc_attr_x_inline( 'Edit', 'verb', 'edit', $slug ) ?>">
478 685 </form>
686 + <?php endif ?>
687 + <?php elseif ( 'user_id' === $p['id'] && ! empty( $ids_of_installs_activated_with_foreign_licenses ) ) : ?>
688 + <input id="fs_change_user" type="submit" class="button button-small"
689 + value="<?php echo fs_esc_attr_inline( 'Change User', 'change-user', $slug ) ?>">
479 690 <?php endif ?>
480 691 </td>
481 692 <?php endif ?>
482 693 </tr>
483 - <?php $odd = ! $odd;
484 - endforeach ?>
694 + <?php
695 + if ( 'version' === $p['id'] && $is_premium ) {
696 + /**
697 + * If there's a row for the beta program, keep its background color
698 + * the same as the version info row.
699 + *
700 + * @author Leo Fajardo (@leorw)
701 + * @since 2.3.0
702 + */
703 + continue;
704 + }
705 +
706 + $odd = ! $odd;
707 + endforeach ?>
485 708 </table>
486 709 </div>
487 710 </div>
488 711 <?php if ( fs_is_network_admin() ) : ?>
@@ -488,20 +711,21 @@
488 711 <?php if ( fs_is_network_admin() ) : ?>
489 712 <div id="fs_sites" class="postbox">
490 713 <h3><span class="dashicons dashicons-networking"></span> <?php fs_esc_html_echo_inline( 'Sites', 'sites', $slug ) ?></h3>
491 714 <div class="fs-header-actions">
492 - <?php $has_license = is_object( $license ) ?>
493 - <?php if ( $has_license || ( $show_upgrade && $fs->is_premium() ) ) : ?>
494 - <?php
495 - $activate_license_button_text = $has_license ?
496 - fs_esc_html_inline( 'Change License', 'change-license', $slug ) :
497 - fs_esc_html_inline( 'Activate License', 'activate-license', $slug );
498 - ?>
499 - <a class="button<?php echo ( ! $has_license ? ' button-primary' : '' ) ?> activate-license-trigger <?php echo $fs->get_unique_affix() ?>" href="#"><?php echo $activate_license_button_text ?></a>
715 + <?php if ( ! $is_whitelabeled ) : ?>
716 + <?php $has_license = is_object( $license ) ?>
717 + <?php if ( $has_license || ( $show_upgrade && $is_premium ) ) : ?>
718 + <?php
719 + $activate_license_button_text = $has_license ?
720 + fs_esc_html_inline( 'Change License', 'change-license', $slug ) :
721 + fs_esc_html_inline( 'Activate License', 'activate-license', $slug );
722 + ?>
723 + <a class="button<?php echo ( ! $has_license ? ' button-primary' : '' ) ?> activate-license-trigger <?php echo $fs->get_unique_affix() ?>" href="#"><?php echo $activate_license_button_text ?></a>
724 + <?php endif ?>
500 725 <?php endif ?>
501 726 <input class="fs-search" type="text" placeholder="<?php fs_esc_attr_echo_inline( 'Search by address', 'search-by-address', $slug ) ?>..."><span class="dashicons dashicons-search"></span>
502 727 </div>
503 -
504 728 <div class="inside">
505 729 <div id="" class="fs-scrollable-table">
506 730 <div class="fs-table-head">
507 731 <table class="widefat">
@@ -518,14 +742,32 @@
518 742 </div>
519 743 <div class="fs-table-body">
520 744 <table class="widefat">
521 745 <?php
746 + $current_blog_id = get_current_blog_id();
747 +
522 748 foreach ( $site_view_params as $view_params ) {
523 749 fs_require_template(
524 750 'account/partials/site.php',
525 751 $view_params
526 752 );
527 - } ?>
753 + }
754 +
755 + /**
756 + * It's possible for the `Freemius::switch_to_blog()` method to be called within the `site.php` template and this changes the Freemius instance's context, so this check is for restoring the previous context based on the previously retrieved site.
757 + *
758 + * @author Leo Fajardo (@leorw)
759 + * @since 2.5.0
760 + */
761 + $current_install = $fs->get_site();
762 +
763 + if (
764 + is_object( $site ) &&
765 + ( ! is_object( $current_install ) || $current_install->id != $site->id )
766 + ) {
767 + $fs->switch_to_blog( $current_blog_id, $site, true );
768 + }
769 + ?>
528 770 </table>
529 771 </div>
530 772 </div>
531 773 </div>
@@ -530,23 +772,8 @@
530 772 </div>
531 773 </div>
532 774 </div>
533 775 <?php endif ?>
534 -
535 - <?php
536 - $account_addons = $fs->get_account_addons();
537 - if ( ! is_array( $account_addons ) ) {
538 - $account_addons = array();
539 - }
540 -
541 - $installed_addons = $fs->get_installed_addons();
542 - $installed_addons_ids = array();
543 - foreach ( $installed_addons as $fs_addon ) {
544 - $installed_addons_ids[] = $fs_addon->get_id();
545 - }
546 -
547 - $addons_to_show = array_unique( array_merge( $installed_addons_ids, $account_addons ) );
548 - ?>
549 776 <?php if ( 0 < count( $addons_to_show ) ) : ?>
550 777 <!-- Add-Ons -->
551 778 <div class="postbox">
552 779 <div class="">
@@ -565,14 +792,66 @@
565 792 <?php endif ?>
566 793 </tr>
567 794 </thead>
568 795 <tbody>
569 - <?php $odd = true;
796 + <?php
797 + $odd = true;
798 +
799 + $installed_addons_ids_map = array_flip( $installed_addons_ids );
800 +
801 + $addon_info_by_id = array();
802 + $hide_all_addons_data = false;
803 +
804 + if ( $fs->is_whitelabeled_by_flag() ) {
805 + $hide_all_addons_data = true;
806 +
807 + foreach ( $addons_to_show as $addon_id ) {
808 + $is_addon_installed = isset( $installed_addons_ids_map[ $addon_id ] );
809 + $addon_info = $fs->_get_addon_info( $addon_id, $is_addon_installed );
810 + $is_addon_connected = $addon_info['is_connected'];
811 +
812 + $fs_addon = ( $is_addon_connected && $is_addon_installed ) ?
813 + freemius( $addon_id ) :
814 + null;
815 +
816 + $is_whitelabeled = is_object( $fs_addon ) ?
817 + $fs_addon->is_whitelabeled( true ) :
818 + $addon_info['is_whitelabeled'];
819 +
820 + if ( ! $is_whitelabeled ) {
821 + $hide_all_addons_data = false;
822 + }
823 +
824 + if ( $is_data_debug_mode ) {
825 + $is_whitelabeled = false;
826 + }
827 +
828 + $addon_info_by_id[ $addon_id ] = $addon_info;
829 + }
830 + }
831 +
570 832 foreach ( $addons_to_show as $addon_id ) {
833 + $is_addon_installed = isset( $installed_addons_ids_map[ $addon_id ] );
834 +
835 + if (
836 + $hide_all_addons_data &&
837 + ! $is_addon_installed &&
838 + ! file_exists( fs_normalize_path( WP_PLUGIN_DIR . '/' . $fs->get_addon_basename( $addon_id ) ) )
839 + ) {
840 + continue;
841 + }
842 +
571 843 $addon_view_params = array(
572 - 'parent_fs' => $fs,
573 - 'addon_id' => $addon_id,
574 - 'odd' => $odd,
844 + 'parent_fs' => $fs,
845 + 'addon_id' => $addon_id,
846 + 'odd' => $odd,
847 + 'fs_blog_id' => $fs_blog_id,
848 + 'active_plugins_directories_map' => &$active_plugins_directories_map,
849 + 'is_addon_installed' => $is_addon_installed,
850 + 'addon_info' => isset( $addon_info_by_id[ $addon_id ] ) ?
851 + $addon_info_by_id[ $addon_id ] :
852 + $fs->_get_addon_info( $addon_id, $is_addon_installed ),
853 + 'is_whitelabeled' => ( $is_whitelabeled && ! $is_data_debug_mode )
575 854 );
576 855
577 856 fs_require_template(
578 857 'account/partials/addon.php',
@@ -589,11 +868,13 @@
589 868
590 869 <?php $fs->do_action( 'after_account_details' ) ?>
591 870
592 871 <?php
593 - $view_params = array( 'id' => $VARS['id'] );
594 - fs_require_once_template( 'account/billing.php', $view_params );
595 - fs_require_once_template( 'account/payments.php', $view_params );
872 + if ( $show_billing ) {
873 + $view_params = array( 'id' => $VARS['id'], 'payments' => $payments );
874 + fs_require_once_template( 'account/billing.php', $view_params );
875 + fs_require_once_template( 'account/payments.php', $view_params );
876 + }
596 877 ?>
597 878 </div>
598 879 </div>
599 880 </div>
@@ -598,8 +879,14 @@
598 879 </div>
599 880 </div>
600 881 </div>
601 882 </div>
883 + <?php
884 + $subscription_cancellation_dialog_box_template_params = $fs->_get_subscription_cancellation_dialog_box_template_params( true );
885 + if ( ! empty( $subscription_cancellation_dialog_box_template_params ) ) {
886 + fs_require_template( 'forms/subscription-cancellation.php', $subscription_cancellation_dialog_box_template_params );
887 + }
888 + ?>
602 889 <script type="text/javascript">
603 890 (function ($) {
604 891 var setLoading = function ($this, label) {
605 892 // Set loading mode.
@@ -646,8 +933,48 @@
646 933 '...'
647 934 );
648 935 });
649 936
937 + <?php
938 + $plugin_title = $fs->get_plugin_title();
939 + $processing_text = fs_esc_js_inline( 'Processing', 'processing' );
940 + $confirmation_message = sprintf(
941 + '%s %s',
942 + sprintf( fs_esc_attr_inline( 'Get updates for bleeding edge Beta versions of %s.', 'get-beta-versions', $slug ), $plugin_title ),
943 + sprintf( fs_esc_attr_inline( 'An update to a Beta version will replace your installed version of %s with the latest Beta release - use with caution, and not on production sites. You have been warned.', 'beta-version-update-caution', $slug ), $plugin_title )
944 + );
945 + ?>
946 +
947 + $( '.fs-toggle-beta-mode' ).click( function () {
948 + var $checkbox = $( this ),
949 + isChecked = $checkbox.is( ':checked' );
950 +
951 + if ( ! isChecked || confirm( '<?php echo $confirmation_message ?>' ) ) {
952 + $.ajax( {
953 + url : <?php echo Freemius::ajax_url() ?>,
954 + method: 'POST',
955 + data : {
956 + action : '<?php echo $fs->get_ajax_action( 'set_beta_mode' ) ?>',
957 + security : '<?php echo $fs->get_ajax_security( 'set_beta_mode' ) ?>',
958 + is_beta : isChecked,
959 + module_id: <?php echo $fs->get_id() ?>
960 + },
961 + beforeSend: function () {
962 + $checkbox.prop( 'disabled', true );
963 + $checkbox.parent().find( 'span' ).text( '<?php echo $processing_text ?>' + '...' );
964 + },
965 + complete: function () {
966 + $checkbox.prop( 'disabled', false );
967 + $checkbox.parent().find( 'span' ).text( '<?php fs_esc_js_echo_inline( 'Join the Beta Program', 'join-beta', $slug ) ?>' );
968 + }
969 + } );
970 +
971 + return true;
972 + }
973 +
974 + return false;
975 + });
976 +
650 977 $('.fs-opt-in').click(function () {
651 978 setLoading($(this), '<?php fs_esc_js_echo_inline('Opting in', 'opting-in' ) ?>...');
652 979 });
653 980
@@ -660,14 +987,58 @@
660 987 $('.fs-activate-license').click(function () {
661 988 setLoading($(this), '<?php fs_esc_js_echo_inline('Activating', 'activating' ) ?>...');
662 989 });
663 990
664 - $('.fs-deactivate-license').click(function () {
665 - if (confirm('<?php fs_esc_attr_echo_inline( 'Deactivating your license will block all premium features, but will enable activating the license on another site. Are you sure you want to proceed?', 'deactivate-license-confirm', $slug ) ?>')) {
991 + var $deactivateLicenseOrCancelTrial = $( '.fs-deactivate-license, .fs-cancel-trial' ),
992 + $subscriptionCancellationModal = $( '.fs-modal-subscription-cancellation-<?php echo $fs->get_id() ?>' );
993 +
994 + if ( 0 !== $subscriptionCancellationModal.length ) {
995 + $subscriptionCancellationModal.on( '<?php echo $fs->get_action_tag( 'subscription_cancellation_action' ) ?>', function( evt, cancelSubscription ) {
996 + setLoading(
997 + $deactivateLicenseOrCancelTrial,
998 + ( ! $deactivateLicenseOrCancelTrial.hasClass( 'fs-cancel-trial' ) ?
999 + '<?php fs_esc_js_echo_inline( 'Deactivating', 'deactivating', $slug ) ?>' :
1000 + '<?php echo esc_html( sprintf( fs_text_inline( 'Cancelling %s', 'cancelling-x', $slug ), fs_text_inline( 'trial', 'trial', $slug ) ) ) ?>' ) + '...'
1001 + );
1002 +
1003 + $subscriptionCancellationModal.find( '.fs-modal-footer .button' ).addClass( 'disabled' );
1004 + $deactivateLicenseOrCancelTrial.unbind( 'click' );
1005 +
1006 + if ( false === cancelSubscription || $deactivateLicenseOrCancelTrial.hasClass( 'fs-cancel-trial' ) ) {
1007 + $subscriptionCancellationModal.find( '.fs-modal-footer .button-primary' ).text( $deactivateLicenseOrCancelTrial.text() );
1008 +
1009 + $deactivateLicenseOrCancelTrial[0].parentNode.submit();
1010 + } else {
1011 + var $form = $( 'input[value="downgrade_account"],input[value="cancel_trial"]' ).parent();
1012 + $form.prepend( '<input type="hidden" name="deactivate_license" value="true" />' );
1013 +
1014 + $subscriptionCancellationModal.find( '.fs-modal-footer .button-primary' ).text( '<?php echo esc_js( sprintf(
1015 + fs_text_inline( 'Cancelling %s...', 'cancelling-x' , $slug ),
1016 + $is_paid_trial ?
1017 + fs_text_inline( 'trial', 'trial', $slug ) :
1018 + fs_text_inline( 'subscription', 'subscription', $slug )
1019 + ) ) ?>' );
1020 +
1021 + $form.submit();
1022 + }
1023 + });
1024 + }
1025 +
1026 + $deactivateLicenseOrCancelTrial.click(function() {
1027 + var $this = $( this );
1028 + if ( $this.hasClass( 'fs-cancel-trial' ) ) {
1029 + $subscriptionCancellationModal.find( '.fs-modal-panel' ).find( 'ul.subscription-actions, .fs-price-increase-warning' ).remove();
1030 + $subscriptionCancellationModal.find( '.fs-modal-panel > p' ).text( <?php echo json_encode( $cancel_trial_confirm_text ) ?> );
1031 + $subscriptionCancellationModal.trigger( 'showModal' );
1032 + } else if (confirm('<?php fs_esc_attr_echo_inline( 'Deactivating your license will block all premium features, but will enable activating the license on another site. Are you sure you want to proceed?', 'deactivate-license-confirm', $slug ) ?>')) {
666 1033 var $this = $(this);
667 1034
668 - setLoading($this, '<?php fs_esc_js_echo_inline('Deactivating', 'deactivating' ) ?>...');
669 - $this[0].parentNode.submit();
1035 + if ( 0 !== $subscriptionCancellationModal.length ) {
1036 + $subscriptionCancellationModal.trigger( 'showModal' );
1037 + } else {
1038 + setLoading( $this, '<?php fs_esc_js_echo_inline( 'Deactivating', 'deactivating', $slug ) ?>...' );
1039 + $this[0].parentNode.submit();
1040 + }
670 1041 }
671 1042
672 1043 return false;
673 1044 });
@@ -717,8 +1088,31 @@
717 1088 }
718 1089 });
719 1090 });
720 1091
1092 + $( '.fs-toggle-whitelabel-mode' ).click( function () {
1093 + var $toggleLink = $( this );
1094 +
1095 + $.ajax( {
1096 + url : <?php echo Freemius::ajax_url() ?>,
1097 + method: 'POST',
1098 + data : {
1099 + action : '<?php echo $fs->get_ajax_action( 'toggle_whitelabel_mode' ) ?>',
1100 + security : '<?php echo $fs->get_ajax_security( 'toggle_whitelabel_mode' ) ?>',
1101 + module_id: <?php echo $fs->get_id() ?>
1102 + },
1103 + beforeSend: function () {
1104 + $toggleLink.parent().text( '<?php
1105 + $is_whitelabeled ?
1106 + fs_esc_html_echo_inline( 'Disabling white-label mode', 'disabling-whitelabel-mode' ) :
1107 + fs_esc_html_echo_inline( 'Enabling white-label mode', 'enabling-whitelabel-mode' )
1108 + ?>' + '...' );
1109 + },
1110 + complete: function () {
1111 + location.reload();
1112 + }
1113 + } );
1114 + });
721 1115 })(jQuery);
722 1116 </script>
723 1117 <?php
724 1118 if ( $has_tabs ) {
@@ -723,13 +1117,4 @@
723 1117 <?php
724 1118 if ( $has_tabs ) {
725 1119 $fs->_add_tabs_after_content();
726 1120 }
727 -
728 - $params = array(
729 - 'page' => 'account',
730 - 'module_id' => $fs->get_id(),
731 - 'module_type' => $fs->get_module_type(),
732 - 'module_slug' => $slug,
733 - 'module_version' => $fs->get_plugin_version(),
734 - );
735 - fs_require_template( 'powered-by.php', $params );