Version Description
- Updated Freemius SDK
Download this release
Release Info
Developer | munirkamal |
Plugin | Gutenberg Blocks – ACF Blocks Suite |
Version | 2.5.1 |
Comparing to | |
See all releases |
Code changes from version 2.5.0 to 2.5.1
- acf-blocks.php +1 -1
- freemius/assets/css/admin/account.css +1 -1
- freemius/assets/css/admin/add-ons.css +1 -1
- freemius/config.php +4 -1
- freemius/includes/class-freemius.php +840 -105
- freemius/includes/class-fs-api.php +1 -1
- freemius/includes/class-fs-plugin-updater.php +49 -6
- freemius/includes/class-fs-storage.php +1 -0
- freemius/includes/customizer/class-fs-customizer-support-section.php +2 -2
- freemius/includes/entities/class-fs-payment.php +2 -2
- freemius/includes/entities/class-fs-plugin-license.php +7 -0
- freemius/includes/entities/class-fs-site.php +4 -1
- freemius/includes/fs-essential-functions.php +37 -20
- freemius/includes/fs-plugin-info-dialog.php +36 -23
- freemius/includes/i18n.php +2 -0
- freemius/includes/managers/class-fs-admin-menu-manager.php +6 -1
- freemius/includes/sdk/FreemiusBase.php +1 -1
- freemius/includes/sdk/FreemiusWordPress.php +20 -12
- freemius/includes/supplements/fs-essential-functions-1.1.7.1.php +1 -1
- freemius/languages/freemius-cs_CZ.mo +0 -0
- freemius/languages/freemius-da_DK.mo +0 -0
- freemius/languages/freemius-en.mo +0 -0
- freemius/languages/freemius-es_ES.mo +0 -0
- freemius/languages/freemius-fr_FR.mo +0 -0
- freemius/languages/freemius-he_IL.mo +0 -0
- freemius/languages/freemius-hu_HU.mo +0 -0
- freemius/languages/freemius-it_IT.mo +0 -0
- freemius/languages/freemius-ja.mo +0 -0
- freemius/languages/freemius-nl_NL.mo +0 -0
- freemius/languages/freemius-ru_RU.mo +0 -0
- freemius/languages/freemius-ta.mo +0 -0
- freemius/languages/freemius-zh_CN.mo +0 -0
- freemius/languages/freemius.pot +390 -358
- freemius/start.php +529 -521
- freemius/templates/account.php +84 -24
- freemius/templates/account/partials/addon.php +2 -2
- freemius/templates/account/payments.php +1 -1
- freemius/templates/add-ons.php +2 -2
- freemius/templates/auto-installation.php +1 -1
- freemius/templates/connect.php +12 -11
- freemius/templates/forms/affiliation.php +28 -5
- freemius/templates/forms/deactivation/form.php +18 -14
- freemius/templates/forms/license-activation.php +10 -8
- freemius/templates/forms/optout.php +17 -10
- freemius/templates/forms/subscription-cancellation.php +1 -1
- freemius/templates/forms/trial-start.php +1 -1
- freemius/templates/partials/index.php +2 -0
- freemius/templates/pricing.php +208 -176
- freemius/templates/secure-https-header.php +1 -1
- readme.txt +4 -1
acf-blocks.php
CHANGED
@@ -4,7 +4,7 @@
|
|
4 |
* Plugin Name: ACF Blocks Suite
|
5 |
* Plugin URI: https://acfblocks.com/
|
6 |
* Description: Supercharge your Gutenberg editor with high quality beautiful WordPress blocks. Ready-to-use ACF Blocks!
|
7 |
-
* Version: 2.5.
|
8 |
* Author: munirkamal
|
9 |
* Author URI: https://munirkamal.wordpress.com
|
10 |
* License: GPL2
|
4 |
* Plugin Name: ACF Blocks Suite
|
5 |
* Plugin URI: https://acfblocks.com/
|
6 |
* Description: Supercharge your Gutenberg editor with high quality beautiful WordPress blocks. Ready-to-use ACF Blocks!
|
7 |
+
* Version: 2.5.1
|
8 |
* Author: munirkamal
|
9 |
* Author URI: https://munirkamal.wordpress.com
|
10 |
* License: GPL2
|
freemius/assets/css/admin/account.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
label.fs-tag,span.fs-tag{background:#ffba00;color:#fff;display:inline-block;border-radius:3px;padding:5px;font-size:11px;line-height:11px;vertical-align:baseline}label.fs-tag.fs-warn,span.fs-tag.fs-warn{background:#ffba00}label.fs-tag.fs-info,span.fs-tag.fs-info{background:#00a0d2}label.fs-tag.fs-success,span.fs-tag.fs-success{background:#46b450}label.fs-tag.fs-error,span.fs-tag.fs-error{background:#dc3232}#fs_account .postbox,#fs_account .widefat{max-width:800px}#fs_account h3{font-size:1.3em;padding:12px 15px;margin:0 0 12px 0;line-height:1.4;border-bottom:1px solid #F1F1F1}#fs_account h3 .dashicons{width:26px;height:26px;font-size:1.3em}#fs_account i.dashicons{font-size:1.2em;height:1.2em;width:1.2em}#fs_account .dashicons{vertical-align:middle}#fs_account .fs-header-actions{position:absolute;top:17px;right:15px;font-size:0.9em}#fs_account .fs-header-actions ul{margin:0}#fs_account .fs-header-actions li{float:left}#fs_account .fs-header-actions li form{display:inline-block}#fs_account .fs-header-actions li a{text-decoration:none}#fs_account_details .button-group{float:right}.rtl #fs_account .fs-header-actions{left:15px;right:auto}.fs-key-value-table{width:100%}.fs-key-value-table form{display:inline-block}.fs-key-value-table tr td:first-child{text-align:right}.fs-key-value-table tr td:first-child nobr{font-weight:bold}.fs-key-value-table tr td:first-child form{display:block}.fs-key-value-table tr td.fs-right{text-align:right}.fs-key-value-table tr.fs-odd{background:#ebebeb}.fs-key-value-table td,.fs-key-value-table th{padding:10px}.fs-key-value-table code{line-height:28px}.fs-key-value-table var,.fs-key-value-table code,.fs-key-value-table input[type="text"]{color:#0073AA;font-size:16px;background:none}.fs-key-value-table input[type="text"]{width:100%;font-weight:bold}.fs-field-beta_program label{margin-left:7px}label.fs-tag{background:#ffba00;color:#fff;display:inline-block;border-radius:3px;padding:5px;font-size:11px;line-height:11px;vertical-align:baseline}label.fs-tag.fs-warn{background:#ffba00}label.fs-tag.fs-success{background:#46b450}label.fs-tag.fs-error{background:#dc3232}#fs_sites .fs-scrollable-table .fs-table-body{max-height:200px;overflow:auto;border:1px solid #e5e5e5}#fs_sites .fs-scrollable-table .fs-table-body>table.widefat{border:none !important}#fs_sites .fs-scrollable-table .fs-main-column{width:100%}#fs_sites .fs-scrollable-table .fs-site-details td:first-of-type{text-align:right;color:grey;width:1px}#fs_sites .fs-scrollable-table .fs-site-details td:last-of-type{text-align:right}#fs_sites .fs-scrollable-table .fs-install-details table tr td{width:1px;white-space:nowrap}#fs_sites .fs-scrollable-table .fs-install-details table tr td:last-of-type{width:auto}#fs_addons h3{border:none;margin-bottom:0;padding:4px 5px}#fs_addons td{vertical-align:middle}#fs_addons thead{white-space:nowrap}#fs_addons td:first-child,#fs_addons th:first-child{text-align:left;font-weight:bold}#fs_addons td:last-child,#fs_addons th:last-child{text-align:right}#fs_addons th{font-weight:bold}#fs_billing_address{width:100%}#fs_billing_address tr td{width:50%;padding:5px}#fs_billing_address tr:first-of-type td{padding-top:0}#fs_billing_address span{font-weight:bold}#fs_billing_address input,#fs_billing_address select{display:block;width:100%;margin-top:5px}#fs_billing_address input::-moz-placeholder,#fs_billing_address select::-moz-placeholder{color:transparent;opacity:1}#fs_billing_address input:-ms-input-placeholder,#fs_billing_address select:-ms-input-placeholder{color:transparent}#fs_billing_address input::-webkit-input-placeholder,#fs_billing_address select::-webkit-input-placeholder{color:transparent}#fs_billing_address input.fs-read-mode,#fs_billing_address select.fs-read-mode{border-color:transparent;color:#777;border-bottom:1px dashed #ccc;padding-left:0;background:none}#fs_billing_address.fs-read-mode td span{display:none}#fs_billing_address.fs-read-mode input,#fs_billing_address.fs-read-mode select{border-color:transparent;color:#777;border-bottom:1px dashed #ccc;padding-left:0;background:none}#fs_billing_address.fs-read-mode input::-moz-placeholder,#fs_billing_address.fs-read-mode select::-moz-placeholder{color:#ccc;opacity:1}#fs_billing_address.fs-read-mode input:-ms-input-placeholder,#fs_billing_address.fs-read-mode select:-ms-input-placeholder{color:#ccc}#fs_billing_address.fs-read-mode input::-webkit-input-placeholder,#fs_billing_address.fs-read-mode select::-webkit-input-placeholder{color:#ccc}#fs_billing_address button{display:block;width:100%}
|
1 |
+
label.fs-tag,span.fs-tag{background:#ffba00;color:#fff;display:inline-block;border-radius:3px;padding:5px;font-size:11px;line-height:11px;vertical-align:baseline}label.fs-tag.fs-warn,span.fs-tag.fs-warn{background:#ffba00}label.fs-tag.fs-info,span.fs-tag.fs-info{background:#00a0d2}label.fs-tag.fs-success,span.fs-tag.fs-success{background:#46b450}label.fs-tag.fs-error,span.fs-tag.fs-error{background:#dc3232}.fs-notice[data-id="license_not_whitelabeled"].success,.fs-notice[data-id="license_whitelabeled"].success{color:inherit;border-left-color:#00a0d2}.fs-notice[data-id="license_not_whitelabeled"].success label.fs-plugin-title,.fs-notice[data-id="license_whitelabeled"].success label.fs-plugin-title{display:none}#fs_account .postbox,#fs_account .widefat{max-width:800px}#fs_account h3{font-size:1.3em;padding:12px 15px;margin:0 0 12px 0;line-height:1.4;border-bottom:1px solid #F1F1F1}#fs_account h3 .dashicons{width:26px;height:26px;font-size:1.3em}#fs_account i.dashicons{font-size:1.2em;height:1.2em;width:1.2em}#fs_account .dashicons{vertical-align:middle}#fs_account .fs-header-actions{position:absolute;top:17px;right:15px;font-size:0.9em}#fs_account .fs-header-actions ul{margin:0}#fs_account .fs-header-actions li{float:left}#fs_account .fs-header-actions li form{display:inline-block}#fs_account .fs-header-actions li a{text-decoration:none}#fs_account_details .button-group{float:right}.rtl #fs_account .fs-header-actions{left:15px;right:auto}.fs-key-value-table{width:100%}.fs-key-value-table form{display:inline-block}.fs-key-value-table tr td:first-child{text-align:right}.fs-key-value-table tr td:first-child nobr{font-weight:bold}.fs-key-value-table tr td:first-child form{display:block}.fs-key-value-table tr td.fs-right{text-align:right}.fs-key-value-table tr.fs-odd{background:#ebebeb}.fs-key-value-table td,.fs-key-value-table th{padding:10px}.fs-key-value-table code{line-height:28px}.fs-key-value-table var,.fs-key-value-table code,.fs-key-value-table input[type="text"]{color:#0073AA;font-size:16px;background:none}.fs-key-value-table input[type="text"]{width:100%;font-weight:bold}.fs-field-beta_program label{margin-left:7px}label.fs-tag{background:#ffba00;color:#fff;display:inline-block;border-radius:3px;padding:5px;font-size:11px;line-height:11px;vertical-align:baseline}label.fs-tag.fs-warn{background:#ffba00}label.fs-tag.fs-success{background:#46b450}label.fs-tag.fs-error{background:#dc3232}#fs_sites .fs-scrollable-table .fs-table-body{max-height:200px;overflow:auto;border:1px solid #e5e5e5}#fs_sites .fs-scrollable-table .fs-table-body>table.widefat{border:none !important}#fs_sites .fs-scrollable-table .fs-main-column{width:100%}#fs_sites .fs-scrollable-table .fs-site-details td:first-of-type{text-align:right;color:grey;width:1px}#fs_sites .fs-scrollable-table .fs-site-details td:last-of-type{text-align:right}#fs_sites .fs-scrollable-table .fs-install-details table tr td{width:1px;white-space:nowrap}#fs_sites .fs-scrollable-table .fs-install-details table tr td:last-of-type{width:auto}#fs_addons h3{border:none;margin-bottom:0;padding:4px 5px}#fs_addons td{vertical-align:middle}#fs_addons thead{white-space:nowrap}#fs_addons td:first-child,#fs_addons th:first-child{text-align:left;font-weight:bold}#fs_addons td:last-child,#fs_addons th:last-child{text-align:right}#fs_addons th{font-weight:bold}#fs_billing_address{width:100%}#fs_billing_address tr td{width:50%;padding:5px}#fs_billing_address tr:first-of-type td{padding-top:0}#fs_billing_address span{font-weight:bold}#fs_billing_address input,#fs_billing_address select{display:block;width:100%;margin-top:5px}#fs_billing_address input::-moz-placeholder,#fs_billing_address select::-moz-placeholder{color:transparent;opacity:1}#fs_billing_address input:-ms-input-placeholder,#fs_billing_address select:-ms-input-placeholder{color:transparent}#fs_billing_address input::-webkit-input-placeholder,#fs_billing_address select::-webkit-input-placeholder{color:transparent}#fs_billing_address input.fs-read-mode,#fs_billing_address select.fs-read-mode{border-color:transparent;color:#777;border-bottom:1px dashed #ccc;padding-left:0;background:none}#fs_billing_address.fs-read-mode td span{display:none}#fs_billing_address.fs-read-mode input,#fs_billing_address.fs-read-mode select{border-color:transparent;color:#777;border-bottom:1px dashed #ccc;padding-left:0;background:none}#fs_billing_address.fs-read-mode input::-moz-placeholder,#fs_billing_address.fs-read-mode select::-moz-placeholder{color:#ccc;opacity:1}#fs_billing_address.fs-read-mode input:-ms-input-placeholder,#fs_billing_address.fs-read-mode select:-ms-input-placeholder{color:#ccc}#fs_billing_address.fs-read-mode input::-webkit-input-placeholder,#fs_billing_address.fs-read-mode select::-webkit-input-placeholder{color:#ccc}#fs_billing_address button{display:block;width:100%}
|
freemius/assets/css/admin/add-ons.css
CHANGED
@@ -1,2 +1,2 @@
|
|
1 |
.fs-badge{position:absolute;top:10px;right:0;background:#71ae00;color:white;text-transform:uppercase;padding:5px 10px;-moz-border-radius:3px 0 0 3px;-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;font-weight:bold;border-right:0;-moz-box-shadow:0 2px 1px -1px rgba(0,0,0,0.3);-webkit-box-shadow:0 2px 1px -1px rgba(0,0,0,0.3);box-shadow:0 2px 1px -1px rgba(0,0,0,0.3)}#fs_addons .fs-cards-list{list-style:none}#fs_addons .fs-cards-list .fs-card{float:left;height:152px;width:310px;padding:0;margin:0 0 30px 30px;font-size:14px;list-style:none;border:1px solid #ddd;cursor:pointer;position:relative}#fs_addons .fs-cards-list .fs-card .fs-overlay{position:absolute;left:0;right:0;bottom:0;top:0;z-index:9}#fs_addons .fs-cards-list .fs-card .fs-inner{background-color:#fff;overflow:hidden;height:100%;position:relative}#fs_addons .fs-cards-list .fs-card .fs-inner>ul{-moz-transition:all,0.15s;-o-transition:all,0.15s;-ms-transition:all,0.15s;-webkit-transition:all,0.15s;transition:all,0.15s;left:0;right:0;top:0;position:absolute}#fs_addons .fs-cards-list .fs-card .fs-inner>ul>li{list-style:none;line-height:18px;padding:0 15px;width:100%;display:block;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-card-banner{padding:0;margin:0;line-height:0;display:block;height:100px;background-repeat:repeat-x;background-size:100% 100%;-moz-transition:all,0.15s;-o-transition:all,0.15s;-ms-transition:all,0.15s;-webkit-transition:all,0.15s;transition:all,0.15s}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-card-banner .fs-badge.fs-installed-addon-badge{font-size:1.02em;line-height:1.3em}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-title{margin:10px 0 0 0;height:18px;overflow:hidden;color:#000;white-space:nowrap;text-overflow:ellipsis;font-weight:bold}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-offer{font-size:0.9em}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-description{background-color:#f9f9f9;padding:10px 15px 100px 15px;border-top:1px solid #eee;margin:0 0 10px 0;color:#777}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-tag{position:absolute;top:10px;right:0px;background:greenyellow;display:block;padding:2px 10px;-moz-box-shadow:1px 1px 1px rgba(0,0,0,0.3);-webkit-box-shadow:1px 1px 1px rgba(0,0,0,0.3);box-shadow:1px 1px 1px rgba(0,0,0,0.3);text-transform:uppercase;font-size:0.9em;font-weight:bold}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-cta .button,#fs_addons .fs-cards-list .fs-card .fs-inner .fs-cta .button-group{position:absolute;top:112px;right:10px}@media screen and (min-width: 960px){#fs_addons .fs-cards-list .fs-card:hover .fs-overlay{border:2px solid #29abe1;margin-left:-1px;margin-top:-1px}#fs_addons .fs-cards-list .fs-card:hover .fs-inner ul{top:-100px}#fs_addons .fs-cards-list .fs-card:hover .fs-inner .fs-title,#fs_addons .fs-cards-list .fs-card:hover .fs-inner .fs-offer{color:#29abe1}}
|
2 |
-
#TB_window,#TB_window iframe{width:821px !important}#plugin-information .fyi{width:266px !important}#plugin-information #section-holder{margin-right:299px}#plugin-information #section-description h2,#plugin-information #section-description h3,#plugin-information #section-description p,#plugin-information #section-description b,#plugin-information #section-description i,#plugin-information #section-description blockquote,#plugin-information #section-description li,#plugin-information #section-description ul,#plugin-information #section-description ol{clear:none}#plugin-information #section-description .fs-selling-points{padding-bottom:10px;border-bottom:1px solid #ddd}#plugin-information #section-description .fs-selling-points ul{margin:0}#plugin-information #section-description .fs-selling-points ul li{padding:0;list-style:none outside none}#plugin-information #section-description .fs-selling-points ul li i.dashicons{color:#71ae00;font-size:3em;vertical-align:middle;line-height:30px;float:left;margin:0 0 0 -15px}#plugin-information #section-description .fs-selling-points ul li h3{margin:1em 30px !important}#plugin-information #section-description .fs-screenshots:after{content:"";display:table;clear:both}#plugin-information #section-description .fs-screenshots ul{list-style:none;margin:0}#plugin-information #section-description .fs-screenshots ul li{width:225px;height:225px;float:left;margin-bottom:20px;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}#plugin-information #section-description .fs-screenshots ul li a{display:block;width:100%;height:100%;border:1px solid;-moz-box-shadow:1px 1px 1px rgba(0,0,0,0.2);-webkit-box-shadow:1px 1px 1px rgba(0,0,0,0.2);box-shadow:1px 1px 1px rgba(0,0,0,0.2);background-size:cover}#plugin-information #section-description .fs-screenshots ul li.odd{margin-right:20px}#plugin-information .plugin-information-pricing{margin:-16px;border-bottom:1px solid #ddd}#plugin-information .plugin-information-pricing .fs-plan h3{margin-top:0;padding:20px;font-size:16px}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper{border-bottom:1px solid #ddd}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper .nav-tab{cursor:pointer;position:relative;padding:0 10px;font-size:0.9em}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper .nav-tab label{text-transform:uppercase;color:green;background:greenyellow;position:absolute;left:-1px;right:-1px;bottom:100%;border:1px solid darkgreen;padding:2px;text-align:center;font-size:0.9em;line-height:1em}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper .nav-tab.nav-tab-active{cursor:default;background:#fffeec;border-bottom-color:#fffeec}#plugin-information .plugin-information-pricing .fs-plan.fs-single-cycle h3{background:#fffeec;margin:0;padding-bottom:0;color:#0073aa}#plugin-information .plugin-information-pricing .fs-plan.fs-single-cycle .nav-tab-wrapper,#plugin-information .plugin-information-pricing .fs-plan.fs-single-cycle .fs-billing-frequency{display:none}#plugin-information .plugin-information-pricing .fs-plan .fs-pricing-body{background:#fffeec;padding:20px}#plugin-information .plugin-information-pricing .fs-plan .button{width:100%;text-align:center;font-weight:bold;text-transform:uppercase;font-size:1.1em}#plugin-information .plugin-information-pricing .fs-plan label{white-space:nowrap}#plugin-information .plugin-information-pricing .fs-plan var{font-style:normal}#plugin-information .plugin-information-pricing .fs-plan .fs-billing-frequency,#plugin-information .plugin-information-pricing .fs-plan .fs-annual-discount{text-align:center;display:block;font-weight:bold;margin-bottom:10px;text-transform:uppercase;background:#F3F3F3;padding:2px;border:1px solid #ccc}#plugin-information .plugin-information-pricing .fs-plan .fs-annual-discount{text-transform:none;color:green;background:greenyellow}#plugin-information .plugin-information-pricing .fs-plan ul.fs-trial-terms{font-size:0.9em}#plugin-information .plugin-information-pricing .fs-plan ul.fs-trial-terms i{float:left;margin:0 0 0 -15px}#plugin-information .plugin-information-pricing .fs-plan ul.fs-trial-terms li{margin:10px 0 0 0}#plugin-information #section-features .fs-features{margin:-20px -26px}#plugin-information #section-features table{width:100%;border-spacing:0;border-collapse:separate}#plugin-information #section-features table thead th{padding:10px 0}#plugin-information #section-features table thead .fs-price{color:#71ae00;font-weight:normal;display:block;text-align:center}#plugin-information #section-features table tbody td{border-top:1px solid #ccc;padding:10px 0;text-align:center;width:100px;color:#71ae00}#plugin-information #section-features table tbody td:first-child{text-align:left;width:auto;color:inherit;padding-left:26px}#plugin-information #section-features table tbody tr.fs-odd td{background:#fefefe}#plugin-information #section-features .dashicons-yes{width:30px;height:30px;font-size:30px}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .button-group .button,#plugin-information .fs-dropdown .button-group .button{position:relative;width:auto;top:0;right:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .button-group .button:focus,#plugin-information .fs-dropdown .button-group .button:focus{z-index:10}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .button-group .fs-dropdown-arrow,#plugin-information .fs-dropdown .button-group .fs-dropdown-arrow{border-top:6px solid white;border-right:4px solid transparent;border-left:4px solid transparent;top:12px;position:relative}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.active:not(.up) .button:not(.fs-dropdown-arrow-button),#plugin-information .fs-dropdown.active:not(.up) .button:not(.fs-dropdown-arrow-button){border-bottom-left-radius:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.active:not(.up) .fs-dropdown-arrow-button,#plugin-information .fs-dropdown.active:not(.up) .fs-dropdown-arrow-button{border-bottom-right-radius:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.active.up .button:not(.fs-dropdown-arrow-button),#plugin-information .fs-dropdown.active.up .button:not(.fs-dropdown-arrow-button){border-top-left-radius:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.active.up .fs-dropdown-arrow-button,#plugin-information .fs-dropdown.active.up .fs-dropdown-arrow-button{border-top-right-radius:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list,#plugin-information .fs-dropdown .fs-dropdown-list{position:absolute;right:-1px;top:100%;margin-left:auto;padding:3px 0;border:1px solid #bfbfbf;background-color:#fff;z-index:1;width:230px;text-align:left;-moz-box-shadow:0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12);-webkit-box-shadow:0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12);box-shadow:0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12)}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list li,#plugin-information .fs-dropdown .fs-dropdown-list li{margin:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list li a,#plugin-information .fs-dropdown .fs-dropdown-list li a{display:block;padding:5px 10px;text-decoration:none;text-shadow:none}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list li:hover,#plugin-information .fs-dropdown .fs-dropdown-list li:hover{background-color:#0074a3;color:#fff}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list li:hover a,#plugin-information .fs-dropdown .fs-dropdown-list li:hover a{color:#fff}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown:not(.up) .fs-dropdown-list,#plugin-information .fs-dropdown:not(.up) .fs-dropdown-list{-moz-border-radius:3px 0 3px 3px;-webkit-border-radius:3px 0 3px 3px;border-radius:3px 0 3px 3px}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.up .fs-dropdown-list,#plugin-information .fs-dropdown.up .fs-dropdown-list{-moz-border-radius:3px 3px 0 3px;-webkit-border-radius:3px 3px 0 3px;border-radius:3px 3px 0 3px}#plugin-information .fs-dropdown .button-group{width:100%}#plugin-information .fs-dropdown .button-group .button{float:none;font-size:14px;font-weight:normal;text-transform:none}#plugin-information .fs-dropdown .fs-dropdown-list{margin-top:1px}#plugin-information .fs-dropdown.up .fs-dropdown-list{top:auto;bottom:100%;margin-bottom:2px}#plugin-information.wp-core-ui .fs-pricing-body .fs-dropdown .button-group{text-align:center;display:table}#plugin-information.wp-core-ui .fs-pricing-body .fs-dropdown .button-group .button{display:table-cell}#plugin-information.wp-core-ui .fs-pricing-body .fs-dropdown .button-group .button:not(.fs-dropdown-arrow-button){left:1px;width:100%}#plugin-information-footer>.button,#plugin-information-footer .fs-dropdown{position:relative;top:3px}#plugin-information-footer>.button.left,#plugin-information-footer .fs-dropdown.left{float:left}#plugin-information-footer>.right,#plugin-information-footer .fs-dropdown{float:right}@media screen and (max-width: 961px){#fs_addons .fs-cards-list .fs-card{height:265px}}
|
1 |
.fs-badge{position:absolute;top:10px;right:0;background:#71ae00;color:white;text-transform:uppercase;padding:5px 10px;-moz-border-radius:3px 0 0 3px;-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;font-weight:bold;border-right:0;-moz-box-shadow:0 2px 1px -1px rgba(0,0,0,0.3);-webkit-box-shadow:0 2px 1px -1px rgba(0,0,0,0.3);box-shadow:0 2px 1px -1px rgba(0,0,0,0.3)}#fs_addons .fs-cards-list{list-style:none}#fs_addons .fs-cards-list .fs-card{float:left;height:152px;width:310px;padding:0;margin:0 0 30px 30px;font-size:14px;list-style:none;border:1px solid #ddd;cursor:pointer;position:relative}#fs_addons .fs-cards-list .fs-card .fs-overlay{position:absolute;left:0;right:0;bottom:0;top:0;z-index:9}#fs_addons .fs-cards-list .fs-card .fs-inner{background-color:#fff;overflow:hidden;height:100%;position:relative}#fs_addons .fs-cards-list .fs-card .fs-inner>ul{-moz-transition:all,0.15s;-o-transition:all,0.15s;-ms-transition:all,0.15s;-webkit-transition:all,0.15s;transition:all,0.15s;left:0;right:0;top:0;position:absolute}#fs_addons .fs-cards-list .fs-card .fs-inner>ul>li{list-style:none;line-height:18px;padding:0 15px;width:100%;display:block;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-card-banner{padding:0;margin:0;line-height:0;display:block;height:100px;background-repeat:repeat-x;background-size:100% 100%;-moz-transition:all,0.15s;-o-transition:all,0.15s;-ms-transition:all,0.15s;-webkit-transition:all,0.15s;transition:all,0.15s}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-card-banner .fs-badge.fs-installed-addon-badge{font-size:1.02em;line-height:1.3em}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-title{margin:10px 0 0 0;height:18px;overflow:hidden;color:#000;white-space:nowrap;text-overflow:ellipsis;font-weight:bold}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-offer{font-size:0.9em}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-description{background-color:#f9f9f9;padding:10px 15px 100px 15px;border-top:1px solid #eee;margin:0 0 10px 0;color:#777}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-tag{position:absolute;top:10px;right:0px;background:greenyellow;display:block;padding:2px 10px;-moz-box-shadow:1px 1px 1px rgba(0,0,0,0.3);-webkit-box-shadow:1px 1px 1px rgba(0,0,0,0.3);box-shadow:1px 1px 1px rgba(0,0,0,0.3);text-transform:uppercase;font-size:0.9em;font-weight:bold}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-cta .button,#fs_addons .fs-cards-list .fs-card .fs-inner .fs-cta .button-group{position:absolute;top:112px;right:10px}@media screen and (min-width: 960px){#fs_addons .fs-cards-list .fs-card:hover .fs-overlay{border:2px solid #29abe1;margin-left:-1px;margin-top:-1px}#fs_addons .fs-cards-list .fs-card:hover .fs-inner ul{top:-100px}#fs_addons .fs-cards-list .fs-card:hover .fs-inner .fs-title,#fs_addons .fs-cards-list .fs-card:hover .fs-inner .fs-offer{color:#29abe1}}
|
2 |
+
#TB_window,#TB_window iframe{width:821px !important}#plugin-information .fyi{width:266px !important}#plugin-information #section-holder{margin-right:299px}#plugin-information #section-description h2,#plugin-information #section-description h3,#plugin-information #section-description p,#plugin-information #section-description b,#plugin-information #section-description i,#plugin-information #section-description blockquote,#plugin-information #section-description li,#plugin-information #section-description ul,#plugin-information #section-description ol{clear:none}#plugin-information #section-description iframe{max-width:100%}#plugin-information #section-description .fs-selling-points{padding-bottom:10px;border-bottom:1px solid #ddd}#plugin-information #section-description .fs-selling-points ul{margin:0}#plugin-information #section-description .fs-selling-points ul li{padding:0;list-style:none outside none}#plugin-information #section-description .fs-selling-points ul li i.dashicons{color:#71ae00;font-size:3em;vertical-align:middle;line-height:30px;float:left;margin:0 0 0 -15px}#plugin-information #section-description .fs-selling-points ul li h3{margin:1em 30px !important}#plugin-information #section-description .fs-screenshots:after{content:"";display:table;clear:both}#plugin-information #section-description .fs-screenshots ul{list-style:none;margin:0}#plugin-information #section-description .fs-screenshots ul li{width:225px;height:225px;float:left;margin-bottom:20px;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}#plugin-information #section-description .fs-screenshots ul li a{display:block;width:100%;height:100%;border:1px solid;-moz-box-shadow:1px 1px 1px rgba(0,0,0,0.2);-webkit-box-shadow:1px 1px 1px rgba(0,0,0,0.2);box-shadow:1px 1px 1px rgba(0,0,0,0.2);background-size:cover}#plugin-information #section-description .fs-screenshots ul li.odd{margin-right:20px}#plugin-information .plugin-information-pricing{margin:-16px;border-bottom:1px solid #ddd}#plugin-information .plugin-information-pricing .fs-plan h3{margin-top:0;padding:20px;font-size:16px}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper{border-bottom:1px solid #ddd}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper .nav-tab{cursor:pointer;position:relative;padding:0 10px;font-size:0.9em}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper .nav-tab label{text-transform:uppercase;color:green;background:greenyellow;position:absolute;left:-1px;right:-1px;bottom:100%;border:1px solid darkgreen;padding:2px;text-align:center;font-size:0.9em;line-height:1em}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper .nav-tab.nav-tab-active{cursor:default;background:#fffeec;border-bottom-color:#fffeec}#plugin-information .plugin-information-pricing .fs-plan.fs-single-cycle h3{background:#fffeec;margin:0;padding-bottom:0;color:#0073aa}#plugin-information .plugin-information-pricing .fs-plan.fs-single-cycle .nav-tab-wrapper,#plugin-information .plugin-information-pricing .fs-plan.fs-single-cycle .fs-billing-frequency{display:none}#plugin-information .plugin-information-pricing .fs-plan .fs-pricing-body{background:#fffeec;padding:20px}#plugin-information .plugin-information-pricing .fs-plan .button{width:100%;text-align:center;font-weight:bold;text-transform:uppercase;font-size:1.1em}#plugin-information .plugin-information-pricing .fs-plan label{white-space:nowrap}#plugin-information .plugin-information-pricing .fs-plan var{font-style:normal}#plugin-information .plugin-information-pricing .fs-plan .fs-billing-frequency,#plugin-information .plugin-information-pricing .fs-plan .fs-annual-discount{text-align:center;display:block;font-weight:bold;margin-bottom:10px;text-transform:uppercase;background:#F3F3F3;padding:2px;border:1px solid #ccc}#plugin-information .plugin-information-pricing .fs-plan .fs-annual-discount{text-transform:none;color:green;background:greenyellow}#plugin-information .plugin-information-pricing .fs-plan ul.fs-trial-terms{font-size:0.9em}#plugin-information .plugin-information-pricing .fs-plan ul.fs-trial-terms i{float:left;margin:0 0 0 -15px}#plugin-information .plugin-information-pricing .fs-plan ul.fs-trial-terms li{margin:10px 0 0 0}#plugin-information #section-features .fs-features{margin:-20px -26px}#plugin-information #section-features table{width:100%;border-spacing:0;border-collapse:separate}#plugin-information #section-features table thead th{padding:10px 0}#plugin-information #section-features table thead .fs-price{color:#71ae00;font-weight:normal;display:block;text-align:center}#plugin-information #section-features table tbody td{border-top:1px solid #ccc;padding:10px 0;text-align:center;width:100px;color:#71ae00}#plugin-information #section-features table tbody td:first-child{text-align:left;width:auto;color:inherit;padding-left:26px}#plugin-information #section-features table tbody tr.fs-odd td{background:#fefefe}#plugin-information #section-features .dashicons-yes{width:30px;height:30px;font-size:30px}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .button-group .button,#plugin-information .fs-dropdown .button-group .button{position:relative;width:auto;top:0;right:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .button-group .button:focus,#plugin-information .fs-dropdown .button-group .button:focus{z-index:10}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .button-group .fs-dropdown-arrow,#plugin-information .fs-dropdown .button-group .fs-dropdown-arrow{border-top:6px solid white;border-right:4px solid transparent;border-left:4px solid transparent;top:12px;position:relative}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.active:not(.up) .button:not(.fs-dropdown-arrow-button),#plugin-information .fs-dropdown.active:not(.up) .button:not(.fs-dropdown-arrow-button){border-bottom-left-radius:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.active:not(.up) .fs-dropdown-arrow-button,#plugin-information .fs-dropdown.active:not(.up) .fs-dropdown-arrow-button{border-bottom-right-radius:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.active.up .button:not(.fs-dropdown-arrow-button),#plugin-information .fs-dropdown.active.up .button:not(.fs-dropdown-arrow-button){border-top-left-radius:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.active.up .fs-dropdown-arrow-button,#plugin-information .fs-dropdown.active.up .fs-dropdown-arrow-button{border-top-right-radius:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list,#plugin-information .fs-dropdown .fs-dropdown-list{position:absolute;right:-1px;top:100%;margin-left:auto;padding:3px 0;border:1px solid #bfbfbf;background-color:#fff;z-index:1;width:230px;text-align:left;-moz-box-shadow:0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12);-webkit-box-shadow:0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12);box-shadow:0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12)}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list li,#plugin-information .fs-dropdown .fs-dropdown-list li{margin:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list li a,#plugin-information .fs-dropdown .fs-dropdown-list li a{display:block;padding:5px 10px;text-decoration:none;text-shadow:none}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list li:hover,#plugin-information .fs-dropdown .fs-dropdown-list li:hover{background-color:#0074a3;color:#fff}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list li:hover a,#plugin-information .fs-dropdown .fs-dropdown-list li:hover a{color:#fff}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown:not(.up) .fs-dropdown-list,#plugin-information .fs-dropdown:not(.up) .fs-dropdown-list{-moz-border-radius:3px 0 3px 3px;-webkit-border-radius:3px 0 3px 3px;border-radius:3px 0 3px 3px}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.up .fs-dropdown-list,#plugin-information .fs-dropdown.up .fs-dropdown-list{-moz-border-radius:3px 3px 0 3px;-webkit-border-radius:3px 3px 0 3px;border-radius:3px 3px 0 3px}#plugin-information .fs-dropdown .button-group{width:100%}#plugin-information .fs-dropdown .button-group .button{float:none;font-size:14px;font-weight:normal;text-transform:none}#plugin-information .fs-dropdown .fs-dropdown-list{margin-top:1px}#plugin-information .fs-dropdown.up .fs-dropdown-list{top:auto;bottom:100%;margin-bottom:2px}#plugin-information.wp-core-ui .fs-pricing-body .fs-dropdown .button-group{text-align:center;display:table}#plugin-information.wp-core-ui .fs-pricing-body .fs-dropdown .button-group .button{display:table-cell}#plugin-information.wp-core-ui .fs-pricing-body .fs-dropdown .button-group .button:not(.fs-dropdown-arrow-button){left:1px;width:100%}#plugin-information-footer>.button,#plugin-information-footer .fs-dropdown{position:relative;top:3px}#plugin-information-footer>.button.left,#plugin-information-footer .fs-dropdown.left{float:left}#plugin-information-footer>.right,#plugin-information-footer .fs-dropdown{float:right}@media screen and (max-width: 961px){#fs_addons .fs-cards-list .fs-card{height:265px}}
|
freemius/config.php
CHANGED
@@ -385,4 +385,7 @@
|
|
385 |
|
386 |
if ( ! defined( 'WP_FS__DEMO_MODE' ) ) {
|
387 |
define( 'WP_FS__DEMO_MODE', false );
|
388 |
-
}
|
|
|
|
|
|
385 |
|
386 |
if ( ! defined( 'WP_FS__DEMO_MODE' ) ) {
|
387 |
define( 'WP_FS__DEMO_MODE', false );
|
388 |
+
}
|
389 |
+
if ( ! defined( 'FS_SDK__SSLVERIFY' ) ) {
|
390 |
+
define( 'FS_SDK__SSLVERIFY', false );
|
391 |
+
}
|
freemius/includes/class-freemius.php
CHANGED
@@ -351,6 +351,14 @@
|
|
351 |
*/
|
352 |
private $is_whitelabeled;
|
353 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
354 |
#region Uninstall Reasons IDs
|
355 |
|
356 |
const REASON_NO_LONGER_NEEDED = 1;
|
@@ -369,6 +377,14 @@
|
|
369 |
const REASON_DIDNT_WORK_AS_EXPECTED = 14;
|
370 |
const REASON_TEMPORARY_DEACTIVATION = 15;
|
371 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
372 |
#endregion
|
373 |
|
374 |
/* Ctor
|
@@ -816,7 +832,11 @@
|
|
816 |
return false;
|
817 |
}
|
818 |
|
819 |
-
if (
|
|
|
|
|
|
|
|
|
820 |
/**
|
821 |
* wp.org themes are limited to a single submenu item, and
|
822 |
* sub-submenu items are most likely not allowed (never verified).
|
@@ -1457,7 +1477,10 @@
|
|
1457 |
if ( $this->is_plugin() &&
|
1458 |
! isset( $this->_storage->is_plugin_new_install )
|
1459 |
) {
|
1460 |
-
$this->_storage->is_plugin_new_install =
|
|
|
|
|
|
|
1461 |
}
|
1462 |
}
|
1463 |
|
@@ -1480,6 +1503,13 @@
|
|
1480 |
-1 < settings.url.indexOf('admin-ajax.php') &&
|
1481 |
! ( settings.url.indexOf( '<?php echo $admin_param ?>' ) > 0 )
|
1482 |
) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1483 |
if (settings.url.indexOf('?') > 0) {
|
1484 |
settings.url += '&';
|
1485 |
} else {
|
@@ -1487,7 +1517,6 @@
|
|
1487 |
}
|
1488 |
|
1489 |
settings.url += '<?php echo $admin_param ?>=true';
|
1490 |
-
|
1491 |
}
|
1492 |
});
|
1493 |
})(jQuery);
|
@@ -1505,7 +1534,7 @@
|
|
1505 |
?>
|
1506 |
<script type="text/javascript">
|
1507 |
(function ($) {
|
1508 |
-
$('.fs-submenu-item.wp-support-forum').parent().attr(
|
1509 |
})(jQuery);
|
1510 |
</script>
|
1511 |
<?php
|
@@ -1601,6 +1630,7 @@
|
|
1601 |
}
|
1602 |
|
1603 |
add_action( 'init', array( &$this, '_maybe_add_gdpr_optin_ajax_handler') );
|
|
|
1604 |
}
|
1605 |
|
1606 |
if ( $this->is_plugin() ) {
|
@@ -1632,7 +1662,7 @@
|
|
1632 |
|
1633 |
add_action( 'admin_init', array( &$this, '_redirect_on_clicked_menu_link' ), WP_FS__LOWEST_PRIORITY );
|
1634 |
|
1635 |
-
if ( $this->is_theme() ) {
|
1636 |
add_action( 'admin_init', array( &$this, '_add_tracking_links' ) );
|
1637 |
}
|
1638 |
|
@@ -1644,6 +1674,7 @@
|
|
1644 |
$this->add_ajax_action( 'update_billing', array( &$this, '_update_billing_ajax_action' ) );
|
1645 |
$this->add_ajax_action( 'start_trial', array( &$this, '_start_trial_ajax_action' ) );
|
1646 |
$this->add_ajax_action( 'set_data_debug_mode', array( &$this, '_set_data_debug_mode' ) );
|
|
|
1647 |
|
1648 |
if ( $this->_is_network_active && fs_is_network_admin() ) {
|
1649 |
$this->add_ajax_action( 'network_activate', array( &$this, '_network_activate_ajax_action' ) );
|
@@ -2006,6 +2037,10 @@
|
|
2006 |
* @since 2.0.0
|
2007 |
*/
|
2008 |
function _hook_action_links_and_register_account_hooks() {
|
|
|
|
|
|
|
|
|
2009 |
$this->_add_tracking_links();
|
2010 |
|
2011 |
if ( self::is_plugins_page() && $this->is_plugin() ) {
|
@@ -2186,6 +2221,12 @@
|
|
2186 |
);
|
2187 |
|
2188 |
$store_option = true;
|
|
|
|
|
|
|
|
|
|
|
|
|
2189 |
}
|
2190 |
|
2191 |
if ( empty( $id_slug_type_path_map[ $module_id ]['path'] ) ||
|
@@ -4259,7 +4300,7 @@
|
|
4259 |
)
|
4260 |
),
|
4261 |
sprintf(
|
4262 |
-
'<a href="%s" target="_blank"><b>%s</b></a> - %s',
|
4263 |
sprintf( 'https://wordpress.org/plugins/%s/download/', $this->_slug ),
|
4264 |
$install_previous_title,
|
4265 |
$install_previous_desc
|
@@ -4366,7 +4407,7 @@
|
|
4366 |
)
|
4367 |
),
|
4368 |
sprintf(
|
4369 |
-
'<a href="%s" target="_blank"><b>%s</b></a> - %s',
|
4370 |
sprintf( 'https://wordpress.org/plugins/%s/download/', $this->_slug ),
|
4371 |
$install_previous_title,
|
4372 |
$install_previous_desc
|
@@ -4887,10 +4928,12 @@
|
|
4887 |
} else {
|
4888 |
$is_network_admin = fs_is_network_admin();
|
4889 |
|
4890 |
-
if (
|
|
|
|
|
|
|
4891 |
$this->_parent->is_registered() &&
|
4892 |
! $this->is_registered() &&
|
4893 |
-
$this->has_free_plan() &&
|
4894 |
/**
|
4895 |
* If not registered for add-on and the following conditions for the add-on are met, activate add-on account.
|
4896 |
* * Network active and in network admin - network activate add-on account.
|
@@ -4904,16 +4947,40 @@
|
|
4904 |
*/
|
4905 |
( $this->is_network_active() || ! $is_network_admin )
|
4906 |
) {
|
4907 |
-
|
4908 |
-
|
4909 |
-
|
4910 |
-
|
4911 |
-
|
4912 |
-
|
4913 |
-
)
|
4914 |
-
|
4915 |
-
|
4916 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4917 |
}
|
4918 |
|
4919 |
// @todo This should be only executed on activation. It should be migrated to register_activation_hook() together with other activation related logic.
|
@@ -5415,7 +5482,10 @@
|
|
5415 |
* @return bool
|
5416 |
*/
|
5417 |
function is_extensions_tracking_allowed() {
|
5418 |
-
return (true === $this->
|
|
|
|
|
|
|
5419 |
}
|
5420 |
|
5421 |
/**
|
@@ -5601,6 +5671,7 @@
|
|
5601 |
$this->_anonymous_mode = $this->get_bool_option( $plugin_info, 'anonymous_mode', false );
|
5602 |
}
|
5603 |
$this->_permissions = $this->get_option( $plugin_info, 'permissions', array() );
|
|
|
5604 |
|
5605 |
if ( ! empty( $plugin_info['trial'] ) ) {
|
5606 |
$this->_trial_days = $this->get_numeric_option(
|
@@ -7078,6 +7149,8 @@
|
|
7078 |
* @since 1.0.7
|
7079 |
*/
|
7080 |
function _admin_init_action() {
|
|
|
|
|
7081 |
/**
|
7082 |
* Automatically redirect to connect/activation page after plugin activation.
|
7083 |
*
|
@@ -7090,12 +7163,16 @@
|
|
7090 |
/**
|
7091 |
* Don't redirect if activating multiple plugins at once (bulk activation).
|
7092 |
*/
|
7093 |
-
} else {
|
7094 |
$this->_redirect_on_activation_hook();
|
7095 |
return;
|
7096 |
}
|
7097 |
}
|
7098 |
|
|
|
|
|
|
|
|
|
7099 |
if ( fs_request_is_action( $this->get_unique_affix() . '_skip_activation' ) ) {
|
7100 |
check_admin_referer( $this->get_unique_affix() . '_skip_activation' );
|
7101 |
|
@@ -7126,7 +7203,7 @@
|
|
7126 |
)
|
7127 |
) {
|
7128 |
if ( ! $this->is_pending_activation() ) {
|
7129 |
-
if ( ! $this->
|
7130 |
/**
|
7131 |
* If a user visits any other admin page before activating the premium-only theme with a valid
|
7132 |
* license, reactivate the previous theme.
|
@@ -7660,7 +7737,10 @@
|
|
7660 |
* @author Leo Fajardo (@leorw)
|
7661 |
* @since 1.2.2
|
7662 |
*/
|
7663 |
-
if (
|
|
|
|
|
|
|
7664 |
deactivate_plugins( $other_version_basename );
|
7665 |
}
|
7666 |
}
|
@@ -7769,8 +7849,17 @@
|
|
7769 |
$this->_storage->is_plugin_new_install = empty( $this->_storage->plugin_last_version );
|
7770 |
}
|
7771 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
7772 |
if ( ! $this->_anonymous_mode &&
|
7773 |
-
$
|
7774 |
! $this->_isAutoInstall
|
7775 |
) {
|
7776 |
// Store hint that the plugin was just activated to enable auto-redirection to settings.
|
@@ -7803,11 +7892,20 @@
|
|
7803 |
return;
|
7804 |
}
|
7805 |
|
7806 |
-
$license = $this->
|
7807 |
if ( ! is_object( $license ) ) {
|
7808 |
return;
|
7809 |
}
|
7810 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
7811 |
if ( ! $this->is_registered() ) {
|
7812 |
// Opt in with a license key.
|
7813 |
$this->opt_in(
|
@@ -7830,7 +7928,6 @@
|
|
7830 |
}
|
7831 |
}
|
7832 |
|
7833 |
-
|
7834 |
/**
|
7835 |
* @author Leo Fajardo (@leorw)
|
7836 |
* @since 2.3.0
|
@@ -7846,12 +7943,21 @@
|
|
7846 |
|
7847 |
$license = ( ! is_null( $license ) ) ?
|
7848 |
$license :
|
7849 |
-
$this->
|
7850 |
|
7851 |
if ( ! is_object( $license ) ) {
|
7852 |
return;
|
7853 |
}
|
7854 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
7855 |
if ( ! $this->is_network_registered() ) {
|
7856 |
$sites = $this->get_sites_for_network_level_optin();
|
7857 |
|
@@ -7915,16 +8021,217 @@
|
|
7915 |
}
|
7916 |
|
7917 |
/**
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
7918 |
* @author Leo Fajardo (@leorw)
|
7919 |
* @since 2.3.0
|
7920 |
*
|
|
|
|
|
|
|
7921 |
* @return FS_Plugin_License
|
7922 |
*/
|
7923 |
-
|
7924 |
$parent_licenses_endpoint = "/plugins/{$this->get_id()}/parent_licenses.json?filter=activatable";
|
7925 |
-
$parent_instance = $this->get_parent_instance();
|
7926 |
|
7927 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
7928 |
self::get_all_licenses( $this->get_parent_id() )
|
7929 |
);
|
7930 |
|
@@ -7938,7 +8245,7 @@
|
|
7938 |
$parent_licenses_endpoint = add_query_arg( $foreign_licenses, $parent_licenses_endpoint );
|
7939 |
}
|
7940 |
|
7941 |
-
$result = $
|
7942 |
|
7943 |
if (
|
7944 |
! $this->is_api_result_object( $result, 'licenses' ) ||
|
@@ -7948,9 +8255,24 @@
|
|
7948 |
return null;
|
7949 |
}
|
7950 |
|
7951 |
-
$
|
7952 |
|
7953 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
7954 |
}
|
7955 |
|
7956 |
/**
|
@@ -8703,12 +9025,25 @@
|
|
8703 |
'is_uninstalled' => false,
|
8704 |
);
|
8705 |
|
8706 |
-
$plugins_update_data[] = $new_plugin;
|
8707 |
$network_plugins_cache->plugins[ $basename ] = $new_plugin;
|
8708 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8709 |
if ( isset( $site_active_plugins[ $basename ] ) ) {
|
8710 |
$site_active_plugins_cache->plugins[ $basename ] = $new_plugin;
|
8711 |
-
$site_active_plugins_cache->plugins[ $basename ]['is_active'] =
|
8712 |
}
|
8713 |
}
|
8714 |
}
|
@@ -10108,6 +10443,10 @@
|
|
10108 |
|
10109 |
$class_name = '';
|
10110 |
|
|
|
|
|
|
|
|
|
10111 |
switch ( $option_name ) {
|
10112 |
case 'plugins':
|
10113 |
case 'themes':
|
@@ -10392,6 +10731,18 @@
|
|
10392 |
return ( is_object( $this->_site ) && $this->_site->is_tracking_allowed() );
|
10393 |
}
|
10394 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
10395 |
/**
|
10396 |
* @author Vova Feldman (@svovaf)
|
10397 |
* @since 1.0.4
|
@@ -12675,6 +13026,10 @@
|
|
12675 |
* @since 1.2.0
|
12676 |
*/
|
12677 |
function _add_license_activation() {
|
|
|
|
|
|
|
|
|
12678 |
if ( ! $this->is_user_admin() ) {
|
12679 |
// Only admins can activate a license.
|
12680 |
return;
|
@@ -12733,7 +13088,9 @@
|
|
12733 |
return;
|
12734 |
}
|
12735 |
|
12736 |
-
|
|
|
|
|
12737 |
// Handle user change only when the parent product or one of its add-ons is activated with a foreign license.
|
12738 |
return;
|
12739 |
}
|
@@ -12790,6 +13147,61 @@
|
|
12790 |
}
|
12791 |
}
|
12792 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
12793 |
/**
|
12794 |
* @author Leo Fajardo (@leorw)
|
12795 |
* @since 2.3.0
|
@@ -12869,11 +13281,13 @@
|
|
12869 |
exit;
|
12870 |
}
|
12871 |
|
|
|
|
|
|
|
|
|
12872 |
$result = $this->activate_license(
|
12873 |
$license_key,
|
12874 |
-
|
12875 |
-
fs_request_get( 'sites', array(), 'post' ) :
|
12876 |
-
array(),
|
12877 |
fs_request_get_bool( 'is_marketing_allowed', null ),
|
12878 |
fs_request_get( 'blog_id', null ),
|
12879 |
fs_request_get( 'module_id', null, 'post' ),
|
@@ -12881,6 +13295,16 @@
|
|
12881 |
fs_request_get_bool( 'is_extensions_tracking_allowed', true )
|
12882 |
);
|
12883 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
12884 |
echo json_encode( $result );
|
12885 |
|
12886 |
exit;
|
@@ -12967,6 +13391,46 @@
|
|
12967 |
}
|
12968 |
|
12969 |
/**
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
12970 |
* A helper method to activate migrated licenses. If the product is network activated and integrated, the method will network activate the license.
|
12971 |
*
|
12972 |
* @author Vova Feldman (@svovaf)
|
@@ -12975,6 +13439,8 @@
|
|
12975 |
* @param string $license_key
|
12976 |
* @param null|bool $is_marketing_allowed
|
12977 |
* @param null|number $plugin_id
|
|
|
|
|
12978 |
*
|
12979 |
* @return array {
|
12980 |
* @var bool $success
|
@@ -12987,17 +13453,19 @@
|
|
12987 |
function activate_migrated_license(
|
12988 |
$license_key,
|
12989 |
$is_marketing_allowed = null,
|
12990 |
-
$plugin_id = null
|
|
|
|
|
12991 |
) {
|
12992 |
$this->_logger->entrance();
|
12993 |
|
12994 |
$result = $this->activate_license(
|
12995 |
$license_key,
|
12996 |
-
$this->is_network_active() ?
|
12997 |
$this->get_sites_for_network_level_optin() :
|
12998 |
-
|
12999 |
$is_marketing_allowed,
|
13000 |
-
|
13001 |
$plugin_id
|
13002 |
);
|
13003 |
|
@@ -13007,6 +13475,32 @@
|
|
13007 |
return $result;
|
13008 |
}
|
13009 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
13010 |
/**
|
13011 |
* The implementation of this method was previously in `_activate_license_ajax_action()`.
|
13012 |
*
|
@@ -13039,7 +13533,12 @@
|
|
13039 |
|
13040 |
$license_key = trim( $license_key );
|
13041 |
|
13042 |
-
|
|
|
|
|
|
|
|
|
|
|
13043 |
// If the license activation is executed outside the context of a network admin, ignore the sites collection.
|
13044 |
$sites = array();
|
13045 |
}
|
@@ -13068,8 +13567,17 @@
|
|
13068 |
$user = $fs->get_current_or_network_user();
|
13069 |
}
|
13070 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
13071 |
if ( is_object( $user ) ) {
|
13072 |
-
if (
|
13073 |
// If no specific blog ID was provided, activate the license for all sites in the network.
|
13074 |
$blog_2_install_map = array();
|
13075 |
$site_ids = array();
|
@@ -13108,16 +13616,6 @@
|
|
13108 |
}
|
13109 |
}
|
13110 |
} else {
|
13111 |
-
if ( $has_valid_blog_id ) {
|
13112 |
-
/**
|
13113 |
-
* If a specific blog ID was provided, activate the license only for the install that is
|
13114 |
-
* associated with the given blog ID.
|
13115 |
-
*
|
13116 |
-
* @author Leo Fajardo (@leorw)
|
13117 |
-
*/
|
13118 |
-
$fs->switch_to_blog( $blog_id );
|
13119 |
-
}
|
13120 |
-
|
13121 |
if ( $fs->is_registered() ) {
|
13122 |
$params = array(
|
13123 |
'license_key' => $fs->apply_filters( 'license_key', $license_key )
|
@@ -13172,13 +13670,19 @@
|
|
13172 |
if ( empty( $error ) ) {
|
13173 |
$fs->network_upgrade_mode_completed();
|
13174 |
|
|
|
|
|
|
|
|
|
|
|
|
|
13175 |
$fs->_sync_license( true, $has_valid_blog_id );
|
13176 |
|
13177 |
$this->maybe_sync_install_user();
|
13178 |
|
13179 |
$next_page = $fs->is_addon() ?
|
13180 |
$fs->get_parent_instance()->get_account_url() :
|
13181 |
-
$fs->
|
13182 |
}
|
13183 |
} else {
|
13184 |
$next_page = $fs->opt_in(
|
@@ -13196,7 +13700,7 @@
|
|
13196 |
if ( isset( $next_page->error ) ) {
|
13197 |
$error = $next_page->error;
|
13198 |
} else {
|
13199 |
-
if (
|
13200 |
/**
|
13201 |
* Get the list of sites that were just opted-in (and license activated).
|
13202 |
* This is an optimization for the next part below saving some DB queries.
|
@@ -14310,7 +14814,12 @@
|
|
14310 |
* @return bool
|
14311 |
*/
|
14312 |
function is_user_in_admin() {
|
14313 |
-
return
|
|
|
|
|
|
|
|
|
|
|
14314 |
}
|
14315 |
|
14316 |
/**
|
@@ -14622,9 +15131,18 @@
|
|
14622 |
if ( function_exists( 'get_sites' ) ) {
|
14623 |
// For WP 4.6 and above.
|
14624 |
return get_sites( $args );
|
14625 |
-
} else if ( function_exists( '
|
14626 |
// For WP 3.7 to WP 4.5.
|
14627 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
14628 |
} else {
|
14629 |
// For WP 3.6 and below.
|
14630 |
return get_blog_list( 0, 'all' );
|
@@ -14801,7 +15319,7 @@
|
|
14801 |
* @return bool Since 2.3.1 returns if a switch was made.
|
14802 |
*/
|
14803 |
function switch_to_blog( $blog_id, FS_Site $install = null ) {
|
14804 |
-
if ( $blog_id == $this->_context_is_network_or_blog_id ) {
|
14805 |
return false;
|
14806 |
}
|
14807 |
|
@@ -16188,6 +16706,8 @@
|
|
16188 |
'http' => 402
|
16189 |
);
|
16190 |
|
|
|
|
|
16191 |
return $result;
|
16192 |
}
|
16193 |
|
@@ -17034,10 +17554,15 @@
|
|
17034 |
* @author Vova Feldman (@svovaf)
|
17035 |
* @since 1.0.6
|
17036 |
*
|
17037 |
-
* @param Freemius
|
17038 |
-
* @param bool|int|null
|
|
|
17039 |
*/
|
17040 |
-
private function _activate_addon_account(
|
|
|
|
|
|
|
|
|
17041 |
if ( $this->is_registered() ) {
|
17042 |
// Already activated.
|
17043 |
return;
|
@@ -17076,6 +17601,10 @@
|
|
17076 |
}
|
17077 |
}
|
17078 |
|
|
|
|
|
|
|
|
|
17079 |
// Activate add-on with parent plugin credentials.
|
17080 |
$result = $parent_fs->get_api_site_scope()->call(
|
17081 |
"/addons/{$this->_plugin->id}/installs.json",
|
@@ -17084,16 +17613,25 @@
|
|
17084 |
);
|
17085 |
|
17086 |
if ( ! $this->is_api_result_object( $result, 'installs' ) ) {
|
17087 |
-
|
17088 |
-
|
17089 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
17090 |
|
17091 |
-
|
17092 |
-
|
17093 |
-
|
17094 |
-
|
17095 |
-
|
17096 |
-
|
|
|
17097 |
|
17098 |
return;
|
17099 |
}
|
@@ -17126,21 +17664,29 @@
|
|
17126 |
|
17127 |
if ( ! fs_is_network_admin() ) {
|
17128 |
// Try to activate premium license.
|
17129 |
-
$this->_activate_license( true );
|
17130 |
-
} else {
|
17131 |
-
$license_id = fs_request_get( 'license_id' );
|
17132 |
|
17133 |
-
if ( is_object( $
|
17134 |
-
|
17135 |
-
$license_id == $this->_site->license_id
|
17136 |
-
) {
|
17137 |
-
// License is already activated.
|
17138 |
-
return;
|
17139 |
}
|
|
|
|
|
|
|
|
|
|
|
17140 |
|
17141 |
-
|
17142 |
-
|
17143 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
17144 |
|
17145 |
if ( is_object( $premium_license ) ) {
|
17146 |
$this->maybe_network_activate_addon_license( $premium_license );
|
@@ -19438,9 +19984,11 @@
|
|
19438 |
*
|
19439 |
* @author Vova Feldman (@svovaf)
|
19440 |
* @since 1.2.1
|
|
|
|
|
19441 |
*/
|
19442 |
-
function has_active_valid_license() {
|
19443 |
-
return self::is_active_valid_license( $this->_license );
|
19444 |
}
|
19445 |
|
19446 |
/**
|
@@ -19532,15 +20080,16 @@
|
|
19532 |
* @since 2.1.3
|
19533 |
*
|
19534 |
* @param FS_Plugin_License $license
|
|
|
19535 |
*
|
19536 |
* @return bool
|
19537 |
*/
|
19538 |
-
private static function is_active_valid_license( $license ) {
|
19539 |
return (
|
19540 |
is_object( $license ) &&
|
19541 |
FS_Plugin_License::is_valid_id( $license->id ) &&
|
19542 |
$license->is_active() &&
|
19543 |
-
$license->is_valid()
|
19544 |
);
|
19545 |
}
|
19546 |
|
@@ -19594,6 +20143,22 @@
|
|
19594 |
);
|
19595 |
}
|
19596 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
19597 |
/**
|
19598 |
* Check if user is a trial or have feature enabled license.
|
19599 |
*
|
@@ -20186,6 +20751,13 @@
|
|
20186 |
}
|
20187 |
|
20188 |
if ( 'none' !== $plan_change ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
20189 |
$this->do_action( 'after_license_change', $plan_change, $this->get_plan() );
|
20190 |
}
|
20191 |
}
|
@@ -20909,7 +21481,7 @@
|
|
20909 |
*/
|
20910 |
private function get_latest_download_link( $label, $plugin_id = false ) {
|
20911 |
return sprintf(
|
20912 |
-
'<a target="_blank" href="%s">%s</a>',
|
20913 |
$this->_get_latest_download_local_url( $plugin_id ),
|
20914 |
$label
|
20915 |
);
|
@@ -20980,7 +21552,7 @@
|
|
20980 |
$this->get_text_inline( 'Version %s was released.', 'version-x-released' ) . ' ' . $this->get_text_inline( 'Please download %s.', 'please-download-x' ),
|
20981 |
$update->version,
|
20982 |
sprintf(
|
20983 |
-
'<a href="%s" target="_blank">%s</a>',
|
20984 |
$this->get_account_url( 'download_latest' ),
|
20985 |
sprintf(
|
20986 |
/* translators: %s: plan name (e.g. latest "Professional" version) */
|
@@ -21467,7 +22039,7 @@
|
|
21467 |
$this->get_plugin_title(),
|
21468 |
fs_strip_url_protocol( get_site_url( $blog_id ) ),
|
21469 |
sprintf(
|
21470 |
-
'<a href="%s" target="_blank">%s</a>',
|
21471 |
'https://freemius.com',
|
21472 |
'freemius.com'
|
21473 |
)
|
@@ -21566,6 +22138,18 @@
|
|
21566 |
|
21567 |
if ( is_object( $fs ) ) {
|
21568 |
$fs->_activate_license();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
21569 |
}
|
21570 |
|
21571 |
return;
|
@@ -21788,6 +22372,26 @@
|
|
21788 |
|
21789 |
$this->_handle_account_edits();
|
21790 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
21791 |
$this->do_action( 'account_page_load_before_departure' );
|
21792 |
}
|
21793 |
|
@@ -21924,6 +22528,86 @@
|
|
21924 |
}
|
21925 |
}
|
21926 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
21927 |
#----------------------------------------------------------------------------------
|
21928 |
#region Contact Us
|
21929 |
#----------------------------------------------------------------------------------
|
@@ -22152,6 +22836,43 @@
|
|
22152 |
$this->get_api_plugin_scope();
|
22153 |
}
|
22154 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
22155 |
/**
|
22156 |
* Show trial promotional notice (if any trial exist).
|
22157 |
*
|
@@ -22705,14 +23426,18 @@
|
|
22705 |
return;
|
22706 |
}
|
22707 |
|
22708 |
-
if (
|
22709 |
-
|
22710 |
-
|
22711 |
-
|
22712 |
-
|
|
|
|
|
|
|
22713 |
|
22714 |
-
|
22715 |
-
|
|
|
22716 |
return;
|
22717 |
}
|
22718 |
}
|
@@ -22792,7 +23517,7 @@
|
|
22792 |
if ( ! empty( $this->_dynamically_added_top_level_page_hook_name ) ) {
|
22793 |
if ( $this->is_network_registered() ) {
|
22794 |
$page = 'account';
|
22795 |
-
} else if ( $this->is_network_anonymous() ) {
|
22796 |
$this->maybe_set_slug_and_network_menu_exists_flag();
|
22797 |
}
|
22798 |
}
|
@@ -22827,10 +23552,12 @@
|
|
22827 |
* @since 1.0.3
|
22828 |
*/
|
22829 |
function _redirect_on_activation_hook() {
|
22830 |
-
|
|
|
22831 |
|
22832 |
-
|
22833 |
-
|
|
|
22834 |
}
|
22835 |
}
|
22836 |
|
@@ -22870,7 +23597,7 @@
|
|
22870 |
|
22871 |
foreach ( $this->_action_links as $new_links ) {
|
22872 |
foreach ( $new_links as $link ) {
|
22873 |
-
$before_deactivate[ $link['key'] ] = '<a href="' . $link['href'] . '"' . ( $link['external'] ? ' target="_blank"' : '' ) . '>' . $link['label'] . '</a>';
|
22874 |
}
|
22875 |
}
|
22876 |
|
@@ -22990,7 +23717,7 @@
|
|
22990 |
'';
|
22991 |
|
22992 |
return sprintf(
|
22993 |
-
' %s: <ol><li>%s.</li>%s<li>%s (<a href="%s" target="_blank">%s</a>).</li></ol>',
|
22994 |
$this->get_text_inline( 'Please follow these steps to complete the upgrade', 'follow-steps-to-complete-upgrade' ),
|
22995 |
( empty( $activate_license_string ) ? '' : $activate_license_string . '</li><li>' ) .
|
22996 |
$this->get_latest_download_link( sprintf(
|
@@ -23243,6 +23970,14 @@
|
|
23243 |
*/
|
23244 |
function set_plugin_upgrade_complete() {
|
23245 |
$this->_storage->plugin_upgrade_mode = false;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
23246 |
}
|
23247 |
|
23248 |
#endregion
|
351 |
*/
|
352 |
private $is_whitelabeled;
|
353 |
|
354 |
+
/**
|
355 |
+
* @author Leo Fajardo (@leorw)
|
356 |
+
* @since 2.4.0
|
357 |
+
*
|
358 |
+
* @var bool
|
359 |
+
*/
|
360 |
+
private $_is_bundle_license_auto_activation_enabled = false;
|
361 |
+
|
362 |
#region Uninstall Reasons IDs
|
363 |
|
364 |
const REASON_NO_LONGER_NEEDED = 1;
|
377 |
const REASON_DIDNT_WORK_AS_EXPECTED = 14;
|
378 |
const REASON_TEMPORARY_DEACTIVATION = 15;
|
379 |
|
380 |
+
/**
|
381 |
+
* @author Leo Fajardo (@leorw)
|
382 |
+
* @since 2.3.1
|
383 |
+
*
|
384 |
+
* @var boolean|null
|
385 |
+
*/
|
386 |
+
private $_use_external_pricing = null;
|
387 |
+
|
388 |
#endregion
|
389 |
|
390 |
/* Ctor
|
832 |
return false;
|
833 |
}
|
834 |
|
835 |
+
if (
|
836 |
+
! $is_tabs_visibility_check &&
|
837 |
+
$this->is_org_repo_compliant() &&
|
838 |
+
$this->show_settings_with_tabs()
|
839 |
+
) {
|
840 |
/**
|
841 |
* wp.org themes are limited to a single submenu item, and
|
842 |
* sub-submenu items are most likely not allowed (never verified).
|
1477 |
if ( $this->is_plugin() &&
|
1478 |
! isset( $this->_storage->is_plugin_new_install )
|
1479 |
) {
|
1480 |
+
$this->_storage->is_plugin_new_install = (
|
1481 |
+
! is_plugin_active( $this->_plugin_basename ) &&
|
1482 |
+
empty( $this->_storage->plugin_last_version )
|
1483 |
+
);
|
1484 |
}
|
1485 |
}
|
1486 |
|
1503 |
-1 < settings.url.indexOf('admin-ajax.php') &&
|
1504 |
! ( settings.url.indexOf( '<?php echo $admin_param ?>' ) > 0 )
|
1505 |
) {
|
1506 |
+
if (
|
1507 |
+
'string' === typeof settings.data &&
|
1508 |
+
settings.data.indexOf( 'action=heartbeat' ) > 0
|
1509 |
+
) {
|
1510 |
+
return;
|
1511 |
+
}
|
1512 |
+
|
1513 |
if (settings.url.indexOf('?') > 0) {
|
1514 |
settings.url += '&';
|
1515 |
} else {
|
1517 |
}
|
1518 |
|
1519 |
settings.url += '<?php echo $admin_param ?>=true';
|
|
|
1520 |
}
|
1521 |
});
|
1522 |
})(jQuery);
|
1534 |
?>
|
1535 |
<script type="text/javascript">
|
1536 |
(function ($) {
|
1537 |
+
$('.fs-submenu-item.wp-support-forum').parent().attr( { target: '_blank', rel: 'noopener noreferrer' } );
|
1538 |
})(jQuery);
|
1539 |
</script>
|
1540 |
<?php
|
1630 |
}
|
1631 |
|
1632 |
add_action( 'init', array( &$this, '_maybe_add_gdpr_optin_ajax_handler') );
|
1633 |
+
add_action( 'init', array( &$this, '_maybe_add_pricing_ajax_handler' ) );
|
1634 |
}
|
1635 |
|
1636 |
if ( $this->is_plugin() ) {
|
1662 |
|
1663 |
add_action( 'admin_init', array( &$this, '_redirect_on_clicked_menu_link' ), WP_FS__LOWEST_PRIORITY );
|
1664 |
|
1665 |
+
if ( $this->is_theme() && ! $this->is_migration() ) {
|
1666 |
add_action( 'admin_init', array( &$this, '_add_tracking_links' ) );
|
1667 |
}
|
1668 |
|
1674 |
$this->add_ajax_action( 'update_billing', array( &$this, '_update_billing_ajax_action' ) );
|
1675 |
$this->add_ajax_action( 'start_trial', array( &$this, '_start_trial_ajax_action' ) );
|
1676 |
$this->add_ajax_action( 'set_data_debug_mode', array( &$this, '_set_data_debug_mode' ) );
|
1677 |
+
$this->add_ajax_action( 'toggle_whitelabel_mode', array( &$this, '_toggle_whitelabel_mode_ajax_handler' ) );
|
1678 |
|
1679 |
if ( $this->_is_network_active && fs_is_network_admin() ) {
|
1680 |
$this->add_ajax_action( 'network_activate', array( &$this, '_network_activate_ajax_action' ) );
|
2037 |
* @since 2.0.0
|
2038 |
*/
|
2039 |
function _hook_action_links_and_register_account_hooks() {
|
2040 |
+
if ( $this->is_migration() ) {
|
2041 |
+
return;
|
2042 |
+
}
|
2043 |
+
|
2044 |
$this->_add_tracking_links();
|
2045 |
|
2046 |
if ( self::is_plugins_page() && $this->is_plugin() ) {
|
2221 |
);
|
2222 |
|
2223 |
$store_option = true;
|
2224 |
+
} else if (
|
2225 |
+
isset( $id_slug_type_path_map[ $module_id ]['slug'] ) &&
|
2226 |
+
$slug !== $id_slug_type_path_map[ $module_id ]['slug']
|
2227 |
+
) {
|
2228 |
+
$id_slug_type_path_map[ $module_id ]['slug'] = $slug;
|
2229 |
+
$store_option = true;
|
2230 |
}
|
2231 |
|
2232 |
if ( empty( $id_slug_type_path_map[ $module_id ]['path'] ) ||
|
4300 |
)
|
4301 |
),
|
4302 |
sprintf(
|
4303 |
+
'<a href="%s" target="_blank" rel="noopener noreferrer"><b>%s</b></a> - %s',
|
4304 |
sprintf( 'https://wordpress.org/plugins/%s/download/', $this->_slug ),
|
4305 |
$install_previous_title,
|
4306 |
$install_previous_desc
|
4407 |
)
|
4408 |
),
|
4409 |
sprintf(
|
4410 |
+
'<a href="%s" target="_blank" rel="noopener noreferrer"><b>%s</b></a> - %s',
|
4411 |
sprintf( 'https://wordpress.org/plugins/%s/download/', $this->_slug ),
|
4412 |
$install_previous_title,
|
4413 |
$install_previous_desc
|
4928 |
} else {
|
4929 |
$is_network_admin = fs_is_network_admin();
|
4930 |
|
4931 |
+
if ( ! $this->_parent->is_registered() && $this->is_registered() ) {
|
4932 |
+
// If add-on activated and parent not, automatically install parent for the user.
|
4933 |
+
$this->activate_parent_account( $this->_parent );
|
4934 |
+
} else if (
|
4935 |
$this->_parent->is_registered() &&
|
4936 |
! $this->is_registered() &&
|
|
|
4937 |
/**
|
4938 |
* If not registered for add-on and the following conditions for the add-on are met, activate add-on account.
|
4939 |
* * Network active and in network admin - network activate add-on account.
|
4947 |
*/
|
4948 |
( $this->is_network_active() || ! $is_network_admin )
|
4949 |
) {
|
4950 |
+
$premium_license = null;
|
4951 |
+
|
4952 |
+
if (
|
4953 |
+
! $this->has_free_plan() &&
|
4954 |
+
$this->is_bundle_license_auto_activation_enabled() &&
|
4955 |
+
$this->_parent->is_activated_with_bundle_license()
|
4956 |
+
) {
|
4957 |
+
/**
|
4958 |
+
* If the add-on has no free plan, try to activate the account only when there's a bundle license.
|
4959 |
+
*
|
4960 |
+
* @author Leo Fajardo (@leorw)
|
4961 |
+
* @since 2.4.0
|
4962 |
+
*/
|
4963 |
+
$bundle_license = $this->get_active_parent_license( $this->_parent->_get_license()->secret_key, false );
|
4964 |
+
|
4965 |
+
if (
|
4966 |
+
is_object( $bundle_license ) &&
|
4967 |
+
! empty( $bundle_license->products ) &&
|
4968 |
+
in_array( $this->get_id(), $bundle_license->products )
|
4969 |
+
) {
|
4970 |
+
$premium_license = $bundle_license;
|
4971 |
+
}
|
4972 |
+
}
|
4973 |
+
|
4974 |
+
if ( $this->has_free_plan() || is_object( $premium_license) ) {
|
4975 |
+
// If parent plugin activated, automatically install add-on for the user.
|
4976 |
+
$this->_activate_addon_account(
|
4977 |
+
$this->_parent,
|
4978 |
+
( $this->is_network_active() && $is_network_admin ) ?
|
4979 |
+
true :
|
4980 |
+
get_current_blog_id(),
|
4981 |
+
$premium_license
|
4982 |
+
);
|
4983 |
+
}
|
4984 |
}
|
4985 |
|
4986 |
// @todo This should be only executed on activation. It should be migrated to register_activation_hook() together with other activation related logic.
|
5482 |
* @return bool
|
5483 |
*/
|
5484 |
function is_extensions_tracking_allowed() {
|
5485 |
+
return ( true === $this->apply_filters(
|
5486 |
+
'is_extensions_tracking_allowed',
|
5487 |
+
$this->_storage->get( 'is_extensions_tracking_allowed', true )
|
5488 |
+
) );
|
5489 |
}
|
5490 |
|
5491 |
/**
|
5671 |
$this->_anonymous_mode = $this->get_bool_option( $plugin_info, 'anonymous_mode', false );
|
5672 |
}
|
5673 |
$this->_permissions = $this->get_option( $plugin_info, 'permissions', array() );
|
5674 |
+
$this->_is_bundle_license_auto_activation_enabled = $this->get_option( $plugin_info, 'bundle_license_auto_activation', false );
|
5675 |
|
5676 |
if ( ! empty( $plugin_info['trial'] ) ) {
|
5677 |
$this->_trial_days = $this->get_numeric_option(
|
7149 |
* @since 1.0.7
|
7150 |
*/
|
7151 |
function _admin_init_action() {
|
7152 |
+
$is_migration = $this->is_migration();
|
7153 |
+
|
7154 |
/**
|
7155 |
* Automatically redirect to connect/activation page after plugin activation.
|
7156 |
*
|
7163 |
/**
|
7164 |
* Don't redirect if activating multiple plugins at once (bulk activation).
|
7165 |
*/
|
7166 |
+
} else if ( ! $is_migration ) {
|
7167 |
$this->_redirect_on_activation_hook();
|
7168 |
return;
|
7169 |
}
|
7170 |
}
|
7171 |
|
7172 |
+
if ( $is_migration ) {
|
7173 |
+
return;
|
7174 |
+
}
|
7175 |
+
|
7176 |
if ( fs_request_is_action( $this->get_unique_affix() . '_skip_activation' ) ) {
|
7177 |
check_admin_referer( $this->get_unique_affix() . '_skip_activation' );
|
7178 |
|
7203 |
)
|
7204 |
) {
|
7205 |
if ( ! $this->is_pending_activation() ) {
|
7206 |
+
if ( ! $this->is_activation_page() ) {
|
7207 |
/**
|
7208 |
* If a user visits any other admin page before activating the premium-only theme with a valid
|
7209 |
* license, reactivate the previous theme.
|
7737 |
* @author Leo Fajardo (@leorw)
|
7738 |
* @since 1.2.2
|
7739 |
*/
|
7740 |
+
if (
|
7741 |
+
is_plugin_active( $other_version_basename ) &&
|
7742 |
+
$this->apply_filters( 'deactivate_on_activation', true )
|
7743 |
+
) {
|
7744 |
deactivate_plugins( $other_version_basename );
|
7745 |
}
|
7746 |
}
|
7849 |
$this->_storage->is_plugin_new_install = empty( $this->_storage->plugin_last_version );
|
7850 |
}
|
7851 |
|
7852 |
+
/**
|
7853 |
+
* Also flush when activating the premium version so that even if Freemius was off before, the API
|
7854 |
+
* connectivity test can be run again.
|
7855 |
+
*
|
7856 |
+
* @author Leo Fajardo (@leorw)
|
7857 |
+
* @since 2.2.3.1
|
7858 |
+
*/
|
7859 |
+
$has_api_connectivity = $this->has_api_connectivity( WP_FS__DEV_MODE || $is_premium_version_activation );
|
7860 |
+
|
7861 |
if ( ! $this->_anonymous_mode &&
|
7862 |
+
$has_api_connectivity &&
|
7863 |
! $this->_isAutoInstall
|
7864 |
) {
|
7865 |
// Store hint that the plugin was just activated to enable auto-redirection to settings.
|
7892 |
return;
|
7893 |
}
|
7894 |
|
7895 |
+
$license = $this->get_active_parent_license();
|
7896 |
if ( ! is_object( $license ) ) {
|
7897 |
return;
|
7898 |
}
|
7899 |
|
7900 |
+
if (
|
7901 |
+
$this->is_bundle_license_auto_activation_enabled() &&
|
7902 |
+
! empty( $license->products )
|
7903 |
+
) {
|
7904 |
+
$this->activate_bundle_license( $license );
|
7905 |
+
|
7906 |
+
return;
|
7907 |
+
}
|
7908 |
+
|
7909 |
if ( ! $this->is_registered() ) {
|
7910 |
// Opt in with a license key.
|
7911 |
$this->opt_in(
|
7928 |
}
|
7929 |
}
|
7930 |
|
|
|
7931 |
/**
|
7932 |
* @author Leo Fajardo (@leorw)
|
7933 |
* @since 2.3.0
|
7943 |
|
7944 |
$license = ( ! is_null( $license ) ) ?
|
7945 |
$license :
|
7946 |
+
$this->get_active_parent_license();
|
7947 |
|
7948 |
if ( ! is_object( $license ) ) {
|
7949 |
return;
|
7950 |
}
|
7951 |
|
7952 |
+
if (
|
7953 |
+
$this->is_bundle_license_auto_activation_enabled() &&
|
7954 |
+
! empty( $license->products )
|
7955 |
+
) {
|
7956 |
+
$this->activate_bundle_license( $license );
|
7957 |
+
|
7958 |
+
return;
|
7959 |
+
}
|
7960 |
+
|
7961 |
if ( ! $this->is_network_registered() ) {
|
7962 |
$sites = $this->get_sites_for_network_level_optin();
|
7963 |
|
8021 |
}
|
8022 |
|
8023 |
/**
|
8024 |
+
* Tries to activate a bundle license for all supported products if the current product is activated with a bundle license. This is called after activating an available license (not via the license activation dialog but by clicking on a license activation button) for a product via its "Account" page.
|
8025 |
+
*
|
8026 |
+
* @author Leo Fajardo (@leorw)
|
8027 |
+
* @since 2.4.0
|
8028 |
+
*
|
8029 |
+
* @param FS_Plugin_License $license
|
8030 |
+
* @param array $sites
|
8031 |
+
* @param int $blog_id
|
8032 |
+
*/
|
8033 |
+
private function maybe_activate_bundle_license( FS_Plugin_License $license = null, $sites = array(), $blog_id = 0 ) {
|
8034 |
+
if ( ! is_object( $license ) && $this->has_active_valid_license() ) {
|
8035 |
+
$license = $this->_license;
|
8036 |
+
}
|
8037 |
+
|
8038 |
+
if ( ! is_object( $license ) ) {
|
8039 |
+
return;
|
8040 |
+
}
|
8041 |
+
|
8042 |
+
$parent_license = ( ! empty( $license->products ) ) ?
|
8043 |
+
$license :
|
8044 |
+
$this->get_active_parent_license( $license->secret_key );
|
8045 |
+
|
8046 |
+
if ( is_object( $parent_license ) ) {
|
8047 |
+
$this->activate_bundle_license( $parent_license, $sites, $blog_id );
|
8048 |
+
}
|
8049 |
+
}
|
8050 |
+
|
8051 |
+
/**
|
8052 |
+
* Try to activate a bundle license for all the bundle products installed on the site.
|
8053 |
+
* (1) If a child product install already has a license, the bundle license won't be activated.
|
8054 |
+
* (2) On multi-site networks, if the attempt to activate the bundle license is triggered from the network admin, the bundle license activation will only work for non-delegated sites and only if none of them is associated with a license. Even if one of the sites has the product installed with a license key, skip the bundle license activation for the product.
|
8055 |
+
* (3) On multi-site networks, if the attempt to activate the bundle license is triggered from a site-level admin, only activate the license if the product is site-level activated or delegated, and the product installation is not yet associated with a license.
|
8056 |
+
*
|
8057 |
+
* @author Leo Fajardo (@leorw)
|
8058 |
+
* @since 2.4.0
|
8059 |
+
*
|
8060 |
+
* @param FS_Plugin_License $license
|
8061 |
+
* @param array $sites
|
8062 |
+
* @param int $current_blog_id
|
8063 |
+
*/
|
8064 |
+
private function activate_bundle_license( $license, $sites = array(), $current_blog_id = 0 ) {
|
8065 |
+
$is_network_admin = fs_is_network_admin();
|
8066 |
+
|
8067 |
+
$installs_by_blog_map = array();
|
8068 |
+
$site_info_by_blog_map = array();
|
8069 |
+
|
8070 |
+
/**
|
8071 |
+
* Try to activate the license for all supported products.
|
8072 |
+
*
|
8073 |
+
* @author Leo Fajardo
|
8074 |
+
*/
|
8075 |
+
foreach ( $license->products as $product_id ) {
|
8076 |
+
$fs = self::get_instance_by_id( $product_id );
|
8077 |
+
|
8078 |
+
if ( ! is_object( $fs ) ) {
|
8079 |
+
continue;
|
8080 |
+
}
|
8081 |
+
|
8082 |
+
if ( ! $fs->has_paid_plan() ) {
|
8083 |
+
continue;
|
8084 |
+
}
|
8085 |
+
|
8086 |
+
if (
|
8087 |
+
! $fs->is_addon() &&
|
8088 |
+
! FS_Plan_Manager::instance()->has_paid_plan( $fs->_plans )
|
8089 |
+
) {
|
8090 |
+
/**
|
8091 |
+
* The parent product can be free-only but can have its `has_paid_plan` flag set to `true` when
|
8092 |
+
* there is a context bundle.
|
8093 |
+
*/
|
8094 |
+
continue;
|
8095 |
+
}
|
8096 |
+
|
8097 |
+
if ( $current_blog_id > 0 ) {
|
8098 |
+
$fs->switch_to_blog( $current_blog_id );
|
8099 |
+
}
|
8100 |
+
|
8101 |
+
if ( $fs->has_active_valid_license() ) {
|
8102 |
+
continue;
|
8103 |
+
}
|
8104 |
+
|
8105 |
+
if ( ! $is_network_admin || $current_blog_id > 0 ) {
|
8106 |
+
if ( $fs->is_network_active() && ! $fs->is_delegated_connection( $current_blog_id ) ) {
|
8107 |
+
// Do not try to activate the license in the site level if the product is network active and the connection was not delegated.
|
8108 |
+
continue;
|
8109 |
+
}
|
8110 |
+
} else {
|
8111 |
+
if ( ! $fs->is_network_active() ) {
|
8112 |
+
// Do not try to activate the license in the network level if the product is not network active.
|
8113 |
+
continue;
|
8114 |
+
}
|
8115 |
+
|
8116 |
+
if ( $fs->is_network_delegated_connection() ) {
|
8117 |
+
// Do not try to activate the license in the network level if the activation has been delegated to site admins.
|
8118 |
+
continue;
|
8119 |
+
}
|
8120 |
+
|
8121 |
+
$has_install_with_license = false;
|
8122 |
+
|
8123 |
+
// Collection of sites that have an install entity that is not activated with a license or non-delegated sites that have no install entity, or both types of site.
|
8124 |
+
$filtered_sites = array();
|
8125 |
+
|
8126 |
+
if ( empty( $sites ) ) {
|
8127 |
+
$all_sites = self::get_sites();
|
8128 |
+
|
8129 |
+
foreach ( $all_sites as $site ) {
|
8130 |
+
$sites[] = array( 'blog_id' => self::get_site_blog_id( $site ) );
|
8131 |
+
}
|
8132 |
+
} else {
|
8133 |
+
// Populate the map here to avoid calling `$fs->get_site_info( $site );` in the other `for` loop below.
|
8134 |
+
foreach ( $sites as $site ) {
|
8135 |
+
if ( ! isset( $site['blog_id'] ) || ! is_numeric( $site['blog_id'] ) ) {
|
8136 |
+
continue;
|
8137 |
+
}
|
8138 |
+
|
8139 |
+
$site_info_by_blog_map[ $site['blog_id'] ] = $site;
|
8140 |
+
}
|
8141 |
+
}
|
8142 |
+
|
8143 |
+
foreach ( $sites as $site ) {
|
8144 |
+
if ( ! isset( $site['blog_id'] ) || ! is_numeric( $site['blog_id'] ) ) {
|
8145 |
+
continue;
|
8146 |
+
}
|
8147 |
+
|
8148 |
+
$blog_id = $site['blog_id'];
|
8149 |
+
|
8150 |
+
if ( ! isset( $installs_by_blog_map[ $blog_id ] ) ) {
|
8151 |
+
$installs_by_blog_map[ $blog_id ] = self::get_all_sites( $fs->get_module_type(), $blog_id );
|
8152 |
+
}
|
8153 |
+
|
8154 |
+
$installs = $installs_by_blog_map[ $blog_id ];
|
8155 |
+
$install = null;
|
8156 |
+
|
8157 |
+
if ( isset( $installs[ $fs->get_slug() ] ) ) {
|
8158 |
+
$install = $installs[ $fs->get_slug() ];
|
8159 |
+
|
8160 |
+
if (
|
8161 |
+
is_object( $install ) &&
|
8162 |
+
(
|
8163 |
+
! FS_Site::is_valid_id( $install->id ) ||
|
8164 |
+
! FS_User::is_valid_id( $install->user_id ) ||
|
8165 |
+
! FS_Plugin_Plan::is_valid_id( $install->plan_id )
|
8166 |
+
)
|
8167 |
+
) {
|
8168 |
+
$install = null;
|
8169 |
+
}
|
8170 |
+
}
|
8171 |
+
|
8172 |
+
if (
|
8173 |
+
is_object( $install ) &&
|
8174 |
+
FS_Plugin_License::is_valid_id( $install->license_id )
|
8175 |
+
) {
|
8176 |
+
$has_install_with_license = true;
|
8177 |
+
break;
|
8178 |
+
}
|
8179 |
+
|
8180 |
+
if ( $fs->is_site_delegated_connection( $blog_id ) ) {
|
8181 |
+
// Site activation delegated, don't activate bundle license on the site in the network admin.
|
8182 |
+
continue;
|
8183 |
+
}
|
8184 |
+
|
8185 |
+
if ( ! isset( $site_info_by_blog_map[ $blog_id ] ) ) {
|
8186 |
+
$site_info_by_blog_map[ $blog_id ] = $fs->get_site_info( $site );
|
8187 |
+
}
|
8188 |
+
|
8189 |
+
$filtered_sites[] = $site_info_by_blog_map[ $blog_id ];
|
8190 |
+
}
|
8191 |
+
|
8192 |
+
if ( $has_install_with_license || empty( $filtered_sites ) ) {
|
8193 |
+
// Do not try to activate the license at the network level if there's any install with a license or there's no site to activate the license on.
|
8194 |
+
continue;
|
8195 |
+
}
|
8196 |
+
|
8197 |
+
$sites = $filtered_sites;
|
8198 |
+
}
|
8199 |
+
|
8200 |
+
$fs->activate_migrated_license(
|
8201 |
+
$license->secret_key,
|
8202 |
+
null,
|
8203 |
+
null,
|
8204 |
+
$sites,
|
8205 |
+
( $current_blog_id > 0 ? $current_blog_id : null )
|
8206 |
+
);
|
8207 |
+
}
|
8208 |
+
}
|
8209 |
+
|
8210 |
+
/**
|
8211 |
+
* Returns a parent license that can be activated for the context product.
|
8212 |
+
*
|
8213 |
* @author Leo Fajardo (@leorw)
|
8214 |
* @since 2.3.0
|
8215 |
*
|
8216 |
+
* @param string|null $license_key
|
8217 |
+
* @param bool $flush
|
8218 |
+
*
|
8219 |
* @return FS_Plugin_License
|
8220 |
*/
|
8221 |
+
function get_active_parent_license( $license_key = null, $flush = true ) {
|
8222 |
$parent_licenses_endpoint = "/plugins/{$this->get_id()}/parent_licenses.json?filter=activatable";
|
|
|
8223 |
|
8224 |
+
$fs = $this;
|
8225 |
+
|
8226 |
+
if ( $this->is_addon() ) {
|
8227 |
+
$parent_instance = $this->get_parent_instance();
|
8228 |
+
|
8229 |
+
if ( is_object( $parent_instance ) && $parent_instance->is_registered() ) {
|
8230 |
+
$fs = $parent_instance;
|
8231 |
+
}
|
8232 |
+
}
|
8233 |
+
|
8234 |
+
$foreign_licenses = $fs->get_foreign_licenses_info(
|
8235 |
self::get_all_licenses( $this->get_parent_id() )
|
8236 |
);
|
8237 |
|
8245 |
$parent_licenses_endpoint = add_query_arg( $foreign_licenses, $parent_licenses_endpoint );
|
8246 |
}
|
8247 |
|
8248 |
+
$result = $fs->get_current_or_network_user_api_scope()->get( $parent_licenses_endpoint, $flush );
|
8249 |
|
8250 |
if (
|
8251 |
! $this->is_api_result_object( $result, 'licenses' ) ||
|
8255 |
return null;
|
8256 |
}
|
8257 |
|
8258 |
+
$parent_license = null;
|
8259 |
|
8260 |
+
if ( empty( $license_key ) ) {
|
8261 |
+
$parent_license = $result->licenses[0];
|
8262 |
+
} else {
|
8263 |
+
foreach ( $result->licenses as $license ) {
|
8264 |
+
if ( $license_key === $license->secret_key ) {
|
8265 |
+
$parent_license = $license;
|
8266 |
+
break;
|
8267 |
+
}
|
8268 |
+
}
|
8269 |
+
}
|
8270 |
+
|
8271 |
+
if ( ! is_null( $parent_license ) ) {
|
8272 |
+
$parent_license = new FS_Plugin_License( $parent_license );
|
8273 |
+
}
|
8274 |
+
|
8275 |
+
return $parent_license;
|
8276 |
}
|
8277 |
|
8278 |
/**
|
9025 |
'is_uninstalled' => false,
|
9026 |
);
|
9027 |
|
|
|
9028 |
$network_plugins_cache->plugins[ $basename ] = $new_plugin;
|
9029 |
|
9030 |
+
$is_site_level_active = (
|
9031 |
+
isset( $site_active_plugins[ $basename ] ) &&
|
9032 |
+
$site_active_plugins[ $basename ]['is_active']
|
9033 |
+
);
|
9034 |
+
|
9035 |
+
/**
|
9036 |
+
* If not network active, set the activity status based on the site-level plugin status.
|
9037 |
+
*/
|
9038 |
+
if ( ! $new_plugin['is_active'] ) {
|
9039 |
+
$new_plugin['is_active'] = $is_site_level_active;
|
9040 |
+
}
|
9041 |
+
|
9042 |
+
$plugins_update_data[] = $new_plugin;
|
9043 |
+
|
9044 |
if ( isset( $site_active_plugins[ $basename ] ) ) {
|
9045 |
$site_active_plugins_cache->plugins[ $basename ] = $new_plugin;
|
9046 |
+
$site_active_plugins_cache->plugins[ $basename ]['is_active'] = $is_site_level_active;
|
9047 |
}
|
9048 |
}
|
9049 |
}
|
10443 |
|
10444 |
$class_name = '';
|
10445 |
|
10446 |
+
if ( fs_starts_with( $option_name, WP_FS__MODULE_TYPE_THEME . '_' ) ) {
|
10447 |
+
$option_name = str_replace( WP_FS__MODULE_TYPE_THEME . '_', '', $option_name );
|
10448 |
+
}
|
10449 |
+
|
10450 |
switch ( $option_name ) {
|
10451 |
case 'plugins':
|
10452 |
case 'themes':
|
10731 |
return ( is_object( $this->_site ) && $this->_site->is_tracking_allowed() );
|
10732 |
}
|
10733 |
|
10734 |
+
/**
|
10735 |
+
* @author Leo Fajardo (@leorw)
|
10736 |
+
* @since 2.4.0
|
10737 |
+
*
|
10738 |
+
* @return bool
|
10739 |
+
*/
|
10740 |
+
function is_bundle_license_auto_activation_enabled() {
|
10741 |
+
return $this->is_addon() ?
|
10742 |
+
( is_object( $this->_parent ) && $this->_parent->is_bundle_license_auto_activation_enabled() ) :
|
10743 |
+
$this->_is_bundle_license_auto_activation_enabled;
|
10744 |
+
}
|
10745 |
+
|
10746 |
/**
|
10747 |
* @author Vova Feldman (@svovaf)
|
10748 |
* @since 1.0.4
|
13026 |
* @since 1.2.0
|
13027 |
*/
|
13028 |
function _add_license_activation() {
|
13029 |
+
if ( $this->is_migration() ) {
|
13030 |
+
return;
|
13031 |
+
}
|
13032 |
+
|
13033 |
if ( ! $this->is_user_admin() ) {
|
13034 |
// Only admins can activate a license.
|
13035 |
return;
|
13088 |
return;
|
13089 |
}
|
13090 |
|
13091 |
+
$installs_ids_with_foreign_licenses = $this->get_installs_ids_with_foreign_licenses();
|
13092 |
+
|
13093 |
+
if ( empty( $installs_ids_with_foreign_licenses ) ) {
|
13094 |
// Handle user change only when the parent product or one of its add-ons is activated with a foreign license.
|
13095 |
return;
|
13096 |
}
|
13147 |
}
|
13148 |
}
|
13149 |
|
13150 |
+
/**
|
13151 |
+
* @author Edgar Melkonyan
|
13152 |
+
* @since 2.4.1
|
13153 |
+
*
|
13154 |
+
* @throws Freemius_Exception
|
13155 |
+
*/
|
13156 |
+
function _toggle_whitelabel_mode_ajax_handler() {
|
13157 |
+
$this->_logger->entrance();
|
13158 |
+
|
13159 |
+
$this->check_ajax_referer( 'toggle_whitelabel_mode' );
|
13160 |
+
|
13161 |
+
if ( ! $this->is_user_admin() ) {
|
13162 |
+
// Only for admins.
|
13163 |
+
self::shoot_ajax_failure();
|
13164 |
+
}
|
13165 |
+
|
13166 |
+
$license = $this->get_api_user_scope()->call(
|
13167 |
+
"/licenses/{$this->_site->license_id}.json",
|
13168 |
+
'put',
|
13169 |
+
array( 'is_whitelabeled' => ! $this->_license->is_whitelabeled )
|
13170 |
+
);
|
13171 |
+
|
13172 |
+
if ( ! $this->is_api_result_entity( $license ) ) {
|
13173 |
+
self::shoot_ajax_failure(
|
13174 |
+
FS_Api::is_api_error_object( $license ) ?
|
13175 |
+
$license->error->message :
|
13176 |
+
fs_text_inline( "An unknown error has occurred while trying to toggle the license's white-label mode.", 'unknown-error-occurred', $this->get_slug() )
|
13177 |
+
);
|
13178 |
+
}
|
13179 |
+
|
13180 |
+
$this->_license->is_whitelabeled = $license->is_whitelabeled;
|
13181 |
+
$this->_store_licenses();
|
13182 |
+
|
13183 |
+
$this->_sync_license();
|
13184 |
+
|
13185 |
+
if ( ! $license->is_whitelabeled ) {
|
13186 |
+
$this->_admin_notices->remove_sticky( 'license_whitelabeled' );
|
13187 |
+
} else {
|
13188 |
+
$this->_admin_notices->add_sticky(
|
13189 |
+
sprintf(
|
13190 |
+
$this->get_text_inline(
|
13191 |
+
'Your %s license was flagged as white-labeled to hide sensitive information from the WP Admin (e.g. your email, license key, prices, billing address & invoices). If you ever wish to revert it back, you can easily do it through your %s. If this was a mistake you can also %s.',
|
13192 |
+
'license_whitelabeled'
|
13193 |
+
),
|
13194 |
+
"<strong>{$this->get_plugin_title()}</strong>",
|
13195 |
+
sprintf( '<a href="https://users.freemius.com" target="_blank">%s</a>', $this->get_text_inline( 'User Dashboard', 'user-dashboard' ) ),
|
13196 |
+
sprintf( '<a href="#" class="fs-toggle-whitelabel-mode">%s</a>', $this->get_text_inline( 'revert it now', 'revert-it-now' ) )
|
13197 |
+
),
|
13198 |
+
'license_whitelabeled'
|
13199 |
+
);
|
13200 |
+
}
|
13201 |
+
|
13202 |
+
self::shoot_ajax_response( array( 'success' => true ) );
|
13203 |
+
}
|
13204 |
+
|
13205 |
/**
|
13206 |
* @author Leo Fajardo (@leorw)
|
13207 |
* @since 2.3.0
|
13281 |
exit;
|
13282 |
}
|
13283 |
|
13284 |
+
$sites = fs_is_network_admin() ?
|
13285 |
+
fs_request_get( 'sites', array(), 'post' ) :
|
13286 |
+
array();
|
13287 |
+
|
13288 |
$result = $this->activate_license(
|
13289 |
$license_key,
|
13290 |
+
$sites,
|
|
|
|
|
13291 |
fs_request_get_bool( 'is_marketing_allowed', null ),
|
13292 |
fs_request_get( 'blog_id', null ),
|
13293 |
fs_request_get( 'module_id', null, 'post' ),
|
13295 |
fs_request_get_bool( 'is_extensions_tracking_allowed', true )
|
13296 |
);
|
13297 |
|
13298 |
+
if (
|
13299 |
+
$result['success'] &&
|
13300 |
+
$this->is_bundle_license_auto_activation_enabled()
|
13301 |
+
) {
|
13302 |
+
$license = new FS_Plugin_License();
|
13303 |
+
$license->secret_key = $license_key;
|
13304 |
+
|
13305 |
+
$this->maybe_activate_bundle_license( $license, $sites );
|
13306 |
+
}
|
13307 |
+
|
13308 |
echo json_encode( $result );
|
13309 |
|
13310 |
exit;
|
13391 |
}
|
13392 |
|
13393 |
/**
|
13394 |
+
* @author Leo Fajardo (@leorw)
|
13395 |
+
* @since 2.3.2.14
|
13396 |
+
*/
|
13397 |
+
function starting_migration() {
|
13398 |
+
if ( ! empty( $this->_storage->license_migration ) ) {
|
13399 |
+
// Do not overwrite the data if already set.
|
13400 |
+
return;
|
13401 |
+
}
|
13402 |
+
|
13403 |
+
$this->_storage->license_migration = array(
|
13404 |
+
'is_migrating' => true,
|
13405 |
+
'start_timestamp' => time()
|
13406 |
+
);
|
13407 |
+
}
|
13408 |
+
|
13409 |
+
/**
|
13410 |
+
* @author Leo Fajardo (@leorw)
|
13411 |
+
* @since 2.3.2.14
|
13412 |
+
*/
|
13413 |
+
function is_migration() {
|
13414 |
+
if ( $this->is_addon() ) {
|
13415 |
+
return $this->get_parent_instance()->is_migration();
|
13416 |
+
}
|
13417 |
+
|
13418 |
+
if ( empty( $this->_storage->license_migration ) ) {
|
13419 |
+
return false;
|
13420 |
+
}
|
13421 |
+
|
13422 |
+
if ( ! $this->_storage->license_migration['is_migrating'] ) {
|
13423 |
+
return false;
|
13424 |
+
}
|
13425 |
+
|
13426 |
+
return (
|
13427 |
+
// Return `true` if the migration is within 5 minutes from the starting time.
|
13428 |
+
( time() - $this->_storage->license_migration['start_timestamp'] ) <= WP_FS__TIME_5_MIN_IN_SEC
|
13429 |
+
);
|
13430 |
+
}
|
13431 |
+
|
13432 |
+
/**
|
13433 |
+
*
|
13434 |
* A helper method to activate migrated licenses. If the product is network activated and integrated, the method will network activate the license.
|
13435 |
*
|
13436 |
* @author Vova Feldman (@svovaf)
|
13439 |
* @param string $license_key
|
13440 |
* @param null|bool $is_marketing_allowed
|
13441 |
* @param null|number $plugin_id
|
13442 |
+
* @param array $sites
|
13443 |
+
* @param int $blog_id
|
13444 |
*
|
13445 |
* @return array {
|
13446 |
* @var bool $success
|
13453 |
function activate_migrated_license(
|
13454 |
$license_key,
|
13455 |
$is_marketing_allowed = null,
|
13456 |
+
$plugin_id = null,
|
13457 |
+
$sites = array(),
|
13458 |
+
$blog_id = null
|
13459 |
) {
|
13460 |
$this->_logger->entrance();
|
13461 |
|
13462 |
$result = $this->activate_license(
|
13463 |
$license_key,
|
13464 |
+
( empty( $sites ) && is_null( $blog_id ) && $this->is_network_active() ) ?
|
13465 |
$this->get_sites_for_network_level_optin() :
|
13466 |
+
$sites,
|
13467 |
$is_marketing_allowed,
|
13468 |
+
$blog_id,
|
13469 |
$plugin_id
|
13470 |
);
|
13471 |
|
13475 |
return $result;
|
13476 |
}
|
13477 |
|
13478 |
+
/**
|
13479 |
+
* @author Leo Fajardo (@leorw)
|
13480 |
+
* @since 2.3.1
|
13481 |
+
*
|
13482 |
+
* @return string
|
13483 |
+
*/
|
13484 |
+
function get_pricing_js_path() {
|
13485 |
+
return $this->apply_filters( 'freemius_pricing_js_path', WP_FS__DIR_INCLUDES . '/freemius-pricing/freemius-pricing.js' );
|
13486 |
+
}
|
13487 |
+
|
13488 |
+
/**
|
13489 |
+
* @author Leo Fajardo (@leorw)
|
13490 |
+
* @since 2.3.1
|
13491 |
+
*
|
13492 |
+
* @return bool
|
13493 |
+
*/
|
13494 |
+
function should_use_external_pricing() {
|
13495 |
+
if ( is_null( $this->_use_external_pricing ) ) {
|
13496 |
+
$pricing_js_path = $this->get_pricing_js_path();
|
13497 |
+
|
13498 |
+
$this->_use_external_pricing = ( empty( $pricing_js_path ) || ! file_exists( $pricing_js_path ) );
|
13499 |
+
}
|
13500 |
+
|
13501 |
+
return $this->_use_external_pricing;
|
13502 |
+
}
|
13503 |
+
|
13504 |
/**
|
13505 |
* The implementation of this method was previously in `_activate_license_ajax_action()`.
|
13506 |
*
|
13533 |
|
13534 |
$license_key = trim( $license_key );
|
13535 |
|
13536 |
+
$is_network_activation_or_migration = (
|
13537 |
+
fs_is_network_admin() ||
|
13538 |
+
( ! empty( $sites ) && $this->is_migration() )
|
13539 |
+
);
|
13540 |
+
|
13541 |
+
if ( ! $is_network_activation_or_migration ) {
|
13542 |
// If the license activation is executed outside the context of a network admin, ignore the sites collection.
|
13543 |
$sites = array();
|
13544 |
}
|
13567 |
$user = $fs->get_current_or_network_user();
|
13568 |
}
|
13569 |
|
13570 |
+
if ( $has_valid_blog_id ) {
|
13571 |
+
/**
|
13572 |
+
* If a specific blog ID was provided, activate the license only on the specific blog that is associated with the given blog ID.
|
13573 |
+
*
|
13574 |
+
* @author Leo Fajardo (@leorw)
|
13575 |
+
*/
|
13576 |
+
$fs->switch_to_blog( $blog_id );
|
13577 |
+
}
|
13578 |
+
|
13579 |
if ( is_object( $user ) ) {
|
13580 |
+
if ( $is_network_activation_or_migration && ! $has_valid_blog_id ) {
|
13581 |
// If no specific blog ID was provided, activate the license for all sites in the network.
|
13582 |
$blog_2_install_map = array();
|
13583 |
$site_ids = array();
|
13616 |
}
|
13617 |
}
|
13618 |
} else {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
13619 |
if ( $fs->is_registered() ) {
|
13620 |
$params = array(
|
13621 |
'license_key' => $fs->apply_filters( 'license_key', $license_key )
|
13670 |
if ( empty( $error ) ) {
|
13671 |
$fs->network_upgrade_mode_completed();
|
13672 |
|
13673 |
+
$fs->_user = $user;
|
13674 |
+
|
13675 |
+
if ( fs_is_network_admin() && ! $has_valid_blog_id ) {
|
13676 |
+
$fs->_site = $fs->get_network_install();
|
13677 |
+
}
|
13678 |
+
|
13679 |
$fs->_sync_license( true, $has_valid_blog_id );
|
13680 |
|
13681 |
$this->maybe_sync_install_user();
|
13682 |
|
13683 |
$next_page = $fs->is_addon() ?
|
13684 |
$fs->get_parent_instance()->get_account_url() :
|
13685 |
+
$fs->get_after_activation_url( 'after_connect_url' );
|
13686 |
}
|
13687 |
} else {
|
13688 |
$next_page = $fs->opt_in(
|
13700 |
if ( isset( $next_page->error ) ) {
|
13701 |
$error = $next_page->error;
|
13702 |
} else {
|
13703 |
+
if ( $is_network_activation_or_migration ) {
|
13704 |
/**
|
13705 |
* Get the list of sites that were just opted-in (and license activated).
|
13706 |
* This is an optimization for the next part below saving some DB queries.
|
14814 |
* @return bool
|
14815 |
*/
|
14816 |
function is_user_in_admin() {
|
14817 |
+
return (
|
14818 |
+
is_admin() &&
|
14819 |
+
! self::is_ajax() &&
|
14820 |
+
! self::is_cron() &&
|
14821 |
+
( 'admin-post.php' !== self::get_current_page() )
|
14822 |
+
);
|
14823 |
}
|
14824 |
|
14825 |
/**
|
15131 |
if ( function_exists( 'get_sites' ) ) {
|
15132 |
// For WP 4.6 and above.
|
15133 |
return get_sites( $args );
|
15134 |
+
} else if ( function_exists( 'wp_' . 'get_sites' ) ) {
|
15135 |
// For WP 3.7 to WP 4.5.
|
15136 |
+
/**
|
15137 |
+
* This is a hack suggested previously proposed by the TRT. Our SDK is compliant with older WP versions and we'd like to keep it that way.
|
15138 |
+
*
|
15139 |
+
* @todo Remove this hack once this false-positive error is removed from the Theme Sniffer.
|
15140 |
+
*
|
15141 |
+
* @since 2.3.3
|
15142 |
+
* @author Vova Feldman (@svovaf)
|
15143 |
+
*/
|
15144 |
+
$fn = 'wp_' . 'get_sites';
|
15145 |
+
return $fn( $args );
|
15146 |
} else {
|
15147 |
// For WP 3.6 and below.
|
15148 |
return get_blog_list( 0, 'all' );
|
15319 |
* @return bool Since 2.3.1 returns if a switch was made.
|
15320 |
*/
|
15321 |
function switch_to_blog( $blog_id, FS_Site $install = null ) {
|
15322 |
+
if ( ! is_numeric( $blog_id ) || $blog_id == $this->_context_is_network_or_blog_id ) {
|
15323 |
return false;
|
15324 |
}
|
15325 |
|
16706 |
'http' => 402
|
16707 |
);
|
16708 |
|
16709 |
+
$this->maybe_modify_api_curl_error_message( $result );
|
16710 |
+
|
16711 |
return $result;
|
16712 |
}
|
16713 |
|
17554 |
* @author Vova Feldman (@svovaf)
|
17555 |
* @since 1.0.6
|
17556 |
*
|
17557 |
+
* @param Freemius $parent_fs
|
17558 |
+
* @param bool|int|null $network_level_or_blog_id True for network level opt-in and integer for opt-in for specified blog in the network.
|
17559 |
+
* @param FS_Plugin_License $bundle_license Since 2.4.0. If provided, this license will be activated for the add-on.
|
17560 |
*/
|
17561 |
+
private function _activate_addon_account(
|
17562 |
+
Freemius $parent_fs,
|
17563 |
+
$network_level_or_blog_id = null,
|
17564 |
+
FS_Plugin_License $bundle_license = null
|
17565 |
+
) {
|
17566 |
if ( $this->is_registered() ) {
|
17567 |
// Already activated.
|
17568 |
return;
|
17601 |
}
|
17602 |
}
|
17603 |
|
17604 |
+
if ( is_object( $bundle_license ) ) {
|
17605 |
+
$params['license_key'] = $bundle_license->secret_key;
|
17606 |
+
}
|
17607 |
+
|
17608 |
// Activate add-on with parent plugin credentials.
|
17609 |
$result = $parent_fs->get_api_site_scope()->call(
|
17610 |
"/addons/{$this->_plugin->id}/installs.json",
|
17613 |
);
|
17614 |
|
17615 |
if ( ! $this->is_api_result_object( $result, 'installs' ) ) {
|
17616 |
+
if ( is_object( $bundle_license ) ) {
|
17617 |
+
/**
|
17618 |
+
* When a license object is provided, it's an attempt by the SDK to activate a bundle license and not a user-initiated action, therefore, do not show any admin notice to avoid confusion (e.g.: the notice will show up just above the opt-in link). If the license activation fails, the admin will see an opt-in link instead.
|
17619 |
+
*
|
17620 |
+
* @author Leo Fajardo (@leorw)
|
17621 |
+
* @since 2.4.0
|
17622 |
+
*/
|
17623 |
+
} else {
|
17624 |
+
$error_message = FS_Api::is_api_error_object( $result ) ?
|
17625 |
+
$result->error->message :
|
17626 |
+
$this->get_text_inline( 'An unknown error has occurred.', 'unknown-error' );
|
17627 |
|
17628 |
+
$this->_admin_notices->add(
|
17629 |
+
sprintf( $this->get_text_inline( 'Couldn\'t activate %s.', 'could-not-activate-x' ), $this->get_plugin_name() ) . ' ' .
|
17630 |
+
$this->get_text_inline( 'Please contact us with the following message:', 'contact-us-with-error-message' ) . ' ' . '<b>' . $error_message . '</b>',
|
17631 |
+
$this->get_text_x_inline( 'Oops', 'exclamation', 'oops' ) . '...',
|
17632 |
+
'error'
|
17633 |
+
);
|
17634 |
+
}
|
17635 |
|
17636 |
return;
|
17637 |
}
|
17664 |
|
17665 |
if ( ! fs_is_network_admin() ) {
|
17666 |
// Try to activate premium license.
|
17667 |
+
$this->_activate_license( true, $bundle_license );
|
|
|
|
|
17668 |
|
17669 |
+
if ( is_object( $bundle_license ) ) {
|
17670 |
+
$this->maybe_activate_bundle_license( $bundle_license );
|
|
|
|
|
|
|
|
|
17671 |
}
|
17672 |
+
} else {
|
17673 |
+
if ( is_object( $bundle_license ) ) {
|
17674 |
+
$premium_license = $bundle_license;
|
17675 |
+
} else {
|
17676 |
+
$license_id = fs_request_get( 'license_id' );
|
17677 |
|
17678 |
+
if ( is_object( $this->_site ) &&
|
17679 |
+
FS_Plugin_License::is_valid_id( $license_id ) &&
|
17680 |
+
$license_id == $this->_site->license_id
|
17681 |
+
) {
|
17682 |
+
// License is already activated.
|
17683 |
+
return;
|
17684 |
+
}
|
17685 |
+
|
17686 |
+
$premium_license = FS_Plugin_License::is_valid_id( $license_id ) ?
|
17687 |
+
$this->_get_license_by_id( $license_id ) :
|
17688 |
+
$this->_get_available_premium_license();
|
17689 |
+
}
|
17690 |
|
17691 |
if ( is_object( $premium_license ) ) {
|
17692 |
$this->maybe_network_activate_addon_license( $premium_license );
|
19984 |
*
|
19985 |
* @author Vova Feldman (@svovaf)
|
19986 |
* @since 1.2.1
|
19987 |
+
*
|
19988 |
+
* @param bool $check_expiration
|
19989 |
*/
|
19990 |
+
function has_active_valid_license( $check_expiration = true ) {
|
19991 |
+
return self::is_active_valid_license( $this->_license, $check_expiration );
|
19992 |
}
|
19993 |
|
19994 |
/**
|
20080 |
* @since 2.1.3
|
20081 |
*
|
20082 |
* @param FS_Plugin_License $license
|
20083 |
+
* @param bool $check_expiration
|
20084 |
*
|
20085 |
* @return bool
|
20086 |
*/
|
20087 |
+
private static function is_active_valid_license( $license, $check_expiration = true ) {
|
20088 |
return (
|
20089 |
is_object( $license ) &&
|
20090 |
FS_Plugin_License::is_valid_id( $license->id ) &&
|
20091 |
$license->is_active() &&
|
20092 |
+
( ! $check_expiration || $license->is_valid() )
|
20093 |
);
|
20094 |
}
|
20095 |
|
20143 |
);
|
20144 |
}
|
20145 |
|
20146 |
+
/**
|
20147 |
+
* Checks if the product is activated with a bundle license.
|
20148 |
+
*
|
20149 |
+
* @author Leo Fajardo (@leorw)
|
20150 |
+
* @since 2.4.0
|
20151 |
+
*
|
20152 |
+
* @return bool
|
20153 |
+
*/
|
20154 |
+
function is_activated_with_bundle_license() {
|
20155 |
+
if ( ! $this->has_features_enabled_license() ) {
|
20156 |
+
return false;
|
20157 |
+
}
|
20158 |
+
|
20159 |
+
return FS_Plugin_License::is_valid_id( $this->_license->parent_license_id );
|
20160 |
+
}
|
20161 |
+
|
20162 |
/**
|
20163 |
* Check if user is a trial or have feature enabled license.
|
20164 |
*
|
20751 |
}
|
20752 |
|
20753 |
if ( 'none' !== $plan_change ) {
|
20754 |
+
if (
|
20755 |
+
! is_object( $this->_license ) ||
|
20756 |
+
! $this->_license->is_whitelabeled
|
20757 |
+
) {
|
20758 |
+
$this->_admin_notices->remove_sticky( 'license_whitelabeled' );
|
20759 |
+
}
|
20760 |
+
|
20761 |
$this->do_action( 'after_license_change', $plan_change, $this->get_plan() );
|
20762 |
}
|
20763 |
}
|
21481 |
*/
|
21482 |
private function get_latest_download_link( $label, $plugin_id = false ) {
|
21483 |
return sprintf(
|
21484 |
+
'<a target="_blank" rel="noopener" href="%s">%s</a>',
|
21485 |
$this->_get_latest_download_local_url( $plugin_id ),
|
21486 |
$label
|
21487 |
);
|
21552 |
$this->get_text_inline( 'Version %s was released.', 'version-x-released' ) . ' ' . $this->get_text_inline( 'Please download %s.', 'please-download-x' ),
|
21553 |
$update->version,
|
21554 |
sprintf(
|
21555 |
+
'<a href="%s" target="_blank" rel="noopener">%s</a>',
|
21556 |
$this->get_account_url( 'download_latest' ),
|
21557 |
sprintf(
|
21558 |
/* translators: %s: plan name (e.g. latest "Professional" version) */
|
22039 |
$this->get_plugin_title(),
|
22040 |
fs_strip_url_protocol( get_site_url( $blog_id ) ),
|
22041 |
sprintf(
|
22042 |
+
'<a href="%s" target="_blank" rel="noopener">%s</a>',
|
22043 |
'https://freemius.com',
|
22044 |
'freemius.com'
|
22045 |
)
|
22138 |
|
22139 |
if ( is_object( $fs ) ) {
|
22140 |
$fs->_activate_license();
|
22141 |
+
|
22142 |
+
/**
|
22143 |
+
* Remove the product ID from `$_REQUEST` so that the syncing of the license for the other products will work properly.
|
22144 |
+
*
|
22145 |
+
* @author Leo Fajardo (@leorw)
|
22146 |
+
* @since 2.4.0
|
22147 |
+
*/
|
22148 |
+
unset( $_REQUEST['plugin_id'] );
|
22149 |
+
|
22150 |
+
if ( $this->is_bundle_license_auto_activation_enabled() ) {
|
22151 |
+
$fs->maybe_activate_bundle_license( null, array(), is_numeric( $blog_id ) ? $blog_id : 0 );
|
22152 |
+
}
|
22153 |
}
|
22154 |
|
22155 |
return;
|
22372 |
|
22373 |
$this->_handle_account_edits();
|
22374 |
|
22375 |
+
if (
|
22376 |
+
is_object( $this->_license ) &&
|
22377 |
+
$this->_license->user_id == $this->_user->id &&
|
22378 |
+
! $this->is_whitelabeled( true )
|
22379 |
+
) {
|
22380 |
+
$this->_admin_notices->add(
|
22381 |
+
sprintf(
|
22382 |
+
$this->get_text_inline( "Is this your client's site? %s if you wish to hide sensitive info like your email, license key, prices, billing address & invoices from the WP Admin.", 'license_not_whitelabeled' ),
|
22383 |
+
sprintf(
|
22384 |
+
'<a href="#" class="fs-toggle-whitelabel-mode">%s</a>',
|
22385 |
+
$this->get_text_inline( 'Click here', 'click-here' )
|
22386 |
+
)
|
22387 |
+
),
|
22388 |
+
'',
|
22389 |
+
'success',
|
22390 |
+
false,
|
22391 |
+
'license_not_whitelabeled'
|
22392 |
+
);
|
22393 |
+
}
|
22394 |
+
|
22395 |
$this->do_action( 'account_page_load_before_departure' );
|
22396 |
}
|
22397 |
|
22528 |
}
|
22529 |
}
|
22530 |
|
22531 |
+
/**
|
22532 |
+
* @author Leo Fajardo (@leorw)
|
22533 |
+
* @since 2.3.1
|
22534 |
+
*/
|
22535 |
+
function _maybe_add_pricing_ajax_handler() {
|
22536 |
+
if ( ! $this->should_use_external_pricing() ) {
|
22537 |
+
$this->add_ajax_action( 'pricing_ajax_action', array( &$this, '_fs_pricing_ajax_action_handler' ) );
|
22538 |
+
}
|
22539 |
+
}
|
22540 |
+
|
22541 |
+
/**
|
22542 |
+
* @author Leo Fajardo (@leorw)
|
22543 |
+
* @since 2.3.1
|
22544 |
+
*/
|
22545 |
+
function _fs_pricing_ajax_action_handler() {
|
22546 |
+
$this->check_ajax_referer( 'pricing_ajax_action' );
|
22547 |
+
|
22548 |
+
$result = null;
|
22549 |
+
$pricing_action = fs_request_get( 'pricing_action' );
|
22550 |
+
|
22551 |
+
switch ( $pricing_action ) {
|
22552 |
+
case 'fetch_pricing_data':
|
22553 |
+
$params = array(
|
22554 |
+
'is_enriched' => true,
|
22555 |
+
'trial' => fs_request_get_bool( 'trial' ),
|
22556 |
+
'sandbox' => fs_request_get( 'sandbox' ),
|
22557 |
+
's_ctx_type' => fs_request_get( 's_ctx_type' ),
|
22558 |
+
's_ctx_id' => fs_request_get( 's_ctx_id' ),
|
22559 |
+
's_ctx_ts' => fs_request_get( 's_ctx_ts' ),
|
22560 |
+
's_ctx_secure' => fs_request_get( 's_ctx_secure' ),
|
22561 |
+
);
|
22562 |
+
|
22563 |
+
$bundle_id = $this->get_bundle_id();
|
22564 |
+
$bundle_public_key = $this->get_bundle_public_key();
|
22565 |
+
|
22566 |
|