Version Description
Download this release
Release Info
Developer | danieliser |
Plugin | User Menus – Nav Menu Visibility |
Version | 1.2.9 |
Comparing to | |
See all releases |
Code changes from version 1.2.8 to 1.2.9
- freemius/assets/css/admin/account.css +1 -1
- freemius/assets/css/admin/add-ons.css +2 -1
- freemius/assets/css/admin/affiliation.css +1 -1
- freemius/assets/css/admin/checkout.css +1 -1
- freemius/assets/css/admin/clone-resolution.css +0 -1
- freemius/assets/css/admin/common.css +2 -1
- freemius/assets/css/admin/connect.css +1 -1
- freemius/assets/css/admin/debug.css +1 -1
- freemius/assets/css/admin/dialog-boxes.css +2 -1
- freemius/assets/css/admin/gdpr-optin-notice.css +1 -1
- freemius/assets/css/admin/plugins.css +1 -1
- freemius/assets/css/customizer.css +1 -1
- freemius/assets/img/user-menus.png +0 -0
- freemius/config.php +5 -5
- freemius/includes/class-freemius.php +283 -1075
- freemius/includes/class-fs-admin-notices.php +21 -52
- freemius/includes/class-fs-api.php +3 -27
- freemius/includes/class-fs-plugin-updater.php +6 -8
- freemius/includes/entities/class-fs-user.php +1 -12
- freemius/includes/fs-core-functions.php +1 -1
- freemius/includes/fs-plugin-info-dialog.php +1 -1
- freemius/includes/managers/class-fs-admin-notice-manager.php +25 -69
- freemius/includes/managers/class-fs-clone-manager.php +0 -1480
- freemius/includes/managers/class-fs-plugin-manager.php +5 -18
- freemius/includes/sdk/Exceptions/ArgumentNotExistException.php +5 -1
- freemius/includes/sdk/Exceptions/EmptyArgumentException.php +5 -1
- freemius/includes/sdk/Exceptions/Exception.php +5 -1
- freemius/includes/sdk/Exceptions/InvalidArgumentException.php +5 -1
- freemius/includes/sdk/Exceptions/OAuthException.php +5 -1
- freemius/includes/sdk/FreemiusBase.php +4 -0
- freemius/includes/sdk/FreemiusWordPress.php +4 -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 +409 -587
- freemius/package.json +27 -0
- freemius/readme.txt +182 -0
- freemius/require.php +5 -2
- freemius/start.php +1 -1
- freemius/templates/account.php +9 -38
- freemius/templates/account/partials/addon.php +6 -1
- freemius/templates/account/partials/site.php +3 -3
- freemius/templates/account/payments.php +11 -10
- freemius/templates/admin-notice.php +1 -4
- freemius/templates/ajax-loader.php +6 -1
- freemius/templates/clone-resolution-js.php +0 -77
- freemius/templates/connect.php +7 -16
- freemius/templates/debug.php +9 -20
- freemius/templates/firewall-issues-js.php +10 -6
- freemius/templates/forms/deactivation/form.php +543 -666
- freemius/templates/forms/email-address-update.php +0 -347
- freemius/templates/forms/license-activation.php +5 -33
- freemius/templates/partials/network-activation.php +6 -1
- freemius/templates/plugin-info/features.php +1 -1
- freemius/templates/powered-by.php +7 -7
- freemius/templates/pricing.php +10 -11
- freemius/templates/sticky-admin-notice-js.php +4 -2
- readme.txt +5 -1
- user-menus.php +2 -2
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-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 #
|
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 +1,2 @@
|
|
1 |
-
.fs-badge{position:absolute;top:10px;right:0;background:#71ae00;color:#fff;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,.3);-webkit-box-shadow:0 2px 1px -1px rgba(0,0,0,.3);box-shadow:0 2px 1px -1px rgba(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,.15s;-o-transition:all,.15s;-ms-transition:all,.15s;-webkit-transition:all,.15s;transition:all,.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,.15s;-o-transition:all,.15s;-ms-transition:all,.15s;-webkit-transition:all,.15s;transition:all,.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:.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:#adff2f;display:block;padding:2px 10px;-moz-box-shadow:1px 1px 1px rgba(0,0,0,.3);-webkit-box-shadow:1px 1px 1px rgba(0,0,0,.3);box-shadow:1px 1px 1px rgba(0,0,0,.3);text-transform:uppercase;font-size:.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}}#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,.2);-webkit-box-shadow:1px 1px 1px rgba(0,0,0,.2);box-shadow:1px 1px 1px rgba(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:.9em}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper .nav-tab label{text-transform:uppercase;color:green;background:#adff2f;position:absolute;left:-1px;right:-1px;bottom:100%;border:1px solid #006400;padding:2px;text-align:center;font-size:.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:#adff2f}#plugin-information .plugin-information-pricing .fs-plan ul.fs-trial-terms{font-size:.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 #fff;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,.2),0px 4px 5px 0px rgba(0,0,0,.14),0px 1px 10px 0px rgba(0,0,0,.12);-webkit-box-shadow:0px 2px 4px -1px rgba(0,0,0,.2),0px 4px 5px 0px rgba(0,0,0,.14),0px 1px 10px 0px rgba(0,0,0,.12);box-shadow:0px 2px 4px -1px rgba(0,0,0,.2),0px 4px 5px 0px rgba(0,0,0,.14),0px 1px 10px 0px rgba(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}}/*# sourceMappingURL=add-ons.css.map */
|
|
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/assets/css/admin/affiliation.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
|
1 |
+
@charset "UTF-8";#fs_affiliation_content_wrapper #messages{margin-top:25px}#fs_affiliation_content_wrapper h3{font-size:24px;padding:0;margin-left:0}#fs_affiliation_content_wrapper ul li{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;list-style-type:none}#fs_affiliation_content_wrapper ul li:before{content:'✓';margin-right:10px;font-weight:bold}#fs_affiliation_content_wrapper p:not(.description),#fs_affiliation_content_wrapper li,#fs_affiliation_content_wrapper label{font-size:16px !important;line-height:26px !important}#fs_affiliation_content_wrapper .button{margin-top:20px;margin-bottom:7px;line-height:35px;height:40px;font-size:16px}#fs_affiliation_content_wrapper .button#cancel_button{margin-right:5px}#fs_affiliation_content_wrapper form .input-container{margin-bottom:15px}#fs_affiliation_content_wrapper form .input-container .input-label{font-weight:bold;display:block;width:100%}#fs_affiliation_content_wrapper form .input-container.input-container-text label,#fs_affiliation_content_wrapper form .input-container.input-container-text input,#fs_affiliation_content_wrapper form .input-container.input-container-text textarea{display:block}#fs_affiliation_content_wrapper form .input-container #add_domain,#fs_affiliation_content_wrapper form .input-container .remove-domain{text-decoration:none;display:inline-block;margin-top:3px}#fs_affiliation_content_wrapper form .input-container #add_domain:focus,#fs_affiliation_content_wrapper form .input-container .remove-domain:focus{box-shadow:none}#fs_affiliation_content_wrapper form .input-container #add_domain.disabled,#fs_affiliation_content_wrapper form .input-container .remove-domain.disabled{color:#aaa;cursor:default}#fs_affiliation_content_wrapper form #extra_domains_container .description{margin-top:0;position:relative;top:-4px}#fs_affiliation_content_wrapper form #extra_domains_container .extra-domain-input-container{margin-bottom:15px}#fs_affiliation_content_wrapper form #extra_domains_container .extra-domain-input-container .domain{display:inline-block;margin-right:5px}#fs_affiliation_content_wrapper form #extra_domains_container .extra-domain-input-container .domain:last-of-type{margin-bottom:0}
|
freemius/assets/css/admin/checkout.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
@media screen and (max-width: 782px){#wpbody-content{padding-bottom:0 !important}}
|
1 |
+
@media screen and (max-width: 782px){#wpbody-content{padding-bottom:0 !important}}
|
freemius/assets/css/admin/clone-resolution.css
DELETED
@@ -1 +0,0 @@
|
|
1 |
-
.fs-notice[data-id^=clone_resolution_options_notice]{padding:0;color:inherit !important}.fs-notice[data-id^=clone_resolution_options_notice] .fs-notice-body{padding:0;margin-bottom:0}.fs-notice[data-id^=clone_resolution_options_notice] .fs-notice-header{padding:5px 10px}.fs-notice[data-id^=clone_resolution_options_notice] ol{margin-top:0;margin-bottom:0}.fs-notice[data-id^=clone_resolution_options_notice] .fs-clone-resolution-options-container{display:flex;flex-direction:row;padding:0 10px 10px}@media(max-width: 750px){.fs-notice[data-id^=clone_resolution_options_notice] .fs-clone-resolution-options-container{flex-direction:column}}.fs-notice[data-id^=clone_resolution_options_notice] .fs-clone-resolution-option{border:1px solid #ccc;padding:10px 10px 15px 10px;flex:auto;margin:5px}.fs-notice[data-id^=clone_resolution_options_notice] .fs-clone-resolution-option:first-child{margin-left:0}.fs-notice[data-id^=clone_resolution_options_notice] .fs-clone-resolution-option:last-child{margin-right:0}.fs-notice[data-id^=clone_resolution_options_notice] .fs-clone-resolution-option strong{font-size:1.2em;padding:2px;line-height:1.5em}.fs-notice[data-id^=clone_resolution_options_notice] a{text-decoration:none}.fs-notice[data-id^=clone_resolution_options_notice] .button{margin-right:10px}.rtl .fs-notice[data-id^=clone_resolution_options_notice] .button{margin-right:0;margin-left:10px}.fs-notice[data-id^=clone_resolution_options_notice] .fs-clone-documentation-container{padding:0 10px 15px}.fs-notice[data-id=temporary_duplicate_notice] #fs_clone_resolution_error_message{border:1px solid #d3135a;background:#fee;color:#d3135a;padding:10px}.fs-notice[data-id=temporary_duplicate_notice] ol{margin-top:0}/*# sourceMappingURL=clone-resolution.css.map */
|
|
freemius/assets/css/admin/common.css
CHANGED
@@ -1 +1,2 @@
|
|
1 |
-
.fs-badge{position:absolute;top:10px;right:0;background:#71ae00;color
|
|
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)}.theme-browser .theme .fs-premium-theme-badge-container{position:absolute;right:0;top:0}.theme-browser .theme .fs-premium-theme-badge-container .fs-badge{position:relative;top:0;margin-top:10px;text-align:center}.theme-browser .theme .fs-premium-theme-badge-container .fs-badge.fs-premium-theme-badge{font-size:1.1em}.theme-browser .theme .fs-premium-theme-badge-container .fs-badge.fs-beta-theme-badge{background:#00a0d2}.fs-switch{position:relative;display:inline-block;color:#ccc;text-shadow:0 1px 1px rgba(255,255,255,0.8);height:18px;padding:6px 6px 5px 6px;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);background:#ececec;box-shadow:0 0 4px rgba(0,0,0,0.1),inset 0 1px 3px 0 rgba(0,0,0,0.1);cursor:pointer}.fs-switch span{display:inline-block;width:35px;text-transform:uppercase}.fs-switch .fs-toggle{position:absolute;top:1px;width:37px;height:25px;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.3);border-radius:4px;background:#fff;background-color:#fff;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #ececec), color-stop(1, #fff));background-image:-webkit-linear-gradient(top, #ececec, #fff);background-image:-moz-linear-gradient(top, #ececec, #fff);background-image:-ms-linear-gradient(top, #ececec, #fff);background-image:-o-linear-gradient(top, #ececec, #fff);background-image:linear-gradient(top, bottom, #ececec, #fff);box-shadow:inset 0 1px 0 0 rgba(255,255,255,0.5);z-index:999;-moz-transition:0.4s cubic-bezier(0.54, 1.6, 0.5, 1);-o-transition:0.4s cubic-bezier(0.54, 1.6, 0.5, 1);-ms-transition:0.4s cubic-bezier(0.54, 1.6, 0.5, 1);-webkit-transition:0.4s cubic-bezier(0.54, 1.6, 0.5, 1);transition:0.4s cubic-bezier(0.54, 1.6, 0.5, 1)}.fs-switch.fs-off .fs-toggle{left:2%}.fs-switch.fs-on .fs-toggle{left:54%}.fs-switch.fs-round{top:8px;padding:4px 25px;-moz-border-radius:24px;-webkit-border-radius:24px;border-radius:24px}.fs-switch.fs-round .fs-toggle{top:0;width:24px;height:24px;-moz-border-radius:24px;-webkit-border-radius:24px;border-radius:24px}.fs-switch.fs-round.fs-off .fs-toggle{left:-1px}.fs-switch.fs-round.fs-on{background:#0085ba}.fs-switch.fs-round.fs-on .fs-toggle{left:25px}.fs-switch.fs-small.fs-round{padding:1px 19px}.fs-switch.fs-small.fs-round .fs-toggle{top:0;width:18px;height:18px;-moz-border-radius:18px;-webkit-border-radius:18px;border-radius:18px}.fs-switch.fs-small.fs-round.fs-on .fs-toggle{left:19px}.fs-switch-feedback{margin-left:10px}.fs-switch-feedback.success{color:#71ae00}.rtl .fs-switch-feedback{margin-left:0;margin-right:10px}#fs_frame{line-height:0;font-size:0}.fs-full-size-wrapper{margin:40px 0 -65px -20px}@media (max-width: 600px){.fs-full-size-wrapper{margin:0 0 -65px -10px}}
|
2 |
+
.fs-notice{position:relative}.fs-notice.fs-has-title{margin-bottom:30px !important}.fs-notice.success{color:green}.fs-notice.promotion{border-color:#00a0d2 !important;background-color:#f2fcff !important}.fs-notice .fs-notice-body{margin:.5em 0;padding:2px}.fs-notice .fs-close{cursor:pointer;color:#aaa;float:right}.fs-notice .fs-close:hover{color:#666}.fs-notice .fs-close>*{margin-top:7px;display:inline-block}.fs-notice label.fs-plugin-title{background:rgba(0,0,0,0.3);color:#fff;padding:2px 10px;position:absolute;top:100%;bottom:auto;right:auto;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px;left:10px;font-size:12px;font-weight:bold;cursor:auto}div.fs-notice.updated,div.fs-notice.success,div.fs-notice.promotion{display:block !important}.rtl .fs-notice .fs-close{float:left}.fs-secure-notice{position:fixed;top:32px;left:160px;right:0;background:#ebfdeb;padding:10px 20px;color:green;z-index:9999;-moz-box-shadow:0 2px 2px rgba(6,113,6,0.3);-webkit-box-shadow:0 2px 2px rgba(6,113,6,0.3);box-shadow:0 2px 2px rgba(6,113,6,0.3);opacity:0.95;filter:alpha(opacity=95)}.fs-secure-notice:hover{opacity:1;filter:alpha(opacity=100)}.fs-secure-notice a.fs-security-proof{color:green;text-decoration:none}@media screen and (max-width: 960px){.fs-secure-notice{left:36px}}@media screen and (max-width: 600px){.fs-secure-notice{display:none}}@media screen and (max-width: 1250px){#fs_promo_tab{display:none}}@media screen and (max-width: 782px){.fs-secure-notice{left:0;top:46px;text-align:center}}span.fs-submenu-item.fs-sub:before{content:'\21B3';padding:0 5px}.rtl span.fs-submenu-item.fs-sub:before{content:'\21B2'}.fs-submenu-item.pricing.upgrade-mode{color:greenyellow}.fs-submenu-item.pricing.trial-mode{color:#83e2ff}#adminmenu .update-plugins.fs-trial{background-color:#00b9eb}.fs-ajax-spinner{border:0;width:20px;height:20px;margin-right:5px;vertical-align:sub;display:inline-block;background:url("/wp-admin/images/wpspin_light-2x.gif");background-size:contain;margin-bottom:-2px}.wrap.fs-section h2{text-align:left}.plugins p.fs-upgrade-notice{border:0;background-color:#d54e21;padding:10px;color:#f9f9f9;margin-top:10px}
|
freemius/assets/css/admin/connect.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
#fs_connect{width:480px;-moz-box-shadow:0px 1px 2px rgba(0,0,0
|
1 |
+
#fs_connect{width:480px;-moz-box-shadow:0px 1px 2px rgba(0,0,0,0.3);-webkit-box-shadow:0px 1px 2px rgba(0,0,0,0.3);box-shadow:0px 1px 2px rgba(0,0,0,0.3);margin:20px 0}@media screen and (max-width: 479px){#fs_connect{-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;width:auto;margin:0 0 0 -10px}}#fs_connect .fs-content{background:#fff;padding:15px 20px}#fs_connect .fs-content .fs-error{background:snow;color:#d3135a;border:1px solid #d3135a;-moz-box-shadow:0 1px 1px 0 rgba(0,0,0,0.1);-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,0.1);box-shadow:0 1px 1px 0 rgba(0,0,0,0.1);text-align:center;padding:5px;margin-bottom:10px}#fs_connect .fs-content p{margin:0;padding:0;font-size:1.2em}#fs_connect .fs-license-key-container{position:relative;width:280px;margin:10px auto 0 auto}#fs_connect .fs-license-key-container input{width:100%}#fs_connect .fs-license-key-container .dashicons{position:absolute;top:5px;right:5px}#fs_connect.require-license-key .fs-sites-list-container td{cursor:pointer}#fs_connect #delegate_to_site_admins{margin-right:15px;float:right;height:26px;vertical-align:middle;line-height:37px;font-weight:bold;border-bottom:1px dashed;text-decoration:none}#fs_connect #delegate_to_site_admins.rtl{margin-left:15px;margin-right:0}#fs_connect .fs-actions{padding:10px 20px;background:#C0C7CA}#fs_connect .fs-actions .button{padding:0 10px 1px;line-height:35px;height:37px;font-size:16px;margin-bottom:0}#fs_connect .fs-actions .button .dashicons{font-size:37px;margin-left:-8px;margin-right:12px}#fs_connect .fs-actions .button.button-primary{padding-right:15px;padding-left:15px}#fs_connect .fs-actions .button.button-primary:after{content:' \279C'}#fs_connect .fs-actions .button.button-primary.fs-loading:after{content:''}#fs_connect .fs-actions .button.button-secondary{float:right}#fs_connect.fs-anonymous-disabled .fs-actions .button.button-primary{width:100%}#fs_connect .fs-permissions{padding:10px 20px;background:#FEFEFE;-moz-transition:background 0.5s ease;-o-transition:background 0.5s ease;-ms-transition:background 0.5s ease;-webkit-transition:background 0.5s ease;transition:background 0.5s ease}#fs_connect .fs-permissions .fs-license-sync-disclaimer{text-align:center;margin-top:0}#fs_connect .fs-permissions>.fs-trigger{font-size:0.9em;text-decoration:none;text-align:center;display:block}#fs_connect .fs-permissions ul{height:0;overflow:hidden;margin:0}#fs_connect .fs-permissions ul li{margin-bottom:12px}#fs_connect .fs-permissions ul li:last-child{margin-bottom:0}#fs_connect .fs-permissions ul li>i.dashicons{float:left;font-size:40px;width:40px;height:40px}#fs_connect .fs-permissions ul li .fs-switch{float:right}#fs_connect .fs-permissions ul li .fs-permission-description{margin-left:55px}#fs_connect .fs-permissions ul li .fs-permission-description span{font-weight:bold;text-transform:uppercase;color:#23282d}#fs_connect .fs-permissions ul li .fs-permission-description p{margin:2px 0 0 0}#fs_connect .fs-permissions.fs-open{background:#fff}#fs_connect .fs-permissions.fs-open ul{overflow:initial;height:auto;margin:20px 20px 10px 20px}@media screen and (max-width: 479px){#fs_connect .fs-permissions{background:#fff}#fs_connect .fs-permissions .fs-trigger{display:none}#fs_connect .fs-permissions ul{height:auto;margin:20px}}#fs_connect .fs-freemium-licensing{padding:8px;background:#777;color:#fff}#fs_connect .fs-freemium-licensing p{text-align:center;display:block;margin:0;padding:0}#fs_connect .fs-freemium-licensing a{color:#C2EEFF;text-decoration:underline}#fs_connect .fs-visual{padding:12px;line-height:0;background:#fafafa;height:80px;position:relative}#fs_connect .fs-visual .fs-site-icon{position:absolute;left:20px;top:10px}#fs_connect .fs-visual .fs-connect-logo{position:absolute;right:20px;top:10px}#fs_connect .fs-visual .fs-plugin-icon{position:absolute;top:10px;left:50%;margin-left:-40px}#fs_connect .fs-visual .fs-plugin-icon,#fs_connect .fs-visual .fs-site-icon,#fs_connect .fs-visual img,#fs_connect .fs-visual object{width:80px;height:80px}#fs_connect .fs-visual .dashicons-wordpress{font-size:64px;background:#01749a;color:#fff;width:64px;height:64px;padding:8px}#fs_connect .fs-visual .dashicons-plus{position:absolute;top:50%;font-size:30px;margin-top:-10px;color:#bbb}#fs_connect .fs-visual .dashicons-plus.fs-first{left:28%}#fs_connect .fs-visual .dashicons-plus.fs-second{left:65%}#fs_connect .fs-visual .fs-plugin-icon,#fs_connect .fs-visual .fs-connect-logo,#fs_connect .fs-visual .fs-site-icon{border:1px solid #ccc;padding:1px;background:#fff}#fs_connect .fs-terms{text-align:center;font-size:0.85em;padding:5px;background:rgba(0,0,0,0.05)}#fs_connect .fs-terms,#fs_connect .fs-terms a{color:#999}#fs_connect .fs-terms a{text-decoration:none}.fs-multisite-options-container{margin-top:10px;border:1px solid #ccc;padding:5px}.fs-multisite-options-container a{text-decoration:none}.fs-multisite-options-container a:focus{box-shadow:none}.fs-multisite-options-container a.selected{font-weight:bold}.fs-multisite-options-container.fs-apply-on-all-sites{border:0 none;padding:0}.fs-multisite-options-container.fs-apply-on-all-sites .fs-all-sites-options{border-spacing:0}.fs-multisite-options-container.fs-apply-on-all-sites .fs-all-sites-options td:not(:first-child){display:none}.fs-multisite-options-container .fs-sites-list-container{display:none;overflow:auto}.fs-multisite-options-container .fs-sites-list-container table td{border-top:1px solid #ccc;padding:4px 2px}.fs-tooltip-trigger{position:relative}.fs-tooltip-trigger:not(a){cursor:help}.fs-tooltip-trigger .fs-tooltip{opacity:0;visibility:hidden;-moz-transition:opacity 0.3s ease-in-out;-o-transition:opacity 0.3s ease-in-out;-ms-transition:opacity 0.3s ease-in-out;-webkit-transition:opacity 0.3s ease-in-out;transition:opacity 0.3s ease-in-out;position:absolute;background:rgba(0,0,0,0.8);color:#fff !important;font-family:'arial', serif;font-size:12px;padding:10px;z-index:999999;bottom:100%;margin-bottom:5px;left:-17px;right:0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;-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);line-height:1.3em;font-weight:bold;text-align:left;text-transform:none !important}.rtl .fs-tooltip-trigger .fs-tooltip{text-align:right;left:auto;right:-17px}.fs-tooltip-trigger .fs-tooltip::after{content:' ';display:block;width:0;height:0;border-style:solid;border-width:5px 5px 0 5px;border-color:rgba(0,0,0,0.8) transparent transparent transparent;position:absolute;top:100%;left:21px}.rtl .fs-tooltip-trigger .fs-tooltip::after{right:21px;left:auto}.fs-tooltip-trigger:hover .fs-tooltip{visibility:visible;opacity:1}#fs_marketing_optin{display:none;margin-top:10px;border:1px solid #ccc;padding:10px;line-height:1.5em}#fs_marketing_optin .fs-message{display:block;margin-bottom:5px;font-size:1.05em;font-weight:600}#fs_marketing_optin.error{border:1px solid #d3135a;background:#fee}#fs_marketing_optin.error .fs-message{color:#d3135a}#fs_marketing_optin .fs-input-container{margin-top:5px}#fs_marketing_optin .fs-input-container label{margin-top:5px;display:block}#fs_marketing_optin .fs-input-container label input{float:left;margin:1px 0 0 0}#fs_marketing_optin .fs-input-container label:first-child{display:block;margin-bottom:2px}#fs_marketing_optin .fs-input-label{display:block;margin-left:20px}#fs_marketing_optin .fs-input-label .underlined{text-decoration:underline}.rtl #fs_marketing_optin .fs-input-container label input{float:right}.rtl #fs_marketing_optin .fs-input-label{margin-left:0;margin-right:20px}.rtl #fs_connect .fs-actions{padding:10px 20px;background:#C0C7CA}.rtl #fs_connect .fs-actions .button .dashicons{font-size:37px;margin-left:-8px;margin-right:12px}.rtl #fs_connect .fs-actions .button.button-primary:after{content:' \000bb'}.rtl #fs_connect .fs-actions .button.button-primary.fs-loading:after{content:''}.rtl #fs_connect .fs-actions .button.button-secondary{float:left}.rtl #fs_connect .fs-permissions ul li .fs-permission-description{margin-right:55px;margin-left:0}.rtl #fs_connect .fs-permissions ul li .fs-switch{float:left}.rtl #fs_connect .fs-permissions ul li i.dashicons{float:right}.rtl #fs_connect .fs-visual .fs-site-icon{right:20px;left:auto}.rtl #fs_connect .fs-visual .fs-connect-logo{right:auto;left:20px}#fs_theme_connect_wrapper{position:fixed;top:0;height:100%;width:100%;z-index:99990;background:rgba(0,0,0,0.75);text-align:center;overflow-y:auto}#fs_theme_connect_wrapper:before{content:"";display:inline-block;vertical-align:middle;height:100%}#fs_theme_connect_wrapper>button.close{color:white;cursor:pointer;height:40px;width:40px;position:absolute;right:0;border:0;background-color:transparent;top:32px}#fs_theme_connect_wrapper #fs_connect{top:0;text-align:left;display:inline-block;vertical-align:middle;margin-top:52px;margin-bottom:20px}#fs_theme_connect_wrapper #fs_connect .fs-terms{background:rgba(140,140,140,0.64)}#fs_theme_connect_wrapper #fs_connect .fs-terms,#fs_theme_connect_wrapper #fs_connect .fs-terms a{color:#c5c5c5}.wp-pointer-content #fs_connect{margin:0;-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none}.fs-opt-in-pointer .wp-pointer-content{padding:0}.fs-opt-in-pointer.wp-pointer-top .wp-pointer-arrow{border-bottom-color:#dfdfdf}.fs-opt-in-pointer.wp-pointer-top .wp-pointer-arrow-inner{border-bottom-color:#fafafa}.fs-opt-in-pointer.wp-pointer-bottom .wp-pointer-arrow{border-top-color:#dfdfdf}.fs-opt-in-pointer.wp-pointer-bottom .wp-pointer-arrow-inner{border-top-color:#fafafa}.fs-opt-in-pointer.wp-pointer-left .wp-pointer-arrow{border-right-color:#dfdfdf}.fs-opt-in-pointer.wp-pointer-left .wp-pointer-arrow-inner{border-right-color:#fafafa}.fs-opt-in-pointer.wp-pointer-right .wp-pointer-arrow{border-left-color:#dfdfdf}.fs-opt-in-pointer.wp-pointer-right .wp-pointer-arrow-inner{border-left-color:#fafafa}#license_issues_link{display:block;text-align:center;font-size:0.9em;margin-top:10px}
|
freemius/assets/css/admin/debug.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.fs-switch-label{font-size:20px;line-height:31px;margin:0 5px}#fs_log_book table{font-family:Consolas,Monaco,monospace;font-size:12px}#fs_log_book table th{color:#ccc}#fs_log_book table tr{background:#232525}#fs_log_book table tr.alternate{background:#2b2b2b}#fs_log_book table tr td.fs-col--logger{color:#5a7435}#fs_log_book table tr td.fs-col--type{color:#ffc861}#fs_log_book table tr td.fs-col--function{color:#a7b7b1;font-weight:bold}#fs_log_book table tr td.fs-col--message,#fs_log_book table tr td.fs-col--message a{color:#9a73ac !important}#fs_log_book table tr td.fs-col--file{color:#d07922}#fs_log_book table tr td.fs-col--timestamp{color:#6596be}
|
1 |
+
.fs-switch-label{font-size:20px;line-height:31px;margin:0 5px}#fs_log_book table{font-family:Consolas,Monaco,monospace;font-size:12px}#fs_log_book table th{color:#ccc}#fs_log_book table tr{background:#232525}#fs_log_book table tr.alternate{background:#2b2b2b}#fs_log_book table tr td.fs-col--logger{color:#5a7435}#fs_log_book table tr td.fs-col--type{color:#ffc861}#fs_log_book table tr td.fs-col--function{color:#a7b7b1;font-weight:bold}#fs_log_book table tr td.fs-col--message,#fs_log_book table tr td.fs-col--message a{color:#9a73ac !important}#fs_log_book table tr td.fs-col--file{color:#d07922}#fs_log_book table tr td.fs-col--timestamp{color:#6596be}
|
freemius/assets/css/admin/dialog-boxes.css
CHANGED
@@ -1 +1,2 @@
|
|
1 |
-
.fs-modal{position:fixed;overflow:auto;height:100%;width:100%;top:0;z-index:100000;display:none;background:rgba(0,0,0,.6)}.fs-modal .dashicons{vertical-align:middle}.fs-modal .fs-modal-dialog{background:transparent;position:absolute;left:50%;margin-left:-298px;padding-bottom:30px;top:-100%;z-index:100001;width:596px}@media(max-width: 650px){.fs-modal .fs-modal-dialog{margin-left:-50%;box-sizing:border-box;padding-left:10px;padding-right:10px;width:100%}.fs-modal .fs-modal-dialog .fs-modal-panel>h3>strong{font-size:1.3em}}.fs-modal.active{display:block}.fs-modal.active:before{display:block}.fs-modal.active .fs-modal-dialog{top:10%}.fs-modal.fs-success .fs-modal-header{border-bottom-color:#46b450}.fs-modal.fs-success .fs-modal-body{background-color:#f7fff7}.fs-modal.fs-warn .fs-modal-header{border-bottom-color:#ffb900}.fs-modal.fs-warn .fs-modal-body{background-color:#fff8e5}.fs-modal.fs-error .fs-modal-header{border-bottom-color:#dc3232}.fs-modal.fs-error .fs-modal-body{background-color:#ffeaea}.fs-modal .fs-modal-body,.fs-modal .fs-modal-footer{border:0;background:#fefefe;padding:20px}.fs-modal .fs-modal-header{border-bottom:#eee solid 1px;background:#fbfbfb;padding:15px 20px;position:relative;margin-bottom:-10px}.fs-modal .fs-modal-header h4{margin:0;padding:0;text-transform:uppercase;font-size:1.2em;font-weight:bold;color:#cacaca;text-shadow:1px 1px 1px #fff;letter-spacing:.6px;-webkit-font-smoothing:antialiased}.fs-modal .fs-modal-header .fs-close{position:absolute;right:10px;top:12px;cursor:pointer;color:#bbb;-moz-border-radius:20px;-webkit-border-radius:20px;border-radius:20px;padding:3px;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;-ms-transition:all .2s ease-in-out;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.fs-modal .fs-modal-header .fs-close:hover{color:#fff;background:#aaa}.fs-modal .fs-modal-header .fs-close .dashicons,.fs-modal .fs-modal-header .fs-close:hover .dashicons{text-decoration:none}.fs-modal .fs-modal-body{border-bottom:0}.fs-modal .fs-modal-body p{font-size:14px}.fs-modal .fs-modal-body h2{font-size:20px;line-height:1.5em}.fs-modal .fs-modal-body>div{margin-top:10px}.fs-modal .fs-modal-body>div h2{font-weight:bold;font-size:20px;margin-top:0}.fs-modal .fs-modal-footer{border-top:#eee solid 1px;text-align:right}.fs-modal .fs-modal-footer>.button{margin:0 7px}.fs-modal .fs-modal-footer>.button:last-of-type{margin:0}.fs-modal .fs-modal-panel>.notice.inline{margin:0;display:none}.fs-modal .fs-modal-panel:not(.active){display:none}.rtl .fs-modal .fs-modal-header .fs-close{right:auto;left:20px}.rtl .fs-modal .fs-modal-footer{text-align:left}body.has-fs-modal{overflow:hidden}.fs-modal.fs-modal-deactivation-feedback .reason-input,.fs-modal.fs-modal-deactivation-feedback .internal-message{margin:3px 0 3px 22px}.fs-modal.fs-modal-deactivation-feedback .reason-input input,.fs-modal.fs-modal-deactivation-feedback .reason-input textarea,.fs-modal.fs-modal-deactivation-feedback .internal-message input,.fs-modal.fs-modal-deactivation-feedback .internal-message textarea{width:100%}.fs-modal.fs-modal-deactivation-feedback li.reason.has-internal-message .internal-message{border:1px solid #ccc;padding:7px;display:none}@media(max-width: 650px){.fs-modal.fs-modal-deactivation-feedback li.reason li.reason{margin-bottom:10px}.fs-modal.fs-modal-deactivation-feedback li.reason li.reason .reason-input,.fs-modal.fs-modal-deactivation-feedback li.reason li.reason .internal-message{margin-left:29px}.fs-modal.fs-modal-deactivation-feedback li.reason li.reason label{display:table}.fs-modal.fs-modal-deactivation-feedback li.reason li.reason label>span{display:table-cell;font-size:1.3em}}.fs-modal.fs-modal-deactivation-feedback .anonymous-feedback-label,.fs-modal.fs-modal-deactivation-feedback .feedback-from-snooze-label{float:left;line-height:30px}.rtl .fs-modal.fs-modal-deactivation-feedback .anonymous-feedback-label,.rtl .fs-modal.fs-modal-deactivation-feedback .feedback-from-snooze-label{float:right}.fs-modal.fs-modal-deactivation-feedback .fs-modal-panel{margin-top:0 !important}.fs-modal.fs-modal-deactivation-feedback .fs-modal-panel h3{margin-top:0;line-height:1.5em}#the-list .deactivate>.fs-slug{display:none}.fs-modal.fs-modal-subscription-cancellation .fs-price-increase-warning{color:red;font-weight:bold;padding:0 25px;margin-bottom:0}.fs-modal.fs-modal-subscription-cancellation ul.subscription-actions label input{float:left;top:5px;position:relative}.rtl .fs-modal.fs-modal-subscription-cancellation ul.subscription-actions label input{float:right}.fs-modal.fs-modal-subscription-cancellation ul.subscription-actions label span{display:block;margin-left:24px}.rtl .fs-modal.fs-modal-subscription-cancellation ul.subscription-actions label span{margin-left:0;margin-right:24px}.fs-modal.fs-modal-license-activation .fs-modal-body input.fs-license-key{width:100%}.fs-license-options-container table,.fs-license-options-container table select,.fs-license-options-container table .fs-available-license-key{width:100%}.fs-license-options-container table td:first-child{width:1%}.fs-license-options-container table .fs-other-license-key-container label{position:relative;top:6px;float:left;margin-right:5px}.fs-license-options-container table .fs-other-license-key-container div{overflow:hidden;width:auto;height:30px;display:block;top:2px;position:relative}.fs-license-options-container table .fs-other-license-key-container div input{margin:0}.fs-sites-list-container td{cursor:pointer}.fs-modal.fs-modal-user-change .fs-modal-body input#fs_other_email_address{width:100%}.fs-user-change-options-container table{width:100%;border-collapse:collapse}.fs-user-change-options-container table tr{display:block;margin-bottom:2px}.fs-user-change-options-container table .fs-email-address-container td{display:inline-block}.fs-user-change-options-container table .fs-email-address-container input[type=radio]{margin-bottom:0;margin-top:0}.fs-user-change-options-container table .fs-other-email-address-container{width:100%}.fs-user-change-options-container table .fs-other-email-address-container>div{display:table;width:100%}.fs-user-change-options-container table .fs-other-email-address-container>div label,.fs-user-change-options-container table .fs-other-email-address-container>div>div{display:table-cell}.fs-user-change-options-container table .fs-other-email-address-container>div label{width:1%;padding-left:3px;padding-right:3px}.fs-user-change-options-container table .fs-other-email-address-container>div>div{width:auto}.fs-user-change-options-container table .fs-other-email-address-container>div>div input{width:100%}.fs-modal.fs-modal-developer-license-debug-mode .fs-modal-body input.fs-license-or-user-key{width:100%}.fs-multisite-options-container{margin-top:10px;border:1px solid #ccc;padding:5px}.fs-multisite-options-container a{text-decoration:none}.fs-multisite-options-container a:focus{box-shadow:none}.fs-multisite-options-container a.selected{font-weight:bold}.fs-multisite-options-container.fs-apply-on-all-sites{border:0 none;padding:0}.fs-multisite-options-container.fs-apply-on-all-sites .fs-all-sites-options{border-spacing:0}.fs-multisite-options-container.fs-apply-on-all-sites .fs-all-sites-options td:not(:first-child){display:none}.fs-multisite-options-container .fs-sites-list-container{display:none;overflow:auto}.fs-multisite-options-container .fs-sites-list-container table td{border-top:1px solid #ccc;padding:4px 2px}.fs-modal.fs-modal-license-key-resend .email-address-container{overflow:hidden;padding-right:2px}.fs-modal.fs-modal-license-key-resend.fs-freemium input.email-address{width:300px}.fs-modal.fs-modal-license-key-resend.fs-freemium label{display:block;margin-bottom:10px}.fs-modal.fs-modal-license-key-resend.fs-premium input.email-address{width:100%}.fs-modal.fs-modal-license-key-resend.fs-premium .button-container{float:right;margin-left:7px}@media(max-width: 650px){.fs-modal.fs-modal-license-key-resend.fs-premium .button-container{margin-top:2px}}.rtl .fs-modal.fs-modal-license-key-resend .fs-modal-body .input-container>.email-address-container{padding-left:2px;padding-right:0}.rtl .fs-modal.fs-modal-license-key-resend .fs-modal-body .button-container{float:left;margin-right:7px;margin-left:0}a.show-license-resend-modal{margin-top:4px;display:inline-block}.fs-modal.fs-modal-email-address-update .fs-modal-body input[type=text]{width:100%}.fs-modal.fs-modal-email-address-update p{margin-bottom:0}.fs-modal.fs-modal-email-address-update ul{margin:1em .5em}.fs-modal.fs-modal-email-address-update ul li label span{float:left;margin-top:0}.fs-modal.fs-modal-email-address-update ul li label span:last-child{display:block;float:none;margin-left:20px}.fs-ajax-loader{position:relative;width:170px;height:20px;margin:auto}.fs-ajax-loader .fs-ajax-loader-bar{position:absolute;top:0;background-color:#0074a3;width:20px;height:20px;-webkit-animation-name:bounce_ajaxLoader;-moz-animation-name:bounce_ajaxLoader;-ms-animation-name:bounce_ajaxLoader;-o-animation-name:bounce_ajaxLoader;animation-name:bounce_ajaxLoader;-webkit-animation-duration:1.5s;-moz-animation-duration:1.5s;-ms-animation-duration:1.5s;-o-animation-duration:1.5s;animation-duration:1.5s;animation-iteration-count:infinite;-o-animation-iteration-count:infinite;-ms-animation-iteration-count:infinite;-webkit-animation-iteration-count:infinite;-moz-animation-iteration-count:infinite;-webkit-animation-direction:normal;-moz-animation-direction:normal;-ms-animation-direction:normal;-o-animation-direction:normal;animation-direction:normal;-moz-transform:.3;-o-transform:.3;-ms-transform:.3;-webkit-transform:.3;transform:.3}.fs-ajax-loader .fs-ajax-loader-bar-1{left:0px;animation-delay:0.6s;-o-animation-delay:0.6s;-ms-animation-delay:0.6s;-webkit-animation-delay:0.6s;-moz-animation-delay:0.6s}.fs-ajax-loader .fs-ajax-loader-bar-2{left:19px;animation-delay:0.75s;-o-animation-delay:0.75s;-ms-animation-delay:0.75s;-webkit-animation-delay:0.75s;-moz-animation-delay:0.75s}.fs-ajax-loader .fs-ajax-loader-bar-3{left:38px;animation-delay:0.9s;-o-animation-delay:0.9s;-ms-animation-delay:0.9s;-webkit-animation-delay:0.9s;-moz-animation-delay:0.9s}.fs-ajax-loader .fs-ajax-loader-bar-4{left:57px;animation-delay:1.05s;-o-animation-delay:1.05s;-ms-animation-delay:1.05s;-webkit-animation-delay:1.05s;-moz-animation-delay:1.05s}.fs-ajax-loader .fs-ajax-loader-bar-5{left:76px;animation-delay:1.2s;-o-animation-delay:1.2s;-ms-animation-delay:1.2s;-webkit-animation-delay:1.2s;-moz-animation-delay:1.2s}.fs-ajax-loader .fs-ajax-loader-bar-6{left:95px;animation-delay:1.35s;-o-animation-delay:1.35s;-ms-animation-delay:1.35s;-webkit-animation-delay:1.35s;-moz-animation-delay:1.35s}.fs-ajax-loader .fs-ajax-loader-bar-7{left:114px;animation-delay:1.5s;-o-animation-delay:1.5s;-ms-animation-delay:1.5s;-webkit-animation-delay:1.5s;-moz-animation-delay:1.5s}.fs-ajax-loader .fs-ajax-loader-bar-8{left:133px;animation-delay:1.65s;-o-animation-delay:1.65s;-ms-animation-delay:1.65s;-webkit-animation-delay:1.65s;-moz-animation-delay:1.65s}@-moz-keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}@-ms-keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}@-o-keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}@-webkit-keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}@keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}.fs-modal-auto-install #request-filesystem-credentials-form h2,.fs-modal-auto-install #request-filesystem-credentials-form .request-filesystem-credentials-action-buttons{display:none}.fs-modal-auto-install #request-filesystem-credentials-form input[type=password],.fs-modal-auto-install #request-filesystem-credentials-form input[type=email],.fs-modal-auto-install #request-filesystem-credentials-form input[type=text]{-webkit-appearance:none;padding:10px 10px 5px 10px;width:300px;max-width:100%}.fs-modal-auto-install #request-filesystem-credentials-form>div,.fs-modal-auto-install #request-filesystem-credentials-form label,.fs-modal-auto-install #request-filesystem-credentials-form fieldset{width:300px;max-width:100%;margin:0 auto;display:block}.button-primary.warn{box-shadow:0 1px 0 #d2593c;text-shadow:0 -1px 1px #d2593c,1px 0 1px #d2593c,0 1px 1px #d2593c,-1px 0 1px #d2593c;background:#f56a48;border-color:#ec6544 #d2593c #d2593c}.button-primary.warn:hover{background:#fd6d4a;border-color:#d2593c}.button-primary.warn:focus{box-shadow:0 1px 0 #dd6041,0 0 2px 1px #e4a796}.button-primary.warn:active{background:#dd6041;border-color:#d2593c;box-shadow:inset 0 2px 0 #d2593c}.button-primary.warn.disabled{color:#f5b3a1 !important;background:#e76444 !important;border-color:#d85e40 !important;text-shadow:0 -1px 0 rgba(0,0,0,.1) !important}/*# sourceMappingURL=dialog-boxes.css.map */
|
|
1 |
+
.fs-modal{position:fixed;overflow:auto;height:100%;width:100%;top:0;z-index:100000;display:none;background:rgba(0,0,0,0.6)}.fs-modal .dashicons{vertical-align:middle}.fs-modal .fs-modal-dialog{background:transparent;position:absolute;left:50%;margin-left:-298px;padding-bottom:30px;top:-100%;z-index:100001;width:596px}@media (max-width: 650px){.fs-modal .fs-modal-dialog{margin-left:-50%;box-sizing:border-box;padding-left:10px;padding-right:10px;width:100%}.fs-modal .fs-modal-dialog .fs-modal-panel>h3>strong{font-size:1.3em}}.fs-modal.active{display:block}.fs-modal.active:before{display:block}.fs-modal.active .fs-modal-dialog{top:10%}.fs-modal.fs-success .fs-modal-header{border-bottom-color:#46b450}.fs-modal.fs-success .fs-modal-body{background-color:#f7fff7}.fs-modal.fs-warn .fs-modal-header{border-bottom-color:#ffb900}.fs-modal.fs-warn .fs-modal-body{background-color:#fff8e5}.fs-modal.fs-error .fs-modal-header{border-bottom-color:#dc3232}.fs-modal.fs-error .fs-modal-body{background-color:#ffeaea}.fs-modal .fs-modal-body,.fs-modal .fs-modal-footer{border:0;background:#fefefe;padding:20px}.fs-modal .fs-modal-header{border-bottom:#eeeeee solid 1px;background:#fbfbfb;padding:15px 20px;position:relative;margin-bottom:-10px}.fs-modal .fs-modal-header h4{margin:0;padding:0;text-transform:uppercase;font-size:1.2em;font-weight:bold;color:#cacaca;text-shadow:1px 1px 1px #fff;letter-spacing:0.6px;-webkit-font-smoothing:antialiased}.fs-modal .fs-modal-header .fs-close{position:absolute;right:10px;top:12px;cursor:pointer;color:#bbb;-moz-border-radius:20px;-webkit-border-radius:20px;border-radius:20px;padding:3px;-moz-transition:all 0.2s ease-in-out;-o-transition:all 0.2s ease-in-out;-ms-transition:all 0.2s ease-in-out;-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out}.fs-modal .fs-modal-header .fs-close:hover{color:#fff;background:#aaa}.fs-modal .fs-modal-header .fs-close .dashicons,.fs-modal .fs-modal-header .fs-close:hover .dashicons{text-decoration:none}.fs-modal .fs-modal-body{border-bottom:0}.fs-modal .fs-modal-body p{font-size:14px}.fs-modal .fs-modal-body h2{font-size:20px;line-height:1.5em}.fs-modal .fs-modal-body>div{margin-top:10px}.fs-modal .fs-modal-body>div h2{font-weight:bold;font-size:20px;margin-top:0}.fs-modal .fs-modal-footer{border-top:#eeeeee solid 1px;text-align:right}.fs-modal .fs-modal-footer>.button{margin:0 7px}.fs-modal .fs-modal-footer>.button:first-child{margin:0}.fs-modal .fs-modal-panel>.notice.inline{margin:0;display:none}.fs-modal .fs-modal-panel:not(.active){display:none}.rtl .fs-modal .fs-modal-header .fs-close{right:auto;left:20px}body.has-fs-modal{overflow:hidden}.fs-modal.fs-modal-deactivation-feedback .reason-input,.fs-modal.fs-modal-deactivation-feedback .internal-message{margin:3px 0 3px 22px}.fs-modal.fs-modal-deactivation-feedback .reason-input input,.fs-modal.fs-modal-deactivation-feedback .reason-input textarea,.fs-modal.fs-modal-deactivation-feedback .internal-message input,.fs-modal.fs-modal-deactivation-feedback .internal-message textarea{width:100%}.fs-modal.fs-modal-deactivation-feedback li.reason.has-internal-message .internal-message{border:1px solid #ccc;padding:7px;display:none}@media (max-width: 650px){.fs-modal.fs-modal-deactivation-feedback li.reason li.reason{margin-bottom:10px}.fs-modal.fs-modal-deactivation-feedback li.reason li.reason .reason-input,.fs-modal.fs-modal-deactivation-feedback li.reason li.reason .internal-message{margin-left:29px}.fs-modal.fs-modal-deactivation-feedback li.reason li.reason label{display:table}.fs-modal.fs-modal-deactivation-feedback li.reason li.reason label>span{display:table-cell;font-size:1.3em}}.fs-modal.fs-modal-deactivation-feedback .anonymous-feedback-label{float:left}.fs-modal.fs-modal-deactivation-feedback .fs-modal-panel{margin-top:0 !important}.fs-modal.fs-modal-deactivation-feedback .fs-modal-panel h3{margin-top:0;line-height:1.5em}#the-list .deactivate>.fs-slug{display:none}.fs-modal.fs-modal-subscription-cancellation .fs-price-increase-warning{color:red;font-weight:bold;padding:0 25px;margin-bottom:0}.fs-modal.fs-modal-subscription-cancellation ul.subscription-actions label input{float:left;top:5px;position:relative}.rtl .fs-modal.fs-modal-subscription-cancellation ul.subscription-actions label input{float:right}.fs-modal.fs-modal-subscription-cancellation ul.subscription-actions label span{display:block;margin-left:24px}.rtl .fs-modal.fs-modal-subscription-cancellation ul.subscription-actions label span{margin-left:0;margin-right:24px}.fs-modal.fs-modal-license-activation .fs-modal-body input.fs-license-key{width:100%}.fs-license-options-container table,.fs-license-options-container table select,.fs-license-options-container table .fs-available-license-key{width:100%}.fs-license-options-container table td:first-child{width:1%}.fs-license-options-container table .fs-other-license-key-container label{position:relative;top:6px;float:left;margin-right:5px}.fs-license-options-container table .fs-other-license-key-container div{overflow:hidden;width:auto;height:30px;display:block;top:2px;position:relative}.fs-license-options-container table .fs-other-license-key-container div input{margin:0}.fs-sites-list-container td{cursor:pointer}.fs-modal.fs-modal-user-change .fs-modal-body input#fs_other_email_address{width:100%}.fs-user-change-options-container table{width:100%;border-collapse:collapse}.fs-user-change-options-container table tr{display:block;margin-bottom:2px}.fs-user-change-options-container table .fs-email-address-container td{display:inline-block}.fs-user-change-options-container table .fs-email-address-container input[type="radio"]{margin-bottom:0;margin-top:0}.fs-user-change-options-container table .fs-other-email-address-container{width:100%}.fs-user-change-options-container table .fs-other-email-address-container>div{display:table;width:100%}.fs-user-change-options-container table .fs-other-email-address-container>div label,.fs-user-change-options-container table .fs-other-email-address-container>div>div{display:table-cell}.fs-user-change-options-container table .fs-other-email-address-container>div label{width:1%;padding-left:3px;padding-right:3px}.fs-user-change-options-container table .fs-other-email-address-container>div>div{width:auto}.fs-user-change-options-container table .fs-other-email-address-container>div>div input{width:100%}.fs-modal.fs-modal-developer-license-debug-mode .fs-modal-body input.fs-license-or-user-key{width:100%}.fs-multisite-options-container{margin-top:10px;border:1px solid #ccc;padding:5px}.fs-multisite-options-container a{text-decoration:none}.fs-multisite-options-container a:focus{box-shadow:none}.fs-multisite-options-container a.selected{font-weight:bold}.fs-multisite-options-container.fs-apply-on-all-sites{border:0 none;padding:0}.fs-multisite-options-container.fs-apply-on-all-sites .fs-all-sites-options{border-spacing:0}.fs-multisite-options-container.fs-apply-on-all-sites .fs-all-sites-options td:not(:first-child){display:none}.fs-multisite-options-container .fs-sites-list-container{display:none;overflow:auto}.fs-multisite-options-container .fs-sites-list-container table td{border-top:1px solid #ccc;padding:4px 2px}.fs-modal.fs-modal-license-key-resend .email-address-container{overflow:hidden;padding-right:2px}.fs-modal.fs-modal-license-key-resend.fs-freemium input.email-address{width:300px}.fs-modal.fs-modal-license-key-resend.fs-freemium label{display:block;margin-bottom:10px}.fs-modal.fs-modal-license-key-resend.fs-premium input.email-address{width:100%}.fs-modal.fs-modal-license-key-resend.fs-premium .button-container{float:right;margin-left:7px}@media (max-width: 650px){.fs-modal.fs-modal-license-key-resend.fs-premium .button-container{margin-top:2px}}
|
2 |
+
.rtl .fs-modal.fs-modal-license-key-resend .fs-modal-body .input-container>.email-address-container{padding-left:2px;padding-right:0}.rtl .fs-modal.fs-modal-license-key-resend .fs-modal-body .button-container{float:left;margin-right:7px;margin-left:0}a.show-license-resend-modal{margin-top:4px;display:inline-block}.fs-ajax-loader{position:relative;width:170px;height:20px;margin:auto}.fs-ajax-loader .fs-ajax-loader-bar{position:absolute;top:0;background-color:#0074a3;width:20px;height:20px;-webkit-animation-name:bounce_ajaxLoader;-moz-animation-name:bounce_ajaxLoader;-ms-animation-name:bounce_ajaxLoader;-o-animation-name:bounce_ajaxLoader;animation-name:bounce_ajaxLoader;-webkit-animation-duration:1.5s;-moz-animation-duration:1.5s;-ms-animation-duration:1.5s;-o-animation-duration:1.5s;animation-duration:1.5s;animation-iteration-count:infinite;-o-animation-iteration-count:infinite;-ms-animation-iteration-count:infinite;-webkit-animation-iteration-count:infinite;-moz-animation-iteration-count:infinite;-webkit-animation-direction:normal;-moz-animation-direction:normal;-ms-animation-direction:normal;-o-animation-direction:normal;animation-direction:normal;-moz-transform:0.3;-o-transform:0.3;-ms-transform:0.3;-webkit-transform:0.3;transform:0.3}.fs-ajax-loader .fs-ajax-loader-bar-1{left:0px;animation-delay:0.6s;-o-animation-delay:0.6s;-ms-animation-delay:0.6s;-webkit-animation-delay:0.6s;-moz-animation-delay:0.6s}.fs-ajax-loader .fs-ajax-loader-bar-2{left:19px;animation-delay:0.75s;-o-animation-delay:0.75s;-ms-animation-delay:0.75s;-webkit-animation-delay:0.75s;-moz-animation-delay:0.75s}.fs-ajax-loader .fs-ajax-loader-bar-3{left:38px;animation-delay:0.9s;-o-animation-delay:0.9s;-ms-animation-delay:0.9s;-webkit-animation-delay:0.9s;-moz-animation-delay:0.9s}.fs-ajax-loader .fs-ajax-loader-bar-4{left:57px;animation-delay:1.05s;-o-animation-delay:1.05s;-ms-animation-delay:1.05s;-webkit-animation-delay:1.05s;-moz-animation-delay:1.05s}.fs-ajax-loader .fs-ajax-loader-bar-5{left:76px;animation-delay:1.2s;-o-animation-delay:1.2s;-ms-animation-delay:1.2s;-webkit-animation-delay:1.2s;-moz-animation-delay:1.2s}.fs-ajax-loader .fs-ajax-loader-bar-6{left:95px;animation-delay:1.35s;-o-animation-delay:1.35s;-ms-animation-delay:1.35s;-webkit-animation-delay:1.35s;-moz-animation-delay:1.35s}.fs-ajax-loader .fs-ajax-loader-bar-7{left:114px;animation-delay:1.5s;-o-animation-delay:1.5s;-ms-animation-delay:1.5s;-webkit-animation-delay:1.5s;-moz-animation-delay:1.5s}.fs-ajax-loader .fs-ajax-loader-bar-8{left:133px;animation-delay:1.65s;-o-animation-delay:1.65s;-ms-animation-delay:1.65s;-webkit-animation-delay:1.65s;-moz-animation-delay:1.65s}@-moz-keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}@-ms-keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}@-o-keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}@-webkit-keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}@keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}.fs-modal-auto-install #request-filesystem-credentials-form h2,.fs-modal-auto-install #request-filesystem-credentials-form .request-filesystem-credentials-action-buttons{display:none}.fs-modal-auto-install #request-filesystem-credentials-form input[type=password],.fs-modal-auto-install #request-filesystem-credentials-form input[type=email],.fs-modal-auto-install #request-filesystem-credentials-form input[type=text]{-webkit-appearance:none;padding:10px 10px 5px 10px;width:300px;max-width:100%}.fs-modal-auto-install #request-filesystem-credentials-form>div,.fs-modal-auto-install #request-filesystem-credentials-form label,.fs-modal-auto-install #request-filesystem-credentials-form fieldset{width:300px;max-width:100%;margin:0 auto;display:block}.button-primary.warn{box-shadow:0 1px 0 #d2593c;text-shadow:0 -1px 1px #d2593c,1px 0 1px #d2593c,0 1px 1px #d2593c,-1px 0 1px #d2593c;background:#f56a48;border-color:#ec6544 #d2593c #d2593c}.button-primary.warn:hover{background:#fd6d4a;border-color:#d2593c}.button-primary.warn:focus{box-shadow:0 1px 0 #dd6041,0 0 2px 1px #e4a796}.button-primary.warn:active{background:#dd6041;border-color:#d2593c;box-shadow:inset 0 2px 0 #d2593c}.button-primary.warn.disabled{color:#f5b3a1 !important;background:#e76444 !important;border-color:#d85e40 !important;text-shadow:0 -1px 0 rgba(0,0,0,0.1) !important}
|
freemius/assets/css/admin/gdpr-optin-notice.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.fs-notice[data-id^=gdpr_optin_actions] .underlined{text-decoration:underline}.fs-notice[data-id^=gdpr_optin_actions] ul .button,.fs-notice[data-id^=gdpr_optin_actions] ul .action-description{vertical-align:middle}.fs-notice[data-id^=gdpr_optin_actions] ul .action-description{display:inline-block;margin-left:3px}
|
1 |
+
.fs-notice[data-id^="gdpr_optin_actions"] .underlined{text-decoration:underline}.fs-notice[data-id^="gdpr_optin_actions"] ul .button,.fs-notice[data-id^="gdpr_optin_actions"] ul .action-description{vertical-align:middle}.fs-notice[data-id^="gdpr_optin_actions"] ul .action-description{display:inline-block;margin-left:3px}
|
freemius/assets/css/admin/plugins.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}.wp-list-table.plugins .plugin-title span.fs-tag{display:inline-block;margin-left:5px;line-height:10px}
|
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}.wp-list-table.plugins .plugin-title span.fs-tag{display:inline-block;margin-left:5px;line-height:10px}
|
freemius/assets/css/customizer.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
#fs_customizer_upsell .fs-customizer-plan{padding:10px 20px 20px 20px;border-radius:3px;background:#fff}#fs_customizer_upsell .fs-customizer-plan h2{position:relative;margin:0;line-height:2em;text-transform:uppercase}#fs_customizer_upsell .fs-customizer-plan h2 .button-link{top:-2px}#fs_customizer_upsell .fs-feature{position:relative}#fs_customizer_upsell .dashicons-yes{color:#0085ba;font-size:2em;vertical-align:bottom;margin-left:-7px;margin-right:10px}.rtl #fs_customizer_upsell .dashicons-yes{margin-left:10px;margin-right:-7px}#fs_customizer_upsell .dashicons-editor-help{color:#bbb;cursor:help}#fs_customizer_upsell .dashicons-editor-help .fs-feature-desc{opacity:0;visibility:hidden;-moz-transition:opacity .3s ease-in-out;-o-transition:opacity .3s ease-in-out;-ms-transition:opacity .3s ease-in-out;-webkit-transition:opacity .3s ease-in-out;transition:opacity .3s ease-in-out;position:absolute;background:#000;color:#fff;font-family:
|
1 |
+
#fs_customizer_upsell .fs-customizer-plan{padding:10px 20px 20px 20px;border-radius:3px;background:#fff}#fs_customizer_upsell .fs-customizer-plan h2{position:relative;margin:0;line-height:2em;text-transform:uppercase}#fs_customizer_upsell .fs-customizer-plan h2 .button-link{top:-2px}#fs_customizer_upsell .fs-feature{position:relative}#fs_customizer_upsell .dashicons-yes{color:#0085ba;font-size:2em;vertical-align:bottom;margin-left:-7px;margin-right:10px}.rtl #fs_customizer_upsell .dashicons-yes{margin-left:10px;margin-right:-7px}#fs_customizer_upsell .dashicons-editor-help{color:#bbb;cursor:help}#fs_customizer_upsell .dashicons-editor-help .fs-feature-desc{opacity:0;visibility:hidden;-moz-transition:opacity 0.3s ease-in-out;-o-transition:opacity 0.3s ease-in-out;-ms-transition:opacity 0.3s ease-in-out;-webkit-transition:opacity 0.3s ease-in-out;transition:opacity 0.3s ease-in-out;position:absolute;background:#000;color:#fff;font-family:'arial', serif;font-size:12px;padding:10px;z-index:999999;bottom:100%;margin-bottom:5px;left:0;right:0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;-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);line-height:1.3em;font-weight:bold;text-align:left}.rtl #fs_customizer_upsell .dashicons-editor-help .fs-feature-desc{text-align:right}#fs_customizer_upsell .dashicons-editor-help .fs-feature-desc::after{content:' ';display:block;width:0;height:0;border-style:solid;border-width:5px 5px 0 5px;border-color:#000 transparent transparent transparent;position:absolute;top:100%;left:21px}.rtl #fs_customizer_upsell .dashicons-editor-help .fs-feature-desc::after{right:21px;left:auto}#fs_customizer_upsell .dashicons-editor-help:hover .fs-feature-desc{visibility:visible;opacity:1}#fs_customizer_upsell .button-primary{display:block;text-align:center;margin-top:10px}#fs_customizer_support{display:block !important}#fs_customizer_support .button{float:right}#fs_customizer_support .button-group{width:100%;display:block;margin-top:10px}#fs_customizer_support .button-group .button{float:none;width:50%;text-align:center}#customize-theme-controls #accordion-section-freemius_upsell{border-top:1px solid #0085ba !important;border-bottom:1px solid #0085ba !important}#customize-theme-controls #accordion-section-freemius_upsell h3.accordion-section-title{color:#fff;background-color:#0085ba;border-left:4px solid #0085ba;transition:.15s background-color ease-in-out, .15s border-color ease-in-out;outline:none;border-bottom:none !important}#customize-theme-controls #accordion-section-freemius_upsell h3.accordion-section-title:hover{background-color:#008ec2;border-left-color:#0073aa}#customize-theme-controls #accordion-section-freemius_upsell h3.accordion-section-title:after{color:#fff}#customize-theme-controls #accordion-section-freemius_upsell .rtl h3.accordion-section-title{border-left:none;border-right:4px solid #0085ba}#customize-theme-controls #accordion-section-freemius_upsell .rtl h3.accordion-section-title:hover{border-right-color:#0073aa}
|
freemius/assets/img/user-menus.png
DELETED
Binary file
|
freemius/config.php
CHANGED
@@ -354,7 +354,7 @@
|
|
354 |
is_multisite() &&
|
355 |
( is_network_admin() ||
|
356 |
( ( defined( 'DOING_AJAX' ) && DOING_AJAX &&
|
357 |
-
( isset( $_REQUEST['_fs_network_admin'] )
|
358 |
( ! empty( $_REQUEST['action'] ) && 'delete-plugin' === $_REQUEST['action'] )*/ )
|
359 |
) ||
|
360 |
// Plugin uninstall.
|
@@ -385,7 +385,7 @@
|
|
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 |
-
}
|
354 |
is_multisite() &&
|
355 |
( is_network_admin() ||
|
356 |
( ( defined( 'DOING_AJAX' ) && DOING_AJAX &&
|
357 |
+
( isset( $_REQUEST['_fs_network_admin'] ) /*||
|
358 |
( ! empty( $_REQUEST['action'] ) && 'delete-plugin' === $_REQUEST['action'] )*/ )
|
359 |
) ||
|
360 |
// Plugin uninstall.
|
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
@@ -408,10 +408,8 @@
|
|
408 |
* @param bool $is_init Since 1.2.1 Is initiation sequence.
|
409 |
*/
|
410 |
private function __construct( $module_id, $slug = false, $is_init = false ) {
|
411 |
-
$main_file = false;
|
412 |
-
|
413 |
if ( $is_init && is_numeric( $module_id ) && is_string( $slug ) ) {
|
414 |
-
$
|
415 |
}
|
416 |
|
417 |
$this->_module_id = $module_id;
|
@@ -426,7 +424,7 @@
|
|
426 |
|
427 |
$this->_logger = FS_Logger::get_logger( WP_FS__SLUG . '_' . $this->get_unique_affix(), WP_FS__DEBUG_SDK, WP_FS__ECHO_DEBUG_SDK );
|
428 |
|
429 |
-
$this->_plugin_main_file_path = $this->_find_caller_plugin_file( $is_init
|
430 |
$this->_plugin_dir_path = plugin_dir_path( $this->_plugin_main_file_path );
|
431 |
$this->_plugin_basename = $this->get_plugin_basename();
|
432 |
$this->_free_plugin_basename = str_replace( '-premium/', '/', $this->_plugin_basename );
|
@@ -521,10 +519,7 @@
|
|
521 |
* @author Leo Fajardo (@leorw)
|
522 |
* @since 1.2.2
|
523 |
*/
|
524 |
-
( is_object( $this->_plugin )
|
525 |
-
$this->_plugin->title :
|
526 |
-
$this->get_plugin_name()
|
527 |
-
),
|
528 |
$this->get_unique_affix()
|
529 |
);
|
530 |
|
@@ -1646,10 +1641,8 @@
|
|
1646 |
}
|
1647 |
|
1648 |
if ( $this->is_plugin() ) {
|
1649 |
-
if (
|
1650 |
add_action( 'wpmu_new_blog', array( $this, '_after_new_blog_callback' ), 10, 6 );
|
1651 |
-
} else {
|
1652 |
-
add_action( 'wp_initialize_site', array( $this, '_after_wp_initialize_site_callback' ), 11, 2 );
|
1653 |
}
|
1654 |
|
1655 |
register_deactivation_hook( $this->_plugin_main_file_path, array( &$this, '_deactivate_plugin_hook' ) );
|
@@ -1659,12 +1652,7 @@
|
|
1659 |
add_action( 'deactivate_blog', array( &$this, '_after_site_deactivated_callback' ) );
|
1660 |
add_action( 'archive_blog', array( &$this, '_after_site_deactivated_callback' ) );
|
1661 |
add_action( 'make_spam_blog', array( &$this, '_after_site_deactivated_callback' ) );
|
1662 |
-
|
1663 |
-
if ( version_compare( $GLOBALS['wp_version'], '5.1', '<' ) ) {
|
1664 |
-
add_action( 'deleted_blog', array( $this, '_after_site_deleted_callback' ), 10, 2 );
|
1665 |
-
} else {
|
1666 |
-
add_action( 'wp_delete_site', array( $this, '_after_wpsite_deleted_callback' ) );
|
1667 |
-
}
|
1668 |
|
1669 |
add_action( 'activate_blog', array( &$this, '_after_site_reactivated_callback' ) );
|
1670 |
add_action( 'unarchive_blog', array( &$this, '_after_site_reactivated_callback' ) );
|
@@ -1689,7 +1677,6 @@
|
|
1689 |
add_action( 'admin_init', array( &$this, '_add_premium_version_upgrade_selection' ) );
|
1690 |
add_action( 'admin_init', array( &$this, '_add_beta_mode_update_handler' ) );
|
1691 |
add_action( 'admin_init', array( &$this, '_add_user_change_option' ) );
|
1692 |
-
add_action( 'admin_init', array( &$this, '_add_email_address_update_option' ) );
|
1693 |
|
1694 |
$this->add_ajax_action( 'update_billing', array( &$this, '_update_billing_ajax_action' ) );
|
1695 |
$this->add_ajax_action( 'start_trial', array( &$this, '_start_trial_ajax_action' ) );
|
@@ -2107,27 +2094,20 @@
|
|
2107 |
/**
|
2108 |
* Leverage backtrace to find caller plugin file path.
|
2109 |
*
|
2110 |
-
* @
|
2111 |
-
* @param string $main_file Since 2.5.0 expects the module's main file path to potentially purge the cached path.
|
2112 |
-
*
|
2113 |
-
* @return string
|
2114 |
* @since 1.0.6
|
2115 |
*
|
2116 |
-
* @
|
|
|
|
|
2117 |
*/
|
2118 |
-
private function _find_caller_plugin_file( $is_init = false
|
2119 |
// Try to load the cached value of the file path.
|
2120 |
if ( isset( $this->_storage->plugin_main_file ) ) {
|
2121 |
$plugin_main_file = $this->_storage->plugin_main_file;
|
2122 |
if ( ! empty( $plugin_main_file->path ) ) {
|
2123 |
$absolute_path = $this->get_absolute_path( $plugin_main_file->path );
|
2124 |
if ( file_exists( $absolute_path ) ) {
|
2125 |
-
if ( $is_init && $absolute_path !== $this->get_absolute_path( $main_file ) ) {
|
2126 |
-
// Update cached path if not matching the actual path.
|
2127 |
-
$plugin_main_file->path = $main_file;
|
2128 |
-
$this->_storage->plugin_main_file = $plugin_main_file;
|
2129 |
-
}
|
2130 |
-
|
2131 |
return $absolute_path;
|
2132 |
}
|
2133 |
}
|
@@ -2168,11 +2148,12 @@
|
|
2168 |
* Only the original instantiator that calls dynamic_init can modify the module's path.
|
2169 |
*/
|
2170 |
// Find caller module.
|
|
|
2171 |
$this->_storage->plugin_main_file = (object) array(
|
2172 |
-
'path' => $
|
2173 |
);
|
2174 |
|
2175 |
-
return $this->get_absolute_path( $
|
2176 |
}
|
2177 |
|
2178 |
/**
|
@@ -2234,8 +2215,6 @@
|
|
2234 |
* @param number $module_id
|
2235 |
* @param string $slug
|
2236 |
*
|
2237 |
-
* @return string Since 2.5.0 return the module's main file path.
|
2238 |
-
*
|
2239 |
* @since 1.2.2
|
2240 |
*/
|
2241 |
private function store_id_slug_type_path_map( $module_id, $slug ) {
|
@@ -2257,52 +2236,20 @@
|
|
2257 |
$store_option = true;
|
2258 |
}
|
2259 |
|
2260 |
-
|
2261 |
-
|
2262 |
-
|
2263 |
-
|
2264 |
-
|
2265 |
-
|
2266 |
-
|
2267 |
-
|
2268 |
-
|
2269 |
-
|
2270 |
-
|
2271 |
-
|
2272 |
-
|
2273 |
-
|
2274 |
-
}
|
2275 |
-
|
2276 |
-
foreach ( $id_slug_type_path_map as $id => $data ) {
|
2277 |
-
if ( empty( $id ) ) {
|
2278 |
-
// Remove maps with empty module ID.
|
2279 |
-
unset( $id_slug_type_path_map[ $id ] );
|
2280 |
-
$store_option = true;
|
2281 |
-
continue;
|
2282 |
-
}
|
2283 |
-
|
2284 |
-
/**
|
2285 |
-
* If the module's main file path is identical to the main file path of another module then it means that the cached path of the current module or the other one with the same path is wrong, and therefore, we need to recalculate those paths.
|
2286 |
-
*
|
2287 |
-
* @author Vova Feldman (@svovaf)
|
2288 |
-
* @since 2.5.0
|
2289 |
-
*/
|
2290 |
-
if ( ! $find_caller ) {
|
2291 |
-
if ( $id == $module_id ) {
|
2292 |
-
continue;
|
2293 |
-
}
|
2294 |
-
|
2295 |
-
if (
|
2296 |
-
isset( $data['path'] ) &&
|
2297 |
-
$data['path'] === $id_slug_type_path_map[ $module_id ]['path']
|
2298 |
-
) {
|
2299 |
-
$find_caller = true;
|
2300 |
-
}
|
2301 |
-
}
|
2302 |
-
}
|
2303 |
-
|
2304 |
-
if ( $find_caller ) {
|
2305 |
-
$caller_main_file_and_type = $this->get_caller_main_file_and_type( $module_id );
|
2306 |
|
2307 |
$id_slug_type_path_map[ $module_id ]['type'] = $caller_main_file_and_type->module_type;
|
2308 |
$id_slug_type_path_map[ $module_id ]['path'] = $caller_main_file_and_type->path;
|
@@ -2313,8 +2260,6 @@
|
|
2313 |
if ( $store_option ) {
|
2314 |
self::$_accounts->set_option( 'id_slug_type_path_map', $id_slug_type_path_map, true );
|
2315 |
}
|
2316 |
-
|
2317 |
-
return $id_slug_type_path_map[ $module_id ]['path'];
|
2318 |
}
|
2319 |
|
2320 |
/**
|
@@ -2328,10 +2273,8 @@
|
|
2328 |
* add-ons are relying on loading the SDK from the parent module, and also allows themes including the
|
2329 |
* SDK an internal file instead of directly from functions.php.
|
2330 |
* @since 1.2.1.7 Knows how to handle cases when an add-on includes the parent module logic.
|
2331 |
-
*
|
2332 |
-
* @param number $module_id @since 2.5.0
|
2333 |
*/
|
2334 |
-
private function get_caller_main_file_and_type(
|
2335 |
self::require_plugin_essentials();
|
2336 |
|
2337 |
$all_plugins = fs_get_plugins( true );
|
@@ -2470,12 +2413,10 @@
|
|
2470 |
}
|
2471 |
}
|
2472 |
|
2473 |
-
|
2474 |
'module_type' => $module_type,
|
2475 |
'path' => $caller_file_candidate
|
2476 |
);
|
2477 |
-
|
2478 |
-
return apply_filters( "fs_{$module_id}_caller_main_file_and_type", $caller_main_file_and_type );
|
2479 |
}
|
2480 |
|
2481 |
#----------------------------------------------------------------------------------
|
@@ -2492,13 +2433,6 @@
|
|
2492 |
* @since 1.1.2
|
2493 |
*/
|
2494 |
function _add_deactivation_feedback_dialog_box() {
|
2495 |
-
if (
|
2496 |
-
$this->is_clone() ||
|
2497 |
-
( is_object( $this->_site ) && ! $this->is_registered() )
|
2498 |
-
) {
|
2499 |
-
return;
|
2500 |
-
}
|
2501 |
-
|
2502 |
$subscription_cancellation_dialog_box_template_params = $this->apply_filters( 'show_deactivation_subscription_cancellation', true ) ?
|
2503 |
$this->_get_subscription_cancellation_dialog_box_template_params() :
|
2504 |
array();
|
@@ -2506,7 +2440,7 @@
|
|
2506 |
/**
|
2507 |
* @since 2.3.0 Developers can optionally hide the deactivation feedback form using the 'show_deactivation_feedback_form' filter.
|
2508 |
*/
|
2509 |
-
$show_deactivation_feedback_form =
|
2510 |
if ( $this->has_filter( 'show_deactivation_feedback_form' ) ) {
|
2511 |
$show_deactivation_feedback_form = $this->apply_filters( 'show_deactivation_feedback_form', true );
|
2512 |
} else if ( $this->is_addon() ) {
|
@@ -2611,7 +2545,7 @@
|
|
2611 |
$reason_temporary_deactivation = array(
|
2612 |
'id' => self::REASON_TEMPORARY_DEACTIVATION,
|
2613 |
'text' => sprintf(
|
2614 |
-
$this->get_text_inline( "It's a temporary %s
|
2615 |
strtolower( $this->is_plugin() ?
|
2616 |
$this->get_text_inline( 'Deactivation', 'deactivation' ) :
|
2617 |
$this->get_text_inline( 'Theme Switch', 'theme-switch' )
|
@@ -2776,14 +2710,6 @@
|
|
2776 |
|
2777 |
$this->_storage->store( 'uninstall_reason', $reason );
|
2778 |
|
2779 |
-
if ( self::REASON_TEMPORARY_DEACTIVATION == $reason->id ) {
|
2780 |
-
$snooze_period = fs_request_get( 'snooze_period' );
|
2781 |
-
|
2782 |
-
if ( is_numeric( $snooze_period ) && 0 < $snooze_period ) {
|
2783 |
-
self::snooze_deactivation_form( (int) $snooze_period );
|
2784 |
-
}
|
2785 |
-
}
|
2786 |
-
|
2787 |
/**
|
2788 |
* If the module type is "theme", trigger the uninstall event here (on theme deactivation) since themes do
|
2789 |
* not support uninstall hook.
|
@@ -2805,73 +2731,6 @@
|
|
2805 |
exit;
|
2806 |
}
|
2807 |
|
2808 |
-
#--------------------------------------------------------------------------------
|
2809 |
-
#region Deactivation Feedback Snoozing
|
2810 |
-
#--------------------------------------------------------------------------------
|
2811 |
-
|
2812 |
-
/**
|
2813 |
-
* @author Vova Feldman (@svovaf)
|
2814 |
-
* @since 2.4.3
|
2815 |
-
*
|
2816 |
-
* @param int $period
|
2817 |
-
*
|
2818 |
-
* @return bool True if the value was set, false otherwise.
|
2819 |
-
*/
|
2820 |
-
private static function snooze_deactivation_form( $period ) {
|
2821 |
-
return ( 0 < $period && self::reset_deactivation_snoozing( $period ) );
|
2822 |
-
}
|
2823 |
-
|
2824 |
-
/**
|
2825 |
-
* Check if deactivation feedback form is snoozed.
|
2826 |
-
*
|
2827 |
-
* @author Vova Feldman (@svovaf)
|
2828 |
-
* @since 2.4.3
|
2829 |
-
*
|
2830 |
-
* @return bool
|
2831 |
-
*/
|
2832 |
-
static function is_deactivation_snoozed() {
|
2833 |
-
$is_snoozed = ( ! is_multisite() || fs_is_network_admin() ) ?
|
2834 |
-
get_transient( 'fs_snooze_period' ) :
|
2835 |
-
get_site_transient( 'fs_snooze_period' );
|
2836 |
-
|
2837 |
-
|
2838 |
-
return ( 'true' === $is_snoozed );
|
2839 |
-
}
|
2840 |
-
|
2841 |
-
/**
|
2842 |
-
* Reset deactivation snoozing. When `$period` is `0` will stop deactivation snoozing by deleting the transients. Otherwise, will set the transients for the selected period.
|
2843 |
-
*
|
2844 |
-
* @param int $period Period in seconds.
|
2845 |
-
*
|
2846 |
-
* @author Vova Feldman (@svovaf)
|
2847 |
-
* @since 2.4.3
|
2848 |
-
*/
|
2849 |
-
private static function reset_deactivation_snoozing( $period = 0 ) {
|
2850 |
-
$value = ( 0 === $period ) ? null : 'true';
|
2851 |
-
|
2852 |
-
if ( ! is_multisite() || fs_is_network_admin() ) {
|
2853 |
-
return set_transient( 'fs_snooze_period', $value, $period );
|
2854 |
-
} else {
|
2855 |
-
return set_site_transient( 'fs_snooze_period', $value, $period );
|
2856 |
-
}
|
2857 |
-
}
|
2858 |
-
|
2859 |
-
/**
|
2860 |
-
* The deactivation snooze expiration UNIX timestamp (in sec).
|
2861 |
-
*
|
2862 |
-
* @author Vova Feldman (@svovaf)
|
2863 |
-
* @since 2.4.3
|
2864 |
-
*
|
2865 |
-
* @return int
|
2866 |
-
*/
|
2867 |
-
static function deactivation_snooze_expires_at() {
|
2868 |
-
return ( ! is_multisite() || fs_is_network_admin() ) ?
|
2869 |
-
(int) get_option( '_transient_timeout_fs_snooze_period' ) :
|
2870 |
-
(int) get_site_option( '_site_transient_timeout_fs_snooze_period' );
|
2871 |
-
}
|
2872 |
-
|
2873 |
-
#endregion
|
2874 |
-
|
2875 |
/**
|
2876 |
* @author Leo Fajardo (@leorw)
|
2877 |
* @since 2.1.4
|
@@ -3068,13 +2927,6 @@
|
|
3068 |
return self::instance( $addon_id );
|
3069 |
}
|
3070 |
|
3071 |
-
/**
|
3072 |
-
* @return Freemius[]
|
3073 |
-
*/
|
3074 |
-
static function _get_all_instances() {
|
3075 |
-
return self::$_instances;
|
3076 |
-
}
|
3077 |
-
|
3078 |
#endregion ------------------------------------------------------------------
|
3079 |
|
3080 |
/**
|
@@ -3585,9 +3437,6 @@
|
|
3585 |
add_action( 'plugins_loaded', array( 'Freemius', '_load_textdomain' ), 1 );
|
3586 |
}
|
3587 |
|
3588 |
-
$clone_manager = FS_Clone_Manager::instance();
|
3589 |
-
add_action( 'init', array( $clone_manager, '_init' ) );
|
3590 |
-
|
3591 |
add_action( 'admin_footer', array( 'Freemius', '_enrich_ajax_url' ) );
|
3592 |
add_action( 'admin_footer', array( 'Freemius', '_open_support_forum_in_new_page' ) );
|
3593 |
|
@@ -3607,86 +3456,6 @@
|
|
3607 |
self::$_statics_loaded = true;
|
3608 |
}
|
3609 |
|
3610 |
-
#--------------------------------------------------------------------------------
|
3611 |
-
#region Clone
|
3612 |
-
#--------------------------------------------------------------------------------
|
3613 |
-
|
3614 |
-
/**
|
3615 |
-
* @author Leo Fajardo (@leorw)
|
3616 |
-
* @since 2.5.0
|
3617 |
-
*
|
3618 |
-
* @return bool
|
3619 |
-
*/
|
3620 |
-
private function is_unresolved_clone() {
|
3621 |
-
if ( ! $this->is_clone() ) {
|
3622 |
-
return false;
|
3623 |
-
}
|
3624 |
-
|
3625 |
-
return FS_Clone_Manager::instance()->has_temporary_duplicate_mode_expired();
|
3626 |
-
}
|
3627 |
-
|
3628 |
-
/**
|
3629 |
-
* @author Leo Fajardo (@leorw)
|
3630 |
-
* @since 2.5.0
|
3631 |
-
*/
|
3632 |
-
function is_clone() {
|
3633 |
-
if ( ! is_object( $this->_site ) ) {
|
3634 |
-
return false;
|
3635 |
-
}
|
3636 |
-
|
3637 |
-
return (
|
3638 |
-
fs_strip_url_protocol( trailingslashit( $this->_site->url ) ) !== fs_strip_url_protocol( trailingslashit( get_site_url() ) )
|
3639 |
-
);
|
3640 |
-
}
|
3641 |
-
|
3642 |
-
/**
|
3643 |
-
* @author Leo Fajardo (@leorw)
|
3644 |
-
* @since 2.5.0
|
3645 |
-
*
|
3646 |
-
* @param number $site_id
|
3647 |
-
*/
|
3648 |
-
function fetch_install_by_id( $site_id ) {
|
3649 |
-
return $this->get_current_or_network_user_api_scope()->get( "/installs/{$site_id}.json" );
|
3650 |
-
}
|
3651 |
-
|
3652 |
-
/**
|
3653 |
-
* @author Leo Fajardo (@leorw)
|
3654 |
-
* @since 2.5.0
|
3655 |
-
*
|
3656 |
-
* @return string|object|bool
|
3657 |
-
*/
|
3658 |
-
function _handle_long_term_duplicate() {
|
3659 |
-
$this->_logger->entrance();
|
3660 |
-
|
3661 |
-
$this->delete_current_install( false );
|
3662 |
-
|
3663 |
-
$license_key = false;
|
3664 |
-
|
3665 |
-
if (
|
3666 |
-
is_object( $this->_license ) &&
|
3667 |
-
! $this->_license->is_utilized(
|
3668 |
-
( WP_FS__IS_LOCALHOST_FOR_SERVER || FS_Site::is_localhost_by_address( get_site_url() ) )
|
3669 |
-
)
|
3670 |
-
) {
|
3671 |
-
$license_key = $this->_license->secret_key;
|
3672 |
-
}
|
3673 |
-
|
3674 |
-
return $this->opt_in(
|
3675 |
-
false,
|
3676 |
-
false,
|
3677 |
-
false,
|
3678 |
-
$license_key,
|
3679 |
-
false,
|
3680 |
-
false,
|
3681 |
-
false,
|
3682 |
-
null,
|
3683 |
-
array(),
|
3684 |
-
false
|
3685 |
-
);
|
3686 |
-
}
|
3687 |
-
|
3688 |
-
#endregion
|
3689 |
-
|
3690 |
/**
|
3691 |
* @author Leo Fajardo (@leorw)
|
3692 |
*
|
@@ -3781,6 +3550,8 @@
|
|
3781 |
* @since 1.1.7.3
|
3782 |
*/
|
3783 |
static function _toggle_debug_mode() {
|
|
|
|
|
3784 |
if ( ! is_super_admin() ) {
|
3785 |
return;
|
3786 |
}
|
@@ -3802,10 +3573,19 @@
|
|
3802 |
* @since 1.2.1.6
|
3803 |
*/
|
3804 |
static function _get_debug_log() {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3805 |
$logs = FS_Logger::load_db_logs(
|
3806 |
fs_request_get( 'filters', false, 'post' ),
|
3807 |
-
|
3808 |
-
|
3809 |
);
|
3810 |
|
3811 |
self::shoot_ajax_success( $logs );
|
@@ -3912,10 +3692,6 @@
|
|
3912 |
|
3913 |
switch_to_blog( $current_blog_id );
|
3914 |
}
|
3915 |
-
} else if ( fs_request_is_action( 'reset_deactivation_snoozing' ) ) {
|
3916 |
-
check_admin_referer( 'reset_deactivation_snoozing' );
|
3917 |
-
|
3918 |
-
self::reset_deactivation_snoozing();
|
3919 |
} else if ( fs_request_is_action( 'simulate_trial' ) ) {
|
3920 |
check_admin_referer( 'simulate_trial' );
|
3921 |
|
@@ -3964,65 +3740,55 @@
|
|
3964 |
}
|
3965 |
|
3966 |
/**
|
3967 |
-
* @author
|
3968 |
-
* @since
|
3969 |
-
*
|
3970 |
-
* @return array
|
3971 |
*/
|
3972 |
-
static function
|
3973 |
self::$_static_logger->entrance();
|
3974 |
|
3975 |
-
$sites_by_type = array(
|
3976 |
-
WP_FS__MODULE_TYPE_PLUGIN => array(),
|
3977 |
-
WP_FS__MODULE_TYPE_THEME => array(),
|
3978 |
-
);
|
3979 |
-
|
3980 |
-
$module_types = array_keys( $sites_by_type );
|
3981 |
-
|
3982 |
if ( ! is_multisite() ) {
|
3983 |
-
|
3984 |
-
|
3985 |
-
}
|
3986 |
} else {
|
3987 |
$sites = self::get_sites();
|
3988 |
|
|
|
|
|
|
|
3989 |
foreach ( $sites as $site ) {
|
3990 |
$blog_id = self::get_site_blog_id( $site );
|
3991 |
|
3992 |
-
|
3993 |
-
$installs = self::get_all_sites( $type, $blog_id );
|
3994 |
|
3995 |
-
|
3996 |
-
|
3997 |
-
|
3998 |
-
|
3999 |
|
4000 |
-
|
4001 |
|
4002 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4003 |
}
|
4004 |
|
|
|
|
|
|
|
4005 |
}
|
4006 |
}
|
4007 |
}
|
4008 |
|
4009 |
-
return $sites_by_type;
|
4010 |
-
}
|
4011 |
-
|
4012 |
-
/**
|
4013 |
-
* @author Vova Feldman (@svovaf)
|
4014 |
-
* @since 1.0.8
|
4015 |
-
*/
|
4016 |
-
static function _debug_page_render() {
|
4017 |
-
self::$_static_logger->entrance();
|
4018 |
-
|
4019 |
-
$all_modules_sites = self::get_all_modules_sites();
|
4020 |
-
|
4021 |
$licenses_by_module_type = self::get_all_licenses_by_module_type();
|
4022 |
|
4023 |
$vars = array(
|
4024 |
-
'plugin_sites' => $
|
4025 |
-
'theme_sites' => $
|
4026 |
'users' => self::get_all_users(),
|
4027 |
'addons' => self::get_all_addons(),
|
4028 |
'account_addons' => self::get_all_account_addons(),
|
@@ -4054,10 +3820,6 @@
|
|
4054 |
function is_on() {
|
4055 |
self::$_static_logger->entrance();
|
4056 |
|
4057 |
-
if ( is_object( $this->_site ) && ! $this->is_registered() ) {
|
4058 |
-
return false;
|
4059 |
-
}
|
4060 |
-
|
4061 |
if ( isset( $this->_is_on ) ) {
|
4062 |
return $this->_is_on;
|
4063 |
}
|
@@ -4146,24 +3908,18 @@
|
|
4146 |
|
4147 |
$is_update = $this->apply_filters( 'is_plugin_update', $this->is_plugin_update() );
|
4148 |
|
4149 |
-
$params = array(
|
4150 |
-
'is_update' => json_encode( $is_update ),
|
4151 |
-
'version' => $version,
|
4152 |
-
'sdk' => $this->version,
|
4153 |
-
'is_admin' => json_encode( is_admin() ),
|
4154 |
-
'is_ajax' => json_encode( self::is_ajax() ),
|
4155 |
-
'is_cron' => json_encode( self::is_cron() ),
|
4156 |
-
'is_gdpr_test' => $is_gdpr_test,
|
4157 |
-
'is_http' => json_encode( WP_FS__IS_HTTP_REQUEST ),
|
4158 |
-
);
|
4159 |
-
|
4160 |
-
if ( is_multisite() && function_exists( 'get_network' ) ) {
|
4161 |
-
$params['network_uid'] = $this->get_anonymous_network_id();
|
4162 |
-
}
|
4163 |
-
|
4164 |
return $this->get_api_plugin_scope()->ping(
|
4165 |
$this->get_anonymous_id( $blog_id ),
|
4166 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4167 |
);
|
4168 |
}
|
4169 |
|
@@ -4329,17 +4085,6 @@
|
|
4329 |
return $unique_id;
|
4330 |
}
|
4331 |
|
4332 |
-
/**
|
4333 |
-
* Returns anonymous network ID.
|
4334 |
-
*
|
4335 |
-
* @since 2.4.3
|
4336 |
-
*
|
4337 |
-
* @return string
|
4338 |
-
*/
|
4339 |
-
function get_anonymous_network_id() {
|
4340 |
-
return $this->get_anonymous_id( get_network()->site_id );
|
4341 |
-
}
|
4342 |
-
|
4343 |
/**
|
4344 |
* @author Vova Feldman (@svovaf)
|
4345 |
* @since 1.1.7.4
|
@@ -4713,6 +4458,12 @@
|
|
4713 |
* @since 1.0.9
|
4714 |
*/
|
4715 |
function _email_about_firewall_issue() {
|
|
|
|
|
|
|
|
|
|
|
|
|
4716 |
$this->_admin_notices->remove_sticky( 'failed_connect_api' );
|
4717 |
|
4718 |
$pong = $this->ping();
|
@@ -4787,6 +4538,12 @@
|
|
4787 |
* @since 1.1.7.4
|
4788 |
*/
|
4789 |
function _retry_connectivity_test() {
|
|
|
|
|
|
|
|
|
|
|
|
|
4790 |
$this->_admin_notices->remove_sticky( 'failed_connect_api_first' );
|
4791 |
|
4792 |
$pong = $this->ping();
|
@@ -5150,8 +4907,10 @@
|
|
5150 |
* @since 1.1.7.3
|
5151 |
*
|
5152 |
*/
|
5153 |
-
if ( $this->is_registered()
|
5154 |
-
$this->
|
|
|
|
|
5155 |
}
|
5156 |
|
5157 |
/**
|
@@ -5164,8 +4923,6 @@
|
|
5164 |
}
|
5165 |
|
5166 |
if ( $this->is_registered() ) {
|
5167 |
-
FS_Clone_Manager::instance()->maybe_resolve_new_subsite_install_automatically( $this );
|
5168 |
-
|
5169 |
$this->hook_callback_to_install_sync();
|
5170 |
}
|
5171 |
|
@@ -5180,28 +4937,6 @@
|
|
5180 |
}
|
5181 |
|
5182 |
if ( $this->is_user_in_admin() ) {
|
5183 |
-
if ( $this->is_registered() && fs_request_has( 'purchase_completed' ) ) {
|
5184 |
-
$this->_admin_notices->add_sticky(
|
5185 |
-
sprintf(
|
5186 |
-
/* translators: %s: License type (e.g. you have a professional license) */
|
5187 |
-
$this->get_text_inline( 'You have purchased a %s license.', 'you-have-x-license' ),
|
5188 |
-
fs_request_get( 'purchased_plan' )
|
5189 |
-
) .
|
5190 |
-
sprintf(
|
5191 |
-
$this->get_text_inline(" The %s's %sdownload link%s, license key, and installation instructions have been sent to %s. If you can't find the email after 5 min, please check your spam box.", 'post-purchase-email-sent-message' ),
|
5192 |
-
$this->get_module_label( true ),
|
5193 |
-
( FS_Plugin::is_valid_id( $this->get_bundle_id() ) ? "products' " : '' ),
|
5194 |
-
( FS_Plugin::is_valid_id( $this->get_bundle_id() ) ? 's' : '' ),
|
5195 |
-
sprintf(
|
5196 |
-
'<strong>%s</strong>',
|
5197 |
-
fs_request_get( 'purchase_email' )
|
5198 |
-
)
|
5199 |
-
),
|
5200 |
-
'plan_purchased',
|
5201 |
-
$this->get_text_x_inline( 'Yee-haw', 'interjection expressing joy or exuberance', 'yee-haw' ) . '!'
|
5202 |
-
);
|
5203 |
-
}
|
5204 |
-
|
5205 |
if ( $this->is_addon() ) {
|
5206 |
if ( ! $this->is_parent_plugin_installed() ) {
|
5207 |
$parent_name = $this->get_option( $plugin_info, 'parent_name', null );
|
@@ -5325,8 +5060,7 @@
|
|
5325 |
*/
|
5326 |
( file_exists( fs_normalize_path( WP_PLUGIN_DIR . '/' . $this->premium_plugin_basename() ) ) )
|
5327 |
) &&
|
5328 |
-
$this->has_release_on_freemius()
|
5329 |
-
( ! $this->is_unresolved_clone() )
|
5330 |
) {
|
5331 |
FS_Plugin_Updater::instance( $this );
|
5332 |
}
|
@@ -5474,7 +5208,7 @@
|
|
5474 |
}
|
5475 |
|
5476 |
// Send update to FS.
|
5477 |
-
$result = $this->
|
5478 |
'is_disconnected' => true
|
5479 |
) );
|
5480 |
|
@@ -5623,7 +5357,7 @@
|
|
5623 |
return true;
|
5624 |
}
|
5625 |
|
5626 |
-
$result = $this->
|
5627 |
'is_disconnected' => false
|
5628 |
) );
|
5629 |
|
@@ -7203,24 +6937,6 @@
|
|
7203 |
return $this->is_cron_on( 'sync' );
|
7204 |
}
|
7205 |
|
7206 |
-
/**
|
7207 |
-
* @author Leo Fajardo (@leorw)
|
7208 |
-
* @since 2.5.0
|
7209 |
-
*/
|
7210 |
-
private function maybe_schedule_sync_cron() {
|
7211 |
-
$next_schedule = $this->next_sync_cron();
|
7212 |
-
|
7213 |
-
// The event is properly scheduled, so no need to reschedule it.
|
7214 |
-
if (
|
7215 |
-
is_numeric( $next_schedule ) &&
|
7216 |
-
$next_schedule > time()
|
7217 |
-
) {
|
7218 |
-
return;
|
7219 |
-
}
|
7220 |
-
|
7221 |
-
$this->schedule_sync_cron();
|
7222 |
-
}
|
7223 |
-
|
7224 |
/**
|
7225 |
* @author Vova Feldman (@svovaf)
|
7226 |
* @since 1.1.7.3
|
@@ -7399,10 +7115,6 @@
|
|
7399 |
* @param int|null $current_blog_id
|
7400 |
*/
|
7401 |
function _sync_install_cron_method( array $blog_ids, $current_blog_id = null ) {
|
7402 |
-
if ( $this->is_clone() ) {
|
7403 |
-
return;
|
7404 |
-
}
|
7405 |
-
|
7406 |
if ( $this->is_registered() ) {
|
7407 |
if ( 1 < count( $blog_ids ) ) {
|
7408 |
$this->sync_installs( array(), true );
|
@@ -7419,20 +7131,13 @@
|
|
7419 |
/**
|
7420 |
* Show a notice that activation is currently pending.
|
7421 |
*
|
7422 |
-
* @todo Add some sort of mechanism to allow users to update the email address they would like to opt-in with when $is_suspicious_email is true.
|
7423 |
-
*
|
7424 |
* @author Vova Feldman (@svovaf)
|
7425 |
* @since 1.0.7
|
7426 |
*
|
7427 |
* @param bool|string $email
|
7428 |
* @param bool $is_pending_trial Since 1.2.1.5
|
7429 |
-
* @param bool $is_suspicious_email Since 2.5.0 Set to true when there's an indication that email address the user opted in with is fake/dummy/placeholder.
|
7430 |
*/
|
7431 |
-
function _add_pending_activation_notice(
|
7432 |
-
$email = false,
|
7433 |
-
$is_pending_trial = false,
|
7434 |
-
$is_suspicious_email = false
|
7435 |
-
) {
|
7436 |
if ( ! is_string( $email ) ) {
|
7437 |
$current_user = self::_get_current_wp_user();
|
7438 |
$email = $current_user->user_email;
|
@@ -7488,20 +7193,6 @@
|
|
7488 |
/**
|
7489 |
* Don't redirect if activating multiple plugins at once (bulk activation).
|
7490 |
*/
|
7491 |
-
} else if (
|
7492 |
-
self::is_deactivation_snoozed() &&
|
7493 |
-
(
|
7494 |
-
// Either running the free code base.
|
7495 |
-
! $this->is_premium() ||
|
7496 |
-
// Or if has a free version.
|
7497 |
-
! $this->is_only_premium() ||
|
7498 |
-
// If premium only, don't redirect if license is activated.
|
7499 |
-
( $this->is_registered() && ! $this->can_use_premium_code() )
|
7500 |
-
)
|
7501 |
-
) {
|
7502 |
-
/**
|
7503 |
-
* Don't redirect if activating during the deactivation snooze period (aka troubleshooting), unless activating a paid product version that the admin didn't enter its license key yet.
|
7504 |
-
*/
|
7505 |
} else if ( ! $is_migration ) {
|
7506 |
$this->_redirect_on_activation_hook();
|
7507 |
return;
|
@@ -7688,6 +7379,8 @@
|
|
7688 |
|
7689 |
fs_enqueue_local_script( 'postmessage', 'nojquery.ba-postmessage.min.js' );
|
7690 |
fs_enqueue_local_script( 'fs-postmessage', 'postmessage.js' );
|
|
|
|
|
7691 |
}
|
7692 |
|
7693 |
/**
|
@@ -7723,14 +7416,14 @@
|
|
7723 |
<?php
|
7724 |
echo $this->apply_filters( 'optin_pointer_execute', "
|
7725 |
|
7726 |
-
|
7727 |
|
7728 |
-
|
7729 |
-
|
7730 |
-
|
7731 |
-
|
7732 |
|
7733 |
-
|
7734 |
}
|
7735 |
}
|
7736 |
});
|
@@ -7778,7 +7471,7 @@
|
|
7778 |
}
|
7779 |
|
7780 |
/* Events
|
7781 |
-
|
7782 |
/**
|
7783 |
* Delete site install from Database.
|
7784 |
*
|
@@ -8110,9 +7803,7 @@
|
|
8110 |
$plugin_version = $this->_storage->is_anonymous_ms['version'];
|
8111 |
$network = true;
|
8112 |
} else {
|
8113 |
-
$plugin_version =
|
8114 |
-
$this->_storage->is_anonymous['version'] :
|
8115 |
-
null;
|
8116 |
$network = false;
|
8117 |
}
|
8118 |
|
@@ -8260,7 +7951,7 @@
|
|
8260 |
);
|
8261 |
} else {
|
8262 |
// Activate the license.
|
8263 |
-
$install = $this->
|
8264 |
'/',
|
8265 |
'put',
|
8266 |
array( 'license_key' => $this->apply_filters( 'license_key', $license->secret_key ) )
|
@@ -8935,17 +8626,9 @@
|
|
8935 |
* @uses Freemius::is_network_anonymous() to check if the super-admin network skipped.
|
8936 |
* @uses Freemius::is_network_delegated_connection() to check if the super-admin network delegated the connection to the site admins.
|
8937 |
*/
|
8938 |
-
|
8939 |
$this->_logger->entrance();
|
8940 |
|
8941 |
-
if ( ! $this->_is_network_active ) {
|
8942 |
-
FS_Clone_Manager::instance()->store_new_blog_install_info( $blog_id );
|
8943 |
-
return;
|
8944 |
-
}
|
8945 |
-
|
8946 |
-
$site = null;
|
8947 |
-
$new_blog_id = $blog_id;
|
8948 |
-
|
8949 |
if ( $this->is_premium() &&
|
8950 |
$this->is_network_connected() &&
|
8951 |
is_object( $this->_license ) &&
|
@@ -8979,13 +8662,9 @@
|
|
8979 |
}
|
8980 |
}
|
8981 |
|
8982 |
-
$site = $this->_site;
|
8983 |
-
|
8984 |
$this->switch_to_blog( $current_blog_id );
|
8985 |
|
8986 |
-
if ( is_object( $
|
8987 |
-
FS_Clone_Manager::instance()->store_new_blog_install_info( $blog_id, $site );
|
8988 |
-
|
8989 |
// Already connected (with or without a license), so no need to continue.
|
8990 |
return;
|
8991 |
}
|
@@ -9018,8 +8697,6 @@
|
|
9018 |
false
|
9019 |
);
|
9020 |
|
9021 |
-
$site = $this->_site;
|
9022 |
-
|
9023 |
$this->switch_to_blog( $current_blog_id );
|
9024 |
} else {
|
9025 |
/**
|
@@ -9030,8 +8707,8 @@
|
|
9030 |
$has_delegated_site = false;
|
9031 |
|
9032 |
$sites = self::get_sites();
|
9033 |
-
foreach ( $sites as $
|
9034 |
-
$blog_id = self::get_site_blog_id( $
|
9035 |
|
9036 |
if ( $this->is_site_delegated_connection( $blog_id ) ) {
|
9037 |
$has_delegated_site = true;
|
@@ -9045,36 +8722,6 @@
|
|
9045 |
$this->skip_site_connection( $blog_id );
|
9046 |
}
|
9047 |
}
|
9048 |
-
|
9049 |
-
/**
|
9050 |
-
* Store the new blog's information even if there's no install so that when a clone install is stored in the new blog's storage, we can try to resolve it automatically.
|
9051 |
-
*
|
9052 |
-
* @author Leo Fajardo (@leorw)
|
9053 |
-
* @since 2.5.0
|
9054 |
-
*/
|
9055 |
-
FS_Clone_Manager::instance()->store_new_blog_install_info( $new_blog_id, $site );
|
9056 |
-
}
|
9057 |
-
|
9058 |
-
/**
|
9059 |
-
* @author Vova Feldman (@svovaf)
|
9060 |
-
* @since 2.5.0
|
9061 |
-
*
|
9062 |
-
* @param \WP_Site $new_site
|
9063 |
-
* @param array $args
|
9064 |
-
*/
|
9065 |
-
public function _after_wp_initialize_site_callback( WP_Site $new_site, $args ) {
|
9066 |
-
$this->_logger->entrance();
|
9067 |
-
|
9068 |
-
$this->_after_new_blog_callback(
|
9069 |
-
$new_site->id,
|
9070 |
-
// Dummy user ID (not in use).
|
9071 |
-
0,
|
9072 |
-
$new_site->domain,
|
9073 |
-
$new_site->path,
|
9074 |
-
$new_site->network_id,
|
9075 |
-
// Dummy meta, not in use.
|
9076 |
-
array()
|
9077 |
-
);
|
9078 |
}
|
9079 |
|
9080 |
/**
|
@@ -9650,7 +9297,6 @@
|
|
9650 |
*
|
9651 |
* @param string[] string $override
|
9652 |
* @param bool $only_diff
|
9653 |
-
* @param bool $is_keepalive
|
9654 |
* @param bool $include_plugins Since 1.1.8 by default include plugin changes.
|
9655 |
* @param bool $include_themes Since 1.1.8 by default include plugin changes.
|
9656 |
*
|
@@ -9659,7 +9305,6 @@
|
|
9659 |
private function get_installs_data_for_api(
|
9660 |
array $override,
|
9661 |
$only_diff = false,
|
9662 |
-
$is_keepalive = false,
|
9663 |
$include_plugins = true,
|
9664 |
$include_themes = true
|
9665 |
) {
|
@@ -9697,9 +9342,6 @@
|
|
9697 |
|
9698 |
$sites = self::get_sites();
|
9699 |
|
9700 |
-
$subsite_data_by_install_id = array();
|
9701 |
-
$install_url_by_install_id = array();
|
9702 |
-
|
9703 |
foreach ( $sites as $site ) {
|
9704 |
$blog_id = self::get_site_blog_id( $site );
|
9705 |
|
@@ -9718,34 +9360,10 @@
|
|
9718 |
|
9719 |
$install_data = $this->get_site_info( $site );
|
9720 |
|
9721 |
-
if ( FS_Clone_Manager::instance()->is_temporary_duplicate_by_blog_id( $install_data['blog_id'] ) ) {
|
9722 |
-
continue;
|
9723 |
-
}
|
9724 |
-
|
9725 |
$uid = $install_data['uid'];
|
9726 |
-
$url = $install_data['url'];
|
9727 |
-
|
9728 |
-
if ( isset( $subsite_data_by_install_id[ $install->id ] ) ) {
|
9729 |
-
$clone_subsite_data = $subsite_data_by_install_id[ $install->id ];
|
9730 |
-
$clone_install_url = $install_url_by_install_id[ $install->id ];
|
9731 |
-
|
9732 |
-
if (
|
9733 |
-
/**
|
9734 |
-
* If we already have an install with the same URL as the subsite it's stored in, skip the current subsite. Otherwise, replace the existing install's data with the current subsite's install's data if the URLs match.
|
9735 |
-
*
|
9736 |
-
* @author Leo Fajardo (@leorw)
|
9737 |
-
* @since 2.5.0
|
9738 |
-
*/
|
9739 |
-
fs_strip_url_protocol( untrailingslashit( $clone_install_url ) ) === fs_strip_url_protocol( untrailingslashit( $clone_subsite_data['url'] ) ) ||
|
9740 |
-
fs_strip_url_protocol( untrailingslashit( $install->url ) ) !== fs_strip_url_protocol( untrailingslashit( $url ) )
|
9741 |
-
) {
|
9742 |
-
continue;
|
9743 |
-
}
|
9744 |
-
}
|
9745 |
|
9746 |
unset( $install_data['blog_id'] );
|
9747 |
unset( $install_data['uid'] );
|
9748 |
-
unset( $install_data['url'] );
|
9749 |
|
9750 |
$install_data['is_disconnected'] = $install->is_disconnected;
|
9751 |
$install_data['is_active'] = $this->is_active_for_site( $blog_id );
|
@@ -9770,25 +9388,18 @@
|
|
9770 |
$is_common_diff_for_any_site = $is_common_diff_for_any_site || $is_common_diff;
|
9771 |
}
|
9772 |
|
9773 |
-
if ( ! empty( $install_data ) || $is_common_diff
|
9774 |
// Add install ID and site unique ID.
|
9775 |
$install_data['id'] = $install->id;
|
9776 |
$install_data['uid'] = $uid;
|
9777 |
-
$install_data['url'] = $url;
|
9778 |
|
9779 |
-
$
|
9780 |
-
$install_url_by_install_id[ $install->id ] = $install->url;
|
9781 |
}
|
9782 |
}
|
9783 |
}
|
9784 |
|
9785 |
restore_current_blog();
|
9786 |
|
9787 |
-
$installs_data = array_merge(
|
9788 |
-
$installs_data,
|
9789 |
-
array_values( $subsite_data_by_install_id )
|
9790 |
-
);
|
9791 |
-
|
9792 |
if ( 0 < count( $installs_data ) && ( $is_common_diff_for_any_site || ! $only_diff ) ) {
|
9793 |
if ( ! $only_diff ) {
|
9794 |
$installs_data[] = $common;
|
@@ -9860,11 +9471,10 @@
|
|
9860 |
*
|
9861 |
* @param string[] string $override
|
9862 |
* @param bool $flush
|
9863 |
-
* @param bool $is_two_way_sync @since 2.5.0 If true and there's a successful API request, the install sync cron will be cleared.
|
9864 |
*
|
9865 |
* @return false|object|string
|
9866 |
*/
|
9867 |
-
private function send_install_update( $override = array(), $flush = false
|
9868 |
$this->_logger->entrance();
|
9869 |
|
9870 |
$check_properties = $this->get_install_data_for_api( $override );
|
@@ -9890,9 +9500,10 @@
|
|
9890 |
}
|
9891 |
}
|
9892 |
|
9893 |
-
if ( $
|
9894 |
/**
|
9895 |
-
*
|
|
|
9896 |
*
|
9897 |
* @author Leo Fajardo (@leorw)
|
9898 |
* @since 2.2.3
|
@@ -9908,11 +9519,11 @@
|
|
9908 |
$this->set_keepalive_timestamp();
|
9909 |
|
9910 |
// Send updated values to FS.
|
9911 |
-
$site = $this->
|
9912 |
|
9913 |
-
if ( $
|
9914 |
/**
|
9915 |
-
*
|
9916 |
*
|
9917 |
* @author Leo Fajardo (@leorw)
|
9918 |
* @since 2.2.3
|
@@ -9934,29 +9545,37 @@
|
|
9934 |
*
|
9935 |
* @param string[] string $override
|
9936 |
* @param bool $flush
|
9937 |
-
* @param bool $is_two_way_sync @since 2.5.0 If true and there's a successful API request, the install sync cron will be cleared.
|
9938 |
*
|
9939 |
* @return false|object|string
|
9940 |
*/
|
9941 |
-
private function send_installs_update( $override = array(), $flush = false
|
9942 |
$this->_logger->entrance();
|
9943 |
|
9944 |
-
|
9945 |
-
* Pass `true` to use the network level storage since the update is for many installs.
|
9946 |
-
*
|
9947 |
-
* @author Leo Fajardo (@leorw)
|
9948 |
-
* @since 2.2.3
|
9949 |
-
*/
|
9950 |
-
$should_send_keepalive = $this->should_send_keepalive_update( true );
|
9951 |
-
|
9952 |
-
$installs_data = $this->get_installs_data_for_api( $override, ! $flush, $should_send_keepalive );
|
9953 |
|
|
|
9954 |
if ( empty( $installs_data ) ) {
|
9955 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9956 |
}
|
9957 |
|
9958 |
-
if ( $
|
9959 |
-
// Update last install sync timestamp
|
9960 |
$this->set_cron_execution_timestamp( 'install_sync' );
|
9961 |
}
|
9962 |
|
@@ -9971,8 +9590,8 @@
|
|
9971 |
// Send updated values to FS.
|
9972 |
$result = $this->get_api_user_scope()->call( "/plugins/{$this->_plugin->id}/installs.json", 'put', $installs_data );
|
9973 |
|
9974 |
-
if ( $
|
9975 |
-
// I successfully sent a
|
9976 |
$this->clear_install_sync_cron();
|
9977 |
}
|
9978 |
|
@@ -10022,10 +9641,10 @@
|
|
10022 |
* @param string[] string $override
|
10023 |
* @param bool $flush
|
10024 |
*/
|
10025 |
-
function sync_install( $override = array(), $flush = false ) {
|
10026 |
$this->_logger->entrance();
|
10027 |
|
10028 |
-
$site = $this->send_install_update( $override, $flush
|
10029 |
|
10030 |
if ( false === $site ) {
|
10031 |
// No sync required.
|
@@ -10054,7 +9673,7 @@
|
|
10054 |
private function sync_installs( $override = array(), $flush = false ) {
|
10055 |
$this->_logger->entrance();
|
10056 |
|
10057 |
-
$result = $this->send_installs_update( $override, $flush
|
10058 |
|
10059 |
if ( false === $result ) {
|
10060 |
// No sync required.
|
@@ -10307,17 +9926,7 @@
|
|
10307 |
return;
|
10308 |
}
|
10309 |
|
10310 |
-
|
10311 |
-
! $fs->is_clone() &&
|
10312 |
-
/**
|
10313 |
-
* If there's a context install, run this method only when there's also a context user (e.g., when cloning a subsite of a multisite network into a single-site installation, it's possible for an install to be associated with a non-existing user entity; we want Freemius to be off in this case, while we are trying to recover the user).
|
10314 |
-
*
|
10315 |
-
* @author Leo Fajardo
|
10316 |
-
*/
|
10317 |
-
( ! is_object( $fs->_site ) || $fs->is_registered() )
|
10318 |
-
) {
|
10319 |
-
$fs->_uninstall_plugin_event();
|
10320 |
-
}
|
10321 |
|
10322 |
$fs->do_action( 'after_uninstall' );
|
10323 |
}
|
@@ -10713,7 +10322,7 @@
|
|
10713 |
#endregion ------------------------------------------------------------------
|
10714 |
|
10715 |
/* Account
|
10716 |
-
|
10717 |
|
10718 |
/**
|
10719 |
* Find plugin's slug by plugin's basename.
|
@@ -10777,14 +10386,9 @@
|
|
10777 |
*/
|
10778 |
private static function get_all_sites(
|
10779 |
$module_type = WP_FS__MODULE_TYPE_PLUGIN,
|
10780 |
-
$blog_id = null
|
10781 |
-
$is_backup = false
|
10782 |
) {
|
10783 |
-
$sites = self::get_account_option(
|
10784 |
-
( $is_backup ? 'prev_' : '' ) . 'sites',
|
10785 |
-
$module_type,
|
10786 |
-
$blog_id
|
10787 |
-
);
|
10788 |
|
10789 |
if ( ! is_array( $sites ) ) {
|
10790 |
$sites = array();
|
@@ -11204,52 +10808,6 @@
|
|
11204 |
return $this->_site;
|
11205 |
}
|
11206 |
|
11207 |
-
/**
|
11208 |
-
* @author Leo Fajardo (@leorw)
|
11209 |
-
* @since 2.5.0
|
11210 |
-
*/
|
11211 |
-
function store_site( $site ) {
|
11212 |
-
$this->_site = $site;
|
11213 |
-
$this->_store_site( true );
|
11214 |
-
}
|
11215 |
-
|
11216 |
-
/**
|
11217 |
-
* Deletes the current install with an option to back it up in case restoration will be needed (e.g., if the automatic clone resolution attempt fails).
|
11218 |
-
*
|
11219 |
-
* @author Leo Fajardo (@leorw)
|
11220 |
-
* @since 2.5.0
|
11221 |
-
*/
|
11222 |
-
function delete_current_install( $back_up ) {
|
11223 |
-
// Back up and delete the unique ID.
|
11224 |
-
if ( $back_up ) {
|
11225 |
-
self::$_accounts->set_option( 'prev_unique_id', $this->get_anonymous_id() );
|
11226 |
-
}
|
11227 |
-
|
11228 |
-
self::$_accounts->set_option( 'unique_id', null );
|
11229 |
-
|
11230 |
-
if ( $back_up ) {
|
11231 |
-
// Back up the install before deleting it so that it can be restored later on if necessary (e.g., if the automatic clone resolution attempt fails).
|
11232 |
-
$this->back_up_site();
|
11233 |
-
}
|
11234 |
-
|
11235 |
-
$this->_delete_site();
|
11236 |
-
$this->_site = null;
|
11237 |
-
}
|
11238 |
-
|
11239 |
-
/**
|
11240 |
-
* @author Leo Fajardo (@leorw)
|
11241 |
-
* @since 2.5.0
|
11242 |
-
*/
|
11243 |
-
function restore_backup_site() {
|
11244 |
-
self::$_accounts->set_option(
|
11245 |
-
'unique_id',
|
11246 |
-
self::$_accounts->get_option( 'prev_unique_id' )
|
11247 |
-
);
|
11248 |
-
|
11249 |
-
$sites = self::get_all_sites( $this->_module_type, null, true );
|
11250 |
-
$this->store_site( clone $sites[ $this->_slug ] );
|
11251 |
-
}
|
11252 |
-
|
11253 |
/**
|
11254 |
* Get plugin add-ons.
|
11255 |
*
|
@@ -13330,76 +12888,7 @@
|
|
13330 |
);
|
13331 |
|
13332 |
fs_require_template( 'forms/license-activation.php', $vars );
|
13333 |
-
fs_require_template( 'forms/resend-key.php', $vars );
|
13334 |
-
}
|
13335 |
-
|
13336 |
-
/**
|
13337 |
-
* Displays an email address update dialog box when the user clicks on the email address "Edit" button on the "Account" page.
|
13338 |
-
*
|
13339 |
-
* @author Leo Fajardo (@leorw)
|
13340 |
-
* @since 2.5.0
|
13341 |
-
*/
|
13342 |
-
function _add_email_address_update_dialog_box() {
|
13343 |
-
$vars = array( 'id' => $this->_module_id );
|
13344 |
-
|
13345 |
-
fs_require_template( 'forms/email-address-update.php', $vars );
|
13346 |
-
}
|
13347 |
-
|
13348 |
-
/**
|
13349 |
-
* @author Leo Fajardo (@leorw)
|
13350 |
-
* @since 2.5.0
|
13351 |
-
*/
|
13352 |
-
function _add_email_address_update_option() {
|
13353 |
-
if ( ! $this->should_handle_user_change() ) {
|
13354 |
-
return;
|
13355 |
-
}
|
13356 |
-
|
13357 |
-
// Add email address update AJAX handler.
|
13358 |
-
$this->add_ajax_action( 'update_email_address', array( &$this, '_email_address_update_ajax_handler' ) );
|
13359 |
-
}
|
13360 |
-
|
13361 |
-
/**
|
13362 |
-
* @author Leo Fajardo (@leorw)
|
13363 |
-
* @since 2.5.0
|
13364 |
-
*/
|
13365 |
-
function _email_address_update_ajax_handler() {
|
13366 |
-
$this->check_ajax_referer( 'update_email_address' );
|
13367 |
-
|
13368 |
-
$new_email_address = fs_request_get( 'email_address' );
|
13369 |
-
$transfer_type = fs_request_get( 'transfer_type' );
|
13370 |
-
|
13371 |
-
$result = $this->update_email( $new_email_address );
|
13372 |
-
|
13373 |
-
if ( ! FS_Api::is_api_error( $result ) ) {
|
13374 |
-
self::shoot_ajax_success();
|
13375 |
-
}
|
13376 |
-
|
13377 |
-
$error = '';
|
13378 |
-
|
13379 |
-
if ( FS_Api::is_api_error_object( $result ) ) {
|
13380 |
-
switch ( $result->error->code ) {
|
13381 |
-
case 'user_exist':
|
13382 |
-
case 'account_verification_required':
|
13383 |
-
$error = array(
|
13384 |
-
'code' => 'change_ownership',
|
13385 |
-
'url' => $this->get_account_url( 'change_owner', array(
|
13386 |
-
'state' => 'init',
|
13387 |
-
'candidate_email' => $new_email_address,
|
13388 |
-
'transfer_type' => $transfer_type,
|
13389 |
-
) ),
|
13390 |
-
);
|
13391 |
-
|
13392 |
-
break;
|
13393 |
-
}
|
13394 |
-
}
|
13395 |
-
|
13396 |
-
if ( empty( $error ) ) {
|
13397 |
-
$error = is_object( $result ) ?
|
13398 |
-
var_export( $result->error, true ) :
|
13399 |
-
$result;
|
13400 |
-
}
|
13401 |
-
|
13402 |
-
self::shoot_ajax_failure( $error );
|
13403 |
}
|
13404 |
|
13405 |
/**
|
@@ -13609,15 +13098,10 @@
|
|
13609 |
( $is_network_admin && $this->is_network_active() && ! $this->is_network_delegated_connection() ) ||
|
13610 |
( ! $is_network_admin && ( ! $this->is_network_active() || $this->is_delegated_connection() ) )
|
13611 |
) {
|
13612 |
-
|
13613 |
-
|
13614 |
-
|
13615 |
-
)
|
13616 |
-
/**
|
13617 |
-
* @since 1.2.0 Add license action link only on plugins page.
|
13618 |
-
*/
|
13619 |
-
$this->_add_license_action_link();
|
13620 |
-
}
|
13621 |
}
|
13622 |
}
|
13623 |
|
@@ -13789,7 +13273,7 @@
|
|
13789 |
self::shoot_ajax_failure();
|
13790 |
}
|
13791 |
|
13792 |
-
$site = $this->
|
13793 |
'',
|
13794 |
'put',
|
13795 |
array(
|
@@ -14402,7 +13886,7 @@
|
|
14402 |
|
14403 |
$addon_info = $fs->_get_addon_info( $addon_id, $is_installed );
|
14404 |
|
14405 |
-
if ( !
|
14406 |
// Add-on is not associated with an install entity.
|
14407 |
continue;
|
14408 |
}
|
@@ -15379,16 +14863,6 @@
|
|
15379 |
return ( defined( 'DOING_CRON' ) && DOING_CRON );
|
15380 |
}
|
15381 |
|
15382 |
-
/**
|
15383 |
-
* @author Leo Fajardo (@leorw)
|
15384 |
-
* @since 2.5.0
|
15385 |
-
*
|
15386 |
-
* @return bool
|
15387 |
-
*/
|
15388 |
-
static function is_admin_post() {
|
15389 |
-
return ( 'admin-post.php' === self::get_current_page() );
|
15390 |
-
}
|
15391 |
-
|
15392 |
/**
|
15393 |
* Check if a real user is visiting the admin dashboard.
|
15394 |
*
|
@@ -15402,7 +14876,7 @@
|
|
15402 |
is_admin() &&
|
15403 |
! self::is_ajax() &&
|
15404 |
! self::is_cron() &&
|
15405 |
-
|
15406 |
);
|
15407 |
}
|
15408 |
|
@@ -15683,17 +15157,12 @@
|
|
15683 |
}
|
15684 |
|
15685 |
/**
|
15686 |
-
* @todo Implement pagination when accessing the subsites collection.
|
15687 |
-
*
|
15688 |
* @author Leo Fajardo (@leorw)
|
15689 |
* @since 2.0.0
|
15690 |
*
|
15691 |
-
* @param int $limit Default to 1,000
|
15692 |
-
* @param int $offset Default to 0
|
15693 |
-
*
|
15694 |
* @return array Active & public sites collection.
|
15695 |
*/
|
15696 |
-
static function get_sites(
|
15697 |
if ( ! is_multisite() ) {
|
15698 |
return array();
|
15699 |
}
|
@@ -15715,8 +15184,6 @@
|
|
15715 |
'mature' => 0,
|
15716 |
'spam' => 0,
|
15717 |
'deleted' => 0,
|
15718 |
-
'number' => $limit,
|
15719 |
-
'offset' => $offset,
|
15720 |
);
|
15721 |
|
15722 |
if ( function_exists( 'get_sites' ) ) {
|
@@ -15906,16 +15373,11 @@
|
|
15906 |
*
|
15907 |
* @param int $blog_id
|
15908 |
* @param FS_Site $install
|
15909 |
-
* @param bool $flush
|
15910 |
*
|
15911 |
* @return bool Since 2.3.1 returns if a switch was made.
|
15912 |
*/
|
15913 |
-
function switch_to_blog( $blog_id, FS_Site $install = null
|
15914 |
-
if ( ! is_numeric( $blog_id ) ) {
|
15915 |
-
return false;
|
15916 |
-
}
|
15917 |
-
|
15918 |
-
if ( ! $flush && $blog_id == $this->_context_is_network_or_blog_id ) {
|
15919 |
return false;
|
15920 |
}
|
15921 |
|
@@ -15979,7 +15441,7 @@
|
|
15979 |
unset( $this->_site_api );
|
15980 |
unset( $this->_user_api );
|
15981 |
|
15982 |
-
return
|
15983 |
}
|
15984 |
|
15985 |
/**
|
@@ -16276,10 +15738,6 @@
|
|
16276 |
}
|
16277 |
}
|
16278 |
|
16279 |
-
if ( ! $this->is_registered() ) {
|
16280 |
-
return;
|
16281 |
-
}
|
16282 |
-
|
16283 |
if ( $this->is_sync_cron_scheduled() &&
|
16284 |
$context_blog_id == $this->get_sync_cron_blog_id()
|
16285 |
) {
|
@@ -16313,10 +15771,6 @@
|
|
16313 |
|
16314 |
$this->update_multisite_data_after_site_deactivation( $context_blog_id );
|
16315 |
|
16316 |
-
if ( ! $this->is_registered() ) {
|
16317 |
-
return;
|
16318 |
-
}
|
16319 |
-
|
16320 |
$current_blog_id = get_current_blog_id();
|
16321 |
|
16322 |
$this->switch_to_blog( $context_blog_id );
|
@@ -16350,10 +15804,6 @@
|
|
16350 |
|
16351 |
$this->update_multisite_data_after_site_deactivation( $context_blog_id );
|
16352 |
|
16353 |
-
if ( ! $this->is_registered() ) {
|
16354 |
-
return;
|
16355 |
-
}
|
16356 |
-
|
16357 |
$current_blog_id = get_current_blog_id();
|
16358 |
|
16359 |
$this->switch_to_blog( $context_blog_id );
|
@@ -16371,20 +15821,6 @@
|
|
16371 |
$this->switch_to_blog( $current_blog_id );
|
16372 |
}
|
16373 |
|
16374 |
-
/**
|
16375 |
-
* Executed after site deletion, called from wp_delete_site
|
16376 |
-
*
|
16377 |
-
* @author Dario Curvino (@dudo)
|
16378 |
-
* @since 2.5.0
|
16379 |
-
*
|
16380 |
-
* @param WP_Site $old_site
|
16381 |
-
*/
|
16382 |
-
public function _after_wpsite_deleted_callback( WP_Site $old_site ) {
|
16383 |
-
$this->_logger->entrance();
|
16384 |
-
|
16385 |
-
$this->_after_site_deleted_callback( $old_site->blog_id, true );
|
16386 |
-
}
|
16387 |
-
|
16388 |
/**
|
16389 |
* Executed after site re-activation.
|
16390 |
*
|
@@ -16631,7 +16067,7 @@
|
|
16631 |
}
|
16632 |
|
16633 |
/* Logger
|
16634 |
-
|
16635 |
/**
|
16636 |
* @param string $id
|
16637 |
* @param bool $prefix_slug
|
@@ -16656,7 +16092,7 @@
|
|
16656 |
}
|
16657 |
|
16658 |
/* Security
|
16659 |
-
|
16660 |
private static function _encrypt( $str ) {
|
16661 |
if ( is_null( $str ) ) {
|
16662 |
return null;
|
@@ -16876,6 +16312,20 @@
|
|
16876 |
) {
|
16877 |
// Load site.
|
16878 |
$this->_site = $site;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
16879 |
}
|
16880 |
|
16881 |
$user = null;
|
@@ -16904,30 +16354,7 @@
|
|
16904 |
/**
|
16905 |
* This is a special fault tolerance mechanism to handle a scenario that the user data is missing.
|
16906 |
*/
|
16907 |
-
|
16908 |
-
! isset( $this->_storage->user_recovery_from_install_last_attempt_timestamp ) ||
|
16909 |
-
time() > ( $this->_storage->user_recovery_from_install_last_attempt_timestamp + FS_Clone_Manager::CLONE_RESOLUTION_MAX_EXECUTION_TIME )
|
16910 |
-
) {
|
16911 |
-
$user = $this->sync_user_by_current_install();
|
16912 |
-
} else {
|
16913 |
-
return;
|
16914 |
-
}
|
16915 |
-
|
16916 |
-
if ( is_object( $user ) ) {
|
16917 |
-
$this->_storage->user_was_recovered_from_install = true;
|
16918 |
-
} else {
|
16919 |
-
$this->_storage->user_recovery_from_install_attempts = isset( $this->_storage->user_recovery_from_install_attempts ) ?
|
16920 |
-
( $this->_storage->user_recovery_from_install_attempts + 1 ) :
|
16921 |
-
1;
|
16922 |
-
|
16923 |
-
if ( $this->_storage->user_recovery_from_install_attempts >= 3 ) {
|
16924 |
-
$this->delete_current_install( false );
|
16925 |
-
} else {
|
16926 |
-
$this->_storage->user_recovery_from_install_last_attempt_timestamp = time();
|
16927 |
-
|
16928 |
-
return;
|
16929 |
-
}
|
16930 |
-
}
|
16931 |
}
|
16932 |
|
16933 |
$this->_user = ( $user instanceof FS_User ) ?
|
@@ -16941,23 +16368,6 @@
|
|
16941 |
}
|
16942 |
|
16943 |
if ( is_object( $this->_site ) ) {
|
16944 |
-
// Load plans.
|
16945 |
-
$this->_plans = isset( $plans[ $this->_slug ] ) ?
|
16946 |
-
$plans[ $this->_slug ] :
|
16947 |
-
array();
|
16948 |
-
|
16949 |
-
if ( ! is_array( $this->_plans ) || empty( $this->_plans ) ) {
|
16950 |
-
$this->_sync_plans();
|
16951 |
-
} else {
|
16952 |
-
for ( $i = 0, $len = count( $this->_plans ); $i < $len; $i ++ ) {
|
16953 |
-
if ( $this->_plans[ $i ] instanceof FS_Plugin_Plan ) {
|
16954 |
-
$this->_plans[ $i ] = self::decrypt_entity( $this->_plans[ $i ] );
|
16955 |
-
} else {
|
16956 |
-
unset( $this->_plans[ $i ] );
|
16957 |
-
}
|
16958 |
-
}
|
16959 |
-
}
|
16960 |
-
|
16961 |
$this->_license = $this->_get_license_by_id( $this->_site->license_id );
|
16962 |
|
16963 |
if ( $this->_site->version != $this->get_plugin_version() ) {
|
@@ -16976,13 +16386,6 @@
|
|
16976 |
if ( $this->is_theme() ) {
|
16977 |
$this->_register_account_hooks();
|
16978 |
}
|
16979 |
-
|
16980 |
-
if (
|
16981 |
-
$this->is_clone() &&
|
16982 |
-
empty( FS_Clone_Manager::instance()->get_clone_identification_timestamp() )
|
16983 |
-
) {
|
16984 |
-
FS_Clone_Manager::instance()->store_clone_identification_timestamp();
|
16985 |
-
}
|
16986 |
}
|
16987 |
|
16988 |
/**
|
@@ -17194,10 +16597,6 @@
|
|
17194 |
);
|
17195 |
}
|
17196 |
|
17197 |
-
if ( is_multisite() && function_exists( 'get_network' ) ) {
|
17198 |
-
$params['network_uid'] = $this->get_anonymous_network_id();
|
17199 |
-
}
|
17200 |
-
|
17201 |
return array_merge( $params, $override_with );
|
17202 |
}
|
17203 |
|
@@ -17219,7 +16618,6 @@
|
|
17219 |
* @param bool $is_disconnected Whether or not to opt in without tracking.
|
17220 |
* @param null|bool $is_marketing_allowed
|
17221 |
* @param array $sites If network-level opt-in, an array of containing details of sites.
|
17222 |
-
* @param bool $redirect
|
17223 |
*
|
17224 |
* @return string|object
|
17225 |
* @use WP_Error
|
@@ -17233,8 +16631,7 @@
|
|
17233 |
$trial_plan_id = false,
|
17234 |
$is_disconnected = false,
|
17235 |
$is_marketing_allowed = null,
|
17236 |
-
$sites = array()
|
17237 |
-
$redirect = true
|
17238 |
) {
|
17239 |
$this->_logger->entrance();
|
17240 |
|
@@ -17258,7 +16655,7 @@
|
|
17258 |
$fs_user,
|
17259 |
false,
|
17260 |
$trial_plan_id,
|
17261 |
-
|
17262 |
true,
|
17263 |
$sites
|
17264 |
);
|
@@ -17418,8 +16815,7 @@
|
|
17418 |
true ),
|
17419 |
false,
|
17420 |
$filtered_license_key,
|
17421 |
-
! empty( $params['trial_plan_id'] )
|
17422 |
-
isset( $decoded->is_suspicious_email ) && $decoded->is_suspicious_email
|
17423 |
);
|
17424 |
} else if ( isset( $decoded->install_secret_key ) ) {
|
17425 |
return $this->install_with_new_user(
|
@@ -17694,13 +17090,7 @@
|
|
17694 |
);
|
17695 |
}
|
17696 |
} else if ( fs_request_has( 'pending_activation' ) ) {
|
17697 |
-
$this->set_pending_confirmation(
|
17698 |
-
fs_request_get( 'user_email' ),
|
17699 |
-
true,
|
17700 |
-
false,
|
17701 |
-
false,
|
17702 |
-
fs_request_get_bool( 'is_suspicious_email' )
|
17703 |
-
);
|
17704 |
}
|
17705 |
}
|
17706 |
}
|
@@ -17795,7 +17185,7 @@
|
|
17795 |
$site->secret_key = $install_secret_key;
|
17796 |
|
17797 |
$this->_site = $site;
|
17798 |
-
$site_result = $this->get_api_site_scope(
|
17799 |
$site = new FS_Site( $site_result );
|
17800 |
$this->_site = $site;
|
17801 |
|
@@ -17942,8 +17332,7 @@
|
|
17942 |
$email = false,
|
17943 |
$redirect = true,
|
17944 |
$license_key = false,
|
17945 |
-
$is_pending_trial = false
|
17946 |
-
$is_suspicious_email = false
|
17947 |
) {
|
17948 |
if ( $this->_ignore_pending_mode ) {
|
17949 |
/**
|
@@ -17958,7 +17347,7 @@
|
|
17958 |
// Install must be activated via email since
|
17959 |
// user with the same email already exist.
|
17960 |
$this->_storage->is_pending_activation = true;
|
17961 |
-
$this->_add_pending_activation_notice( $email, $is_pending_trial
|
17962 |
}
|
17963 |
|
17964 |
if ( ! empty( $license_key ) ) {
|
@@ -18021,7 +17410,7 @@
|
|
18021 |
*
|
18022 |
* @return object|string If redirect is `false`, returns the next page the user should be redirected to, or the API error object if failed to install.
|
18023 |
*/
|
18024 |
-
function install_with_current_user(
|
18025 |
$license_key = false,
|
18026 |
$trial_plan_id = false,
|
18027 |
$sites = array(),
|
@@ -18404,6 +17793,9 @@
|
|
18404 |
$this->send_installs_update();
|
18405 |
}
|
18406 |
|
|
|
|
|
|
|
18407 |
$current_blog = get_current_blog_id();
|
18408 |
|
18409 |
foreach ( $blog_2_install_map as $blog_id => $install ) {
|
@@ -18412,12 +17804,7 @@
|
|
18412 |
$this->do_action( 'after_account_connection', $this->_user, $install );
|
18413 |
}
|
18414 |
|
18415 |
-
|
18416 |
-
$this->switch_to_blog(
|
18417 |
-
$current_blog,
|
18418 |
-
$first_install,
|
18419 |
-
( $this->_site->id != $first_install->id )
|
18420 |
-
);
|
18421 |
|
18422 |
$this->do_action( 'after_network_account_connection', $this->_user, $blog_2_install_map );
|
18423 |
}
|
@@ -18521,10 +17908,6 @@
|
|
18521 |
// return;
|
18522 |
// }
|
18523 |
|
18524 |
-
if ( is_object( $this->_site ) && ! $this->is_registered() ) {
|
18525 |
-
return;
|
18526 |
-
}
|
18527 |
-
|
18528 |
/**
|
18529 |
* When running from a site admin with a network activated module and the connection
|
18530 |
* was NOT delegated and the user still haven't skipped or opted-in, then hide the
|
@@ -19479,7 +18862,7 @@
|
|
19479 |
*
|
19480 |
* @return string
|
19481 |
*/
|
19482 |
-
static function get_ajax_action_static( $tag, $module_id = null ) {
|
19483 |
$action = "fs_{$tag}";
|
19484 |
|
19485 |
if ( ! empty( $module_id ) ) {
|
@@ -19722,7 +19105,7 @@
|
|
19722 |
}
|
19723 |
|
19724 |
/* Account Page
|
19725 |
-
|
19726 |
/**
|
19727 |
* Update site information.
|
19728 |
*
|
@@ -19733,7 +19116,7 @@
|
|
19733 |
* @param null|int $network_level_or_blog_id Since 2.0.0
|
19734 |
* @param \FS_Site $site Since 2.0.0
|
19735 |
*/
|
19736 |
-
private function _store_site( $store = true, $network_level_or_blog_id = null, FS_Site $site = null
|
19737 |
$this->_logger->entrance();
|
19738 |
|
19739 |
if ( is_null( $site ) ) {
|
@@ -19748,12 +19131,9 @@
|
|
19748 |
|
19749 |
$site_clone = clone $site;
|
19750 |
|
19751 |
-
$sites = self::get_all_sites( $this->_module_type, $network_level_or_blog_id
|
19752 |
|
19753 |
-
if (
|
19754 |
-
! $is_backup &&
|
19755 |
-
is_object( $this->_user ) && $this->_user->id != $site->user_id
|
19756 |
-
) {
|
19757 |
$this->sync_user_by_current_install( $site->user_id );
|
19758 |
|
19759 |
$prev_stored_user_id = $this->_storage->get( 'prev_user_id', false, $network_level_or_blog_id );
|
@@ -19778,26 +19158,7 @@
|
|
19778 |
|
19779 |
$sites[ $this->_slug ] = $site_clone;
|
19780 |
|
19781 |
-
$this->set_account_option(
|
19782 |
-
( $is_backup ? 'prev_' : '' ) . 'sites',
|
19783 |
-
$sites,
|
19784 |
-
$store,
|
19785 |
-
$network_level_or_blog_id
|
19786 |
-
);
|
19787 |
-
}
|
19788 |
-
|
19789 |
-
/**
|
19790 |
-
* Stores the context site in the sites backup storage. This logic is used before deleting the site info so that it can be restored later on if necessary (e.g., if the automatic clone resolution attempt fails).
|
19791 |
-
*
|
19792 |
-
* @author Leo Fajardo (@leorw)
|
19793 |
-
* @since 2.5.0
|
19794 |
-
*/
|
19795 |
-
private function back_up_site() {
|
19796 |
-
$this->_logger->entrance();
|
19797 |
-
|
19798 |
-
$site_clone = clone $this->_site;
|
19799 |
-
|
19800 |
-
$this->_store_site( true, null, $site_clone, true );
|
19801 |
}
|
19802 |
|
19803 |
/**
|
@@ -21038,10 +20399,10 @@
|
|
21038 |
$this->switch_to_blog( $current_blog_id );
|
21039 |
}
|
21040 |
|
21041 |
-
$result = $this->send_install_update( array(), true
|
21042 |
$is_valid = $this->is_api_result_entity( $result );
|
21043 |
} else {
|
21044 |
-
$result = $this->send_installs_update( array(), true
|
21045 |
$is_valid = $this->is_api_result_object( $result, 'installs' );
|
21046 |
}
|
21047 |
|
@@ -21051,7 +20412,7 @@
|
|
21051 |
$this->switch_to_blog( $this->_storage->network_install_blog_id );
|
21052 |
}
|
21053 |
|
21054 |
-
// Show API
|
21055 |
if ( ! $background || $this->is_paying() ) {
|
21056 |
// Try to ping API to see if not blocked.
|
21057 |
if ( ! FS_Api::test() ) {
|
@@ -21061,49 +20422,25 @@
|
|
21061 |
* @author Vova Feldman (@svovaf)
|
21062 |
* @since 1.1.6 Only show message related to one of the Freemius powered plugins. Once it will be resolved it will fix the issue for all plugins anyways. There's no point to scare users with multiple error messages.
|
21063 |
*/
|
|
|
21064 |
|
21065 |
if ( ! self::$_global_admin_notices->has_sticky( 'api_blocked' ) ) {
|
21066 |
-
|
21067 |
-
|
21068 |
-
|
21069 |
-
|
21070 |
-
|
21071 |
-
|
21072 |
-
|
21073 |
-
|
21074 |
-
|
21075 |
-
|
21076 |
-
|
21077 |
-
|
21078 |
-
|
21079 |
-
|
21080 |
-
*/
|
21081 |
-
set_transient( '_fs_api_connection_retry_counter', $counter + 1, WP_FS__TIME_WEEK_IN_SEC );
|
21082 |
-
}
|
21083 |
-
}
|
21084 |
-
|
21085 |
-
// Add notice instantly for not-background sync and only after 3 failed attempts for background sync.
|
21086 |
-
if ( $add_notice ) {
|
21087 |
-
self::$_global_admin_notices->add(
|
21088 |
-
sprintf(
|
21089 |
-
$this->get_text_inline( 'Your server is blocking the access to Freemius\' API, which is crucial for %1$s synchronization. Please contact your host to whitelist %2$s', 'server-blocking-access' ),
|
21090 |
-
$this->get_plugin_name(),
|
21091 |
-
'<b>' . implode( ', ', $this->apply_filters( 'api_domains', array(
|
21092 |
-
'api.freemius.com',
|
21093 |
-
'wp.freemius.com'
|
21094 |
-
) ) ) . '</b>'
|
21095 |
-
) . '<br> ' . $this->get_text_inline( 'Error received from the server:', 'server-error-message' ) . var_export( $result->error, true ),
|
21096 |
-
$this->get_text_x_inline( 'Oops', 'exclamation', 'oops' ) . '...',
|
21097 |
-
'error',
|
21098 |
-
$background,
|
21099 |
-
'api_blocked'
|
21100 |
-
);
|
21101 |
-
|
21102 |
-
// Notice was just shown, reset connectivity counter.
|
21103 |
-
delete_transient( '_fs_api_connection_retry_counter' );
|
21104 |
-
}
|
21105 |
}
|
21106 |
-
} else
|
21107 |
// Authentication params are broken.
|
21108 |
$this->_admin_notices->add(
|
21109 |
$this->get_text_inline( 'It seems like one of the authentication parameters is wrong. Update your Public Key, Secret Key & User ID, and try again.', 'wrong-authentication-param-message' ) . '<br> ' . $this->get_text_inline( 'Error received from the server:', 'server-error-message' ) . var_export( $result->error, true ),
|
@@ -21117,9 +20454,6 @@
|
|
21117 |
return;
|
21118 |
}
|
21119 |
|
21120 |
-
// API is working now. Delete the transient and start afresh.
|
21121 |
-
delete_transient('_fs_api_connection_retry_counter');
|
21122 |
-
|
21123 |
if ( $is_site_level_sync ) {
|
21124 |
$site = new FS_Site( $result );
|
21125 |
} else {
|
@@ -21311,7 +20645,7 @@
|
|
21311 |
}
|
21312 |
|
21313 |
if ( ! $this->is_addon() &&
|
21314 |
-
$this->_site->is_beta() !== $site->is_beta
|
21315 |
) {
|
21316 |
// Beta flag updated.
|
21317 |
$this->_site = $site;
|
@@ -22045,10 +21379,6 @@
|
|
22045 |
) {
|
22046 |
$this->_logger->entrance();
|
22047 |
|
22048 |
-
if ( $this->is_unresolved_clone() ) {
|
22049 |
-
return false;
|
22050 |
-
}
|
22051 |
-
|
22052 |
$switch_to_blog_id = null;
|
22053 |
|
22054 |
/**
|
@@ -22161,11 +21491,9 @@
|
|
22161 |
private function get_latest_download_api_url( $plugin_id = false ) {
|
22162 |
$this->_logger->entrance();
|
22163 |
|
22164 |
-
|
22165 |
$this->_get_latest_version_endpoint( $plugin_id, 'zip' )
|
22166 |
);
|
22167 |
-
|
22168 |
-
return str_replace( 'http:', 'https:', $download_api_url );
|
22169 |
}
|
22170 |
|
22171 |
/**
|
@@ -22360,6 +21688,7 @@
|
|
22360 |
private function update_email( $new_email ) {
|
22361 |
$this->_logger->entrance();
|
22362 |
|
|
|
22363 |
$api = $this->get_api_user_scope();
|
22364 |
$user = $api->call( "?plugin_id={$this->_plugin->id}&fields=id,email,is_verified", 'put', array(
|
22365 |
'email' => $new_email,
|
@@ -22375,6 +21704,7 @@
|
|
22375 |
$this->_store_user();
|
22376 |
} else {
|
22377 |
// handle different error cases.
|
|
|
22378 |
}
|
22379 |
|
22380 |
return $user;
|
@@ -22450,32 +21780,15 @@
|
|
22450 |
* @uses FS_Api
|
22451 |
*
|
22452 |
* @param string $candidate_email
|
22453 |
-
* @param string $transfer_type
|
22454 |
*
|
22455 |
* @return bool Is ownership change successfully initiated.
|
22456 |
*/
|
22457 |
-
private function init_change_owner( $candidate_email
|
22458 |
$this->_logger->entrance();
|
22459 |
|
22460 |
-
$installs_info_by_slug_map = $this->get_parent_and_addons_installs_info();
|
22461 |
-
$install_ids = array();
|
22462 |
-
|
22463 |
-
foreach ( $installs_info_by_slug_map as $slug => $install_info ) {
|
22464 |
-
$install = $install_info['install'];
|
22465 |
-
|
22466 |
-
if ( $this->_user->id != $install->user_id ) {
|
22467 |
-
// Skip add-on installs that are not owned by the parent product's install's owner.
|
22468 |
-
continue;
|
22469 |
-
}
|
22470 |
-
|
22471 |
-
$install_ids[ $slug ] = $install->id;
|
22472 |
-
}
|
22473 |
-
|
22474 |
$api = $this->get_api_site_scope();
|
22475 |
$result = $api->call( "/users/{$this->_user->id}.json", 'put', array(
|
22476 |
'email' => $candidate_email,
|
22477 |
-
'transfer_type' => $transfer_type,
|
22478 |
-
'install_ids' => implode( ',', array_values( $install_ids ) ),
|
22479 |
'after_confirm_url' => $this->_get_admin_page_url(
|
22480 |
'account',
|
22481 |
array( 'fs_action' => 'change_owner' )
|
@@ -22497,113 +21810,28 @@
|
|
22497 |
private function complete_change_owner() {
|
22498 |
$this->_logger->entrance();
|
22499 |
|
22500 |
-
$
|
22501 |
-
|
22502 |
-
|
22503 |
-
$install_ids = explode( ',', $install_ids );
|
22504 |
-
|
22505 |
-
foreach ( $install_ids as $key => $install_id ) {
|
22506 |
-
if ( ! FS_Site::is_valid_id( $install_id ) ) {
|
22507 |
-
unset( $install_ids[ $key ] );
|
22508 |
-
}
|
22509 |
-
}
|
22510 |
-
}
|
22511 |
-
|
22512 |
-
if ( ! is_array( $install_ids ) ) {
|
22513 |
-
$install_ids = array();
|
22514 |
-
}
|
22515 |
-
|
22516 |
-
$user = new FS_User();
|
22517 |
-
$user->id = fs_request_get( 'user_id' );
|
22518 |
-
$user->public_key = fs_request_get( 'user_public_key' );
|
22519 |
-
$user->secret_key = fs_request_get( 'user_secret_key' );
|
22520 |
-
|
22521 |
-
$prev_user = $this->_user;
|
22522 |
-
$this->_user = $user;
|
22523 |
-
|
22524 |
-
$result = $this->get_api_user_scope( true )->get(
|
22525 |
-
"/installs.json?install_ids=" . implode( ',', $install_ids )
|
22526 |
-
);
|
22527 |
-
|
22528 |
-
$current_blog_sites = self::get_all_sites( $this->get_module_type() );
|
22529 |
-
|
22530 |
-
if ( $this->is_api_result_object( $result, 'installs' ) ) {
|
22531 |
-
$site_id_slug_map = array();
|
22532 |
-
|
22533 |
-
foreach ( $current_blog_sites as $slug => $site ) {
|
22534 |
-
$site_id_slug_map[ $site->id ] = $slug;
|
22535 |
-
}
|
22536 |
-
|
22537 |
-
foreach ( $result->installs as $install ) {
|
22538 |
-
$site = new FS_Site( $install );
|
22539 |
-
|
22540 |
-
if ( ! isset( $site_id_slug_map[ $install->id ] ) ) {
|
22541 |
-
continue;
|
22542 |
-
}
|
22543 |
-
|
22544 |
-
$current_blog_sites[ $site_id_slug_map[ $install->id ] ] = clone $site;
|
22545 |
|
22546 |
-
|
22547 |
-
|
22548 |
-
}
|
22549 |
-
}
|
22550 |
-
}
|
22551 |
|
22552 |
// Validate install's user and given user.
|
22553 |
if ( $user->id != $this->_site->user_id ) {
|
22554 |
-
$this->_user = $prev_user;
|
22555 |
-
|
22556 |
return false;
|
22557 |
}
|
22558 |
|
22559 |
-
$
|
|
|
22560 |
|
22561 |
// Fetch new user information.
|
|
|
22562 |
$user_result = $this->get_api_user_scope( true )->get();
|
22563 |
$user = new FS_User( $user_result );
|
22564 |
$this->_user = $user;
|
22565 |
|
22566 |
-
$this->_set_account( $user, $
|
22567 |
-
|
22568 |
-
$remove_user = true;
|
22569 |
-
$all_modules_sites = self::get_all_modules_sites();
|
22570 |
-
|
22571 |
-
foreach ( $all_modules_sites as $sites_by_module_type ) {
|
22572 |
-
foreach ( $sites_by_module_type as $sites_by_slug ) {
|
22573 |
-
foreach ( $sites_by_slug as $site ) {
|
22574 |
-
if ( $prev_user->id == $site->user_id ) {
|
22575 |
-
$remove_user = false;
|
22576 |
-
break;
|
22577 |
-
}
|
22578 |
-
}
|
22579 |
-
|
22580 |
-
if ( ! $remove_user ) {
|
22581 |
-
break;
|
22582 |
-
}
|
22583 |
-
}
|
22584 |
-
|
22585 |
-
if ( ! $remove_user ) {
|
22586 |
-
break;
|
22587 |
-
}
|
22588 |
-
}
|
22589 |
-
|
22590 |
-
if ( $remove_user ) {
|
22591 |
-
$users = self::get_all_users();
|
22592 |
-
|
22593 |
-
if ( isset( $users[ $prev_user->id ] ) ) {
|
22594 |
-
unset( $users[ $prev_user->id ] );
|
22595 |
-
} else {
|
22596 |
-
// If the prev user wasn't found by the key, iterate over the users collection.
|
22597 |
-
foreach ( $users as $key => $user ) {
|
22598 |
-
if ( $user->id == $prev_user->id ) {
|
22599 |
-
unset( $users[ $key ] );
|
22600 |
-
break;
|
22601 |
-
}
|
22602 |
-
}
|
22603 |
-
}
|
22604 |
-
|
22605 |
-
$this->set_account_option( 'users', $users, true );
|
22606 |
-
}
|
22607 |
|
22608 |
return true;
|
22609 |
}
|
@@ -23015,15 +22243,10 @@
|
|
23015 |
$state = fs_request_get( 'state', 'init' );
|
23016 |
switch ( $state ) {
|
23017 |
case 'init':
|
23018 |
-
$candidate_email = fs_request_get( 'candidate_email' );
|
23019 |
-
$transfer_type = fs_request_get( 'transfer_type' );
|
23020 |
|
23021 |
-
if ( $this->init_change_owner( $candidate_email
|
23022 |
-
|
23023 |
-
$this->_admin_notices->add( sprintf( $this->get_text_inline( 'A confirmation email was just sent to %s. The email owner must confirm the update within the next 4 hours.', 'change-owner-request-sent-x-transfer' ), '<b>' . $this->_user->email . '</b>' ) );
|
23024 |
-
} else {
|
23025 |
-
$this->_admin_notices->add( sprintf( $this->get_text_inline( 'A confirmation email was just sent to %s. You must confirm the update within the next 4 hours. If you cannot find the email, please check your spam folder.', 'change-owner-request-sent-x' ), '<b>' . $this->_user->email . '</b>' ) );
|
23026 |
-
}
|
23027 |
}
|
23028 |
break;
|
23029 |
case 'owner_confirmed':
|
@@ -23046,6 +22269,37 @@
|
|
23046 |
|
23047 |
return;
|
23048 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
23049 |
case 'update_user_name':
|
23050 |
check_admin_referer( 'update_user_name' );
|
23051 |
|
@@ -23308,7 +22562,7 @@
|
|
23308 |
}
|
23309 |
|
23310 |
/* Pricing & Upgrade
|
23311 |
-
|
23312 |
/**
|
23313 |
* Render pricing page.
|
23314 |
*
|
@@ -23467,17 +22721,17 @@
|
|
23467 |
}
|
23468 |
|
23469 |
/* CSS & JavaScript
|
23470 |
-
|
23471 |
/* function _enqueue_script($handle, $src) {
|
23472 |
-
|
23473 |
|
23474 |
-
|
23475 |
|
23476 |
-
|
23477 |
-
|
23478 |
|
23479 |
/* SDK
|
23480 |
-
|
23481 |
private $_user_api;
|
23482 |
|
23483 |
/**
|
@@ -23489,7 +22743,7 @@
|
|
23489 |
*
|
23490 |
* @return FS_Api
|
23491 |
*/
|
23492 |
-
function get_api_user_scope( $flush = false ) {
|
23493 |
if ( ! isset( $this->_user_api ) || $flush ) {
|
23494 |
$this->_user_api = $this->get_api_user_scope_by_user( $this->_user );
|
23495 |
}
|
@@ -23568,56 +22822,13 @@
|
|
23568 |
$this->_site->public_key,
|
23569 |
! $this->is_live(),
|
23570 |
$this->_site->secret_key,
|
23571 |
-
$this->get_sdk_version()
|
23572 |
-
get_site_url()
|
23573 |
);
|
23574 |
}
|
23575 |
|
23576 |
return $this->_site_api;
|
23577 |
}
|
23578 |
|
23579 |
-
/**
|
23580 |
-
* @author Leo Fajardo (@leorw)
|
23581 |
-
* @since 2.5.0
|
23582 |
-
*
|
23583 |
-
* @param string $path
|
23584 |
-
* @param string $method
|
23585 |
-
* @param array $params
|
23586 |
-
* @param bool $flush_instance
|
23587 |
-
*
|
23588 |
-
* @return array|mixed|string|void
|
23589 |
-
* @throws Freemius_Exception
|
23590 |
-
*/
|
23591 |
-
private function api_site_call( $path, $method = 'GET', $params = array(), $flush_instance = false ) {
|
23592 |
-
$result = $this->get_api_site_scope( $flush_instance )->call( $path, $method, $params );
|
23593 |
-
|
23594 |
-
/**
|
23595 |
-
* Checks if the local install's URL is different from the remote install's URL, update the local install if necessary, and then run the clone handler if the install's URL is different from the URL of the site.
|
23596 |
-
*
|
23597 |
-
* @author Leo Fajardo (@leorw)
|
23598 |
-
* @since 2.5.0
|
23599 |
-
*/
|
23600 |
-
if (
|
23601 |
-
$this->is_registered() &&
|
23602 |
-
FS_Api::is_api_result_entity( $result ) &&
|
23603 |
-
isset( $result->url )
|
23604 |
-
) {
|
23605 |
-
$stored_local_url = trailingslashit( $this->_site->url );
|
23606 |
-
$stored_remote_url = trailingslashit( $result->url );
|
23607 |
-
|
23608 |
-
if ( $stored_local_url !== $stored_remote_url ) {
|
23609 |
-
$this->_site->url = $result->url;
|
23610 |
-
$this->_store_site();
|
23611 |
-
}
|
23612 |
-
|
23613 |
-
if ( fs_strip_url_protocol( $stored_remote_url ) !== fs_strip_url_protocol( trailingslashit( get_site_url() ) ) ) {
|
23614 |
-
FS_Clone_Manager::instance()->maybe_run_clone_resolution();
|
23615 |
-
}
|
23616 |
-
}
|
23617 |
-
|
23618 |
-
return $result;
|
23619 |
-
}
|
23620 |
-
|
23621 |
private $_plugin_api;
|
23622 |
|
23623 |
/**
|
@@ -24053,7 +23264,7 @@
|
|
24053 |
}
|
24054 |
|
24055 |
/* Action Links
|
24056 |
-
|
24057 |
private $_action_links_hooked = false;
|
24058 |
private $_action_links = array();
|
24059 |
|
@@ -24240,13 +23451,10 @@
|
|
24240 |
|
24241 |
if (
|
24242 |
$this->is_addon() &&
|
24243 |
-
! $this->is_only_premium()
|
|
|
24244 |
) {
|
24245 |
-
|
24246 |
-
|
24247 |
-
if ( is_object( $parent ) && $parent->is_anonymous() ) {
|
24248 |
-
return;
|
24249 |
-
}
|
24250 |
}
|
24251 |
|
24252 |
if ( fs_is_network_admin() ) {
|
408 |
* @param bool $is_init Since 1.2.1 Is initiation sequence.
|
409 |
*/
|
410 |
private function __construct( $module_id, $slug = false, $is_init = false ) {
|
|
|
|
|
411 |
if ( $is_init && is_numeric( $module_id ) && is_string( $slug ) ) {
|
412 |
+
$this->store_id_slug_type_path_map( $module_id, $slug );
|
413 |
}
|
414 |
|
415 |
$this->_module_id = $module_id;
|
424 |
|
425 |
$this->_logger = FS_Logger::get_logger( WP_FS__SLUG . '_' . $this->get_unique_affix(), WP_FS__DEBUG_SDK, WP_FS__ECHO_DEBUG_SDK );
|
426 |
|
427 |
+
$this->_plugin_main_file_path = $this->_find_caller_plugin_file( $is_init );
|
428 |
$this->_plugin_dir_path = plugin_dir_path( $this->_plugin_main_file_path );
|
429 |
$this->_plugin_basename = $this->get_plugin_basename();
|
430 |
$this->_free_plugin_basename = str_replace( '-premium/', '/', $this->_plugin_basename );
|
519 |
* @author Leo Fajardo (@leorw)
|
520 |
* @since 1.2.2
|
521 |
*/
|
522 |
+
( is_object( $this->_plugin ) ? $this->_plugin->title : $this->get_plugin_name() ),
|
|
|
|
|
|
|
523 |
$this->get_unique_affix()
|
524 |
);
|
525 |
|
1641 |
}
|
1642 |
|
1643 |
if ( $this->is_plugin() ) {
|
1644 |
+
if ( $this->_is_network_active ) {
|
1645 |
add_action( 'wpmu_new_blog', array( $this, '_after_new_blog_callback' ), 10, 6 );
|
|
|
|
|
1646 |
}
|
1647 |
|
1648 |
register_deactivation_hook( $this->_plugin_main_file_path, array( &$this, '_deactivate_plugin_hook' ) );
|
1652 |
add_action( 'deactivate_blog', array( &$this, '_after_site_deactivated_callback' ) );
|
1653 |
add_action( 'archive_blog', array( &$this, '_after_site_deactivated_callback' ) );
|
1654 |
add_action( 'make_spam_blog', array( &$this, '_after_site_deactivated_callback' ) );
|
1655 |
+
add_action( 'deleted_blog', array( &$this, '_after_site_deleted_callback' ), 10, 2 );
|
|
|
|
|
|
|
|
|
|
|
1656 |
|
1657 |
add_action( 'activate_blog', array( &$this, '_after_site_reactivated_callback' ) );
|
1658 |
add_action( 'unarchive_blog', array( &$this, '_after_site_reactivated_callback' ) );
|
1677 |
add_action( 'admin_init', array( &$this, '_add_premium_version_upgrade_selection' ) );
|
1678 |
add_action( 'admin_init', array( &$this, '_add_beta_mode_update_handler' ) );
|
1679 |
add_action( 'admin_init', array( &$this, '_add_user_change_option' ) );
|
|
|
1680 |
|
1681 |
$this->add_ajax_action( 'update_billing', array( &$this, '_update_billing_ajax_action' ) );
|
1682 |
$this->add_ajax_action( 'start_trial', array( &$this, '_start_trial_ajax_action' ) );
|
2094 |
/**
|
2095 |
* Leverage backtrace to find caller plugin file path.
|
2096 |
*
|
2097 |
+
* @author Vova Feldman (@svovaf)
|
|
|
|
|
|
|
2098 |
* @since 1.0.6
|
2099 |
*
|
2100 |
+
* @param bool $is_init Is initiation sequence.
|
2101 |
+
*
|
2102 |
+
* @return string
|
2103 |
*/
|
2104 |
+
private function _find_caller_plugin_file( $is_init = false ) {
|
2105 |
// Try to load the cached value of the file path.
|
2106 |
if ( isset( $this->_storage->plugin_main_file ) ) {
|
2107 |
$plugin_main_file = $this->_storage->plugin_main_file;
|
2108 |
if ( ! empty( $plugin_main_file->path ) ) {
|
2109 |
$absolute_path = $this->get_absolute_path( $plugin_main_file->path );
|
2110 |
if ( file_exists( $absolute_path ) ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
2111 |
return $absolute_path;
|
2112 |
}
|
2113 |
}
|
2148 |
* Only the original instantiator that calls dynamic_init can modify the module's path.
|
2149 |
*/
|
2150 |
// Find caller module.
|
2151 |
+
$id_slug_type_path_map = self::$_accounts->get_option( 'id_slug_type_path_map', array() );
|
2152 |
$this->_storage->plugin_main_file = (object) array(
|
2153 |
+
'path' => $id_slug_type_path_map[ $this->_module_id ]['path'],
|
2154 |
);
|
2155 |
|
2156 |
+
return $this->get_absolute_path( $id_slug_type_path_map[ $this->_module_id ]['path'] );
|
2157 |
}
|
2158 |
|
2159 |
/**
|
2215 |
* @param number $module_id
|
2216 |
* @param string $slug
|
2217 |
*
|
|
|
|
|
2218 |
* @since 1.2.2
|
2219 |
*/
|
2220 |
private function store_id_slug_type_path_map( $module_id, $slug ) {
|
2236 |
$store_option = true;
|
2237 |
}
|
2238 |
|
2239 |
+
if ( empty( $id_slug_type_path_map[ $module_id ]['path'] ) ||
|
2240 |
+
/**
|
2241 |
+
* This verification is for cases when suddenly the same module
|
2242 |
+
* is installed but with a different folder name.
|
2243 |
+
*
|
2244 |
+
* @author Vova Feldman (@svovaf)
|
2245 |
+
* @since 1.2.3
|
2246 |
+
*/
|
2247 |
+
! file_exists( $this->get_absolute_path(
|
2248 |
+
$id_slug_type_path_map[ $module_id ]['path'],
|
2249 |
+
$id_slug_type_path_map[ $module_id ]['type']
|
2250 |
+
) )
|
2251 |
+
) {
|
2252 |
+
$caller_main_file_and_type = $this->get_caller_main_file_and_type();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2253 |
|
2254 |
$id_slug_type_path_map[ $module_id ]['type'] = $caller_main_file_and_type->module_type;
|
2255 |
$id_slug_type_path_map[ $module_id ]['path'] = $caller_main_file_and_type->path;
|
2260 |
if ( $store_option ) {
|
2261 |
self::$_accounts->set_option( 'id_slug_type_path_map', $id_slug_type_path_map, true );
|
2262 |
}
|
|
|
|
|
2263 |
}
|
2264 |
|
2265 |
/**
|
2273 |
* add-ons are relying on loading the SDK from the parent module, and also allows themes including the
|
2274 |
* SDK an internal file instead of directly from functions.php.
|
2275 |
* @since 1.2.1.7 Knows how to handle cases when an add-on includes the parent module logic.
|
|
|
|
|
2276 |
*/
|
2277 |
+
private function get_caller_main_file_and_type() {
|
2278 |
self::require_plugin_essentials();
|
2279 |
|
2280 |
$all_plugins = fs_get_plugins( true );
|
2413 |
}
|
2414 |
}
|
2415 |
|
2416 |
+
return (object) array(
|
2417 |
'module_type' => $module_type,
|
2418 |
'path' => $caller_file_candidate
|
2419 |
);
|
|
|
|
|
2420 |
}
|
2421 |
|
2422 |
#----------------------------------------------------------------------------------
|
2433 |
* @since 1.1.2
|
2434 |
*/
|
2435 |
function _add_deactivation_feedback_dialog_box() {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2436 |
$subscription_cancellation_dialog_box_template_params = $this->apply_filters( 'show_deactivation_subscription_cancellation', true ) ?
|
2437 |
$this->_get_subscription_cancellation_dialog_box_template_params() :
|
2438 |
array();
|
2440 |
/**
|
2441 |
* @since 2.3.0 Developers can optionally hide the deactivation feedback form using the 'show_deactivation_feedback_form' filter.
|
2442 |
*/
|
2443 |
+
$show_deactivation_feedback_form = true;
|
2444 |
if ( $this->has_filter( 'show_deactivation_feedback_form' ) ) {
|
2445 |
$show_deactivation_feedback_form = $this->apply_filters( 'show_deactivation_feedback_form', true );
|
2446 |
} else if ( $this->is_addon() ) {
|
2545 |
$reason_temporary_deactivation = array(
|
2546 |
'id' => self::REASON_TEMPORARY_DEACTIVATION,
|
2547 |
'text' => sprintf(
|
2548 |
+
$this->get_text_inline( "It's a temporary %s. I'm just debugging an issue.", 'reason-temporary-x' ),
|
2549 |
strtolower( $this->is_plugin() ?
|
2550 |
$this->get_text_inline( 'Deactivation', 'deactivation' ) :
|
2551 |
$this->get_text_inline( 'Theme Switch', 'theme-switch' )
|
2710 |
|
2711 |
$this->_storage->store( 'uninstall_reason', $reason );
|
2712 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2713 |
/**
|
2714 |
* If the module type is "theme", trigger the uninstall event here (on theme deactivation) since themes do
|
2715 |
* not support uninstall hook.
|
2731 |
exit;
|
2732 |
}
|
2733 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2734 |
/**
|
2735 |
* @author Leo Fajardo (@leorw)
|
2736 |
* @since 2.1.4
|
2927 |
return self::instance( $addon_id );
|
2928 |
}
|
2929 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2930 |
#endregion ------------------------------------------------------------------
|
2931 |
|
2932 |
/**
|
3437 |
add_action( 'plugins_loaded', array( 'Freemius', '_load_textdomain' ), 1 );
|
3438 |
}
|
3439 |
|
|
|
|
|
|
|
3440 |
add_action( 'admin_footer', array( 'Freemius', '_enrich_ajax_url' ) );
|
3441 |
add_action( 'admin_footer', array( 'Freemius', '_open_support_forum_in_new_page' ) );
|
3442 |
|
3456 |
self::$_statics_loaded = true;
|
3457 |
}
|
3458 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3459 |
/**
|
3460 |
* @author Leo Fajardo (@leorw)
|
3461 |
*
|
3550 |
* @since 1.1.7.3
|
3551 |
*/
|
3552 |
static function _toggle_debug_mode() {
|
3553 |
+
check_admin_referer( 'fs_toggle_debug_mode' );
|
3554 |
+
|
3555 |
if ( ! is_super_admin() ) {
|
3556 |
return;
|
3557 |
}
|
3573 |
* @since 1.2.1.6
|
3574 |
*/
|
3575 |
static function _get_debug_log() {
|
3576 |
+
check_admin_referer( 'fs_get_debug_log' );
|
3577 |
+
|
3578 |
+
if ( ! is_super_admin() ) {
|
3579 |
+
return;
|
3580 |
+
}
|
3581 |
+
|
3582 |
+
$limit = min( ! empty( $_POST['limit'] ) ? absint( $_POST['limit'] ) : 200, 200 );
|
3583 |
+
$offset = min( ! empty( $_POST['offset'] ) ? absint( $_POST['offset'] ) : 200, 200 );
|
3584 |
+
|
3585 |
$logs = FS_Logger::load_db_logs(
|
3586 |
fs_request_get( 'filters', false, 'post' ),
|
3587 |
+
$limit,
|
3588 |
+
$offset
|
3589 |
);
|
3590 |
|
3591 |
self::shoot_ajax_success( $logs );
|
3692 |
|
3693 |
switch_to_blog( $current_blog_id );
|
3694 |
}
|
|
|
|
|
|
|
|
|
3695 |
} else if ( fs_request_is_action( 'simulate_trial' ) ) {
|
3696 |
check_admin_referer( 'simulate_trial' );
|
3697 |
|
3740 |
}
|
3741 |
|
3742 |
/**
|
3743 |
+
* @author Vova Feldman (@svovaf)
|
3744 |
+
* @since 1.0.8
|
|
|
|
|
3745 |
*/
|
3746 |
+
static function _debug_page_render() {
|
3747 |
self::$_static_logger->entrance();
|
3748 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3749 |
if ( ! is_multisite() ) {
|
3750 |
+
$all_plugins_installs = self::get_all_sites( WP_FS__MODULE_TYPE_PLUGIN );
|
3751 |
+
$all_themes_installs = self::get_all_sites( WP_FS__MODULE_TYPE_THEME );
|
|
|
3752 |
} else {
|
3753 |
$sites = self::get_sites();
|
3754 |
|
3755 |
+
$all_plugins_installs = array();
|
3756 |
+
$all_themes_installs = array();
|
3757 |
+
|
3758 |
foreach ( $sites as $site ) {
|
3759 |
$blog_id = self::get_site_blog_id( $site );
|
3760 |
|
3761 |
+
$plugins_installs = self::get_all_sites( WP_FS__MODULE_TYPE_PLUGIN, $blog_id );
|
|
|
3762 |
|
3763 |
+
foreach ( $plugins_installs as $slug => $install ) {
|
3764 |
+
if ( ! isset( $all_plugins_installs[ $slug ] ) ) {
|
3765 |
+
$all_plugins_installs[ $slug ] = array();
|
3766 |
+
}
|
3767 |
|
3768 |
+
$install->blog_id = $blog_id;
|
3769 |
|
3770 |
+
$all_plugins_installs[ $slug ][] = $install;
|
3771 |
+
}
|
3772 |
+
|
3773 |
+
$themes_installs = self::get_all_sites( WP_FS__MODULE_TYPE_THEME, $blog_id );
|
3774 |
+
|
3775 |
+
foreach ( $themes_installs as $slug => $install ) {
|
3776 |
+
if ( ! isset( $all_themes_installs[ $slug ] ) ) {
|
3777 |
+
$all_themes_installs[ $slug ] = array();
|
3778 |
}
|
3779 |
|
3780 |
+
$install->blog_id = $blog_id;
|
3781 |
+
|
3782 |
+
$all_themes_installs[ $slug ][] = $install;
|
3783 |
}
|
3784 |
}
|
3785 |
}
|
3786 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3787 |
$licenses_by_module_type = self::get_all_licenses_by_module_type();
|
3788 |
|
3789 |
$vars = array(
|
3790 |
+
'plugin_sites' => $all_plugins_installs,
|
3791 |
+
'theme_sites' => $all_themes_installs,
|
3792 |
'users' => self::get_all_users(),
|
3793 |
'addons' => self::get_all_addons(),
|
3794 |
'account_addons' => self::get_all_account_addons(),
|
3820 |
function is_on() {
|
3821 |
self::$_static_logger->entrance();
|
3822 |
|
|
|
|
|
|
|
|
|
3823 |
if ( isset( $this->_is_on ) ) {
|
3824 |
return $this->_is_on;
|
3825 |
}
|
3908 |
|
3909 |
$is_update = $this->apply_filters( 'is_plugin_update', $this->is_plugin_update() );
|
3910 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3911 |
return $this->get_api_plugin_scope()->ping(
|
3912 |
$this->get_anonymous_id( $blog_id ),
|
3913 |
+
array(
|
3914 |
+
'is_update' => json_encode( $is_update ),
|
3915 |
+
'version' => $version,
|
3916 |
+
'sdk' => $this->version,
|
3917 |
+
'is_admin' => json_encode( is_admin() ),
|
3918 |
+
'is_ajax' => json_encode( self::is_ajax() ),
|
3919 |
+
'is_cron' => json_encode( self::is_cron() ),
|
3920 |
+
'is_gdpr_test' => $is_gdpr_test,
|
3921 |
+
'is_http' => json_encode( WP_FS__IS_HTTP_REQUEST ),
|
3922 |
+
)
|
3923 |
);
|
3924 |
}
|
3925 |
|
4085 |
return $unique_id;
|
4086 |
}
|
4087 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4088 |
/**
|
4089 |
* @author Vova Feldman (@svovaf)
|
4090 |
* @since 1.1.7.4
|
4458 |
* @since 1.0.9
|
4459 |
*/
|
4460 |
function _email_about_firewall_issue() {
|
4461 |
+
check_admin_referer( 'fs_resolve_firewall_issues' );
|
4462 |
+
|
4463 |
+
if ( ! current_user_can( is_multisite() ? 'manage_options' : 'activate_plugins' ) ) {
|
4464 |
+
return;
|
4465 |
+
}
|
4466 |
+
|
4467 |
$this->_admin_notices->remove_sticky( 'failed_connect_api' );
|
4468 |
|
4469 |
$pong = $this->ping();
|
4538 |
* @since 1.1.7.4
|
4539 |
*/
|
4540 |
function _retry_connectivity_test() {
|
4541 |
+
check_admin_referer( 'fs_retry_connectivity_test' );
|
4542 |
+
|
4543 |
+
if ( ! current_user_can( is_multisite() ? 'manage_options' : 'activate_plugins' ) ) {
|
4544 |
+
return;
|
4545 |
+
}
|
4546 |
+
|
4547 |
$this->_admin_notices->remove_sticky( 'failed_connect_api_first' );
|
4548 |
|
4549 |
$pong = $this->ping();
|
4907 |
* @since 1.1.7.3
|
4908 |
*
|
4909 |
*/
|
4910 |
+
if ( $this->is_registered() ) {
|
4911 |
+
if ( ! $this->is_sync_cron_on() && $this->is_tracking_allowed() ) {
|
4912 |
+
$this->schedule_sync_cron();
|
4913 |
+
}
|
4914 |
}
|
4915 |
|
4916 |
/**
|
4923 |
}
|
4924 |
|
4925 |
if ( $this->is_registered() ) {
|
|
|
|
|
4926 |
$this->hook_callback_to_install_sync();
|
4927 |
}
|
4928 |
|
4937 |
}
|
4938 |
|
4939 |
if ( $this->is_user_in_admin() ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4940 |
if ( $this->is_addon() ) {
|
4941 |
if ( ! $this->is_parent_plugin_installed() ) {
|
4942 |
$parent_name = $this->get_option( $plugin_info, 'parent_name', null );
|
5060 |
*/
|
5061 |
( file_exists( fs_normalize_path( WP_PLUGIN_DIR . '/' . $this->premium_plugin_basename() ) ) )
|
5062 |
) &&
|
5063 |
+
$this->has_release_on_freemius()
|
|
|
5064 |
) {
|
5065 |
FS_Plugin_Updater::instance( $this );
|
5066 |
}
|
5208 |
}
|
5209 |
|
5210 |
// Send update to FS.
|
5211 |
+
$result = $this->get_api_site_scope()->call( '/?fields=is_disconnected', 'put', array(
|
5212 |
'is_disconnected' => true
|
5213 |
) );
|
5214 |
|
5357 |
return true;
|
5358 |
}
|
5359 |
|
5360 |
+
$result = $this->get_api_site_scope()->call( '/?is_disconnected', 'put', array(
|
5361 |
'is_disconnected' => false
|
5362 |
) );
|
5363 |
|
6937 |
return $this->is_cron_on( 'sync' );
|
6938 |
}
|
6939 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6940 |
/**
|
6941 |
* @author Vova Feldman (@svovaf)
|
6942 |
* @since 1.1.7.3
|
7115 |
* @param int|null $current_blog_id
|
7116 |
*/
|
7117 |
function _sync_install_cron_method( array $blog_ids, $current_blog_id = null ) {
|
|
|
|
|
|
|
|
|
7118 |
if ( $this->is_registered() ) {
|
7119 |
if ( 1 < count( $blog_ids ) ) {
|
7120 |
$this->sync_installs( array(), true );
|
7131 |
/**
|
7132 |
* Show a notice that activation is currently pending.
|
7133 |
*
|
|
|
|
|
7134 |
* @author Vova Feldman (@svovaf)
|
7135 |
* @since 1.0.7
|
7136 |
*
|
7137 |
* @param bool|string $email
|
7138 |
* @param bool $is_pending_trial Since 1.2.1.5
|
|
|
7139 |
*/
|
7140 |
+
function _add_pending_activation_notice( $email = false, $is_pending_trial = false ) {
|
|
|
|
|
|
|
|
|
7141 |
if ( ! is_string( $email ) ) {
|
7142 |
$current_user = self::_get_current_wp_user();
|
7143 |
$email = $current_user->user_email;
|
7193 |
/**
|
7194 |
* Don't redirect if activating multiple plugins at once (bulk activation).
|
7195 |
*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
7196 |
} else if ( ! $is_migration ) {
|
7197 |
$this->_redirect_on_activation_hook();
|
7198 |
return;
|
7379 |
|
7380 |
fs_enqueue_local_script( 'postmessage', 'nojquery.ba-postmessage.min.js' );
|
7381 |
fs_enqueue_local_script( 'fs-postmessage', 'postmessage.js' );
|
7382 |
+
|
7383 |
+
fs_enqueue_local_style( 'fs_connect', '/admin/connect.css' );
|
7384 |
}
|
7385 |
|
7386 |
/**
|
7416 |
<?php
|
7417 |
echo $this->apply_filters( 'optin_pointer_execute', "
|
7418 |
|
7419 |
+
optin.pointer('open');
|
7420 |
|
7421 |
+
// Tag the opt-in pointer with custom class.
|
7422 |
+
$('.wp-pointer #fs_connect')
|
7423 |
+
.parents('.wp-pointer.wp-pointer-top')
|
7424 |
+
.addClass('fs-opt-in-pointer');
|
7425 |
|
7426 |
+
", 'element', 'optin' ) ?>
|
7427 |
}
|
7428 |
}
|
7429 |
});
|
7471 |
}
|
7472 |
|
7473 |
/* Events
|
7474 |
+
------------------------------------------------------------------------------------------------------------------*/
|
7475 |
/**
|
7476 |
* Delete site install from Database.
|
7477 |
*
|
7803 |
$plugin_version = $this->_storage->is_anonymous_ms['version'];
|
7804 |
$network = true;
|
7805 |
} else {
|
7806 |
+
$plugin_version = $this->_storage->is_anonymous['version'];
|
|
|
|
|
7807 |
$network = false;
|
7808 |
}
|
7809 |
|
7951 |
);
|
7952 |
} else {
|
7953 |
// Activate the license.
|
7954 |
+
$install = $this->get_api_site_scope()->call(
|
7955 |
'/',
|
7956 |
'put',
|
7957 |
array( 'license_key' => $this->apply_filters( 'license_key', $license->secret_key ) )
|
8626 |
* @uses Freemius::is_network_anonymous() to check if the super-admin network skipped.
|
8627 |
* @uses Freemius::is_network_delegated_connection() to check if the super-admin network delegated the connection to the site admins.
|
8628 |
*/
|
8629 |
+
function _after_new_blog_callback( $blog_id, $user_id, $domain, $path, $network_id, $meta ) {
|
8630 |
$this->_logger->entrance();
|
8631 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8632 |
if ( $this->is_premium() &&
|
8633 |
$this->is_network_connected() &&
|
8634 |
is_object( $this->_license ) &&
|
8662 |
}
|
8663 |
}
|
8664 |
|
|
|
|
|
8665 |
$this->switch_to_blog( $current_blog_id );
|
8666 |
|
8667 |
+
if ( is_object( $this->_site ) ) {
|
|
|
|
|
8668 |
// Already connected (with or without a license), so no need to continue.
|
8669 |
return;
|
8670 |
}
|
8697 |
false
|
8698 |
);
|
8699 |
|
|
|
|
|
8700 |
$this->switch_to_blog( $current_blog_id );
|
8701 |
} else {
|
8702 |
/**
|
8707 |
$has_delegated_site = false;
|
8708 |
|
8709 |
$sites = self::get_sites();
|
8710 |
+
foreach ( $sites as $site ) {
|
8711 |
+
$blog_id = self::get_site_blog_id( $site );
|
8712 |
|
8713 |
if ( $this->is_site_delegated_connection( $blog_id ) ) {
|
8714 |
$has_delegated_site = true;
|
8722 |
$this->skip_site_connection( $blog_id );
|
8723 |
}
|
8724 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8725 |
}
|
8726 |
|
8727 |
/**
|
9297 |
*
|
9298 |
* @param string[] string $override
|
9299 |
* @param bool $only_diff
|
|
|
9300 |
* @param bool $include_plugins Since 1.1.8 by default include plugin changes.
|
9301 |
* @param bool $include_themes Since 1.1.8 by default include plugin changes.
|
9302 |
*
|
9305 |
private function get_installs_data_for_api(
|
9306 |
array $override,
|
9307 |
$only_diff = false,
|
|
|
9308 |
$include_plugins = true,
|
9309 |
$include_themes = true
|
9310 |
) {
|
9342 |
|
9343 |
$sites = self::get_sites();
|
9344 |
|
|
|
|
|
|
|
9345 |
foreach ( $sites as $site ) {
|
9346 |
$blog_id = self::get_site_blog_id( $site );
|
9347 |
|
9360 |
|
9361 |
$install_data = $this->get_site_info( $site );
|
9362 |
|
|
|
|
|
|
|
|
|
9363 |
$uid = $install_data['uid'];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9364 |
|
9365 |
unset( $install_data['blog_id'] );
|
9366 |
unset( $install_data['uid'] );
|
|
|
9367 |
|
9368 |
$install_data['is_disconnected'] = $install->is_disconnected;
|
9369 |
$install_data['is_active'] = $this->is_active_for_site( $blog_id );
|
9388 |
$is_common_diff_for_any_site = $is_common_diff_for_any_site || $is_common_diff;
|
9389 |
}
|
9390 |
|
9391 |
+
if ( ! empty( $install_data ) || $is_common_diff ) {
|
9392 |
// Add install ID and site unique ID.
|
9393 |
$install_data['id'] = $install->id;
|
9394 |
$install_data['uid'] = $uid;
|
|
|
9395 |
|
9396 |
+
$installs_data[] = $install_data;
|
|
|
9397 |
}
|
9398 |
}
|
9399 |
}
|
9400 |
|
9401 |
restore_current_blog();
|
9402 |
|
|
|
|
|
|
|
|
|
|
|
9403 |
if ( 0 < count( $installs_data ) && ( $is_common_diff_for_any_site || ! $only_diff ) ) {
|
9404 |
if ( ! $only_diff ) {
|
9405 |
$installs_data[] = $common;
|
9471 |
*
|
9472 |
* @param string[] string $override
|
9473 |
* @param bool $flush
|
|
|
9474 |
*
|
9475 |
* @return false|object|string
|
9476 |
*/
|
9477 |
+
private function send_install_update( $override = array(), $flush = false ) {
|
9478 |
$this->_logger->entrance();
|
9479 |
|
9480 |
$check_properties = $this->get_install_data_for_api( $override );
|
9500 |
}
|
9501 |
}
|
9502 |
|
9503 |
+
if ( ! $keepalive_only_update ) {
|
9504 |
/**
|
9505 |
+
* Do not update the last install sync timestamp after a keepalive-only call since there were no actual
|
9506 |
+
* updates sent.
|
9507 |
*
|
9508 |
* @author Leo Fajardo (@leorw)
|
9509 |
* @since 2.2.3
|
9519 |
$this->set_keepalive_timestamp();
|
9520 |
|
9521 |
// Send updated values to FS.
|
9522 |
+
$site = $this->get_api_site_scope()->call( '/', 'put', $params );
|
9523 |
|
9524 |
+
if ( ! $keepalive_only_update && $this->is_api_result_entity( $site ) ) {
|
9525 |
/**
|
9526 |
+
* Do not clear scheduled sync after a keepalive-only call since there were no actual updates sent.
|
9527 |
*
|
9528 |
* @author Leo Fajardo (@leorw)
|
9529 |
* @since 2.2.3
|
9545 |
*
|
9546 |
* @param string[] string $override
|
9547 |
* @param bool $flush
|
|
|
9548 |
*
|
9549 |
* @return false|object|string
|
9550 |
*/
|
9551 |
+
private function send_installs_update( $override = array(), $flush = false ) {
|
9552 |
$this->_logger->entrance();
|
9553 |
|
9554 |
+
$installs_data = $this->get_installs_data_for_api( $override, ! $flush );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9555 |
|
9556 |
+
$keepalive_only_update = false;
|
9557 |
if ( empty( $installs_data ) ) {
|
9558 |
+
/**
|
9559 |
+
* Pass `true` to use the network level storage since the update is for many installs.
|
9560 |
+
*
|
9561 |
+
* @author Leo Fajardo (@leorw)
|
9562 |
+
* @since 2.2.3
|
9563 |
+
*/
|
9564 |
+
$keepalive_only_update = $this->should_send_keepalive_update( true );
|
9565 |
+
|
9566 |
+
if ( ! $keepalive_only_update ) {
|
9567 |
+
/**
|
9568 |
+
* There are no updates to send including keepalive.
|
9569 |
+
*
|
9570 |
+
* @author Leo Fajardo (@leorw)
|
9571 |
+
* @since 2.2.3
|
9572 |
+
*/
|
9573 |
+
return false;
|
9574 |
+
}
|
9575 |
}
|
9576 |
|
9577 |
+
if ( ! $keepalive_only_update ) {
|
9578 |
+
// Update last install sync timestamp if there were actual updates sent (i.e., not a keepalive-only call).
|
9579 |
$this->set_cron_execution_timestamp( 'install_sync' );
|
9580 |
}
|
9581 |
|
9590 |
// Send updated values to FS.
|
9591 |
$result = $this->get_api_user_scope()->call( "/plugins/{$this->_plugin->id}/installs.json", 'put', $installs_data );
|
9592 |
|
9593 |
+
if ( ! $keepalive_only_update && $this->is_api_result_object( $result, 'installs' ) ) {
|
9594 |
+
// I successfully sent installs update (there was an actual update sent and it's not just a keepalive-only call), clear scheduled sync if exist.
|
9595 |
$this->clear_install_sync_cron();
|
9596 |
}
|
9597 |
|
9641 |
* @param string[] string $override
|
9642 |
* @param bool $flush
|
9643 |
*/
|
9644 |
+
private function sync_install( $override = array(), $flush = false ) {
|
9645 |
$this->_logger->entrance();
|
9646 |
|
9647 |
+
$site = $this->send_install_update( $override, $flush );
|
9648 |
|
9649 |
if ( false === $site ) {
|
9650 |
// No sync required.
|
9673 |
private function sync_installs( $override = array(), $flush = false ) {
|
9674 |
$this->_logger->entrance();
|
9675 |
|
9676 |
+
$result = $this->send_installs_update( $override, $flush );
|
9677 |
|
9678 |
if ( false === $result ) {
|
9679 |
// No sync required.
|
9926 |
return;
|
9927 |
}
|
9928 |
|
9929 |
+
$fs->_uninstall_plugin_event();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9930 |
|
9931 |
$fs->do_action( 'after_uninstall' );
|
9932 |
}
|
10322 |
#endregion ------------------------------------------------------------------
|
10323 |
|
10324 |
/* Account
|
10325 |
+
------------------------------------------------------------------------------------------------------------------*/
|
10326 |
|
10327 |
/**
|
10328 |
* Find plugin's slug by plugin's basename.
|
10386 |
*/
|
10387 |
private static function get_all_sites(
|
10388 |
$module_type = WP_FS__MODULE_TYPE_PLUGIN,
|
10389 |
+
$blog_id = null
|
|
|
10390 |
) {
|
10391 |
+
$sites = self::get_account_option( 'sites', $module_type, $blog_id );
|
|
|
|
|
|
|
|
|
10392 |
|
10393 |
if ( ! is_array( $sites ) ) {
|
10394 |
$sites = array();
|
10808 |
return $this->_site;
|
10809 |
}
|
10810 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
10811 |
/**
|
10812 |
* Get plugin add-ons.
|
10813 |
*
|
12888 |
);
|
12889 |
|
12890 |
fs_require_template( 'forms/license-activation.php', $vars );
|
12891 |
+
fs_require_template( 'forms/resend-key.php', $vars );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
12892 |
}
|
12893 |
|
12894 |
/**
|
13098 |
( $is_network_admin && $this->is_network_active() && ! $this->is_network_delegated_connection() ) ||
|
13099 |
( ! $is_network_admin && ( ! $this->is_network_active() || $this->is_delegated_connection() ) )
|
13100 |
) {
|
13101 |
+
/**
|
13102 |
+
* @since 1.2.0 Add license action link only on plugins page.
|
13103 |
+
*/
|
13104 |
+
$this->_add_license_action_link();
|
|
|
|
|
|
|
|
|
|
|
13105 |
}
|
13106 |
}
|
13107 |
|
13273 |
self::shoot_ajax_failure();
|
13274 |
}
|
13275 |
|
13276 |
+
$site = $this->get_api_site_scope()->call(
|
13277 |
'',
|
13278 |
'put',
|
13279 |
array(
|
13886 |
|
13887 |
$addon_info = $fs->_get_addon_info( $addon_id, $is_installed );
|
13888 |
|
13889 |
+
if ( ! $addon_info['is_connected'] ) {
|
13890 |
// Add-on is not associated with an install entity.
|
13891 |
continue;
|
13892 |
}
|
14863 |
return ( defined( 'DOING_CRON' ) && DOING_CRON );
|
14864 |
}
|
14865 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
14866 |
/**
|
14867 |
* Check if a real user is visiting the admin dashboard.
|
14868 |
*
|
14876 |
is_admin() &&
|
14877 |
! self::is_ajax() &&
|
14878 |
! self::is_cron() &&
|
14879 |
+
( 'admin-post.php' !== self::get_current_page() )
|
14880 |
);
|
14881 |
}
|
14882 |
|
15157 |
}
|
15158 |
|
15159 |
/**
|
|
|
|
|
15160 |
* @author Leo Fajardo (@leorw)
|
15161 |
* @since 2.0.0
|
15162 |
*
|
|
|
|
|
|
|
15163 |
* @return array Active & public sites collection.
|
15164 |
*/
|
15165 |
+
static function get_sites() {
|
15166 |
if ( ! is_multisite() ) {
|
15167 |
return array();
|
15168 |
}
|
15184 |
'mature' => 0,
|
15185 |
'spam' => 0,
|
15186 |
'deleted' => 0,
|
|
|
|
|
15187 |
);
|
15188 |
|
15189 |
if ( function_exists( 'get_sites' ) ) {
|
15373 |
*
|
15374 |
* @param int $blog_id
|
15375 |
* @param FS_Site $install
|
|
|
15376 |
*
|
15377 |
* @return bool Since 2.3.1 returns if a switch was made.
|
15378 |
*/
|
15379 |
+
function switch_to_blog( $blog_id, FS_Site $install = null ) {
|
15380 |
+
if ( ! is_numeric( $blog_id ) || $blog_id == $this->_context_is_network_or_blog_id ) {
|
|
|
|
|
|
|
|
|
15381 |
return false;
|
15382 |
}
|
15383 |
|
15441 |
unset( $this->_site_api );
|
15442 |
unset( $this->_user_api );
|
15443 |
|
15444 |
+
return false;
|
15445 |
}
|
15446 |
|
15447 |
/**
|
15738 |
}
|
15739 |
}
|
15740 |
|
|
|
|
|
|
|
|
|
15741 |
if ( $this->is_sync_cron_scheduled() &&
|
15742 |
$context_blog_id == $this->get_sync_cron_blog_id()
|
15743 |
) {
|
15771 |
|
15772 |
$this->update_multisite_data_after_site_deactivation( $context_blog_id );
|
15773 |
|
|
|
|
|
|
|
|
|
15774 |
$current_blog_id = get_current_blog_id();
|
15775 |
|
15776 |
$this->switch_to_blog( $context_blog_id );
|
15804 |
|
15805 |
$this->update_multisite_data_after_site_deactivation( $context_blog_id );
|
15806 |
|
|
|
|
|
|
|
|
|
15807 |
$current_blog_id = get_current_blog_id();
|
15808 |
|
15809 |
$this->switch_to_blog( $context_blog_id );
|
15821 |
$this->switch_to_blog( $current_blog_id );
|
15822 |
}
|
15823 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
15824 |
/**
|
15825 |
* Executed after site re-activation.
|
15826 |
*
|
16067 |
}
|
16068 |
|
16069 |
/* Logger
|
16070 |
+
------------------------------------------------------------------------------------------------------------------*/
|
16071 |
/**
|
16072 |
* @param string $id
|
16073 |
* @param bool $prefix_slug
|
16092 |
}
|
16093 |
|
16094 |
/* Security
|
16095 |
+
------------------------------------------------------------------------------------------------------------------*/
|
16096 |
private static function _encrypt( $str ) {
|
16097 |
if ( is_null( $str ) ) {
|
16098 |
return null;
|
16312 |
) {
|
16313 |
// Load site.
|
16314 |
$this->_site = $site;
|
16315 |
+
|
16316 |
+
// Load plans.
|
16317 |
+
$this->_plans = $plans[ $this->_slug ];
|
16318 |
+
if ( ! is_array( $this->_plans ) || empty( $this->_plans ) ) {
|
16319 |
+
$this->_sync_plans();
|
16320 |
+
} else {
|
16321 |
+
for ( $i = 0, $len = count( $this->_plans ); $i < $len; $i ++ ) {
|
16322 |
+
if ( $this->_plans[ $i ] instanceof FS_Plugin_Plan ) {
|
16323 |
+
$this->_plans[ $i ] = self::decrypt_entity( $this->_plans[ $i ] );
|
16324 |
+
} else {
|
16325 |
+
unset( $this->_plans[ $i ] );
|
16326 |
+
}
|
16327 |
+
}
|
16328 |
+
}
|
16329 |
}
|
16330 |
|
16331 |
$user = null;
|
16354 |
/**
|
16355 |
* This is a special fault tolerance mechanism to handle a scenario that the user data is missing.
|
16356 |
*/
|
16357 |
+
$user = $this->sync_user_by_current_install();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
16358 |
}
|
16359 |
|
16360 |
$this->_user = ( $user instanceof FS_User ) ?
|
16368 |
}
|
16369 |
|
16370 |
if ( is_object( $this->_site ) ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
16371 |
$this->_license = $this->_get_license_by_id( $this->_site->license_id );
|
16372 |
|
16373 |
if ( $this->_site->version != $this->get_plugin_version() ) {
|
16386 |
if ( $this->is_theme() ) {
|
16387 |
$this->_register_account_hooks();
|
16388 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
16389 |
}
|
16390 |
|
16391 |
/**
|
16597 |
);
|
16598 |
}
|
16599 |
|
|
|
|
|
|
|
|
|
16600 |
return array_merge( $params, $override_with );
|
16601 |
}
|
16602 |
|
16618 |
* @param bool $is_disconnected Whether or not to opt in without tracking.
|
16619 |
* @param null|bool $is_marketing_allowed
|
16620 |
* @param array $sites If network-level opt-in, an array of containing details of sites.
|
|
|
16621 |
*
|
16622 |
* @return string|object
|
16623 |
* @use WP_Error
|
16631 |
$trial_plan_id = false,
|
16632 |
$is_disconnected = false,
|
16633 |
$is_marketing_allowed = null,
|
16634 |
+
$sites = array()
|
|
|
16635 |
) {
|
16636 |
$this->_logger->entrance();
|
16637 |
|
16655 |
$fs_user,
|
16656 |
false,
|
16657 |
$trial_plan_id,
|
16658 |
+
true,
|
16659 |
true,
|
16660 |
$sites
|
16661 |
);
|
16815 |
true ),
|
16816 |
false,
|
16817 |
$filtered_license_key,
|
16818 |
+
! empty( $params['trial_plan_id'] )
|
|
|
16819 |
);
|
16820 |
} else if ( isset( $decoded->install_secret_key ) ) {
|
16821 |
return $this->install_with_new_user(
|
17090 |
);
|
17091 |
}
|
17092 |
} else if ( fs_request_has( 'pending_activation' ) ) {
|
17093 |
+
$this->set_pending_confirmation( fs_request_get( 'user_email' ), true );
|
|
|
|
|
|
|
|
|
|
|
|
|
17094 |
}
|
17095 |
}
|
17096 |
}
|
17185 |
$site->secret_key = $install_secret_key;
|
17186 |
|
17187 |
$this->_site = $site;
|
17188 |
+
$site_result = $this->get_api_site_scope()->get();
|
17189 |
$site = new FS_Site( $site_result );
|
17190 |
$this->_site = $site;
|
17191 |
|
17332 |
$email = false,
|
17333 |
$redirect = true,
|
17334 |
$license_key = false,
|
17335 |
+
$is_pending_trial = false
|
|
|
17336 |
) {
|
17337 |
if ( $this->_ignore_pending_mode ) {
|
17338 |
/**
|
17347 |
// Install must be activated via email since
|
17348 |
// user with the same email already exist.
|
17349 |
$this->_storage->is_pending_activation = true;
|
17350 |
+
$this->_add_pending_activation_notice( $email, $is_pending_trial );
|
17351 |
}
|
17352 |
|
17353 |
if ( ! empty( $license_key ) ) {
|
17410 |
*
|
17411 |
* @return object|string If redirect is `false`, returns the next page the user should be redirected to, or the API error object if failed to install.
|
17412 |
*/
|
17413 |
+
private function install_with_current_user(
|
17414 |
$license_key = false,
|
17415 |
$trial_plan_id = false,
|
17416 |
$sites = array(),
|
17793 |
$this->send_installs_update();
|
17794 |
}
|
17795 |
|
17796 |
+
// Switch install context back to the first install.
|
17797 |
+
$this->_site = $first_install;
|
17798 |
+
|
17799 |
$current_blog = get_current_blog_id();
|
17800 |
|
17801 |
foreach ( $blog_2_install_map as $blog_id => $install ) {
|
17804 |
$this->do_action( 'after_account_connection', $this->_user, $install );
|
17805 |
}
|
17806 |
|
17807 |
+
$this->switch_to_blog( $current_blog );
|
|
|
|
|
|
|
|
|
|
|
17808 |
|
17809 |
$this->do_action( 'after_network_account_connection', $this->_user, $blog_2_install_map );
|
17810 |
}
|
17908 |
// return;
|
17909 |
// }
|
17910 |
|
|
|
|
|
|
|
|
|
17911 |
/**
|
17912 |
* When running from a site admin with a network activated module and the connection
|
17913 |
* was NOT delegated and the user still haven't skipped or opted-in, then hide the
|
18862 |
*
|
18863 |
* @return string
|
18864 |
*/
|
18865 |
+
private static function get_ajax_action_static( $tag, $module_id = null ) {
|
18866 |
$action = "fs_{$tag}";
|
18867 |
|
18868 |
if ( ! empty( $module_id ) ) {
|
19105 |
}
|
19106 |
|
19107 |
/* Account Page
|
19108 |
+
------------------------------------------------------------------------------------------------------------------*/
|
19109 |
/**
|
19110 |
* Update site information.
|
19111 |
*
|
19116 |
* @param null|int $network_level_or_blog_id Since 2.0.0
|
19117 |
* @param \FS_Site $site Since 2.0.0
|
19118 |
*/
|
19119 |
+
private function _store_site( $store = true, $network_level_or_blog_id = null, FS_Site $site = null ) {
|
19120 |
$this->_logger->entrance();
|
19121 |
|
19122 |
if ( is_null( $site ) ) {
|
19131 |
|
19132 |
$site_clone = clone $site;
|
19133 |
|
19134 |
+
$sites = self::get_all_sites( $this->_module_type, $network_level_or_blog_id );
|
19135 |
|
19136 |
+
if ( is_object( $this->_user ) && $this->_user->id != $site->user_id ) {
|
|
|
|
|
|
|
19137 |
$this->sync_user_by_current_install( $site->user_id );
|
19138 |
|
19139 |
$prev_stored_user_id = $this->_storage->get( 'prev_user_id', false, $network_level_or_blog_id );
|
19158 |
|
19159 |
$sites[ $this->_slug ] = $site_clone;
|
19160 |
|
19161 |
+
$this->set_account_option( 'sites', $sites, $store, $network_level_or_blog_id );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
19162 |
}
|
19163 |
|
19164 |
/**
|
20399 |
$this->switch_to_blog( $current_blog_id );
|
20400 |
}
|
20401 |
|
20402 |
+
$result = $this->send_install_update( array(), true );
|
20403 |
$is_valid = $this->is_api_result_entity( $result );
|
20404 |
} else {
|
20405 |
+
$result = $this->send_installs_update( array(), true );
|
20406 |
$is_valid = $this->is_api_result_object( $result, 'installs' );
|
20407 |
}
|
20408 |
|
20412 |
$this->switch_to_blog( $this->_storage->network_install_blog_id );
|
20413 |
}
|
20414 |
|
20415 |
+
// Show API messages only if not background sync or if paying customer.
|
20416 |
if ( ! $background || $this->is_paying() ) {
|
20417 |
// Try to ping API to see if not blocked.
|
20418 |
if ( ! FS_Api::test() ) {
|
20422 |
* @author Vova Feldman (@svovaf)
|
20423 |
* @since 1.1.6 Only show message related to one of the Freemius powered plugins. Once it will be resolved it will fix the issue for all plugins anyways. There's no point to scare users with multiple error messages.
|
20424 |
*/
|
20425 |
+
$api = $this->get_api_site_scope();
|
20426 |
|
20427 |
if ( ! self::$_global_admin_notices->has_sticky( 'api_blocked' ) ) {
|
20428 |
+
self::$_global_admin_notices->add(
|
20429 |
+
sprintf(
|
20430 |
+
$this->get_text_inline( 'Your server is blocking the access to Freemius\' API, which is crucial for %1$s synchronization. Please contact your host to whitelist %2$s', 'server-blocking-access' ),
|
20431 |
+
$this->get_plugin_name(),
|
20432 |
+
'<b>' . implode( ', ', $this->apply_filters( 'api_domains', array(
|
20433 |
+
'api.freemius.com',
|
20434 |
+
'wp.freemius.com'
|
20435 |
+
) ) ) . '</b>'
|
20436 |
+
) . '<br> ' . $this->get_text_inline( 'Error received from the server:', 'server-error-message' ) . var_export( $result->error, true ),
|
20437 |
+
$this->get_text_x_inline( 'Oops', 'exclamation', 'oops' ) . '...',
|
20438 |
+
'error',
|
20439 |
+
$background,
|
20440 |
+
'api_blocked'
|
20441 |
+
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
20442 |
}
|
20443 |
+
} else {
|
20444 |
// Authentication params are broken.
|
20445 |
$this->_admin_notices->add(
|
20446 |
$this->get_text_inline( 'It seems like one of the authentication parameters is wrong. Update your Public Key, Secret Key & User ID, and try again.', 'wrong-authentication-param-message' ) . '<br> ' . $this->get_text_inline( 'Error received from the server:', 'server-error-message' ) . var_export( $result->error, true ),
|
20454 |
return;
|
20455 |
}
|
20456 |
|
|
|
|
|
|
|
20457 |
if ( $is_site_level_sync ) {
|
20458 |
$site = new FS_Site( $result );
|
20459 |
} else {
|
20645 |
}
|
20646 |
|
20647 |
if ( ! $this->is_addon() &&
|
20648 |
+
$this->_site->is_beta() !== $site->is_beta
|
20649 |
) {
|
20650 |
// Beta flag updated.
|
20651 |
$this->_site = $site;
|
21379 |
) {
|
21380 |
$this->_logger->entrance();
|
21381 |
|
|
|
|
|
|
|
|
|
21382 |
$switch_to_blog_id = null;
|
21383 |
|
21384 |
/**
|
21491 |
private function get_latest_download_api_url( $plugin_id = false ) {
|
21492 |
$this->_logger->entrance();
|
21493 |
|
21494 |
+
return $this->get_api_site_scope()->get_signed_url(
|
21495 |
$this->_get_latest_version_endpoint( $plugin_id, 'zip' )
|
21496 |
);
|
|
|
|
|
21497 |
}
|
21498 |
|
21499 |
/**
|
21688 |
private function update_email( $new_email ) {
|
21689 |
$this->_logger->entrance();
|
21690 |
|
21691 |
+
|
21692 |
$api = $this->get_api_user_scope();
|
21693 |
$user = $api->call( "?plugin_id={$this->_plugin->id}&fields=id,email,is_verified", 'put', array(
|
21694 |
'email' => $new_email,
|
21704 |
$this->_store_user();
|
21705 |
} else {
|
21706 |
// handle different error cases.
|
21707 |
+
|
21708 |
}
|
21709 |
|
21710 |
return $user;
|
21780 |
* @uses FS_Api
|
21781 |
*
|
21782 |
* @param string $candidate_email
|
|
|
21783 |
*
|
21784 |
* @return bool Is ownership change successfully initiated.
|
21785 |
*/
|
21786 |
+
private function init_change_owner( $candidate_email ) {
|
21787 |
$this->_logger->entrance();
|
21788 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
21789 |
$api = $this->get_api_site_scope();
|
21790 |
$result = $api->call( "/users/{$this->_user->id}.json", 'put', array(
|
21791 |
'email' => $candidate_email,
|
|
|
|
|
21792 |
'after_confirm_url' => $this->_get_admin_page_url(
|
21793 |
'account',
|
21794 |
array( 'fs_action' => 'change_owner' )
|
21810 |
private function complete_change_owner() {
|
21811 |
$this->_logger->entrance();
|
21812 |
|
21813 |
+
$site_result = $this->get_api_site_scope( true )->get();
|
21814 |
+
$site = new FS_Site( $site_result );
|
21815 |
+
$this->_site = $site;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
21816 |
|
21817 |
+
$user = new FS_User();
|
21818 |
+
$user->id = fs_request_get( 'user_id' );
|
|
|
|
|
|
|
21819 |
|
21820 |
// Validate install's user and given user.
|
21821 |
if ( $user->id != $this->_site->user_id ) {
|
|
|
|
|
21822 |
return false;
|
21823 |
}
|
21824 |
|
21825 |
+
$user->public_key = fs_request_get( 'user_public_key' );
|
21826 |
+
$user->secret_key = fs_request_get( 'user_secret_key' );
|
21827 |
|
21828 |
// Fetch new user information.
|
21829 |
+
$this->_user = $user;
|
21830 |
$user_result = $this->get_api_user_scope( true )->get();
|
21831 |
$user = new FS_User( $user_result );
|
21832 |
$this->_user = $user;
|
21833 |
|
21834 |
+
$this->_set_account( $user, $site );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
21835 |
|
21836 |
return true;
|
21837 |
}
|
22243 |
$state = fs_request_get( 'state', 'init' );
|
22244 |
switch ( $state ) {
|
22245 |
case 'init':
|
22246 |
+
$candidate_email = fs_request_get( 'candidate_email', '' );
|
|
|
22247 |
|
22248 |
+
if ( $this->init_change_owner( $candidate_email ) ) {
|
22249 |
+
$this->_admin_notices->add( sprintf( $this->get_text_inline( 'Please check your mailbox, you should receive an email via %s to confirm the ownership change. From security reasons, you must confirm the change within the next 15 min. If you cannot find the email, please check your spam folder.', 'change-owner-request-sent-x' ), '<b>' . $this->_user->email . '</b>' ) );
|
|
|
|
|
|
|
|
|
22250 |
}
|
22251 |
break;
|
22252 |
case 'owner_confirmed':
|
22269 |
|
22270 |
return;
|
22271 |
|
22272 |
+
case 'update_email':
|
22273 |
+
check_admin_referer( 'update_email' );
|
22274 |
+
|
22275 |
+
$new_email = fs_request_get( 'fs_email_' . $this->get_unique_affix(), '' );
|
22276 |
+
$result = $this->update_email( $new_email );
|
22277 |
+
|
22278 |
+
if ( isset( $result->error ) ) {
|
22279 |
+
switch ( $result->error->code ) {
|
22280 |
+
case 'user_exist':
|
22281 |
+
$this->_admin_notices->add(
|
22282 |
+
$this->get_text_inline( 'Sorry, we could not complete the email update. Another user with the same email is already registered.', 'user-exist-message' ) . ' ' .
|
22283 |
+
sprintf( $this->get_text_inline( 'If you would like to give up the ownership of the %s\'s account to %s click the Change Ownership button.', 'user-exist-message_ownership' ), $this->_module_type, '<b>' . $new_email . '</b>' ) .
|
22284 |
+
sprintf(
|
22285 |
+
'<a style="margin-left: 10px;" href="%s"><button class="button button-primary">%s ➜</button></a>',
|
22286 |
+
$this->get_account_url( 'change_owner', array(
|
22287 |
+
'state' => 'init',
|
22288 |
+
'candidate_email' => $new_email
|
22289 |
+
) ),
|
22290 |
+
$this->get_text_inline( 'Change Ownership', 'change-ownership' )
|
22291 |
+
),
|
22292 |
+
$oops_text,
|
22293 |
+
'error'
|
22294 |
+
);
|
22295 |
+
break;
|
22296 |
+
}
|
22297 |
+
} else {
|
22298 |
+
$this->_admin_notices->add( $this->get_text_inline( 'Your email was successfully updated. You should receive an email with confirmation instructions in few moments.', 'email-updated-message' ) );
|
22299 |
+
}
|
22300 |
+
|
22301 |
+
return;
|
22302 |
+
|
22303 |
case 'update_user_name':
|
22304 |
check_admin_referer( 'update_user_name' );
|
22305 |
|
22562 |
}
|
22563 |
|
22564 |
/* Pricing & Upgrade
|
22565 |
+
------------------------------------------------------------------------------------------------------------------*/
|
22566 |
/**
|
22567 |
* Render pricing page.
|
22568 |
*
|
22721 |
}
|
22722 |
|
22723 |
/* CSS & JavaScript
|
22724 |
+
------------------------------------------------------------------------------------------------------------------*/
|
22725 |
/* function _enqueue_script($handle, $src) {
|
22726 |
+
$url = plugins_url( substr( WP_FS__DIR_JS, strlen( $this->_plugin_dir_path ) ) . '/assets/js/' . $src );
|
22727 |
|
22728 |
+
$this->_logger->entrance( 'script = ' . $url );
|
22729 |
|
22730 |
+
wp_enqueue_script( $handle, $url );
|
22731 |
+
}*/
|
22732 |
|
22733 |
/* SDK
|
22734 |
+
------------------------------------------------------------------------------------------------------------------*/
|
22735 |
private $_user_api;
|
22736 |
|
22737 |
/**
|
22743 |
*
|
22744 |
* @return FS_Api
|
22745 |
*/
|
22746 |
+
private function get_api_user_scope( $flush = false ) {
|
22747 |
if ( ! isset( $this->_user_api ) || $flush ) {
|
22748 |
$this->_user_api = $this->get_api_user_scope_by_user( $this->_user );
|
22749 |
}
|
22822 |
$this->_site->public_key,
|
22823 |
! $this->is_live(),
|
22824 |
$this->_site->secret_key,
|
22825 |
+
$this->get_sdk_version()
|
|
|
22826 |
);
|
22827 |
}
|
22828 |
|
22829 |
return $this->_site_api;
|
22830 |
}
|
22831 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
22832 |
private $_plugin_api;
|
22833 |
|
22834 |
/**
|
23264 |
}
|
23265 |
|
23266 |
/* Action Links
|
23267 |
+
------------------------------------------------------------------------------------------------------------------*/
|
23268 |
private $_action_links_hooked = false;
|
23269 |
private $_action_links = array();
|
23270 |
|
23451 |
|
23452 |
if (
|
23453 |
$this->is_addon() &&
|
23454 |
+
! $this->is_only_premium() &&
|
23455 |
+
$this->_parent->is_anonymous()
|
23456 |
) {
|
23457 |
+
return;
|
|
|
|
|
|
|
|
|
23458 |
}
|
23459 |
|
23460 |
if ( fs_is_network_admin() ) {
|
freemius/includes/class-fs-admin-notices.php
CHANGED
@@ -125,10 +125,13 @@
|
|
125 |
$is_sticky = false,
|
126 |
$id = '',
|
127 |
$store_if_sticky = true,
|
128 |
-
$network_level_or_blog_id = null
|
129 |
-
$is_dimissible = null
|
130 |
) {
|
131 |
-
|
|
|
|
|
|
|
|
|
132 |
|
133 |
$notices->add(
|
134 |
$message,
|
@@ -136,11 +139,7 @@
|
|
136 |
$type,
|
137 |
$is_sticky,
|
138 |
$id,
|
139 |
-
$store_if_sticky
|
140 |
-
null,
|
141 |
-
null,
|
142 |
-
false,
|
143 |
-
$is_dimissible
|
144 |
);
|
145 |
}
|
146 |
|
@@ -150,9 +149,8 @@
|
|
150 |
*
|
151 |
* @param string|string[] $ids
|
152 |
* @param int|null $network_level_or_blog_id
|
153 |
-
* @param bool $store
|
154 |
*/
|
155 |
-
function remove_sticky( $ids, $network_level_or_blog_id = null
|
156 |
if ( ! is_array( $ids ) ) {
|
157 |
$ids = array( $ids );
|
158 |
}
|
@@ -163,7 +161,7 @@
|
|
163 |
$notices = $this->get_site_notices( $network_level_or_blog_id );
|
164 |
}
|
165 |
|
166 |
-
return $notices->remove_sticky( $ids
|
167 |
}
|
168 |
|
169 |
/**
|
@@ -178,7 +176,11 @@
|
|
178 |
* @return bool
|
179 |
*/
|
180 |
function has_sticky( $id, $network_level_or_blog_id = null ) {
|
181 |
-
|
|
|
|
|
|
|
|
|
182 |
|
183 |
return $notices->has_sticky( $id );
|
184 |
}
|
@@ -198,7 +200,6 @@
|
|
198 |
* @param string|null $plugin_title
|
199 |
* @param bool $is_network_and_blog_admins Whether or not the message should be shown both on network and
|
200 |
* blog admin pages.
|
201 |
-
* @param bool $is_dismissible
|
202 |
*/
|
203 |
function add_sticky(
|
204 |
$message,
|
@@ -208,30 +209,15 @@
|
|
208 |
$network_level_or_blog_id = null,
|
209 |
$wp_user_id = null,
|
210 |
$plugin_title = null,
|
211 |
-
$is_network_and_blog_admins = false
|
212 |
-
$is_dismissible = true,
|
213 |
-
$data = array()
|
214 |
) {
|
215 |
-
|
216 |
-
|
217 |
-
|
218 |
-
|
219 |
-
|
220 |
-
/**
|
221 |
-
* Retrieves the data of a sticky notice.
|
222 |
-
*
|
223 |
-
* @author Leo Fajardo (@leorw)
|
224 |
-
* @since 2.4.3
|
225 |
-
*
|
226 |
-
* @param string $id
|
227 |
-
* @param int|null $network_level_or_blog_id
|
228 |
-
*
|
229 |
-
* @return array|null
|
230 |
-
*/
|
231 |
-
function get_sticky( $id, $network_level_or_blog_id ) {
|
232 |
-
$notices = $this->get_site_or_network_notices( $id, $network_level_or_blog_id );
|
233 |
|
234 |
-
|
235 |
}
|
236 |
|
237 |
/**
|
@@ -331,22 +317,5 @@
|
|
331 |
return fs_is_network_admin();
|
332 |
}
|
333 |
|
334 |
-
/**
|
335 |
-
* Retrieves an instance of FS_Admin_Notice_Manager.
|
336 |
-
*
|
337 |
-
* @author Leo Fajardo (@leorw)
|
338 |
-
* @since 2.5.0
|
339 |
-
*
|
340 |
-
* @param string $id
|
341 |
-
* @param int|null $network_level_or_blog_id
|
342 |
-
*
|
343 |
-
* @return FS_Admin_Notice_Manager
|
344 |
-
*/
|
345 |
-
private function get_site_or_network_notices( $id, $network_level_or_blog_id ) {
|
346 |
-
return $this->should_use_network_notices( $id, $network_level_or_blog_id ) ?
|
347 |
-
$this->_network_notices :
|
348 |
-
$this->get_site_notices( $network_level_or_blog_id );
|
349 |
-
}
|
350 |
-
|
351 |
#endregion
|
352 |
}
|
125 |
$is_sticky = false,
|
126 |
$id = '',
|
127 |
$store_if_sticky = true,
|
128 |
+
$network_level_or_blog_id = null
|
|
|
129 |
) {
|
130 |
+
if ( $this->should_use_network_notices( $id, $network_level_or_blog_id ) ) {
|
131 |
+
$notices = $this->_network_notices;
|
132 |
+
} else {
|
133 |
+
$notices = $this->get_site_notices( $network_level_or_blog_id );
|
134 |
+
}
|
135 |
|
136 |
$notices->add(
|
137 |
$message,
|
139 |
$type,
|
140 |
$is_sticky,
|
141 |
$id,
|
142 |
+
$store_if_sticky
|
|
|
|
|
|
|
|
|
143 |
);
|
144 |
}
|
145 |
|
149 |
*
|
150 |
* @param string|string[] $ids
|
151 |
* @param int|null $network_level_or_blog_id
|
|
|
152 |
*/
|
153 |
+
function remove_sticky( $ids, $network_level_or_blog_id = null ) {
|
154 |
if ( ! is_array( $ids ) ) {
|
155 |
$ids = array( $ids );
|
156 |
}
|
161 |
$notices = $this->get_site_notices( $network_level_or_blog_id );
|
162 |
}
|
163 |
|
164 |
+
return $notices->remove_sticky( $ids );
|
165 |
}
|
166 |
|
167 |
/**
|
176 |
* @return bool
|
177 |
*/
|
178 |
function has_sticky( $id, $network_level_or_blog_id = null ) {
|
179 |
+
if ( $this->should_use_network_notices( $id, $network_level_or_blog_id ) ) {
|
180 |
+
$notices = $this->_network_notices;
|
181 |
+
} else {
|
182 |
+
$notices = $this->get_site_notices( $network_level_or_blog_id );
|
183 |
+
}
|
184 |
|
185 |
return $notices->has_sticky( $id );
|
186 |
}
|
200 |
* @param string|null $plugin_title
|
201 |
* @param bool $is_network_and_blog_admins Whether or not the message should be shown both on network and
|
202 |
* blog admin pages.
|
|
|
203 |
*/
|
204 |
function add_sticky(
|
205 |
$message,
|
209 |
$network_level_or_blog_id = null,
|
210 |
$wp_user_id = null,
|
211 |
$plugin_title = null,
|
212 |
+
$is_network_and_blog_admins = false
|
|
|
|
|
213 |
) {
|
214 |
+
if ( $this->should_use_network_notices( $id, $network_level_or_blog_id ) ) {
|
215 |
+
$notices = $this->_network_notices;
|
216 |
+
} else {
|
217 |
+
$notices = $this->get_site_notices( $network_level_or_blog_id );
|
218 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
219 |
|
220 |
+
$notices->add_sticky( $message, $id, $title, $type, $wp_user_id, $plugin_title, $is_network_and_blog_admins );
|
221 |
}
|
222 |
|
223 |
/**
|
317 |
return fs_is_network_admin();
|
318 |
}
|
319 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
320 |
#endregion
|
321 |
}
|
freemius/includes/class-fs-api.php
CHANGED
@@ -64,14 +64,6 @@
|
|
64 |
*/
|
65 |
private $_sdk_version;
|
66 |
|
67 |
-
/**
|
68 |
-
* @author Leo Fajardo (@leorw)
|
69 |
-
* @since 2.5.0
|
70 |
-
*
|
71 |
-
* @var string
|
72 |
-
*/
|
73 |
-
private $_url;
|
74 |
-
|
75 |
/**
|
76 |
* @param string $slug
|
77 |
* @param string $scope 'app', 'developer', 'user' or 'install'.
|
@@ -80,7 +72,6 @@
|
|
80 |
* @param bool $is_sandbox
|
81 |
* @param bool|string $secret_key Element's secret key.
|
82 |
* @param null|string $sdk_version
|
83 |
-
* @param null|string $url
|
84 |
*
|
85 |
* @return FS_Api
|
86 |
*/
|
@@ -91,15 +82,14 @@
|
|
91 |
$public_key,
|
92 |
$is_sandbox,
|
93 |
$secret_key = false,
|
94 |
-
$sdk_version = null
|
95 |
-
$url = null
|
96 |
) {
|
97 |
$identifier = md5( $slug . $scope . $id . $public_key . ( is_string( $secret_key ) ? $secret_key : '' ) . json_encode( $is_sandbox ) );
|
98 |
|
99 |
if ( ! isset( self::$_instances[ $identifier ] ) ) {
|
100 |
self::_init();
|
101 |
|
102 |
-
self::$_instances[ $identifier ] = new FS_Api( $slug, $scope, $id, $public_key, $secret_key, $is_sandbox, $sdk_version
|
103 |
}
|
104 |
|
105 |
return self::$_instances[ $identifier ];
|
@@ -133,7 +123,6 @@
|
|
133 |
* @param bool|string $secret_key Element's secret key.
|
134 |
* @param bool $is_sandbox
|
135 |
* @param null|string $sdk_version
|
136 |
-
* @param null|string $url
|
137 |
*/
|
138 |
private function __construct(
|
139 |
$slug,
|
@@ -142,14 +131,12 @@
|
|
142 |
$public_key,
|
143 |
$secret_key,
|
144 |
$is_sandbox,
|
145 |
-
$sdk_version
|
146 |
-
$url
|
147 |
) {
|
148 |
$this->_api = new Freemius_Api_WordPress( $scope, $id, $public_key, $secret_key, $is_sandbox );
|
149 |
|
150 |
$this->_slug = $slug;
|
151 |
$this->_sdk_version = $sdk_version;
|
152 |
-
$this->_url = $url;
|
153 |
$this->_logger = FS_Logger::get_logger( WP_FS__SLUG . '_' . $slug . '_api', WP_FS__DEBUG_SDK, WP_FS__ECHO_DEBUG_SDK );
|
154 |
}
|
155 |
|
@@ -211,17 +198,6 @@
|
|
211 |
}
|
212 |
}
|
213 |
|
214 |
-
/**
|
215 |
-
* @since 2.5.0 Include the site's URL, if available, in all API requests that are going through the API manager.
|
216 |
-
*/
|
217 |
-
if ( ! empty( $this->_url ) ) {
|
218 |
-
if ( false === strpos( $path, 'url=' ) &&
|
219 |
-
! isset( $params['url'] )
|
220 |
-
) {
|
221 |
-
$path = add_query_arg( 'url', $this->_url, $path );
|
222 |
-
}
|
223 |
-
}
|
224 |
-
|
225 |
$result = $this->_api->Api( $path, $method, $params );
|
226 |
|
227 |
if ( null !== $result &&
|
64 |
*/
|
65 |
private $_sdk_version;
|
66 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
67 |
/**
|
68 |
* @param string $slug
|
69 |
* @param string $scope 'app', 'developer', 'user' or 'install'.
|
72 |
* @param bool $is_sandbox
|
73 |
* @param bool|string $secret_key Element's secret key.
|
74 |
* @param null|string $sdk_version
|
|
|
75 |
*
|
76 |
* @return FS_Api
|
77 |
*/
|
82 |
$public_key,
|
83 |
$is_sandbox,
|
84 |
$secret_key = false,
|
85 |
+
$sdk_version = null
|
|
|
86 |
) {
|
87 |
$identifier = md5( $slug . $scope . $id . $public_key . ( is_string( $secret_key ) ? $secret_key : '' ) . json_encode( $is_sandbox ) );
|
88 |
|
89 |
if ( ! isset( self::$_instances[ $identifier ] ) ) {
|
90 |
self::_init();
|
91 |
|
92 |
+
self::$_instances[ $identifier ] = new FS_Api( $slug, $scope, $id, $public_key, $secret_key, $is_sandbox, $sdk_version );
|
93 |
}
|
94 |
|
95 |
return self::$_instances[ $identifier ];
|
123 |
* @param bool|string $secret_key Element's secret key.
|
124 |
* @param bool $is_sandbox
|
125 |
* @param null|string $sdk_version
|
|
|
126 |
*/
|
127 |
private function __construct(
|
128 |
$slug,
|
131 |
$public_key,
|
132 |
$secret_key,
|
133 |
$is_sandbox,
|
134 |
+
$sdk_version
|
|
|
135 |
) {
|
136 |
$this->_api = new Freemius_Api_WordPress( $scope, $id, $public_key, $secret_key, $is_sandbox );
|
137 |
|
138 |
$this->_slug = $slug;
|
139 |
$this->_sdk_version = $sdk_version;
|
|
|
140 |
$this->_logger = FS_Logger::get_logger( WP_FS__SLUG . '_' . $slug . '_api', WP_FS__DEBUG_SDK, WP_FS__ECHO_DEBUG_SDK );
|
141 |
}
|
142 |
|
198 |
}
|
199 |
}
|
200 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
201 |
$result = $this->_api->Api( $path, $method, $params );
|
202 |
|
203 |
if ( null !== $result &&
|
freemius/includes/class-fs-plugin-updater.php
CHANGED
@@ -240,11 +240,7 @@
|
|
240 |
* @since 2.0.0
|
241 |
*/
|
242 |
private function add_transient_filters() {
|
243 |
-
if (
|
244 |
-
$this->_fs->is_premium() &&
|
245 |
-
$this->_fs->is_registered() &&
|
246 |
-
! $this->_fs->is_tracking_allowed()
|
247 |
-
) {
|
248 |
$this->_logger->log( 'Opted out sites cannot receive automatic software updates.' );
|
249 |
|
250 |
return;
|
@@ -614,9 +610,11 @@
|
|
614 |
if ( ! isset( $this->_translation_updates ) ) {
|
615 |
$this->_translation_updates = array();
|
616 |
|
617 |
-
|
618 |
-
|
619 |
-
|
|
|
|
|
620 |
}
|
621 |
}
|
622 |
|
240 |
* @since 2.0.0
|
241 |
*/
|
242 |
private function add_transient_filters() {
|
243 |
+
if ( $this->_fs->is_premium() && ! $this->_fs->is_tracking_allowed() ) {
|
|
|
|
|
|
|
|
|
244 |
$this->_logger->log( 'Opted out sites cannot receive automatic software updates.' );
|
245 |
|
246 |
return;
|
610 |
if ( ! isset( $this->_translation_updates ) ) {
|
611 |
$this->_translation_updates = array();
|
612 |
|
613 |
+
if ( current_user_can( 'update_languages' ) ) {
|
614 |
+
$translation_updates = $this->fetch_wp_org_module_translation_updates( $module_type, $slug );
|
615 |
+
if ( ! empty( $translation_updates ) ) {
|
616 |
+
$this->_translation_updates = $translation_updates;
|
617 |
+
}
|
618 |
}
|
619 |
}
|
620 |
|
freemius/includes/entities/class-fs-user.php
CHANGED
@@ -56,18 +56,7 @@
|
|
56 |
return ( isset( $this->is_verified ) && true === $this->is_verified );
|
57 |
}
|
58 |
|
59 |
-
|
60 |
-
* @author Leo Fajardo (@leorw)
|
61 |
-
* @since 2.4.2
|
62 |
-
*
|
63 |
-
* @return bool
|
64 |
-
*/
|
65 |
-
function is_beta() {
|
66 |
-
// Return `false` since this is just for backward compatibility.
|
67 |
-
return false;
|
68 |
-
}
|
69 |
-
|
70 |
-
static function get_type() {
|
71 |
return 'user';
|
72 |
}
|
73 |
}
|
56 |
return ( isset( $this->is_verified ) && true === $this->is_verified );
|
57 |
}
|
58 |
|
59 |
+
static function get_type() {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
60 |
return 'user';
|
61 |
}
|
62 |
}
|
freemius/includes/fs-core-functions.php
CHANGED
@@ -1349,7 +1349,7 @@
|
|
1349 |
function fs_is_plugin_uninstall() {
|
1350 |
return (
|
1351 |
defined( 'WP_UNINSTALL_PLUGIN' ) ||
|
1352 |
-
( 0 < did_action( '
|
1353 |
);
|
1354 |
}
|
1355 |
}
|
1349 |
function fs_is_plugin_uninstall() {
|
1350 |
return (
|
1351 |
defined( 'WP_UNINSTALL_PLUGIN' ) ||
|
1352 |
+
( 0 < did_action( 'update_option_uninstall_plugins' ) )
|
1353 |
);
|
1354 |
}
|
1355 |
}
|
freemius/includes/fs-plugin-info-dialog.php
CHANGED
@@ -1306,8 +1306,8 @@
|
|
1306 |
<?php endif ?>
|
1307 |
</div>
|
1308 |
</div>
|
|
|
1309 |
<?php endforeach ?>
|
1310 |
-
</div>
|
1311 |
<?php endif ?>
|
1312 |
<?php endif ?>
|
1313 |
<div>
|
1306 |
<?php endif ?>
|
1307 |
</div>
|
1308 |
</div>
|
1309 |
+
</div>
|
1310 |
<?php endforeach ?>
|
|
|
1311 |
<?php endif ?>
|
1312 |
<?php endif ?>
|
1313 |
<div>
|
freemius/includes/managers/class-fs-admin-notice-manager.php
CHANGED
@@ -160,10 +160,7 @@
|
|
160 |
false,
|
161 |
isset( $msg['wp_user_id'] ) ? $msg['wp_user_id'] : null,
|
162 |
! empty( $msg['plugin'] ) ? $msg['plugin'] : null,
|
163 |
-
$is_network_and_blog_admins
|
164 |
-
isset( $msg['dismissible'] ) ?
|
165 |
-
$msg['dismissible'] :
|
166 |
-
null
|
167 |
);
|
168 |
}
|
169 |
}
|
@@ -178,7 +175,12 @@
|
|
178 |
*
|
179 |
*/
|
180 |
function dismiss_notice_ajax_callback() {
|
181 |
-
|
|
|
|
|
|
|
|
|
|
|
182 |
wp_die();
|
183 |
}
|
184 |
|
@@ -222,6 +224,9 @@
|
|
222 |
return;
|
223 |
}
|
224 |
|
|
|
|
|
|
|
225 |
foreach ( $this->_notices as $id => $msg ) {
|
226 |
if ( isset( $msg['wp_user_id'] ) && is_numeric( $msg['wp_user_id'] ) ) {
|
227 |
if ( get_current_user_id() != $msg['wp_user_id'] ) {
|
@@ -264,7 +269,7 @@
|
|
264 |
$show_notice = call_user_func_array( 'fs_apply_filter', array(
|
265 |
$this->_module_unique_affix,
|
266 |
'show_admin_notice',
|
267 |
-
$
|
268 |
$msg
|
269 |
) );
|
270 |
|
@@ -318,30 +323,6 @@
|
|
318 |
return false;
|
319 |
}
|
320 |
|
321 |
-
/**
|
322 |
-
* Check if admin notices should be shown on page. E.g., we don't want to show notices in the Visual Editor.
|
323 |
-
*
|
324 |
-
* @author Xiaheng Chen (@xhchen)
|
325 |
-
* @since 2.4.2
|
326 |
-
*
|
327 |
-
* @return bool
|
328 |
-
*/
|
329 |
-
function show_admin_notices() {
|
330 |
-
global $pagenow;
|
331 |
-
|
332 |
-
if ( 'about.php' === $pagenow ) {
|
333 |
-
// Don't show admin notices on the About page.
|
334 |
-
return false;
|
335 |
-
}
|
336 |
-
|
337 |
-
if ( $this->is_gutenberg_page() ) {
|
338 |
-
// Don't show admin notices in Gutenberg (visual editor).
|
339 |
-
return false;
|
340 |
-
}
|
341 |
-
|
342 |
-
return true;
|
343 |
-
}
|
344 |
-
|
345 |
/**
|
346 |
* Add admin message to admin messages queue, and hook to admin_notices / all_admin_notices if not yet hooked.
|
347 |
*
|
@@ -358,8 +339,6 @@
|
|
358 |
* @param string|null $plugin_title
|
359 |
* @param bool $is_network_and_blog_admins Whether or not the message should be shown both on network
|
360 |
* and blog admin pages.
|
361 |
-
* @param bool|null $is_dismissible
|
362 |
-
* @param array $data
|
363 |
*
|
364 |
* @uses add_action()
|
365 |
*/
|
@@ -372,9 +351,7 @@
|
|
372 |
$store_if_sticky = true,
|
373 |
$wp_user_id = null,
|
374 |
$plugin_title = null,
|
375 |
-
$is_network_and_blog_admins = false
|
376 |
-
$is_dismissible = null,
|
377 |
-
$data = array()
|
378 |
) {
|
379 |
$notices_type = $this->get_notices_type();
|
380 |
|
@@ -394,16 +371,14 @@
|
|
394 |
}
|
395 |
|
396 |
$message_object = array(
|
397 |
-
'message'
|
398 |
-
'title'
|
399 |
-
'type'
|
400 |
-
'sticky'
|
401 |
-
'id'
|
402 |
-
'manager_id'
|
403 |
-
'plugin'
|
404 |
-
'wp_user_id'
|
405 |
-
'dismissible' => $is_dismissible,
|
406 |
-
'data' => $data
|
407 |
);
|
408 |
|
409 |
if ( $is_sticky && $store_if_sticky ) {
|
@@ -418,16 +393,15 @@
|
|
418 |
* @since 1.0.7
|
419 |
*
|
420 |
* @param string|string[] $ids
|
421 |
-
* @param bool $store
|
422 |
*/
|
423 |
-
function remove_sticky( $ids
|
424 |
if ( ! is_array( $ids ) ) {
|
425 |
$ids = array( $ids );
|
426 |
}
|
427 |
|
428 |
foreach ( $ids as $id ) {
|
429 |
// Remove from sticky storage.
|
430 |
-
$this->_sticky_storage->remove( $id
|
431 |
|
432 |
if ( isset( $this->_notices[ $id ] ) ) {
|
433 |
unset( $this->_notices[ $id ] );
|
@@ -463,32 +437,14 @@
|
|
463 |
* @param string|null $plugin_title
|
464 |
* @param bool $is_network_and_blog_admins Whether or not the message should be shown both on network
|
465 |
* and blog admin pages.
|
466 |
-
* @param bool $is_dimissible
|
467 |
-
* @param array $data
|
468 |
*/
|
469 |
-
function add_sticky( $message, $id, $title = '', $type = 'success', $wp_user_id = null, $plugin_title = null, $is_network_and_blog_admins = false
|
470 |
if ( ! empty( $this->_module_unique_affix ) ) {
|
471 |
$message = fs_apply_filter( $this->_module_unique_affix, "sticky_message_{$id}", $message );
|
472 |
$title = fs_apply_filter( $this->_module_unique_affix, "sticky_title_{$id}", $title );
|
473 |
}
|
474 |
|
475 |
-
$this->add( $message, $title, $type, true, $id, true, $wp_user_id, $plugin_title, $is_network_and_blog_admins
|
476 |
-
}
|
477 |
-
|
478 |
-
/**
|
479 |
-
* Retrieves the data of an sticky notice.
|
480 |
-
*
|
481 |
-
* @author Leo Fajardo (@leorw)
|
482 |
-
* @since 2.4.3
|
483 |
-
*
|
484 |
-
* @param string $id Message ID.
|
485 |
-
*
|
486 |
-
* @return array|null
|
487 |
-
*/
|
488 |
-
function get_sticky( $id ) {
|
489 |
-
return isset( $this->_sticky_storage->{$id} ) ?
|
490 |
-
$this->_sticky_storage->{$id} :
|
491 |
-
null;
|
492 |
}
|
493 |
|
494 |
/**
|
@@ -518,4 +474,4 @@
|
|
518 |
}
|
519 |
|
520 |
#endregion
|
521 |
-
}
|
160 |
false,
|
161 |
isset( $msg['wp_user_id'] ) ? $msg['wp_user_id'] : null,
|
162 |
! empty( $msg['plugin'] ) ? $msg['plugin'] : null,
|
163 |
+
$is_network_and_blog_admins
|
|
|
|
|
|
|
164 |
);
|
165 |
}
|
166 |
}
|
175 |
*
|
176 |
*/
|
177 |
function dismiss_notice_ajax_callback() {
|
178 |
+
check_admin_referer( 'fs_dismiss_notice_action' );
|
179 |
+
|
180 |
+
if ( ! is_numeric( $_POST['message_id'] ) ) {
|
181 |
+
$this->_sticky_storage->remove( $_POST['message_id'] );
|
182 |
+
}
|
183 |
+
|
184 |
wp_die();
|
185 |
}
|
186 |
|
224 |
return;
|
225 |
}
|
226 |
|
227 |
+
|
228 |
+
$show_admin_notices = ( ! $this->is_gutenberg_page() );
|
229 |
+
|
230 |
foreach ( $this->_notices as $id => $msg ) {
|
231 |
if ( isset( $msg['wp_user_id'] ) && is_numeric( $msg['wp_user_id'] ) ) {
|
232 |
if ( get_current_user_id() != $msg['wp_user_id'] ) {
|
269 |
$show_notice = call_user_func_array( 'fs_apply_filter', array(
|
270 |
$this->_module_unique_affix,
|
271 |
'show_admin_notice',
|
272 |
+
$show_admin_notices,
|
273 |
$msg
|
274 |
) );
|
275 |
|
323 |
return false;
|
324 |
}
|
325 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
326 |
/**
|
327 |
* Add admin message to admin messages queue, and hook to admin_notices / all_admin_notices if not yet hooked.
|
328 |
*
|
339 |
* @param string|null $plugin_title
|
340 |
* @param bool $is_network_and_blog_admins Whether or not the message should be shown both on network
|
341 |
* and blog admin pages.
|
|
|
|
|
342 |
*
|
343 |
* @uses add_action()
|
344 |
*/
|
351 |
$store_if_sticky = true,
|
352 |
$wp_user_id = null,
|
353 |
$plugin_title = null,
|
354 |
+
$is_network_and_blog_admins = false
|
|
|
|
|
355 |
) {
|
356 |
$notices_type = $this->get_notices_type();
|
357 |
|
371 |
}
|
372 |
|
373 |
$message_object = array(
|
374 |
+
'message' => $message,
|
375 |
+
'title' => $title,
|
376 |
+
'type' => $type,
|
377 |
+
'sticky' => $is_sticky,
|
378 |
+
'id' => $id,
|
379 |
+
'manager_id' => $this->_id,
|
380 |
+
'plugin' => ( ! is_null( $plugin_title ) ? $plugin_title : $this->_title ),
|
381 |
+
'wp_user_id' => $wp_user_id,
|
|
|
|
|
382 |
);
|
383 |
|
384 |
if ( $is_sticky && $store_if_sticky ) {
|
393 |
* @since 1.0.7
|
394 |
*
|
395 |
* @param string|string[] $ids
|
|
|
396 |
*/
|
397 |
+
function remove_sticky( $ids ) {
|
398 |
if ( ! is_array( $ids ) ) {
|
399 |
$ids = array( $ids );
|
400 |
}
|
401 |
|
402 |
foreach ( $ids as $id ) {
|
403 |
// Remove from sticky storage.
|
404 |
+
$this->_sticky_storage->remove( $id );
|
405 |
|
406 |
if ( isset( $this->_notices[ $id ] ) ) {
|
407 |
unset( $this->_notices[ $id ] );
|
437 |
* @param string|null $plugin_title
|
438 |
* @param bool $is_network_and_blog_admins Whether or not the message should be shown both on network
|
439 |
* and blog admin pages.
|
|
|
|
|
440 |
*/
|
441 |
+
function add_sticky( $message, $id, $title = '', $type = 'success', $wp_user_id = null, $plugin_title = null, $is_network_and_blog_admins = false ) {
|
442 |
if ( ! empty( $this->_module_unique_affix ) ) {
|
443 |
$message = fs_apply_filter( $this->_module_unique_affix, "sticky_message_{$id}", $message );
|
444 |
$title = fs_apply_filter( $this->_module_unique_affix, "sticky_title_{$id}", $title );
|
445 |
}
|
446 |
|
447 |
+
$this->add( $message, $title, $type, true, $id, true, $wp_user_id, $plugin_title, $is_network_and_blog_admins );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
448 |
}
|
449 |
|
450 |
/**
|
474 |
}
|
475 |
|
476 |
#endregion
|
477 |
+
}
|
freemius/includes/managers/class-fs-clone-manager.php
DELETED
@@ -1,1480 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* @package Freemius
|
4 |
-
* @copyright Copyright (c) 2015, Freemius, Inc.
|
5 |
-
* @license https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Version 3
|
6 |
-
* @author Leo Fajardo (@leorw)
|
7 |
-
* @since 2.5.0
|
8 |
-
*/
|
9 |
-
|
10 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
11 |
-
exit;
|
12 |
-
}
|
13 |
-
|
14 |
-
/**
|
15 |
-
* Manages the detection of clones and provides the logged-in WordPress user with options for manually resolving them.
|
16 |
-
*
|
17 |
-
* @since 2.5.0
|
18 |
-
*
|
19 |
-
* @property int $clone_identification_timestamp
|
20 |
-
* @property int $temporary_duplicate_mode_selection_timestamp
|
21 |
-
* @property int $temporary_duplicate_notice_shown_timestamp
|
22 |
-
* @property string $request_handler_id
|
23 |
-
* @property int $request_handler_timestamp
|
24 |
-
* @property int $request_handler_retries_count
|
25 |
-
*/
|
26 |
-
class FS_Clone_Manager {
|
27 |
-
/**
|
28 |
-
* @var FS_Option_Manager
|
29 |
-
*/
|
30 |
-
private $_storage;
|
31 |
-
/**
|
32 |
-
* @var FS_Option_Manager
|
33 |
-
*/
|
34 |
-
private $_network_storage;
|
35 |
-
/**
|
36 |
-
* @var array {
|
37 |
-
* @type int $clone_identification_timestamp
|
38 |
-
* @type int $temporary_duplicate_mode_selection_timestamp
|
39 |
-
* @type int $temporary_duplicate_notice_shown_timestamp
|
40 |
-
* @type string $request_handler_id
|
41 |
-
* @type int $request_handler_timestamp
|
42 |
-
* @type int $request_handler_retries_count
|
43 |
-
* }
|
44 |
-
*/
|
45 |
-
private $_data;
|
46 |
-
/**
|
47 |
-
* @var array {
|
48 |
-
* @type array $new_blog_install_map
|
49 |
-
* }
|
50 |
-
*/
|
51 |
-
private $_network_data;
|
52 |
-
/**
|
53 |
-
* @var FS_Admin_Notices
|
54 |
-
*/
|
55 |
-
private $_notices;
|
56 |
-
/**
|
57 |
-
* @var FS_Logger
|
58 |
-
*/
|
59 |
-
protected $_logger;
|
60 |
-
|
61 |
-
/**
|
62 |
-
* @var int 3 minutes
|
63 |
-
*/
|
64 |
-
const CLONE_RESOLUTION_MAX_EXECUTION_TIME = 180;
|
65 |
-
/**
|
66 |
-
* @var int
|
67 |
-
*/
|
68 |
-
const CLONE_RESOLUTION_MAX_RETRIES = 3;
|
69 |
-
/**
|
70 |
-
* @var int
|
71 |
-
*/
|
72 |
-
const TEMPORARY_DUPLICATE_PERIOD = WP_FS__TIME_WEEK_IN_SEC * 2;
|
73 |
-
/**
|
74 |
-
* @var string
|
75 |
-
*/
|
76 |
-
const OPTION_NAME = 'clone_resolution';
|
77 |
-
/**
|
78 |
-
* @var string
|
79 |
-
*/
|
80 |
-
const OPTION_MANAGER_NAME = 'clone_management';
|
81 |
-
/**
|
82 |
-
* @var string
|
83 |
-
*/
|
84 |
-
const OPTION_TEMPORARY_DUPLICATE = 'temporary_duplicate';
|
85 |
-
/**
|
86 |
-
* @var string
|
87 |
-
*/
|
88 |
-
const OPTION_NEW_HOME = 'new_home';
|
89 |
-
|
90 |
-
#--------------------------------------------------------------------------------
|
91 |
-
#region Singleton
|
92 |
-
#--------------------------------------------------------------------------------
|
93 |
-
|
94 |
-
/**
|
95 |
-
* @var FS_Clone_Manager
|
96 |
-
*/
|
97 |
-
private static $_instance;
|
98 |
-
|
99 |
-
/**
|
100 |
-
* @return FS_Clone_Manager
|
101 |
-
*/
|
102 |
-
static function instance() {
|
103 |
-
if ( ! isset( self::$_instance ) ) {
|
104 |
-
self::$_instance = new self();
|
105 |
-
}
|
106 |
-
|
107 |
-
return self::$_instance;
|
108 |
-
}
|
109 |
-
|
110 |
-
#endregion
|
111 |
-
|
112 |
-
private function __construct() {
|
113 |
-
$this->_storage = FS_Option_Manager::get_manager( WP_FS___OPTION_PREFIX . self::OPTION_MANAGER_NAME, true );
|
114 |
-
$this->_network_storage = FS_Option_Manager::get_manager( WP_FS___OPTION_PREFIX . self::OPTION_MANAGER_NAME, true, true );
|
115 |
-
$this->_data = $this->_storage->get_option( self::OPTION_NAME, array() );
|
116 |
-
$this->_network_data = $this->_network_storage->get_option( self::OPTION_NAME, array() );
|
117 |
-
|
118 |
-
$this->_notices = FS_Admin_Notices::instance( 'global_clone_resolution_notices', '', '', true );
|
119 |
-
$this->_logger = FS_Logger::get_logger( WP_FS__SLUG . '_' . '_clone_manager', WP_FS__DEBUG_SDK, WP_FS__ECHO_DEBUG_SDK );
|
120 |
-
|
121 |
-
$defaults = array(
|
122 |
-
'clone_identification_timestamp' => null,
|
123 |
-
'temporary_duplicate_mode_selection_timestamp' => null,
|
124 |
-
'temporary_duplicate_notice_shown_timestamp' => null,
|
125 |
-
'request_handler_id' => null,
|
126 |
-
'request_handler_timestamp' => null,
|
127 |
-
'request_handler_retries_count' => null,
|
128 |
-
);
|
129 |
-
|
130 |
-
if ( ! is_array( $this->_data ) ) {
|
131 |
-
$this->_data = $defaults;
|
132 |
-
} else {
|
133 |
-
foreach ( $defaults as $name => $value ) {
|
134 |
-
$this->_data[ $name ] = isset( $this->_data[ $name ] ) ?
|
135 |
-
$this->_data[ $name ] :
|
136 |
-
$value;
|
137 |
-
}
|
138 |
-
}
|
139 |
-
|
140 |
-
if (
|
141 |
-
! is_array( $this->_network_data ) ||
|
142 |
-
! isset( $this->_network_data['new_blog_install_map'] )
|
143 |
-
) {
|
144 |
-
$this->_network_data = array( 'new_blog_install_map' => null );
|
145 |
-
}
|
146 |
-
}
|
147 |
-
|
148 |
-
/**
|
149 |
-
* @author Leo Fajardo (@leorw)
|
150 |
-
* @since 2.5.0
|
151 |
-
*/
|
152 |
-
function _init() {
|
153 |
-
if ( is_admin() ) {
|
154 |
-
if ( Freemius::is_admin_post() ) {
|
155 |
-
add_action( 'admin_post_fs_clone_resolution', array( $this, '_handle_clone_resolution' ) );
|
156 |
-
}
|
157 |
-
|
158 |
-
if (
|
159 |
-
empty( $this->get_clone_identification_timestamp() ) &&
|
160 |
-
(
|
161 |
-
! fs_is_network_admin() ||
|
162 |
-
! ( $this->is_clone_resolution_options_notice_shown() || $this->is_temporary_duplicate_notice_shown() )
|
163 |
-
)
|
164 |
-
) {
|
165 |
-
$this->hide_clone_admin_notices();
|
166 |
-
} else {
|
167 |
-
if ( Freemius::is_ajax() ) {
|
168 |
-
Freemius::add_ajax_action_static( 'handle_clone_resolution', array( $this, '_clone_resolution_action_ajax_handler' ) );
|
169 |
-
} else if ( ! Freemius::is_cron() && ! Freemius::is_admin_post() ) {
|
170 |
-
$this->maybe_show_clone_admin_notice();
|
171 |
-
|
172 |
-
add_action( 'admin_footer', array( $this, '_add_clone_resolution_javascript' ) );
|
173 |
-
}
|
174 |
-
}
|
175 |
-
}
|
176 |
-
}
|
177 |
-
|
178 |
-
/**
|
179 |
-
* Retrieves the timestamp that was stored when a clone was identified.
|
180 |
-
*
|
181 |
-
* @return int|null
|
182 |
-
*/
|
183 |
-
function get_clone_identification_timestamp() {
|
184 |
-
return $this->clone_identification_timestamp;
|
185 |
-
}
|
186 |
-
|
187 |
-
/**
|
188 |
-
* Stores the time when a clone was identified.
|
189 |
-
*/
|
190 |
-
function store_clone_identification_timestamp() {
|
191 |
-
$this->clone_identification_timestamp = time();
|
192 |
-
}
|
193 |
-
|
194 |
-
/**
|
195 |
-
* Retrieves the timestamp for the temporary duplicate mode's expiration.
|
196 |
-
*
|
197 |
-
* @return int
|
198 |
-
*/
|
199 |
-
function get_temporary_duplicate_expiration_timestamp() {
|
200 |
-
$temporary_duplicate_mode_start_timestamp = $this->was_temporary_duplicate_mode_selected() ?
|
201 |
-
$this->temporary_duplicate_mode_selection_timestamp :
|
202 |
-
$this->get_clone_identification_timestamp();
|
203 |
-
|
204 |
-
return ( $temporary_duplicate_mode_start_timestamp + self::TEMPORARY_DUPLICATE_PERIOD );
|
205 |
-
}
|
206 |
-
|
207 |
-
/**
|
208 |
-
* Determines if the SDK should handle clones. The SDK handles clones only up to 3 times with 3 min interval.
|
209 |
-
*
|
210 |
-
* @return bool
|
211 |
-
*/
|
212 |
-
private function should_handle_clones() {
|
213 |
-
if ( ! isset( $this->request_handler_timestamp ) ) {
|
214 |
-
return true;
|
215 |
-
}
|
216 |
-
|
217 |
-
if ( $this->request_handler_retries_count >= self::CLONE_RESOLUTION_MAX_RETRIES ) {
|
218 |
-
return false;
|
219 |
-
}
|
220 |
-
|
221 |
-
// Give the logic that handles clones enough time to finish (it is given 3 minutes for now).
|
222 |
-
return ( time() > ( $this->request_handler_timestamp + self::CLONE_RESOLUTION_MAX_EXECUTION_TIME ) );
|
223 |
-
}
|
224 |
-
|
225 |
-
/**
|
226 |
-
* Executes the clones handler logic if it should be executed, i.e., based on the return value of the should_handle_clones() method.
|
227 |
-
*
|
228 |
-
* @author Leo Fajardo (@leorw)
|
229 |
-
* @since 2.5.0
|
230 |
-
*/
|
231 |
-
function maybe_run_clone_resolution() {
|
232 |
-
if ( ! $this->should_handle_clones() ) {
|
233 |
-
return;
|
234 |
-
}
|
235 |
-
|
236 |
-
$this->request_handler_retries_count = isset( $this->request_handler_retries_count ) ?
|
237 |
-
( $this->request_handler_retries_count + 1 ) :
|
238 |
-
1;
|
239 |
-
|
240 |
-
$this->request_handler_timestamp = time();
|
241 |
-
|
242 |
-
$handler_id = ( rand() . microtime() );
|
243 |
-
$this->request_handler_id = $handler_id;
|
244 |
-
|
245 |
-
// Add cookies to trigger request with the same user access permissions.
|
246 |
-
$cookies = array();
|
247 |
-
foreach ( $_COOKIE as $name => $value ) {
|
248 |
-
$cookies[] = new WP_Http_Cookie( array(
|
249 |
-
'name' => $name,
|
250 |
-
'value' => $value,
|
251 |
-
) );
|
252 |
-
}
|
253 |
-
|
254 |
-
wp_remote_post(
|
255 |
-
admin_url( 'admin-post.php' ),
|
256 |
-
array(
|
257 |
-
'method' => 'POST',
|
258 |
-
'body' => array(
|
259 |
-
'action' => 'fs_clone_resolution',
|
260 |
-
'handler_id' => $handler_id,
|
261 |
-
),
|
262 |
-
'timeout' => 0.01,
|
263 |
-
'blocking' => false,
|
264 |
-
'sslverify' => false,
|
265 |
-
'cookies' => $cookies,
|
266 |
-
)
|
267 |
-
);
|
268 |
-
}
|
269 |
-
|
270 |
-
/**
|
271 |
-
* Executes the clones handler logic.
|
272 |
-
*
|
273 |
-
* @author Leo Fajardo (@leorw)
|
274 |
-
* @since 2.5.0
|
275 |
-
*/
|
276 |
-
function _handle_clone_resolution() {
|
277 |
-
$handler_id = fs_request_get( 'handler_id' );
|
278 |
-
|
279 |
-
if ( empty( $handler_id ) ) {
|
280 |
-
return;
|
281 |
-
}
|
282 |
-
|
283 |
-
if (
|
284 |
-
! isset( $this->request_handler_id ) ||
|
285 |
-
$this->request_handler_id !== $handler_id
|
286 |
-
) {
|
287 |
-
return;
|
288 |
-
}
|
289 |
-
|
290 |
-
if ( ! $this->try_automatic_resolution() ) {
|
291 |
-
$this->store_clone_identification_timestamp();
|
292 |
-
$this->clear_temporary_duplicate_notice_shown_timestamp();
|
293 |
-
}
|
294 |
-
}
|
295 |
-
|
296 |
-
#--------------------------------------------------------------------------------
|
297 |
-
#region Automatic Clone Resolution
|
298 |
-
#--------------------------------------------------------------------------------
|
299 |
-
|
300 |
-
/**
|
301 |
-
* @var array All installs cache.
|
302 |
-
*/
|
303 |
-
private $all_installs;
|
304 |
-
|
305 |
-
/**
|
306 |
-
* Checks if a given instance's install is a clone of another subsite in the network.
|
307 |
-
*
|
308 |
-
* @author Vova Feldman (@svovaf)
|
309 |
-
*
|
310 |
-
* @return FS_Site
|
311 |
-
*/
|
312 |
-
private function find_network_subsite_clone_install( Freemius $instance ) {
|
313 |
-
if ( ! is_multisite() ) {
|
314 |
-
// Not a multi-site network.
|
315 |
-
return null;
|
316 |
-
}
|
317 |
-
|
318 |
-
if ( ! isset( $this->all_installs ) ) {
|
319 |
-
$this->all_installs = Freemius::get_all_modules_sites();
|
320 |
-
}
|
321 |
-
|
322 |
-
// Check if there's another blog that has the same site.
|
323 |
-
$module_type = $instance->get_module_type();
|
324 |
-
$sites_by_module_type = ! empty( $this->all_installs[ $module_type ] ) ?
|
325 |
-
$this->all_installs[ $module_type ] :
|
326 |
-
array();
|
327 |
-
|
328 |
-
$slug = $instance->get_slug();
|
329 |
-
$sites_by_slug = ! empty( $sites_by_module_type[ $slug ] ) ?
|
330 |
-
$sites_by_module_type[ $slug ] :
|
331 |
-
array();
|
332 |
-
|
333 |
-
$current_blog_id = get_current_blog_id();
|
334 |
-
|
335 |
-
$current_install = $instance->get_site();
|
336 |
-
|
337 |
-
foreach ( $sites_by_slug as $site ) {
|
338 |
-
if (
|
339 |
-
$current_install->id == $site->id &&
|
340 |
-
$current_blog_id != $site->blog_id
|
341 |
-
) {
|
342 |
-
// Clone is identical to an install on another subsite in the network.
|
343 |
-
return $site;
|
344 |
-
}
|
345 |
-
}
|
346 |
-
|
347 |
-
return null;
|
348 |
-
}
|
349 |
-
|
350 |
-
/**
|
351 |
-
* Tries to find a different install of the context product that is associated with the current URL and loads it.
|
352 |
-
*
|
353 |
-
* @author Leo Fajardo (@leorw)
|
354 |
-
* @since 2.5.0
|
355 |
-
*
|
356 |
-
* @param Freemius $instance
|
357 |
-
* @param string $url
|
358 |
-
*
|
359 |
-
* @return object
|
360 |
-
*/
|
361 |
-
private function find_other_install_by_url( Freemius $instance, $url ) {
|
362 |
-
$result = $instance->get_api_user_scope()->get( "/plugins/{$instance->get_id()}/installs.json?search=" . urlencode( $url ) . "&all=true", true );
|
363 |
-
|
364 |
-
$current_install = $instance->get_site();
|
365 |
-
|
366 |
-
if ( $instance->is_api_result_object( $result, 'installs' ) ) {
|
367 |
-
foreach ( $result->installs as $install ) {
|
368 |
-
if ( $install->id == $current_install->id ) {
|
369 |
-
continue;
|
370 |
-
}
|
371 |
-
|
372 |
-
if (
|
373 |
-
$instance->is_only_premium() &&
|
374 |
-
! FS_Plugin_License::is_valid_id( $install->license_id )
|
375 |
-
) {
|
376 |
-
continue;
|
377 |
-
}
|
378 |
-
|
379 |
-
// When searching for installs by a URL, the API will first strip any paths and search for any matching installs by the subdomain. Therefore, we need to test if there's a match between the current URL and the install's URL before continuing.
|
380 |
-
if ( $url !== fs_strip_url_protocol( untrailingslashit( $install->url ) ) ) {
|
381 |
-
continue;
|
382 |
-
}
|
383 |
-
|
384 |
-
// Found a different install that is associated with the current URL, load it and replace the current install with it if no updated install is found.
|
385 |
-
return $install;
|
386 |
-
}
|
387 |
-
}
|
388 |
-
|
389 |
-
return null;
|
390 |
-
}
|
391 |
-
|
392 |
-
/**
|
393 |
-
* Delete the current install associated with a given instance and opt-in/activate-license to create a fresh install.
|
394 |
-
*
|
395 |
-
* @author Vova Feldman (@svovaf)
|
396 |
-
* @since 2.5.0
|
397 |
-
*
|
398 |
-
* @param Freemius $instance
|
399 |
-
* @param string|false $license_key
|
400 |
-
*
|
401 |
-
* @return bool TRUE if successfully connected. FALSE if failed and had to restore install from backup.
|
402 |
-
*/
|
403 |
-
private function delete_install_and_connect( Freemius $instance, $license_key = false ) {
|
404 |
-
$user = Freemius::_get_user_by_id( $instance->get_site()->user_id );
|
405 |
-
|
406 |
-
$instance->delete_current_install( true );
|
407 |
-
|
408 |
-
if ( ! is_object( $user ) ) {
|
409 |
-
// Get logged-in WordPress user.
|
410 |
-
$current_user = Freemius::_get_current_wp_user();
|
411 |
-
|
412 |
-
// Find the relevant FS user by email address.
|
413 |
-
$user = Freemius::_get_user_by_email( $current_user->user_email );
|
414 |
-
}
|
415 |
-
|
416 |
-
if ( is_object( $user ) ) {
|
417 |
-
// When a clone is found, we prefer to use the same user of the original install for the opt-in.
|
418 |
-
$instance->install_with_user( $user, $license_key, false, false );
|
419 |
-
} else {
|
420 |
-
// If no user is found, activate with the license.
|
421 |
-
$instance->opt_in(
|
422 |
-
false,
|
423 |
-
false,
|
424 |
-
false,
|
425 |
-
$license_key
|
426 |
-
);
|
427 |
-
}
|
428 |
-
|
429 |
-
if ( is_object( $instance->get_site() ) ) {
|
430 |
-
// Install successfully created.
|
431 |
-
return true;
|
432 |
-
}
|
433 |
-
|
434 |
-
// Restore from backup.
|
435 |
-
$instance->restore_backup_site();
|
436 |
-
|
437 |
-
return false;
|
438 |
-
}
|
439 |
-
|
440 |
-
/**
|
441 |
-
* Try to resolve the clone situation automatically.
|
442 |
-
*
|
443 |
-
* @param Freemius $instance
|
444 |
-
* @param string $current_url
|
445 |
-
* @param bool $is_localhost
|
446 |
-
* @param bool|null $is_clone_of_network_subsite
|
447 |
-
*
|
448 |
-
* @return bool If managed to automatically resolve the clone.
|
449 |
-
*/
|
450 |
-
private function try_resolve_clone_automatically( Freemius $instance, $current_url, $is_localhost, $is_clone_of_network_subsite = null ) {
|
451 |
-
// Try to find a different install of the context product that is associated with the current URL.
|
452 |
-
$associated_install = $this->find_other_install_by_url( $instance, $current_url );
|
453 |
-
|
454 |
-
if ( is_object( $associated_install ) ) {
|
455 |
-
// Replace the current install with a different install that is associated with the current URL.
|
456 |
-
$instance->store_site( new FS_Site( clone $associated_install ) );
|
457 |
-
$instance->sync_install( array( 'is_new_site' => true ), true );
|
458 |
-
|
459 |
-
return true;
|
460 |
-
}
|
461 |
-
|
462 |
-
if ( ! $instance->is_premium() ) {
|
463 |
-
// For free products, opt-in with the context user to create new install.
|
464 |
-
return $this->delete_install_and_connect( $instance );
|
465 |
-
}
|
466 |
-
|
467 |
-
$license = $instance->_get_license();
|
468 |
-
$can_activate_license = ( is_object( $license ) && ! $license->is_utilized( $is_localhost ) );
|
469 |
-
|
470 |
-
if ( ! $can_activate_license ) {
|
471 |
-
// License can't be activated, therefore, can't be automatically resolved.
|
472 |
-
return false;
|
473 |
-
}
|
474 |
-
|
475 |
-
$is_clone_of_network_subsite = ( ! is_null( $is_clone_of_network_subsite ) ) ?
|
476 |
-
$is_clone_of_network_subsite :
|
477 |
-
is_object( $this->find_network_subsite_clone_install( $instance ) );
|
478 |
-
|
479 |
-
if (
|
480 |
-
$is_clone_of_network_subsite ||
|
481 |
-
WP_FS__IS_LOCALHOST_FOR_SERVER ||
|
482 |
-
$is_localhost
|
483 |
-
) {
|
484 |
-
// If the site is a clone of another subsite in the network, or a localhost one, try to auto activate the license.
|
485 |
-
return $this->delete_install_and_connect( $instance, $license->secret_key );
|
486 |
-
}
|
487 |
-
|
488 |
-
return false;
|
489 |
-
}
|
490 |
-
|
491 |
-
/**
|
492 |
-
* Tries to recover the install of a newly created subsite or resolve it if it's a clone.
|
493 |
-
*
|
494 |
-
* @author Leo Fajardo (@leorw)
|
495 |
-
* @since 2.5.0
|
496 |
-
*
|
497 |
-
* @param Freemius $instance
|
498 |
-
*/
|
499 |
-
function maybe_resolve_new_subsite_install_automatically( Freemius $instance ) {
|
500 |
-
if ( ! $instance->is_user_in_admin() ) {
|
501 |
-
// Try to recover an install or resolve a clone only when there's a user in admin to prevent doing it prematurely (e.g., the install can get replaced with clone data again).
|
502 |
-
return;
|
503 |
-
}
|
504 |
-
|
505 |
-
if ( ! is_multisite() ) {
|
506 |
-
return;
|
507 |
-
}
|
508 |
-
|
509 |
-
$new_blog_install_map = $this->new_blog_install_map;
|
510 |
-
|
511 |
-
if ( empty( $new_blog_install_map ) || ! is_array( $new_blog_install_map ) ) {
|
512 |
-
return;
|
513 |
-
}
|
514 |
-
|
515 |
-
$is_network_admin = fs_is_network_admin();
|
516 |
-
|
517 |
-
if ( ! $is_network_admin ) {
|
518 |
-
// If not in network admin, handle the current site.
|
519 |
-
$blog_id = get_current_blog_id();
|
520 |
-
} else {
|
521 |
-
// If in network admin, handle only the first site.
|
522 |
-
$blog_ids = array_keys( $new_blog_install_map );
|
523 |
-
$blog_id = $blog_ids[0];
|
524 |
-
}
|
525 |
-
|
526 |
-
if ( ! isset( $new_blog_install_map[ $blog_id ] ) ) {
|
527 |
-
// There's no site to handle.
|
528 |
-
return;
|
529 |
-
}
|
530 |
-
|
531 |
-
$expected_install_id = $new_blog_install_map[ $blog_id ]['install_id'];
|
532 |
-
|
533 |
-
$current_install = $instance->get_install_by_blog_id( $blog_id );
|
534 |
-
$current_install_id = is_object( $current_install ) ?
|
535 |
-
$current_install->id :
|
536 |
-
null;
|
537 |
-
|
538 |
-
if ( $expected_install_id == $current_install_id ) {
|
539 |
-
// Remove the current site's information from the map to prevent handling it again.
|
540 |
-
$this->remove_new_blog_install_info_from_storage( $blog_id );
|
541 |
-
|
542 |
-
return;
|
543 |
-
}
|
544 |
-
|
545 |
-
$instance->switch_to_blog( $blog_id );
|
546 |
-
|
547 |
-
$current_url = fs_strip_url_protocol( untrailingslashit( get_site_url() ) );
|
548 |
-
$current_install_url = is_object( $current_install ) ?
|
549 |
-
fs_strip_url_protocol( untrailingslashit( $current_install->url ) ) :
|
550 |
-
null;
|
551 |
-
|
552 |
-
// This can be `false` even if the install is a clone as the URL can be updated as part of the cloning process.
|
553 |
-
$is_clone = ( ! is_null( $current_install_url ) && $current_url !== $current_install_url );
|
554 |
-
|
555 |
-
if ( ! FS_Site::is_valid_id( $expected_install_id ) ) {
|
556 |
-
$expected_install = null;
|
557 |
-
} else {
|
558 |
-
$expected_install = $instance->fetch_install_by_id( $expected_install_id );
|
559 |
-
}
|
560 |
-
|
561 |
-
if ( FS_Api::is_api_result_entity( $expected_install ) ) {
|
562 |
-
// Replace the current install with the expected install.
|
563 |
-
$instance->store_site( new FS_Site( clone $expected_install ) );
|
564 |
-
$instance->sync_install( array( 'is_new_site' => true ), true );
|
565 |
-
} else {
|
566 |
-
$network_subsite_clone_install = null;
|
567 |
-
|
568 |
-
if ( ! $is_clone ) {
|
569 |
-
// It is possible that `$is_clone` is `false` but the install is actually a clone as the following call checks the install ID and not the URL.
|
570 |
-
$network_subsite_clone_install = $this->find_network_subsite_clone_install( $instance );
|
571 |
-
}
|
572 |
-
|
573 |
-
if ( $is_clone || is_object( $network_subsite_clone_install ) ) {
|
574 |
-
// If there's no expected install (or it couldn't be fetched) and the current install is a clone, try to resolve the clone automatically.
|
575 |
-
$is_localhost = FS_Site::is_localhost_by_address( $current_url );
|
576 |
-
|
577 |
-
$resolved = $this->try_resolve_clone_automatically( $instance, $current_url, $is_localhost, is_object( $network_subsite_clone_install ) );
|
578 |
-
|
579 |
-
if ( ! $resolved && is_object( $network_subsite_clone_install ) ) {
|
580 |
-
if ( empty( $this->get_clone_identification_timestamp() ) ) {
|
581 |
-
$this->store_clone_identification_timestamp();
|
582 |
-
}
|
583 |
-
|
584 |
-
// Since the clone couldn't be identified based on the URL, replace the stored install with the cloned install so that the manual clone resolution notice will appear.
|
585 |
-
$instance->store_site( clone $network_subsite_clone_install );
|
586 |
-
}
|
587 |
-
}
|
588 |
-
}
|
589 |
-
|
590 |
-
$instance->restore_current_blog();
|
591 |
-
|
592 |
-
// Remove the current site's information from the map to prevent handling it again.
|
593 |
-
$this->remove_new_blog_install_info_from_storage( $blog_id );
|
594 |
-
}
|
595 |
-
|
596 |
-
/**
|
597 |
-
* If a new install was created after creating a new subsite, its ID is stored in the blog-install map so that it can be recovered in case it's replaced with a clone install (e.g., when the newly created subsite is a clone).
|
598 |
-
*
|
599 |
-
* @author Leo Fajardo (@leorw)
|
600 |
-
* @since 2.5.0
|
601 |
-
*
|
602 |
-
* @param int $blog_id
|
603 |
-
* @param FS_Site $site
|
604 |
-
*/
|
605 |
-
function store_new_blog_install_info( $blog_id, $site = null ) {
|
606 |
-
$new_blog_install_map = $this->new_blog_install_map;
|
607 |
-
|
608 |
-
if (
|
609 |
-
empty( $new_blog_install_map ) ||
|
610 |
-
! is_array( $new_blog_install_map )
|
611 |
-
) {
|
612 |
-
$new_blog_install_map = array();
|
613 |
-
}
|
614 |
-
|
615 |
-
$install_id = null;
|
616 |
-
|
617 |
-
if ( is_object( $site ) ) {
|
618 |
-
$install_id = $site->id;
|
619 |
-
}
|
620 |
-
|
621 |
-
$new_blog_install_map[ $blog_id ] = array( 'install_id' => $install_id );
|
622 |
-
|
623 |
-
$this->new_blog_install_map = $new_blog_install_map;
|
624 |
-
}
|
625 |
-
|
626 |
-
/**
|
627 |
-
* @author Leo Fajardo (@leorw)
|
628 |
-
* @since 2.5.0
|
629 |
-
*
|
630 |
-
* @param int $blog_id
|
631 |
-
*/
|
632 |
-
private function remove_new_blog_install_info_from_storage( $blog_id ) {
|
633 |
-
$new_blog_install_map = $this->new_blog_install_map;
|
634 |
-
|
635 |
-
unset( $new_blog_install_map[ $blog_id ] );
|
636 |
-
$this->new_blog_install_map = $new_blog_install_map;
|
637 |
-
}
|
638 |
-
|
639 |
-
/**
|
640 |
-
* Tries to resolve all clones automatically.
|
641 |
-
*
|
642 |
-
* @author Leo Fajardo (@leorw)
|
643 |
-
* @since 2.5.0
|
644 |
-
*
|
645 |
-
* @return bool If managed to automatically resolve all clones.
|
646 |
-
*/
|
647 |
-
private function try_automatic_resolution() {
|
648 |
-
$this->_logger->entrance();
|
649 |
-
|
650 |
-
$current_url = fs_strip_url_protocol( untrailingslashit( get_site_url() ) );
|
651 |
-
$is_localhost = FS_Site::is_localhost_by_address( $current_url );
|
652 |
-
|
653 |
-
$require_manual_resolution = false;
|
654 |
-
|
655 |
-
$instances = Freemius::_get_all_instances();
|
656 |
-
|
657 |
-
foreach ( $instances as $instance ) {
|
658 |
-
if ( ! $instance->is_registered() ) {
|
659 |
-
continue;
|
660 |
-
}
|
661 |
-
|
662 |
-
if ( ! $instance->is_clone() ) {
|
663 |
-
continue;
|
664 |
-
}
|
665 |
-
|
666 |
-
if ( ! $this->try_resolve_clone_automatically( $instance, $current_url, $is_localhost ) ) {
|
667 |
-
$require_manual_resolution = true;
|
668 |
-
}
|
669 |
-
}
|
670 |
-
|
671 |
-
return ( ! $require_manual_resolution );
|
672 |
-
}
|
673 |
-
|
674 |
-
#endregion
|
675 |
-
|
676 |
-
#--------------------------------------------------------------------------------
|
677 |
-
#region Manual Clone Resolution
|
678 |
-
#--------------------------------------------------------------------------------
|
679 |
-
|
680 |
-
/**
|
681 |
-
* @author Leo Fajardo (@leorw)
|
682 |
-
* @since 2.5.0
|
683 |
-
*/
|
684 |
-
function _add_clone_resolution_javascript() {
|
685 |
-
$vars = array( 'ajax_action' => Freemius::get_ajax_action_static( 'handle_clone_resolution' ) );
|
686 |
-
|
687 |
-
fs_require_once_template( 'clone-resolution-js.php', $vars );
|
688 |
-
}
|
689 |
-
|
690 |
-
/**
|
691 |
-
* @author Leo Fajardo (@leorw)
|
692 |
-
* @since 2.5.0
|
693 |
-
*/
|
694 |
-
function _clone_resolution_action_ajax_handler() {
|
695 |
-
$this->_logger->entrance();
|
696 |
-
|
697 |
-
check_ajax_referer( Freemius::get_ajax_action_static( 'handle_clone_resolution' ), 'security' );
|
698 |
-
|
699 |
-
$clone_action = fs_request_get( 'clone_action' );
|
700 |
-
|
701 |
-
if ( empty( $clone_action ) ) {
|
702 |
-
Freemius::shoot_ajax_failure( array(
|
703 |
-
'message' => fs_text_inline( 'Invalid clone resolution action.', 'invalid-clone-resolution-action-error' ),
|
704 |
-
'redirect_url' => '',
|
705 |
-
) );
|
706 |
-
}
|
707 |
-
|
708 |
-
$result = array();
|
709 |
-
|
710 |
-
if ( self::OPTION_TEMPORARY_DUPLICATE === $clone_action ) {
|
711 |
-
$this->store_temporary_duplicate_timestamp();
|
712 |
-
} else {
|
713 |
-
$result = $this->resolve_cloned_sites( $clone_action );
|
714 |
-
}
|
715 |
-
|
716 |
-
if ( 'temporary_duplicate_license_activation' !== $clone_action ) {
|
717 |
-
$this->remove_clone_resolution_options_notice();
|
718 |
-
} else {
|
719 |
-
$this->remove_temporary_duplicate_notice();
|
720 |
-
}
|
721 |
-
|
722 |
-
Freemius::shoot_ajax_success( $result );
|
723 |
-
}
|
724 |
-
|
725 |
-
/**
|
726 |
-
* @author Leo Fajardo (@leorw)
|
727 |
-
* @since 2.5.0
|
728 |
-
*
|
729 |
-
* @param string $clone_action
|
730 |
-
*/
|
731 |
-
private function resolve_cloned_sites( $clone_action ) {
|
732 |
-
$this->_logger->entrance();
|
733 |
-
|
734 |
-
$instances_with_clone_count = 0;
|
735 |
-
$instance_with_error = null;
|
736 |
-
$has_error = false;
|
737 |
-
|
738 |
-
$instances = Freemius::_get_all_instances();
|
739 |
-
|
740 |
-
foreach ( $instances as $instance ) {
|
741 |
-
if ( ! $instance->is_registered() ) {
|
742 |
-
continue;
|
743 |
-
}
|
744 |
-
|
745 |
-
if ( ! $instance->is_clone() ) {
|
746 |
-
continue;
|
747 |
-
}
|
748 |
-
|
749 |
-
$instances_with_clone_count ++;
|
750 |
-
|
751 |
-
if ( FS_Clone_Manager::OPTION_NEW_HOME === $clone_action ) {
|
752 |
-
$instance->sync_install( array( 'is_new_site' => true ), true );
|
753 |
-
} else {
|
754 |
-
$instance->_handle_long_term_duplicate();
|
755 |
-
|
756 |
-
if ( ! is_object( $instance->get_site() ) ) {
|
757 |
-
$has_error = true;
|
758 |
-
|
759 |
-
if ( ! is_object( $instance_with_error ) ) {
|
760 |
-
$instance_with_error = $instance;
|
761 |
-
}
|
762 |
-
}
|
763 |
-
}
|
764 |
-
}
|
765 |
-
|
766 |
-
$redirect_url = '';
|
767 |
-
|
768 |
-
if (
|
769 |
-
1 === $instances_with_clone_count &&
|
770 |
-
$has_error
|
771 |
-
) {
|
772 |
-
$redirect_url = $instance_with_error->get_activation_url();
|
773 |
-
}
|
774 |
-
|
775 |
-
return ( array( 'redirect_url' => $redirect_url ) );
|
776 |
-
}
|
777 |
-
|
778 |
-
/**
|
779 |
-
* @author Leo Fajardo (@leorw)
|
780 |
-
* @since 2.5.0
|
781 |
-
*/
|
782 |
-
private function hide_clone_admin_notices() {
|
783 |
-
$this->remove_clone_resolution_options_notice( false );
|
784 |
-
$this->remove_temporary_duplicate_notice( false );
|
785 |
-
}
|
786 |
-
|
787 |
-
/**
|
788 |
-
* @author Leo Fajardo (@leorw)
|
789 |
-
* @since 2.5.0
|
790 |
-
*/
|
791 |
-
private function maybe_show_clone_admin_notice() {
|
792 |
-
$this->_logger->entrance();
|
793 |
-
|
794 |
-
if ( fs_is_network_admin() ) {
|
795 |
-
$existing_notice_ids = $this->maybe_remove_notices();
|
796 |
-
|
797 |
-
if ( ! empty( $existing_notice_ids ) ) {
|
798 |
-
fs_enqueue_local_style( 'fs_clone_resolution_notice', '/admin/clone-resolution.css' );
|
799 |
-
}
|
800 |
-
|
801 |
-
return;
|
802 |
-
}
|
803 |
-
|
804 |
-
$first_instance_with_clone = null;
|
805 |
-
|
806 |
-
$site_urls = array();
|
807 |
-
$sites_with_license_urls = array();
|
808 |
-
$sites_with_premium_version_count = 0;
|
809 |
-
$product_ids = array();
|
810 |
-
$product_titles = array();
|
811 |
-
|
812 |
-
$instances = Freemius::_get_all_instances();
|
813 |
-
|
814 |
-
foreach ( $instances as $instance ) {
|
815 |
-
if ( ! $instance->is_registered() ) {
|
816 |
-
continue;
|
817 |
-
}
|
818 |
-
|
819 |
-
if ( ! $instance->is_clone() ) {
|
820 |
-
continue;
|
821 |
-
}
|
822 |
-
|
823 |
-
$install = $instance->get_site();
|
824 |
-
|
825 |
-
$site_urls[] = $install->url;
|
826 |
-
$product_ids[] = $instance->get_id();
|
827 |
-
$product_titles[] = $instance->get_plugin_title();
|
828 |
-
|
829 |
-
if ( is_null( $first_instance_with_clone ) ) {
|
830 |
-
$first_instance_with_clone = $instance;
|
831 |
-
}
|
832 |
-
|
833 |
-
if ( is_object( $instance->_get_license() ) ) {
|
834 |
-
$sites_with_license_urls[] = $install->url;
|
835 |
-
}
|
836 |
-
|
837 |
-
if ( $instance->is_premium() ) {
|
838 |
-
$sites_with_premium_version_count ++;
|
839 |
-
}
|
840 |
-
}
|
841 |
-
|
842 |
-
if ( empty( $site_urls ) && empty( $sites_with_license_urls ) ) {
|
843 |
-
$this->hide_clone_admin_notices();
|
844 |
-
|
845 |
-
return;
|
846 |
-
}
|
847 |
-
|
848 |
-
$site_urls = array_unique( $site_urls );
|
849 |
-
$sites_with_license_urls = array_unique( $sites_with_license_urls );
|
850 |
-
|
851 |
-
$module_label = fs_text_inline( 'products', 'products' );
|
852 |
-
$admin_notice_module_title = null;
|
853 |
-
|
854 |
-
$has_temporary_duplicate_mode_expired = $this->has_temporary_duplicate_mode_expired();
|
855 |
-
|
856 |
-
if (
|
857 |
-
! $this->was_temporary_duplicate_mode_selected() ||
|
858 |
-
$has_temporary_duplicate_mode_expired
|
859 |
-
) {
|
860 |
-
if ( ! empty( $site_urls ) ) {
|
861 |
-
fs_enqueue_local_style( 'fs_clone_resolution_notice', '/admin/clone-resolution.css' );
|
862 |
-
|
863 |
-
$doc_url = 'https://freemius.com/help/documentation/wordpress-sdk/safe-mode-clone-resolution-duplicate-website/';
|
864 |
-
|
865 |
-
if ( 1 === count( $instances ) ) {
|
866 |
-
$doc_url = fs_apply_filter(
|
867 |
-
$first_instance_with_clone->get_unique_affix(),
|
868 |
-
'clone_resolution_documentation_url',
|
869 |
-
$doc_url
|
870 |
-
);
|
871 |
-
}
|
872 |
-
|
873 |
-
$this->add_manual_clone_resolution_admin_notice(
|
874 |
-
$product_ids,
|
875 |
-
$product_titles,
|
876 |
-
$site_urls,
|
877 |
-
get_site_url(),
|
878 |
-
( count( $site_urls ) === count( $sites_with_license_urls ) ),
|
879 |
-
( count( $site_urls ) === $sites_with_premium_version_count ),
|
880 |
-
$doc_url
|
881 |
-
);
|
882 |
-
}
|
883 |
-
|
884 |
-
return;
|
885 |
-
}
|
886 |
-
|
887 |
-
if ( empty( $sites_with_license_urls ) ) {
|
888 |
-
return;
|
889 |
-
}
|
890 |
-
|
891 |
-
if ( ! $this->is_temporary_duplicate_notice_shown() ) {
|
892 |
-
$last_time_temporary_duplicate_notice_shown = $this->last_time_temporary_duplicate_notice_was_shown();
|
893 |
-
$was_temporary_duplicate_notice_shown_before = is_numeric( $last_time_temporary_duplicate_notice_shown );
|
894 |
-
|
895 |
-
if ( $was_temporary_duplicate_notice_shown_before ) {
|
896 |
-
$temporary_duplicate_mode_expiration_timestamp = $this->get_temporary_duplicate_expiration_timestamp();
|
897 |
-
$current_time = time();
|
898 |
-
|
899 |
-
if (
|
900 |
-
$current_time > $temporary_duplicate_mode_expiration_timestamp ||
|
901 |
-
$current_time < ( $temporary_duplicate_mode_expiration_timestamp - ( 2 * WP_FS__TIME_24_HOURS_IN_SEC ) )
|
902 |
-
) {
|
903 |
-
// Do not show the notice if the temporary duplicate mode has already expired or it will expire more than 2 days from now.
|
904 |
-
return;
|
905 |
-
}
|
906 |
-
}
|
907 |
-
}
|
908 |
-
|
909 |
-
if ( 1 === count( $sites_with_license_urls ) ) {
|
910 |
-
$module_label = $first_instance_with_clone->get_module_label( true );
|
911 |
-
$admin_notice_module_title = $first_instance_with_clone->get_plugin_title();
|
912 |
-
}
|
913 |
-
|
914 |
-
fs_enqueue_local_style( 'fs_clone_resolution_notice', '/admin/clone-resolution.css' );
|
915 |
-
|
916 |
-
$this->add_temporary_duplicate_sticky_notice(
|
917 |
-
$product_ids,
|
918 |
-
$this->get_temporary_duplicate_admin_notice_string( $sites_with_license_urls, $product_titles, $module_label ),
|
919 |
-
$admin_notice_module_title
|
920 |
-
);
|
921 |
-
}
|
922 |
-
|
923 |
-
/**
|
924 |
-
* Removes the notices from the storage if the context product is either no longer active on the context subsite or it's active but there's no longer any clone. This prevents the notices from being shown on the network-level admin page when they are no longer relevant.
|
925 |
-
*
|
926 |
-
* @author Leo Fajardo (@leorw)
|
927 |
-
* @since 2.5.1
|
928 |
-
*
|
929 |
-
* @return string[]
|
930 |
-
*/
|
931 |
-
private function maybe_remove_notices() {
|
932 |
-
$notices = array(
|
933 |
-
'clone_resolution_options_notice' => $this->_notices->get_sticky( 'clone_resolution_options_notice', true ),
|
934 |
-
'temporary_duplicate_notice' => $this->_notices->get_sticky( 'temporary_duplicate_notice', true ),
|
935 |
-
);
|
936 |
-
|
937 |
-
$instances = Freemius::_get_all_instances();
|
938 |
-
|
939 |
-
foreach ( $notices as $id => $notice ) {
|
940 |
-
if ( ! is_array( $notice ) ) {
|
941 |
-
unset( $notices[ $id ] );
|
942 |
-
continue;
|
943 |
-
}
|
944 |
-
|
945 |
-
if ( empty( $notice['data'] ) || ! is_array( $notice['data'] ) ) {
|
946 |
-
continue;
|
947 |
-
}
|
948 |
-
|
949 |
-
if ( empty( $notice['data']['product_ids'] ) || empty( $notice['data']['blog_id'] ) ) {
|
950 |
-
continue;
|
951 |
-
}
|
952 |
-
|
953 |
-
$product_ids = $notice['data']['product_ids'];
|
954 |
-
$blog_id = $notice['data']['blog_id'];
|
955 |
-
$has_clone = false;
|
956 |
-
|
957 |
-
if ( ! is_null( get_site( $blog_id ) ) ) {
|
958 |
-
foreach ( $product_ids as $product_id ) {
|
959 |
-
if ( ! isset( $instances[ 'm_' . $product_id ] ) ) {
|
960 |
-
continue;
|
961 |
-
}
|
962 |
-
|
963 |
-
$instance = $instances[ 'm_' . $product_id ];
|
964 |
-
|
965 |
-
$plugin_basename = $instance->get_plugin_basename();
|
966 |
-
|
967 |
-
$is_plugin_active = is_plugin_active_for_network( $plugin_basename );
|
968 |
-
|
969 |
-
if ( ! $is_plugin_active ) {
|
970 |
-
switch_to_blog( $blog_id );
|
971 |
-
|
972 |
-
$is_plugin_active = is_plugin_active( $plugin_basename );
|
973 |
-
|
974 |
-
restore_current_blog();
|
975 |
-
}
|
976 |
-
|
977 |
-
if ( ! $is_plugin_active ) {
|
978 |
-
continue;
|
979 |
-
}
|
980 |
-
|
981 |
-
$install = $instance->get_install_by_blog_id( $blog_id );
|
982 |
-
|
983 |
-
if ( ! is_object( $install ) ) {
|
984 |
-
continue;
|
985 |
-
}
|
986 |
-
|
987 |
-
$subsite_url = trailingslashit( get_site_url( $blog_id ) );
|
988 |
-
$install_url = trailingslashit( $install->url );
|
989 |
-
|
990 |
-
$has_clone = ( fs_strip_url_protocol( $install_url ) !== fs_strip_url_protocol( $subsite_url ) );
|
991 |
-
}
|
992 |
-
}
|
993 |
-
|
994 |
-
if ( ! $has_clone ) {
|
995 |
-
$this->_notices->remove_sticky( $id, true, false );
|
996 |
-
unset( $notices[ $id ] );
|
997 |
-
}
|
998 |
-
}
|
999 |
-
|
1000 |
-
return array_keys( $notices );
|
1001 |
-
}
|
1002 |
-
|
1003 |
-
/**
|
1004 |
-
* Adds a notice that provides the logged-in WordPress user with manual clone resolution options.
|
1005 |
-
*
|
1006 |
-
* @param number[] $product_ids
|
1007 |
-
* @param string[] $site_urls
|
1008 |
-
* @param string $current_url
|
1009 |
-
* @param bool $has_license
|
1010 |
-
* @param bool $is_premium
|
1011 |
-
* @param string $doc_url
|
1012 |
-
*/
|
1013 |
-
private function add_manual_clone_resolution_admin_notice(
|
1014 |
-
$product_ids,
|
1015 |
-
$product_titles,
|
1016 |
-
$site_urls,
|
1017 |
-
$current_url,
|
1018 |
-
$has_license,
|
1019 |
-
$is_premium,
|
1020 |
-
$doc_url
|
1021 |
-
) {
|
1022 |
-
$this->_logger->entrance();
|
1023 |
-
|
1024 |
-
$total_sites = count( $site_urls );
|
1025 |
-
$sites_list = '';
|
1026 |
-
|
1027 |
-
$total_products = count( $product_titles );
|
1028 |
-
$products_list = '';
|
1029 |
-
|
1030 |
-
if ( 1 === $total_products ) {
|
1031 |
-
$notice_header = sprintf(
|
1032 |
-
'<div class="fs-notice-header"><p>%s</p></div>',
|
1033 |
-
fs_esc_html_inline( '%1$s has been placed into safe mode because we noticed that %2$s is an exact copy of %3$s.', 'single-cloned-site-safe-mode-message' )
|
1034 |
-
);
|
1035 |
-
} else {
|
1036 |
-
$notice_header = sprintf(
|
1037 |
-
'<div class="fs-notice-header"><p>%s</p></div>',
|
1038 |
-
( 1 === $total_sites ) ?
|
1039 |
-
fs_esc_html_inline( 'The products below have been placed into safe mode because we noticed that %2$s is an exact copy of %3$s:%1$s', 'multiple-products-cloned-site-safe-mode-message' ) :
|
1040 |
-
fs_esc_html_inline( 'The products below have been placed into safe mode because we noticed that %2$s is an exact copy of these sites:%3$s%1$s', 'multiple-products-multiple-cloned-sites-safe-mode-message' )
|
1041 |
-
);
|
1042 |
-
|
1043 |
-
foreach ( $product_titles as $product_title ) {
|
1044 |
-
$products_list .= sprintf( '<li>%s</li>', $product_title );
|
1045 |
-
}
|
1046 |
-
|
1047 |
-
$products_list = '<ol>' . $products_list . '</ol>';
|
1048 |
-
|
1049 |
-
foreach ( $site_urls as $site_url ) {
|
1050 |
-
$sites_list .= sprintf(
|
1051 |
-
'<li><a href="%s" target="_blank">%s</a></li>',
|
1052 |
-
$site_url,
|
1053 |
-
fs_strip_url_protocol( $site_url )
|
1054 |
-
);
|
1055 |
-
}
|
1056 |
-
|
1057 |
-
$sites_list = '<ol>' . $sites_list . '</ol>';
|
1058 |
-
}
|
1059 |
-
|
1060 |
-
$remote_site_link = '<b>' . (1 === $total_sites ?
|
1061 |
-
sprintf(
|
1062 |
-
'<a href="%s" target="_blank">%s</a>',
|
1063 |
-
$site_urls[0],
|
1064 |
-
fs_strip_url_protocol( $site_urls[0] )
|
1065 |
-
) :
|
1066 |
-
fs_text_inline( 'the above-mentioned sites', 'above-mentioned-sites' )) . '</b>';
|
1067 |
-
|
1068 |
-
$current_site_link = sprintf(
|
1069 |
-
'<b><a href="%s" target="_blank">%s</a></b>',
|
1070 |
-
$current_url,
|
1071 |
-
fs_strip_url_protocol( $current_url )
|
1072 |
-
);
|
1073 |
-
|
1074 |
-
$button_template = '<button class="button" data-clone-action="%s">%s</button>';
|
1075 |
-
$option_template = '<div class="fs-clone-resolution-option"><strong>%s</strong><p>%s</p><div>%s</div></div>';
|
1076 |
-
|
1077 |
-
$duplicate_option = sprintf(
|
1078 |
-
$option_template,
|
1079 |
-
fs_esc_html_inline( 'Is %2$s a duplicate of %4$s?', 'duplicate-site-confirmation-message' ),
|
1080 |
-
fs_esc_html_inline( 'Yes, %2$s is a duplicate of %4$s for the purpose of testing, staging, or development.', 'duplicate-site-message' ),
|
1081 |
-
($this->has_temporary_duplicate_mode_expired() ?
|
1082 |
-
sprintf(
|
1083 |
-
$button_template,
|
1084 |
-
'long_term_duplicate',
|
1085 |
-
fs_text_inline( 'Long-Term Duplicate', 'long-term-duplicate' )
|
1086 |
-
) :
|
1087 |
-
sprintf(
|
1088 |
-
$button_template,
|
1089 |
-
'temporary_duplicate',
|
1090 |
-
fs_text_inline( 'Duplicate Website', 'duplicate-site' )
|
1091 |
-
))
|
1092 |
-
);
|
1093 |
-
|
1094 |
-
$migration_option = sprintf(
|
1095 |
-
$option_template,
|
1096 |
-
fs_esc_html_inline( 'Is %2$s the new home of %4$s?', 'migrate-site-confirmation-message' ),
|
1097 |
-
sprintf(
|
1098 |
-
fs_esc_html_inline( 'Yes, %%2$s is replacing %%4$s. I would like to migrate my %s from %%4$s to %%2$s.', 'migrate-site-message' ),
|
1099 |
-
( $has_license ? fs_text_inline( 'license', 'license' ) : fs_text_inline( 'data', 'data' ) )
|
1100 |
-
),
|
1101 |
-
sprintf(
|
1102 |
-
$button_template,
|
1103 |
-
'new_home',
|
1104 |
-
$has_license ?
|
1105 |
-
fs_text_inline( 'Migrate License', 'migrate-product-license' ) :
|
1106 |
-
fs_text_inline( 'Migrate', 'migrate-product-data' )
|
1107 |
-
)
|
1108 |
-
);
|
1109 |
-
|
1110 |
-
$new_website = sprintf(
|
1111 |
-
$option_template,
|
1112 |
-
fs_esc_html_inline( 'Is %2$s a new website?', 'new-site-confirmation-message' ),
|
1113 |
-
fs_esc_html_inline( 'Yes, %2$s is a new and different website that is separate from %4$s.', 'new-site-message' ) .
|
1114 |
-
($is_premium ?
|
1115 |
-
' ' . fs_text_inline( 'It requires license activation.', 'new-site-requires-license-activation-message' ) :
|
1116 |
-
''
|
1117 |
-
),
|
1118 |
-
sprintf(
|
1119 |
-
$button_template,
|
1120 |
-
'new_website',
|
1121 |
-
( ! $is_premium || ! $has_license ) ?
|
1122 |
-
fs_text_inline( 'New Website', 'new-website' ) :
|
1123 |
-
fs_text_inline( 'Activate License', 'activate-license' )
|
1124 |
-
)
|
1125 |
-
);
|
1126 |
-
|
1127 |
-
/**
|
1128 |
-
* %1$s - single product's title or product titles list.
|
1129 |
-
* %2$s - site's URL.
|
1130 |
-
* %3$s - single install's URL or install URLs list.
|
1131 |
-
* %4$s - Clone site's link or "the above-mentioned sites" if there are multiple clone sites.
|
1132 |
-
*/
|
1133 |
-
$message = sprintf(
|
1134 |
-
$notice_header .
|
1135 |
-
'<div class="fs-clone-resolution-options-container" data-ajax-url="' . esc_attr( admin_url( 'admin-ajax.php?_fs_network_admin=false', 'relative' ) ) . '">' .
|
1136 |
-
$duplicate_option .
|
1137 |
-
$migration_option .
|
1138 |
-
$new_website . '</div>' .
|
1139 |
-
sprintf( '<div class="fs-clone-documentation-container">Unsure what to do? <a href="%s" target="_blank">Read more here</a>.</div>', $doc_url ),
|
1140 |
-
// %1$s
|
1141 |
-
( 1 === $total_products ?
|
1142 |
-
sprintf( '<b>%s</b>', $product_titles[0] ) :
|
1143 |
-
( 1 === $total_sites ?
|
1144 |
-
sprintf( '<div>%s</div>', $products_list ) :
|
1145 |
-
sprintf( '<div><p><strong>%s</strong>:</p>%s</div>', fs_esc_html_x_inline( 'Products', 'Clone resolution admin notice products list label', 'products' ), $products_list ) )
|
1146 |
-
),
|
1147 |
-
// %2$s
|
1148 |
-
$current_site_link,
|
1149 |
-
// %3$s
|
1150 |
-
( 1 === $total_sites ?
|
1151 |
-
$remote_site_link :
|
1152 |
-
$sites_list ),
|
1153 |
-
// %4$s
|
1154 |
-
$remote_site_link
|
1155 |
-
);
|
1156 |
-
|
1157 |
-
$this->_notices->add_sticky(
|
1158 |
-
$message,
|
1159 |
-
'clone_resolution_options_notice',
|
1160 |
-
'',
|
1161 |
-
'warn',
|
1162 |
-
true,
|
1163 |
-
null,
|
1164 |
-
null,
|
1165 |
-
true,
|
1166 |
-
// Intentionally not dismissible.
|
1167 |
-
false,
|
1168 |
-
array(
|
1169 |
-
'product_ids' => $product_ids,
|
1170 |
-
'blog_id' => get_current_blog_id()
|
1171 |
-
)
|
1172 |
-
);
|
1173 |
-
}
|
1174 |
-
|
1175 |
-
#endregion
|
1176 |
-
|
1177 |
-
#--------------------------------------------------------------------------------
|
1178 |
-
#region Temporary Duplicate (Short Term)
|
1179 |
-
#--------------------------------------------------------------------------------
|
1180 |
-
|
1181 |
-
/**
|
1182 |
-
* @author Leo Fajardo (@leorw)
|
1183 |
-
* @since 2.5.0
|
1184 |
-
*
|
1185 |
-
* @return string
|
1186 |
-
*/
|
1187 |
-
private function get_temporary_duplicate_admin_notice_string( $site_urls, $product_titles, $module_label ) {
|
1188 |
-
$this->_logger->entrance();
|
1189 |
-
|
1190 |
-
$temporary_duplicate_end_date = $this->get_temporary_duplicate_expiration_timestamp();
|
1191 |
-
$temporary_duplicate_end_date = date( 'M j, Y', $temporary_duplicate_end_date );
|
1192 |
-
|
1193 |
-
$current_url = get_site_url();
|
1194 |
-
$current_site_link = sprintf(
|
1195 |
-
'<b><a href="%s" target="_blank">%s</a></b>',
|
1196 |
-
$current_url,
|
1197 |
-
fs_strip_url_protocol( $current_url )
|
1198 |
-
);
|
1199 |
-
|
1200 |
-
$total_sites = count( $site_urls );
|
1201 |
-
$sites_list = '';
|
1202 |
-
|
1203 |
-
$total_products = count( $product_titles );
|
1204 |
-
$products_list = '';
|
1205 |
-
|
1206 |
-
if ( $total_sites > 1 ) {
|
1207 |
-
foreach ( $site_urls as $site_url ) {
|
1208 |
-
$sites_list .= sprintf(
|
1209 |
-
'<li><a href="%s" target="_blank">%s</a></li>',
|
1210 |
-
$site_url,
|
1211 |
-
fs_strip_url_protocol( $site_url )
|
1212 |
-
);
|
1213 |
-
}
|
1214 |
-
|
1215 |
-
$sites_list = '<ol class="fs-sites-list">' . $sites_list . '</ol>';
|
1216 |
-
}
|
1217 |
-
|
1218 |
-
if ( $total_products > 1 ) {
|
1219 |
-
foreach ( $product_titles as $product_title ) {
|
1220 |
-
$products_list .= sprintf( '<li>%s</li>', $product_title );
|
1221 |
-
}
|
1222 |
-
|
1223 |
-
$products_list = '<ol>' . $products_list . '</ol>';
|
1224 |
-
}
|
1225 |
-
|
1226 |
-
return sprintf(
|
1227 |
-
sprintf(
|
1228 |
-
'<div>%s</div>',
|
1229 |
-
( 1 === $total_sites ?
|
1230 |
-
sprintf( '<p>%s</p>', fs_esc_html_inline( 'You marked this website, %s, as a temporary duplicate of %s.', 'temporary-duplicate-message' ) ) :
|
1231 |
-
sprintf( '<p>%s:</p>', fs_esc_html_inline( 'You marked this website, %s, as a temporary duplicate of these sites', 'temporary-duplicate-of-sites-message' ) ) . '%s' )
|
1232 |
-
) . '%s',
|
1233 |
-
$current_site_link,
|
1234 |
-
( 1 === $total_sites ?
|
1235 |
-
sprintf(
|
1236 |
-
'<b><a href="%s" target="_blank">%s</a></b>',
|
1237 |
-
$site_urls[0],
|
1238 |
-
fs_strip_url_protocol( $site_urls[0] )
|
1239 |
-
) :
|
1240 |
-
$sites_list ),
|
1241 |
-
sprintf(
|
1242 |
-
'<div class="fs-clone-resolution-options-container fs-duplicate-site-options" data-ajax-url="%s" data-blog-id="' . get_current_blog_id() . '"><p>%s</p>%s<p>%s</p></div>',
|
1243 |
-
esc_attr( admin_url( 'admin-ajax.php?_fs_network_admin=false', 'relative' ) ),
|
1244 |
-
sprintf(
|
1245 |
-
fs_esc_html_inline( "%s automatic security & feature updates and paid functionality will keep working without interruptions until %s (or when your license expires, whatever comes first).", 'duplicate-site-confirmation-message' ),
|
1246 |
-
( 1 === $total_products ?
|
1247 |
-
sprintf(
|
1248 |
-
fs_esc_html_x_inline( "The %s's", '"The <product_label>", e.g.: "The plugin"', 'the-product-x'),
|
1249 |
-
"<strong>{$module_label}</strong>"
|
1250 |
-
) :
|
1251 |
-
fs_esc_html_inline( "The following products'", 'the-following-products' ) ),
|
1252 |
-
sprintf( '<strong>%s</strong>', $temporary_duplicate_end_date )
|
1253 |
-
),
|
1254 |
-
( 1 === $total_products ?
|
1255 |
-
'' :
|
1256 |
-
sprintf( '<div>%s</div>', $products_list )
|
1257 |
-
),
|
1258 |
-
sprintf(
|
1259 |
-
fs_esc_html_inline( 'If this is a long term duplicate, to keep automatic updates and paid functionality after %s, please %s.', 'duplicate-site-message' ),
|
1260 |
-
sprintf( '<strong>%s</strong>', $temporary_duplicate_end_date),
|
1261 |
-
sprintf( '<a href="#" id="fs_temporary_duplicate_license_activation_link" data-clone-action="temporary_duplicate_license_activation">%s</a>', fs_esc_html_inline( 'activate a license here', 'activate-license-here' ) )
|
1262 |
-
)
|
1263 |
-
)
|
1264 |
-
);
|
1265 |
-
}
|
1266 |
-
|
1267 |
-
/**
|
1268 |
-
* Determines if the temporary duplicate mode has already expired.
|
1269 |
-
*
|
1270 |
-
* @return bool
|
1271 |
-
*/
|
1272 |
-
function has_temporary_duplicate_mode_expired() {
|
1273 |
-
$temporary_duplicate_mode_start_timestamp = $this->was_temporary_duplicate_mode_selected() ?
|
1274 |
-
$this->temporary_duplicate_mode_selection_timestamp :
|
1275 |
-
$this->get_clone_identification_timestamp();
|
1276 |
-
|
1277 |
-
if ( ! is_numeric( $temporary_duplicate_mode_start_timestamp ) ) {
|
1278 |
-
return false;
|
1279 |
-
}
|
1280 |
-
|
1281 |
-
return ( time() > ( $temporary_duplicate_mode_start_timestamp + self::TEMPORARY_DUPLICATE_PERIOD ) );
|
1282 |
-
}
|
1283 |
-
|
1284 |
-
/**
|
1285 |
-
* Determines if the logged-in WordPress user manually selected the temporary duplicate mode for the site.
|
1286 |
-
*
|
1287 |
-
* @return bool
|
1288 |
-
*/
|
1289 |
-
function was_temporary_duplicate_mode_selected() {
|
1290 |
-
return (
|
1291 |
-
isset( $this->temporary_duplicate_mode_selection_timestamp ) &&
|
1292 |
-
is_numeric( $this->temporary_duplicate_mode_selection_timestamp )
|
1293 |
-
);
|
1294 |
-
}
|
1295 |
-
|
1296 |
-
/**
|
1297 |
-
* Stores the time when the logged-in WordPress user selected the temporary duplicate mode for the site.
|
1298 |
-
*/
|
1299 |
-
private function store_temporary_duplicate_timestamp() {
|
1300 |
-
$this->temporary_duplicate_mode_selection_timestamp = time();
|
1301 |
-
}
|
1302 |
-
|
1303 |
-
/**
|
1304 |
-
* Removes the notice that is shown when the logged-in WordPress user has selected the temporary duplicate mode for the site.
|
1305 |
-
*
|
1306 |
-
* @param bool $store
|
1307 |
-
*/
|
1308 |
-
function remove_clone_resolution_options_notice( $store = true ) {
|
1309 |
-
$this->_notices->remove_sticky( 'clone_resolution_options_notice', true, $store );
|
1310 |
-
}
|
1311 |
-
|
1312 |
-
/**
|
1313 |
-
* Removes the notice that is shown when the logged-in WordPress user has selected the temporary duplicate mode for the site.
|
1314 |
-
*
|
1315 |
-
* @param bool $store
|
1316 |
-
*/
|
1317 |
-
function remove_temporary_duplicate_notice( $store = true ) {
|
1318 |
-
$this->_notices->remove_sticky( 'temporary_duplicate_notice', true, $store );
|
1319 |
-
}
|
1320 |
-
|
1321 |
-
/**
|
1322 |
-
* Determines if the manual clone resolution options notice is currently being shown.
|
1323 |
-
*
|
1324 |
-
* @return bool
|
1325 |
-
*/
|
1326 |
-
function is_clone_resolution_options_notice_shown() {
|
1327 |
-
return $this->_notices->has_sticky( 'clone_resolution_options_notice', true );
|
1328 |
-
}
|
1329 |
-
|
1330 |
-
/**
|
1331 |
-
* Determines if the temporary duplicate notice is currently being shown.
|
1332 |
-
*
|
1333 |
-
* @return bool
|
1334 |
-
*/
|
1335 |
-
function is_temporary_duplicate_notice_shown() {
|
1336 |
-
return $this->_notices->has_sticky( 'temporary_duplicate_notice', true );
|
1337 |
-
}
|
1338 |
-
|
1339 |
-
/**
|
1340 |
-
* Determines if a site was marked as a temporary duplicate and if it's still a temporary duplicate.
|
1341 |
-
*
|
1342 |
-
* @return bool
|
1343 |
-
*/
|
1344 |
-
function is_temporary_duplicate_by_blog_id( $blog_id ) {
|
1345 |
-
$storage = FS_Option_Manager::get_manager( WP_FS___OPTION_PREFIX . self::OPTION_MANAGER_NAME, true, $blog_id );
|
1346 |
-
$data = $storage->get_option( self::OPTION_NAME, array() );
|
1347 |
-
|
1348 |
-
if ( ! is_array( $data ) ) {
|
1349 |
-
return false;
|
1350 |
-
}
|
1351 |
-
|
1352 |
-
$was_temporary_duplicate_mode_selected = (
|
1353 |
-
isset( $data['temporary_duplicate_mode_selection_timestamp'] ) &&
|
1354 |
-
is_numeric( $data['temporary_duplicate_mode_selection_timestamp'] )
|
1355 |
-
);
|
1356 |
-
|
1357 |
-
if ( ! $was_temporary_duplicate_mode_selected ) {
|
1358 |
-
return false;
|
1359 |
-
}
|
1360 |
-
|
1361 |
-
return ( time() < ( $data['temporary_duplicate_mode_selection_timestamp'] + self::TEMPORARY_DUPLICATE_PERIOD ) );
|
1362 |
-
}
|
1363 |
-
|
1364 |
-
/**
|
1365 |
-
* Determines the last time the temporary duplicate notice was shown.
|
1366 |
-
*
|
1367 |
-
* @return int|null
|
1368 |
-
*/
|
1369 |
-
function last_time_temporary_duplicate_notice_was_shown() {
|
1370 |
-
return ( ! isset( $this->temporary_duplicate_notice_shown_timestamp ) ) ?
|
1371 |
-
null :
|
1372 |
-
$this->temporary_duplicate_notice_shown_timestamp;
|
1373 |
-
}
|
1374 |
-
|
1375 |
-
/**
|
1376 |
-
* Clears the time that has been stored when the temporary duplicate notice was shown.
|
1377 |
-
*/
|
1378 |
-
function clear_temporary_duplicate_notice_shown_timestamp() {
|
1379 |
-
$this->temporary_duplicate_notice_shown_timestamp = null;
|
1380 |
-
}
|
1381 |
-
|
1382 |
-
/**
|
1383 |
-
* Adds a temporary duplicate notice that provides the logged-in WordPress user with an option to activate a license for the site.
|
1384 |
-
*
|
1385 |
-
* @param number[] $product_ids
|
1386 |
-
* @param string $message
|
1387 |
-
* @param string $message
|
1388 |
-
* @param string|null $plugin_title
|
1389 |
-
*/
|
1390 |
-
function add_temporary_duplicate_sticky_notice( $product_ids, $message, $plugin_title = null ) {
|
1391 |
-
$this->_logger->entrance();
|
1392 |
-
|
1393 |
-
$this->_notices->add_sticky(
|
1394 |
-
$message,
|
1395 |
-
'temporary_duplicate_notice',
|
1396 |
-
'',
|
1397 |
-
'promotion',
|
1398 |
-
true,
|
1399 |
-
null,
|
1400 |
-
$plugin_title,
|
1401 |
-
true,
|
1402 |
-
true,
|
1403 |
-
array(
|
1404 |
-
'product_ids' => $product_ids,
|
1405 |
-
'blog_id' => get_current_blog_id()
|
1406 |
-
)
|
1407 |
-
);
|
1408 |
-
|
1409 |
-
$this->temporary_duplicate_notice_shown_timestamp = time();
|
1410 |
-
}
|
1411 |
-
|
1412 |
-
#endregion
|
1413 |
-
|
1414 |
-
/**
|
1415 |
-
* @author Leo Fajardo
|
1416 |
-
* @since 2.5.0
|
1417 |
-
*
|
1418 |
-
* @param string $key
|
1419 |
-
*
|
1420 |
-
* @return bool
|
1421 |
-
*/
|
1422 |
-
private function should_use_network_storage( $key ) {
|
1423 |
-
return ( 'new_blog_install_map' === $key );
|
1424 |
-
}
|
1425 |
-
|
1426 |
-
#--------------------------------------------------------------------------------
|
1427 |
-
#region Magic methods
|
1428 |
-
#--------------------------------------------------------------------------------
|
1429 |
-
|
1430 |
-
/**
|
1431 |
-
* @param string $name
|
1432 |
-
* @param int|string $value
|
1433 |
-
*/
|
1434 |
-
function __set( $name, $value ) {
|
1435 |
-
if ( ! $this->should_use_network_storage( $name ) ) {
|
1436 |
-
$storage = $this->_storage;
|
1437 |
-
$data = $this->_data;
|
1438 |
-
} else {
|
1439 |
-
$storage = $this->_network_storage;
|
1440 |
-
$data = $this->_network_data;
|
1441 |
-
}
|
1442 |
-
|
1443 |
-
if ( ! array_key_exists( $name, $data ) ) {
|
1444 |
-
return;
|
1445 |
-
}
|
1446 |
-
|
1447 |
-
$data[ $name ] = $value;
|
1448 |
-
|
1449 |
-
$storage->set_option( self::OPTION_NAME, $data, true );
|
1450 |
-
}
|
1451 |
-
|
1452 |
-
/**
|
1453 |
-
* @param string $name
|
1454 |
-
*
|
1455 |
-
* @return bool
|
1456 |
-
*/
|
1457 |
-
function __isset( $name ) {
|
1458 |
-
return (
|
1459 |
-
isset( $this->_data[ $name ] ) ||
|
1460 |
-
isset( $this->_network_data[ $name ] )
|
1461 |
-
);
|
1462 |
-
}
|
1463 |
-
|
1464 |
-
/**
|
1465 |
-
* @param string $name
|
1466 |
-
*
|
1467 |
-
* @return null|int|string
|
1468 |
-
*/
|
1469 |
-
function __get( $name ) {
|
1470 |
-
$data = ( ! $this->should_use_network_storage( $name ) ) ?
|
1471 |
-
$this->_data :
|
1472 |
-
$this->_network_data;
|
1473 |
-
|
1474 |
-
return array_key_exists( $name, $data ) ?
|
1475 |
-
$data[ $name ] :
|
1476 |
-
null;
|
1477 |
-
}
|
1478 |
-
|
1479 |
-
#endregion
|
1480 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
freemius/includes/managers/class-fs-plugin-manager.php
CHANGED
@@ -211,23 +211,10 @@
|
|
211 |
* @return bool|\FS_Plugin
|
212 |
*/
|
213 |
function get() {
|
214 |
-
|
215 |
-
|
216 |
-
|
217 |
-
|
218 |
-
if ( empty( $this->_module_id ) ) {
|
219 |
-
return false;
|
220 |
-
}
|
221 |
-
|
222 |
-
/**
|
223 |
-
* Return an FS_Plugin entity that has its `id` and `is_live` properties set (`is_live` is initialized in the FS_Plugin constructor) to avoid triggering an error that is relevant to these properties when the FS_Plugin entity is used before the `parse_settings()` method is called. This can happen when creating a regular WordPress site by cloning a subsite of a multisite network and the data that is stored in the network-level storage is not cloned.
|
224 |
-
*
|
225 |
-
* @author Leo Fajardo (@leorw)
|
226 |
-
* @since 2.5.0
|
227 |
-
*/
|
228 |
-
$plugin = new FS_Plugin();
|
229 |
-
$plugin->id = $this->_module_id;
|
230 |
-
|
231 |
-
return $plugin;
|
232 |
}
|
|
|
|
|
233 |
}
|
211 |
* @return bool|\FS_Plugin
|
212 |
*/
|
213 |
function get() {
|
214 |
+
return isset( $this->_module ) ?
|
215 |
+
$this->_module :
|
216 |
+
false;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
217 |
}
|
218 |
+
|
219 |
+
|
220 |
}
|
freemius/includes/sdk/Exceptions/ArgumentNotExistException.php
CHANGED
@@ -1,4 +1,8 @@
|
|
1 |
<?php
|
|
|
|
|
|
|
|
|
2 |
if ( ! class_exists( 'Freemius_InvalidArgumentException' ) ) {
|
3 |
exit;
|
4 |
}
|
@@ -6,4 +10,4 @@
|
|
6 |
if ( ! class_exists( 'Freemius_ArgumentNotExistException' ) ) {
|
7 |
class Freemius_ArgumentNotExistException extends Freemius_InvalidArgumentException {
|
8 |
}
|
9 |
-
}
|
1 |
<?php
|
2 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
3 |
+
exit;
|
4 |
+
}
|
5 |
+
|
6 |
if ( ! class_exists( 'Freemius_InvalidArgumentException' ) ) {
|
7 |
exit;
|
8 |
}
|
10 |
if ( ! class_exists( 'Freemius_ArgumentNotExistException' ) ) {
|
11 |
class Freemius_ArgumentNotExistException extends Freemius_InvalidArgumentException {
|
12 |
}
|
13 |
+
}
|
freemius/includes/sdk/Exceptions/EmptyArgumentException.php
CHANGED
@@ -1,4 +1,8 @@
|
|
1 |
<?php
|
|
|
|
|
|
|
|
|
2 |
if ( ! class_exists( 'Freemius_InvalidArgumentException' ) ) {
|
3 |
exit;
|
4 |
}
|
@@ -6,4 +10,4 @@
|
|
6 |
if ( ! class_exists( 'Freemius_EmptyArgumentException' ) ) {
|
7 |
class Freemius_EmptyArgumentException extends Freemius_InvalidArgumentException {
|
8 |
}
|
9 |
-
}
|
1 |
<?php
|
2 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
3 |
+
exit;
|
4 |
+
}
|
5 |
+
|
6 |
if ( ! class_exists( 'Freemius_InvalidArgumentException' ) ) {
|
7 |
exit;
|
8 |
}
|
10 |
if ( ! class_exists( 'Freemius_EmptyArgumentException' ) ) {
|
11 |
class Freemius_EmptyArgumentException extends Freemius_InvalidArgumentException {
|
12 |
}
|
13 |
+
}
|
freemius/includes/sdk/Exceptions/Exception.php
CHANGED
@@ -1,4 +1,8 @@
|
|
1 |
<?php
|
|
|
|
|
|
|
|
|
2 |
if ( ! class_exists( 'Freemius_Exception' ) ) {
|
3 |
/**
|
4 |
* Thrown when an API call returns an exception.
|
@@ -71,4 +75,4 @@
|
|
71 |
return $str . $this->getMessage();
|
72 |
}
|
73 |
}
|
74 |
-
}
|
1 |
<?php
|
2 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
3 |
+
exit;
|
4 |
+
}
|
5 |
+
|
6 |
if ( ! class_exists( 'Freemius_Exception' ) ) {
|
7 |
/**
|
8 |
* Thrown when an API call returns an exception.
|
75 |
return $str . $this->getMessage();
|
76 |
}
|
77 |
}
|
78 |
+
}
|
freemius/includes/sdk/Exceptions/InvalidArgumentException.php
CHANGED
@@ -1,8 +1,12 @@
|
|
1 |
<?php
|
|
|
|
|
|
|
|
|
2 |
if ( ! class_exists( 'Freemius_Exception' ) ) {
|
3 |
exit;
|
4 |
}
|
5 |
|
6 |
if ( ! class_exists( 'Freemius_InvalidArgumentException' ) ) {
|
7 |
class Freemius_InvalidArgumentException extends Freemius_Exception { }
|
8 |
-
}
|
1 |
<?php
|
2 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
3 |
+
exit;
|
4 |
+
}
|
5 |
+
|
6 |
if ( ! class_exists( 'Freemius_Exception' ) ) {
|
7 |
exit;
|
8 |
}
|
9 |
|
10 |
if ( ! class_exists( 'Freemius_InvalidArgumentException' ) ) {
|
11 |
class Freemius_InvalidArgumentException extends Freemius_Exception { }
|
12 |
+
}
|
freemius/includes/sdk/Exceptions/OAuthException.php
CHANGED
@@ -1,4 +1,8 @@
|
|
1 |
<?php
|
|
|
|
|
|
|
|
|
2 |
if ( ! class_exists( 'Freemius_Exception' ) ) {
|
3 |
exit;
|
4 |
}
|
@@ -9,4 +13,4 @@
|
|
9 |
parent::__construct( $pResult );
|
10 |
}
|
11 |
}
|
12 |
-
}
|
1 |
<?php
|
2 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
3 |
+
exit;
|
4 |
+
}
|
5 |
+
|
6 |
if ( ! class_exists( 'Freemius_Exception' ) ) {
|
7 |
exit;
|
8 |
}
|
13 |
parent::__construct( $pResult );
|
14 |
}
|
15 |
}
|
16 |
+
}
|
freemius/includes/sdk/FreemiusBase.php
CHANGED
@@ -15,6 +15,10 @@
|
|
15 |
* under the License.
|
16 |
*/
|
17 |
|
|
|
|
|
|
|
|
|
18 |
if ( ! defined( 'FS_API__VERSION' ) ) {
|
19 |
define( 'FS_API__VERSION', '1' );
|
20 |
}
|
15 |
* under the License.
|
16 |
*/
|
17 |
|
18 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
19 |
+
exit;
|
20 |
+
}
|
21 |
+
|
22 |
if ( ! defined( 'FS_API__VERSION' ) ) {
|
23 |
define( 'FS_API__VERSION', '1' );
|
24 |
}
|
freemius/includes/sdk/FreemiusWordPress.php
CHANGED
@@ -14,6 +14,9 @@
|
|
14 |
* License for the specific language governing permissions and limitations
|
15 |
* under the License.
|
16 |
*/
|
|
|
|
|
|
|
17 |
|
18 |
require_once dirname( __FILE__ ) . '/FreemiusBase.php';
|
19 |
|
@@ -709,4 +712,4 @@
|
|
709 |
}
|
710 |
|
711 |
#endregion
|
712 |
-
}
|
14 |
* License for the specific language governing permissions and limitations
|
15 |
* under the License.
|
16 |
*/
|
17 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
18 |
+
exit;
|
19 |
+
}
|
20 |
|
21 |
require_once dirname( __FILE__ ) . '/FreemiusBase.php';
|
22 |
|
712 |
}
|
713 |
|
714 |
#endregion
|
715 |
+
}
|
freemius/languages/freemius-cs_CZ.mo
CHANGED
Binary file
|
freemius/languages/freemius-da_DK.mo
CHANGED
Binary file
|
freemius/languages/freemius-en.mo
CHANGED
Binary file
|
freemius/languages/freemius-es_ES.mo
CHANGED
Binary file
|
freemius/languages/freemius-fr_FR.mo
CHANGED
Binary file
|
freemius/languages/freemius-he_IL.mo
CHANGED
Binary file
|
freemius/languages/freemius-hu_HU.mo
CHANGED
Binary file
|
freemius/languages/freemius-it_IT.mo
CHANGED
Binary file
|
freemius/languages/freemius-ja.mo
CHANGED
Binary file
|
freemius/languages/freemius-nl_NL.mo
CHANGED
Binary file
|
freemius/languages/freemius-ru_RU.mo
CHANGED
Binary file
|
freemius/languages/freemius-ta.mo
CHANGED
Binary file
|
freemius/languages/freemius-zh_CN.mo
CHANGED
Binary file
|
freemius/languages/freemius.pot
CHANGED
@@ -1,4 +1,4 @@
|
|
1 |
-
# Copyright (C)
|
2 |
# This file is distributed under the same license as the freemius package.
|
3 |
msgid ""
|
4 |
msgstr ""
|
@@ -16,803 +16,795 @@ msgstr ""
|
|
16 |
"X-Poedit-SourceCharset: UTF-8\n"
|
17 |
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
18 |
|
19 |
-
#: includes/class-freemius.php:
|
20 |
msgid "An update to a Beta version will replace your installed version of %s with the latest Beta release - use with caution, and not on production sites. You have been warned."
|
21 |
msgstr ""
|
22 |
|
23 |
-
#: includes/class-freemius.php:
|
24 |
msgid "Would you like to proceed with the update?"
|
25 |
msgstr ""
|
26 |
|
27 |
-
#: includes/class-freemius.php:
|
28 |
msgid "Freemius SDK couldn't find the plugin's main file. Please contact sdk@freemius.com with the current error."
|
29 |
msgstr ""
|
30 |
|
31 |
-
#: includes/class-freemius.php:
|
32 |
msgid "Error"
|
33 |
msgstr ""
|
34 |
|
35 |
-
#: includes/class-freemius.php:
|
36 |
msgid "I found a better %s"
|
37 |
msgstr ""
|
38 |
|
39 |
-
#: includes/class-freemius.php:
|
40 |
msgid "What's the %s's name?"
|
41 |
msgstr ""
|
42 |
|
43 |
-
#: includes/class-freemius.php:
|
44 |
-
msgid "It's a temporary %s
|
45 |
msgstr ""
|
46 |
|
47 |
-
#: includes/class-freemius.php:
|
48 |
msgid "Deactivation"
|
49 |
msgstr ""
|
50 |
|
51 |
-
#: includes/class-freemius.php:
|
52 |
msgid "Theme Switch"
|
53 |
msgstr ""
|
54 |
|
55 |
-
#: includes/class-freemius.php:
|
56 |
msgid "Other"
|
57 |
msgstr ""
|
58 |
|
59 |
-
#: includes/class-freemius.php:
|
60 |
msgid "I no longer need the %s"
|
61 |
msgstr ""
|
62 |
|
63 |
-
#: includes/class-freemius.php:
|
64 |
msgid "I only needed the %s for a short period"
|
65 |
msgstr ""
|
66 |
|
67 |
-
#: includes/class-freemius.php:
|
68 |
msgid "The %s broke my site"
|
69 |
msgstr ""
|
70 |
|
71 |
-
#: includes/class-freemius.php:
|
72 |
msgid "The %s suddenly stopped working"
|
73 |
msgstr ""
|
74 |
|
75 |
-
#: includes/class-freemius.php:
|
76 |
msgid "I can't pay for it anymore"
|
77 |
msgstr ""
|
78 |
|
79 |
-
#: includes/class-freemius.php:
|
80 |
msgid "What price would you feel comfortable paying?"
|
81 |
msgstr ""
|
82 |
|
83 |
-
#: includes/class-freemius.php:
|
84 |
msgid "I don't like to share my information with you"
|
85 |
msgstr ""
|
86 |
|
87 |
-
#: includes/class-freemius.php:
|
88 |
msgid "The %s didn't work"
|
89 |
msgstr ""
|
90 |
|
91 |
-
#: includes/class-freemius.php:
|
92 |
msgid "I couldn't understand how to make it work"
|
93 |
msgstr ""
|
94 |
|
95 |
-
#: includes/class-freemius.php:
|
96 |
msgid "The %s is great, but I need specific feature that you don't support"
|
97 |
msgstr ""
|
98 |
|
99 |
-
#: includes/class-freemius.php:
|
100 |
msgid "What feature?"
|
101 |
msgstr ""
|
102 |
|
103 |
-
#: includes/class-freemius.php:
|
104 |
msgid "The %s is not working"
|
105 |
msgstr ""
|
106 |
|
107 |
-
#: includes/class-freemius.php:
|
108 |
msgid "Kindly share what didn't work so we can fix it for future users..."
|
109 |
msgstr ""
|
110 |
|
111 |
-
#: includes/class-freemius.php:
|
112 |
msgid "It's not what I was looking for"
|
113 |
msgstr ""
|
114 |
|
115 |
-
#: includes/class-freemius.php:
|
116 |
msgid "What you've been looking for?"
|
117 |
msgstr ""
|
118 |
|
119 |
-
#: includes/class-freemius.php:
|
120 |
msgid "The %s didn't work as expected"
|
121 |
msgstr ""
|
122 |
|
123 |
-
#: includes/class-freemius.php:
|
124 |
msgid "What did you expect?"
|
125 |
msgstr ""
|
126 |
|
127 |
-
#: includes/class-freemius.php:
|
128 |
msgid "Freemius Debug"
|
129 |
msgstr ""
|
130 |
|
131 |
-
#: includes/class-freemius.php:
|
132 |
msgid "I don't know what is cURL or how to install it, help me!"
|
133 |
msgstr ""
|
134 |
|
135 |
-
#: includes/class-freemius.php:
|
136 |
msgid "We'll make sure to contact your hosting company and resolve the issue. You will get a follow-up email to %s once we have an update."
|
137 |
msgstr ""
|
138 |
|
139 |
-
#: includes/class-freemius.php:
|
140 |
msgid "Great, please install cURL and enable it in your php.ini file. In addition, search for the 'disable_functions' directive in your php.ini file and remove any disabled methods starting with 'curl_'. To make sure it was successfully activated, use 'phpinfo()'. Once activated, deactivate the %s and reactivate it back again."
|
141 |
msgstr ""
|
142 |
|
143 |
-
#: includes/class-freemius.php:
|
144 |
msgid "Yes - do your thing"
|
145 |
msgstr ""
|
146 |
|
147 |
-
#: includes/class-freemius.php:
|
148 |
msgid "No - just deactivate"
|
149 |
msgstr ""
|
150 |
|
151 |
-
#: includes/class-freemius.php:
|
152 |
msgctxt "exclamation"
|
153 |
msgid "Oops"
|
154 |
msgstr ""
|
155 |
|
156 |
-
#: includes/class-freemius.php:
|
157 |
msgid "Thank for giving us the chance to fix it! A message was just sent to our technical staff. We will get back to you as soon as we have an update to %s. Appreciate your patience."
|
158 |
msgstr ""
|
159 |
|
160 |
-
#: includes/class-freemius.php:
|
161 |
-
msgid "You have purchased a %s license."
|
162 |
-
msgstr ""
|
163 |
-
|
164 |
-
#: includes/class-freemius.php:5191
|
165 |
-
msgid " The %s's %sdownload link%s, license key, and installation instructions have been sent to %s. If you can't find the email after 5 min, please check your spam box."
|
166 |
-
msgstr ""
|
167 |
-
|
168 |
-
#: includes/class-freemius.php:5201, includes/class-freemius.php:6177, includes/class-freemius.php:17574, includes/class-freemius.php:17585, includes/class-freemius.php:20987, includes/class-freemius.php:21378, includes/class-freemius.php:21447, includes/class-freemius.php:21619
|
169 |
-
msgctxt "interjection expressing joy or exuberance"
|
170 |
-
msgid "Yee-haw"
|
171 |
-
msgstr ""
|
172 |
-
|
173 |
-
#: includes/class-freemius.php:5215
|
174 |
msgctxt "addonX cannot run without pluginY"
|
175 |
msgid "%s cannot run without %s."
|
176 |
msgstr ""
|
177 |
|
178 |
-
#: includes/class-freemius.php:
|
179 |
msgctxt "addonX cannot run..."
|
180 |
msgid "%s cannot run without the plugin."
|
181 |
msgstr ""
|
182 |
|
183 |
-
#: includes/class-freemius.php:
|
184 |
msgid "Unexpected API error. Please contact the %s's author with the following error."
|
185 |
msgstr ""
|
186 |
|
187 |
-
#: includes/class-freemius.php:
|
188 |
msgid "Premium %s version was successfully activated."
|
189 |
msgstr ""
|
190 |
|
191 |
-
#: includes/class-freemius.php:
|
192 |
msgctxt "Used to express elation, enthusiasm, or triumph (especially in electronic communication)."
|
193 |
msgid "W00t"
|
194 |
msgstr ""
|
195 |
|
196 |
-
#: includes/class-freemius.php:
|
197 |
msgid "You have a %s license."
|
198 |
msgstr ""
|
199 |
|
200 |
-
#: includes/class-freemius.php:
|
|
|
|
|
|
|
|
|
|
|
201 |
msgid "%s free trial was successfully cancelled. Since the add-on is premium only it was automatically deactivated. If you like to use it in the future, you'll have to purchase a license."
|
202 |
msgstr ""
|
203 |
|
204 |
-
#: includes/class-freemius.php:
|
205 |
msgid "%s is a premium only add-on. You have to purchase a license first before activating the plugin."
|
206 |
msgstr ""
|
207 |
|
208 |
-
#: includes/class-freemius.php:
|
209 |
msgid "More information about %s"
|
210 |
msgstr ""
|
211 |
|
212 |
-
#: includes/class-freemius.php:
|
213 |
msgid "Purchase License"
|
214 |
msgstr ""
|
215 |
|
216 |
-
#: includes/class-freemius.php:
|
217 |
msgid "You should receive an activation email for %s to your mailbox at %s. Please make sure you click the activation button in that email to %s."
|
218 |
msgstr ""
|
219 |
|
220 |
-
#: includes/class-freemius.php:
|
221 |
msgid "start the trial"
|
222 |
msgstr ""
|
223 |
|
224 |
-
#: includes/class-freemius.php:
|
225 |
msgid "complete the install"
|
226 |
msgstr ""
|
227 |
|
228 |
-
#: includes/class-freemius.php:
|
229 |
msgid "You are just one step away - %s"
|
230 |
msgstr ""
|
231 |
|
232 |
-
#: includes/class-freemius.php:
|
233 |
msgctxt "%s - plugin name. As complete \"PluginX\" activation now"
|
234 |
msgid "Complete \"%s\" Activation Now"
|
235 |
msgstr ""
|
236 |
|
237 |
-
#: includes/class-freemius.php:
|
238 |
msgid "We made a few tweaks to the %s, %s"
|
239 |
msgstr ""
|
240 |
|
241 |
-
#: includes/class-freemius.php:
|
242 |
msgid "Opt in to make \"%s\" better!"
|
243 |
msgstr ""
|
244 |
|
245 |
-
#: includes/class-freemius.php:
|
246 |
msgid "The upgrade of %s was successfully completed."
|
247 |
msgstr ""
|
248 |
|
249 |
-
#: includes/class-freemius.php:
|
250 |
msgid "Add-On"
|
251 |
msgstr ""
|
252 |
|
253 |
-
#: includes/class-freemius.php:
|
254 |
msgid "Plugin"
|
255 |
msgstr ""
|
256 |
|
257 |
-
#: includes/class-freemius.php:
|
258 |
msgid "Theme"
|
259 |
msgstr ""
|
260 |
|
261 |
-
#: includes/class-freemius.php:
|
262 |
msgid "An unknown error has occurred while trying to toggle the license's white-label mode."
|
263 |
msgstr ""
|
264 |
|
265 |
-
#: includes/class-freemius.php:
|
266 |
msgid "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."
|
267 |
msgstr ""
|
268 |
|
269 |
-
#: includes/class-freemius.php:
|
270 |
msgid "User Dashboard"
|
271 |
msgstr ""
|
272 |
|
273 |
-
#: includes/class-freemius.php:
|
274 |
msgid "revert it now"
|
275 |
msgstr ""
|
276 |
|
277 |
-
#: includes/class-freemius.php:
|
278 |
msgid "An unknown error has occurred while trying to set the user's beta mode."
|
279 |
msgstr ""
|
280 |
|
281 |
-
#: includes/class-freemius.php:
|
282 |
msgid "Invalid new user ID or email address."
|
283 |
msgstr ""
|
284 |
|
285 |
-
#: includes/class-freemius.php:
|
286 |
msgid "Sorry, we could not complete the email update. Another user with the same email is already registered."
|
287 |
msgstr ""
|
288 |
|
289 |
-
#: includes/class-freemius.php:
|
290 |
msgid "If you would like to give up the ownership of the %s's account to %s click the Change Ownership button."
|
291 |
msgstr ""
|
292 |
|
293 |
-
#: includes/class-freemius.php:
|
294 |
msgid "Change Ownership"
|
295 |
msgstr ""
|
296 |
|
297 |
-
#: includes/class-freemius.php:
|
298 |
msgid "Invalid site details collection."
|
299 |
msgstr ""
|
300 |
|
301 |
-
#: includes/class-freemius.php:
|
302 |
msgid "We couldn't find your email address in the system, are you sure it's the right address?"
|
303 |
msgstr ""
|
304 |
|
305 |
-
#: includes/class-freemius.php:
|
306 |
msgid "We can't see any active licenses associated with that email address, are you sure it's the right address?"
|
307 |
msgstr ""
|
308 |
|
309 |
-
#: includes/class-freemius.php:
|
310 |
msgid "Account is pending activation."
|
311 |
msgstr ""
|
312 |
|
313 |
-
#: includes/class-freemius.php:
|
314 |
msgid "Buy a license now"
|
315 |
msgstr ""
|
316 |
|
317 |
-
#: includes/class-freemius.php:
|
318 |
msgid "Renew your license now"
|
319 |
msgstr ""
|
320 |
|
321 |
-
#: includes/class-freemius.php:
|
322 |
msgid "%s to access version %s security & feature updates, and support."
|
323 |
msgstr ""
|
324 |
|
325 |
-
#: includes/class-freemius.php:
|
326 |
msgid "%s activation was successfully completed."
|
327 |
msgstr ""
|
328 |
|
329 |
-
#: includes/class-freemius.php:
|
330 |
msgid "Your account was successfully activated with the %s plan."
|
331 |
msgstr ""
|
332 |
|
333 |
-
#: includes/class-freemius.php:
|
334 |
msgid "Your trial has been successfully started."
|
335 |
msgstr ""
|
336 |
|
337 |
-
#: includes/class-freemius.php:
|
338 |
msgid "Couldn't activate %s."
|
339 |
msgstr ""
|
340 |
|
341 |
-
#: includes/class-freemius.php:
|
342 |
msgid "Please contact us with the following message:"
|
343 |
msgstr ""
|
344 |
|
345 |
-
#: includes/class-freemius.php:
|
346 |
msgid "An unknown error has occurred."
|
347 |
msgstr ""
|
348 |
|
349 |
-
#: includes/class-freemius.php:
|
350 |
msgid "Upgrade"
|
351 |
msgstr ""
|
352 |
|
353 |
-
#: includes/class-freemius.php:
|
354 |
msgid "Start Trial"
|
355 |
msgstr ""
|
356 |
|
357 |
-
#: includes/class-freemius.php:
|
358 |
msgid "Pricing"
|
359 |
msgstr ""
|
360 |
|
361 |
-
#: includes/class-freemius.php:
|
362 |
msgid "Affiliation"
|
363 |
msgstr ""
|
364 |
|
365 |
-
#: includes/class-freemius.php:
|
366 |
msgid "Account"
|
367 |
msgstr ""
|
368 |
|
369 |
-
#: includes/class-freemius.php:
|
370 |
msgid "Contact Us"
|
371 |
msgstr ""
|
372 |
|
373 |
-
#: includes/class-freemius.php:
|
374 |
msgid "Add-Ons"
|
375 |
msgstr ""
|
376 |
|
377 |
-
#: includes/class-freemius.php:
|
378 |
msgctxt "ASCII arrow left icon"
|
379 |
msgid "←"
|
380 |
msgstr ""
|
381 |
|
382 |
-
#: includes/class-freemius.php:
|
383 |
msgctxt "ASCII arrow right icon"
|
384 |
msgid "➤"
|
385 |
msgstr ""
|
386 |
|
387 |
-
#: includes/class-freemius.php:
|
388 |
msgctxt "noun"
|
389 |
msgid "Pricing"
|
390 |
msgstr ""
|
391 |
|
392 |
-
#: includes/class-freemius.php:
|
393 |
msgid "Support Forum"
|
394 |
msgstr ""
|
395 |
|
396 |
-
#: includes/class-freemius.php:
|
397 |
msgid "Your email has been successfully verified - you are AWESOME!"
|
398 |
msgstr ""
|
399 |
|
400 |
-
#: includes/class-freemius.php:
|
401 |
msgctxt "a positive response"
|
402 |
msgid "Right on"
|
403 |
msgstr ""
|
404 |
|
405 |
-
#: includes/class-freemius.php:
|
406 |
msgid "seems like the key you entered doesn't match our records."
|
407 |
msgstr ""
|
408 |
|
409 |
-
#: includes/class-freemius.php:
|
410 |
msgid "Debug mode was successfully enabled and will be automatically disabled in 60 min. You can also disable it earlier by clicking the \"Stop Debug\" link."
|
411 |
msgstr ""
|
412 |
|
413 |
-
#: includes/class-freemius.php:
|
414 |
msgid "Your %s Add-on plan was successfully upgraded."
|
415 |
msgstr ""
|
416 |
|
417 |
-
#: includes/class-freemius.php:
|
418 |
msgid "%s Add-on was successfully purchased."
|
419 |
msgstr ""
|
420 |
|
421 |
-
#: includes/class-freemius.php:
|
422 |
msgid "Download the latest version"
|
423 |
msgstr ""
|
424 |
|
425 |
-
#: includes/class-freemius.php:
|
426 |
msgid "Your server is blocking the access to Freemius' API, which is crucial for %1$s synchronization. Please contact your host to whitelist %2$s"
|
427 |
msgstr ""
|
428 |
|
429 |
-
#: includes/class-freemius.php:
|
430 |
msgid "Error received from the server:"
|
431 |
msgstr ""
|
432 |
|
433 |
-
#: includes/class-freemius.php:
|
434 |
msgid "It seems like one of the authentication parameters is wrong. Update your Public Key, Secret Key & User ID, and try again."
|
435 |
msgstr ""
|
436 |
|
437 |
-
#: includes/class-freemius.php:
|
438 |
msgctxt "something somebody says when they are thinking about what you have just said."
|
439 |
msgid "Hmm"
|
440 |
msgstr ""
|
441 |
|
442 |
-
#: includes/class-freemius.php:
|
443 |
msgid "It looks like you are still on the %s plan. If you did upgrade or change your plan, it's probably an issue on our side - sorry."
|
444 |
msgstr ""
|
445 |
|
446 |
-
#: includes/class-freemius.php:
|
447 |
msgctxt "trial period"
|
448 |
msgid "Trial"
|
449 |
msgstr ""
|
450 |
|
451 |
-
#: includes/class-freemius.php:
|
452 |
msgid "I have upgraded my account but when I try to Sync the License, the plan remains %s."
|
453 |
msgstr ""
|
454 |
|
455 |
-
#: includes/class-freemius.php:
|
456 |
msgid "Please contact us here"
|
457 |
msgstr ""
|
458 |
|
459 |
-
#: includes/class-freemius.php:
|
460 |
msgid "Your plan was successfully activated."
|
461 |
msgstr ""
|
462 |
|
463 |
-
#: includes/class-freemius.php:
|
464 |
msgid "Your plan was successfully upgraded."
|
465 |
msgstr ""
|
466 |
|
467 |
-
#: includes/class-freemius.php:
|
468 |
msgid "Your plan was successfully changed to %s."
|
469 |
msgstr ""
|
470 |
|
471 |
-
#: includes/class-freemius.php:
|
472 |
msgid "Your license has expired. You can still continue using the free %s forever."
|
473 |
msgstr ""
|
474 |
|
475 |
-
#: includes/class-freemius.php:
|
476 |
msgid "Your license has expired. %1$sUpgrade now%2$s to continue using the %3$s without interruptions."
|
477 |
msgstr ""
|
478 |
|
479 |
-
#: includes/class-freemius.php:
|
480 |
msgid "Your license has been cancelled. If you think it's a mistake, please contact support."
|
481 |
msgstr ""
|
482 |
|
483 |
-
#: includes/class-freemius.php:
|
484 |
msgid "Your license has expired. You can still continue using all the %s features, but you'll need to renew your license to continue getting updates and support."
|
485 |
msgstr ""
|
486 |
|
487 |
-
#: includes/class-freemius.php:
|
488 |
msgid "Your free trial has expired. You can still continue using all our free features."
|
489 |
msgstr ""
|
490 |
|
491 |
-
#: includes/class-freemius.php:
|
492 |
msgid "Your free trial has expired. %1$sUpgrade now%2$s to continue using the %3$s without interruptions."
|
493 |
msgstr ""
|
494 |
|
495 |
-
#: includes/class-freemius.php:
|
496 |
msgid "It looks like the license could not be activated."
|
497 |
msgstr ""
|
498 |
|
499 |
-
#: includes/class-freemius.php:
|
500 |
msgid "Your license was successfully activated."
|
501 |
msgstr ""
|
502 |
|
503 |
-
#: includes/class-freemius.php:
|
504 |
msgid "It looks like your site currently doesn't have an active license."
|
505 |
msgstr ""
|
506 |
|
507 |
-
#: includes/class-freemius.php:
|
508 |
msgid "It looks like the license deactivation failed."
|
509 |
msgstr ""
|
510 |
|
511 |
-
#: includes/class-freemius.php:
|
512 |
msgid "Your %s license was successfully deactivated."
|
513 |
msgstr ""
|
514 |
|
515 |
-
#: includes/class-freemius.php:
|
516 |
msgid "Your license was successfully deactivated, you are back to the %s plan."
|
517 |
msgstr ""
|
518 |
|
519 |
-
#: includes/class-freemius.php:
|
520 |
msgid "O.K"
|
521 |
msgstr ""
|
522 |
|
523 |
-
#: includes/class-freemius.php:
|
524 |
msgid "Seems like we are having some temporary issue with your subscription cancellation. Please try again in few minutes."
|
525 |
msgstr ""
|
526 |
|
527 |
-
#: includes/class-freemius.php:
|
528 |
msgid "Your subscription was successfully cancelled. Your %s plan license will expire in %s."
|
529 |
msgstr ""
|
530 |
|
531 |
-
#: includes/class-freemius.php:
|
532 |
msgid "You are already running the %s in a trial mode."
|
533 |
msgstr ""
|
534 |
|
535 |
-
#: includes/class-freemius.php:
|
536 |
msgid "You already utilized a trial before."
|
537 |
msgstr ""
|
538 |
|
539 |
-
#: includes/class-freemius.php:
|
540 |
msgid "Plan %s do not exist, therefore, can't start a trial."
|
541 |
msgstr ""
|
542 |
|
543 |
-
#: includes/class-freemius.php:
|
544 |
msgid "Plan %s does not support a trial period."
|
545 |
msgstr ""
|
546 |
|
547 |
-
#: includes/class-freemius.php:
|
548 |
msgid "None of the %s's plans supports a trial period."
|
549 |
msgstr ""
|
550 |
|
551 |
-
#: includes/class-freemius.php:
|
552 |
msgid "It looks like you are not in trial mode anymore so there's nothing to cancel :)"
|
553 |
msgstr ""
|
554 |
|
555 |
-
#: includes/class-freemius.php:
|
556 |
msgid "Seems like we are having some temporary issue with your trial cancellation. Please try again in few minutes."
|
557 |
msgstr ""
|
558 |
|
559 |
-
#: includes/class-freemius.php:
|
560 |
msgid "Your %s free trial was successfully cancelled."
|
561 |
msgstr ""
|
562 |
|
563 |
-
#: includes/class-freemius.php:
|
564 |
msgid "Version %s was released."
|
565 |
msgstr ""
|
566 |
|
567 |
-
#: includes/class-freemius.php:
|
568 |
msgid "Please download %s."
|
569 |
msgstr ""
|
570 |
|
571 |
-
#: includes/class-freemius.php:
|
572 |
msgid "the latest %s version here"
|
573 |
msgstr ""
|
574 |
|
575 |
-
#: includes/class-freemius.php:
|
576 |
msgid "New"
|
577 |
msgstr ""
|
578 |
|
579 |
-
#: includes/class-freemius.php:
|
580 |
msgid "Seems like you got the latest release."
|
581 |
msgstr ""
|
582 |
|
583 |
-
#: includes/class-freemius.php:
|
584 |
msgid "You are all good!"
|
585 |
msgstr ""
|
586 |
|
587 |
-
#: includes/class-freemius.php:
|
588 |
msgid "Verification mail was just sent to %s. If you can't find it after 5 min, please check your spam box."
|
589 |
msgstr ""
|
590 |
|
591 |
-
#: includes/class-freemius.php:
|
592 |
msgid "Site successfully opted in."
|
593 |
msgstr ""
|
594 |
|
595 |
-
#: includes/class-freemius.php:
|
596 |
msgid "Awesome"
|
597 |
msgstr ""
|
598 |
|
599 |
-
#: includes/class-freemius.php:
|
600 |
msgid "We appreciate your help in making the %s better by letting us track some usage data."
|
601 |
msgstr ""
|
602 |
|
603 |
-
#: includes/class-freemius.php:
|
604 |
msgid "Thank you!"
|
605 |
msgstr ""
|
606 |
|
607 |
-
#: includes/class-freemius.php:
|
608 |
msgid "We will no longer be sending any usage data of %s on %s to %s."
|
609 |
msgstr ""
|
610 |
|
611 |
-
#: includes/class-freemius.php:
|
612 |
-
msgid "
|
613 |
-
msgstr ""
|
614 |
-
|
615 |
-
#: includes/class-freemius.php:23025
|
616 |
-
msgid "A confirmation email was just sent to %s. You must confirm the update within the next 4 hours. If you cannot find the email, please check your spam folder."
|
617 |
msgstr ""
|
618 |
|
619 |
-
#: includes/class-freemius.php:
|
620 |
msgid "Thanks for confirming the ownership change. An email was just sent to %s for final approval."
|
621 |
msgstr ""
|
622 |
|
623 |
-
#: includes/class-freemius.php:
|
624 |
msgid "%s is the new owner of the account."
|
625 |
msgstr ""
|
626 |
|
627 |
-
#: includes/class-freemius.php:
|
628 |
msgctxt "as congratulations"
|
629 |
msgid "Congrats"
|
630 |
msgstr ""
|
631 |
|
632 |
-
#: includes/class-freemius.php:
|
|
|
|
|
|
|
|
|
633 |
msgid "Please provide your full name."
|
634 |
msgstr ""
|
635 |
|
636 |
-
#: includes/class-freemius.php:
|
637 |
msgid "Your name was successfully updated."
|
638 |
msgstr ""
|
639 |
|
640 |
-
#: includes/class-freemius.php:
|
641 |
msgid "You have successfully updated your %s."
|
642 |
msgstr ""
|
643 |
|
644 |
-
#: includes/class-freemius.php:
|
645 |
msgid "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."
|
646 |
msgstr ""
|
647 |
|
648 |
-
#: includes/class-freemius.php:
|
649 |
msgid "Click here"
|
650 |
msgstr ""
|
651 |
|
652 |
-
#: includes/class-freemius.php:
|
653 |
msgid "Just letting you know that the add-ons information of %s is being pulled from an external server."
|
654 |
msgstr ""
|
655 |
|
656 |
-
#: includes/class-freemius.php:
|
657 |
msgctxt "advance notice of something that will need attention."
|
658 |
msgid "Heads up"
|
659 |
msgstr ""
|
660 |
|
661 |
-
#: includes/class-freemius.php:
|
662 |
msgctxt "exclamation"
|
663 |
msgid "Hey"
|
664 |
msgstr ""
|
665 |
|
666 |
-
#: includes/class-freemius.php:
|
667 |
msgid "How do you like %s so far? Test all our %s premium features with a %d-day free trial."
|
668 |
msgstr ""
|
669 |
|
670 |
-
#: includes/class-freemius.php:
|
671 |
msgid "No commitment for %s days - cancel anytime!"
|
672 |
msgstr ""
|
673 |
|
674 |
-
#: includes/class-freemius.php:
|
675 |
msgid "No credit card required"
|
676 |
msgstr ""
|
677 |
|
678 |
-
#: includes/class-freemius.php:
|
679 |
msgctxt "call to action"
|
680 |
msgid "Start free trial"
|
681 |
msgstr ""
|
682 |
|
683 |
-
#: includes/class-freemius.php:
|
684 |
msgid "Hey there, did you know that %s has an affiliate program? If you like the %s you can become our ambassador and earn some cash!"
|
685 |
msgstr ""
|
686 |
|
687 |
-
#: includes/class-freemius.php:
|
688 |
msgid "Learn more"
|
689 |
msgstr ""
|
690 |
|
691 |
-
#: includes/class-freemius.php:
|
692 |
msgid "Activate License"
|
693 |
msgstr ""
|
694 |
|
695 |
-
#: includes/class-freemius.php:
|
696 |
msgid "Change License"
|
697 |
msgstr ""
|
698 |
|
699 |
-
#: includes/class-freemius.php:
|
700 |
msgid "Opt Out"
|
701 |
msgstr ""
|
702 |
|
703 |
-
#: includes/class-freemius.php:
|
704 |
msgid "Opt In"
|
705 |
msgstr ""
|
706 |
|
707 |
-
#: includes/class-freemius.php:
|
708 |
msgid " The paid version of %1$s is already installed. Please activate it to start benefiting the %2$s features. %3$s"
|
709 |
msgstr ""
|
710 |
|
711 |
-
#: includes/class-freemius.php:
|
712 |
msgid "Activate %s features"
|
713 |
msgstr ""
|
714 |
|
715 |
-
#: includes/class-freemius.php:
|
716 |
msgid "Please follow these steps to complete the upgrade"
|
717 |
msgstr ""
|
718 |
|
719 |
-
#: includes/class-freemius.php:
|
720 |
msgid "Download the latest %s version"
|
721 |
msgstr ""
|
722 |
|
723 |
-
#: includes/class-freemius.php:
|
724 |
msgid "Upload and activate the downloaded version"
|
725 |
msgstr ""
|
726 |
|
727 |
-
#: includes/class-freemius.php:
|
728 |
msgid "How to upload and activate?"
|
729 |
msgstr ""
|
730 |
|
731 |
-
#: includes/class-freemius.php:
|
732 |
msgid "%sClick here%s to choose the sites where you'd like to activate the license on."
|
733 |
msgstr ""
|
734 |
|
735 |
-
#: includes/class-freemius.php:
|
736 |
msgid "Auto installation only works for opted-in users."
|
737 |
msgstr ""
|
738 |
|
739 |
-
#: includes/class-freemius.php:
|
740 |
msgid "Invalid module ID."
|
741 |
msgstr ""
|
742 |
|
743 |
-
#: includes/class-freemius.php:
|
744 |
msgid "Premium version already active."
|
745 |
msgstr ""
|
746 |
|
747 |
-
#: includes/class-freemius.php:
|
748 |
msgid "You do not have a valid license to access the premium version."
|
749 |
msgstr ""
|
750 |
|
751 |
-
#: includes/class-freemius.php:
|
752 |
msgid "Plugin is a \"Serviceware\" which means it does not have a premium code version."
|
753 |
msgstr ""
|
754 |
|
755 |
-
#: includes/class-freemius.php:
|
756 |
msgid "Premium add-on version already installed."
|
757 |
msgstr ""
|
758 |
|
759 |
-
#: includes/class-freemius.php:
|
760 |
msgid "View paid features"
|
761 |
msgstr ""
|
762 |
|
763 |
-
#: includes/class-freemius.php:
|
764 |
msgid "Thank you so much for using %s and its add-ons!"
|
765 |
msgstr ""
|
766 |
|
767 |
-
#: includes/class-freemius.php:
|
768 |
msgid "Thank you so much for using %s!"
|
769 |
msgstr ""
|
770 |
|
771 |
-
#: includes/class-freemius.php:
|
772 |
msgid "You've already opted-in to our usage-tracking, which helps us keep improving the %s."
|
773 |
msgstr ""
|
774 |
|
775 |
-
#: includes/class-freemius.php:
|
776 |
msgid "Thank you so much for using our products!"
|
777 |
msgstr ""
|
778 |
|
779 |
-
#: includes/class-freemius.php:
|
780 |
msgid "You've already opted-in to our usage-tracking, which helps us keep improving them."
|
781 |
msgstr ""
|
782 |
|
783 |
-
#: includes/class-freemius.php:
|
784 |
msgid "%s and its add-ons"
|
785 |
msgstr ""
|
786 |
|
787 |
-
#: includes/class-freemius.php:
|
788 |
msgid "Products"
|
789 |
msgstr ""
|
790 |
|
791 |
-
#: includes/class-freemius.php:
|
792 |
msgid "Yes"
|
793 |
msgstr ""
|
794 |
|
795 |
-
#: includes/class-freemius.php:
|
796 |
msgid "send me security & feature updates, educational content and offers."
|
797 |
msgstr ""
|
798 |
|
799 |
-
#: includes/class-freemius.php:
|
800 |
msgid "No"
|
801 |
msgstr ""
|
802 |
|
803 |
-
#: includes/class-freemius.php:
|
804 |
msgid "do %sNOT%s send me security & feature updates, educational content and offers."
|
805 |
msgstr ""
|
806 |
|
807 |
-
#: includes/class-freemius.php:
|
808 |
msgid "Due to the new %sEU General Data Protection Regulation (GDPR)%s compliance requirements it is required that you provide your explicit consent, again, confirming that you are onboard :-)"
|
809 |
msgstr ""
|
810 |
|
811 |
-
#: includes/class-freemius.php:
|
812 |
msgid "Please let us know if you'd like us to contact you for security & feature updates, educational content, and occasional offers:"
|
813 |
msgstr ""
|
814 |
|
815 |
-
#: includes/class-freemius.php:
|
816 |
msgid "License key is empty."
|
817 |
msgstr ""
|
818 |
|
@@ -824,31 +816,31 @@ msgstr ""
|
|
824 |
msgid "Buy license"
|
825 |
msgstr ""
|
826 |
|
827 |
-
#: includes/class-fs-plugin-updater.php:
|
828 |
msgid "There is a %s of %s available."
|
829 |
msgstr ""
|
830 |
|
831 |
-
#: includes/class-fs-plugin-updater.php:
|
832 |
msgid "new Beta version"
|
833 |
msgstr ""
|
834 |
|
835 |
-
#: includes/class-fs-plugin-updater.php:
|
836 |
msgid "new version"
|
837 |
msgstr ""
|
838 |
|
839 |
-
#: includes/class-fs-plugin-updater.php:
|
840 |
msgid "Important Upgrade Notice:"
|
841 |
msgstr ""
|
842 |
|
843 |
-
#: includes/class-fs-plugin-updater.php:
|
844 |
msgid "Installing plugin: %s"
|
845 |
msgstr ""
|
846 |
|
847 |
-
#: includes/class-fs-plugin-updater.php:
|
848 |
msgid "Unable to connect to the filesystem. Please confirm your credentials."
|
849 |
msgstr ""
|
850 |
|
851 |
-
#: includes/class-fs-plugin-updater.php:
|
852 |
msgid "The remote plugin package does not contain a folder with the desired slug and renaming did not work."
|
853 |
msgstr ""
|
854 |
|
@@ -869,7 +861,7 @@ msgstr ""
|
|
869 |
msgid "Install Free Version Update Now"
|
870 |
msgstr ""
|
871 |
|
872 |
-
#: includes/fs-plugin-info-dialog.php:745, templates/account.php:
|
873 |
msgid "Install Update Now"
|
874 |
msgstr ""
|
875 |
|
@@ -886,7 +878,7 @@ msgctxt "as download latest version"
|
|
886 |
msgid "Download Latest Free Version"
|
887 |
msgstr ""
|
888 |
|
889 |
-
#: includes/fs-plugin-info-dialog.php:772, templates/account.php:
|
890 |
msgctxt "as download latest version"
|
891 |
msgid "Download Latest"
|
892 |
msgstr ""
|
@@ -895,11 +887,11 @@ msgstr ""
|
|
895 |
msgid "Activate this add-on"
|
896 |
msgstr ""
|
897 |
|
898 |
-
#: includes/fs-plugin-info-dialog.php:789, templates/connect.php:
|
899 |
msgid "Activate Free Version"
|
900 |
msgstr ""
|
901 |
|
902 |
-
#: includes/fs-plugin-info-dialog.php:790, templates/account.php:
|
903 |
msgid "Activate"
|
904 |
msgstr ""
|
905 |
|
@@ -1028,7 +1020,7 @@ msgstr ""
|
|
1028 |
msgid "Details"
|
1029 |
msgstr ""
|
1030 |
|
1031 |
-
#: includes/fs-plugin-info-dialog.php:1318, templates/account.php:
|
1032 |
msgctxt "product version"
|
1033 |
msgid "Version"
|
1034 |
msgstr ""
|
@@ -1042,7 +1034,7 @@ msgstr ""
|
|
1042 |
msgid "Last Updated"
|
1043 |
msgstr ""
|
1044 |
|
1045 |
-
#: includes/fs-plugin-info-dialog.php:1337, templates/account.php:
|
1046 |
msgctxt "x-ago"
|
1047 |
msgid "%s ago"
|
1048 |
msgstr ""
|
@@ -1151,293 +1143,293 @@ msgstr ""
|
|
1151 |
msgid "Latest Free Version Installed"
|
1152 |
msgstr ""
|
1153 |
|
1154 |
-
#: templates/account.php:
|
1155 |
msgid "Downgrading your plan"
|
1156 |
msgstr ""
|
1157 |
|
1158 |
-
#: templates/account.php:
|
1159 |
msgid "Cancelling the subscription"
|
1160 |
msgstr ""
|
1161 |
|
1162 |
#. translators: %1$s: Either 'Downgrading your plan' or 'Cancelling the subscription'
|
1163 |
-
#: templates/account.php:
|
1164 |
msgid "%1$s will immediately stop all future recurring payments and your %2$s plan license will expire in %3$s."
|
1165 |
msgstr ""
|
1166 |
|
1167 |
-
#: templates/account.php:
|
1168 |
msgid "Please note that we will not be able to grandfather outdated pricing for renewals/new subscriptions after a cancellation. If you choose to renew the subscription manually in the future, after a price increase, which typically occurs once a year, you will be charged the updated price."
|
1169 |
msgstr ""
|
1170 |
|
1171 |
-
#: templates/account.php:
|
1172 |
msgid "Cancelling the trial will immediately block access to all premium features. Are you sure?"
|
1173 |
msgstr ""
|
1174 |
|
1175 |
-
#: templates/account.php:
|
1176 |
msgid "You can still enjoy all %s features but you will not have access to %s security & feature updates, nor support."
|
1177 |
msgstr ""
|
1178 |
|
1179 |
-
#: templates/account.php:
|
1180 |
msgid "Once your license expires you can still use the Free version but you will NOT have access to the %s features."
|
1181 |
msgstr ""
|
1182 |
|
1183 |
#. translators: %s: Plan title (e.g. "Professional")
|
1184 |
-
#: templates/account.php:
|
1185 |
msgid "Activate %s Plan"
|
1186 |
msgstr ""
|
1187 |
|
1188 |
#. translators: %s: Time period (e.g. Auto renews in "2 months")
|
1189 |
-
#: templates/account.php:
|
1190 |
msgid "Auto renews in %s"
|
1191 |
msgstr ""
|
1192 |
|
1193 |
#. translators: %s: Time period (e.g. Expires in "2 months")
|
1194 |
-
#: templates/account.php:
|
1195 |
msgid "Expires in %s"
|
1196 |
msgstr ""
|
1197 |
|
1198 |
-
#: templates/account.php:
|
1199 |
msgctxt "as synchronize license"
|
1200 |
msgid "Sync License"
|
1201 |
msgstr ""
|
1202 |
|
1203 |
-
#: templates/account.php:
|
1204 |
msgid "Cancel Trial"
|
1205 |
msgstr ""
|
1206 |
|
1207 |
-
#: templates/account.php:
|
1208 |
msgid "Change Plan"
|
1209 |
msgstr ""
|
1210 |
|
1211 |
-
#: templates/account.php:
|
1212 |
msgctxt "verb"
|
1213 |
msgid "Upgrade"
|
1214 |
msgstr ""
|
1215 |
|
1216 |
-
#: templates/account.php:
|
1217 |
msgctxt "verb"
|
1218 |
msgid "Downgrade"
|
1219 |
msgstr ""
|
1220 |
|
1221 |
-
#: templates/account.php:
|
1222 |
msgid "Free"
|
1223 |
msgstr ""
|
1224 |
|
1225 |
-
#: templates/account.php:
|
1226 |
msgctxt "as product pricing plan"
|
1227 |
msgid "Plan"
|
1228 |
msgstr ""
|
1229 |
|
1230 |
-
#: templates/account.php:
|
1231 |
msgid "Bundle Plan"
|
1232 |
msgstr ""
|
1233 |
|
1234 |
-
#: templates/account.php:
|
1235 |
msgid "Free Trial"
|
1236 |
msgstr ""
|
1237 |
|
1238 |
-
#: templates/account.php:
|
1239 |
msgid "Account Details"
|
1240 |
msgstr ""
|
1241 |
|
1242 |
-
#: templates/account.php:
|
1243 |
msgid "Start Debug"
|
1244 |
msgstr ""
|
1245 |
|
1246 |
-
#: templates/account.php:
|
1247 |
msgid "Stop Debug"
|
1248 |
msgstr ""
|
1249 |
|
1250 |
-
#: templates/account.php:
|
1251 |
msgid "Billing & Invoices"
|
1252 |
msgstr ""
|
1253 |
|
1254 |
-
#: templates/account.php:
|
1255 |
msgid "Deleting the account will automatically deactivate your %s plan license so you can use it on other sites. If you want to terminate the recurring payments as well, click the \"Cancel\" button, and first \"Downgrade\" your account. Are you sure you would like to continue with the deletion?"
|
1256 |
msgstr ""
|
1257 |
|
1258 |
-
#: templates/account.php:
|
1259 |
msgid "Deletion is not temporary. Only delete if you no longer want to use this %s anymore. Are you sure you would like to continue with the deletion?"
|
1260 |
msgstr ""
|
1261 |
|
1262 |
-
#: templates/account.php:
|
1263 |
msgid "Delete Account"
|
1264 |
msgstr ""
|
1265 |
|
1266 |
-
#: templates/account.php:
|
1267 |
msgid "Deactivate License"
|
1268 |
msgstr ""
|
1269 |
|
1270 |
-
#: templates/account.php:
|
1271 |
msgid "Are you sure you want to proceed?"
|
1272 |
msgstr ""
|
1273 |
|
1274 |
-
#: templates/account.php:
|
1275 |
msgid "Cancel Subscription"
|
1276 |
msgstr ""
|
1277 |
|
1278 |
-
#: templates/account.php:
|
1279 |
msgctxt "as synchronize"
|
1280 |
msgid "Sync"
|
1281 |
msgstr ""
|
1282 |
|
1283 |
-
#: templates/account.php:
|
1284 |
msgid "Name"
|
1285 |
msgstr ""
|
1286 |
|
1287 |
-
#: templates/account.php:
|
1288 |
msgid "Email"
|
1289 |
msgstr ""
|
1290 |
|
1291 |
-
#: templates/account.php:
|
1292 |
msgid "User ID"
|
1293 |
msgstr ""
|
1294 |
|
1295 |
-
#: templates/account.php:
|
1296 |
msgid "ID"
|
1297 |
msgstr ""
|
1298 |
|
1299 |
-
#: templates/account.php:
|
1300 |
msgid "Site ID"
|
1301 |
msgstr ""
|
1302 |
|
1303 |
-
#: templates/account.php:
|
1304 |
msgid "No ID"
|
1305 |
msgstr ""
|
1306 |
|
1307 |
-
#: templates/account.php:
|
1308 |
msgid "Public Key"
|
1309 |
msgstr ""
|
1310 |
|
1311 |
-
#: templates/account.php:
|
1312 |
msgid "Secret Key"
|
1313 |
msgstr ""
|
1314 |
|
1315 |
-
#: templates/account.php:
|
1316 |
msgctxt "as secret encryption key missing"
|
1317 |
msgid "No Secret"
|
1318 |
msgstr ""
|
1319 |
|
1320 |
-
#: templates/account.php:
|
1321 |
msgid "Trial"
|
1322 |
msgstr ""
|
1323 |
|
1324 |
-
#: templates/account.php:
|
1325 |
msgid "License Key"
|
1326 |
msgstr ""
|
1327 |
|
1328 |
-
#: templates/account.php:
|
1329 |
msgid "Join the Beta program"
|
1330 |
msgstr ""
|
1331 |
|
1332 |
-
#: templates/account.php:
|
1333 |
msgid "not verified"
|
1334 |
msgstr ""
|
1335 |
|
1336 |
-
#: templates/account.php:
|
1337 |
msgid "Expired"
|
1338 |
msgstr ""
|
1339 |
|
1340 |
-
#: templates/account.php:
|
1341 |
msgid "Premium version"
|
1342 |
msgstr ""
|
1343 |
|
1344 |
-
#: templates/account.php:
|
1345 |
msgid "Free version"
|
1346 |
msgstr ""
|
1347 |
|
1348 |
-
#: templates/account.php:
|
1349 |
msgid "Verify Email"
|
1350 |
msgstr ""
|
1351 |
|
1352 |
-
#: templates/account.php:
|
1353 |
msgid "Download %s Version"
|
1354 |
msgstr ""
|
1355 |
|
1356 |
-
#: templates/account.php:
|
1357 |
msgid "Download Paid Version"
|
1358 |
msgstr ""
|
1359 |
|
1360 |
-
#: templates/account.php:
|
1361 |
msgctxt "verb"
|
1362 |
msgid "Show"
|
1363 |
msgstr ""
|
1364 |
|
1365 |
-
#: templates/account.php:
|
1366 |
msgid "What is your %s?"
|
1367 |
msgstr ""
|
1368 |
|
1369 |
-
#: templates/account.php:
|
1370 |
msgctxt "verb"
|
1371 |
msgid "Edit"
|
1372 |
msgstr ""
|
1373 |
|
1374 |
-
#: templates/account.php:
|
1375 |
msgid "Change User"
|
1376 |
msgstr ""
|
1377 |
|
1378 |
-
#: templates/account.php:
|
1379 |
msgid "Sites"
|
1380 |
msgstr ""
|
1381 |
|
1382 |
-
#: templates/account.php:
|
1383 |
msgid "Search by address"
|
1384 |
msgstr ""
|
1385 |
|
1386 |
-
#: templates/account.php:
|
1387 |
msgid "Address"
|
1388 |
msgstr ""
|
1389 |
|
1390 |
-
#: templates/account.php:
|
1391 |
msgid "License"
|
1392 |
msgstr ""
|
1393 |
|
1394 |
-
#: templates/account.php:
|
1395 |
msgid "Plan"
|
1396 |
msgstr ""
|
1397 |
|
1398 |
-
#: templates/account.php:
|
1399 |
msgctxt "as software license"
|
1400 |
msgid "License"
|
1401 |
msgstr ""
|
1402 |
|
1403 |
-
#: templates/account.php:
|
1404 |
msgctxt "verb"
|
1405 |
msgid "Hide"
|
1406 |
msgstr ""
|
1407 |
|
1408 |
-
#: templates/account.php:
|
1409 |
msgid "Processing"
|
1410 |
msgstr ""
|
1411 |
|
1412 |
-
#: templates/account.php:
|
1413 |
msgid "Get updates for bleeding edge Beta versions of %s."
|
1414 |
msgstr ""
|
1415 |
|
1416 |
-
#: templates/account.php:
|
1417 |
msgid "Cancelling %s"
|
1418 |
msgstr ""
|
1419 |
|
1420 |
-
#: templates/account.php:
|
1421 |
msgid "trial"
|
1422 |
msgstr ""
|
1423 |
|
1424 |
-
#: templates/account.php:
|
1425 |
msgid "Cancelling %s..."
|
1426 |
msgstr ""
|
1427 |
|
1428 |
-
#: templates/account.php:
|
1429 |
msgid "subscription"
|
1430 |
msgstr ""
|
1431 |
|
1432 |
-
#: templates/account.php:
|
1433 |
msgid "Deactivating your license will block all premium features, but will enable activating the license on another site. Are you sure you want to proceed?"
|
1434 |
msgstr ""
|
1435 |
|
1436 |
-
#: templates/account.php:
|
1437 |
msgid "Disabling white-label mode"
|
1438 |
msgstr ""
|
1439 |
|
1440 |
-
#: templates/account.php:
|
1441 |
msgid "Enabling white-label mode"
|
1442 |
msgstr ""
|
1443 |
|
@@ -1463,7 +1455,7 @@ msgctxt "installed add-on"
|
|
1463 |
msgid "Installed"
|
1464 |
msgstr ""
|
1465 |
|
1466 |
-
#: templates/admin-notice.php:13, templates/forms/license-activation.php:
|
1467 |
msgctxt "as close a window"
|
1468 |
msgid "Dismiss"
|
1469 |
msgstr ""
|
@@ -1497,198 +1489,198 @@ msgid "PCI compliant"
|
|
1497 |
msgstr ""
|
1498 |
|
1499 |
#. translators: %s: name (e.g. Hey John,)
|
1500 |
-
#: templates/connect.php:
|
1501 |
msgctxt "greeting"
|
1502 |
msgid "Hey %s,"
|
1503 |
msgstr ""
|
1504 |
|
1505 |
-
#: templates/connect.php:
|
1506 |
msgid "Allow & Continue"
|
1507 |
msgstr ""
|
1508 |
|
1509 |
-
#: templates/connect.php:
|
1510 |
msgid "Re-send activation email"
|
1511 |
msgstr ""
|
1512 |
|
1513 |
-
#: templates/connect.php:
|
1514 |
msgid "Thanks %s!"
|
1515 |
msgstr ""
|
1516 |
|
1517 |
-
#: templates/connect.php:
|
1518 |
msgid "Agree & Activate License"
|
1519 |
msgstr ""
|
1520 |
|
1521 |
-
#: templates/connect.php:
|
1522 |
msgid "Welcome to %s! To get started, please enter your license key:"
|
1523 |
msgstr ""
|
1524 |
|
1525 |
-
#: templates/connect.php:
|
1526 |
msgid "Never miss an important update - opt in to our security & feature updates notifications, educational content, offers, and non-sensitive diagnostic tracking with %4$s."
|
1527 |
msgstr ""
|
1528 |
|
1529 |
-
#: templates/connect.php:
|
1530 |
msgid "Never miss an important update - opt in to our security and feature updates notifications, and non-sensitive diagnostic tracking with %4$s."
|
1531 |
msgstr ""
|
1532 |
|
1533 |
-
#: templates/connect.php:
|
1534 |
msgid "Never miss an important update - opt in to our security & feature updates notifications, educational content, offers, and non-sensitive diagnostic tracking with %4$s. If you skip this, that's okay! %1$s will still work just fine."
|
1535 |
msgstr ""
|
1536 |
|
1537 |
-
#: templates/connect.php:
|
1538 |
msgid "Never miss an important update - opt in to our security & feature updates notifications, and non-sensitive diagnostic tracking with %4$s. If you skip this, that's okay! %1$s will still work just fine."
|
1539 |
msgstr ""
|
1540 |
|
1541 |
-
#: templates/connect.php:
|
1542 |
msgid "We're excited to introduce the Freemius network-level integration."
|
1543 |
msgstr ""
|
1544 |
|
1545 |
-
#: templates/connect.php:
|
1546 |
msgid "During the update process we detected %d site(s) that are still pending license activation."
|
1547 |
msgstr ""
|
1548 |
|
1549 |
-
#: templates/connect.php:
|
1550 |
msgid "If you'd like to use the %s on those sites, please enter your license key below and click the activation button."
|
1551 |
msgstr ""
|
1552 |
|
1553 |
-
#: templates/connect.php:
|
1554 |
msgid "%s's paid features"
|
1555 |
msgstr ""
|
1556 |
|
1557 |
-
#: templates/connect.php:
|
1558 |
msgid "Alternatively, you can skip it for now and activate the license later, in your %s's network-level Account page."
|
1559 |
msgstr ""
|
1560 |
|
1561 |
-
#: templates/connect.php:
|
1562 |
msgid "During the update process we detected %s site(s) in the network that are still pending your attention."
|
1563 |
msgstr ""
|
1564 |
|
1565 |
-
#: templates/connect.php:
|
1566 |
msgid "License key"
|
1567 |
msgstr ""
|
1568 |
|
1569 |
-
#: templates/connect.php:
|
1570 |
msgid "Can't find your license key?"
|
1571 |
msgstr ""
|
1572 |
|
1573 |
-
#: templates/connect.php:
|
1574 |
msgctxt "verb"
|
1575 |
msgid "Skip"
|
1576 |
msgstr ""
|
1577 |
|
1578 |
-
#: templates/connect.php:
|
1579 |
msgid "Delegate to Site Admins"
|
1580 |
msgstr ""
|
1581 |
|
1582 |
-
#: templates/connect.php:
|
1583 |
msgid "If you click it, this decision will be delegated to the sites administrators."
|
1584 |
msgstr ""
|
1585 |
|
1586 |
-
#: templates/connect.php:
|
1587 |
msgid "License issues?"
|
1588 |
msgstr ""
|
1589 |
|
1590 |
-
#: templates/connect.php:
|
1591 |
msgid "Your Profile Overview"
|
1592 |
msgstr ""
|
1593 |
|
1594 |
-
#: templates/connect.php:
|
1595 |
msgid "Name and email address"
|
1596 |
msgstr ""
|
1597 |
|
1598 |
-
#: templates/connect.php:
|
1599 |
msgid "So you can manage and control your license remotely from the User Dashboard."
|
1600 |
msgstr ""
|
1601 |
|
1602 |
-
#: templates/connect.php:
|
1603 |
msgid "Your Site Overview"
|
1604 |
msgstr ""
|
1605 |
|
1606 |
-
#: templates/connect.php:
|
1607 |
msgid "Site URL, WP version, PHP info"
|
1608 |
msgstr ""
|
1609 |
|
1610 |
-
#: templates/connect.php:
|
1611 |
msgid "Admin Notices"
|
1612 |
msgstr ""
|
1613 |
|
1614 |
-
#: templates/connect.php:
|
1615 |
msgid "Updates, announcements, marketing, no spam"
|
1616 |
msgstr ""
|
1617 |
|
1618 |
-
#: templates/connect.php:
|
1619 |
msgid "So you can reuse the license when the %s is no longer active."
|
1620 |
msgstr ""
|
1621 |
|
1622 |
-
#: templates/connect.php:
|
1623 |
msgid "Current %s Status"
|
1624 |
msgstr ""
|
1625 |
|
1626 |
-
#: templates/connect.php:
|
1627 |
msgid "Active, deactivated, or uninstalled"
|
1628 |
msgstr ""
|
1629 |
|
1630 |
-
#: templates/connect.php:
|
1631 |
msgid "Newsletter"
|
1632 |
msgstr ""
|
1633 |
|
1634 |
-
#: templates/connect.php:
|
1635 |
msgid "Plugins & Themes"
|
1636 |
msgstr ""
|
1637 |
|
1638 |
-
#: templates/connect.php:
|
1639 |
msgid "optional"
|
1640 |
msgstr ""
|
1641 |
|
1642 |
-
#: templates/connect.php:
|
1643 |
msgid "To help us troubleshoot any potential issues that may arise from other plugin or theme conflicts."
|
1644 |
msgstr ""
|
1645 |
|
1646 |
-
#: templates/connect.php:
|
1647 |
msgid "Title, slug, version, and is active"
|
1648 |
msgstr ""
|
1649 |
|
1650 |
-
#: templates/connect.php:
|
1651 |
msgid "The %1$s will periodically send %2$s to %3$s for security & feature updates delivery, and license management."
|
1652 |
msgstr ""
|
1653 |
|
1654 |
-
#: templates/connect.php:
|
1655 |
msgid "diagnostic data"
|
1656 |
msgstr ""
|
1657 |
|
1658 |
-
#: templates/connect.php:
|
1659 |
msgid "Freemius is our licensing and software updates engine"
|
1660 |
msgstr ""
|
1661 |
|
1662 |
-
#: templates/connect.php:
|
1663 |
msgid "What permissions are being granted?"
|
1664 |
msgstr ""
|
1665 |
|
1666 |
-
#: templates/connect.php:
|
1667 |
msgid "Don't have a license key?"
|
1668 |
msgstr ""
|
1669 |
|
1670 |
-
#: templates/connect.php:
|
1671 |
msgid "Have a license key?"
|
1672 |
msgstr ""
|
1673 |
|
1674 |
-
#: templates/connect.php:
|
1675 |
msgid "Privacy Policy"
|
1676 |
msgstr ""
|
1677 |
|
1678 |
-
#: templates/connect.php:
|
1679 |
msgid "License Agreement"
|
1680 |
msgstr ""
|
1681 |
|
1682 |
-
#: templates/connect.php:
|
1683 |
msgid "Terms of Service"
|
1684 |
msgstr ""
|
1685 |
|
1686 |
-
#: templates/connect.php:
|
1687 |
msgctxt "as in the process of sending an email"
|
1688 |
msgid "Sending email"
|
1689 |
msgstr ""
|
1690 |
|
1691 |
-
#: templates/connect.php:
|
1692 |
msgctxt "as activating plugin"
|
1693 |
msgid "Activating"
|
1694 |
msgstr ""
|
@@ -1716,7 +1708,7 @@ msgctxt "as code debugging"
|
|
1716 |
msgid "Debugging"
|
1717 |
msgstr ""
|
1718 |
|
1719 |
-
#: templates/debug.php:52, templates/debug.php:
|
1720 |
msgid "Actions"
|
1721 |
msgstr ""
|
1722 |
|
@@ -1736,210 +1728,206 @@ msgstr ""
|
|
1736 |
msgid "Clear Updates Transients"
|
1737 |
msgstr ""
|
1738 |
|
1739 |
-
#: templates/debug.php:
|
1740 |
-
msgid "Reset Deactivation Snoozing"
|
1741 |
-
msgstr ""
|
1742 |
-
|
1743 |
-
#: templates/debug.php:94
|
1744 |
msgid "Sync Data From Server"
|
1745 |
msgstr ""
|
1746 |
|
1747 |
-
#: templates/debug.php:
|
1748 |
msgid "Migrate Options to Network"
|
1749 |
msgstr ""
|
1750 |
|
1751 |
-
#: templates/debug.php:
|
1752 |
msgid "Load DB Option"
|
1753 |
msgstr ""
|
1754 |
|
1755 |
-
#: templates/debug.php:
|
1756 |
msgid "Set DB Option"
|
1757 |
msgstr ""
|
1758 |
|
1759 |
-
#: templates/debug.php:
|
1760 |
msgid "Key"
|
1761 |
msgstr ""
|
1762 |
|
1763 |
-
#: templates/debug.php:
|
1764 |
msgid "Value"
|
1765 |
msgstr ""
|
1766 |
|
1767 |
-
#: templates/debug.php:
|
1768 |
msgctxt "as software development kit versions"
|
1769 |
msgid "SDK Versions"
|
1770 |
msgstr ""
|
1771 |
|
1772 |
-
#: templates/debug.php:
|
1773 |
msgid "SDK Path"
|
1774 |
msgstr ""
|
1775 |
|
1776 |
-
#: templates/debug.php:
|
1777 |
msgid "Module Path"
|
1778 |
msgstr ""
|
1779 |
|
1780 |
-
#: templates/debug.php:
|
1781 |
msgid "Is Active"
|
1782 |
msgstr ""
|
1783 |
|
1784 |
-
#: templates/debug.php:
|
1785 |
msgid "Plugins"
|
1786 |
msgstr ""
|
1787 |
|
1788 |
-
#: templates/debug.php:
|
1789 |
msgid "Themes"
|
1790 |
msgstr ""
|
1791 |
|
1792 |
-
#: templates/debug.php:
|
1793 |
msgid "Slug"
|
1794 |
msgstr ""
|
1795 |
|
1796 |
-
#: templates/debug.php:
|
1797 |
msgid "Title"
|
1798 |
msgstr ""
|
1799 |
|
1800 |
-
#: templates/debug.php:
|
1801 |
msgctxt "as application program interface"
|
1802 |
msgid "API"
|
1803 |
msgstr ""
|
1804 |
|
1805 |
-
#: templates/debug.php:
|
1806 |
msgid "Freemius State"
|
1807 |
msgstr ""
|
1808 |
|
1809 |
-
#: templates/debug.php:
|
1810 |
msgid "Network Blog"
|
1811 |
msgstr ""
|
1812 |
|
1813 |
-
#: templates/debug.php:
|
1814 |
msgid "Network User"
|
1815 |
msgstr ""
|
1816 |
|
1817 |
-
#: templates/debug.php:
|
1818 |
msgctxt "as connection was successful"
|
1819 |
msgid "Connected"
|
1820 |
msgstr ""
|
1821 |
|
1822 |
-
#: templates/debug.php:
|
1823 |
msgctxt "as connection blocked"
|
1824 |
msgid "Blocked"
|
1825 |
msgstr ""
|
1826 |
|
1827 |
-
#: templates/debug.php:
|
1828 |
msgid "Simulate Trial Promotion"
|
1829 |
msgstr ""
|
1830 |
|
1831 |
-
#: templates/debug.php:
|
1832 |
msgid "Simulate Network Upgrade"
|
1833 |
msgstr ""
|
1834 |
|
1835 |
-
#: templates/debug.php:
|
1836 |
msgid "%s Installs"
|
1837 |
msgstr ""
|
1838 |
|
1839 |
-
#: templates/debug.php:
|
1840 |
msgctxt "like websites"
|
1841 |
msgid "Sites"
|
1842 |
msgstr ""
|
1843 |
|
1844 |
-
#: templates/debug.php:
|
1845 |
msgid "Blog ID"
|
1846 |
msgstr ""
|
1847 |
|
1848 |
-
#: templates/debug.php:
|
1849 |
msgid "License ID"
|
1850 |
msgstr ""
|
1851 |
|
1852 |
-
#: templates/debug.php:
|
1853 |
msgctxt "verb"
|
1854 |
msgid "Delete"
|
1855 |
msgstr ""
|
1856 |
|
1857 |
-
#: templates/debug.php:
|
1858 |
msgid "Add Ons of module %s"
|
1859 |
msgstr ""
|
1860 |
|
1861 |
-
#: templates/debug.php:
|
1862 |
msgid "Users"
|
1863 |
msgstr ""
|
1864 |
|
1865 |
-
#: templates/debug.php:
|
1866 |
msgid "Verified"
|
1867 |
msgstr ""
|
1868 |
|
1869 |
-
#: templates/debug.php:
|
1870 |
msgid "%s Licenses"
|
1871 |
msgstr ""
|
1872 |
|
1873 |
-
#: templates/debug.php:
|
1874 |
msgid "Plugin ID"
|
1875 |
msgstr ""
|
1876 |
|
1877 |
-
#: templates/debug.php:
|
1878 |
msgid "Plan ID"
|
1879 |
msgstr ""
|
1880 |
|
1881 |
-
#: templates/debug.php:
|
1882 |
msgid "Quota"
|
1883 |
msgstr ""
|
1884 |
|
1885 |
-
#: templates/debug.php:
|
1886 |
msgid "Activated"
|
1887 |
msgstr ""
|
1888 |
|
1889 |
-
#: templates/debug.php:
|
1890 |
msgid "Blocking"
|
1891 |
msgstr ""
|
1892 |
|
1893 |
-
#: templates/debug.php:
|
1894 |
msgid "Type"
|
1895 |
msgstr ""
|
1896 |
|
1897 |
-
#: templates/debug.php:
|
1898 |
msgctxt "as expiration date"
|
1899 |
msgid "Expiration"
|
1900 |
msgstr ""
|
1901 |
|
1902 |
-
#: templates/debug.php:
|
1903 |
msgid "Debug Log"
|
1904 |
msgstr ""
|
1905 |
|
1906 |
-
#: templates/debug.php:
|
1907 |
msgid "All Types"
|
1908 |
msgstr ""
|
1909 |
|
1910 |
-
#: templates/debug.php:
|
1911 |
msgid "All Requests"
|
1912 |
msgstr ""
|
1913 |
|
1914 |
-
#: templates/debug.php:
|
1915 |
msgid "File"
|
1916 |
msgstr ""
|
1917 |
|
1918 |
-
#: templates/debug.php:
|
1919 |
msgid "Function"
|
1920 |
msgstr ""
|
1921 |
|
1922 |
-
#: templates/debug.php:
|
1923 |
msgid "Process ID"
|
1924 |
msgstr ""
|
1925 |
|
1926 |
-
#: templates/debug.php:
|
1927 |
msgid "Logger"
|
1928 |
msgstr ""
|
1929 |
|
1930 |
-
#: templates/debug.php:
|
1931 |
msgid "Message"
|
1932 |
msgstr ""
|
1933 |
|
1934 |
-
#: templates/debug.php:
|
1935 |
msgid "Filter"
|
1936 |
msgstr ""
|
1937 |
|
1938 |
-
#: templates/debug.php:
|
1939 |
msgid "Download"
|
1940 |
msgstr ""
|
1941 |
|
1942 |
-
#: templates/debug.php:
|
1943 |
msgid "Timestamp"
|
1944 |
msgstr ""
|
1945 |
|
@@ -1964,120 +1952,6 @@ msgstr ""
|
|
1964 |
msgid "Requests"
|
1965 |
msgstr ""
|
1966 |
|
1967 |
-
#: includes/managers/class-fs-clone-manager.php:703
|
1968 |
-
msgid "Invalid clone resolution action."
|
1969 |
-
msgstr ""
|
1970 |
-
|
1971 |
-
#: includes/managers/class-fs-clone-manager.php:851
|
1972 |
-
msgid "products"
|
1973 |
-
msgstr ""
|
1974 |
-
|
1975 |
-
#: includes/managers/class-fs-clone-manager.php:1033
|
1976 |
-
msgid "%1$s has been placed into safe mode because we noticed that %2$s is an exact copy of %3$s."
|
1977 |
-
msgstr ""
|
1978 |
-
|
1979 |
-
#: includes/managers/class-fs-clone-manager.php:1039
|
1980 |
-
msgid "The products below have been placed into safe mode because we noticed that %2$s is an exact copy of %3$s:%1$s"
|
1981 |
-
msgstr ""
|
1982 |
-
|
1983 |
-
#: includes/managers/class-fs-clone-manager.php:1040
|
1984 |
-
msgid "The products below have been placed into safe mode because we noticed that %2$s is an exact copy of these sites:%3$s%1$s"
|
1985 |
-
msgstr ""
|
1986 |
-
|
1987 |
-
#: includes/managers/class-fs-clone-manager.php:1066
|
1988 |
-
msgid "the above-mentioned sites"
|
1989 |
-
msgstr ""
|
1990 |
-
|
1991 |
-
#: includes/managers/class-fs-clone-manager.php:1079
|
1992 |
-
msgid "Is %2$s a duplicate of %4$s?"
|
1993 |
-
msgstr ""
|
1994 |
-
|
1995 |
-
#: includes/managers/class-fs-clone-manager.php:1080
|
1996 |
-
msgid "Yes, %2$s is a duplicate of %4$s for the purpose of testing, staging, or development."
|
1997 |
-
msgstr ""
|
1998 |
-
|
1999 |
-
#: includes/managers/class-fs-clone-manager.php:1085
|
2000 |
-
msgid "Long-Term Duplicate"
|
2001 |
-
msgstr ""
|
2002 |
-
|
2003 |
-
#: includes/managers/class-fs-clone-manager.php:1090
|
2004 |
-
msgid "Duplicate Website"
|
2005 |
-
msgstr ""
|
2006 |
-
|
2007 |
-
#: includes/managers/class-fs-clone-manager.php:1096
|
2008 |
-
msgid "Is %2$s the new home of %4$s?"
|
2009 |
-
msgstr ""
|
2010 |
-
|
2011 |
-
#: includes/managers/class-fs-clone-manager.php:1098
|
2012 |
-
msgid "Yes, %%2$s is replacing %%4$s. I would like to migrate my %s from %%4$s to %%2$s."
|
2013 |
-
msgstr ""
|
2014 |
-
|
2015 |
-
#: includes/managers/class-fs-clone-manager.php:1099, templates/forms/subscription-cancellation.php:52
|
2016 |
-
msgid "license"
|
2017 |
-
msgstr ""
|
2018 |
-
|
2019 |
-
#: includes/managers/class-fs-clone-manager.php:1099
|
2020 |
-
msgid "data"
|
2021 |
-
msgstr ""
|
2022 |
-
|
2023 |
-
#: includes/managers/class-fs-clone-manager.php:1105
|
2024 |
-
msgid "Migrate License"
|
2025 |
-
msgstr ""
|
2026 |
-
|
2027 |
-
#: includes/managers/class-fs-clone-manager.php:1106
|
2028 |
-
msgid "Migrate"
|
2029 |
-
msgstr ""
|
2030 |
-
|
2031 |
-
#: includes/managers/class-fs-clone-manager.php:1112
|
2032 |
-
msgid "Is %2$s a new website?"
|
2033 |
-
msgstr ""
|
2034 |
-
|
2035 |
-
#: includes/managers/class-fs-clone-manager.php:1113
|
2036 |
-
msgid "Yes, %2$s is a new and different website that is separate from %4$s."
|
2037 |
-
msgstr ""
|
2038 |
-
|
2039 |
-
#: includes/managers/class-fs-clone-manager.php:1115
|
2040 |
-
msgid "It requires license activation."
|
2041 |
-
msgstr ""
|
2042 |
-
|
2043 |
-
#: includes/managers/class-fs-clone-manager.php:1122
|
2044 |
-
msgid "New Website"
|
2045 |
-
msgstr ""
|
2046 |
-
|
2047 |
-
#: includes/managers/class-fs-clone-manager.php:1145
|
2048 |
-
msgctxt "Clone resolution admin notice products list label"
|
2049 |
-
msgid "Products"
|
2050 |
-
msgstr ""
|
2051 |
-
|
2052 |
-
#: includes/managers/class-fs-clone-manager.php:1230
|
2053 |
-
msgid "You marked this website, %s, as a temporary duplicate of %s."
|
2054 |
-
msgstr ""
|
2055 |
-
|
2056 |
-
#: includes/managers/class-fs-clone-manager.php:1231
|
2057 |
-
msgid "You marked this website, %s, as a temporary duplicate of these sites"
|
2058 |
-
msgstr ""
|
2059 |
-
|
2060 |
-
#: includes/managers/class-fs-clone-manager.php:1245
|
2061 |
-
msgid "%s automatic security & feature updates and paid functionality will keep working without interruptions until %s (or when your license expires, whatever comes first)."
|
2062 |
-
msgstr ""
|
2063 |
-
|
2064 |
-
#: includes/managers/class-fs-clone-manager.php:1248
|
2065 |
-
msgctxt "\"The <product_label>\", e.g.: \"The plugin\""
|
2066 |
-
msgid "The %s's"
|
2067 |
-
msgstr ""
|
2068 |
-
|
2069 |
-
#: includes/managers/class-fs-clone-manager.php:1251
|
2070 |
-
msgid "The following products'"
|
2071 |
-
msgstr ""
|
2072 |
-
|
2073 |
-
#: includes/managers/class-fs-clone-manager.php:1259
|
2074 |
-
msgid "If this is a long term duplicate, to keep automatic updates and paid functionality after %s, please %s."
|
2075 |
-
msgstr ""
|
2076 |
-
|
2077 |
-
#: includes/managers/class-fs-clone-manager.php:1261
|
2078 |
-
msgid "activate a license here"
|
2079 |
-
msgstr ""
|
2080 |
-
|
2081 |
#: templates/account/billing.php:22
|
2082 |
msgctxt "verb"
|
2083 |
msgid "Update"
|
@@ -2387,51 +2261,6 @@ msgstr ""
|
|
2387 |
msgid "User key"
|
2388 |
msgstr ""
|
2389 |
|
2390 |
-
#: templates/forms/email-address-update.php:32
|
2391 |
-
msgid "Email address update"
|
2392 |
-
msgstr ""
|
2393 |
-
|
2394 |
-
#: templates/forms/email-address-update.php:33, templates/forms/user-change.php:81
|
2395 |
-
msgctxt "close window"
|
2396 |
-
msgid "Dismiss"
|
2397 |
-
msgstr ""
|
2398 |
-
|
2399 |
-
#: templates/forms/email-address-update.php:38
|
2400 |
-
msgid "Enter the new email address"
|
2401 |
-
msgstr ""
|
2402 |
-
|
2403 |
-
#: templates/forms/email-address-update.php:42
|
2404 |
-
msgid "Are both %s and %s your email addresses?"
|
2405 |
-
msgstr ""
|
2406 |
-
|
2407 |
-
#: templates/forms/email-address-update.php:50
|
2408 |
-
msgid "Yes - both addresses are mine"
|
2409 |
-
msgstr ""
|
2410 |
-
|
2411 |
-
#: templates/forms/email-address-update.php:57
|
2412 |
-
msgid "%s is my client's email address"
|
2413 |
-
msgstr ""
|
2414 |
-
|
2415 |
-
#: templates/forms/email-address-update.php:66
|
2416 |
-
msgid "%s is my email address"
|
2417 |
-
msgstr ""
|
2418 |
-
|
2419 |
-
#: templates/forms/email-address-update.php:75
|
2420 |
-
msgid "Would you like to merge %s into %s?"
|
2421 |
-
msgstr ""
|
2422 |
-
|
2423 |
-
#: templates/forms/email-address-update.php:84
|
2424 |
-
msgid "Yes - move all my data and assets from %s to %s"
|
2425 |
-
msgstr ""
|
2426 |
-
|
2427 |
-
#: templates/forms/email-address-update.php:94
|
2428 |
-
msgid "No - only move this site's data to %s"
|
2429 |
-
msgstr ""
|
2430 |
-
|
2431 |
-
#: templates/forms/email-address-update.php:292, templates/forms/email-address-update.php:298
|
2432 |
-
msgid "Update"
|
2433 |
-
msgstr ""
|
2434 |
-
|
2435 |
#: templates/forms/license-activation.php:23
|
2436 |
msgid "Please enter the license key that you received in the email right after the purchase:"
|
2437 |
msgstr ""
|
@@ -2444,7 +2273,7 @@ msgstr ""
|
|
2444 |
msgid "The %1$s will be periodically sending data to %2$s to check for security and feature updates, and verify the validity of your license."
|
2445 |
msgstr ""
|
2446 |
|
2447 |
-
#: templates/forms/license-activation.php:
|
2448 |
msgid "Associate with the license owner's account."
|
2449 |
msgstr ""
|
2450 |
|
@@ -2527,6 +2356,10 @@ msgstr ""
|
|
2527 |
msgid "In case you are NOT planning on using this %s on this site (or any other site) - would you like to cancel the %s as well?"
|
2528 |
msgstr ""
|
2529 |
|
|
|
|
|
|
|
|
|
2530 |
#: templates/forms/subscription-cancellation.php:57
|
2531 |
msgid "Cancel %s - I no longer need any security & feature updates, nor support for %s because I'm not planning to use the %s on this, or any other site."
|
2532 |
msgstr ""
|
@@ -2547,7 +2380,7 @@ msgstr ""
|
|
2547 |
msgid "Proceed"
|
2548 |
msgstr ""
|
2549 |
|
2550 |
-
#: templates/forms/subscription-cancellation.php:191, templates/forms/deactivation/form.php:
|
2551 |
msgid "Cancel %s & Proceed"
|
2552 |
msgstr ""
|
2553 |
|
@@ -2571,6 +2404,11 @@ msgstr ""
|
|
2571 |
msgid "Enter email address"
|
2572 |
msgstr ""
|
2573 |
|
|
|
|
|
|
|
|
|
|
|
2574 |
#: templates/js/style-premium-theme.php:39
|
2575 |
msgid "Premium"
|
2576 |
msgstr ""
|
@@ -2665,63 +2503,47 @@ msgstr ""
|
|
2665 |
msgid "Contact Support"
|
2666 |
msgstr ""
|
2667 |
|
2668 |
-
#: templates/forms/deactivation/form.php:
|
2669 |
msgid "Anonymous feedback"
|
2670 |
msgstr ""
|
2671 |
|
2672 |
-
#: templates/forms/deactivation/form.php:
|
2673 |
-
msgid "hour"
|
2674 |
-
msgstr ""
|
2675 |
-
|
2676 |
-
#: templates/forms/deactivation/form.php:76
|
2677 |
-
msgid "hours"
|
2678 |
-
msgstr ""
|
2679 |
-
|
2680 |
-
#: templates/forms/deactivation/form.php:81, templates/forms/deactivation/form.php:86
|
2681 |
-
msgid "days"
|
2682 |
-
msgstr ""
|
2683 |
-
|
2684 |
-
#: templates/forms/deactivation/form.php:106
|
2685 |
msgid "Deactivate"
|
2686 |
msgstr ""
|
2687 |
|
2688 |
-
#: templates/forms/deactivation/form.php:
|
2689 |
msgid "Activate %s"
|
2690 |
msgstr ""
|
2691 |
|
2692 |
-
#: templates/forms/deactivation/form.php:
|
2693 |
-
msgid "Submit & %s"
|
2694 |
-
msgstr ""
|
2695 |
-
|
2696 |
-
#: templates/forms/deactivation/form.php:130
|
2697 |
msgid "Quick Feedback"
|
2698 |
msgstr ""
|
2699 |
|
2700 |
-
#: templates/forms/deactivation/form.php:
|
2701 |
msgid "If you have a moment, please let us know why you are %s"
|
2702 |
msgstr ""
|
2703 |
|
2704 |
-
#: templates/forms/deactivation/form.php:
|
2705 |
msgid "deactivating"
|
2706 |
msgstr ""
|
2707 |
|
2708 |
-
#: templates/forms/deactivation/form.php:
|
2709 |
msgid "switching"
|
2710 |
msgstr ""
|
2711 |
|
2712 |
-
#: templates/forms/deactivation/form.php:
|
2713 |
-
msgid "
|
2714 |
msgstr ""
|
2715 |
|
2716 |
-
#: templates/forms/deactivation/form.php:
|
2717 |
-
msgid "
|
2718 |
msgstr ""
|
2719 |
|
2720 |
-
#: templates/forms/deactivation/form.php:
|
2721 |
msgid "Yes - %s"
|
2722 |
msgstr ""
|
2723 |
|
2724 |
-
#: templates/forms/deactivation/form.php:
|
2725 |
msgid "Skip & %s"
|
2726 |
msgstr ""
|
2727 |
|
1 |
+
# Copyright (C) 2021 freemius
|
2 |
# This file is distributed under the same license as the freemius package.
|
3 |
msgid ""
|
4 |
msgstr ""
|
16 |
"X-Poedit-SourceCharset: UTF-8\n"
|
17 |
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
18 |
|
19 |
+
#: includes/class-freemius.php:1919, templates/account.php:912
|
20 |
msgid "An update to a Beta version will replace your installed version of %s with the latest Beta release - use with caution, and not on production sites. You have been warned."
|
21 |
msgstr ""
|
22 |
|
23 |
+
#: includes/class-freemius.php:1926
|
24 |
msgid "Would you like to proceed with the update?"
|
25 |
msgstr ""
|
26 |
|
27 |
+
#: includes/class-freemius.php:2138
|
28 |
msgid "Freemius SDK couldn't find the plugin's main file. Please contact sdk@freemius.com with the current error."
|
29 |
msgstr ""
|
30 |
|
31 |
+
#: includes/class-freemius.php:2140
|
32 |
msgid "Error"
|
33 |
msgstr ""
|
34 |
|
35 |
+
#: includes/class-freemius.php:2540
|
36 |
msgid "I found a better %s"
|
37 |
msgstr ""
|
38 |
|
39 |
+
#: includes/class-freemius.php:2542
|
40 |
msgid "What's the %s's name?"
|
41 |
msgstr ""
|
42 |
|
43 |
+
#: includes/class-freemius.php:2548
|
44 |
+
msgid "It's a temporary %s. I'm just debugging an issue."
|
45 |
msgstr ""
|
46 |
|
47 |
+
#: includes/class-freemius.php:2550
|
48 |
msgid "Deactivation"
|
49 |
msgstr ""
|
50 |
|
51 |
+
#: includes/class-freemius.php:2551
|
52 |
msgid "Theme Switch"
|
53 |
msgstr ""
|
54 |
|
55 |
+
#: includes/class-freemius.php:2560, templates/forms/resend-key.php:24, templates/forms/user-change.php:29
|
56 |
msgid "Other"
|
57 |
msgstr ""
|
58 |
|
59 |
+
#: includes/class-freemius.php:2568
|
60 |
msgid "I no longer need the %s"
|
61 |
msgstr ""
|
62 |
|
63 |
+
#: includes/class-freemius.php:2575
|
64 |
msgid "I only needed the %s for a short period"
|
65 |
msgstr ""
|
66 |
|
67 |
+
#: includes/class-freemius.php:2581
|
68 |
msgid "The %s broke my site"
|
69 |
msgstr ""
|
70 |
|
71 |
+
#: includes/class-freemius.php:2588
|
72 |
msgid "The %s suddenly stopped working"
|
73 |
msgstr ""
|
74 |
|
75 |
+
#: includes/class-freemius.php:2598
|
76 |
msgid "I can't pay for it anymore"
|
77 |
msgstr ""
|
78 |
|
79 |
+
#: includes/class-freemius.php:2600
|
80 |
msgid "What price would you feel comfortable paying?"
|
81 |
msgstr ""
|
82 |
|
83 |
+
#: includes/class-freemius.php:2606
|
84 |
msgid "I don't like to share my information with you"
|
85 |
msgstr ""
|
86 |
|
87 |
+
#: includes/class-freemius.php:2627
|
88 |
msgid "The %s didn't work"
|
89 |
msgstr ""
|
90 |
|
91 |
+
#: includes/class-freemius.php:2637
|
92 |
msgid "I couldn't understand how to make it work"
|
93 |
msgstr ""
|
94 |
|
95 |
+
#: includes/class-freemius.php:2645
|
96 |
msgid "The %s is great, but I need specific feature that you don't support"
|
97 |
msgstr ""
|
98 |
|
99 |
+
#: includes/class-freemius.php:2647
|
100 |
msgid "What feature?"
|
101 |
msgstr ""
|
102 |
|
103 |
+
#: includes/class-freemius.php:2651
|
104 |
msgid "The %s is not working"
|
105 |
msgstr ""
|
106 |
|
107 |
+
#: includes/class-freemius.php:2653
|
108 |
msgid "Kindly share what didn't work so we can fix it for future users..."
|
109 |
msgstr ""
|
110 |
|
111 |
+
#: includes/class-freemius.php:2657
|
112 |
msgid "It's not what I was looking for"
|
113 |
msgstr ""
|
114 |
|
115 |
+
#: includes/class-freemius.php:2659
|
116 |
msgid "What you've been looking for?"
|
117 |
msgstr ""
|
118 |
|
119 |
+
#: includes/class-freemius.php:2663
|
120 |
msgid "The %s didn't work as expected"
|
121 |
msgstr ""
|
122 |
|
123 |
+
#: includes/class-freemius.php:2665
|
124 |
msgid "What did you expect?"
|
125 |
msgstr ""
|
126 |
|
127 |
+
#: includes/class-freemius.php:3520, templates/debug.php:20
|
128 |
msgid "Freemius Debug"
|
129 |
msgstr ""
|
130 |
|
131 |
+
#: includes/class-freemius.php:4272
|
132 |
msgid "I don't know what is cURL or how to install it, help me!"
|
133 |
msgstr ""
|
134 |
|
135 |
+
#: includes/class-freemius.php:4274
|
136 |
msgid "We'll make sure to contact your hosting company and resolve the issue. You will get a follow-up email to %s once we have an update."
|
137 |
msgstr ""
|
138 |
|
139 |
+
#: includes/class-freemius.php:4281
|
140 |
msgid "Great, please install cURL and enable it in your php.ini file. In addition, search for the 'disable_functions' directive in your php.ini file and remove any disabled methods starting with 'curl_'. To make sure it was successfully activated, use 'phpinfo()'. Once activated, deactivate the %s and reactivate it back again."
|
141 |
msgstr ""
|
142 |
|
143 |
+
#: includes/class-freemius.php:4386
|
144 |
msgid "Yes - do your thing"
|
145 |
msgstr ""
|
146 |
|
147 |
+
#: includes/class-freemius.php:4391
|
148 |
msgid "No - just deactivate"
|
149 |
msgstr ""
|
150 |
|
151 |
+
#: includes/class-freemius.php:4436, includes/class-freemius.php:4930, includes/class-freemius.php:6191, includes/class-freemius.php:13368, includes/class-freemius.php:14110, includes/class-freemius.php:17542, includes/class-freemius.php:17647, includes/class-freemius.php:17822, includes/class-freemius.php:20056, includes/class-freemius.php:20414, includes/class-freemius.php:20424, includes/class-freemius.php:21109, includes/class-freemius.php:22015, includes/class-freemius.php:22148, includes/class-freemius.php:22304, templates/add-ons.php:57
|
152 |
msgctxt "exclamation"
|
153 |
msgid "Oops"
|
154 |
msgstr ""
|
155 |
|
156 |
+
#: includes/class-freemius.php:4505
|
157 |
msgid "Thank for giving us the chance to fix it! A message was just sent to our technical staff. We will get back to you as soon as we have an update to %s. Appreciate your patience."
|
158 |
msgstr ""
|
159 |
|
160 |
+
#: includes/class-freemius.php:4927
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
161 |
msgctxt "addonX cannot run without pluginY"
|
162 |
msgid "%s cannot run without %s."
|
163 |
msgstr ""
|
164 |
|
165 |
+
#: includes/class-freemius.php:4928
|
166 |
msgctxt "addonX cannot run..."
|
167 |
msgid "%s cannot run without the plugin."
|
168 |
msgstr ""
|
169 |
|
170 |
+
#: includes/class-freemius.php:5127, includes/class-freemius.php:5152, includes/class-freemius.php:21180
|
171 |
msgid "Unexpected API error. Please contact the %s's author with the following error."
|
172 |
msgstr ""
|
173 |
|
174 |
+
#: includes/class-freemius.php:5857
|
175 |
msgid "Premium %s version was successfully activated."
|
176 |
msgstr ""
|
177 |
|
178 |
+
#: includes/class-freemius.php:5869, includes/class-freemius.php:7774
|
179 |
msgctxt "Used to express elation, enthusiasm, or triumph (especially in electronic communication)."
|
180 |
msgid "W00t"
|
181 |
msgstr ""
|
182 |
|
183 |
+
#: includes/class-freemius.php:5884
|
184 |
msgid "You have a %s license."
|
185 |
msgstr ""
|
186 |
|
187 |
+
#: includes/class-freemius.php:5888, includes/class-freemius.php:16947, includes/class-freemius.php:16958, includes/class-freemius.php:20325, includes/class-freemius.php:20689, includes/class-freemius.php:20758, includes/class-freemius.php:20930
|
188 |
+
msgctxt "interjection expressing joy or exuberance"
|
189 |
+
msgid "Yee-haw"
|
190 |
+
msgstr ""
|
191 |
+
|
192 |
+
#: includes/class-freemius.php:6174
|
193 |
msgid "%s free trial was successfully cancelled. Since the add-on is premium only it was automatically deactivated. If you like to use it in the future, you'll have to purchase a license."
|
194 |
msgstr ""
|
195 |
|
196 |
+
#: includes/class-freemius.php:6178
|
197 |
msgid "%s is a premium only add-on. You have to purchase a license first before activating the plugin."
|
198 |
msgstr ""
|
199 |
|
200 |
+
#: includes/class-freemius.php:6187, templates/add-ons.php:186, templates/account/partials/addon.php:381
|
201 |
msgid "More information about %s"
|
202 |
msgstr ""
|
203 |
|
204 |
+
#: includes/class-freemius.php:6188
|
205 |
msgid "Purchase License"
|
206 |
msgstr ""
|
207 |
|
208 |
+
#: includes/class-freemius.php:7125, templates/connect.php:171
|
209 |
msgid "You should receive an activation email for %s to your mailbox at %s. Please make sure you click the activation button in that email to %s."
|
210 |
msgstr ""
|
211 |
|
212 |
+
#: includes/class-freemius.php:7129
|
213 |
msgid "start the trial"
|
214 |
msgstr ""
|
215 |
|
216 |
+
#: includes/class-freemius.php:7130, templates/connect.php:175
|
217 |
msgid "complete the install"
|
218 |
msgstr ""
|
219 |
|
220 |
+
#: includes/class-freemius.php:7249
|
221 |
msgid "You are just one step away - %s"
|
222 |
msgstr ""
|
223 |
|
224 |
+
#: includes/class-freemius.php:7252
|
225 |
msgctxt "%s - plugin name. As complete \"PluginX\" activation now"
|
226 |
msgid "Complete \"%s\" Activation Now"
|
227 |
msgstr ""
|
228 |
|
229 |
+
#: includes/class-freemius.php:7334
|
230 |
msgid "We made a few tweaks to the %s, %s"
|
231 |
msgstr ""
|
232 |
|
233 |
+
#: includes/class-freemius.php:7338
|
234 |
msgid "Opt in to make \"%s\" better!"
|
235 |
msgstr ""
|
236 |
|
237 |
+
#: includes/class-freemius.php:7773
|
238 |
msgid "The upgrade of %s was successfully completed."
|
239 |
msgstr ""
|
240 |
|
241 |
+
#: includes/class-freemius.php:10255, includes/class-fs-plugin-updater.php:1087, includes/class-fs-plugin-updater.php:1282, includes/class-fs-plugin-updater.php:1289, templates/auto-installation.php:32
|
242 |
msgid "Add-On"
|
243 |
msgstr ""
|
244 |
|
245 |
+
#: includes/class-freemius.php:10257, templates/account.php:394, templates/account.php:402, templates/debug.php:358, templates/debug.php:549
|
246 |
msgid "Plugin"
|
247 |
msgstr ""
|
248 |
|
249 |
+
#: includes/class-freemius.php:10258, templates/account.php:395, templates/account.php:403, templates/debug.php:358, templates/debug.php:549, templates/forms/deactivation/form.php:71
|
250 |
msgid "Theme"
|
251 |
msgstr ""
|
252 |
|
253 |
+
#: includes/class-freemius.php:13188
|
254 |
msgid "An unknown error has occurred while trying to toggle the license's white-label mode."
|
255 |
msgstr ""
|
256 |
|
257 |
+
#: includes/class-freemius.php:13202
|
258 |
msgid "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."
|
259 |
msgstr ""
|
260 |
|
261 |
+
#: includes/class-freemius.php:13207
|
262 |
msgid "User Dashboard"
|
263 |
msgstr ""
|
264 |
|
265 |
+
#: includes/class-freemius.php:13208
|
266 |
msgid "revert it now"
|
267 |
msgstr ""
|
268 |
|
269 |
+
#: includes/class-freemius.php:13266
|
270 |
msgid "An unknown error has occurred while trying to set the user's beta mode."
|
271 |
msgstr ""
|
272 |
|
273 |
+
#: includes/class-freemius.php:13339
|
274 |
msgid "Invalid new user ID or email address."
|
275 |
msgstr ""
|
276 |
|
277 |
+
#: includes/class-freemius.php:13369, includes/class-freemius.php:22259
|
278 |
msgid "Sorry, we could not complete the email update. Another user with the same email is already registered."
|
279 |
msgstr ""
|
280 |
|
281 |
+
#: includes/class-freemius.php:13370, includes/class-freemius.php:22260
|
282 |
msgid "If you would like to give up the ownership of the %s's account to %s click the Change Ownership button."
|
283 |
msgstr ""
|
284 |
|
285 |
+
#: includes/class-freemius.php:13377, includes/class-freemius.php:22267
|
286 |
msgid "Change Ownership"
|
287 |
msgstr ""
|
288 |
|
289 |
+
#: includes/class-freemius.php:13977
|
290 |
msgid "Invalid site details collection."
|
291 |
msgstr ""
|
292 |
|
293 |
+
#: includes/class-freemius.php:14097
|
294 |
msgid "We couldn't find your email address in the system, are you sure it's the right address?"
|
295 |
msgstr ""
|
296 |
|
297 |
+
#: includes/class-freemius.php:14099
|
298 |
msgid "We can't see any active licenses associated with that email address, are you sure it's the right address?"
|
299 |
msgstr ""
|
300 |
|
301 |
+
#: includes/class-freemius.php:14373
|
302 |
msgid "Account is pending activation."
|
303 |
msgstr ""
|
304 |
|
305 |
+
#: includes/class-freemius.php:14485, templates/forms/premium-versions-upgrade-handler.php:47
|
306 |
msgid "Buy a license now"
|
307 |
msgstr ""
|
308 |
|
309 |
+
#: includes/class-freemius.php:14497, templates/forms/premium-versions-upgrade-handler.php:46
|
310 |
msgid "Renew your license now"
|
311 |
msgstr ""
|
312 |
|
313 |
+
#: includes/class-freemius.php:14501
|
314 |
msgid "%s to access version %s security & feature updates, and support."
|
315 |
msgstr ""
|
316 |
|
317 |
+
#: includes/class-freemius.php:16929
|
318 |
msgid "%s activation was successfully completed."
|
319 |
msgstr ""
|
320 |
|
321 |
+
#: includes/class-freemius.php:16943
|
322 |
msgid "Your account was successfully activated with the %s plan."
|
323 |
msgstr ""
|
324 |
|
325 |
+
#: includes/class-freemius.php:16954, includes/class-freemius.php:20754
|
326 |
msgid "Your trial has been successfully started."
|
327 |
msgstr ""
|
328 |
|
329 |
+
#: includes/class-freemius.php:17540, includes/class-freemius.php:17645, includes/class-freemius.php:17820
|
330 |
msgid "Couldn't activate %s."
|
331 |
msgstr ""
|
332 |
|
333 |
+
#: includes/class-freemius.php:17541, includes/class-freemius.php:17646, includes/class-freemius.php:17821
|
334 |
msgid "Please contact us with the following message:"
|
335 |
msgstr ""
|
336 |
|
337 |
+
#: includes/class-freemius.php:17642, templates/forms/data-debug-mode.php:162
|
338 |
msgid "An unknown error has occurred."
|
339 |
msgstr ""
|
340 |
|
341 |
+
#: includes/class-freemius.php:18178, includes/class-freemius.php:23340
|
342 |
msgid "Upgrade"
|
343 |
msgstr ""
|
344 |
|
345 |
+
#: includes/class-freemius.php:18184
|
346 |
msgid "Start Trial"
|
347 |
msgstr ""
|
348 |
|
349 |
+
#: includes/class-freemius.php:18186
|
350 |
msgid "Pricing"
|
351 |
msgstr ""
|
352 |
|
353 |
+
#: includes/class-freemius.php:18266, includes/class-freemius.php:18268
|
354 |
msgid "Affiliation"
|
355 |
msgstr ""
|
356 |
|
357 |
+
#: includes/class-freemius.php:18296, includes/class-freemius.php:18298, templates/account.php:242, templates/debug.php:324
|
358 |
msgid "Account"
|
359 |
msgstr ""
|
360 |
|
361 |
+
#: includes/class-freemius.php:18312, includes/class-freemius.php:18314, includes/customizer/class-fs-customizer-support-section.php:60
|
362 |
msgid "Contact Us"
|
363 |
msgstr ""
|
364 |
|
365 |
+
#: includes/class-freemius.php:18325, includes/class-freemius.php:18327, includes/class-freemius.php:23354, templates/account.php:121, templates/account/partials/addon.php:44
|
366 |
msgid "Add-Ons"
|
367 |
msgstr ""
|
368 |
|
369 |
+
#: includes/class-freemius.php:18361
|
370 |
msgctxt "ASCII arrow left icon"
|
371 |
msgid "←"
|
372 |
msgstr ""
|
373 |
|
374 |
+
#: includes/class-freemius.php:18361
|
375 |
msgctxt "ASCII arrow right icon"
|
376 |
msgid "➤"
|
377 |
msgstr ""
|
378 |
|
379 |
+
#: includes/class-freemius.php:18363, templates/pricing.php:109
|
380 |
msgctxt "noun"
|
381 |
msgid "Pricing"
|
382 |
msgstr ""
|
383 |
|
384 |
+
#: includes/class-freemius.php:18576, includes/customizer/class-fs-customizer-support-section.php:67
|
385 |
msgid "Support Forum"
|
386 |
msgstr ""
|
387 |
|
388 |
+
#: includes/class-freemius.php:19550
|
389 |
msgid "Your email has been successfully verified - you are AWESOME!"
|
390 |
msgstr ""
|
391 |
|
392 |
+
#: includes/class-freemius.php:19551
|
393 |
msgctxt "a positive response"
|
394 |
msgid "Right on"
|
395 |
msgstr ""
|
396 |
|
397 |
+
#: includes/class-freemius.php:20057
|
398 |
msgid "seems like the key you entered doesn't match our records."
|
399 |
msgstr ""
|
400 |
|
401 |
+
#: includes/class-freemius.php:20081
|
402 |
msgid "Debug mode was successfully enabled and will be automatically disabled in 60 min. You can also disable it earlier by clicking the \"Stop Debug\" link."
|
403 |
msgstr ""
|
404 |
|
405 |
+
#: includes/class-freemius.php:20316
|
406 |
msgid "Your %s Add-on plan was successfully upgraded."
|
407 |
msgstr ""
|
408 |
|
409 |
+
#: includes/class-freemius.php:20318
|
410 |
msgid "%s Add-on was successfully purchased."
|
411 |
msgstr ""
|
412 |
|
413 |
+
#: includes/class-freemius.php:20321
|
414 |
msgid "Download the latest version"
|
415 |
msgstr ""
|
416 |
|
417 |
+
#: includes/class-freemius.php:20407
|
418 |
msgid "Your server is blocking the access to Freemius' API, which is crucial for %1$s synchronization. Please contact your host to whitelist %2$s"
|
419 |
msgstr ""
|
420 |
|
421 |
+
#: includes/class-freemius.php:20413, includes/class-freemius.php:20423, includes/class-freemius.php:20889, includes/class-freemius.php:20978
|
422 |
msgid "Error received from the server:"
|
423 |
msgstr ""
|
424 |
|
425 |
+
#: includes/class-freemius.php:20423
|
426 |
msgid "It seems like one of the authentication parameters is wrong. Update your Public Key, Secret Key & User ID, and try again."
|
427 |
msgstr ""
|
428 |
|
429 |
+
#: includes/class-freemius.php:20651, includes/class-freemius.php:20894, includes/class-freemius.php:20949, includes/class-freemius.php:21056
|
430 |
msgctxt "something somebody says when they are thinking about what you have just said."
|
431 |
msgid "Hmm"
|
432 |
msgstr ""
|
433 |
|
434 |
+
#: includes/class-freemius.php:20664
|
435 |
msgid "It looks like you are still on the %s plan. If you did upgrade or change your plan, it's probably an issue on our side - sorry."
|
436 |
msgstr ""
|
437 |
|
438 |
+
#: includes/class-freemius.php:20665, templates/account.php:123, templates/add-ons.php:250, templates/account/partials/addon.php:46
|
439 |
msgctxt "trial period"
|
440 |
msgid "Trial"
|
441 |
msgstr ""
|
442 |
|
443 |
+
#: includes/class-freemius.php:20670
|
444 |
msgid "I have upgraded my account but when I try to Sync the License, the plan remains %s."
|
445 |
msgstr ""
|
446 |
|
447 |
+
#: includes/class-freemius.php:20674, includes/class-freemius.php:20733
|
448 |
msgid "Please contact us here"
|
449 |
msgstr ""
|
450 |
|
451 |
+
#: includes/class-freemius.php:20685
|
452 |
msgid "Your plan was successfully activated."
|
453 |
msgstr ""
|
454 |
|
455 |
+
#: includes/class-freemius.php:20686
|
456 |
msgid "Your plan was successfully upgraded."
|
457 |
msgstr ""
|
458 |
|
459 |
+
#: includes/class-freemius.php:20703
|
460 |
msgid "Your plan was successfully changed to %s."
|
461 |
msgstr ""
|
462 |
|
463 |
+
#: includes/class-freemius.php:20719
|
464 |
msgid "Your license has expired. You can still continue using the free %s forever."
|
465 |
msgstr ""
|
466 |
|
467 |
+
#: includes/class-freemius.php:20721
|
468 |
msgid "Your license has expired. %1$sUpgrade now%2$s to continue using the %3$s without interruptions."
|
469 |
msgstr ""
|
470 |
|
471 |
+
#: includes/class-freemius.php:20729
|
472 |
msgid "Your license has been cancelled. If you think it's a mistake, please contact support."
|
473 |
msgstr ""
|
474 |
|
475 |
+
#: includes/class-freemius.php:20742
|
476 |
msgid "Your license has expired. You can still continue using all the %s features, but you'll need to renew your license to continue getting updates and support."
|
477 |
msgstr ""
|
478 |
|
479 |
+
#: includes/class-freemius.php:20768
|
480 |
msgid "Your free trial has expired. You can still continue using all our free features."
|
481 |
msgstr ""
|
482 |
|
483 |
+
#: includes/class-freemius.php:20770
|
484 |
msgid "Your free trial has expired. %1$sUpgrade now%2$s to continue using the %3$s without interruptions."
|
485 |
msgstr ""
|
486 |
|
487 |
+
#: includes/class-freemius.php:20885
|
488 |
msgid "It looks like the license could not be activated."
|
489 |
msgstr ""
|
490 |
|
491 |
+
#: includes/class-freemius.php:20927
|
492 |
msgid "Your license was successfully activated."
|
493 |
msgstr ""
|
494 |
|
495 |
+
#: includes/class-freemius.php:20953
|
496 |
msgid "It looks like your site currently doesn't have an active license."
|
497 |
msgstr ""
|
498 |
|
499 |
+
#: includes/class-freemius.php:20977
|
500 |
msgid "It looks like the license deactivation failed."
|
501 |
msgstr ""
|
502 |
|
503 |
+
#: includes/class-freemius.php:21006
|
504 |
msgid "Your %s license was successfully deactivated."
|
505 |
msgstr ""
|
506 |
|
507 |
+
#: includes/class-freemius.php:21007
|
508 |
msgid "Your license was successfully deactivated, you are back to the %s plan."
|
509 |
msgstr ""
|
510 |
|
511 |
+
#: includes/class-freemius.php:21010
|
512 |
msgid "O.K"
|
513 |
msgstr ""
|
514 |
|
515 |
+
#: includes/class-freemius.php:21063
|
516 |
msgid "Seems like we are having some temporary issue with your subscription cancellation. Please try again in few minutes."
|
517 |
msgstr ""
|
518 |
|
519 |
+
#: includes/class-freemius.php:21072
|
520 |
msgid "Your subscription was successfully cancelled. Your %s plan license will expire in %s."
|
521 |
msgstr ""
|
522 |
|
523 |
+
#: includes/class-freemius.php:21114
|
524 |
msgid "You are already running the %s in a trial mode."
|
525 |
msgstr ""
|
526 |
|
527 |
+
#: includes/class-freemius.php:21125
|
528 |
msgid "You already utilized a trial before."
|
529 |
msgstr ""
|
530 |
|
531 |
+
#: includes/class-freemius.php:21139
|
532 |
msgid "Plan %s do not exist, therefore, can't start a trial."
|
533 |
msgstr ""
|
534 |
|
535 |
+
#: includes/class-freemius.php:21150
|
536 |
msgid "Plan %s does not support a trial period."
|
537 |
msgstr ""
|
538 |
|
539 |
+
#: includes/class-freemius.php:21161
|
540 |
msgid "None of the %s's plans supports a trial period."
|
541 |
msgstr ""
|
542 |
|
543 |
+
#: includes/class-freemius.php:21211
|
544 |
msgid "It looks like you are not in trial mode anymore so there's nothing to cancel :)"
|
545 |
msgstr ""
|
546 |
|
547 |
+
#: includes/class-freemius.php:21247
|
548 |
msgid "Seems like we are having some temporary issue with your trial cancellation. Please try again in few minutes."
|
549 |
msgstr ""
|
550 |
|
551 |
+
#: includes/class-freemius.php:21266
|
552 |
msgid "Your %s free trial was successfully cancelled."
|
553 |
msgstr ""
|
554 |
|
555 |
+
#: includes/class-freemius.php:21582
|
556 |
msgid "Version %s was released."
|
557 |
msgstr ""
|
558 |
|
559 |
+
#: includes/class-freemius.php:21582
|
560 |
msgid "Please download %s."
|
561 |
msgstr ""
|
562 |
|
563 |
+
#: includes/class-freemius.php:21589
|
564 |
msgid "the latest %s version here"
|
565 |
msgstr ""
|
566 |
|
567 |
+
#: includes/class-freemius.php:21594
|
568 |
msgid "New"
|
569 |
msgstr ""
|
570 |
|
571 |
+
#: includes/class-freemius.php:21599
|
572 |
msgid "Seems like you got the latest release."
|
573 |
msgstr ""
|
574 |
|
575 |
+
#: includes/class-freemius.php:21600
|
576 |
msgid "You are all good!"
|
577 |
msgstr ""
|
578 |
|
579 |
+
#: includes/class-freemius.php:21903
|
580 |
msgid "Verification mail was just sent to %s. If you can't find it after 5 min, please check your spam box."
|
581 |
msgstr ""
|
582 |
|
583 |
+
#: includes/class-freemius.php:22043
|
584 |
msgid "Site successfully opted in."
|
585 |
msgstr ""
|
586 |
|
587 |
+
#: includes/class-freemius.php:22044, includes/class-freemius.php:23050
|
588 |
msgid "Awesome"
|
589 |
msgstr ""
|
590 |
|
591 |
+
#: includes/class-freemius.php:22060, templates/forms/optout.php:41
|
592 |
msgid "We appreciate your help in making the %s better by letting us track some usage data."
|
593 |
msgstr ""
|
594 |
|
595 |
+
#: includes/class-freemius.php:22061
|
596 |
msgid "Thank you!"
|
597 |
msgstr ""
|
598 |
|
599 |
+
#: includes/class-freemius.php:22068
|
600 |
msgid "We will no longer be sending any usage data of %s on %s to %s."
|
601 |
msgstr ""
|
602 |
|
603 |
+
#: includes/class-freemius.php:22226
|
604 |
+
msgid "Please check your mailbox, you should receive an email via %s to confirm the ownership change. From security reasons, you must confirm the change within the next 15 min. If you cannot find the email, please check your spam folder."
|
|
|
|
|
|
|
|
|
605 |
msgstr ""
|
606 |
|
607 |
+
#: includes/class-freemius.php:22232
|
608 |
msgid "Thanks for confirming the ownership change. An email was just sent to %s for final approval."
|
609 |
msgstr ""
|
610 |
|
611 |
+
#: includes/class-freemius.php:22237
|
612 |
msgid "%s is the new owner of the account."
|
613 |
msgstr ""
|
614 |
|
615 |
+
#: includes/class-freemius.php:22239
|
616 |
msgctxt "as congratulations"
|
617 |
msgid "Congrats"
|
618 |
msgstr ""
|
619 |
|
620 |
+
#: includes/class-freemius.php:22275
|
621 |
+
msgid "Your email was successfully updated. You should receive an email with confirmation instructions in few moments."
|
622 |
+
msgstr ""
|
623 |
+
|
624 |
+
#: includes/class-freemius.php:22287
|
625 |
msgid "Please provide your full name."
|
626 |
msgstr ""
|
627 |
|
628 |
+
#: includes/class-freemius.php:22292
|
629 |
msgid "Your name was successfully updated."
|
630 |
msgstr ""
|
631 |
|
632 |
+
#: includes/class-freemius.php:22353
|
633 |
msgid "You have successfully updated your %s."
|
634 |
msgstr ""
|
635 |
|
636 |
+
#: includes/class-freemius.php:22412
|
637 |
msgid "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."
|
638 |
msgstr ""
|
639 |
|
640 |
+
#: includes/class-freemius.php:22415
|
641 |
msgid "Click here"
|
642 |
msgstr ""
|
643 |
|
644 |
+
#: includes/class-freemius.php:22513
|
645 |
msgid "Just letting you know that the add-ons information of %s is being pulled from an external server."
|
646 |
msgstr ""
|
647 |
|
648 |
+
#: includes/class-freemius.php:22514
|
649 |
msgctxt "advance notice of something that will need attention."
|
650 |
msgid "Heads up"
|
651 |
msgstr ""
|
652 |
|
653 |
+
#: includes/class-freemius.php:23090
|
654 |
msgctxt "exclamation"
|
655 |
msgid "Hey"
|
656 |
msgstr ""
|
657 |
|
658 |
+
#: includes/class-freemius.php:23090
|
659 |
msgid "How do you like %s so far? Test all our %s premium features with a %d-day free trial."
|
660 |
msgstr ""
|
661 |
|
662 |
+
#: includes/class-freemius.php:23098
|
663 |
msgid "No commitment for %s days - cancel anytime!"
|
664 |
msgstr ""
|
665 |
|
666 |
+
#: includes/class-freemius.php:23099
|
667 |
msgid "No credit card required"
|
668 |
msgstr ""
|
669 |
|
670 |
+
#: includes/class-freemius.php:23106, templates/forms/trial-start.php:53
|
671 |
msgctxt "call to action"
|
672 |
msgid "Start free trial"
|
673 |
msgstr ""
|
674 |
|
675 |
+
#: includes/class-freemius.php:23183
|
676 |
msgid "Hey there, did you know that %s has an affiliate program? If you like the %s you can become our ambassador and earn some cash!"
|
677 |
msgstr ""
|
678 |
|
679 |
+
#: includes/class-freemius.php:23192
|
680 |
msgid "Learn more"
|
681 |
msgstr ""
|
682 |
|
683 |
+
#: includes/class-freemius.php:23378, templates/account.php:558, templates/account.php:708, templates/connect.php:179, templates/connect.php:461, templates/forms/license-activation.php:27, templates/account/partials/addon.php:321
|
684 |
msgid "Activate License"
|
685 |
msgstr ""
|
686 |
|
687 |
+
#: includes/class-freemius.php:23379, templates/account.php:652, templates/account.php:707, templates/account/partials/addon.php:322, templates/account/partials/site.php:271
|
688 |
msgid "Change License"
|
689 |
msgstr ""
|
690 |
|
691 |
+
#: includes/class-freemius.php:23500, templates/account/partials/site.php:169
|
692 |
msgid "Opt Out"
|
693 |
msgstr ""
|
694 |
|
695 |
+
#: includes/class-freemius.php:23502, includes/class-freemius.php:23508, templates/account/partials/site.php:49, templates/account/partials/site.php:169
|
696 |
msgid "Opt In"
|
697 |
msgstr ""
|
698 |
|
699 |
+
#: includes/class-freemius.php:23738
|
700 |
msgid " The paid version of %1$s is already installed. Please activate it to start benefiting the %2$s features. %3$s"
|
701 |
msgstr ""
|
702 |
|
703 |
+
#: includes/class-freemius.php:23746
|
704 |
msgid "Activate %s features"
|
705 |
msgstr ""
|
706 |
|
707 |
+
#: includes/class-freemius.php:23759
|
708 |
msgid "Please follow these steps to complete the upgrade"
|
709 |
msgstr ""
|
710 |
|
711 |
+
#: includes/class-freemius.php:23763
|
712 |
msgid "Download the latest %s version"
|
713 |
msgstr ""
|
714 |
|
715 |
+
#: includes/class-freemius.php:23767
|
716 |
msgid "Upload and activate the downloaded version"
|
717 |
msgstr ""
|
718 |
|
719 |
+
#: includes/class-freemius.php:23769
|
720 |
msgid "How to upload and activate?"
|
721 |
msgstr ""
|
722 |
|
723 |
+
#: includes/class-freemius.php:23903
|
724 |
msgid "%sClick here%s to choose the sites where you'd like to activate the license on."
|
725 |
msgstr ""
|
726 |
|
727 |
+
#: includes/class-freemius.php:24072
|
728 |
msgid "Auto installation only works for opted-in users."
|
729 |
msgstr ""
|
730 |
|
731 |
+
#: includes/class-freemius.php:24082, includes/class-freemius.php:24115, includes/class-fs-plugin-updater.php:1261, includes/class-fs-plugin-updater.php:1275
|
732 |
msgid "Invalid module ID."
|
733 |
msgstr ""
|
734 |
|
735 |
+
#: includes/class-freemius.php:24091, includes/class-fs-plugin-updater.php:1297
|
736 |
msgid "Premium version already active."
|
737 |
msgstr ""
|
738 |
|
739 |
+
#: includes/class-freemius.php:24098
|
740 |
msgid "You do not have a valid license to access the premium version."
|
741 |
msgstr ""
|
742 |
|
743 |
+
#: includes/class-freemius.php:24105
|
744 |
msgid "Plugin is a \"Serviceware\" which means it does not have a premium code version."
|
745 |
msgstr ""
|
746 |
|
747 |
+
#: includes/class-freemius.php:24123, includes/class-fs-plugin-updater.php:1296
|
748 |
msgid "Premium add-on version already installed."
|
749 |
msgstr ""
|
750 |
|
751 |
+
#: includes/class-freemius.php:24473
|
752 |
msgid "View paid features"
|
753 |
msgstr ""
|
754 |
|
755 |
+
#: includes/class-freemius.php:24795
|
756 |
msgid "Thank you so much for using %s and its add-ons!"
|
757 |
msgstr ""
|
758 |
|
759 |
+
#: includes/class-freemius.php:24796
|
760 |
msgid "Thank you so much for using %s!"
|
761 |
msgstr ""
|
762 |
|
763 |
+
#: includes/class-freemius.php:24802
|
764 |
msgid "You've already opted-in to our usage-tracking, which helps us keep improving the %s."
|
765 |
msgstr ""
|
766 |
|
767 |
+
#: includes/class-freemius.php:24806
|
768 |
msgid "Thank you so much for using our products!"
|
769 |
msgstr ""
|
770 |
|
771 |
+
#: includes/class-freemius.php:24807
|
772 |
msgid "You've already opted-in to our usage-tracking, which helps us keep improving them."
|
773 |
msgstr ""
|
774 |
|
775 |
+
#: includes/class-freemius.php:24826
|
776 |
msgid "%s and its add-ons"
|
777 |
msgstr ""
|
778 |
|
779 |
+
#: includes/class-freemius.php:24835
|
780 |
msgid "Products"
|
781 |
msgstr ""
|
782 |
|
783 |
+
#: includes/class-freemius.php:24842, templates/connect.php:275
|
784 |
msgid "Yes"
|
785 |
msgstr ""
|
786 |
|
787 |
+
#: includes/class-freemius.php:24843, templates/connect.php:276
|
788 |
msgid "send me security & feature updates, educational content and offers."
|
789 |
msgstr ""
|
790 |
|
791 |
+
#: includes/class-freemius.php:24844, templates/connect.php:281
|
792 |
msgid "No"
|
793 |
msgstr ""
|
794 |
|
795 |
+
#: includes/class-freemius.php:24846, templates/connect.php:283
|
796 |
msgid "do %sNOT%s send me security & feature updates, educational content and offers."
|
797 |
msgstr ""
|
798 |
|
799 |
+
#: includes/class-freemius.php:24856
|
800 |
msgid "Due to the new %sEU General Data Protection Regulation (GDPR)%s compliance requirements it is required that you provide your explicit consent, again, confirming that you are onboard :-)"
|
801 |
msgstr ""
|
802 |
|
803 |
+
#: includes/class-freemius.php:24858, templates/connect.php:290
|
804 |
msgid "Please let us know if you'd like us to contact you for security & feature updates, educational content, and occasional offers:"
|
805 |
msgstr ""
|
806 |
|
807 |
+
#: includes/class-freemius.php:25140
|
808 |
msgid "License key is empty."
|
809 |
msgstr ""
|
810 |
|
816 |
msgid "Buy license"
|
817 |
msgstr ""
|
818 |
|
819 |
+
#: includes/class-fs-plugin-updater.php:327, includes/class-fs-plugin-updater.php:360
|
820 |
msgid "There is a %s of %s available."
|
821 |
msgstr ""
|
822 |
|
823 |
+
#: includes/class-fs-plugin-updater.php:329, includes/class-fs-plugin-updater.php:365
|
824 |
msgid "new Beta version"
|
825 |
msgstr ""
|
826 |
|
827 |
+
#: includes/class-fs-plugin-updater.php:330, includes/class-fs-plugin-updater.php:366
|
828 |
msgid "new version"
|
829 |
msgstr ""
|
830 |
|
831 |
+
#: includes/class-fs-plugin-updater.php:389
|
832 |
msgid "Important Upgrade Notice:"
|
833 |
msgstr ""
|
834 |
|
835 |
+
#: includes/class-fs-plugin-updater.php:1326
|
836 |
msgid "Installing plugin: %s"
|
837 |
msgstr ""
|
838 |
|
839 |
+
#: includes/class-fs-plugin-updater.php:1367
|
840 |
msgid "Unable to connect to the filesystem. Please confirm your credentials."
|
841 |
msgstr ""
|
842 |
|
843 |
+
#: includes/class-fs-plugin-updater.php:1549
|
844 |
msgid "The remote plugin package does not contain a folder with the desired slug and renaming did not work."
|
845 |
msgstr ""
|
846 |
|
861 |
msgid "Install Free Version Update Now"
|
862 |
msgstr ""
|
863 |
|
864 |
+
#: includes/fs-plugin-info-dialog.php:745, templates/account.php:641
|
865 |
msgid "Install Update Now"
|
866 |
msgstr ""
|
867 |
|
878 |
msgid "Download Latest Free Version"
|
879 |
msgstr ""
|
880 |
|
881 |
+
#: includes/fs-plugin-info-dialog.php:772, templates/account.php:101, templates/add-ons.php:37, templates/account/partials/addon.php:25
|
882 |
msgctxt "as download latest version"
|
883 |
msgid "Download Latest"
|
884 |
msgstr ""
|
887 |
msgid "Activate this add-on"
|
888 |
msgstr ""
|
889 |
|
890 |
+
#: includes/fs-plugin-info-dialog.php:789, templates/connect.php:458
|
891 |
msgid "Activate Free Version"
|
892 |
msgstr ""
|
893 |
|
894 |
+
#: includes/fs-plugin-info-dialog.php:790, templates/account.php:125, templates/add-ons.php:330, templates/account/partials/addon.php:48
|
895 |
msgid "Activate"
|
896 |
msgstr ""
|
897 |
|
1020 |
msgid "Details"
|
1021 |
msgstr ""
|
1022 |
|
1023 |
+
#: includes/fs-plugin-info-dialog.php:1318, templates/account.php:112, templates/debug.php:201, templates/debug.php:238, templates/debug.php:455, templates/account/partials/addon.php:36
|
1024 |
msgctxt "product version"
|
1025 |
msgid "Version"
|
1026 |
msgstr ""
|
1034 |
msgid "Last Updated"
|
1035 |
msgstr ""
|
1036 |
|
1037 |
+
#: includes/fs-plugin-info-dialog.php:1337, templates/account.php:527
|
1038 |
msgctxt "x-ago"
|
1039 |
msgid "%s ago"
|
1040 |
msgstr ""
|
1143 |
msgid "Latest Free Version Installed"
|
1144 |
msgstr ""
|
1145 |
|
1146 |
+
#: templates/account.php:102, templates/forms/subscription-cancellation.php:96, templates/account/partials/addon.php:26, templates/account/partials/site.php:311
|
1147 |
msgid "Downgrading your plan"
|
1148 |
msgstr ""
|
1149 |
|
1150 |
+
#: templates/account.php:103, templates/forms/subscription-cancellation.php:97, templates/account/partials/addon.php:27, templates/account/partials/site.php:312
|
1151 |
msgid "Cancelling the subscription"
|
1152 |
msgstr ""
|
1153 |
|
1154 |
#. translators: %1$s: Either 'Downgrading your plan' or 'Cancelling the subscription'
|
1155 |
+
#: templates/account.php:105, templates/forms/subscription-cancellation.php:99, templates/account/partials/site.php:314
|
1156 |
msgid "%1$s will immediately stop all future recurring payments and your %2$s plan license will expire in %3$s."
|
1157 |
msgstr ""
|
1158 |
|
1159 |
+
#: templates/account.php:106, templates/forms/subscription-cancellation.php:100, templates/account/partials/addon.php:30, templates/account/partials/site.php:315
|
1160 |
msgid "Please note that we will not be able to grandfather outdated pricing for renewals/new subscriptions after a cancellation. If you choose to renew the subscription manually in the future, after a price increase, which typically occurs once a year, you will be charged the updated price."
|
1161 |
msgstr ""
|
1162 |
|
1163 |
+
#: templates/account.php:107, templates/forms/subscription-cancellation.php:106, templates/account/partials/addon.php:31
|
1164 |
msgid "Cancelling the trial will immediately block access to all premium features. Are you sure?"
|
1165 |
msgstr ""
|
1166 |
|
1167 |
+
#: templates/account.php:108, templates/forms/subscription-cancellation.php:101, templates/account/partials/addon.php:32, templates/account/partials/site.php:316
|
1168 |
msgid "You can still enjoy all %s features but you will not have access to %s security & feature updates, nor support."
|
1169 |
msgstr ""
|
1170 |
|
1171 |
+
#: templates/account.php:109, templates/forms/subscription-cancellation.php:102, templates/account/partials/addon.php:33, templates/account/partials/site.php:317
|
1172 |
msgid "Once your license expires you can still use the Free version but you will NOT have access to the %s features."
|
1173 |
msgstr ""
|
1174 |
|
1175 |
#. translators: %s: Plan title (e.g. "Professional")
|
1176 |
+
#: templates/account.php:111, templates/account/partials/activate-license-button.php:31, templates/account/partials/addon.php:35
|
1177 |
msgid "Activate %s Plan"
|
1178 |
msgstr ""
|
1179 |
|
1180 |
#. translators: %s: Time period (e.g. Auto renews in "2 months")
|
1181 |
+
#: templates/account.php:114, templates/account/partials/addon.php:38, templates/account/partials/site.php:291
|
1182 |
msgid "Auto renews in %s"
|
1183 |
msgstr ""
|
1184 |
|
1185 |
#. translators: %s: Time period (e.g. Expires in "2 months")
|
1186 |
+
#: templates/account.php:116, templates/account/partials/addon.php:40, templates/account/partials/site.php:293
|
1187 |
msgid "Expires in %s"
|
1188 |
msgstr ""
|
1189 |
|
1190 |
+
#: templates/account.php:117
|
1191 |
msgctxt "as synchronize license"
|
1192 |
msgid "Sync License"
|
1193 |
msgstr ""
|
1194 |
|
1195 |
+
#: templates/account.php:118, templates/account/partials/addon.php:41
|
1196 |
msgid "Cancel Trial"
|
1197 |
msgstr ""
|
1198 |
|
1199 |
+
#: templates/account.php:119, templates/account/partials/addon.php:42
|
1200 |
msgid "Change Plan"
|
1201 |
msgstr ""
|
1202 |
|
1203 |
+
#: templates/account.php:120, templates/account/partials/addon.php:43
|
1204 |
msgctxt "verb"
|
1205 |
msgid "Upgrade"
|
1206 |
msgstr ""
|
1207 |
|
1208 |
+
#: templates/account.php:122, templates/account/partials/addon.php:45, templates/account/partials/site.php:318
|
1209 |
msgctxt "verb"
|
1210 |
msgid "Downgrade"
|
1211 |
msgstr ""
|
1212 |
|
1213 |
+
#: templates/account.php:124, templates/add-ons.php:246, templates/plugin-info/features.php:72, templates/account/partials/addon.php:47, templates/account/partials/site.php:33
|
1214 |
msgid "Free"
|
1215 |
msgstr ""
|
1216 |
|
1217 |
+
#: templates/account.php:126, templates/debug.php:371, includes/customizer/class-fs-customizer-upsell-control.php:110, templates/account/partials/addon.php:49
|
1218 |
msgctxt "as product pricing plan"
|
1219 |
msgid "Plan"
|
1220 |
msgstr ""
|
1221 |
|
1222 |
+
#: templates/account.php:127
|
1223 |
msgid "Bundle Plan"
|
1224 |
msgstr ""
|
1225 |
|
1226 |
+
#: templates/account.php:250
|
1227 |
msgid "Free Trial"
|
1228 |
msgstr ""
|
1229 |
|
1230 |
+
#: templates/account.php:261
|
1231 |
msgid "Account Details"
|
1232 |
msgstr ""
|
1233 |
|
1234 |
+
#: templates/account.php:268, templates/forms/data-debug-mode.php:33
|
1235 |
msgid "Start Debug"
|
1236 |
msgstr ""
|
1237 |
|
1238 |
+
#: templates/account.php:270
|
1239 |
msgid "Stop Debug"
|
1240 |
msgstr ""
|
1241 |
|
1242 |
+
#: templates/account.php:277
|
1243 |
msgid "Billing & Invoices"
|
1244 |
msgstr ""
|
1245 |
|
1246 |
+
#: templates/account.php:288
|
1247 |
msgid "Deleting the account will automatically deactivate your %s plan license so you can use it on other sites. If you want to terminate the recurring payments as well, click the \"Cancel\" button, and first \"Downgrade\" your account. Are you sure you would like to continue with the deletion?"
|
1248 |
msgstr ""
|
1249 |
|
1250 |
+
#: templates/account.php:290
|
1251 |
msgid "Deletion is not temporary. Only delete if you no longer want to use this %s anymore. Are you sure you would like to continue with the deletion?"
|
1252 |
msgstr ""
|
1253 |
|
1254 |
+
#: templates/account.php:293
|
1255 |
msgid "Delete Account"
|
1256 |
msgstr ""
|
1257 |
|
1258 |
+
#: templates/account.php:305, templates/account/partials/addon.php:231, templates/account/partials/deactivate-license-button.php:35
|
1259 |
msgid "Deactivate License"
|
1260 |
msgstr ""
|
1261 |
|
1262 |
+
#: templates/account.php:328, templates/forms/subscription-cancellation.php:125
|
1263 |
msgid "Are you sure you want to proceed?"
|
1264 |
msgstr ""
|
1265 |
|
1266 |
+
#: templates/account.php:328, templates/account/partials/addon.php:255
|
1267 |
msgid "Cancel Subscription"
|
1268 |
msgstr ""
|
1269 |
|
1270 |
+
#: templates/account.php:357, templates/account/partials/addon.php:340
|
1271 |
msgctxt "as synchronize"
|
1272 |
msgid "Sync"
|
1273 |
msgstr ""
|
1274 |
|
1275 |
+
#: templates/account.php:372, templates/debug.php:505
|
1276 |
msgid "Name"
|
1277 |
msgstr ""
|
1278 |
|
1279 |
+
#: templates/account.php:378, templates/debug.php:506
|
1280 |
msgid "Email"
|
1281 |
msgstr ""
|
1282 |
|
1283 |
+
#: templates/account.php:385, templates/debug.php:369, templates/debug.php:555
|
1284 |
msgid "User ID"
|
1285 |
msgstr ""
|
1286 |
|
1287 |
+
#: templates/account.php:403, templates/account.php:721, templates/account.php:754, templates/debug.php:236, templates/debug.php:363, templates/debug.php:452, templates/debug.php:504, templates/debug.php:553, templates/debug.php:632, templates/account/payments.php:35, templates/debug/logger.php:21
|
1288 |
msgid "ID"
|
1289 |
msgstr ""
|
1290 |
|
1291 |
+
#: templates/account.php:410
|
1292 |
msgid "Site ID"
|
1293 |
msgstr ""
|
1294 |
|
1295 |
+
#: templates/account.php:413
|
1296 |
msgid "No ID"
|
1297 |
msgstr ""
|
1298 |
|
1299 |
+
#: templates/account.php:418, templates/debug.php:243, templates/debug.php:372, templates/debug.php:456, templates/debug.php:508, templates/account/partials/site.php:227
|
1300 |
msgid "Public Key"
|
1301 |
msgstr ""
|
1302 |
|
1303 |
+
#: templates/account.php:424, templates/debug.php:373, templates/debug.php:457, templates/debug.php:509, templates/account/partials/site.php:239
|
1304 |
msgid "Secret Key"
|
1305 |
msgstr ""
|
1306 |
|
1307 |
+
#: templates/account.php:427
|
1308 |
msgctxt "as secret encryption key missing"
|
1309 |
msgid "No Secret"
|
1310 |
msgstr ""
|
1311 |
|
1312 |
+
#: templates/account.php:454, templates/account/partials/site.php:120, templates/account/partials/site.php:122
|
1313 |
msgid "Trial"
|
1314 |
msgstr ""
|
1315 |
|
1316 |
+
#: templates/account.php:481, templates/debug.php:561, templates/account/partials/site.php:260
|
1317 |
msgid "License Key"
|
1318 |
msgstr ""
|
1319 |
|
1320 |
+
#: templates/account.php:512
|
1321 |
msgid "Join the Beta program"
|
1322 |
msgstr ""
|
1323 |
|
1324 |
+
#: templates/account.php:518
|
1325 |
msgid "not verified"
|
1326 |
msgstr ""
|
1327 |
|
1328 |
+
#: templates/account.php:527, templates/account/partials/addon.php:190
|
1329 |
msgid "Expired"
|
1330 |
msgstr ""
|
1331 |
|
1332 |
+
#: templates/account.php:587
|
1333 |
msgid "Premium version"
|
1334 |
msgstr ""
|
1335 |
|
1336 |
+
#: templates/account.php:589
|
1337 |
msgid "Free version"
|
1338 |
msgstr ""
|
1339 |
|
1340 |
+
#: templates/account.php:601
|
1341 |
msgid "Verify Email"
|
1342 |
msgstr ""
|
1343 |
|
1344 |
+
#: templates/account.php:615
|
1345 |
msgid "Download %s Version"
|
1346 |
msgstr ""
|
1347 |
|
1348 |
+
#: templates/account.php:631
|
1349 |
msgid "Download Paid Version"
|
1350 |
msgstr ""
|
1351 |
|
1352 |
+
#: templates/account.php:649, templates/account.php:892, templates/account/partials/site.php:248, templates/account/partials/site.php:270
|
1353 |
msgctxt "verb"
|
1354 |
msgid "Show"
|
1355 |
msgstr ""
|
1356 |
|
1357 |
+
#: templates/account.php:664
|
1358 |
msgid "What is your %s?"
|
1359 |
msgstr ""
|
1360 |
|
1361 |
+
#: templates/account.php:672, templates/account/billing.php:21
|
1362 |
msgctxt "verb"
|
1363 |
msgid "Edit"
|
1364 |
msgstr ""
|
1365 |
|
1366 |
+
#: templates/account.php:676, templates/forms/user-change.php:27
|
1367 |
msgid "Change User"
|
1368 |
msgstr ""
|
1369 |
|
1370 |
+
#: templates/account.php:700
|
1371 |
msgid "Sites"
|
1372 |
msgstr ""
|
1373 |
|
1374 |
+
#: templates/account.php:713
|
1375 |
msgid "Search by address"
|
1376 |
msgstr ""
|
1377 |
|
1378 |
+
#: templates/account.php:722, templates/debug.php:366
|
1379 |
msgid "Address"
|
1380 |
msgstr ""
|
1381 |
|
1382 |
+
#: templates/account.php:723
|
1383 |
msgid "License"
|
1384 |
msgstr ""
|
1385 |
|
1386 |
+
#: templates/account.php:724
|
1387 |
msgid "Plan"
|
1388 |
msgstr ""
|
1389 |
|
1390 |
+
#: templates/account.php:757
|
1391 |
msgctxt "as software license"
|
1392 |
msgid "License"
|
1393 |
msgstr ""
|
1394 |
|
1395 |
+
#: templates/account.php:886
|
1396 |
msgctxt "verb"
|
1397 |
msgid "Hide"
|
1398 |
msgstr ""
|
1399 |
|
1400 |
+
#: templates/account.php:908, templates/forms/data-debug-mode.php:31
|
1401 |
msgid "Processing"
|
1402 |
msgstr ""
|
1403 |
|
1404 |
+
#: templates/account.php:911
|
1405 |
msgid "Get updates for bleeding edge Beta versions of %s."
|
1406 |
msgstr ""
|
1407 |
|
1408 |
+
#: templates/account.php:969
|
1409 |
msgid "Cancelling %s"
|
1410 |
msgstr ""
|
1411 |
|
1412 |
+
#: templates/account.php:969, templates/account.php:986, templates/forms/subscription-cancellation.php:27, templates/forms/deactivation/form.php:133
|
1413 |
msgid "trial"
|
1414 |
msgstr ""
|
1415 |
|
1416 |
+
#: templates/account.php:984, templates/forms/deactivation/form.php:150
|
1417 |
msgid "Cancelling %s..."
|
1418 |
msgstr ""
|
1419 |
|
1420 |
+
#: templates/account.php:987, templates/forms/subscription-cancellation.php:28, templates/forms/deactivation/form.php:134
|
1421 |
msgid "subscription"
|
1422 |
msgstr ""
|
1423 |
|
1424 |
+
#: templates/account.php:1001
|
1425 |
msgid "Deactivating your license will block all premium features, but will enable activating the license on another site. Are you sure you want to proceed?"
|
1426 |
msgstr ""
|
1427 |
|
1428 |
+
#: templates/account.php:1075
|
1429 |
msgid "Disabling white-label mode"
|
1430 |
msgstr ""
|
1431 |
|
1432 |
+
#: templates/account.php:1076
|
1433 |
msgid "Enabling white-label mode"
|
1434 |
msgstr ""
|
1435 |
|
1455 |
msgid "Installed"
|
1456 |
msgstr ""
|
1457 |
|
1458 |
+
#: templates/admin-notice.php:13, templates/forms/license-activation.php:222, templates/forms/resend-key.php:77
|
1459 |
msgctxt "as close a window"
|
1460 |
msgid "Dismiss"
|
1461 |
msgstr ""
|
1489 |
msgstr ""
|
1490 |
|
1491 |
#. translators: %s: name (e.g. Hey John,)
|
1492 |
+
#: templates/connect.php:112
|
1493 |
msgctxt "greeting"
|
1494 |
msgid "Hey %s,"
|
1495 |
msgstr ""
|
1496 |
|
1497 |
+
#: templates/connect.php:162
|
1498 |
msgid "Allow & Continue"
|
1499 |
msgstr ""
|
1500 |
|
1501 |
+
#: templates/connect.php:166
|
1502 |
msgid "Re-send activation email"
|
1503 |
msgstr ""
|
1504 |
|
1505 |
+
#: templates/connect.php:170
|
1506 |
msgid "Thanks %s!"
|
1507 |
msgstr ""
|
1508 |
|
1509 |
+
#: templates/connect.php:180, templates/forms/license-activation.php:46
|
1510 |
msgid "Agree & Activate License"
|
1511 |
msgstr ""
|
1512 |
|
1513 |
+
#: templates/connect.php:184
|
1514 |
msgid "Welcome to %s! To get started, please enter your license key:"
|
1515 |
msgstr ""
|
1516 |
|
1517 |
+
#: templates/connect.php:191
|
1518 |
msgid "Never miss an important update - opt in to our security & feature updates notifications, educational content, offers, and non-sensitive diagnostic tracking with %4$s."
|
1519 |
msgstr ""
|
1520 |
|
1521 |
+
#: templates/connect.php:192
|
1522 |
msgid "Never miss an important update - opt in to our security and feature updates notifications, and non-sensitive diagnostic tracking with %4$s."
|
1523 |
msgstr ""
|
1524 |
|
1525 |
+
#: templates/connect.php:198
|
1526 |
msgid "Never miss an important update - opt in to our security & feature updates notifications, educational content, offers, and non-sensitive diagnostic tracking with %4$s. If you skip this, that's okay! %1$s will still work just fine."
|
1527 |
msgstr ""
|
1528 |
|
1529 |
+
#: templates/connect.php:199
|
1530 |
msgid "Never miss an important update - opt in to our security & feature updates notifications, and non-sensitive diagnostic tracking with %4$s. If you skip this, that's okay! %1$s will still work just fine."
|
1531 |
msgstr ""
|
1532 |
|
1533 |
+
#: templates/connect.php:233
|
1534 |
msgid "We're excited to introduce the Freemius network-level integration."
|
1535 |
msgstr ""
|
1536 |
|
1537 |
+
#: templates/connect.php:236
|
1538 |
msgid "During the update process we detected %d site(s) that are still pending license activation."
|
1539 |
msgstr ""
|
1540 |
|
1541 |
+
#: templates/connect.php:238
|
1542 |
msgid "If you'd like to use the %s on those sites, please enter your license key below and click the activation button."
|
1543 |
msgstr ""
|
1544 |
|
1545 |
+
#: templates/connect.php:240
|
1546 |
msgid "%s's paid features"
|
1547 |
msgstr ""
|
1548 |
|
1549 |
+
#: templates/connect.php:245
|
1550 |
msgid "Alternatively, you can skip it for now and activate the license later, in your %s's network-level Account page."
|
1551 |
msgstr ""
|
1552 |
|
1553 |
+
#: templates/connect.php:247
|
1554 |
msgid "During the update process we detected %s site(s) in the network that are still pending your attention."
|
1555 |
msgstr ""
|
1556 |
|
1557 |
+
#: templates/connect.php:256, templates/forms/data-debug-mode.php:35, templates/forms/license-activation.php:49
|
1558 |
msgid "License key"
|
1559 |
msgstr ""
|
1560 |
|
1561 |
+
#: templates/connect.php:259, templates/forms/license-activation.php:22
|
1562 |
msgid "Can't find your license key?"
|
1563 |
msgstr ""
|
1564 |
|
1565 |
+
#: templates/connect.php:318, templates/connect.php:700, templates/forms/deactivation/retry-skip.php:20
|
1566 |
msgctxt "verb"
|
1567 |
msgid "Skip"
|
1568 |
msgstr ""
|
1569 |
|
1570 |
+
#: templates/connect.php:321
|
1571 |
msgid "Delegate to Site Admins"
|
1572 |
msgstr ""
|
1573 |
|
1574 |
+
#: templates/connect.php:321
|
1575 |
msgid "If you click it, this decision will be delegated to the sites administrators."
|
1576 |
msgstr ""
|
1577 |
|
1578 |
+
#: templates/connect.php:346
|
1579 |
msgid "License issues?"
|
1580 |
msgstr ""
|
1581 |
|
1582 |
+
#: templates/connect.php:362
|
1583 |
msgid "Your Profile Overview"
|
1584 |
msgstr ""
|
1585 |
|
1586 |
+
#: templates/connect.php:363
|
1587 |
msgid "Name and email address"
|
1588 |
msgstr ""
|
1589 |
|
1590 |
+
#: templates/connect.php:370
|
1591 |
msgid "So you can manage and control your license remotely from the User Dashboard."
|
1592 |
msgstr ""
|
1593 |
|
1594 |
+
#: templates/connect.php:371
|
1595 |
msgid "Your Site Overview"
|
1596 |
msgstr ""
|
1597 |
|
1598 |
+
#: templates/connect.php:372
|
1599 |
msgid "Site URL, WP version, PHP info"
|
1600 |
msgstr ""
|
1601 |
|
1602 |
+
#: templates/connect.php:379
|
1603 |
msgid "Admin Notices"
|
1604 |
msgstr ""
|
1605 |
|
1606 |
+
#: templates/connect.php:380, templates/connect.php:398
|
1607 |
msgid "Updates, announcements, marketing, no spam"
|
1608 |
msgstr ""
|
1609 |
|
1610 |
+
#: templates/connect.php:387
|
1611 |
msgid "So you can reuse the license when the %s is no longer active."
|
1612 |
msgstr ""
|
1613 |
|
1614 |
+
#: templates/connect.php:388
|
1615 |
msgid "Current %s Status"
|
1616 |
msgstr ""
|
1617 |
|
1618 |
+
#: templates/connect.php:389
|
1619 |
msgid "Active, deactivated, or uninstalled"
|
1620 |
msgstr ""
|
1621 |
|
1622 |
+
#: templates/connect.php:397
|
1623 |
msgid "Newsletter"
|
1624 |
msgstr ""
|
1625 |
|
1626 |
+
#: templates/connect.php:405
|
1627 |
msgid "Plugins & Themes"
|
1628 |
msgstr ""
|
1629 |
|
1630 |
+
#: templates/connect.php:405
|
1631 |
msgid "optional"
|
1632 |
msgstr ""
|
1633 |
|
1634 |
+
#: templates/connect.php:406
|
1635 |
msgid "To help us troubleshoot any potential issues that may arise from other plugin or theme conflicts."
|
1636 |
msgstr ""
|
1637 |
|
1638 |
+
#: templates/connect.php:407
|
1639 |
msgid "Title, slug, version, and is active"
|
1640 |
msgstr ""
|
1641 |
|
1642 |
+
#: templates/connect.php:424
|
1643 |
msgid "The %1$s will periodically send %2$s to %3$s for security & feature updates delivery, and license management."
|
1644 |
msgstr ""
|
1645 |
|
1646 |
+
#: templates/connect.php:426
|
1647 |
msgid "diagnostic data"
|
1648 |
msgstr ""
|
1649 |
|
1650 |
+
#: templates/connect.php:427
|
1651 |
msgid "Freemius is our licensing and software updates engine"
|
1652 |
msgstr ""
|
1653 |
|
1654 |
+
#: templates/connect.php:430
|
1655 |
msgid "What permissions are being granted?"
|
1656 |
msgstr ""
|
1657 |
|
1658 |
+
#: templates/connect.php:457
|
1659 |
msgid "Don't have a license key?"
|
1660 |
msgstr ""
|
1661 |
|
1662 |
+
#: templates/connect.php:460
|
1663 |
msgid "Have a license key?"
|
1664 |
msgstr ""
|
1665 |
|
1666 |
+
#: templates/connect.php:468
|
1667 |
msgid "Privacy Policy"
|
1668 |
msgstr ""
|
1669 |
|
1670 |
+
#: templates/connect.php:470
|
1671 |
msgid "License Agreement"
|
1672 |
msgstr ""
|
1673 |
|
1674 |
+
#: templates/connect.php:470
|
1675 |
msgid "Terms of Service"
|
1676 |
msgstr ""
|
1677 |
|
1678 |
+
#: templates/connect.php:866
|
1679 |
msgctxt "as in the process of sending an email"
|
1680 |
msgid "Sending email"
|
1681 |
msgstr ""
|
1682 |
|
1683 |
+
#: templates/connect.php:867
|
1684 |
msgctxt "as activating plugin"
|
1685 |
msgid "Activating"
|
1686 |
msgstr ""
|
1708 |
msgid "Debugging"
|
1709 |
msgstr ""
|
1710 |
|
1711 |
+
#: templates/debug.php:52, templates/debug.php:248, templates/debug.php:374, templates/debug.php:510
|
1712 |
msgid "Actions"
|
1713 |
msgstr ""
|
1714 |
|
1728 |
msgid "Clear Updates Transients"
|
1729 |
msgstr ""
|
1730 |
|
1731 |
+
#: templates/debug.php:84
|
|
|
|
|
|
|
|
|
1732 |
msgid "Sync Data From Server"
|
1733 |
msgstr ""
|
1734 |
|
1735 |
+
#: templates/debug.php:93
|
1736 |
msgid "Migrate Options to Network"
|
1737 |
msgstr ""
|
1738 |
|
1739 |
+
#: templates/debug.php:98
|
1740 |
msgid "Load DB Option"
|
1741 |
msgstr ""
|
1742 |
|
1743 |
+
#: templates/debug.php:101
|
1744 |
msgid "Set DB Option"
|
1745 |
msgstr ""
|
1746 |
|
1747 |
+
#: templates/debug.php:180
|
1748 |
msgid "Key"
|
1749 |
msgstr ""
|
1750 |
|
1751 |
+
#: templates/debug.php:181
|
1752 |
msgid "Value"
|
1753 |
msgstr ""
|
1754 |
|
1755 |
+
#: templates/debug.php:197
|
1756 |
msgctxt "as software development kit versions"
|
1757 |
msgid "SDK Versions"
|
1758 |
msgstr ""
|
1759 |
|
1760 |
+
#: templates/debug.php:202
|
1761 |
msgid "SDK Path"
|
1762 |
msgstr ""
|
1763 |
|
1764 |
+
#: templates/debug.php:203, templates/debug.php:242
|
1765 |
msgid "Module Path"
|
1766 |
msgstr ""
|
1767 |
|
1768 |
+
#: templates/debug.php:204
|
1769 |
msgid "Is Active"
|
1770 |
msgstr ""
|
1771 |
|
1772 |
+
#: templates/debug.php:232, templates/debug/plugins-themes-sync.php:35
|
1773 |
msgid "Plugins"
|
1774 |
msgstr ""
|
1775 |
|
1776 |
+
#: templates/debug.php:232, templates/debug/plugins-themes-sync.php:56
|
1777 |
msgid "Themes"
|
1778 |
msgstr ""
|
1779 |
|
1780 |
+
#: templates/debug.php:237, templates/debug.php:368, templates/debug.php:454, templates/debug/scheduled-crons.php:80
|
1781 |
msgid "Slug"
|
1782 |
msgstr ""
|
1783 |
|
1784 |
+
#: templates/debug.php:239, templates/debug.php:453
|
1785 |
msgid "Title"
|
1786 |
msgstr ""
|
1787 |
|
1788 |
+
#: templates/debug.php:240
|
1789 |
msgctxt "as application program interface"
|
1790 |
msgid "API"
|
1791 |
msgstr ""
|
1792 |
|
1793 |
+
#: templates/debug.php:241
|
1794 |
msgid "Freemius State"
|
1795 |
msgstr ""
|
1796 |
|
1797 |
+
#: templates/debug.php:245
|
1798 |
msgid "Network Blog"
|
1799 |
msgstr ""
|
1800 |
|
1801 |
+
#: templates/debug.php:246
|
1802 |
msgid "Network User"
|
1803 |
msgstr ""
|
1804 |
|
1805 |
+
#: templates/debug.php:283
|
1806 |
msgctxt "as connection was successful"
|
1807 |
msgid "Connected"
|
1808 |
msgstr ""
|
1809 |
|
1810 |
+
#: templates/debug.php:284
|
1811 |
msgctxt "as connection blocked"
|
1812 |
msgid "Blocked"
|
1813 |
msgstr ""
|
1814 |
|
1815 |
+
#: templates/debug.php:320
|
1816 |
msgid "Simulate Trial Promotion"
|
1817 |
msgstr ""
|
1818 |
|
1819 |
+
#: templates/debug.php:332
|
1820 |
msgid "Simulate Network Upgrade"
|
1821 |
msgstr ""
|
1822 |
|
1823 |
+
#: templates/debug.php:357
|
1824 |
msgid "%s Installs"
|
1825 |
msgstr ""
|
1826 |
|
1827 |
+
#: templates/debug.php:359
|
1828 |
msgctxt "like websites"
|
1829 |
msgid "Sites"
|
1830 |
msgstr ""
|
1831 |
|
1832 |
+
#: templates/debug.php:365, templates/account/partials/site.php:156
|
1833 |
msgid "Blog ID"
|
1834 |
msgstr ""
|
1835 |
|
1836 |
+
#: templates/debug.php:370
|
1837 |
msgid "License ID"
|
1838 |
msgstr ""
|
1839 |
|
1840 |
+
#: templates/debug.php:434, templates/debug.php:533, templates/account/partials/addon.php:435
|
1841 |
msgctxt "verb"
|
1842 |
msgid "Delete"
|
1843 |
msgstr ""
|
1844 |
|
1845 |
+
#: templates/debug.php:448
|
1846 |
msgid "Add Ons of module %s"
|
1847 |
msgstr ""
|
1848 |
|
1849 |
+
#: templates/debug.php:500
|
1850 |
msgid "Users"
|
1851 |
msgstr ""
|
1852 |
|
1853 |
+
#: templates/debug.php:507
|
1854 |
msgid "Verified"
|
1855 |
msgstr ""
|
1856 |
|
1857 |
+
#: templates/debug.php:549
|
1858 |
msgid "%s Licenses"
|
1859 |
msgstr ""
|
1860 |
|
1861 |
+
#: templates/debug.php:554
|
1862 |
msgid "Plugin ID"
|
1863 |
msgstr ""
|
1864 |
|
1865 |
+
#: templates/debug.php:556
|
1866 |
msgid "Plan ID"
|
1867 |
msgstr ""
|
1868 |
|
1869 |
+
#: templates/debug.php:557
|
1870 |
msgid "Quota"
|
1871 |
msgstr ""
|
1872 |
|
1873 |
+
#: templates/debug.php:558
|
1874 |
msgid "Activated"
|
1875 |
msgstr ""
|
1876 |
|
1877 |
+
#: templates/debug.php:559
|
1878 |
msgid "Blocking"
|
1879 |
msgstr ""
|
1880 |
|
1881 |
+
#: templates/debug.php:560, templates/debug.php:631, templates/debug/logger.php:22
|
1882 |
msgid "Type"
|
1883 |
msgstr ""
|
1884 |
|
1885 |
+
#: templates/debug.php:562
|
1886 |
msgctxt "as expiration date"
|
1887 |
msgid "Expiration"
|
1888 |
msgstr ""
|
1889 |
|
1890 |
+
#: templates/debug.php:590
|
1891 |
msgid "Debug Log"
|
1892 |
msgstr ""
|
1893 |
|
1894 |
+
#: templates/debug.php:594
|
1895 |
msgid "All Types"
|
1896 |
msgstr ""
|
1897 |
|
1898 |
+
#: templates/debug.php:601
|
1899 |
msgid "All Requests"
|
1900 |
msgstr ""
|
1901 |
|
1902 |
+
#: templates/debug.php:606, templates/debug.php:635, templates/debug/logger.php:25
|
1903 |
msgid "File"
|
1904 |
msgstr ""
|
1905 |
|
1906 |
+
#: templates/debug.php:607, templates/debug.php:633, templates/debug/logger.php:23
|
1907 |
msgid "Function"
|
1908 |
msgstr ""
|
1909 |
|
1910 |
+
#: templates/debug.php:608
|
1911 |
msgid "Process ID"
|
1912 |
msgstr ""
|
1913 |
|
1914 |
+
#: templates/debug.php:609
|
1915 |
msgid "Logger"
|
1916 |
msgstr ""
|
1917 |
|
1918 |
+
#: templates/debug.php:610, templates/debug.php:634, templates/debug/logger.php:24
|
1919 |
msgid "Message"
|
1920 |
msgstr ""
|
1921 |
|
1922 |
+
#: templates/debug.php:612
|
1923 |
msgid "Filter"
|
1924 |
msgstr ""
|
1925 |
|
1926 |
+
#: templates/debug.php:620
|
1927 |
msgid "Download"
|
1928 |
msgstr ""
|
1929 |
|
1930 |
+
#: templates/debug.php:636, templates/debug/logger.php:26
|
1931 |
msgid "Timestamp"
|
1932 |
msgstr ""
|
1933 |
|
1952 |
msgid "Requests"
|
1953 |
msgstr ""
|
1954 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1955 |
#: templates/account/billing.php:22
|
1956 |
msgctxt "verb"
|
1957 |
msgid "Update"
|
2261 |
msgid "User key"
|
2262 |
msgstr ""
|
2263 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2264 |
#: templates/forms/license-activation.php:23
|
2265 |
msgid "Please enter the license key that you received in the email right after the purchase:"
|
2266 |
msgstr ""
|
2273 |
msgid "The %1$s will be periodically sending data to %2$s to check for security and feature updates, and verify the validity of your license."
|
2274 |
msgstr ""
|
2275 |
|
2276 |
+
#: templates/forms/license-activation.php:183
|
2277 |
msgid "Associate with the license owner's account."
|
2278 |
msgstr ""
|
2279 |
|
2356 |
msgid "In case you are NOT planning on using this %s on this site (or any other site) - would you like to cancel the %s as well?"
|
2357 |
msgstr ""
|
2358 |
|
2359 |
+
#: templates/forms/subscription-cancellation.php:52
|
2360 |
+
msgid "license"
|
2361 |
+
msgstr ""
|
2362 |
+
|
2363 |
#: templates/forms/subscription-cancellation.php:57
|
2364 |
msgid "Cancel %s - I no longer need any security & feature updates, nor support for %s because I'm not planning to use the %s on this, or any other site."
|
2365 |
msgstr ""
|
2380 |
msgid "Proceed"
|
2381 |
msgstr ""
|
2382 |
|
2383 |
+
#: templates/forms/subscription-cancellation.php:191, templates/forms/deactivation/form.php:171
|
2384 |
msgid "Cancel %s & Proceed"
|
2385 |
msgstr ""
|
2386 |
|
2404 |
msgid "Enter email address"
|
2405 |
msgstr ""
|
2406 |
|
2407 |
+
#: templates/forms/user-change.php:81
|
2408 |
+
msgctxt "close window"
|
2409 |
+
msgid "Dismiss"
|
2410 |
+
msgstr ""
|
2411 |
+
|
2412 |
#: templates/js/style-premium-theme.php:39
|
2413 |
msgid "Premium"
|
2414 |
msgstr ""
|
2503 |
msgid "Contact Support"
|
2504 |
msgstr ""
|
2505 |
|
2506 |
+
#: templates/forms/deactivation/form.php:64
|
2507 |
msgid "Anonymous feedback"
|
2508 |
msgstr ""
|
2509 |
|
2510 |
+
#: templates/forms/deactivation/form.php:70
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2511 |
msgid "Deactivate"
|
2512 |
msgstr ""
|
2513 |
|
2514 |
+
#: templates/forms/deactivation/form.php:72
|
2515 |
msgid "Activate %s"
|
2516 |
msgstr ""
|
2517 |
|
2518 |
+
#: templates/forms/deactivation/form.php:87
|
|
|
|
|
|
|
|
|
2519 |
msgid "Quick Feedback"
|
2520 |
msgstr ""
|
2521 |
|
2522 |
+
#: templates/forms/deactivation/form.php:91
|
2523 |
msgid "If you have a moment, please let us know why you are %s"
|
2524 |
msgstr ""
|
2525 |
|
2526 |
+
#: templates/forms/deactivation/form.php:91
|
2527 |
msgid "deactivating"
|
2528 |
msgstr ""
|
2529 |
|
2530 |
+
#: templates/forms/deactivation/form.php:91
|
2531 |
msgid "switching"
|
2532 |
msgstr ""
|
2533 |
|
2534 |
+
#: templates/forms/deactivation/form.php:369
|
2535 |
+
msgid "Submit & %s"
|
2536 |
msgstr ""
|
2537 |
|
2538 |
+
#: templates/forms/deactivation/form.php:390
|
2539 |
+
msgid "Kindly tell us the reason so we can improve."
|
2540 |
msgstr ""
|
2541 |
|
2542 |
+
#: templates/forms/deactivation/form.php:515
|
2543 |
msgid "Yes - %s"
|
2544 |
msgstr ""
|
2545 |
|
2546 |
+
#: templates/forms/deactivation/form.php:522
|
2547 |
msgid "Skip & %s"
|
2548 |
msgstr ""
|
2549 |
|
freemius/package.json
ADDED
@@ -0,0 +1,27 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"name": "freemius-wordpress-sdk",
|
3 |
+
"description": "Monetization, analytics, and marketing automation platform for plugin & theme developers.",
|
4 |
+
"author": "Freemius, Inc.",
|
5 |
+
"license": "GPL-3.0",
|
6 |
+
"homepage": "https://freemius.com",
|
7 |
+
"version": "2.4.2",
|
8 |
+
"main": "gulpfile.js",
|
9 |
+
"dependencies": {},
|
10 |
+
"scripts": {
|
11 |
+
"test": "echo \"Error: no test specified\" && exit 1",
|
12 |
+
"prune": "rimraf .codeclimate.yml .git .github .gitignore .travis.yml gulpfile.js composer.json"
|
13 |
+
},
|
14 |
+
"repository": "Freemius/wordpress-sdk.git",
|
15 |
+
"devDependencies": {
|
16 |
+
"gulp": "^3.9.1",
|
17 |
+
"gulp-clean": "^0.3.2",
|
18 |
+
"gulp-fs": "0.0.2",
|
19 |
+
"gulp-gettext": "^0.3.0",
|
20 |
+
"gulp-path": "^3.0.3",
|
21 |
+
"gulp-pofill": "^1.0.0",
|
22 |
+
"gulp-rename": "^1.2.2",
|
23 |
+
"gulp-sort": "^2.0.0",
|
24 |
+
"gulp-transifex": "^0.1.17",
|
25 |
+
"gulp-wp-pot": "^1.3.5"
|
26 |
+
}
|
27 |
+
}
|
freemius/readme.txt
ADDED
@@ -0,0 +1,182 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
=== User Menus - Nav Menu Visibility ===
|
2 |
+
Contributors: codeatlantic, danieliser
|
3 |
+
Author URI: https://code-atlantic.com/
|
4 |
+
Plugin URI: https://wordpress.org/plugins/user-menus/
|
5 |
+
Donate link: https://code-atlantic.com/donate/
|
6 |
+
Tags: menu, menus, user-menu, logout, nav-menu, nav-menus, user, user-role, user-roles
|
7 |
+
Requires at least: 4.6
|
8 |
+
Tested up to: 5.8
|
9 |
+
Stable tag: 1.2.8
|
10 |
+
Requires PHP: 5.6
|
11 |
+
Freemius: 2.5.0
|
12 |
+
License: GPLv3 or Any Later Version
|
13 |
+
|
14 |
+
Show/hide menu items to logged in users, logged out users or specific user roles. Display logged in user details in menu. Add a logout link to menu.
|
15 |
+
|
16 |
+
|
17 |
+
== Description ==
|
18 |
+
|
19 |
+
User Menus is the perfect plugin for websites that have logged in users.
|
20 |
+
|
21 |
+
The plugin gives you more control over your nav menu by allowing you to apply visibility controls to menu items e.g., who can see each menu item (everyone, logged out users, logged in users, specific user roles).
|
22 |
+
|
23 |
+
It also enables you to display logged in user information in the navigation menu e.g., “Hello, John Doe”.
|
24 |
+
|
25 |
+
Lastly, the plugin allows you to add login, register, and logout links to your menu.
|
26 |
+
|
27 |
+
= Full Feature List =
|
28 |
+
|
29 |
+
User Menus allows you to do the following:
|
30 |
+
|
31 |
+
* Display menu items to everyone
|
32 |
+
* Display menu items to only logged out users
|
33 |
+
* Display menu items to only logged in users
|
34 |
+
* Display menu items to users with or without a specific user role.
|
35 |
+
* Show a logged in user’s {avatar} in a menu item with a custom size option.
|
36 |
+
* Show a logged in user’s {username} in a menu item
|
37 |
+
* Show a logged in user’s {first_name} in a menu item
|
38 |
+
* Show a logged in user’s {last_name} in a menu item
|
39 |
+
* Show a logged in user’s {display_name} in a menu item
|
40 |
+
* Show a logged in user’s nickname} in a menu item
|
41 |
+
* Show a logged in user’s {email} in a menu item
|
42 |
+
* Add a logout link to the menu (optional redirect settings)
|
43 |
+
* Add a register link to the menu (optional redirect settings)
|
44 |
+
* Add a login link to the menu (optional redirect settings)
|
45 |
+
|
46 |
+
** Includes a custom Menu Importer that will allow migrating User Menus data with the normal menu export/import.
|
47 |
+
|
48 |
+
= Created by Code Atlantic =
|
49 |
+
|
50 |
+
User Menus is built by the [Code Atlantic][codeatlantic] team. We create high-quality WordPress plugins that help you grow your WordPress sites.
|
51 |
+
|
52 |
+
Check out some of our most popular plugins:
|
53 |
+
|
54 |
+
* [Popup Maker][popupmaker] - #1 Popup & Marketing Plugin for WordPress
|
55 |
+
* [Content Control][contentcontrol] - Restrict Access to Pages and Posts
|
56 |
+
|
57 |
+
**Requires WordPress 4.6 and PHP 5.6**
|
58 |
+
|
59 |
+
[codeatlantic]: https://code-atlantic.com "Code Atlantic - High Quality WordPress Plugins"
|
60 |
+
|
61 |
+
[popupmaker]: https://wppopupmaker.com "#1 Popup & Marketing Plugin for WordPress"
|
62 |
+
|
63 |
+
[contentcontrol]: https://wordpress.org/plugins/content-control/ "Control Who Can Access Content"
|
64 |
+
|
65 |
+
== Installation ==
|
66 |
+
|
67 |
+
= Minimum Requirements =
|
68 |
+
|
69 |
+
* WordPress 4.6 or greater
|
70 |
+
* PHP version 5.6 or greater
|
71 |
+
|
72 |
+
= Installation =
|
73 |
+
|
74 |
+
* Install User Menus either via the WordPress.org plugin repository or by uploading the files to your server.
|
75 |
+
* Activate User Menus.
|
76 |
+
* Go to wp-admin > Appearance > Menus and edit your menu.
|
77 |
+
|
78 |
+
If you need help getting started with User Menus, please see the [FAQs][faq page] that explain how to use the plugin.
|
79 |
+
|
80 |
+
|
81 |
+
[faq page]: https://wordpress.org/plugins/user-menus/faq/ "User Menus FAQ"
|
82 |
+
|
83 |
+
|
84 |
+
== Frequently Asked Questions ==
|
85 |
+
|
86 |
+
= How do I set up this plugin? =
|
87 |
+
|
88 |
+
* To setup the plugin, go to /wp-admin/ > **Appearance** > **Menus**.
|
89 |
+
* Add a **menu item** or choose an existing one to edit the User Menus settings.
|
90 |
+
* To see the User Menus settings, _expand_ the **menu item** that you chose in the **Menu structure** panel.
|
91 |
+
* Select **Everyone**, **Logged Out Users**, or **Logged In Users** from the **Who can see this link?** dropdown.
|
92 |
+
* **Logged In Users**: The **Choose which roles can see this link** radio button is selected by default. If no roles are selected, all roles can see the menu item by default. Once a role is checked, then only checked roles can see the menu item.
|
93 |
+
* **Logged In Users**: The **Choose which roles won't see this link** radio button is **not** selected by default. If no roles are selected, all roles still have visibility to the menu item by default. Once a role is checked, then only checked roles won't see the menu item.
|
94 |
+
* To show a logged in user’s information in a **menu item**, make a **menu item** only visible to logged in users. Click the grey arrow button to add a user tag (username, first_name, last_name, nickname, display_name, email) to the **menu item** label.
|
95 |
+
* To add a login or logout link to your menu, expand the **User Links** under the **Add menu items** panel, check **Login** or **Logout**, then click **Add to Menu**.
|
96 |
+
|
97 |
+
= Where can I get support? =
|
98 |
+
|
99 |
+
If you get stuck, you can ask for help in the [User Menu Plugin Forum](https://wordpress.org/support/plugin/user-menus).
|
100 |
+
|
101 |
+
= Where can I report bugs or contribute to the project? =
|
102 |
+
|
103 |
+
Bugs can be reported either in our support forum or preferably on the [User Menu GitHub repository](https://github.com/jungleplugins/user-menus/issues).
|
104 |
+
|
105 |
+
|
106 |
+
== Screenshots ==
|
107 |
+
|
108 |
+
1. Limit menu item visibility based on logged in status, user role etc.
|
109 |
+
2. Display user information such as username, first name etc in your menu text.
|
110 |
+
3. Quickly insert login/logout links & choose where users will be taken afterwards.
|
111 |
+
|
112 |
+
|
113 |
+
== Changelog ==
|
114 |
+
|
115 |
+
= v1.2.8 - 03/02/2022 =
|
116 |
+
|
117 |
+
* Tweak: Update freemius sdk to the latest version.
|
118 |
+
|
119 |
+
= v1.2.7 - 07/21/2021 =
|
120 |
+
|
121 |
+
* Fix: Bug due to variable type mismatch which caused children of protected items to be rendered.
|
122 |
+
|
123 |
+
= v1.2.6 - 07/20/2021 =
|
124 |
+
|
125 |
+
* Improvement: Update Freemius to 2.4.2
|
126 |
+
* Improvement: Code styling clean up.
|
127 |
+
* Improvement: Compatibility with jQuery v3.
|
128 |
+
|
129 |
+
= v1.2.5 - 12/31/2020 =
|
130 |
+
|
131 |
+
* Improvement:Update Freemius to 2.4.1
|
132 |
+
|
133 |
+
= v1.2.4 - 08/20/2020 =
|
134 |
+
|
135 |
+
* Improvement: Removed class that could cause links to be disabled with some themes.
|
136 |
+
* Tweak: Update Freemius sdk to v2.4.0.1.
|
137 |
+
* Fix: Compatibility issue with some sites where duplicate fields were shown in the menu editor.
|
138 |
+
|
139 |
+
= v1.2.3 - 3/23/2020 =
|
140 |
+
|
141 |
+
* Tweak: Add compatibility fix for WP 5.4 menu walker
|
142 |
+
|
143 |
+
= v1.2.2 - 12/17/2019 =
|
144 |
+
|
145 |
+
* Improvement: Login, Register & Logout menu links now hint at who they will be visible for.
|
146 |
+
* Fix: Deprecation notice for sites using PHP 7.4
|
147 |
+
|
148 |
+
= v1.2.1 - 10/20/2019 =
|
149 |
+
|
150 |
+
* Fix: Bug in some sites where Menu Editor Description field was not shown.
|
151 |
+
|
152 |
+
= v1.2.0 - 10/10/2019 =
|
153 |
+
|
154 |
+
* Feature: Added option to *show* or *hide* the menu item for chosen roles.
|
155 |
+
* Feature: Added Register user link navigation menu type with optional redirect.
|
156 |
+
* Improvement: Added Freemius integration to allow for future premium offerings
|
157 |
+
* Tweak: Updates brand from Jungle Plugins to Code Atlantic (nothing has changed, just the name).
|
158 |
+
* Tweak: Minor text and design changes.
|
159 |
+
* Fix: Bug where missing data in menu items caused an error to be thrown in edge cases.
|
160 |
+
|
161 |
+
= v1.1.3 =
|
162 |
+
|
163 |
+
* Improvement: Corrected usage of get_avatar to ensure compatibility with 3rd party avatar plugins.
|
164 |
+
|
165 |
+
= v1.1.2 =
|
166 |
+
|
167 |
+
* Improvement: Made changes to the nav menu editor to make it more compatible with other plugins.
|
168 |
+
|
169 |
+
= v1.1.1 =
|
170 |
+
|
171 |
+
* Fix: Forgot to add new files during commit. Correcting this issue.
|
172 |
+
|
173 |
+
= v1.1.0 =
|
174 |
+
|
175 |
+
* Feature: Added ability to insert user avatar in menu items with size option to match your needs.
|
176 |
+
* Improvement: Added accessibility enhancements to menu editor. Includes keyboard support, proper focus, tabbing & titles.
|
177 |
+
* Improvement: Added proper labeling to the user code dropdown.
|
178 |
+
* Tweak: Restyled user code insert elements to better resemble default WP admin.
|
179 |
+
|
180 |
+
= v1.0.0 =
|
181 |
+
|
182 |
+
* Initial Release
|
freemius/require.php
CHANGED
@@ -6,6 +6,10 @@
|
|
6 |
* @since 1.1.9
|
7 |
*/
|
8 |
|
|
|
|
|
|
|
|
|
9 |
// Configuration should be loaded first.
|
10 |
require_once dirname( __FILE__ ) . '/config.php';
|
11 |
require_once WP_FS__DIR_INCLUDES . '/fs-core-functions.php';
|
@@ -17,7 +21,6 @@
|
|
17 |
// require_once WP_FS__DIR_INCLUDES . '/managers/class-fs-abstract-manager.php';
|
18 |
require_once WP_FS__DIR_INCLUDES . '/managers/class-fs-option-manager.php';
|
19 |
require_once WP_FS__DIR_INCLUDES . '/managers/class-fs-gdpr-manager.php';
|
20 |
-
require_once WP_FS__DIR_INCLUDES . '/managers/class-fs-clone-manager.php';
|
21 |
require_once WP_FS__DIR_INCLUDES . '/managers/class-fs-cache-manager.php';
|
22 |
require_once WP_FS__DIR_INCLUDES . '/managers/class-fs-admin-notice-manager.php';
|
23 |
require_once WP_FS__DIR_INCLUDES . '/managers/class-fs-admin-menu-manager.php';
|
@@ -47,4 +50,4 @@
|
|
47 |
require_once WP_FS__DIR_INCLUDES . '/class-fs-admin-notices.php';
|
48 |
require_once WP_FS__DIR_INCLUDES . '/class-freemius-abstract.php';
|
49 |
require_once WP_FS__DIR_INCLUDES . '/sdk/Exceptions/Exception.php';
|
50 |
-
require_once WP_FS__DIR_INCLUDES . '/class-freemius.php';
|
6 |
* @since 1.1.9
|
7 |
*/
|
8 |
|
9 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
10 |
+
exit;
|
11 |
+
}
|
12 |
+
|
13 |
// Configuration should be loaded first.
|
14 |
require_once dirname( __FILE__ ) . '/config.php';
|
15 |
require_once WP_FS__DIR_INCLUDES . '/fs-core-functions.php';
|
21 |
// require_once WP_FS__DIR_INCLUDES . '/managers/class-fs-abstract-manager.php';
|
22 |
require_once WP_FS__DIR_INCLUDES . '/managers/class-fs-option-manager.php';
|
23 |
require_once WP_FS__DIR_INCLUDES . '/managers/class-fs-gdpr-manager.php';
|
|
|
24 |
require_once WP_FS__DIR_INCLUDES . '/managers/class-fs-cache-manager.php';
|
25 |
require_once WP_FS__DIR_INCLUDES . '/managers/class-fs-admin-notice-manager.php';
|
26 |
require_once WP_FS__DIR_INCLUDES . '/managers/class-fs-admin-menu-manager.php';
|
50 |
require_once WP_FS__DIR_INCLUDES . '/class-fs-admin-notices.php';
|
51 |
require_once WP_FS__DIR_INCLUDES . '/class-freemius-abstract.php';
|
52 |
require_once WP_FS__DIR_INCLUDES . '/sdk/Exceptions/Exception.php';
|
53 |
+
require_once WP_FS__DIR_INCLUDES . '/class-freemius.php';
|
freemius/start.php
CHANGED
@@ -15,7 +15,7 @@
|
|
15 |
*
|
16 |
* @var string
|
17 |
*/
|
18 |
-
$this_sdk_version = '2.
|
19 |
|
20 |
#region SDK Selection Logic --------------------------------------------------------------------
|
21 |
|
15 |
*
|
16 |
* @var string
|
17 |
*/
|
18 |
+
$this_sdk_version = '2.4.3';
|
19 |
|
20 |
#region SDK Selection Logic --------------------------------------------------------------------
|
21 |
|
freemius/templates/account.php
CHANGED
@@ -46,7 +46,6 @@
|
|
46 |
$site = $fs->get_site();
|
47 |
$name = $user->get_name();
|
48 |
$license = $fs->_get_license();
|
49 |
-
$is_license_foreign = ( is_object( $license ) && $user->id != $license->user_id );
|
50 |
$is_data_debug_mode = $fs->is_data_debug_mode();
|
51 |
$is_whitelabeled = $fs->is_whitelabeled();
|
52 |
$subscription = ( is_object( $license ) ?
|
@@ -63,10 +62,6 @@
|
|
63 |
$fs->_add_license_activation_dialog_box();
|
64 |
}
|
65 |
|
66 |
-
if ( $fs->should_handle_user_change() ) {
|
67 |
-
$fs->_add_email_address_update_dialog_box();
|
68 |
-
}
|
69 |
-
|
70 |
$ids_of_installs_activated_with_foreign_licenses = $fs->should_handle_user_change() ?
|
71 |
$fs->get_installs_ids_with_foreign_licenses() :
|
72 |
array();
|
@@ -91,15 +86,12 @@
|
|
91 |
) );
|
92 |
}
|
93 |
|
94 |
-
|
95 |
-
if ( $show_billing ) {
|
96 |
-
$payments = $fs->_fetch_payments();
|
97 |
|
98 |
-
|
99 |
-
}
|
100 |
|
101 |
|
102 |
-
|
103 |
|
104 |
if ( $has_tabs ) {
|
105 |
$query_params['tabs'] = 'true';
|
@@ -148,7 +140,6 @@
|
|
148 |
$install = $fs->get_install_by_blog_id( $site_info['blog_id'] );
|
149 |
$view_params = array(
|
150 |
'freemius' => $fs,
|
151 |
-
'user' => $fs->get_user(),
|
152 |
'license' => $license,
|
153 |
'site' => $site_info,
|
154 |
'install' => $install,
|
@@ -375,7 +366,7 @@
|
|
375 |
|
376 |
$profile = array();
|
377 |
|
378 |
-
|
379 |
$profile[] = array(
|
380 |
'id' => 'user_name',
|
381 |
'title' => fs_text_inline( 'Name', 'name', $slug ),
|
@@ -654,7 +645,7 @@
|
|
654 |
<?php endif ?>
|
655 |
<?php
|
656 |
elseif ( in_array( $p['id'], array( 'license_key', 'site_secret_key' ) ) ) : ?>
|
657 |
-
<?php if ( ! $is_whitelabeled
|
658 |
<button class="button button-small fs-toggle-visibility"><?php fs_esc_html_echo_x_inline( 'Show', 'verb', 'show', $slug ) ?></button>
|
659 |
<?php endif ?>
|
660 |
<?php if ('license_key' === $p['id']) : ?>
|
@@ -667,7 +658,6 @@
|
|
667 |
'user_name'
|
668 |
) ) )
|
669 |
) : ?>
|
670 |
-
<?php if ( 'email' !== $p['id'] || ! fs_is_network_admin() ) : ?>
|
671 |
<form action="<?php echo $fs->_get_admin_page_url( 'account' ) ?>" method="POST"
|
672 |
onsubmit="var val = prompt('<?php echo esc_attr( sprintf(
|
673 |
/* translators: %s: User's account property (e.g. name, email) */
|
@@ -678,10 +668,9 @@
|
|
678 |
<input type="hidden" name="fs_<?php echo $p['id'] ?>_<?php echo $fs->get_unique_affix() ?>"
|
679 |
value="">
|
680 |
<?php wp_nonce_field( 'update_' . $p['id'] ) ?>
|
681 |
-
<input type="submit" class="button button-small
|
682 |
value="<?php echo fs_esc_attr_x_inline( 'Edit', 'verb', 'edit', $slug ) ?>">
|
683 |
</form>
|
684 |
-
<?php endif ?>
|
685 |
<?php elseif ( 'user_id' === $p['id'] && ! empty( $ids_of_installs_activated_with_foreign_licenses ) ) : ?>
|
686 |
<input id="fs_change_user" type="submit" class="button button-small"
|
687 |
value="<?php echo fs_esc_attr_inline( 'Change User', 'change-user', $slug ) ?>">
|
@@ -741,30 +730,12 @@
|
|
741 |
<div class="fs-table-body">
|
742 |
<table class="widefat">
|
743 |
<?php
|
744 |
-
$current_blog_id = get_current_blog_id();
|
745 |
-
|
746 |
foreach ( $site_view_params as $view_params ) {
|
747 |
fs_require_template(
|
748 |
'account/partials/site.php',
|
749 |
$view_params
|
750 |
);
|
751 |
-
|
752 |
-
|
753 |
-
/**
|
754 |
-
* It's possible for the `Freemius::switch_to_blog()` method to be called within the `site.php` template and this changes the Freemius instance's context, so this check is for restoring the previous context based on the previously retrieved site.
|
755 |
-
*
|
756 |
-
* @author Leo Fajardo (@leorw)
|
757 |
-
* @since 2.5.0
|
758 |
-
*/
|
759 |
-
$current_install = $fs->get_site();
|
760 |
-
|
761 |
-
if (
|
762 |
-
is_object( $site ) &&
|
763 |
-
( ! is_object( $current_install ) || $current_install->id != $site->id )
|
764 |
-
) {
|
765 |
-
$fs->switch_to_blog( $current_blog_id, $site, true );
|
766 |
-
}
|
767 |
-
?>
|
768 |
</table>
|
769 |
</div>
|
770 |
</div>
|
@@ -868,7 +839,7 @@
|
|
868 |
|
869 |
<?php
|
870 |
if ( $show_billing ) {
|
871 |
-
$view_params = array( 'id' => $VARS['id']
|
872 |
fs_require_once_template( 'account/billing.php', $view_params );
|
873 |
fs_require_once_template( 'account/payments.php', $view_params );
|
874 |
}
|
@@ -1124,4 +1095,4 @@
|
|
1124 |
'module_slug' => $slug,
|
1125 |
'module_version' => $fs->get_plugin_version(),
|
1126 |
);
|
1127 |
-
|
46 |
$site = $fs->get_site();
|
47 |
$name = $user->get_name();
|
48 |
$license = $fs->_get_license();
|
|
|
49 |
$is_data_debug_mode = $fs->is_data_debug_mode();
|
50 |
$is_whitelabeled = $fs->is_whitelabeled();
|
51 |
$subscription = ( is_object( $license ) ?
|
62 |
$fs->_add_license_activation_dialog_box();
|
63 |
}
|
64 |
|
|
|
|
|
|
|
|
|
65 |
$ids_of_installs_activated_with_foreign_licenses = $fs->should_handle_user_change() ?
|
66 |
$fs->get_installs_ids_with_foreign_licenses() :
|
67 |
array();
|
86 |
) );
|
87 |
}
|
88 |
|
89 |
+
$payments = $fs->_fetch_payments();
|
|
|
|
|
90 |
|
91 |
+
$show_billing = ( ! $is_whitelabeled && is_array( $payments ) && 0 < count( $payments ) );
|
|
|
92 |
|
93 |
|
94 |
+
$has_tabs = $fs->_add_tabs_before_content();
|
95 |
|
96 |
if ( $has_tabs ) {
|
97 |
$query_params['tabs'] = 'true';
|
140 |
$install = $fs->get_install_by_blog_id( $site_info['blog_id'] );
|
141 |
$view_params = array(
|
142 |
'freemius' => $fs,
|
|
|
143 |
'license' => $license,
|
144 |
'site' => $site_info,
|
145 |
'install' => $install,
|
366 |
|
367 |
$profile = array();
|
368 |
|
369 |
+
if ( ! $is_whitelabeled ) {
|
370 |
$profile[] = array(
|
371 |
'id' => 'user_name',
|
372 |
'title' => fs_text_inline( 'Name', 'name', $slug ),
|
645 |
<?php endif ?>
|
646 |
<?php
|
647 |
elseif ( in_array( $p['id'], array( 'license_key', 'site_secret_key' ) ) ) : ?>
|
648 |
+
<?php if ( ! $is_whitelabeled ) : ?>
|
649 |
<button class="button button-small fs-toggle-visibility"><?php fs_esc_html_echo_x_inline( 'Show', 'verb', 'show', $slug ) ?></button>
|
650 |
<?php endif ?>
|
651 |
<?php if ('license_key' === $p['id']) : ?>
|
658 |
'user_name'
|
659 |
) ) )
|
660 |
) : ?>
|
|
|
661 |
<form action="<?php echo $fs->_get_admin_page_url( 'account' ) ?>" method="POST"
|
662 |
onsubmit="var val = prompt('<?php echo esc_attr( sprintf(
|
663 |
/* translators: %s: User's account property (e.g. name, email) */
|
668 |
<input type="hidden" name="fs_<?php echo $p['id'] ?>_<?php echo $fs->get_unique_affix() ?>"
|
669 |
value="">
|
670 |
<?php wp_nonce_field( 'update_' . $p['id'] ) ?>
|
671 |
+
<input type="submit" class="button button-small"
|
672 |
value="<?php echo fs_esc_attr_x_inline( 'Edit', 'verb', 'edit', $slug ) ?>">
|
673 |
</form>
|
|
|
674 |
<?php elseif ( 'user_id' === $p['id'] && ! empty( $ids_of_installs_activated_with_foreign_licenses ) ) : ?>
|
675 |
<input id="fs_change_user" type="submit" class="button button-small"
|
676 |
value="<?php echo fs_esc_attr_inline( 'Change User', 'change-user', $slug ) ?>">
|
730 |
<div class="fs-table-body">
|
731 |
<table class="widefat">
|
732 |
<?php
|
|
|
|
|
733 |
foreach ( $site_view_params as $view_params ) {
|
734 |
fs_require_template(
|
735 |
'account/partials/site.php',
|
736 |
$view_params
|
737 |
);
|
738 |
+
} ?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
739 |
</table>
|
740 |
</div>
|
741 |
</div>
|
839 |
|
840 |
<?php
|
841 |
if ( $show_billing ) {
|
842 |
+
$view_params = array( 'id' => $VARS['id'] );
|
843 |
fs_require_once_template( 'account/billing.php', $view_params );
|
844 |
fs_require_once_template( 'account/payments.php', $view_params );
|
845 |
}
|
1095 |
'module_slug' => $slug,
|
1096 |
'module_version' => $fs->get_plugin_version(),
|
1097 |
);
|
1098 |
+
fs_require_template( 'powered-by.php', $params );
|
freemius/templates/account/partials/addon.php
CHANGED
@@ -1,4 +1,9 @@
|
|
1 |
<?php
|
|
|
|
|
|
|
|
|
|
|
2 |
/**
|
3 |
* @var array $VARS
|
4 |
* @var Freemius $fs
|
@@ -443,4 +448,4 @@
|
|
443 |
</td>
|
444 |
<!--/ Optional Delete Action -->
|
445 |
<?php endif ?>
|
446 |
-
</tr>
|
1 |
<?php
|
2 |
+
|
3 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
4 |
+
exit;
|
5 |
+
}
|
6 |
+
|
7 |
/**
|
8 |
* @var array $VARS
|
9 |
* @var Freemius $fs
|
448 |
</td>
|
449 |
<!--/ Optional Delete Action -->
|
450 |
<?php endif ?>
|
451 |
+
</tr>
|
freemius/templates/account/partials/site.php
CHANGED
@@ -23,7 +23,7 @@
|
|
23 |
$is_whitelabeled = $fs->is_whitelabeled();
|
24 |
$has_paid_plan = $fs->has_paid_plan();
|
25 |
$is_premium = $fs->is_premium();
|
26 |
-
$main_user = $
|
27 |
$blog_id = $site['blog_id'];
|
28 |
|
29 |
$install = $VARS['install'];
|
@@ -32,7 +32,7 @@
|
|
32 |
$trial_plan = $fs->get_trial_plan();
|
33 |
$free_text = fs_text_inline( 'Free', 'free', $slug );
|
34 |
|
35 |
-
if ( $is_whitelabeled &&
|
36 |
$is_whitelabeled = $fs->is_whitelabeled( true, $blog_id );
|
37 |
}
|
38 |
?>
|
@@ -174,7 +174,7 @@
|
|
174 |
<?php $row_index ++ ?>
|
175 |
<!--/ Blog ID -->
|
176 |
|
177 |
-
<?php if ( $install->user_id != $main_user->id ) : ?>
|
178 |
<?php
|
179 |
/**
|
180 |
* @var FS_User $user
|
23 |
$is_whitelabeled = $fs->is_whitelabeled();
|
24 |
$has_paid_plan = $fs->has_paid_plan();
|
25 |
$is_premium = $fs->is_premium();
|
26 |
+
$main_user = $fs->get_user();
|
27 |
$blog_id = $site['blog_id'];
|
28 |
|
29 |
$install = $VARS['install'];
|
32 |
$trial_plan = $fs->get_trial_plan();
|
33 |
$free_text = fs_text_inline( 'Free', 'free', $slug );
|
34 |
|
35 |
+
if ( $is_whitelabeled && $fs->is_delegated_connection( $blog_id ) ) {
|
36 |
$is_whitelabeled = $fs->is_whitelabeled( true, $blog_id );
|
37 |
}
|
38 |
?>
|
174 |
<?php $row_index ++ ?>
|
175 |
<!--/ Blog ID -->
|
176 |
|
177 |
+
<?php if ( $is_registered && $install->user_id != $main_user->id ) : ?>
|
178 |
<?php
|
179 |
/**
|
180 |
* @var FS_User $user
|
freemius/templates/account/payments.php
CHANGED
@@ -10,19 +10,19 @@
|
|
10 |
exit;
|
11 |
}
|
12 |
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
/**
|
20 |
-
* @var FS_Payment[] $payments
|
21 |
-
*/
|
22 |
-
$payments = $VARS['payments'];
|
23 |
|
24 |
$slug = $fs->get_slug();
|
25 |
|
|
|
|
|
|
|
|
|
|
|
26 |
?>
|
27 |
<div class="postbox">
|
28 |
<div id="fs_payments">
|
@@ -56,3 +56,4 @@
|
|
56 |
</div>
|
57 |
</div>
|
58 |
<?php
|
|
10 |
exit;
|
11 |
}
|
12 |
|
13 |
+
/**
|
14 |
+
* @var array $VARS
|
15 |
+
* @var Freemius $fs
|
16 |
+
*/
|
17 |
+
$fs = freemius( $VARS['id'] );
|
|
|
|
|
|
|
|
|
|
|
18 |
|
19 |
$slug = $fs->get_slug();
|
20 |
|
21 |
+
$payments = $fs->_fetch_payments();
|
22 |
+
|
23 |
+
$show_payments = ( is_array( $payments ) && 0 < count( $payments ) );
|
24 |
+
|
25 |
+
if ( $show_payments ) :
|
26 |
?>
|
27 |
<div class="postbox">
|
28 |
<div id="fs_payments">
|
56 |
</div>
|
57 |
</div>
|
58 |
<?php
|
59 |
+
endif;
|
freemius/templates/admin-notice.php
CHANGED
@@ -45,9 +45,6 @@
|
|
45 |
case 'promotion':
|
46 |
echo 'updated promotion';
|
47 |
break;
|
48 |
-
case 'warn':
|
49 |
-
echo 'notice notice-warning';
|
50 |
-
break;
|
51 |
case 'update':
|
52 |
// echo 'update-nag update';
|
53 |
// break;
|
@@ -67,7 +64,7 @@
|
|
67 |
} ?>"><?php if ( ! empty( $VARS['plugin'] ) ) : ?>
|
68 |
<label class="fs-plugin-title"><?php echo $VARS['plugin'] ?></label>
|
69 |
<?php endif ?>
|
70 |
-
<?php if ( ! empty( $VARS['sticky'] )
|
71 |
<div class="fs-close"><i class="dashicons dashicons-no"
|
72 |
title="<?php echo esc_attr( $dismiss_text ) ?>"></i> <span><?php echo esc_html( $dismiss_text ) ?></span>
|
73 |
</div>
|
45 |
case 'promotion':
|
46 |
echo 'updated promotion';
|
47 |
break;
|
|
|
|
|
|
|
48 |
case 'update':
|
49 |
// echo 'update-nag update';
|
50 |
// break;
|
64 |
} ?>"><?php if ( ! empty( $VARS['plugin'] ) ) : ?>
|
65 |
<label class="fs-plugin-title"><?php echo $VARS['plugin'] ?></label>
|
66 |
<?php endif ?>
|
67 |
+
<?php if ( ! empty( $VARS['sticky'] ) ) : ?>
|
68 |
<div class="fs-close"><i class="dashicons dashicons-no"
|
69 |
title="<?php echo esc_attr( $dismiss_text ) ?>"></i> <span><?php echo esc_html( $dismiss_text ) ?></span>
|
70 |
</div>
|
freemius/templates/ajax-loader.php
CHANGED
@@ -1 +1,6 @@
|
|
1 |
-
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
3 |
+
exit;
|
4 |
+
}
|
5 |
+
?>
|
6 |
+
<div class="fs-ajax-loader" style="display: none"><?php for ( $i = 1; $i <= 8; $i ++ ) : ?><div class="fs-ajax-loader-bar fs-ajax-loader-bar-<?php echo $i ?>"></div><?php endfor ?></div>
|
freemius/templates/clone-resolution-js.php
DELETED
@@ -1,77 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* @package Freemius
|
4 |
-
* @copyright Copyright (c) 2015, Freemius, Inc.
|
5 |
-
* @license https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Version 3
|
6 |
-
* @since 2.5.0
|
7 |
-
*/
|
8 |
-
|
9 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
10 |
-
exit;
|
11 |
-
}
|
12 |
-
?>
|
13 |
-
<script type="text/javascript">
|
14 |
-
( function( $ ) {
|
15 |
-
var $errorMessage = null;
|
16 |
-
|
17 |
-
$( document ).ready( function() {
|
18 |
-
var $cloneResolutionNotice = $( 'div[data-id="clone_resolution_options_notice"], div[data-id="temporary_duplicate_notice"]' );
|
19 |
-
|
20 |
-
if ( 0 === $cloneResolutionNotice.length ) {
|
21 |
-
return;
|
22 |
-
}
|
23 |
-
|
24 |
-
$errorMessage = $cloneResolutionNotice.find( '#fs_clone_resolution_error_message' );
|
25 |
-
|
26 |
-
/**
|
27 |
-
* Triggers an AJAX request when the license activation link or any of the buttons on the clone resolution options notice is clicked. The AJAX request will then handle the action the user has chosen.
|
28 |
-
*/
|
29 |
-
$cloneResolutionNotice.on( 'click', '.button, #fs_temporary_duplicate_license_activation_link', function( evt ) {
|
30 |
-
evt.preventDefault();
|
31 |
-
|
32 |
-
var $this = $( this ),
|
33 |
-
$body = $( 'body' ),
|
34 |
-
cursor = $body.css( 'cursor' );
|
35 |
-
|
36 |
-
if ( $this.hasClass( 'disabled' ) ) {
|
37 |
-
return;
|
38 |
-
}
|
39 |
-
|
40 |
-
var beforeUnload = function() {
|
41 |
-
return '<?php fs_esc_js_echo_inline( 'Please wait', 'please-wait' ) ?>';
|
42 |
-
};
|
43 |
-
|
44 |
-
$.ajax( {
|
45 |
-
// Get the parent options container from the child as `$cloneResolutionNotice` can have different AJAX URLs if both the manual clone resolution options and temporary duplicate notices are shown (for different subsites in a multisite network).
|
46 |
-
url : $this.parents( '.fs-clone-resolution-options-container' ).data( 'ajax-url' ),
|
47 |
-
method : 'POST',
|
48 |
-
data : {
|
49 |
-
action : '<?php echo $VARS['ajax_action'] ?>',
|
50 |
-
security : '<?php echo wp_create_nonce( $VARS['ajax_action'] ) ?>',
|
51 |
-
clone_action: $this.data( 'clone-action' )
|
52 |
-
},
|
53 |
-
beforeSend: function() {
|
54 |
-
$body.css( { cursor: 'wait' } );
|
55 |
-
|
56 |
-
$cloneResolutionNotice.find( '.button' ).addClass( 'disabled' );
|
57 |
-
|
58 |
-
$( window ).on( 'beforeunload', beforeUnload );
|
59 |
-
},
|
60 |
-
success : function( resultObj ) {
|
61 |
-
$( window ).off( 'beforeunload', beforeUnload );
|
62 |
-
|
63 |
-
if ( resultObj.data.redirect_url && '' !== resultObj.data.redirect_url ) {
|
64 |
-
window.location = resultObj.data.redirect_url;
|
65 |
-
} else {
|
66 |
-
window.location.reload();
|
67 |
-
}
|
68 |
-
},
|
69 |
-
error : function() {
|
70 |
-
$body.css( { cursor: cursor } );
|
71 |
-
$cloneResolutionNotice.find( '.button' ).removeClass( 'disabled' );
|
72 |
-
}
|
73 |
-
} );
|
74 |
-
} );
|
75 |
-
} );
|
76 |
-
} )( jQuery );
|
77 |
-
</script>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
freemius/templates/connect.php
CHANGED
@@ -25,15 +25,6 @@
|
|
25 |
|
26 |
$fs->_enqueue_connect_essentials();
|
27 |
|
28 |
-
/**
|
29 |
-
* Enqueueing the styles in `_enqueue_connect_essentials()` is too late, as we need them in the HEADER. Therefore, inject the styles inline to avoid FOUC.
|
30 |
-
*
|
31 |
-
* @author Vova Feldman (@svovaf)
|
32 |
-
*/
|
33 |
-
echo "<style>\n";
|
34 |
-
include WP_FS__DIR_CSS . '/admin/connect.css';
|
35 |
-
echo "</style>\n";
|
36 |
-
|
37 |
$current_user = Freemius::_get_current_wp_user();
|
38 |
|
39 |
$first_name = $current_user->user_firstname;
|
@@ -161,11 +152,11 @@
|
|
161 |
fs_require_once_template( 'plugin-icon.php', $vars );
|
162 |
?>
|
163 |
<i class="dashicons dashicons-plus fs-second"></i>
|
164 |
-
<img class="fs-connect-logo" width="80" height="80" src="//img.freemius.com/logo
|
165 |
</div>
|
166 |
<div class="fs-content">
|
167 |
<?php if ( ! empty( $error ) ) : ?>
|
168 |
-
<p class="fs-error"><?php echo
|
169 |
<?php endif ?>
|
170 |
<p><?php
|
171 |
$button_label = fs_text_inline( 'Allow & Continue', 'opt-in-connect', $slug );
|
@@ -217,6 +208,11 @@
|
|
217 |
|
218 |
$message = $fs->apply_filters(
|
219 |
$filter,
|
|
|
|
|
|
|
|
|
|
|
220 |
sprintf(
|
221 |
esc_html( $default_optin_message ),
|
222 |
'<b>' . esc_html( $fs->get_plugin_name() ) . '</b>',
|
@@ -605,11 +601,6 @@
|
|
605 |
updatePrimaryCtaText( actionType );
|
606 |
});
|
607 |
|
608 |
-
$sitesListContainer.delegate( 'td:not(:first-child)', 'click', function() {
|
609 |
-
// If a site row is clicked, trigger a click on the checkbox.
|
610 |
-
$( this ).parent().find( 'td:first-child input' ).click();
|
611 |
-
} );
|
612 |
-
|
613 |
$sitesListContainer.delegate( '.action', 'click', function( evt ) {
|
614 |
var $this = $( evt.target );
|
615 |
if ( $this.hasClass( 'selected' ) ) {
|
25 |
|
26 |
$fs->_enqueue_connect_essentials();
|
27 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
28 |
$current_user = Freemius::_get_current_wp_user();
|
29 |
|
30 |
$first_name = $current_user->user_firstname;
|
152 |
fs_require_once_template( 'plugin-icon.php', $vars );
|
153 |
?>
|
154 |
<i class="dashicons dashicons-plus fs-second"></i>
|
155 |
+
<img class="fs-connect-logo" width="80" height="80" src="//img.freemius.com/connect-logo.png"/>
|
156 |
</div>
|
157 |
<div class="fs-content">
|
158 |
<?php if ( ! empty( $error ) ) : ?>
|
159 |
+
<p class="fs-error"><?php echo esc_html( $error ) ?></p>
|
160 |
<?php endif ?>
|
161 |
<p><?php
|
162 |
$button_label = fs_text_inline( 'Allow & Continue', 'opt-in-connect', $slug );
|
208 |
|
209 |
$message = $fs->apply_filters(
|
210 |
$filter,
|
211 |
+
($is_network_upgrade_mode ?
|
212 |
+
'' :
|
213 |
+
/* translators: %s: name (e.g. Hey John,) */
|
214 |
+
$hey_x_text . '<br>'
|
215 |
+
) .
|
216 |
sprintf(
|
217 |
esc_html( $default_optin_message ),
|
218 |
'<b>' . esc_html( $fs->get_plugin_name() ) . '</b>',
|
601 |
updatePrimaryCtaText( actionType );
|
602 |
});
|
603 |
|
|
|
|
|
|
|
|
|
|
|
604 |
$sitesListContainer.delegate( '.action', 'click', function( evt ) {
|
605 |
var $this = $( evt.target );
|
606 |
if ( $this.hasClass( 'selected' ) ) {
|
freemius/templates/debug.php
CHANGED
@@ -37,6 +37,8 @@
|
|
37 |
|
38 |
$.post( ajaxurl, {
|
39 |
action: 'fs_toggle_debug_mode',
|
|
|
|
|
40 |
is_on : ($(this).hasClass( 'fs-on' ) ? 1 : 0)
|
41 |
}, function ( response ) {
|
42 |
if ( 1 == response ) {
|
@@ -77,16 +79,6 @@
|
|
77 |
<button class="button"><?php fs_esc_html_echo_inline( 'Clear Updates Transients' ) ?></button>
|
78 |
</form>
|
79 |
</td>
|
80 |
-
<?php if ( Freemius::is_deactivation_snoozed() ) : ?>
|
81 |
-
<td>
|
82 |
-
<!-- Reset Deactivation Snoozing -->
|
83 |
-
<form action="" method="POST">
|
84 |
-
<input type="hidden" name="fs_action" value="reset_deactivation_snoozing">
|
85 |
-
<?php wp_nonce_field( 'reset_deactivation_snoozing' ) ?>
|
86 |
-
<button class="button"><?php fs_esc_html_echo_inline( 'Reset Deactivation Snoozing' ) ?> (Expires in <?php echo ( Freemius::deactivation_snooze_expires_at() - time() ) ?> sec)</button>
|
87 |
-
</form>
|
88 |
-
</td>
|
89 |
-
<?php endif ?>
|
90 |
<td>
|
91 |
<!-- Sync Data with Server -->
|
92 |
<form action="" method="POST">
|
@@ -121,7 +113,8 @@
|
|
121 |
if (optionName) {
|
122 |
$.post(ajaxurl, {
|
123 |
action : 'fs_get_db_option',
|
124 |
-
|
|
|
125 |
option_name: optionName
|
126 |
}, function (response) {
|
127 |
if (response.data.value)
|
@@ -141,7 +134,8 @@
|
|
141 |
if (optionValue) {
|
142 |
$.post(ajaxurl, {
|
143 |
action : 'fs_set_db_option',
|
144 |
-
|
|
|
145 |
option_name : optionName,
|
146 |
option_value: optionValue
|
147 |
}, function () {
|
@@ -490,15 +484,8 @@
|
|
490 |
* @var FS_User[] $users
|
491 |
*/
|
492 |
$users = $VARS['users'];
|
493 |
-
$user_ids_map = array();
|
494 |
$users_with_developer_license_by_id = array();
|
495 |
|
496 |
-
if ( is_array( $users ) && ! empty( $users ) ) {
|
497 |
-
foreach ( $users as $user ) {
|
498 |
-
$user_ids_map[ $user->id ] = true;
|
499 |
-
}
|
500 |
-
}
|
501 |
-
|
502 |
foreach ( $module_types as $module_type ) {
|
503 |
/**
|
504 |
* @var FS_Plugin_License[] $licenses
|
@@ -591,7 +578,7 @@
|
|
591 |
<td><?php echo $license->is_block_features ? 'Blocking' : 'Flexible' ?></td>
|
592 |
<td><?php echo $license->is_whitelabeled ? 'Whitelabeled' : 'Normal' ?></td>
|
593 |
<td><?php
|
594 |
-
echo
|
595 |
$license->get_html_escaped_masked_secret_key() :
|
596 |
esc_html( $license->secret_key );
|
597 |
?></td>
|
@@ -741,6 +728,8 @@
|
|
741 |
|
742 |
$.post(ajaxurl, {
|
743 |
action : 'fs_get_debug_log',
|
|
|
|
|
744 |
filters: filters,
|
745 |
offset : offset,
|
746 |
limit : limit
|
37 |
|
38 |
$.post( ajaxurl, {
|
39 |
action: 'fs_toggle_debug_mode',
|
40 |
+
// As such we don't need to use `wp_json_encode` method but using it to follow wp.org guideline.
|
41 |
+
_wpnonce : <?php echo wp_json_encode( wp_create_nonce( 'fs_toggle_debug_mode' ) ); ?>,
|
42 |
is_on : ($(this).hasClass( 'fs-on' ) ? 1 : 0)
|
43 |
}, function ( response ) {
|
44 |
if ( 1 == response ) {
|
79 |
<button class="button"><?php fs_esc_html_echo_inline( 'Clear Updates Transients' ) ?></button>
|
80 |
</form>
|
81 |
</td>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
82 |
<td>
|
83 |
<!-- Sync Data with Server -->
|
84 |
<form action="" method="POST">
|
113 |
if (optionName) {
|
114 |
$.post(ajaxurl, {
|
115 |
action : 'fs_get_db_option',
|
116 |
+
// As such we don't need to use `wp_json_encode` method but using it to follow wp.org guideline.
|
117 |
+
_wpnonce : <?php echo wp_json_encode( wp_create_nonce( 'fs_get_db_option' ) ); ?>,
|
118 |
option_name: optionName
|
119 |
}, function (response) {
|
120 |
if (response.data.value)
|
134 |
if (optionValue) {
|
135 |
$.post(ajaxurl, {
|
136 |
action : 'fs_set_db_option',
|
137 |
+
// As such we don't need to use `wp_json_encode` method but using it to follow wp.org guideline.
|
138 |
+
_wpnonce : <?php echo wp_json_encode( wp_create_nonce( 'fs_set_db_option' ) ); ?>,
|
139 |
option_name : optionName,
|
140 |
option_value: optionValue
|
141 |
}, function () {
|
484 |
* @var FS_User[] $users
|
485 |
*/
|
486 |
$users = $VARS['users'];
|
|
|
487 |
$users_with_developer_license_by_id = array();
|
488 |
|
|
|
|
|
|
|
|
|
|
|
|
|
489 |
foreach ( $module_types as $module_type ) {
|
490 |
/**
|
491 |
* @var FS_Plugin_License[] $licenses
|
578 |
<td><?php echo $license->is_block_features ? 'Blocking' : 'Flexible' ?></td>
|
579 |
<td><?php echo $license->is_whitelabeled ? 'Whitelabeled' : 'Normal' ?></td>
|
580 |
<td><?php
|
581 |
+
echo $license->is_whitelabeled ?
|
582 |
$license->get_html_escaped_masked_secret_key() :
|
583 |
esc_html( $license->secret_key );
|
584 |
?></td>
|
728 |
|
729 |
$.post(ajaxurl, {
|
730 |
action : 'fs_get_debug_log',
|
731 |
+
// As such we don't need to use `wp_json_encode` method but using it to follow wp.org guideline.
|
732 |
+
_wpnonce : <?php echo wp_json_encode( wp_create_nonce( 'fs_get_debug_log' ) ); ?>,
|
733 |
filters: filters,
|
734 |
offset : offset,
|
735 |
limit : limit
|
freemius/templates/firewall-issues-js.php
CHANGED
@@ -22,10 +22,12 @@
|
|
22 |
notice = $( this ).parents( '.fs-notice' ),
|
23 |
ajaxActionSuffix = notice.attr( 'data-manager-id' ).replace( ':', '-' );
|
24 |
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
|
|
|
|
29 |
|
30 |
if ( 'squid' === error_type ) {
|
31 |
data.hosting_company = prompt( 'What is the name or URL of your hosting company?' );
|
@@ -39,7 +41,9 @@
|
|
39 |
}
|
40 |
|
41 |
if ( 'retry_ping' === error_type ) {
|
42 |
-
|
|
|
|
|
43 |
}
|
44 |
|
45 |
$( this ).css({'cursor': 'wait'});
|
@@ -56,4 +60,4 @@
|
|
56 |
});
|
57 |
});
|
58 |
});
|
59 |
-
</script>
|
22 |
notice = $( this ).parents( '.fs-notice' ),
|
23 |
ajaxActionSuffix = notice.attr( 'data-manager-id' ).replace( ':', '-' );
|
24 |
|
25 |
+
var data = {
|
26 |
+
action : 'fs_resolve_firewall_issues_' + ajaxActionSuffix,
|
27 |
+
// As such we don't need to use `wp_json_encode` method but using it to follow wp.org guideline.
|
28 |
+
_wpnonce : <?php echo wp_json_encode( wp_create_nonce( 'fs_resolve_firewall_issues' ) ); ?>,
|
29 |
+
error_type: error_type
|
30 |
+
};
|
31 |
|
32 |
if ( 'squid' === error_type ) {
|
33 |
data.hosting_company = prompt( 'What is the name or URL of your hosting company?' );
|
41 |
}
|
42 |
|
43 |
if ( 'retry_ping' === error_type ) {
|
44 |
+
data.action = 'fs_retry_connectivity_test_' + ajaxActionSuffix;
|
45 |
+
// As such we don't need to use `wp_json_encode` method but using it to follow wp.org guideline.
|
46 |
+
data._wpnonce = <?php echo wp_json_encode( wp_create_nonce( 'fs_retry_connectivity_test' ) ); ?>;
|
47 |
}
|
48 |
|
49 |
$( this ).css({'cursor': 'wait'});
|
60 |
});
|
61 |
});
|
62 |
});
|
63 |
+
</script>
|
freemius/templates/forms/deactivation/form.php
CHANGED
@@ -1,666 +1,543 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* @package Freemius
|
4 |
-
* @copyright Copyright (c) 2015, Freemius, Inc.
|
5 |
-
* @license https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Version 3
|
6 |
-
* @since 1.1.2
|
7 |
-
*/
|
8 |
-
|
9 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
10 |
-
exit;
|
11 |
-
}
|
12 |
-
|
13 |
-
/**
|
14 |
-
* @var array $VARS
|
15 |
-
*/
|
16 |
-
$fs = freemius( $VARS['id'] );
|
17 |
-
$slug = $fs->get_slug();
|
18 |
-
|
19 |
-
$subscription_cancellation_dialog_box_template_params = $VARS['subscription_cancellation_dialog_box_template_params'];
|
20 |
-
$show_deactivation_feedback_form = $VARS['show_deactivation_feedback_form'];
|
21 |
-
$confirmation_message = $VARS['uninstall_confirmation_message'];
|
22 |
-
|
23 |
-
$is_anonymous = ( ! $fs->is_registered() );
|
24 |
-
$anonymous_feedback_checkbox_html = '';
|
25 |
-
|
26 |
-
$reasons_list_items_html = '';
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
$
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
$
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
data-input-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
</span>
|
53 |
-
|
54 |
-
</
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
'
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
|
200 |
-
|
201 |
-
|
202 |
-
|
203 |
-
|
204 |
-
|
205 |
-
|
206 |
-
|
207 |
-
|
208 |
-
|
209 |
-
|
210 |
-
|
211 |
-
|
212 |
-
|
213 |
-
|
214 |
-
|
215 |
-
|
216 |
-
|
217 |
-
|
218 |
-
|
219 |
-
|
220 |
-
|
221 |
-
|
222 |
-
|
223 |
-
|
224 |
-
|
225 |
-
|
226 |
-
|
227 |
-
|
228 |
-
|
229 |
-
|
230 |
-
|
231 |
-
|
232 |
-
|
233 |
-
|
234 |
-
|
235 |
-
|
236 |
-
|
237 |
-
|
238 |
-
|
239 |
-
|
240 |
-
|
241 |
-
|
242 |
-
|
243 |
-
|
244 |
-
|
245 |
-
|
246 |
-
|
247 |
-
|
248 |
-
|
249 |
-
|
250 |
-
|
251 |
-
|
252 |
-
|
253 |
-
|
254 |
-
|
255 |
-
|
256 |
-
|
257 |
-
|
258 |
-
|
259 |
-
|
260 |
-
|
261 |
-
|
262 |
-
|
263 |
-
|
264 |
-
|
265 |
-
|
266 |
-
|
267 |
-
|
268 |
-
|
269 |
-
|
270 |
-
|
271 |
-
|
272 |
-
|
273 |
-
|
274 |
-
|
275 |
-
|
276 |
-
|
277 |
-
|
278 |
-
|
279 |
-
|
280 |
-
|
281 |
-
|
282 |
-
|
283 |
-
|
284 |
-
|
285 |
-
|
286 |
-
|
287 |
-
|
288 |
-
|
289 |
-
|
290 |
-
|
291 |
-
|
292 |
-
|
293 |
-
|
294 |
-
|
295 |
-
|
296 |
-
|
297 |
-
|
298 |
-
|
299 |
-
|
300 |
-
|
301 |
-
|
302 |
-
|
303 |
-
|
304 |
-
|
305 |
-
|
306 |
-
|
307 |
-
|
308 |
-
|
309 |
-
|
310 |
-
|
311 |
-
|
312 |
-
|
313 |
-
|
314 |
-
|
315 |
-
|
316 |
-
|
317 |
-
|
318 |
-
|
319 |
-
|
320 |
-
|
321 |
-
|
322 |
-
|
323 |
-
|
324 |
-
|
325 |
-
|
326 |
-
|
327 |
-
|
328 |
-
|
329 |
-
|
330 |
-
|
331 |
-
|
332 |
-
|
333 |
-
|
334 |
-
|
335 |
-
|
336 |
-
|
337 |
-
|
338 |
-
|
339 |
-
|
340 |
-
|
341 |
-
|
342 |
-
|
343 |
-
|
344 |
-
|
345 |
-
|
346 |
-
|
347 |
-
|
348 |
-
|
349 |
-
|
350 |
-
|
351 |
-
|
352 |
-
|
353 |
-
|
354 |
-
|
355 |
-
|
356 |
-
|
357 |
-
|
358 |
-
|
359 |
-
|
360 |
-
|
361 |
-
|
362 |
-
|
363 |
-
|
364 |
-
|
365 |
-
|
366 |
-
|
367 |
-
|
368 |
-
|
369 |
-
|
370 |
-
|
371 |
-
|
372 |
-
|
373 |
-
|
374 |
-
|
375 |
-
|
376 |
-
|
377 |
-
|
378 |
-
|
379 |
-
|
380 |
-
|
381 |
-
|
382 |
-
|
383 |
-
|
384 |
-
|
385 |
-
|
386 |
-
|
387 |
-
|
388 |
-
|
389 |
-
|
390 |
-
|
391 |
-
|
392 |
-
|
393 |
-
|
394 |
-
|
395 |
-
|
396 |
-
|
397 |
-
|
398 |
-
|
399 |
-
|
400 |
-
|
401 |
-
|
402 |
-
|
403 |
-
|
404 |
-
|
405 |
-
|
406 |
-
|
407 |
-
|
408 |
-
|
409 |
-
|
410 |
-
|
411 |
-
|
412 |
-
|
413 |
-
|
414 |
-
|
415 |
-
|
416 |
-
|
417 |
-
|
418 |
-
|
419 |
-
|
420 |
-
|
421 |
-
|
422 |
-
|
423 |
-
|
424 |
-
|
425 |
-
|
426 |
-
|
427 |
-
|
428 |
-
|
429 |
-
|
430 |
-
|
431 |
-
|
432 |
-
|
433 |
-
|
434 |
-
|
435 |
-
|
436 |
-
|
437 |
-
|
438 |
-
|
439 |
-
|
440 |
-
|
441 |
-
|
442 |
-
|
443 |
-
|
444 |
-
|
445 |
-
|
446 |
-
|
447 |
-
|
448 |
-
|
449 |
-
|
450 |
-
|
451 |
-
|
452 |
-
|
453 |
-
|
454 |
-
|
455 |
-
|
456 |
-
|
457 |
-
|
458 |
-
|
459 |
-
|
460 |
-
|
461 |
-
|
462 |
-
|
463 |
-
|
464 |
-
|
465 |
-
|
466 |
-
|
467 |
-
|
468 |
-
|
469 |
-
|
470 |
-
|
471 |
-
|
472 |
-
|
473 |
-
var
|
474 |
-
|
475 |
-
|
476 |
-
|
477 |
-
|
478 |
-
|
479 |
-
|
480 |
-
|
481 |
-
|
482 |
-
|
483 |
-
|
484 |
-
|
485 |
-
|
486 |
-
|
487 |
-
|
488 |
-
|
489 |
-
|
490 |
-
|
491 |
-
|
492 |
-
|
493 |
-
|
494 |
-
|
495 |
-
|
496 |
-
|
497 |
-
|
498 |
-
|
499 |
-
|
500 |
-
|
501 |
-
|
502 |
-
|
503 |
-
|
504 |
-
$modal.
|
505 |
-
|
506 |
-
|
507 |
-
|
508 |
-
|
509 |
-
|
510 |
-
|
511 |
-
|
512 |
-
|
513 |
-
|
514 |
-
|
515 |
-
(
|
516 |
-
|
517 |
-
|
518 |
-
|
519 |
-
|
520 |
-
|
521 |
-
|
522 |
-
|
523 |
-
|
524 |
-
|
525 |
-
|
526 |
-
|
527 |
-
|
528 |
-
|
529 |
-
|
530 |
-
|
531 |
-
return
|
532 |
-
}
|
533 |
-
|
534 |
-
|
535 |
-
|
536 |
-
|
537 |
-
|
538 |
-
|
539 |
-
|
540 |
-
|
541 |
-
|
542 |
-
|
543 |
-
|
544 |
-
|
545 |
-
function showModal() {
|
546 |
-
resetModal();
|
547 |
-
|
548 |
-
// Display the dialog box.
|
549 |
-
$modal.addClass('active');
|
550 |
-
|
551 |
-
$('body').addClass('has-fs-modal');
|
552 |
-
}
|
553 |
-
|
554 |
-
function closeModal() {
|
555 |
-
$modal.removeClass('active');
|
556 |
-
|
557 |
-
$('body').removeClass('has-fs-modal');
|
558 |
-
}
|
559 |
-
|
560 |
-
function resetModal() {
|
561 |
-
selectedReasonID = false;
|
562 |
-
|
563 |
-
// Uncheck all radio buttons.
|
564 |
-
$modal.find('input[type="radio"]').prop('checked', false);
|
565 |
-
|
566 |
-
// Remove all input fields ( textfield, textarea ).
|
567 |
-
$modal.find('.reason-input').remove();
|
568 |
-
|
569 |
-
$modal.find('.message').hide();
|
570 |
-
|
571 |
-
if ( isAnonymous ) {
|
572 |
-
$anonymousFeedback.find( 'input' ).prop( 'checked', <?php echo $fs->apply_filters( 'default_to_anonymous_feedback', false ) ? 'true' : 'false' ?> );
|
573 |
-
|
574 |
-
// Hide, since by default there is no selected reason.
|
575 |
-
$anonymousFeedback.hide();
|
576 |
-
}
|
577 |
-
|
578 |
-
var $deactivateButton = $modal.find('.button-deactivate');
|
579 |
-
|
580 |
-
/*
|
581 |
-
* If the modal dialog has no confirmation message, that is, it has only one panel, then ensure
|
582 |
-
* that clicking the deactivate button will actually deactivate the plugin.
|
583 |
-
*/
|
584 |
-
if ( $modal.hasClass( 'no-confirmation-message' ) ) {
|
585 |
-
$deactivateButton.addClass( 'allow-deactivate' );
|
586 |
-
|
587 |
-
showPanel( 'reasons' );
|
588 |
-
} else {
|
589 |
-
$deactivateButton.removeClass( 'allow-deactivate' );
|
590 |
-
|
591 |
-
showPanel( 'confirm' );
|
592 |
-
}
|
593 |
-
}
|
594 |
-
|
595 |
-
function showMessage(message) {
|
596 |
-
$modal.find('.message').text(message).show();
|
597 |
-
}
|
598 |
-
|
599 |
-
/**
|
600 |
-
* @author Xiaheng Chen (@xhchen)
|
601 |
-
*
|
602 |
-
* @since 2.4.2
|
603 |
-
*/
|
604 |
-
function changeDeactivateButtonText() {
|
605 |
-
if ( ! isOtherReasonSelected()) {
|
606 |
-
return;
|
607 |
-
}
|
608 |
-
|
609 |
-
var
|
610 |
-
$userReason = $modal.find('.reason-input input'),
|
611 |
-
$deactivateButton = $modal.find('.button-deactivate');
|
612 |
-
|
613 |
-
if (0 === $userReason.val().trim().length) {
|
614 |
-
// If the reason is empty, just change the text to 'Deactivate' (plugin) or 'Activate themeX' (theme).
|
615 |
-
$deactivateButton.html('<?php echo
|
616 |
-
$fs->is_plugin() ?
|
617 |
-
$deactivate_text :
|
618 |
-
sprintf( $activate_x_text, $theme_text )
|
619 |
-
?>');
|
620 |
-
} else {
|
621 |
-
$deactivateButton.html('<?php echo esc_js( $submit_deactivate_text ) ?>');
|
622 |
-
}
|
623 |
-
}
|
624 |
-
|
625 |
-
function showPanel(panelType) {
|
626 |
-
$modal.find( '.fs-modal-panel' ).removeClass( 'active' );
|
627 |
-
$modal.find( '[data-panel-id="' + panelType + '"]' ).addClass( 'active' );
|
628 |
-
|
629 |
-
updateButtonLabels();
|
630 |
-
}
|
631 |
-
|
632 |
-
function updateButtonLabels() {
|
633 |
-
var $deactivateButton = $modal.find( '.button-deactivate' );
|
634 |
-
|
635 |
-
// Reset the deactivate button's text.
|
636 |
-
if ( 'confirm' === getCurrentPanel() ) {
|
637 |
-
$deactivateButton.text( <?php echo json_encode( sprintf(
|
638 |
-
fs_text_inline( 'Yes - %s', 'deactivation-modal-button-confirm', $slug ),
|
639 |
-
$fs->is_plugin() ?
|
640 |
-
$deactivate_text :
|
641 |
-
sprintf( $activate_x_text, $theme_text )
|
642 |
-
) ) ?> );
|
643 |
-
} else {
|
644 |
-
$deactivateButton.html( <?php echo json_encode( sprintf(
|
645 |
-
fs_text_inline('Skip & %s', 'skip-and-x', $slug ),
|
646 |
-
$fs->is_plugin() ?
|
647 |
-
$deactivate_text :
|
648 |
-
sprintf( $activate_x_text, $theme_text )
|
649 |
-
) ) ?> );
|
650 |
-
}
|
651 |
-
}
|
652 |
-
|
653 |
-
function getCurrentPanel() {
|
654 |
-
return $modal.find('.fs-modal-panel.active').attr('data-panel-id');
|
655 |
-
}
|
656 |
-
|
657 |
-
/**
|
658 |
-
* @author Leo Fajardo (@leorw)
|
659 |
-
*
|
660 |
-
* @since 2.3.0
|
661 |
-
*/
|
662 |
-
function deactivateModule() {
|
663 |
-
window.location.href = redirectLink;
|
664 |
-
}
|
665 |
-
})(jQuery);
|
666 |
-
</script>
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* @package Freemius
|
4 |
+
* @copyright Copyright (c) 2015, Freemius, Inc.
|
5 |
+
* @license https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Version 3
|
6 |
+
* @since 1.1.2
|
7 |
+
*/
|
8 |
+
|
9 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
10 |
+
exit;
|
11 |
+
}
|
12 |
+
|
13 |
+
/**
|
14 |
+
* @var array $VARS
|
15 |
+
*/
|
16 |
+
$fs = freemius( $VARS['id'] );
|
17 |
+
$slug = $fs->get_slug();
|
18 |
+
|
19 |
+
$subscription_cancellation_dialog_box_template_params = $VARS['subscription_cancellation_dialog_box_template_params'];
|
20 |
+
$show_deactivation_feedback_form = $VARS['show_deactivation_feedback_form'];
|
21 |
+
$confirmation_message = $VARS['uninstall_confirmation_message'];
|
22 |
+
|
23 |
+
$is_anonymous = ( ! $fs->is_registered() );
|
24 |
+
$anonymous_feedback_checkbox_html = '';
|
25 |
+
|
26 |
+
$reasons_list_items_html = '';
|
27 |
+
|
28 |
+
if ( $show_deactivation_feedback_form ) {
|
29 |
+
$reasons = $VARS['reasons'];
|
30 |
+
|
31 |
+
foreach ( $reasons as $reason ) {
|
32 |
+
$list_item_classes = 'reason' . ( ! empty( $reason['input_type'] ) ? ' has-input' : '' );
|
33 |
+
|
34 |
+
if ( isset( $reason['internal_message'] ) && ! empty( $reason['internal_message'] ) ) {
|
35 |
+
$list_item_classes .= ' has-internal-message';
|
36 |
+
$reason_internal_message = $reason['internal_message'];
|
37 |
+
} else {
|
38 |
+
$reason_internal_message = '';
|
39 |
+
}
|
40 |
+
|
41 |
+
$reason_input_type = ( ! empty( $reason['input_type'] ) ? $reason['input_type'] : '' );
|
42 |
+
$reason_input_placeholder = ( ! empty( $reason['input_placeholder'] ) ? $reason['input_placeholder'] : '' );
|
43 |
+
|
44 |
+
$reason_list_item_html = <<< HTML
|
45 |
+
<li class="{$list_item_classes}"
|
46 |
+
data-input-type="{$reason_input_type}"
|
47 |
+
data-input-placeholder="{$reason_input_placeholder}">
|
48 |
+
<label>
|
49 |
+
<span>
|
50 |
+
<input type="radio" name="selected-reason" value="{$reason['id']}"/>
|
51 |
+
</span>
|
52 |
+
<span>{$reason['text']}</span>
|
53 |
+
</label>
|
54 |
+
<div class="internal-message">{$reason_internal_message}</div>
|
55 |
+
</li>
|
56 |
+
HTML;
|
57 |
+
|
58 |
+
$reasons_list_items_html .= $reason_list_item_html;
|
59 |
+
}
|
60 |
+
|
61 |
+
if ( $is_anonymous ) {
|
62 |
+
$anonymous_feedback_checkbox_html = sprintf(
|
63 |
+
'<label class="anonymous-feedback-label"><input type="checkbox" class="anonymous-feedback-checkbox"> %s</label>',
|
64 |
+
fs_esc_html_inline( 'Anonymous feedback', 'anonymous-feedback', $slug )
|
65 |
+
);
|
66 |
+
}
|
67 |
+
}
|
68 |
+
|
69 |
+
// Aliases.
|
70 |
+
$deactivate_text = fs_text_inline( 'Deactivate', 'deactivate', $slug );
|
71 |
+
$theme_text = fs_text_inline( 'Theme', 'theme', $slug );
|
72 |
+
$activate_x_text = fs_text_inline( 'Activate %s', 'activate-x', $slug );
|
73 |
+
|
74 |
+
fs_enqueue_local_style( 'fs_dialog_boxes', '/admin/dialog-boxes.css' );
|
75 |
+
|
76 |
+
if ( ! empty( $subscription_cancellation_dialog_box_template_params ) ) {
|
77 |
+
fs_require_template( 'forms/subscription-cancellation.php', $subscription_cancellation_dialog_box_template_params );
|
78 |
+
}
|
79 |
+
?>
|
80 |
+
<script type="text/javascript">
|
81 |
+
(function ($) {
|
82 |
+
var reasonsHtml = <?php echo json_encode( $reasons_list_items_html ) ?>,
|
83 |
+
modalHtml =
|
84 |
+
'<div class="fs-modal fs-modal-deactivation-feedback<?php echo empty( $confirmation_message ) ? ' no-confirmation-message' : ''; ?>">'
|
85 |
+
+ ' <div class="fs-modal-dialog">'
|
86 |
+
+ ' <div class="fs-modal-header">'
|
87 |
+
+ ' <h4><?php fs_esc_attr_echo_inline( 'Quick Feedback', 'quick-feedback' , $slug ) ?></h4>'
|
88 |
+
+ ' </div>'
|
89 |
+
+ ' <div class="fs-modal-body">'
|
90 |
+
+ ' <div class="fs-modal-panel" data-panel-id="confirm"><p><?php echo $confirmation_message; ?></p></div>'
|
91 |
+
+ ' <div class="fs-modal-panel active" data-panel-id="reasons"><h3><strong><?php echo esc_js( sprintf( fs_text_inline( 'If you have a moment, please let us know why you are %s', 'deactivation-share-reason' , $slug ), ( $fs->is_plugin() ? fs_text_inline( 'deactivating', 'deactivating', $slug ) : fs_text_inline( 'switching', 'switching', $slug ) ) ) ) ?>:</strong></h3><ul id="reasons-list">' + reasonsHtml + '</ul></div>'
|
92 |
+
+ ' </div>'
|
93 |
+
+ ' <div class="fs-modal-footer">'
|
94 |
+
+ ' <?php echo $anonymous_feedback_checkbox_html ?>'
|
95 |
+
+ ' <a href="#" class="button button-secondary button-deactivate"></a>'
|
96 |
+
+ ' <a href="#" class="button button-secondary button-close"><?php fs_esc_js_echo_inline( 'Cancel', 'cancel', $slug ) ?></a>'
|
97 |
+
+ ' </div>'
|
98 |
+
+ ' </div>'
|
99 |
+
+ '</div>',
|
100 |
+
$modal = $(modalHtml),
|
101 |
+
selectedReasonID = false,
|
102 |
+
redirectLink = '',
|
103 |
+
$anonymousFeedback = $modal.find( '.anonymous-feedback-label' ),
|
104 |
+
isAnonymous = <?php echo ( $is_anonymous ? 'true' : 'false' ); ?>,
|
105 |
+
otherReasonID = <?php echo Freemius::REASON_OTHER; ?>,
|
106 |
+
dontShareDataReasonID = <?php echo Freemius::REASON_DONT_LIKE_TO_SHARE_MY_INFORMATION; ?>,
|
107 |
+
deleteThemeUpdateData = <?php echo $fs->is_theme() && $fs->is_premium() && ! $fs->has_any_active_valid_license() ? 'true' : 'false' ?>,
|
108 |
+
$subscriptionCancellationModal = $( '.fs-modal-subscription-cancellation-<?php echo $fs->get_id() ?>' ),
|
109 |
+
showDeactivationFeedbackForm = <?php echo ( $show_deactivation_feedback_form ? 'true' : 'false' ) ?>,
|
110 |
+
$body = $( 'body' );
|
111 |
+
|
112 |
+
$modal.appendTo( $body );
|
113 |
+
|
114 |
+
if ( 0 !== $subscriptionCancellationModal.length ) {
|
115 |
+
$subscriptionCancellationModal.on( '<?php echo $fs->get_action_tag( 'subscription_cancellation_action' ) ?>', function( evt, cancelSubscription ) {
|
116 |
+
var shouldDeactivateModule = ( $modal.hasClass( 'no-confirmation-message' ) && ! showDeactivationFeedbackForm );
|
117 |
+
|
118 |
+
if ( false === cancelSubscription ) {
|
119 |
+
if ( ! shouldDeactivateModule ) {
|
120 |
+
showModal();
|
121 |
+
}
|
122 |
+
|
123 |
+
$subscriptionCancellationModal.trigger( 'closeModal' );
|
124 |
+
|
125 |
+
if ( shouldDeactivateModule ) {
|
126 |
+
deactivateModule();
|
127 |
+
}
|
128 |
+
} else {
|
129 |
+
var $errorMessage = $subscriptionCancellationModal.find( '.notice-error' );
|
130 |
+
|
131 |
+
<?php
|
132 |
+
$subscription_cancellation_context = $fs->is_paid_trial() ?
|
133 |
+
fs_text_inline( 'trial', 'trial', $slug ) :
|
134 |
+
fs_text_inline( 'subscription', 'subscription', $slug );
|
135 |
+
?>
|
136 |
+
|
137 |
+
$.ajax({
|
138 |
+
url : ajaxurl,
|
139 |
+
method : 'POST',
|
140 |
+
data : {
|
141 |
+
action : '<?php echo $fs->get_ajax_action( 'cancel_subscription_or_trial' ) ?>',
|
142 |
+
security : '<?php echo $fs->get_ajax_security( 'cancel_subscription_or_trial' ) ?>',
|
143 |
+
module_id: '<?php echo $fs->get_id() ?>'
|
144 |
+
},
|
145 |
+
beforeSend: function() {
|
146 |
+
$errorMessage.hide();
|
147 |
+
|
148 |
+
$subscriptionCancellationModal.find( '.fs-modal-footer .button' ).addClass( 'disabled' );
|
149 |
+
$subscriptionCancellationModal.find( '.fs-modal-footer .button-primary' ).text( '<?php echo esc_js(
|
150 |
+
sprintf( fs_text_inline( 'Cancelling %s...', 'cancelling-x' , $slug ), $subscription_cancellation_context )
|
151 |
+
) ?>' );
|
152 |
+
},
|
153 |
+
success: function( result ) {
|
154 |
+
if ( result.success ) {
|
155 |
+
$subscriptionCancellationModal.removeClass( 'has-subscription-actions' );
|
156 |
+
$subscriptionCancellationModal.find( '.fs-modal-footer .button-primary' ).removeClass( 'warn' );
|
157 |
+
|
158 |
+
$subscriptionCancellationModal.remove();
|
159 |
+
|
160 |
+
if ( ! shouldDeactivateModule ) {
|
161 |
+
showModal();
|
162 |
+
} else {
|
163 |
+
deactivateModule();
|
164 |
+
}
|
165 |
+
} else {
|
166 |
+
$errorMessage.find( '> p' ).html( result.error );
|
167 |
+
$errorMessage.show();
|
168 |
+
|
169 |
+
$subscriptionCancellationModal.find( '.fs-modal-footer .button' ).removeClass( 'disabled' );
|
170 |
+
$subscriptionCancellationModal.find( '.fs-modal-footer .button-primary' ).html( <?php echo json_encode( sprintf(
|
171 |
+
fs_text_inline( 'Cancel %s & Proceed', 'cancel-x-and-proceed', $slug ),
|
172 |
+
ucfirst( $subscription_cancellation_context )
|
173 |
+
) ) ?> );
|
174 |
+
}
|
175 |
+
}
|
176 |
+
});
|
177 |
+
}
|
178 |
+
});
|
179 |
+
}
|
180 |
+
|
181 |
+
registerEventHandlers();
|
182 |
+
|
183 |
+
function registerEventHandlers() {
|
184 |
+
$body.on( 'click', '#the-list .deactivate > a', function ( evt ) {
|
185 |
+
if ( 0 === $( this ).next( '[data-module-id=<?php echo $fs->get_id() ?>].fs-module-id' ).length ) {
|
186 |
+
return true;
|
187 |
+
}
|
188 |
+
|
189 |
+
evt.preventDefault();
|
190 |
+
|
191 |
+
redirectLink = $(this).attr('href');
|
192 |
+
|
193 |
+
if ( 0 == $subscriptionCancellationModal.length ) {
|
194 |
+
showModal();
|
195 |
+
} else {
|
196 |
+
$subscriptionCancellationModal.trigger( 'showModal' );
|
197 |
+
}
|
198 |
+
});
|
199 |
+
|
200 |
+
<?php
|
201 |
+
if ( ! $fs->is_plugin() ) {
|
202 |
+
/**
|
203 |
+
* For "theme" module type, the modal is shown when the current user clicks on
|
204 |
+
* the "Activate" button of any other theme. The "Activate" button is actually
|
205 |
+
* a link to the "Themes" page (/wp-admin/themes.php) containing query params
|
206 |
+
* that tell WordPress to deactivate the current theme and activate a different theme.
|
207 |
+
*
|
208 |
+
* @author Leo Fajardo (@leorw)
|
209 |
+
* @since 1.2.2
|
210 |
+
*
|
211 |
+
* @since 1.2.2.7 Don't trigger the deactivation feedback form if activating the premium version of the theme.
|
212 |
+
*/
|
213 |
+
?>
|
214 |
+
$('body').on('click', '.theme-browser .theme:not([data-slug=<?php echo $fs->get_premium_slug() ?>]) .theme-actions .button.activate', function (evt) {
|
215 |
+
evt.preventDefault();
|
216 |
+
|
217 |
+
redirectLink = $(this).attr('href');
|
218 |
+
|
219 |
+
if ( 0 != $subscriptionCancellationModal.length ) {
|
220 |
+
$subscriptionCancellationModal.trigger( 'showModal' );
|
221 |
+
} else {
|
222 |
+
if ( $modal.hasClass( 'no-confirmation-message' ) && ! showDeactivationFeedbackForm ) {
|
223 |
+
deactivateModule();
|
224 |
+
} else {
|
225 |
+
showModal();
|
226 |
+
}
|
227 |
+
}
|
228 |
+
});
|
229 |
+
<?php
|
230 |
+
} ?>
|
231 |
+
|
232 |
+
$modal.on('input propertychange', '.reason-input input', function () {
|
233 |
+
if (!isOtherReasonSelected()) {
|
234 |
+
return;
|
235 |
+
}
|
236 |
+
|
237 |
+
var reason = $(this).val().trim();
|
238 |
+
|
239 |
+
/**
|
240 |
+
* If reason is not empty, remove the error-message class of the message container
|
241 |
+
* to change the message color back to default.
|
242 |
+
*/
|
243 |
+
if (reason.length > 0) {
|
244 |
+
$('.message').removeClass('error-message');
|
245 |
+
enableDeactivateButton();
|
246 |
+
}
|
247 |
+
});
|
248 |
+
|
249 |
+
$modal.on('blur', '.reason-input input', function () {
|
250 |
+
var $userReason = $(this);
|
251 |
+
|
252 |
+
setTimeout(function () {
|
253 |
+
if (!isOtherReasonSelected()) {
|
254 |
+
return;
|
255 |
+
}
|
256 |
+
|
257 |
+
/**
|
258 |
+
* If reason is empty, add the error-message class to the message container
|
259 |
+
* to change the message color to red.
|
260 |
+
*/
|
261 |
+
if (0 === $userReason.val().trim().length) {
|
262 |
+
$('.message').addClass('error-message');
|
263 |
+
disableDeactivateButton();
|
264 |
+
}
|
265 |
+
}, 150);
|
266 |
+
});
|
267 |
+
|
268 |
+
$modal.on('click', '.fs-modal-footer .button', function (evt) {
|
269 |
+
evt.preventDefault();
|
270 |
+
|
271 |
+
if ($(this).hasClass('disabled')) {
|
272 |
+
return;
|
273 |
+
}
|
274 |
+
|
275 |
+
var _parent = $(this).parents('.fs-modal:first');
|
276 |
+
var _this = $(this);
|
277 |
+
|
278 |
+
if (_this.hasClass('allow-deactivate')) {
|
279 |
+
var $radio = $modal.find('input[type="radio"]:checked');
|
280 |
+
|
281 |
+
if (0 === $radio.length) {
|
282 |
+
if ( ! deleteThemeUpdateData ) {
|
283 |
+
// If no selected reason, just deactivate the plugin.
|
284 |
+
window.location.href = redirectLink;
|
285 |
+
} else {
|
286 |
+
$.ajax({
|
287 |
+
url : ajaxurl,
|
288 |
+
method : 'POST',
|
289 |
+
data : {
|
290 |
+
action : '<?php echo $fs->get_ajax_action( 'delete_theme_update_data' ) ?>',
|
291 |
+
security : '<?php echo $fs->get_ajax_security( 'delete_theme_update_data' ) ?>',
|
292 |
+
module_id: '<?php echo $fs->get_id() ?>'
|
293 |
+
},
|
294 |
+
beforeSend: function() {
|
295 |
+
_parent.find( '.fs-modal-footer .button' ).addClass( 'disabled' );
|
296 |
+
_parent.find( '.fs-modal-footer .button-secondary' ).text( 'Processing...' );
|
297 |
+
},
|
298 |
+
complete : function() {
|
299 |
+
window.location.href = redirectLink;
|
300 |
+
}
|
301 |
+
});
|
302 |
+
}
|
303 |
+
|
304 |
+
return;
|
305 |
+
}
|
306 |
+
|
307 |
+
var $selected_reason = $radio.parents('li:first'),
|
308 |
+
$input = $selected_reason.find('textarea, input[type="text"]'),
|
309 |
+
userReason = ( 0 !== $input.length ) ? $input.val().trim() : '';
|
310 |
+
|
311 |
+
if (isOtherReasonSelected() && ( '' === userReason )) {
|
312 |
+
return;
|
313 |
+
}
|
314 |
+
|
315 |
+
$.ajax({
|
316 |
+
url : ajaxurl,
|
317 |
+
method : 'POST',
|
318 |
+
data : {
|
319 |
+
action : '<?php echo $fs->get_ajax_action( 'submit_uninstall_reason' ) ?>',
|
320 |
+
security : '<?php echo $fs->get_ajax_security( 'submit_uninstall_reason' ) ?>',
|
321 |
+
module_id : '<?php echo $fs->get_id() ?>',
|
322 |
+
reason_id : $radio.val(),
|
323 |
+
reason_info : userReason,
|
324 |
+
is_anonymous: isAnonymousFeedback()
|
325 |
+
},
|
326 |
+
beforeSend: function () {
|
327 |
+
_parent.find('.fs-modal-footer .button').addClass('disabled');
|
328 |
+
_parent.find('.fs-modal-footer .button-secondary').text('Processing...');
|
329 |
+
},
|
330 |
+
complete : function () {
|
331 |
+
// Do not show the dialog box, deactivate the plugin.
|
332 |
+
window.location.href = redirectLink;
|
333 |
+
}
|
334 |
+
});
|
335 |
+
} else if (_this.hasClass('button-deactivate')) {
|
336 |
+
// Change the Deactivate button's text and show the reasons panel.
|
337 |
+
_parent.find('.button-deactivate').addClass('allow-deactivate');
|
338 |
+
|
339 |
+
if ( showDeactivationFeedbackForm ) {
|
340 |
+
showPanel('reasons');
|
341 |
+
} else {
|
342 |
+
deactivateModule();
|
343 |
+
}
|
344 |
+
}
|
345 |
+
});
|
346 |
+
|
347 |
+
$modal.on('click', 'input[type="radio"]', function () {
|
348 |
+
var $selectedReasonOption = $( this );
|
349 |
+
|
350 |
+
// If the selection has not changed, do not proceed.
|
351 |
+
if (selectedReasonID === $selectedReasonOption.val())
|
352 |
+
return;
|
353 |
+
|
354 |
+
selectedReasonID = $selectedReasonOption.val();
|
355 |
+
|
356 |
+
if ( isAnonymous ) {
|
357 |
+
if ( isReasonSelected( dontShareDataReasonID ) ) {
|
358 |
+
$anonymousFeedback.hide();
|
359 |
+
} else {
|
360 |
+
$anonymousFeedback.show();
|
361 |
+
}
|
362 |
+
}
|
363 |
+
|
364 |
+
var _parent = $(this).parents('li:first');
|
365 |
+
|
366 |
+
$modal.find('.reason-input').remove();
|
367 |
+
$modal.find( '.internal-message' ).hide();
|
368 |
+
$modal.find('.button-deactivate').html('<?php echo esc_js( sprintf(
|
369 |
+
fs_text_inline( 'Submit & %s', 'deactivation-modal-button-submit' , $slug ),
|
370 |
+
$fs->is_plugin() ?
|
371 |
+
$deactivate_text :
|
372 |
+
sprintf( $activate_x_text, $theme_text )
|
373 |
+
) ) ?>');
|
374 |
+
|
375 |
+
enableDeactivateButton();
|
376 |
+
|
377 |
+
if ( _parent.hasClass( 'has-internal-message' ) ) {
|
378 |
+
_parent.find( '.internal-message' ).show();
|
379 |
+
}
|
380 |
+
|
381 |
+
if (_parent.hasClass('has-input')) {
|
382 |
+
var inputType = _parent.data('input-type'),
|
383 |
+
inputPlaceholder = _parent.data('input-placeholder'),
|
384 |
+
reasonInputHtml = '<div class="reason-input"><span class="message"></span>' + ( ( 'textfield' === inputType ) ? '<input type="text" maxlength="128" />' : '<textarea rows="5" maxlength="128"></textarea>' ) + '</div>';
|
385 |
+
|
386 |
+
_parent.append($(reasonInputHtml));
|
387 |
+
_parent.find('input, textarea').attr('placeholder', inputPlaceholder).focus();
|
388 |
+
|
389 |
+
if (isOtherReasonSelected()) {
|
390 |
+
showMessage('<?php echo esc_js( fs_text_inline( 'Kindly tell us the reason so we can improve.', 'ask-for-reason-message' , $slug ) ); ?>');
|
391 |
+
disableDeactivateButton();
|
392 |
+
}
|
393 |
+
}
|
394 |
+
});
|
395 |
+
|
396 |
+
// If the user has clicked outside the window, cancel it.
|
397 |
+
$modal.on('click', function (evt) {
|
398 |
+
var $target = $(evt.target);
|
399 |
+
|
400 |
+
// If the user has clicked anywhere in the modal dialog, just return.
|
401 |
+
if ($target.hasClass('fs-modal-body') || $target.hasClass('fs-modal-footer')) {
|
402 |
+
return;
|
403 |
+
}
|
404 |
+
|
405 |
+
// If the user has not clicked the close button and the clicked element is inside the modal dialog, just return.
|
406 |
+
if (
|
407 |
+
! $target.hasClass( 'button-close' ) &&
|
408 |
+
( $target.parents( '.fs-modal-body' ).length > 0 || $target.parents( '.fs-modal-footer' ).length > 0 )
|
409 |
+
) {
|
410 |
+
return;
|
411 |
+
}
|
412 |
+
|
413 |
+
closeModal();
|
414 |
+
|
415 |
+
return false;
|
416 |
+
});
|
417 |
+
}
|
418 |
+
|
419 |
+
function isAnonymousFeedback() {
|
420 |
+
if ( ! isAnonymous ) {
|
421 |
+
return false;
|
422 |
+
}
|
423 |
+
|
424 |
+
return ( isReasonSelected( dontShareDataReasonID ) || $anonymousFeedback.find( 'input' ).prop( 'checked' ) );
|
425 |
+
}
|
426 |
+
|
427 |
+
function isReasonSelected( reasonID ) {
|
428 |
+
// Get the selected radio input element.
|
429 |
+
var $selectedReasonOption = $modal.find('input[type="radio"]:checked');
|
430 |
+
|
431 |
+
return ( reasonID == $selectedReasonOption.val() );
|
432 |
+
}
|
433 |
+
|
434 |
+
function isOtherReasonSelected() {
|
435 |
+
return isReasonSelected( otherReasonID );
|
436 |
+
}
|
437 |
+
|
438 |
+
function showModal() {
|
439 |
+
resetModal();
|
440 |
+
|
441 |
+
// Display the dialog box.
|
442 |
+
$modal.addClass('active');
|
443 |
+
|
444 |
+
$('body').addClass('has-fs-modal');
|
445 |
+
}
|
446 |
+
|
447 |
+
function closeModal() {
|
448 |
+
$modal.removeClass('active');
|
449 |
+
|
450 |
+
$('body').removeClass('has-fs-modal');
|
451 |
+
}
|
452 |
+
|
453 |
+
function resetModal() {
|
454 |
+
selectedReasonID = false;
|
455 |
+
|
456 |
+
enableDeactivateButton();
|
457 |
+
|
458 |
+
// Uncheck all radio buttons.
|
459 |
+
$modal.find('input[type="radio"]').prop('checked', false);
|
460 |
+
|
461 |
+
// Remove all input fields ( textfield, textarea ).
|
462 |
+
$modal.find('.reason-input').remove();
|
463 |
+
|
464 |
+
$modal.find('.message').hide();
|
465 |
+
|
466 |
+
if ( isAnonymous ) {
|
467 |
+
$anonymousFeedback.find( 'input' ).prop( 'checked', false );
|
468 |
+
|
469 |
+
// Hide, since by default there is no selected reason.
|
470 |
+
$anonymousFeedback.hide();
|
471 |
+
}
|
472 |
+
|
473 |
+
var $deactivateButton = $modal.find('.button-deactivate');
|
474 |
+
|
475 |
+
/*
|
476 |
+
* If the modal dialog has no confirmation message, that is, it has only one panel, then ensure
|
477 |
+
* that clicking the deactivate button will actually deactivate the plugin.
|
478 |
+
*/
|
479 |
+
if ( $modal.hasClass( 'no-confirmation-message' ) ) {
|
480 |
+
$deactivateButton.addClass( 'allow-deactivate' );
|
481 |
+
|
482 |
+
showPanel( 'reasons' );
|
483 |
+
} else {
|
484 |
+
$deactivateButton.removeClass( 'allow-deactivate' );
|
485 |
+
|
486 |
+
showPanel( 'confirm' );
|
487 |
+
}
|
488 |
+
}
|
489 |
+
|
490 |
+
function showMessage(message) {
|
491 |
+
$modal.find('.message').text(message).show();
|
492 |
+
}
|
493 |
+
|
494 |
+
function enableDeactivateButton() {
|
495 |
+
$modal.find('.button-deactivate').removeClass('disabled');
|
496 |
+
}
|
497 |
+
|
498 |
+
function disableDeactivateButton() {
|
499 |
+
$modal.find('.button-deactivate').addClass('disabled');
|
500 |
+
}
|
501 |
+
|
502 |
+
function showPanel(panelType) {
|
503 |
+
$modal.find( '.fs-modal-panel' ).removeClass( 'active' );
|
504 |
+
$modal.find( '[data-panel-id="' + panelType + '"]' ).addClass( 'active' );
|
505 |
+
|
506 |
+
updateButtonLabels();
|
507 |
+
}
|
508 |
+
|
509 |
+
function updateButtonLabels() {
|
510 |
+
var $deactivateButton = $modal.find( '.button-deactivate' );
|
511 |
+
|
512 |
+
// Reset the deactivate button's text.
|
513 |
+
if ( 'confirm' === getCurrentPanel() ) {
|
514 |
+
$deactivateButton.text( <?php echo json_encode( sprintf(
|
515 |
+
fs_text_inline( 'Yes - %s', 'deactivation-modal-button-confirm', $slug ),
|
516 |
+
$fs->is_plugin() ?
|
517 |
+
$deactivate_text :
|
518 |
+
sprintf( $activate_x_text, $theme_text )
|
519 |
+
) ) ?> );
|
520 |
+
} else {
|
521 |
+
$deactivateButton.html( <?php echo json_encode( sprintf(
|
522 |
+
fs_text_inline('Skip & %s', 'skip-and-x', $slug ),
|
523 |
+
$fs->is_plugin() ?
|
524 |
+
$deactivate_text :
|
525 |
+
sprintf( $activate_x_text, $theme_text )
|
526 |
+
) ) ?> );
|
527 |
+
}
|
528 |
+
}
|
529 |
+
|
530 |
+
function getCurrentPanel() {
|
531 |
+
return $modal.find('.fs-modal-panel.active').attr('data-panel-id');
|
532 |
+
}
|
533 |
+
|
534 |
+
/**
|
535 |
+
* @author Leo Fajardo (@leorw)
|
536 |
+
*
|
537 |
+
* @since 2.3.0
|
538 |
+
*/
|
539 |
+
function deactivateModule() {
|
540 |
+
window.location.href = redirectLink;
|
541 |
+
}
|
542 |
+
})(jQuery);
|
543 |
+
</script>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
freemius/templates/forms/email-address-update.php
DELETED
@@ -1,347 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* @package Freemius
|
4 |
-
* @copyright Copyright (c) 2015, Freemius, Inc.
|
5 |
-
* @license https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Version 3
|
6 |
-
*
|
7 |
-
* @author Leo Fajardo (@leorw)
|
8 |
-
* @since 2.5.0
|
9 |
-
*/
|
10 |
-
|
11 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
12 |
-
exit;
|
13 |
-
}
|
14 |
-
|
15 |
-
/**
|
16 |
-
* @var array $VARS
|
17 |
-
*/
|
18 |
-
$fs = freemius( $VARS['id'] );
|
19 |
-
$slug = $fs->get_slug();
|
20 |
-
|
21 |
-
$user = $fs->get_user();
|
22 |
-
$current_email_address = $user->email;
|
23 |
-
|
24 |
-
fs_enqueue_local_style( 'fs_dialog_boxes', '/admin/dialog-boxes.css' );
|
25 |
-
?>
|
26 |
-
<script type="text/javascript">
|
27 |
-
( function ( $ ) {
|
28 |
-
var modalHtml =
|
29 |
-
'<div class="fs-modal fs-modal-email-address-update">'
|
30 |
-
+ ' <div class="fs-modal-dialog">'
|
31 |
-
+ ' <div class="fs-modal-header">'
|
32 |
-
+ ' <h4><?php fs_esc_attr_echo_inline( 'Email address update', 'email-address-update', $slug ) ?></h4>'
|
33 |
-
+ ' <a href="!#" class="fs-close"><i class="dashicons dashicons-no" title="<?php echo esc_js( fs_text_x_inline( 'Dismiss', 'close window', 'dismiss', $slug ) ) ?>"></i></a>'
|
34 |
-
+ ' </div>'
|
35 |
-
+ ' <div class="fs-modal-body">'
|
36 |
-
+ ' <div class="fs-modal-panel active">'
|
37 |
-
+ ' <div class="notice notice-error inline fs-update-error-message"><p></p></div>'
|
38 |
-
+ ' <p><?php fs_echo_inline( 'Enter the new email address', 'enter-new-email-address' , $slug ) ?>:</p>'
|
39 |
-
+ ' <input type="text" class="fs-new-email-address-input" />'
|
40 |
-
+ ' <div class="fs-email-addresses-ownership-options" style="display: none">'
|
41 |
-
+ ' <p><?php echo sprintf(
|
42 |
-
fs_esc_html_inline( 'Are both %s and %s your email addresses?', 'email-addresses-ownership-confirmation' , $slug ),
|
43 |
-
sprintf( '<strong>%s</strong>', $current_email_address ),
|
44 |
-
'<strong class="fs-new-email-address"></strong>'
|
45 |
-
) ?></p>'
|
46 |
-
+ ' <ul>'
|
47 |
-
+ ' <li>'
|
48 |
-
+ ' <label>'
|
49 |
-
+ ' <span><input type="radio" name="email-addresses-ownership" value="both"/></span>'
|
50 |
-
+ ' <span><?php fs_echo_inline( 'Yes - both addresses are mine', 'both-addresses-are-mine', $slug ); ?></span>'
|
51 |
-
+ ' </label>'
|
52 |
-
+ ' </li>'
|
53 |
-
+ ' <li>'
|
54 |
-
+ ' <label>'
|
55 |
-
+ ' <span><input type="radio" name="email-addresses-ownership" value="current"/></span>'
|
56 |
-
+ ' <div><?php echo sprintf(
|
57 |
-
fs_esc_html_inline( "%s is my client's email address", 'client-email-address-confirmation', $slug ),
|
58 |
-
'<strong class="fs-new-email-address"></strong>'
|
59 |
-
) ?></span>'
|
60 |
-
+ ' </label>'
|
61 |
-
+ ' </li>'
|
62 |
-
+ ' <li>'
|
63 |
-
+ ' <label>'
|
64 |
-
+ ' <span><input type="radio" name="email-addresses-ownership" value="new"/></span>'
|
65 |
-
+ ' <div><?php echo sprintf(
|
66 |
-
fs_esc_html_inline( "%s is my email address", 'email-address-ownership-confirmation', $slug ),
|
67 |
-
'<strong class="fs-new-email-address"></strong>'
|
68 |
-
) ?></span>'
|
69 |
-
+ ' </label>'
|
70 |
-
+ ' </li>'
|
71 |
-
+ ' </ul>'
|
72 |
-
+ ' </div>'
|
73 |
-
+ ' <div class="fs-assets-transfership-options" style="display: none">'
|
74 |
-
+ ' <p><?php echo sprintf(
|
75 |
-
fs_esc_html_inline( 'Would you like to merge %s into %s?', 'accounts-merge-confirmation' , $slug ),
|
76 |
-
sprintf( '<strong>%s</strong>', $current_email_address ),
|
77 |
-
'<strong class="fs-new-email-address"></strong>'
|
78 |
-
) ?></p>'
|
79 |
-
+ ' <ul>'
|
80 |
-
+ ' <li>'
|
81 |
-
+ ' <label>'
|
82 |
-
+ ' <span><input type="radio" name="assets-transfer-type" value="all" /></span>'
|
83 |
-
+ ' <span><?php echo sprintf(
|
84 |
-
fs_esc_html_inline( 'Yes - move all my data and assets from %s to %s', 'move-all-data-and-assets-into-new-account', $slug ),
|
85 |
-
sprintf( '<strong>%s</strong>', $current_email_address ),
|
86 |
-
'<strong class="fs-new-email-address"></strong>'
|
87 |
-
) ?></span>'
|
88 |
-
+ ' </label>'
|
89 |
-
+ ' </li>'
|
90 |
-
+ ' <li>'
|
91 |
-
+ ' <label>'
|
92 |
-
+ ' <span><input type="radio" name="assets-transfer-type" value="plugin" /></span>'
|
93 |
-
+ ' <span><?php echo sprintf(
|
94 |
-
fs_esc_html_inline( "No - only move this site's data to %s", 'move-only-plugin-data-into-new-account', $slug ),
|
95 |
-
'<strong class="fs-new-email-address"></strong>'
|
96 |
-
) ?></span>'
|
97 |
-
+ ' </label>'
|
98 |
-
+ ' </li>'
|
99 |
-
+ ' </ul>'
|
100 |
-
+ ' </div>'
|
101 |
-
+ ' </div>'
|
102 |
-
+ ' </div>'
|
103 |
-
+ ' <div class="fs-modal-footer">'
|
104 |
-
+ ' <button class="button button-primary button-update" disabled><?php fs_esc_js_echo_inline( 'Update', 'update-email-address', $slug ) ?></button>'
|
105 |
-
+ ' <button class="button button-secondary button-close"><?php fs_esc_js_echo_inline( 'Cancel', 'cancel', $slug ) ?></button>'
|
106 |
-
+ ' </div>'
|
107 |
-
+ ' </div>'
|
108 |
-
+ '</div>',
|
109 |
-
$modal = $( modalHtml ),
|
110 |
-
$updateButton = $modal.find( '.button-update' ),
|
111 |
-
$updateResultMessage = $modal.find( '.fs-update-error-message' ),
|
112 |
-
selectedEmailAddressesOwnershipOption = null,
|
113 |
-
selectedAssetsTransfershipOption = null,
|
114 |
-
previousEmailAddress = '',
|
115 |
-
$body = $( 'body' );
|
116 |
-
|
117 |
-
$modal.appendTo( $body );
|
118 |
-
|
119 |
-
registerEventHandlers();
|
120 |
-
|
121 |
-
function registerEventHandlers() {
|
122 |
-
$body.on( 'click', '#fs_account_details .button-edit-email-address', function ( evt ) {
|
123 |
-
evt.preventDefault();
|
124 |
-
|
125 |
-
showModal( evt );
|
126 |
-
} );
|
127 |
-
|
128 |
-
$modal.on( 'input propertychange keyup paste delete cut', '.fs-new-email-address-input', function () {
|
129 |
-
var emailAddress = $( this ).val().trim();
|
130 |
-
|
131 |
-
if ( emailAddress === previousEmailAddress ) {
|
132 |
-
return;
|
133 |
-
}
|
134 |
-
|
135 |
-
var isValidEmailAddressInput = isValidEmailAddress( emailAddress );
|
136 |
-
|
137 |
-
toggleOptions( isValidEmailAddressInput );
|
138 |
-
|
139 |
-
if ( ! isValidEmailAddressInput ) {
|
140 |
-
disableUpdateButton();
|
141 |
-
} else {
|
142 |
-
$modal.find( '.fs-new-email-address').text( emailAddress );
|
143 |
-
|
144 |
-
maybeEnableUpdateButton();
|
145 |
-
}
|
146 |
-
|
147 |
-
previousEmailAddress = emailAddress;
|
148 |
-
} );
|
149 |
-
|
150 |
-
$modal.on( 'blur', '.fs-new-email-address-input', function() {
|
151 |
-
var emailAddress = $( this ).val().trim(),
|
152 |
-
isValidEmailAddressInput = isValidEmailAddress( emailAddress );
|
153 |
-
|
154 |
-
toggleOptions( isValidEmailAddressInput );
|
155 |
-
|
156 |
-
if ( ! isValidEmailAddressInput ) {
|
157 |
-
disableUpdateButton();
|
158 |
-
}
|
159 |
-
} );
|
160 |
-
|
161 |
-
$modal.on( 'click', '.fs-close, .button-secondary', function () {
|
162 |
-
closeModal();
|
163 |
-
return false;
|
164 |
-
} );
|
165 |
-
|
166 |
-
$modal.on( 'click', '.fs-modal-footer .button-update', function ( evt ) {
|
167 |
-
if ( ! isValidEmailAddress( previousEmailAddress ) ) {
|
168 |
-
return;
|
169 |
-
}
|
170 |
-
|
171 |
-
if ( previousEmailAddress === '<?php echo $current_email_address ?>' ) {
|
172 |
-
closeModal();
|
173 |
-
return;
|
174 |
-
}
|
175 |
-
|
176 |
-
var transferType = 'transfer';
|
177 |
-
|
178 |
-
if ( 'current' === selectedEmailAddressesOwnershipOption ) {
|
179 |
-
transferType = 'transfer_to_client';
|
180 |
-
} else if (
|
181 |
-
'both' === selectedEmailAddressesOwnershipOption &&
|
182 |
-
'all' === selectedAssetsTransfershipOption
|
183 |
-
) {
|
184 |
-
transferType = 'merge';
|
185 |
-
}
|
186 |
-
|
187 |
-
$.ajax( {
|
188 |
-
url : ajaxurl,
|
189 |
-
method : 'POST',
|
190 |
-
data : {
|
191 |
-
action : '<?php echo $fs->get_ajax_action( 'update_email_address' ) ?>',
|
192 |
-
security : '<?php echo $fs->get_ajax_security( 'update_email_address' ) ?>',
|
193 |
-
module_id : '<?php echo $fs->get_id() ?>',
|
194 |
-
transfer_type: transferType,
|
195 |
-
email_address: previousEmailAddress
|
196 |
-
},
|
197 |
-
beforeSend: function () {
|
198 |
-
disableUpdateButton();
|
199 |
-
|
200 |
-
$updateButton.find( '.fs-modal-footer .button' ).prop( 'disabled', true );
|
201 |
-
$updateButton.text( 'Processing...' );
|
202 |
-
},
|
203 |
-
success : function( result ) {
|
204 |
-
if ( result.success ) {
|
205 |
-
// Redirect to the "Account" page.
|
206 |
-
window.location.reload();
|
207 |
-
} else {
|
208 |
-
if ('change_ownership' === result.error.code) {
|
209 |
-
window.location = result.error.url;
|
210 |
-
} else {
|
211 |
-
showError(result.error.message ? result.error.message : result.error);
|
212 |
-
resetUpdateButton();
|
213 |
-
}
|
214 |
-
}
|
215 |
-
},
|
216 |
-
error : function () {
|
217 |
-
showError( '<?php fs_esc_js_echo_inline( 'Unexpected error, try again in 5 minutes. If the error persists, please contact support.', 'unexpected-error', $slug ) ?>' );
|
218 |
-
|
219 |
-
resetUpdateButton();
|
220 |
-
}
|
221 |
-
} );
|
222 |
-
} );
|
223 |
-
|
224 |
-
$modal.on( 'click', 'input[type="radio"]', function () {
|
225 |
-
var $selectedOption = $( this ),
|
226 |
-
selectedOptionValue = $selectedOption.val();
|
227 |
-
|
228 |
-
// If the selection has not changed, do not proceed.
|
229 |
-
if (
|
230 |
-
selectedEmailAddressesOwnershipOption === selectedOptionValue ||
|
231 |
-
selectedAssetsTransfershipOption === selectedOptionValue
|
232 |
-
) {
|
233 |
-
return;
|
234 |
-
}
|
235 |
-
|
236 |
-
if ( 'assets-transfer-type' === $selectedOption.attr( 'name' ) ) {
|
237 |
-
selectedAssetsTransfershipOption = selectedOptionValue;
|
238 |
-
} else {
|
239 |
-
selectedEmailAddressesOwnershipOption = selectedOptionValue;
|
240 |
-
|
241 |
-
if ( 'both' !== selectedEmailAddressesOwnershipOption ) {
|
242 |
-
$modal.find( '.fs-assets-transfership-options' ).hide();
|
243 |
-
} else {
|
244 |
-
$modal.find( '.fs-assets-transfership-options' ).show();
|
245 |
-
$modal.find( '.fs-assets-transfership-options input[type="radio"]' ).prop('checked', false);
|
246 |
-
|
247 |
-
selectedAssetsTransfershipOption = null;
|
248 |
-
|
249 |
-
disableUpdateButton();
|
250 |
-
}
|
251 |
-
}
|
252 |
-
|
253 |
-
if ( isValidEmailAddress( $( '.fs-new-email-address-input' ).val().trim() ) ) {
|
254 |
-
maybeEnableUpdateButton();
|
255 |
-
}
|
256 |
-
});
|
257 |
-
}
|
258 |
-
|
259 |
-
function showModal() {
|
260 |
-
resetModal();
|
261 |
-
|
262 |
-
// Display the dialog box.
|
263 |
-
$modal.addClass( 'active' );
|
264 |
-
$modal.find( '.fs-new-email-address-input' ).focus();
|
265 |
-
|
266 |
-
$( 'body' ).addClass( 'has-fs-modal' );
|
267 |
-
}
|
268 |
-
|
269 |
-
function closeModal() {
|
270 |
-
selectedEmailAddressesOwnershipOption = null;
|
271 |
-
|
272 |
-
disableUpdateButton();
|
273 |
-
|
274 |
-
$modal.removeClass( 'active' );
|
275 |
-
|
276 |
-
$( 'body' ).removeClass( 'has-fs-modal' );
|
277 |
-
}
|
278 |
-
|
279 |
-
function resetModal() {
|
280 |
-
hideError();
|
281 |
-
|
282 |
-
// Deselect all radio buttons.
|
283 |
-
$modal.find( 'input[type="radio"]' ).prop( 'checked', false );
|
284 |
-
|
285 |
-
// Clear the value of the email address text field.
|
286 |
-
$modal.find( 'input[type="text"]' ).val( '' );
|
287 |
-
|
288 |
-
toggleOptions( false );
|
289 |
-
|
290 |
-
disableUpdateButton();
|
291 |
-
|
292 |
-
$updateButton.text( <?php echo json_encode( fs_text_inline( 'Update', 'update-email-address', $slug ) ) ?> );
|
293 |
-
}
|
294 |
-
|
295 |
-
function resetUpdateButton() {
|
296 |
-
maybeEnableUpdateButton();
|
297 |
-
|
298 |
-
$updateButton.text( <?php echo json_encode( fs_text_inline( 'Update', 'update-email-address', $slug ) ) ?> );
|
299 |
-
}
|
300 |
-
|
301 |
-
function maybeEnableUpdateButton() {
|
302 |
-
if ( null === selectedEmailAddressesOwnershipOption ) {
|
303 |
-
return;
|
304 |
-
}
|
305 |
-
|
306 |
-
if (
|
307 |
-
'both' === selectedEmailAddressesOwnershipOption &&
|
308 |
-
null === selectedAssetsTransfershipOption
|
309 |
-
) {
|
310 |
-
return;
|
311 |
-
}
|
312 |
-
|
313 |
-
$updateButton.prop( 'disabled', false );
|
314 |
-
}
|
315 |
-
|
316 |
-
function disableUpdateButton() {
|
317 |
-
$updateButton.prop( 'disabled', true );
|
318 |
-
}
|
319 |
-
|
320 |
-
function hideError() {
|
321 |
-
$updateResultMessage.hide();
|
322 |
-
}
|
323 |
-
|
324 |
-
function showError( msg ) {
|
325 |
-
$updateResultMessage.find( ' > p' ).html( msg );
|
326 |
-
$updateResultMessage.show();
|
327 |
-
}
|
328 |
-
|
329 |
-
function isValidEmailAddress( emailAddress ) {
|
330 |
-
if ( '' === emailAddress ) {
|
331 |
-
return false;
|
332 |
-
}
|
333 |
-
|
334 |
-
return /[0-9a-zA-Z][a-zA-Z\+0-9\.\_\-]*@[0-9a-zA-Z\-]+(\.[a-zA-Z]{2,24}){1,3}/.test( emailAddress );
|
335 |
-
}
|
336 |
-
|
337 |
-
function toggleOptions( show ) {
|
338 |
-
$modal.find( '.fs-email-addresses-ownership-options' ).toggle( show );
|
339 |
-
|
340 |
-
if ( ! show ) {
|
341 |
-
$modal.find( '.fs-assets-transfership-options' ).hide();
|
342 |
-
} else if ( 'both' === selectedEmailAddressesOwnershipOption ) {
|
343 |
-
$modal.find( '.fs-assets-transfership-options' ).show();
|
344 |
-
}
|
345 |
-
}
|
346 |
-
} )( jQuery );
|
347 |
-
</script>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
freemius/templates/forms/license-activation.php
CHANGED
@@ -59,51 +59,23 @@
|
|
59 |
if ( $is_network_activation ) {
|
60 |
$all_sites = Freemius::get_sites();
|
61 |
|
62 |
-
$subsite_data_by_install_id = array();
|
63 |
-
$install_url_by_install_id = array();
|
64 |
-
|
65 |
foreach ( $all_sites as $site ) {
|
66 |
$site_details = $fs->get_site_info( $site );
|
67 |
|
68 |
-
if ( FS_Clone_Manager::instance()->is_temporary_duplicate_by_blog_id( $site_details['blog_id'] ) ) {
|
69 |
-
continue;
|
70 |
-
}
|
71 |
-
|
72 |
$blog_id = Freemius::get_site_blog_id( $site );
|
73 |
$install = $fs->get_install_by_blog_id($blog_id);
|
74 |
|
75 |
-
if ( is_object( $install ) ) {
|
76 |
-
|
77 |
-
$clone_subsite_data = $subsite_data_by_install_id[ $install->id ];
|
78 |
-
$clone_install_url = $install_url_by_install_id[ $install->id ];
|
79 |
-
|
80 |
-
if (
|
81 |
-
/**
|
82 |
-
* If we already have an install with the same URL as the subsite it's stored in, skip the current subsite. Otherwise, replace the existing install's data with the current subsite's install's data if the URLs match.
|
83 |
-
*
|
84 |
-
* @author Leo Fajardo (@leorw)
|
85 |
-
* @since 2.5.0
|
86 |
-
*/
|
87 |
-
fs_strip_url_protocol( untrailingslashit( $clone_install_url ) ) === fs_strip_url_protocol( untrailingslashit( $clone_subsite_data['url'] ) ) ||
|
88 |
-
fs_strip_url_protocol( untrailingslashit( $install->url ) ) !== fs_strip_url_protocol( untrailingslashit( $site_details['url'] ) )
|
89 |
-
) {
|
90 |
-
continue;
|
91 |
-
}
|
92 |
-
}
|
93 |
-
|
94 |
-
if ( FS_Plugin_License::is_valid_id( $install->license_id ) ) {
|
95 |
-
$site_details['license_id'] = $install->license_id;
|
96 |
-
}
|
97 |
-
|
98 |
-
$subsite_data_by_install_id[ $install->id ] = $site_details;
|
99 |
-
$install_url_by_install_id[ $install->id ] = $install->url;
|
100 |
}
|
|
|
|
|
101 |
}
|
102 |
|
103 |
if ( $is_network_activation ) {
|
104 |
$vars = array(
|
105 |
'id' => $fs->get_id(),
|
106 |
-
'sites' =>
|
107 |
'require_license_key' => true
|
108 |
);
|
109 |
|
59 |
if ( $is_network_activation ) {
|
60 |
$all_sites = Freemius::get_sites();
|
61 |
|
|
|
|
|
|
|
62 |
foreach ( $all_sites as $site ) {
|
63 |
$site_details = $fs->get_site_info( $site );
|
64 |
|
|
|
|
|
|
|
|
|
65 |
$blog_id = Freemius::get_site_blog_id( $site );
|
66 |
$install = $fs->get_install_by_blog_id($blog_id);
|
67 |
|
68 |
+
if ( is_object( $install ) && FS_Plugin_License::is_valid_id( $install->license_id ) ) {
|
69 |
+
$site_details['license_id'] = $install->license_id;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
70 |
}
|
71 |
+
|
72 |
+
$sites_details[] = $site_details;
|
73 |
}
|
74 |
|
75 |
if ( $is_network_activation ) {
|
76 |
$vars = array(
|
77 |
'id' => $fs->get_id(),
|
78 |
+
'sites' => $sites_details,
|
79 |
'require_license_key' => true
|
80 |
);
|
81 |
|
freemius/templates/partials/network-activation.php
CHANGED
@@ -1,4 +1,9 @@
|
|
1 |
<?php
|
|
|
|
|
|
|
|
|
|
|
2 |
/**
|
3 |
* @var array $VARS
|
4 |
* @var Freemius $fs
|
@@ -86,4 +91,4 @@
|
|
86 |
</tbody>
|
87 |
</table>
|
88 |
</div>
|
89 |
-
</div>
|
1 |
<?php
|
2 |
+
|
3 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
4 |
+
exit;
|
5 |
+
}
|
6 |
+
|
7 |
/**
|
8 |
* @var array $VARS
|
9 |
* @var Freemius $fs
|
91 |
</tbody>
|
92 |
</table>
|
93 |
</div>
|
94 |
+
</div>
|
freemius/templates/plugin-info/features.php
CHANGED
@@ -43,7 +43,7 @@
|
|
43 |
$support_feature->title = fs_text_inline( 'Support', $plugin->slug );
|
44 |
$features_plan_map[ $support_feature->id ] = array( 'feature' => $support_feature, 'plans' => array() );
|
45 |
} else {
|
46 |
-
|
47 |
}
|
48 |
|
49 |
$features_plan_map[ $support_feature->id ]['plans'][ $plan->id ] = $support_feature;
|
43 |
$support_feature->title = fs_text_inline( 'Support', $plugin->slug );
|
44 |
$features_plan_map[ $support_feature->id ] = array( 'feature' => $support_feature, 'plans' => array() );
|
45 |
} else {
|
46 |
+
$support_feature = $features_plan_map['support'];
|
47 |
}
|
48 |
|
49 |
$features_plan_map[ $support_feature->id ]['plans'][ $plan->id ] = $support_feature;
|
freemius/templates/powered-by.php
CHANGED
@@ -33,12 +33,12 @@
|
|
33 |
|
34 |
$fs = freemius( $VARS['module_id'] );
|
35 |
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
<div id="pframe"></div>
|
43 |
<script type="text/javascript">
|
44 |
(function ($) {
|
@@ -58,4 +58,4 @@
|
|
58 |
});
|
59 |
})(jQuery);
|
60 |
</script>
|
61 |
-
<?php
|
33 |
|
34 |
$fs = freemius( $VARS['module_id'] );
|
35 |
|
36 |
+
wp_enqueue_script( 'jquery' );
|
37 |
+
wp_enqueue_script( 'json2' );
|
38 |
+
fs_enqueue_local_script( 'postmessage', 'nojquery.ba-postmessage.min.js' );
|
39 |
+
fs_enqueue_local_script( 'fs-postmessage', 'postmessage.js' );
|
40 |
+
?>
|
41 |
+
<?php if ( ! $fs->is_whitelabeled() ) : ?>
|
42 |
<div id="pframe"></div>
|
43 |
<script type="text/javascript">
|
44 |
(function ($) {
|
58 |
});
|
59 |
})(jQuery);
|
60 |
</script>
|
61 |
+
<?php endif ?>
|
freemius/templates/pricing.php
CHANGED
@@ -122,22 +122,21 @@
|
|
122 |
<div id="fs_pricing_wrapper" data-public-url="<?php echo trailingslashit( dirname( $pricing_js_url ) ) ?>"></div>
|
123 |
<?php
|
124 |
$pricing_config = array_merge( array(
|
125 |
-
'contact_url'
|
126 |
-
'is_network_admin'
|
127 |
-
'is_production'
|
128 |
-
'menu_slug'
|
129 |
-
'mode'
|
130 |
-
'fs_wp_endpoint_url'
|
131 |
-
'request_handler_url'
|
132 |
'admin-ajax.php?' . http_build_query( array(
|
133 |
'module_id' => $fs->get_id(),
|
134 |
'action' => $fs->get_ajax_action( 'pricing_ajax_action' ),
|
135 |
'security' => $fs->get_ajax_security( 'pricing_ajax_action' )
|
136 |
) )
|
137 |
),
|
138 |
-
'selector'
|
139 |
-
'unique_affix'
|
140 |
-
'show_annual_in_monthly' => $fs->apply_filters( 'pricing/show_annual_in_monthly', true ),
|
141 |
), $query_params );
|
142 |
|
143 |
wp_add_inline_script( 'freemius-pricing', 'Freemius.pricing.new( ' . json_encode( $pricing_config ) . ' )' );
|
@@ -207,4 +206,4 @@
|
|
207 |
'module_slug' => $slug,
|
208 |
'module_version' => $fs->get_plugin_version(),
|
209 |
);
|
210 |
-
fs_require_template( 'powered-by.php', $params );
|
122 |
<div id="fs_pricing_wrapper" data-public-url="<?php echo trailingslashit( dirname( $pricing_js_url ) ) ?>"></div>
|
123 |
<?php
|
124 |
$pricing_config = array_merge( array(
|
125 |
+
'contact_url' => $fs->contact_url(),
|
126 |
+
'is_network_admin' => fs_is_network_admin(),
|
127 |
+
'is_production' => ( defined( 'WP_FS__IS_PRODUCTION_MODE' ) ? WP_FS__IS_PRODUCTION_MODE : null ),
|
128 |
+
'menu_slug' => $fs->get_menu_slug(),
|
129 |
+
'mode' => 'dashboard',
|
130 |
+
'fs_wp_endpoint_url' => WP_FS__ADDRESS,
|
131 |
+
'request_handler_url' => admin_url(
|
132 |
'admin-ajax.php?' . http_build_query( array(
|
133 |
'module_id' => $fs->get_id(),
|
134 |
'action' => $fs->get_ajax_action( 'pricing_ajax_action' ),
|
135 |
'security' => $fs->get_ajax_security( 'pricing_ajax_action' )
|
136 |
) )
|
137 |
),
|
138 |
+
'selector' => '#fs_pricing_wrapper',
|
139 |
+
'unique_affix' => $fs->get_unique_affix(),
|
|
|
140 |
), $query_params );
|
141 |
|
142 |
wp_add_inline_script( 'freemius-pricing', 'Freemius.pricing.new( ' . json_encode( $pricing_config ) . ' )' );
|
206 |
'module_slug' => $slug,
|
207 |
'module_version' => $fs->get_plugin_version(),
|
208 |
);
|
209 |
+
fs_require_template( 'powered-by.php', $params );
|
freemius/templates/sticky-admin-notice-js.php
CHANGED
@@ -23,7 +23,9 @@
|
|
23 |
|
24 |
notice.fadeOut( 'fast', function() {
|
25 |
var data = {
|
26 |
-
action
|
|
|
|
|
27 |
message_id: id
|
28 |
};
|
29 |
|
@@ -36,4 +38,4 @@
|
|
36 |
});
|
37 |
});
|
38 |
});
|
39 |
-
</script>
|
23 |
|
24 |
notice.fadeOut( 'fast', function() {
|
25 |
var data = {
|
26 |
+
action : 'fs_dismiss_notice_action_' + ajaxActionSuffix,
|
27 |
+
// As such we don't need to use `wp_json_encode` method but using it to follow wp.org guideline.
|
28 |
+
_wpnonce : <?php echo wp_json_encode( wp_create_nonce( 'fs_dismiss_notice_action' ) ); ?>,
|
29 |
message_id: id
|
30 |
};
|
31 |
|
38 |
});
|
39 |
});
|
40 |
});
|
41 |
+
</script>
|
readme.txt
CHANGED
@@ -6,7 +6,7 @@ Donate link: https://code-atlantic.com/donate/
|
|
6 |
Tags: menu, menus, user-menu, logout, nav-menu, nav-menus, user, user-role, user-roles
|
7 |
Requires at least: 4.6
|
8 |
Tested up to: 5.8
|
9 |
-
Stable tag: 1.2.
|
10 |
Requires PHP: 5.6
|
11 |
Freemius: 2.5.0
|
12 |
License: GPLv3 or Any Later Version
|
@@ -112,6 +112,10 @@ Bugs can be reported either in our support forum or preferably on the [User Menu
|
|
112 |
|
113 |
== Changelog ==
|
114 |
|
|
|
|
|
|
|
|
|
115 |
= v1.2.8 - 03/02/2022 =
|
116 |
|
117 |
* Tweak: Update freemius sdk to the latest version.
|
6 |
Tags: menu, menus, user-menu, logout, nav-menu, nav-menus, user, user-role, user-roles
|
7 |
Requires at least: 4.6
|
8 |
Tested up to: 5.8
|
9 |
+
Stable tag: 1.2.9
|
10 |
Requires PHP: 5.6
|
11 |
Freemius: 2.5.0
|
12 |
License: GPLv3 or Any Later Version
|
112 |
|
113 |
== Changelog ==
|
114 |
|
115 |
+
= v1.2.9 - 03/02/2022 =
|
116 |
+
|
117 |
+
* Tweak: Downgrade freemius sdk to the latest stable (previously version was Release Candidate).
|
118 |
+
|
119 |
= v1.2.8 - 03/02/2022 =
|
120 |
|
121 |
* Tweak: Update freemius sdk to the latest version.
|
user-menus.php
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
* Plugin Name: User Menus
|
4 |
* Plugin URI: https://wordpress.org/plugins/user-menus/
|
5 |
* Description: Quickly customize your menus with a user's name & avatar, or show items based on user role.
|
6 |
-
* Version: 1.2.
|
7 |
* Author: Code Atlantic
|
8 |
* Author URI: https://code-atlantic.com/
|
9 |
* License: GPL2 or later
|
@@ -83,7 +83,7 @@ class JP_User_Menus {
|
|
83 |
*
|
84 |
* @var string
|
85 |
*/
|
86 |
-
public static $VER = '1.2.
|
87 |
|
88 |
/**
|
89 |
* Minimum PHP version
|
3 |
* Plugin Name: User Menus
|
4 |
* Plugin URI: https://wordpress.org/plugins/user-menus/
|
5 |
* Description: Quickly customize your menus with a user's name & avatar, or show items based on user role.
|
6 |
+
* Version: 1.2.9
|
7 |
* Author: Code Atlantic
|
8 |
* Author URI: https://code-atlantic.com/
|
9 |
* License: GPL2 or later
|
83 |
*
|
84 |
* @var string
|
85 |
*/
|
86 |
+
public static $VER = '1.2.9';
|
87 |
|
88 |
/**
|
89 |
* Minimum PHP version
|