Version Description
- New : GDPR notice in readme
- New : Update to Freemius SDK 2.0.1
- Fix : Default captions bug introduced in 1.4.30
Download this release
Release Info
Developer | bradvin |
Plugin | ![]() |
Version | 1.4.31 |
Comparing to | |
See all releases |
Code changes from version 1.4.30 to 1.4.31
- README.txt +13 -1
- foogallery.php +2 -2
- freemius/assets/css/admin/account.css +1 -1
- freemius/assets/css/admin/affiliation.css +1 -1
- freemius/assets/css/admin/connect.css +1 -1
- freemius/assets/css/admin/dialog-boxes.css +1 -1
- freemius/assets/img/foogallery.png +0 -0
- freemius/assets/scss/_colors.scss +3 -0
- freemius/assets/scss/admin/_license-activation.scss +40 -0
- freemius/assets/scss/admin/_modal-common.scss +8 -0
- freemius/assets/scss/admin/_multisite-options.scss +40 -0
- freemius/assets/scss/admin/_tooltip.scss +66 -0
- freemius/assets/scss/admin/account.scss +51 -5
- freemius/assets/scss/admin/connect.scss +27 -0
- freemius/assets/scss/admin/dialog-boxes.scss +1 -0
- freemius/composer.json +1 -1
- freemius/config.php +372 -325
- freemius/includes/class-freemius.php +19676 -14057
- freemius/includes/class-fs-admin-notices.php +302 -0
- freemius/includes/class-fs-api.php +59 -2
- freemius/includes/class-fs-logger.php +4 -1
- freemius/includes/class-fs-options.php +431 -0
- freemius/includes/class-fs-plugin-updater.php +850 -703
- freemius/includes/class-fs-storage.php +523 -0
- freemius/includes/entities/class-fs-plugin-license.php +268 -223
- freemius/includes/entities/class-fs-plugin-tag.php +28 -2
- freemius/includes/entities/class-fs-plugin.php +98 -95
- freemius/includes/entities/class-fs-site.php +222 -147
- freemius/includes/fs-core-functions.php +185 -5
- freemius/includes/fs-essential-functions.php +53 -73
- freemius/includes/fs-plugin-info-dialog.php +1087 -967
- freemius/includes/i18n.php +6 -0
- freemius/includes/managers/class-fs-admin-menu-manager.php +136 -29
- freemius/includes/managers/class-fs-admin-notice-manager.php +342 -323
- freemius/includes/managers/class-fs-cache-manager.php +322 -277
- freemius/includes/managers/class-fs-key-value-storage.php +73 -9
- freemius/includes/managers/class-fs-option-manager.php +434 -297
- freemius/includes/managers/class-fs-plugin-manager.php +2 -2
- freemius/includes/sdk/FreemiusWordPress.php +5 -3
- freemius/includes/supplements/fs-essential-functions-1.1.7.1.php +1 -1
- freemius/languages/freemius-en.mo +0 -0
- freemius/languages/freemius-en.po +532 -417
- freemius/languages/freemius-es_ES.mo +0 -0
- freemius/languages/freemius-es_ES.po +638 -506
- freemius/languages/freemius-he_IL.mo +0 -0
- freemius/languages/freemius-he_IL.po +584 -452
- freemius/languages/freemius-it_IT.mo +0 -0
- freemius/languages/freemius-it_IT.po +633 -501
- freemius/languages/freemius-ja_JP.mo +0 -0
- freemius/languages/freemius-ja_JP.po +585 -453
- freemius/languages/freemius-nl_NL.mo +0 -0
- freemius/languages/freemius-ru_RU.mo +0 -0
- freemius/languages/freemius-ru_RU.po +2166 -0
- freemius/languages/freemius.pot +587 -451
- freemius/require.php +3 -0
- freemius/start.php +2 -2
- freemius/templates/account.php +324 -375
- freemius/templates/account/partials/activate-license-button.php +54 -0
- freemius/templates/account/partials/addon.php +343 -0
- freemius/templates/account/partials/deactivate-license-button.php +36 -0
- freemius/templates/account/partials/index.php +3 -0
- freemius/templates/account/partials/site.php +331 -0
- freemius/templates/all-admin-notice.php +0 -39
- freemius/templates/auto-installation.php +2 -1
- freemius/templates/checkout-legacy.php +0 -242
- freemius/templates/checkout.php +10 -2
- freemius/templates/connect.php +267 -33
- freemius/templates/contact.php +4 -0
- freemius/templates/debug.php +642 -564
- freemius/templates/debug/plugins-themes-sync.php +1 -1
- freemius/templates/debug/scheduled-crons.php +1 -2
- freemius/templates/forms/affiliation.php +336 -333
- freemius/templates/forms/license-activation.php +507 -24
- freemius/templates/js/open-license-activation.php +37 -0
- freemius/templates/partials/network-activation.php +81 -0
- freemius/templates/plugin-icon.php +3 -113
- freemius/templates/pricing.php +9 -4
- includes/functions.php +16 -2
- includes/render-functions.php +2 -2
README.txt
CHANGED
@@ -3,7 +3,7 @@ Contributors: bradvin, steveush, fooplugins, freemius
|
|
3 |
Donate link: http://fooplugins.com
|
4 |
Tags: gallery, image gallery, photo gallery, responsive, album, media gallery, masonry gallery, portfolio, justified image gallery, video gallery, photography, photographer, retina
|
5 |
Requires at least: 3.9
|
6 |
-
Tested up to: 4.9.
|
7 |
Stable tag: trunk
|
8 |
License: GPLv2 or later
|
9 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
@@ -16,6 +16,12 @@ Why choose FooGallery? Stunning gallery layouts, responsive, retina-ready, light
|
|
16 |
|
17 |
[View the FooGallery Homepage & DEMO](http://foo.gallery/)
|
18 |
|
|
|
|
|
|
|
|
|
|
|
|
|
19 |
**PHP 7 Compatible**
|
20 |
|
21 |
FooGallery has been tried and tested on servers running PHP 7.
|
@@ -150,6 +156,12 @@ Update now to get all the latest features, bug fixes and improvements!
|
|
150 |
|
151 |
== Changelog ==
|
152 |
|
|
|
|
|
|
|
|
|
|
|
|
|
153 |
= 1.4.30 =
|
154 |
|
155 |
* Fix : Album 404 issues when used on homepage
|
3 |
Donate link: http://fooplugins.com
|
4 |
Tags: gallery, image gallery, photo gallery, responsive, album, media gallery, masonry gallery, portfolio, justified image gallery, video gallery, photography, photographer, retina
|
5 |
Requires at least: 3.9
|
6 |
+
Tested up to: 4.9.6
|
7 |
Stable tag: trunk
|
8 |
License: GPLv2 or later
|
9 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
16 |
|
17 |
[View the FooGallery Homepage & DEMO](http://foo.gallery/)
|
18 |
|
19 |
+
**GDPR**
|
20 |
+
|
21 |
+
When you install FooGallery for the first time, the plugin asks you (the website admin) to opt-in so that we can track your usage of the plugin and provide a better service (send you update emails for new version releases and security updates etc). *This is optional and not required in order to use the plugin.*
|
22 |
+
|
23 |
+
From your website point of view, FooGallery never collects or stores any visitor information at all, when someone visits your website.
|
24 |
+
|
25 |
**PHP 7 Compatible**
|
26 |
|
27 |
FooGallery has been tried and tested on servers running PHP 7.
|
156 |
|
157 |
== Changelog ==
|
158 |
|
159 |
+
= 1.4.31 =
|
160 |
+
|
161 |
+
* New : GDPR notice in readme
|
162 |
+
* New : Update to Freemius SDK 2.0.1
|
163 |
+
* Fix : Default captions bug introduced in 1.4.30
|
164 |
+
|
165 |
= 1.4.30 =
|
166 |
|
167 |
* Fix : Album 404 issues when used on homepage
|
foogallery.php
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
/*
|
4 |
Plugin Name: FooGallery
|
5 |
Description: FooGallery is the most intuitive and extensible gallery management tool ever created for WordPress
|
6 |
-
Version: 1.4.
|
7 |
Author: FooPlugins
|
8 |
Plugin URI: https://foo.gallery
|
9 |
Author URI: http://fooplugins.com
|
@@ -23,7 +23,7 @@ if ( !class_exists( 'FooGallery_Plugin' ) ) {
|
|
23 |
define( 'FOOGALLERY_PATH', plugin_dir_path( __FILE__ ) );
|
24 |
define( 'FOOGALLERY_URL', plugin_dir_url( __FILE__ ) );
|
25 |
define( 'FOOGALLERY_FILE', __FILE__ );
|
26 |
-
define( 'FOOGALLERY_VERSION', '1.4.
|
27 |
define( 'FOOGALLERY_SETTINGS_VERSION', '2' );
|
28 |
require_once FOOGALLERY_PATH . 'includes/constants.php';
|
29 |
// Create a helper function for easy SDK access.
|
3 |
/*
|
4 |
Plugin Name: FooGallery
|
5 |
Description: FooGallery is the most intuitive and extensible gallery management tool ever created for WordPress
|
6 |
+
Version: 1.4.31
|
7 |
Author: FooPlugins
|
8 |
Plugin URI: https://foo.gallery
|
9 |
Author URI: http://fooplugins.com
|
23 |
define( 'FOOGALLERY_PATH', plugin_dir_path( __FILE__ ) );
|
24 |
define( 'FOOGALLERY_URL', plugin_dir_url( __FILE__ ) );
|
25 |
define( 'FOOGALLERY_FILE', __FILE__ );
|
26 |
+
define( 'FOOGALLERY_VERSION', '1.4.31' );
|
27 |
define( 'FOOGALLERY_SETTINGS_VERSION', '2' );
|
28 |
require_once FOOGALLERY_PATH . 'includes/constants.php';
|
29 |
// Create a helper function for easy SDK access.
|
freemius/assets/css/admin/account.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
#fs_account .postbox,#fs_account .widefat{max-width:700px}#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 .
|
1 |
+
#fs_account .postbox,#fs_account .widefat{max-width:700px}#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}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/affiliation.css
CHANGED
@@ -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
|
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/connect.css
CHANGED
@@ -1 +1 @@
|
|
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 .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 div{margin-left:55px}#fs_connect .fs-permissions ul li div span{font-weight:bold;text-transform:uppercase;color:#23282d}#fs_connect .fs-permissions ul li div p{margin:2px 0 0 0}#fs_connect .fs-permissions.fs-open{background:#fff}#fs_connect .fs-permissions.fs-open ul{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}.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 div{margin-right:55px;margin-left:0}.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}
|
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 #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 div{margin-left:55px}#fs_connect .fs-permissions ul li div span{font-weight:bold;text-transform:uppercase;color:#23282d}#fs_connect .fs-permissions ul li div p{margin:2px 0 0 0}#fs_connect .fs-permissions.fs-open{background:#fff}#fs_connect .fs-permissions.fs-open ul{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}#multisite_options_container{margin-top:10px;border:1px solid #ccc;padding:5px}#multisite_options_container a{text-decoration:none}#multisite_options_container a:focus{box-shadow:none}#multisite_options_container a.selected{font-weight:bold}#multisite_options_container.apply-on-all-sites{border:0 none;padding:0}#multisite_options_container.apply-on-all-sites #all_sites_options{border-spacing:0}#multisite_options_container.apply-on-all-sites #all_sites_options td:not(:first-child){display:none}#multisite_options_container #sites_list_container{display:none;overflow:auto}#multisite_options_container #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;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-tooltip-trigger .fs-tooltip{text-align:right}.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}.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 div{margin-right:55px;margin-left:0}.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}
|
freemius/assets/css/admin/dialog-boxes.css
CHANGED
@@ -1,2 +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,0.6)}.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-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-license-activation .fs-modal-body input.license_key{width:100
|
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}
|
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 .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-license-activation .fs-modal-body input.license_key{width:100%}#license_options_container table,#license_options_container table select,#license_options_container table #available_license_key{width:100%}#license_options_container table td:first-child{width:1%}#license_options_container table #other_license_key_container label{position:relative;top:6px;float:left;margin-right:5px}#license_options_container table #other_license_key_container div{overflow:hidden;width:auto;height:30px;display:block;top:2px;position:relative}#license_options_container table #other_license_key_container div input{margin:0}#sites_list_container td{cursor:pointer}#multisite_options_container{margin-top:10px;border:1px solid #ccc;padding:5px}#multisite_options_container a{text-decoration:none}#multisite_options_container a:focus{box-shadow:none}#multisite_options_container a.selected{font-weight:bold}#multisite_options_container.apply-on-all-sites{border:0 none;padding:0}#multisite_options_container.apply-on-all-sites #all_sites_options{border-spacing:0}#multisite_options_container.apply-on-all-sites #all_sites_options td:not(:first-child){display:none}#multisite_options_container #sites_list_container{display:none;overflow:auto}#multisite_options_container #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}
|
freemius/assets/img/foogallery.png
DELETED
Binary file
|
freemius/assets/scss/_colors.scss
CHANGED
@@ -63,3 +63,6 @@ $linkedin_color: #4875b4;
|
|
63 |
$youtube_color: #ff3333;
|
64 |
$gplus_color: #c63d2d;
|
65 |
|
|
|
|
|
|
63 |
$youtube_color: #ff3333;
|
64 |
$gplus_color: #c63d2d;
|
65 |
|
66 |
+
// Tooltip
|
67 |
+
$tooltip-color: #fff;
|
68 |
+
$tooltip-bkg-color: rgba(0,0,0,0.8);
|
freemius/assets/scss/admin/_license-activation.scss
CHANGED
@@ -4,4 +4,44 @@
|
|
4 |
width: 100%;
|
5 |
}
|
6 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
7 |
}
|
4 |
width: 100%;
|
5 |
}
|
6 |
}
|
7 |
+
}
|
8 |
+
|
9 |
+
#license_options_container {
|
10 |
+
table {
|
11 |
+
&, select, #available_license_key {
|
12 |
+
width: 100%;
|
13 |
+
}
|
14 |
+
|
15 |
+
td:first-child {
|
16 |
+
width: 1%;
|
17 |
+
}
|
18 |
+
|
19 |
+
#other_license_key_container {
|
20 |
+
label {
|
21 |
+
position: relative;
|
22 |
+
top: 6px;
|
23 |
+
float: left;
|
24 |
+
margin-right: 5px;
|
25 |
+
}
|
26 |
+
|
27 |
+
div {
|
28 |
+
overflow: hidden;
|
29 |
+
width: auto;
|
30 |
+
height: 30px;
|
31 |
+
display: block;
|
32 |
+
top: 2px;
|
33 |
+
position: relative;
|
34 |
+
|
35 |
+
input {
|
36 |
+
margin: 0;
|
37 |
+
}
|
38 |
+
}
|
39 |
+
}
|
40 |
+
}
|
41 |
+
}
|
42 |
+
|
43 |
+
#sites_list_container {
|
44 |
+
td {
|
45 |
+
cursor: pointer;
|
46 |
+
}
|
47 |
}
|
freemius/assets/scss/admin/_modal-common.scss
CHANGED
@@ -118,6 +118,14 @@
|
|
118 |
color: #fff;
|
119 |
background: #aaa;
|
120 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
121 |
}
|
122 |
}
|
123 |
|
118 |
color: #fff;
|
119 |
background: #aaa;
|
120 |
}
|
121 |
+
|
122 |
+
&, &:hover
|
123 |
+
{
|
124 |
+
.dashicons
|
125 |
+
{
|
126 |
+
text-decoration: none;
|
127 |
+
}
|
128 |
+
}
|
129 |
}
|
130 |
}
|
131 |
|
freemius/assets/scss/admin/_multisite-options.scss
ADDED
@@ -0,0 +1,40 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
#multisite_options_container {
|
2 |
+
margin-top: 10px;
|
3 |
+
border: 1px solid #ccc;
|
4 |
+
padding: 5px;
|
5 |
+
|
6 |
+
a {
|
7 |
+
text-decoration: none;
|
8 |
+
|
9 |
+
&:focus {
|
10 |
+
box-shadow: none;
|
11 |
+
}
|
12 |
+
|
13 |
+
&.selected {
|
14 |
+
font-weight: bold;
|
15 |
+
}
|
16 |
+
}
|
17 |
+
|
18 |
+
&.apply-on-all-sites {
|
19 |
+
border: 0 none;
|
20 |
+
padding: 0;
|
21 |
+
|
22 |
+
#all_sites_options {
|
23 |
+
border-spacing: 0;
|
24 |
+
|
25 |
+
td:not(:first-child) {
|
26 |
+
display: none;
|
27 |
+
}
|
28 |
+
}
|
29 |
+
}
|
30 |
+
|
31 |
+
#sites_list_container {
|
32 |
+
display: none;
|
33 |
+
overflow: auto;
|
34 |
+
|
35 |
+
table td {
|
36 |
+
border-top: 1px solid #ccc;
|
37 |
+
padding: 4px 2px;
|
38 |
+
}
|
39 |
+
}
|
40 |
+
}
|
freemius/assets/scss/admin/_tooltip.scss
ADDED
@@ -0,0 +1,66 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
.fs-tooltip-trigger
|
2 |
+
{
|
3 |
+
&:not(a)
|
4 |
+
{
|
5 |
+
cursor: help;
|
6 |
+
}
|
7 |
+
|
8 |
+
position: relative;
|
9 |
+
|
10 |
+
.fs-tooltip
|
11 |
+
{
|
12 |
+
opacity: 0;
|
13 |
+
visibility: hidden;
|
14 |
+
@include transition(opacity 0.3s ease-in-out);
|
15 |
+
position: absolute;
|
16 |
+
background: $tooltip-bkg-color;
|
17 |
+
color: $tooltip-color;
|
18 |
+
font-family: 'arial', serif;
|
19 |
+
font-size: 12px;
|
20 |
+
padding: 10px;
|
21 |
+
z-index: 999999;
|
22 |
+
bottom: 100%;
|
23 |
+
margin-bottom: 5px;
|
24 |
+
left: 0;
|
25 |
+
right: 0;
|
26 |
+
@include border-radius(5px);
|
27 |
+
@include box-shadow(1px 1px 1px rgba(0, 0, 0, 0.2));
|
28 |
+
line-height: 1.3em;
|
29 |
+
font-weight: bold;
|
30 |
+
text-align: left;
|
31 |
+
|
32 |
+
.rtl &
|
33 |
+
{
|
34 |
+
text-align: right;
|
35 |
+
}
|
36 |
+
|
37 |
+
&::after
|
38 |
+
{
|
39 |
+
content: ' ';
|
40 |
+
display: block;
|
41 |
+
width: 0;
|
42 |
+
height: 0;
|
43 |
+
border-style: solid;
|
44 |
+
border-width: 5px 5px 0 5px;
|
45 |
+
border-color: $tooltip-bkg-color transparent transparent transparent;
|
46 |
+
position: absolute;
|
47 |
+
top: 100%;
|
48 |
+
left: 21px;
|
49 |
+
|
50 |
+
.rtl &
|
51 |
+
{
|
52 |
+
right: 21px;
|
53 |
+
left: auto;
|
54 |
+
}
|
55 |
+
}
|
56 |
+
}
|
57 |
+
|
58 |
+
&:hover
|
59 |
+
{
|
60 |
+
.fs-tooltip
|
61 |
+
{
|
62 |
+
visibility: visible;
|
63 |
+
opacity: 1;
|
64 |
+
}
|
65 |
+
}
|
66 |
+
}
|
freemius/assets/scss/admin/account.scss
CHANGED
@@ -30,12 +30,9 @@
|
|
30 |
width: 1.2em;
|
31 |
}
|
32 |
|
33 |
-
.
|
34 |
{
|
35 |
-
|
36 |
-
{
|
37 |
-
vertical-align: middle;
|
38 |
-
}
|
39 |
}
|
40 |
|
41 |
.fs-header-actions
|
@@ -160,6 +157,55 @@ label.fs-tag
|
|
160 |
}
|
161 |
}
|
162 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
163 |
#fs_addons
|
164 |
{
|
165 |
h3
|
30 |
width: 1.2em;
|
31 |
}
|
32 |
|
33 |
+
.dashicons
|
34 |
{
|
35 |
+
vertical-align: middle;
|
|
|
|
|
|
|
36 |
}
|
37 |
|
38 |
.fs-header-actions
|
157 |
}
|
158 |
}
|
159 |
|
160 |
+
#fs_sites
|
161 |
+
{
|
162 |
+
.fs-scrollable-table
|
163 |
+
{
|
164 |
+
.fs-table-body {
|
165 |
+
max-height: 200px;
|
166 |
+
overflow: auto;
|
167 |
+
border: 1px solid #e5e5e5;
|
168 |
+
|
169 |
+
& > table.widefat {
|
170 |
+
border: none !important;
|
171 |
+
}
|
172 |
+
}
|
173 |
+
|
174 |
+
.fs-main-column {
|
175 |
+
width: 100%;
|
176 |
+
}
|
177 |
+
|
178 |
+
.fs-site-details
|
179 |
+
{
|
180 |
+
td:first-of-type
|
181 |
+
{
|
182 |
+
text-align: right;
|
183 |
+
color: grey;
|
184 |
+
width: 1px;
|
185 |
+
}
|
186 |
+
|
187 |
+
td:last-of-type
|
188 |
+
{
|
189 |
+
text-align: right;
|
190 |
+
}
|
191 |
+
}
|
192 |
+
|
193 |
+
.fs-install-details table
|
194 |
+
{
|
195 |
+
tr td
|
196 |
+
{
|
197 |
+
width: 1px;
|
198 |
+
white-space: nowrap;
|
199 |
+
|
200 |
+
&:last-of-type
|
201 |
+
{
|
202 |
+
width: auto;
|
203 |
+
}
|
204 |
+
}
|
205 |
+
}
|
206 |
+
}
|
207 |
+
}
|
208 |
+
|
209 |
#fs_addons
|
210 |
{
|
211 |
h3
|
freemius/assets/scss/admin/connect.scss
CHANGED
@@ -53,6 +53,30 @@ $form_width: 480px;
|
|
53 |
}
|
54 |
}
|
55 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
56 |
.fs-actions
|
57 |
{
|
58 |
padding: 10px 20px;
|
@@ -326,6 +350,9 @@ $form_width: 480px;
|
|
326 |
}
|
327 |
}
|
328 |
|
|
|
|
|
|
|
329 |
.rtl
|
330 |
{
|
331 |
#fs_connect
|
53 |
}
|
54 |
}
|
55 |
|
56 |
+
&.require-license-key {
|
57 |
+
#sites_list_container {
|
58 |
+
td {
|
59 |
+
cursor: pointer;
|
60 |
+
}
|
61 |
+
}
|
62 |
+
}
|
63 |
+
|
64 |
+
#delegate_to_site_admins {
|
65 |
+
margin-right: 15px;
|
66 |
+
float: right;
|
67 |
+
height: 26px;
|
68 |
+
vertical-align: middle;
|
69 |
+
line-height: 37px;
|
70 |
+
font-weight: bold;
|
71 |
+
border-bottom: 1px dashed;
|
72 |
+
text-decoration: none;
|
73 |
+
|
74 |
+
&.rtl {
|
75 |
+
margin-left: 15px;
|
76 |
+
margin-right: 0;
|
77 |
+
}
|
78 |
+
}
|
79 |
+
|
80 |
.fs-actions
|
81 |
{
|
82 |
padding: 10px 20px;
|
350 |
}
|
351 |
}
|
352 |
|
353 |
+
@import "multisite-options";
|
354 |
+
@import "tooltip";
|
355 |
+
|
356 |
.rtl
|
357 |
{
|
358 |
#fs_connect
|
freemius/assets/scss/admin/dialog-boxes.scss
CHANGED
@@ -2,6 +2,7 @@
|
|
2 |
@import "modal-common";
|
3 |
@import "deactivation-feedback";
|
4 |
@import "license-activation";
|
|
|
5 |
@import "license-key-resend";
|
6 |
@import "ajax-loader";
|
7 |
@import "auto-install";
|
2 |
@import "modal-common";
|
3 |
@import "deactivation-feedback";
|
4 |
@import "license-activation";
|
5 |
+
@import "multisite-options";
|
6 |
@import "license-key-resend";
|
7 |
@import "ajax-loader";
|
8 |
@import "auto-install";
|
freemius/composer.json
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
"description": "Freemius WordPress SDK",
|
4 |
"keywords": ["freemius", "wordpress", "plugin", "sdk"],
|
5 |
"homepage": "https://freemius.com",
|
6 |
-
"license": "GPL-3.0",
|
7 |
"require": {
|
8 |
"php": ">=5.2"
|
9 |
}
|
3 |
"description": "Freemius WordPress SDK",
|
4 |
"keywords": ["freemius", "wordpress", "plugin", "sdk"],
|
5 |
"homepage": "https://freemius.com",
|
6 |
+
"license": "GPL-3.0-only",
|
7 |
"require": {
|
8 |
"php": ">=5.2"
|
9 |
}
|
freemius/config.php
CHANGED
@@ -1,331 +1,378 @@
|
|
1 |
<?php
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
|
75 |
// define( 'WP_FS__LOCALHOST_IP', WP_FS__VVV_DEFAULT_PUBLIC_IP );
|
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 |
-
#region Checkout
|
227 |
-
#--------------------------------------------------------------------------------
|
228 |
-
|
229 |
-
if ( ! defined( 'FS_CHECKOUT__ADDRESS_PRODUCTION' ) ) {
|
230 |
-
define( 'FS_CHECKOUT__ADDRESS_PRODUCTION', 'https://checkout.freemius.com' );
|
231 |
-
}
|
232 |
-
|
233 |
-
if ( ! defined( 'FS_CHECKOUT__ADDRESS_LOCALHOST' ) ) {
|
234 |
-
define( 'FS_CHECKOUT__ADDRESS_LOCALHOST', 'http://checkout.freemius-local.com:8080' );
|
235 |
-
}
|
236 |
-
|
237 |
-
if ( ! defined( 'FS_CHECKOUT__ADDRESS' ) ) {
|
238 |
-
define( 'FS_CHECKOUT__ADDRESS', ( WP_FS__IS_PRODUCTION_MODE ? FS_CHECKOUT__ADDRESS_PRODUCTION : FS_CHECKOUT__ADDRESS_LOCALHOST ) );
|
239 |
-
}
|
240 |
-
|
241 |
-
#endregion
|
242 |
-
|
243 |
-
define( 'WP_FS___OPTION_PREFIX', 'fs' . ( WP_FS__IS_PRODUCTION_MODE ? '' : '_dbg' ) . '_' );
|
244 |
-
|
245 |
-
if ( ! defined( 'WP_FS__ACCOUNTS_OPTION_NAME' ) ) {
|
246 |
-
define( 'WP_FS__ACCOUNTS_OPTION_NAME', WP_FS___OPTION_PREFIX . 'accounts' );
|
247 |
-
}
|
248 |
-
if ( ! defined( 'WP_FS__API_CACHE_OPTION_NAME' ) ) {
|
249 |
-
define( 'WP_FS__API_CACHE_OPTION_NAME', WP_FS___OPTION_PREFIX . 'api_cache' );
|
250 |
-
}
|
251 |
-
define( 'WP_FS__OPTIONS_OPTION_NAME', WP_FS___OPTION_PREFIX . 'options' );
|
252 |
-
|
253 |
-
/**
|
254 |
-
* Module types
|
255 |
-
*
|
256 |
-
* @since 1.2.2
|
257 |
-
*/
|
258 |
-
define( 'WP_FS__MODULE_TYPE_PLUGIN', 'plugin' );
|
259 |
-
define( 'WP_FS__MODULE_TYPE_THEME', 'theme' );
|
260 |
-
|
261 |
-
/**
|
262 |
-
* Billing Frequencies
|
263 |
-
*/
|
264 |
-
define( 'WP_FS__PERIOD_ANNUALLY', 'annual' );
|
265 |
-
define( 'WP_FS__PERIOD_MONTHLY', 'monthly' );
|
266 |
-
define( 'WP_FS__PERIOD_LIFETIME', 'lifetime' );
|
267 |
-
|
268 |
-
/**
|
269 |
-
* Plans
|
270 |
-
*/
|
271 |
-
define( 'WP_FS__PLAN_DEFAULT_PAID', false );
|
272 |
-
define( 'WP_FS__PLAN_FREE', 'free' );
|
273 |
-
define( 'WP_FS__PLAN_TRIAL', 'trial' );
|
274 |
-
|
275 |
-
/**
|
276 |
-
* Times in seconds
|
277 |
-
*/
|
278 |
-
if ( ! defined( 'WP_FS__TIME_5_MIN_IN_SEC' ) ) {
|
279 |
-
define( 'WP_FS__TIME_5_MIN_IN_SEC', 300 );
|
280 |
-
}
|
281 |
-
if ( ! defined( 'WP_FS__TIME_10_MIN_IN_SEC' ) ) {
|
282 |
-
define( 'WP_FS__TIME_10_MIN_IN_SEC', 600 );
|
283 |
-
}
|
284 |
// define( 'WP_FS__TIME_15_MIN_IN_SEC', 900 );
|
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 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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.0.4
|
7 |
+
*/
|
8 |
+
|
9 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
10 |
+
exit;
|
11 |
+
}
|
12 |
+
|
13 |
+
if ( ! defined( 'WP_FS__SLUG' ) ) {
|
14 |
+
define( 'WP_FS__SLUG', 'freemius' );
|
15 |
+
}
|
16 |
+
if ( ! defined( 'WP_FS__DEV_MODE' ) ) {
|
17 |
+
define( 'WP_FS__DEV_MODE', false );
|
18 |
+
}
|
19 |
+
|
20 |
+
#--------------------------------------------------------------------------------
|
21 |
+
#region API Connectivity Issues Simulation
|
22 |
+
#--------------------------------------------------------------------------------
|
23 |
+
|
24 |
+
if ( ! defined( 'WP_FS__SIMULATE_NO_API_CONNECTIVITY' ) ) {
|
25 |
+
define( 'WP_FS__SIMULATE_NO_API_CONNECTIVITY', false );
|
26 |
+
}
|
27 |
+
if ( ! defined( 'WP_FS__SIMULATE_NO_CURL' ) ) {
|
28 |
+
define( 'WP_FS__SIMULATE_NO_CURL', false );
|
29 |
+
}
|
30 |
+
if ( ! defined( 'WP_FS__SIMULATE_NO_API_CONNECTIVITY_CLOUDFLARE' ) ) {
|
31 |
+
define( 'WP_FS__SIMULATE_NO_API_CONNECTIVITY_CLOUDFLARE', false );
|
32 |
+
}
|
33 |
+
if ( ! defined( 'WP_FS__SIMULATE_NO_API_CONNECTIVITY_SQUID_ACL' ) ) {
|
34 |
+
define( 'WP_FS__SIMULATE_NO_API_CONNECTIVITY_SQUID_ACL', false );
|
35 |
+
}
|
36 |
+
if ( WP_FS__SIMULATE_NO_CURL ) {
|
37 |
+
define( 'FS_SDK__SIMULATE_NO_CURL', true );
|
38 |
+
}
|
39 |
+
if ( WP_FS__SIMULATE_NO_API_CONNECTIVITY_CLOUDFLARE ) {
|
40 |
+
define( 'FS_SDK__SIMULATE_NO_API_CONNECTIVITY_CLOUDFLARE', true );
|
41 |
+
}
|
42 |
+
if ( WP_FS__SIMULATE_NO_API_CONNECTIVITY_SQUID_ACL ) {
|
43 |
+
define( 'FS_SDK__SIMULATE_NO_API_CONNECTIVITY_SQUID_ACL', true );
|
44 |
+
}
|
45 |
+
|
46 |
+
#endregion
|
47 |
+
|
48 |
+
if ( ! defined( 'WP_FS__SIMULATE_FREEMIUS_OFF' ) ) {
|
49 |
+
define( 'WP_FS__SIMULATE_FREEMIUS_OFF', false );
|
50 |
+
}
|
51 |
+
|
52 |
+
if ( ! defined( 'WP_FS__PING_API_ON_IP_OR_HOST_CHANGES' ) ) {
|
53 |
+
/**
|
54 |
+
* @since 1.1.7.3
|
55 |
+
* @author Vova Feldman (@svovaf)
|
56 |
+
*
|
57 |
+
* I'm not sure if shared servers periodically change IP, or the subdomain of the
|
58 |
+
* admin dashboard. Also, I've seen sites that have strange loop of switching
|
59 |
+
* between domains on a daily basis. Therefore, to eliminate the risk of
|
60 |
+
* multiple unwanted connectivity test pings, temporary ignore domain or
|
61 |
+
* server IP changes.
|
62 |
+
*/
|
63 |
+
define( 'WP_FS__PING_API_ON_IP_OR_HOST_CHANGES', false );
|
64 |
+
}
|
65 |
+
|
66 |
+
/**
|
67 |
+
* If your dev environment supports custom public network IP setup
|
68 |
+
* like VVV, please update WP_FS__LOCALHOST_IP with your public IP
|
69 |
+
* and uncomment it during dev.
|
70 |
+
*/
|
71 |
+
if ( ! defined( 'WP_FS__LOCALHOST_IP' ) ) {
|
72 |
+
// VVV default public network IP.
|
73 |
+
define( 'WP_FS__VVV_DEFAULT_PUBLIC_IP', '192.168.50.4' );
|
74 |
|
75 |
// define( 'WP_FS__LOCALHOST_IP', WP_FS__VVV_DEFAULT_PUBLIC_IP );
|
76 |
+
}
|
77 |
+
|
78 |
+
/**
|
79 |
+
* If true and running with secret key, the opt-in process
|
80 |
+
* will skip the email activation process which is invoked
|
81 |
+
* when the email of the context user already exist in Freemius
|
82 |
+
* database (as a security precaution, to prevent sharing user
|
83 |
+
* secret with unauthorized entity).
|
84 |
+
*
|
85 |
+
* IMPORTANT:
|
86 |
+
* AS A SECURITY PRECAUTION, WE VALIDATE THE TIMESTAMP OF THE OPT-IN REQUEST.
|
87 |
+
* THEREFORE, MAKE SURE THAT WHEN USING THIS PARAMETER,YOUR TESTING ENVIRONMENT'S
|
88 |
+
* CLOCK IS SYNCED.
|
89 |
+
*/
|
90 |
+
if ( ! defined( 'WP_FS__SKIP_EMAIL_ACTIVATION' ) ) {
|
91 |
+
define( 'WP_FS__SKIP_EMAIL_ACTIVATION', false );
|
92 |
+
}
|
93 |
+
|
94 |
+
|
95 |
+
#--------------------------------------------------------------------------------
|
96 |
+
#region Directories
|
97 |
+
#--------------------------------------------------------------------------------
|
98 |
+
|
99 |
+
if ( ! defined( 'WP_FS__DIR' ) ) {
|
100 |
+
define( 'WP_FS__DIR', dirname( __FILE__ ) );
|
101 |
+
}
|
102 |
+
if ( ! defined( 'WP_FS__DIR_INCLUDES' ) ) {
|
103 |
+
define( 'WP_FS__DIR_INCLUDES', WP_FS__DIR . '/includes' );
|
104 |
+
}
|
105 |
+
if ( ! defined( 'WP_FS__DIR_TEMPLATES' ) ) {
|
106 |
+
define( 'WP_FS__DIR_TEMPLATES', WP_FS__DIR . '/templates' );
|
107 |
+
}
|
108 |
+
if ( ! defined( 'WP_FS__DIR_ASSETS' ) ) {
|
109 |
+
define( 'WP_FS__DIR_ASSETS', WP_FS__DIR . '/assets' );
|
110 |
+
}
|
111 |
+
if ( ! defined( 'WP_FS__DIR_CSS' ) ) {
|
112 |
+
define( 'WP_FS__DIR_CSS', WP_FS__DIR_ASSETS . '/css' );
|
113 |
+
}
|
114 |
+
if ( ! defined( 'WP_FS__DIR_JS' ) ) {
|
115 |
+
define( 'WP_FS__DIR_JS', WP_FS__DIR_ASSETS . '/js' );
|
116 |
+
}
|
117 |
+
if ( ! defined( 'WP_FS__DIR_IMG' ) ) {
|
118 |
+
define( 'WP_FS__DIR_IMG', WP_FS__DIR_ASSETS . '/img' );
|
119 |
+
}
|
120 |
+
if ( ! defined( 'WP_FS__DIR_SDK' ) ) {
|
121 |
+
define( 'WP_FS__DIR_SDK', WP_FS__DIR_INCLUDES . '/sdk' );
|
122 |
+
}
|
123 |
+
|
124 |
+
#endregion
|
125 |
+
|
126 |
+
/**
|
127 |
+
* Domain / URL / Address
|
128 |
+
*/
|
129 |
+
define( 'WP_FS__ROOT_DOMAIN_PRODUCTION', 'freemius.com' );
|
130 |
+
define( 'WP_FS__DOMAIN_PRODUCTION', 'wp.freemius.com' );
|
131 |
+
define( 'WP_FS__ADDRESS_PRODUCTION', 'https://' . WP_FS__DOMAIN_PRODUCTION );
|
132 |
+
|
133 |
+
if ( ! defined( 'WP_FS__DOMAIN_LOCALHOST' ) ) {
|
134 |
+
define( 'WP_FS__DOMAIN_LOCALHOST', 'wp.freemius' );
|
135 |
+
}
|
136 |
+
if ( ! defined( 'WP_FS__ADDRESS_LOCALHOST' ) ) {
|
137 |
+
define( 'WP_FS__ADDRESS_LOCALHOST', 'http://' . WP_FS__DOMAIN_LOCALHOST . ':8080' );
|
138 |
+
}
|
139 |
+
|
140 |
+
if ( ! defined( 'WP_FS__TESTING_DOMAIN' ) ) {
|
141 |
+
define( 'WP_FS__TESTING_DOMAIN', 'fswp' );
|
142 |
+
}
|
143 |
+
|
144 |
+
#--------------------------------------------------------------------------------
|
145 |
+
#region HTTP
|
146 |
+
#--------------------------------------------------------------------------------
|
147 |
+
|
148 |
+
if ( ! defined( 'WP_FS__IS_HTTP_REQUEST' ) ) {
|
149 |
+
define( 'WP_FS__IS_HTTP_REQUEST', isset( $_SERVER['HTTP_HOST'] ) );
|
150 |
+
}
|
151 |
+
|
152 |
+
if ( ! defined( 'WP_FS__IS_HTTPS' ) ) {
|
153 |
+
define( 'WP_FS__IS_HTTPS', ( WP_FS__IS_HTTP_REQUEST &&
|
154 |
+
// Checks if CloudFlare's HTTPS (Flexible SSL support).
|
155 |
+
isset( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) &&
|
156 |
+
'https' === strtolower( $_SERVER['HTTP_X_FORWARDED_PROTO'] )
|
157 |
+
) ||
|
158 |
+
// Check if HTTPS request.
|
159 |
+
( isset( $_SERVER['HTTPS'] ) && 'on' == $_SERVER['HTTPS'] ) ||
|
160 |
+
( isset( $_SERVER['SERVER_PORT'] ) && 443 == $_SERVER['SERVER_PORT'] )
|
161 |
+
);
|
162 |
+
}
|
163 |
+
|
164 |
+
if ( ! defined( 'WP_FS__IS_POST_REQUEST' ) ) {
|
165 |
+
define( 'WP_FS__IS_POST_REQUEST', ( WP_FS__IS_HTTP_REQUEST &&
|
166 |
+
strtoupper( $_SERVER['REQUEST_METHOD'] ) == 'POST' ) );
|
167 |
+
}
|
168 |
+
|
169 |
+
if ( ! defined( 'WP_FS__REMOTE_ADDR' ) ) {
|
170 |
+
define( 'WP_FS__REMOTE_ADDR', fs_get_ip() );
|
171 |
+
}
|
172 |
+
|
173 |
+
if ( ! defined( 'WP_FS__IS_LOCALHOST' ) ) {
|
174 |
+
if ( defined( 'WP_FS__LOCALHOST_IP' ) ) {
|
175 |
+
define( 'WP_FS__IS_LOCALHOST', ( WP_FS__LOCALHOST_IP === WP_FS__REMOTE_ADDR ) );
|
176 |
+
} else {
|
177 |
+
define( 'WP_FS__IS_LOCALHOST', WP_FS__IS_HTTP_REQUEST &&
|
178 |
+
is_string( WP_FS__REMOTE_ADDR ) &&
|
179 |
+
( substr( WP_FS__REMOTE_ADDR, 0, 4 ) === '127.' ||
|
180 |
+
WP_FS__REMOTE_ADDR === '::1' )
|
181 |
+
);
|
182 |
+
}
|
183 |
+
}
|
184 |
+
|
185 |
+
if ( ! defined( 'WP_FS__IS_LOCALHOST_FOR_SERVER' ) ) {
|
186 |
+
define( 'WP_FS__IS_LOCALHOST_FOR_SERVER', ( ! WP_FS__IS_HTTP_REQUEST ||
|
187 |
+
false !== strpos( $_SERVER['HTTP_HOST'], 'localhost' ) ) );
|
188 |
+
}
|
189 |
+
|
190 |
+
#endregion
|
191 |
+
|
192 |
+
if ( ! defined( 'WP_FS__IS_PRODUCTION_MODE' ) ) {
|
193 |
+
// By default, run with Freemius production servers.
|
194 |
+
define( 'WP_FS__IS_PRODUCTION_MODE', true );
|
195 |
+
}
|
196 |
+
|
197 |
+
if ( ! defined( 'WP_FS__ADDRESS' ) ) {
|
198 |
+
define( 'WP_FS__ADDRESS', ( WP_FS__IS_PRODUCTION_MODE ? WP_FS__ADDRESS_PRODUCTION : WP_FS__ADDRESS_LOCALHOST ) );
|
199 |
+
}
|
200 |
+
|
201 |
|
202 |
#--------------------------------------------------------------------------------
|
203 |
+
#region API
|
204 |
+
#--------------------------------------------------------------------------------
|
205 |
+
|
206 |
+
if ( ! defined( 'WP_FS__API_ADDRESS_LOCALHOST' ) ) {
|
207 |
+
define( 'WP_FS__API_ADDRESS_LOCALHOST', 'http://api.freemius:8080' );
|
208 |
+
}
|
209 |
+
if ( ! defined( 'WP_FS__API_SANDBOX_ADDRESS_LOCALHOST' ) ) {
|
210 |
+
define( 'WP_FS__API_SANDBOX_ADDRESS_LOCALHOST', 'http://sandbox-api.freemius:8080' );
|
211 |
+
}
|
212 |
+
|
213 |
+
// Set API address for local testing.
|
214 |
+
if ( ! WP_FS__IS_PRODUCTION_MODE ) {
|
215 |
+
if ( ! defined( 'FS_API__ADDRESS' ) ) {
|
216 |
+
define( 'FS_API__ADDRESS', WP_FS__API_ADDRESS_LOCALHOST );
|
217 |
+
}
|
218 |
+
if ( ! defined( 'FS_API__SANDBOX_ADDRESS' ) ) {
|
219 |
+
define( 'FS_API__SANDBOX_ADDRESS', WP_FS__API_SANDBOX_ADDRESS_LOCALHOST );
|
220 |
+
}
|
221 |
+
}
|
222 |
+
|
223 |
+
#endregion
|
224 |
+
|
225 |
+
#--------------------------------------------------------------------------------
|
226 |
+
#region Checkout
|
227 |
+
#--------------------------------------------------------------------------------
|
228 |
+
|
229 |
+
if ( ! defined( 'FS_CHECKOUT__ADDRESS_PRODUCTION' ) ) {
|
230 |
+
define( 'FS_CHECKOUT__ADDRESS_PRODUCTION', 'https://checkout.freemius.com' );
|
231 |
+
}
|
232 |
+
|
233 |
+
if ( ! defined( 'FS_CHECKOUT__ADDRESS_LOCALHOST' ) ) {
|
234 |
+
define( 'FS_CHECKOUT__ADDRESS_LOCALHOST', 'http://checkout.freemius-local.com:8080' );
|
235 |
+
}
|
236 |
+
|
237 |
+
if ( ! defined( 'FS_CHECKOUT__ADDRESS' ) ) {
|
238 |
+
define( 'FS_CHECKOUT__ADDRESS', ( WP_FS__IS_PRODUCTION_MODE ? FS_CHECKOUT__ADDRESS_PRODUCTION : FS_CHECKOUT__ADDRESS_LOCALHOST ) );
|
239 |
+
}
|
240 |
+
|
241 |
+
#endregion
|
242 |
+
|
243 |
+
define( 'WP_FS___OPTION_PREFIX', 'fs' . ( WP_FS__IS_PRODUCTION_MODE ? '' : '_dbg' ) . '_' );
|
244 |
+
|
245 |
+
if ( ! defined( 'WP_FS__ACCOUNTS_OPTION_NAME' ) ) {
|
246 |
+
define( 'WP_FS__ACCOUNTS_OPTION_NAME', WP_FS___OPTION_PREFIX . 'accounts' );
|
247 |
+
}
|
248 |
+
if ( ! defined( 'WP_FS__API_CACHE_OPTION_NAME' ) ) {
|
249 |
+
define( 'WP_FS__API_CACHE_OPTION_NAME', WP_FS___OPTION_PREFIX . 'api_cache' );
|
250 |
+
}
|
251 |
+
define( 'WP_FS__OPTIONS_OPTION_NAME', WP_FS___OPTION_PREFIX . 'options' );
|
252 |
+
|
253 |
+
/**
|
254 |
+
* Module types
|
255 |
+
*
|
256 |
+
* @since 1.2.2
|
257 |
+
*/
|
258 |
+
define( 'WP_FS__MODULE_TYPE_PLUGIN', 'plugin' );
|
259 |
+
define( 'WP_FS__MODULE_TYPE_THEME', 'theme' );
|
260 |
+
|
261 |
+
/**
|
262 |
+
* Billing Frequencies
|
263 |
+
*/
|
264 |
+
define( 'WP_FS__PERIOD_ANNUALLY', 'annual' );
|
265 |
+
define( 'WP_FS__PERIOD_MONTHLY', 'monthly' );
|
266 |
+
define( 'WP_FS__PERIOD_LIFETIME', 'lifetime' );
|
267 |
+
|
268 |
+
/**
|
269 |
+
* Plans
|
270 |
+
*/
|
271 |
+
define( 'WP_FS__PLAN_DEFAULT_PAID', false );
|
272 |
+
define( 'WP_FS__PLAN_FREE', 'free' );
|
273 |
+
define( 'WP_FS__PLAN_TRIAL', 'trial' );
|
274 |
+
|
275 |
+
/**
|
276 |
+
* Times in seconds
|
277 |
+
*/
|
278 |
+
if ( ! defined( 'WP_FS__TIME_5_MIN_IN_SEC' ) ) {
|
279 |
+
define( 'WP_FS__TIME_5_MIN_IN_SEC', 300 );
|
280 |
+
}
|
281 |
+
if ( ! defined( 'WP_FS__TIME_10_MIN_IN_SEC' ) ) {
|
282 |
+
define( 'WP_FS__TIME_10_MIN_IN_SEC', 600 );
|
283 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
284 |
// define( 'WP_FS__TIME_15_MIN_IN_SEC', 900 );
|
285 |
+
if ( ! defined( 'WP_FS__TIME_24_HOURS_IN_SEC' ) ) {
|
286 |
+
define( 'WP_FS__TIME_24_HOURS_IN_SEC', 86400 );
|
287 |
+
}
|
288 |
+
if ( ! defined( 'WP_FS__TIME_WEEK_IN_SEC' ) ) {
|
289 |
+
define( 'WP_FS__TIME_WEEK_IN_SEC', 7 * WP_FS__TIME_24_HOURS_IN_SEC );
|
290 |
+
}
|
291 |
+
|
292 |
+
#--------------------------------------------------------------------------------
|
293 |
+
#region Debugging
|
294 |
+
#--------------------------------------------------------------------------------
|
295 |
+
|
296 |
+
if ( ! defined( 'WP_FS__DEBUG_SDK' ) ) {
|
297 |
+
$debug_mode = get_option( 'fs_debug_mode', null );
|
298 |
+
|
299 |
+
if ( $debug_mode === null ) {
|
300 |
+
$debug_mode = false;
|
301 |
+
add_option( 'fs_debug_mode', $debug_mode );
|
302 |
+
}
|
303 |
+
|
304 |
+
define( 'WP_FS__DEBUG_SDK', is_numeric( $debug_mode ) ? ( 0 < $debug_mode ) : WP_FS__DEV_MODE );
|
305 |
+
}
|
306 |
+
|
307 |
+
if ( ! defined( 'WP_FS__ECHO_DEBUG_SDK' ) ) {
|
308 |
+
define( 'WP_FS__ECHO_DEBUG_SDK', WP_FS__DEV_MODE && ! empty( $_GET['fs_dbg_echo'] ) );
|
309 |
+
}
|
310 |
+
if ( ! defined( 'WP_FS__LOG_DATETIME_FORMAT' ) ) {
|
311 |
+
define( 'WP_FS__LOG_DATETIME_FORMAT', 'Y-m-d H:i:s' );
|
312 |
+
}
|
313 |
+
if ( ! defined( 'FS_API__LOGGER_ON' ) ) {
|
314 |
+
define( 'FS_API__LOGGER_ON', WP_FS__DEBUG_SDK );
|
315 |
+
}
|
316 |
+
|
317 |
+
if ( WP_FS__ECHO_DEBUG_SDK ) {
|
318 |
+
error_reporting( E_ALL );
|
319 |
+
}
|
320 |
+
|
321 |
+
#endregion
|
322 |
+
|
323 |
+
if ( ! defined( 'WP_FS__SCRIPT_START_TIME' ) ) {
|
324 |
+
define( 'WP_FS__SCRIPT_START_TIME', time() );
|
325 |
+
}
|
326 |
+
if ( ! defined( 'WP_FS__DEFAULT_PRIORITY' ) ) {
|
327 |
+
define( 'WP_FS__DEFAULT_PRIORITY', 10 );
|
328 |
+
}
|
329 |
+
if ( ! defined( 'WP_FS__LOWEST_PRIORITY' ) ) {
|
330 |
+
define( 'WP_FS__LOWEST_PRIORITY', 999999999 );
|
331 |
+
}
|
332 |
+
|
333 |
+
#--------------------------------------------------------------------------------
|
334 |
+
#region Multisite Network
|
335 |
+
#--------------------------------------------------------------------------------
|
336 |
+
|
337 |
+
/**
|
338 |
+
* Do not use this define directly, it will have the wrong value
|
339 |
+
* during plugin uninstall/deletion when the inclusion of the plugin
|
340 |
+
* is triggered due to registration with register_uninstall_hook().
|
341 |
+
*
|
342 |
+
* Instead, use fs_is_network_admin().
|
343 |
+
*
|
344 |
+
* @author Vova Feldman (@svovaf)
|
345 |
+
*/
|
346 |
+
if ( ! defined( 'WP_FS__IS_NETWORK_ADMIN' ) ) {
|
347 |
+
define( 'WP_FS__IS_NETWORK_ADMIN',
|
348 |
+
is_network_admin() ||
|
349 |
+
( is_multisite() &&
|
350 |
+
( ( defined( 'DOING_AJAX' ) && DOING_AJAX &&
|
351 |
+
( isset( $_REQUEST['_fs_network_admin'] ) /*||
|
352 |
+
( ! empty( $_REQUEST['action'] ) && 'delete-plugin' === $_REQUEST['action'] )*/ )
|
353 |
+
) ||
|
354 |
+
// Plugin uninstall.
|
355 |
+
defined( 'WP_UNINSTALL_PLUGIN' ) )
|
356 |
+
)
|
357 |
+
);
|
358 |
+
}
|
359 |
+
|
360 |
+
/**
|
361 |
+
* Do not use this define directly, it will have the wrong value
|
362 |
+
* during plugin uninstall/deletion when the inclusion of the plugin
|
363 |
+
* is triggered due to registration with register_uninstall_hook().
|
364 |
+
*
|
365 |
+
* Instead, use fs_is_blog_admin().
|
366 |
+
*
|
367 |
+
* @author Vova Feldman (@svovaf)
|
368 |
+
*/
|
369 |
+
if ( ! defined( 'WP_FS__IS_BLOG_ADMIN' ) ) {
|
370 |
+
define( 'WP_FS__IS_BLOG_ADMIN', is_blog_admin() || ( defined( 'DOING_AJAX' ) && DOING_AJAX && isset( $_REQUEST['_fs_blog_admin'] ) ) );
|
371 |
+
}
|
372 |
+
|
373 |
+
if ( ! defined( 'WP_FS__SHOW_NETWORK_EVEN_WHEN_DELEGATED' ) ) {
|
374 |
+
// Set to true to show network level settings even if delegated to site admins.
|
375 |
+
define( 'WP_FS__SHOW_NETWORK_EVEN_WHEN_DELEGATED', false );
|
376 |
+
}
|
377 |
+
|
378 |
+
#endregion
|
freemius/includes/class-freemius.php
CHANGED
@@ -1,14323 +1,19942 @@
|
|
1 |
<?php
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
/**
|
15 |
-
* SDK Version
|
16 |
-
*
|
17 |
-
* @var string
|
18 |
-
*/
|
19 |
-
public $version = WP_FS__SDK_VERSION;
|
20 |
-
|
21 |
-
#region Plugin Info
|
22 |
-
|
23 |
-
/**
|
24 |
-
* @since 1.0.1
|
25 |
-
*
|
26 |
-
* @var string
|
27 |
-
*/
|
28 |
-
private $_slug;
|
29 |
-
|
30 |
-
/**
|
31 |
-
* @since 1.0.0
|
32 |
-
*
|
33 |
-
* @var string
|
34 |
-
*/
|
35 |
-
private $_plugin_basename;
|
36 |
-
/**
|
37 |
-
* @since 1.0.0
|
38 |
-
*
|
39 |
-
* @var string
|
40 |
-
*/
|
41 |
-
private $_free_plugin_basename;
|
42 |
-
/**
|
43 |
-
* @since 1.0.0
|
44 |
-
*
|
45 |
-
* @var string
|
46 |
-
*/
|
47 |
-
private $_plugin_dir_path;
|
48 |
-
/**
|
49 |
-
* @since 1.0.0
|
50 |
-
*
|
51 |
-
* @var string
|
52 |
-
*/
|
53 |
-
private $_plugin_dir_name;
|
54 |
-
/**
|
55 |
-
* @since 1.0.0
|
56 |
-
*
|
57 |
-
* @var string
|
58 |
-
*/
|
59 |
-
private $_plugin_main_file_path;
|
60 |
-
/**
|
61 |
-
* @var string[]
|
62 |
-
*/
|
63 |
-
private $_plugin_data;
|
64 |
-
/**
|
65 |
-
* @since 1.0.9
|
66 |
-
*
|
67 |
-
* @var string
|
68 |
-
*/
|
69 |
-
private $_plugin_name;
|
70 |
-
/**
|
71 |
-
* @since 1.2.2
|
72 |
-
*
|
73 |
-
* @var string
|
74 |
-
*/
|
75 |
-
private $_module_type;
|
76 |
-
|
77 |
-
#endregion Plugin Info
|
78 |
-
|
79 |
-
/**
|
80 |
-
* @since 1.0.9
|
81 |
-
*
|
82 |
-
* @var bool If false, don't turn Freemius on.
|
83 |
-
*/
|
84 |
-
private $_is_on;
|
85 |
-
|
86 |
-
/**
|
87 |
-
* @since 1.1.3
|
88 |
-
*
|
89 |
-
* @var bool If false, don't turn Freemius on.
|
90 |
-
*/
|
91 |
-
private $_is_anonymous;
|
92 |
-
|
93 |
-
/**
|
94 |
-
* @since 1.0.9
|
95 |
-
* @var bool If false, issues with connectivity to Freemius API.
|
96 |
-
*/
|
97 |
-
private $_has_api_connection;
|
98 |
-
|
99 |
-
/**
|
100 |
-
* @since 1.0.9
|
101 |
-
* @var bool Hints the SDK if plugin can support anonymous mode (if skip connect is visible).
|
102 |
-
*/
|
103 |
-
private $_enable_anonymous;
|
104 |
-
|
105 |
-
/**
|
106 |
-
* @since 1.1.7.5
|
107 |
-
* @var bool Hints the SDK if plugin should run in anonymous mode (only adds feedback form).
|
108 |
-
*/
|
109 |
-
private $_anonymous_mode;
|
110 |
-
|
111 |
-
/**
|
112 |
-
* @since 1.1.9
|
113 |
-
* @var bool Hints the SDK if plugin have any free plans.
|
114 |
-
*/
|
115 |
-
private $_is_premium_only;
|
116 |
-
|
117 |
-
/**
|
118 |
-
* @since 1.2.1.6
|
119 |
-
* @var bool Hints the SDK if plugin have premium code version at all.
|
120 |
-
*/
|
121 |
-
private $_has_premium_version;
|
122 |
-
|
123 |
-
/**
|
124 |
-
* @since 1.2.1.6
|
125 |
-
* @var bool Hints the SDK if plugin should ignore pending mode by simulating a skip.
|
126 |
-
*/
|
127 |
-
private $_ignore_pending_mode;
|
128 |
-
|
129 |
-
/**
|
130 |
-
* @since 1.0.8
|
131 |
-
* @var bool Hints the SDK if the plugin has any paid plans.
|
132 |
-
*/
|
133 |
-
private $_has_paid_plans;
|
134 |
-
|
135 |
-
/**
|
136 |
-
* @since 1.2.1.5
|
137 |
-
* @var int Hints the SDK if the plugin offers a trial period. If negative, no trial, if zero - has a trial but
|
138 |
-
* without a specified period, if positive - the number of trial days.
|
139 |
-
*/
|
140 |
-
private $_trial_days = - 1;
|
141 |
-
|
142 |
-
/**
|
143 |
-
* @since 1.2.1.5
|
144 |
-
* @var bool Hints the SDK if the trial requires a payment method or not.
|
145 |
-
*/
|
146 |
-
private $_is_trial_require_payment = false;
|
147 |
-
|
148 |
-
/**
|
149 |
-
* @since 1.0.7
|
150 |
-
* @var bool Hints the SDK if the plugin is WordPress.org compliant.
|
151 |
-
*/
|
152 |
-
private $_is_org_compliant;
|
153 |
-
|
154 |
-
/**
|
155 |
-
* @since 1.0.7
|
156 |
-
* @var bool Hints the SDK if the plugin is has add-ons.
|
157 |
-
*/
|
158 |
-
private $_has_addons;
|
159 |
-
|
160 |
-
/**
|
161 |
-
* @since 1.1.6
|
162 |
-
* @var string[]bool.
|
163 |
-
*/
|
164 |
-
private $_permissions;
|
165 |
-
|
166 |
-
/**
|
167 |
-
* @var FS_Key_Value_Storage
|
168 |
-
*/
|
169 |
-
private $_storage;
|
170 |
-
|
171 |
-
/**
|
172 |
-
* @since 1.2.2.7
|
173 |
-
* @var FS_Cache_Manager
|
174 |
-
*/
|
175 |
-
private $_cache;
|
176 |
-
|
177 |
-
/**
|
178 |
-
* @since 1.0.0
|
179 |
-
*
|
180 |
-
* @var FS_Logger
|
181 |
-
*/
|
182 |
-
private $_logger;
|
183 |
-
/**
|
184 |
-
* @since 1.0.4
|
185 |
-
*
|
186 |
-
* @var FS_Plugin
|
187 |
-
*/
|
188 |
-
private $_plugin = false;
|
189 |
-
/**
|
190 |
-
* @since 1.0.4
|
191 |
-
*
|
192 |
-
* @var FS_Plugin|false
|
193 |
-
*/
|
194 |
-
private $_parent_plugin = false;
|
195 |
-
/**
|
196 |
-
* @since 1.1.1
|
197 |
-
*
|
198 |
-
* @var Freemius
|
199 |
-
*/
|
200 |
-
private $_parent = false;
|
201 |
-
/**
|
202 |
-
* @since 1.0.1
|
203 |
-
*
|
204 |
-
* @var FS_User
|
205 |
-
*/
|
206 |
-
private $_user = false;
|
207 |
-
/**
|
208 |
-
* @since 1.0.1
|
209 |
-
*
|
210 |
-
* @var FS_Site
|
211 |
-
*/
|
212 |
-
private $_site = false;
|
213 |
-
/**
|
214 |
-
* @since 1.0.1
|
215 |
-
*
|
216 |
-
* @var FS_Plugin_License
|
217 |
-
*/
|
218 |
-
private $_license;
|
219 |
-
/**
|
220 |
-
* @since 1.0.2
|
221 |
-
*
|
222 |
-
* @var FS_Plugin_Plan[]
|
223 |
-
*/
|
224 |
-
private $_plans = false;
|
225 |
-
/**
|
226 |
-
* @var FS_Plugin_License[]
|
227 |
-
* @since 1.0.5
|
228 |
-
*/
|
229 |
-
private $_licenses = false;
|
230 |
-
|
231 |
-
/**
|
232 |
-
* @since 1.0.1
|
233 |
-
*
|
234 |
-
* @var FS_Admin_Menu_Manager
|
235 |
-
*/
|
236 |
-
private $_menu;
|
237 |
-
|
238 |
-
/**
|
239 |
-
* @var FS_Admin_Notice_Manager
|
240 |
-
*/
|
241 |
-
private $_admin_notices;
|
242 |
-
|
243 |
-
/**
|
244 |
-
* @since 1.1.6
|
245 |
-
*
|
246 |
-
* @var FS_Admin_Notice_Manager
|
247 |
-
*/
|
248 |
-
private static $_global_admin_notices;
|
249 |
-
|
250 |
-
/**
|
251 |
-
* @var FS_Logger
|
252 |
-
* @since 1.0.0
|
253 |
-
*/
|
254 |
-
private static $_static_logger;
|
255 |
-
|
256 |
-
/**
|
257 |
-
* @var FS_Option_Manager
|
258 |
-
* @since 1.0.2
|
259 |
-
*/
|
260 |
-
private static $_accounts;
|
261 |
-
|
262 |
-
/**
|
263 |
-
* @since 1.2.2
|
264 |
-
*
|
265 |
-
* @var number
|
266 |
-
*/
|
267 |
-
private $_module_id;
|
268 |
-
|
269 |
-
/**
|
270 |
-
* @var Freemius[]
|
271 |
-
*/
|
272 |
-
private static $_instances = array();
|
273 |
-
|
274 |
/**
|
275 |
-
*
|
276 |
*
|
277 |
-
* @
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
278 |
*
|
279 |
-
* @var
|
280 |
*/
|
281 |
-
private $
|
282 |
|
283 |
/**
|
284 |
-
* @
|
285 |
*
|
286 |
-
* @
|
|
|
|
|
|
|
|
|
287 |
*
|
288 |
-
* @var
|
289 |
*/
|
290 |
-
private $
|
291 |
-
|
292 |
/**
|
293 |
-
* @
|
|
|
|
|
|
|
|
|
|
|
|
|
294 |
*
|
295 |
-
* @
|
|
|
|
|
|
|
|
|
296 |
*
|
297 |
-
* @var
|
298 |
*/
|
299 |
-
private $
|
300 |
-
|
301 |
-
|
302 |
-
|
303 |
-
|
304 |
-
|
305 |
-
|
306 |
-
|
307 |
-
|
308 |
-
|
309 |
-
|
310 |
-
|
311 |
-
|
312 |
-
|
313 |
-
|
314 |
-
|
315 |
-
|
316 |
-
const REASON_DIDNT_WORK_AS_EXPECTED = 14;
|
317 |
-
const REASON_TEMPORARY_DEACTIVATION = 15;
|
318 |
-
|
319 |
-
#endregion
|
320 |
-
|
321 |
-
/* Ctor
|
322 |
-
------------------------------------------------------------------------------------------------------------------*/
|
323 |
|
324 |
-
|
325 |
-
* Main singleton instance.
|
326 |
-
*
|
327 |
-
* @author Vova Feldman (@svovaf)
|
328 |
-
* @since 1.0.0
|
329 |
-
*
|
330 |
-
* @param number $module_id
|
331 |
-
* @param string|bool $slug
|
332 |
-
* @param bool $is_init Since 1.2.1 Is initiation sequence.
|
333 |
-
*/
|
334 |
-
private function __construct( $module_id, $slug = false, $is_init = false ) {
|
335 |
-
if ( $is_init && is_numeric( $module_id ) && is_string( $slug ) ) {
|
336 |
-
$this->store_id_slug_type_path_map( $module_id, $slug );
|
337 |
-
}
|
338 |
-
|
339 |
-
$this->_module_id = $module_id;
|
340 |
-
$this->_slug = $this->get_slug();
|
341 |
-
$this->_module_type = $this->get_module_type();
|
342 |
-
|
343 |
-
$this->_storage = FS_Key_Value_Storage::instance( $this->_module_type . '_data', $this->_slug );
|
344 |
-
$this->_cache = FS_Cache_Manager::get_manager( WP_FS___OPTION_PREFIX . "cache_{$module_id}" );
|
345 |
-
|
346 |
-
$this->_logger = FS_Logger::get_logger( WP_FS__SLUG . '_' . $this->get_unique_affix(), WP_FS__DEBUG_SDK, WP_FS__ECHO_DEBUG_SDK );
|
347 |
-
|
348 |
-
$this->_plugin_main_file_path = $this->_find_caller_plugin_file( $is_init );
|
349 |
-
$this->_plugin_dir_path = plugin_dir_path( $this->_plugin_main_file_path );
|
350 |
-
$this->_plugin_basename = $this->get_plugin_basename();
|
351 |
-
$this->_free_plugin_basename = str_replace( '-premium/', '/', $this->_plugin_basename );
|
352 |
-
|
353 |
-
$base_name_split = explode( '/', $this->_plugin_basename );
|
354 |
-
$this->_plugin_dir_name = $base_name_split[0];
|
355 |
-
|
356 |
-
if ( $this->_logger->is_on() ) {
|
357 |
-
$this->_logger->info( 'plugin_main_file_path = ' . $this->_plugin_main_file_path );
|
358 |
-
$this->_logger->info( 'plugin_dir_path = ' . $this->_plugin_dir_path );
|
359 |
-
$this->_logger->info( 'plugin_basename = ' . $this->_plugin_basename );
|
360 |
-
$this->_logger->info( 'free_plugin_basename = ' . $this->_free_plugin_basename );
|
361 |
-
$this->_logger->info( 'plugin_dir_name = ' . $this->_plugin_dir_name );
|
362 |
-
}
|
363 |
-
|
364 |
-
// Remember link between file to slug.
|
365 |
-
$this->store_file_slug_map();
|
366 |
-
|
367 |
-
// Store plugin's initial install timestamp.
|
368 |
-
if ( ! isset( $this->_storage->install_timestamp ) ) {
|
369 |
-
$this->_storage->install_timestamp = WP_FS__SCRIPT_START_TIME;
|
370 |
-
}
|
371 |
-
|
372 |
-
if ( ! is_object( $this->_plugin ) ) {
|
373 |
-
$this->_plugin = FS_Plugin_Manager::instance( $this->_module_id )->get();
|
374 |
-
}
|
375 |
-
|
376 |
-
$this->_admin_notices = FS_Admin_Notice_Manager::instance(
|
377 |
-
$this->_slug . ( $this->is_theme() ? ':theme' : '' ),
|
378 |
-
/**
|
379 |
-
* Ensure that the admin notice will always have a title by using the stored plugin title if available and
|
380 |
-
* retrieving the title via the "get_plugin_name" method if there is no stored plugin title available.
|
381 |
-
*
|
382 |
-
* @author Leo Fajardo (@leorw)
|
383 |
-
* @since 1.2.2
|
384 |
-
*/
|
385 |
-
( is_object( $this->_plugin ) ? $this->_plugin->title : $this->get_plugin_name() ),
|
386 |
-
$this->get_unique_affix()
|
387 |
-
);
|
388 |
-
|
389 |
-
if ( 'true' === fs_request_get( 'fs_clear_api_cache' ) ||
|
390 |
-
'true' === fs_request_is_action( 'restart_freemius' )
|
391 |
-
) {
|
392 |
-
FS_Api::clear_cache();
|
393 |
-
$this->_cache->clear();
|
394 |
-
}
|
395 |
-
|
396 |
-
$this->_register_hooks();
|
397 |
-
|
398 |
-
$this->_load_account();
|
399 |
-
|
400 |
-
$this->_version_updates_handler();
|
401 |
-
}
|
402 |
-
|
403 |
-
/**
|
404 |
-
* Checks whether this module has a settings menu.
|
405 |
-
*
|
406 |
-
* @author Leo Fajardo (@leorw)
|
407 |
-
* @since 1.2.2
|
408 |
-
*
|
409 |
-
* @return bool
|
410 |
-
*/
|
411 |
-
function has_settings_menu() {
|
412 |
-
return $this->_menu->has_menu();
|
413 |
-
}
|
414 |
-
|
415 |
-
/**
|
416 |
-
* Check if the context module is free wp.org theme.
|
417 |
-
*
|
418 |
-
* This method is helpful because:
|
419 |
-
* 1. wp.org themes are limited to a single submenu item,
|
420 |
-
* and sub-submenu items are most likely not allowed (never verified).
|
421 |
-
* 2. wp.org themes are not allowed to redirect the user
|
422 |
-
* after the theme activation, therefore, the agreed UX
|
423 |
-
* is showing the opt-in as a modal dialog box after
|
424 |
-
* activation (approved by @otto42, @emiluzelac, @greenshady, @grapplerulrich).
|
425 |
-
*
|
426 |
-
* @author Vova Feldman (@svovaf)
|
427 |
-
* @since 1.2.2.7
|
428 |
-
*
|
429 |
-
* @return bool
|
430 |
-
*/
|
431 |
-
function is_free_wp_org_theme() {
|
432 |
-
return (
|
433 |
-
$this->is_theme() &&
|
434 |
-
$this->is_org_repo_compliant() &&
|
435 |
-
! $this->is_premium()
|
436 |
-
);
|
437 |
-
}
|
438 |
-
|
439 |
-
/**
|
440 |
-
* Checks whether this a submenu item is visible.
|
441 |
-
*
|
442 |
-
* @author Vova Feldman (@svovaf)
|
443 |
-
* @since 1.2.2.6
|
444 |
-
* @since 1.2.2.7 Even if the menu item was specified to be hidden, when it is the context page, then show the submenu item so the user will have the right context page.
|
445 |
-
*
|
446 |
-
* @param string $slug
|
447 |
-
*
|
448 |
-
* @return bool
|
449 |
-
*/
|
450 |
-
function is_submenu_item_visible( $slug ) {
|
451 |
-
if ( $this->is_admin_page( $slug ) ) {
|
452 |
-
/**
|
453 |
-
* It is the current context page, so show the submenu item
|
454 |
-
* so the user will have the right context page, even if it
|
455 |
-
* was set to hidden.
|
456 |
-
*/
|
457 |
-
return true;
|
458 |
-
}
|
459 |
-
|
460 |
-
if ( ! $this->has_settings_menu() ) {
|
461 |
-
// No menu settings at all.
|
462 |
-
return false;
|
463 |
-
}
|
464 |
-
|
465 |
-
if ( $this->is_free_wp_org_theme() ) {
|
466 |
-
/**
|
467 |
-
* wp.org themes are limited to a single submenu item, and
|
468 |
-
* sub-submenu items are most likely not allowed (never verified).
|
469 |
-
*/
|
470 |
-
return false;
|
471 |
-
}
|
472 |
-
|
473 |
-
return $this->_menu->is_submenu_item_visible( $slug );
|
474 |
-
}
|
475 |
-
|
476 |
-
/**
|
477 |
-
* Check if a Freemius page should be accessible via the UI.
|
478 |
-
*
|
479 |
-
* @author Vova Feldman (@svovaf)
|
480 |
-
* @since 1.2.2.7
|
481 |
-
*
|
482 |
-
* @param string $slug
|
483 |
-
*
|
484 |
-
* @return bool
|
485 |
-
*/
|
486 |
-
function is_page_visible( $slug ) {
|
487 |
-
if ( $this->is_admin_page( $slug ) ) {
|
488 |
-
return true;
|
489 |
-
}
|
490 |
-
|
491 |
-
return $this->_menu->is_submenu_item_visible( $slug, true, true );
|
492 |
-
}
|
493 |
-
|
494 |
-
/**
|
495 |
-
* @author Vova Feldman (@svovaf)
|
496 |
-
* @since 1.0.9
|
497 |
-
*/
|
498 |
-
private function _version_updates_handler() {
|
499 |
-
if ( ! isset( $this->_storage->sdk_version ) || $this->_storage->sdk_version != $this->version ) {
|
500 |
-
// Freemius version upgrade mode.
|
501 |
-
$this->_storage->sdk_last_version = $this->_storage->sdk_version;
|
502 |
-
$this->_storage->sdk_version = $this->version;
|
503 |
-
|
504 |
-
if ( empty( $this->_storage->sdk_last_version ) ||
|
505 |
-
version_compare( $this->_storage->sdk_last_version, $this->version, '<' )
|
506 |
-
) {
|
507 |
-
$this->_storage->sdk_upgrade_mode = true;
|
508 |
-
$this->_storage->sdk_downgrade_mode = false;
|
509 |
-
} else {
|
510 |
-
$this->_storage->sdk_downgrade_mode = true;
|
511 |
-
$this->_storage->sdk_upgrade_mode = false;
|
512 |
-
|
513 |
-
}
|
514 |
-
|
515 |
-
$this->do_action( 'sdk_version_update', $this->_storage->sdk_last_version, $this->version );
|
516 |
-
}
|
517 |
-
|
518 |
-
$plugin_version = $this->get_plugin_version();
|
519 |
-
if ( ! isset( $this->_storage->plugin_version ) || $this->_storage->plugin_version != $plugin_version ) {
|
520 |
-
// Plugin version upgrade mode.
|
521 |
-
$this->_storage->plugin_last_version = $this->_storage->plugin_version;
|
522 |
-
$this->_storage->plugin_version = $plugin_version;
|
523 |
-
|
524 |
-
if ( empty( $this->_storage->plugin_last_version ) ||
|
525 |
-
version_compare( $this->_storage->plugin_last_version, $plugin_version, '<' )
|
526 |
-
) {
|
527 |
-
$this->_storage->plugin_upgrade_mode = true;
|
528 |
-
$this->_storage->plugin_downgrade_mode = false;
|
529 |
-
} else {
|
530 |
-
$this->_storage->plugin_downgrade_mode = true;
|
531 |
-
$this->_storage->plugin_upgrade_mode = false;
|
532 |
-
}
|
533 |
-
|
534 |
-
if ( ! empty( $this->_storage->plugin_last_version ) ) {
|
535 |
-
// Different version of the plugin was installed before, therefore it's an update.
|
536 |
-
$this->_storage->is_plugin_new_install = false;
|
537 |
-
}
|
538 |
-
|
539 |
-
$this->do_action( 'plugin_version_update', $this->_storage->plugin_last_version, $plugin_version );
|
540 |
-
}
|
541 |
-
}
|
542 |
-
|
543 |
-
/**
|
544 |
-
* @author Vova Feldman (@svovaf)
|
545 |
-
* @since 1.1.5
|
546 |
-
*
|
547 |
-
* @param string $sdk_prev_version
|
548 |
-
* @param string $sdk_version
|
549 |
-
*/
|
550 |
-
function _data_migration( $sdk_prev_version, $sdk_version ) {
|
551 |
-
/**
|
552 |
-
* @since 1.1.7.3 Fixed unwanted connectivity test cleanup.
|
553 |
-
*/
|
554 |
-
if ( empty( $sdk_prev_version ) ) {
|
555 |
-
return;
|
556 |
-
}
|
557 |
|
558 |
-
|
559 |
-
|
560 |
-
|
561 |
-
|
562 |
-
|
563 |
-
|
564 |
-
*
|
565 |
-
* @author Leo Fajardo (@leorw)
|
566 |
-
*/
|
567 |
-
$this->make_paths_relative();
|
568 |
-
}
|
569 |
|
570 |
-
|
571 |
-
|
572 |
-
|
573 |
-
|
574 |
-
|
575 |
-
|
576 |
-
unset( $this->_storage->connectivity_test );
|
577 |
-
} else {
|
578 |
-
$connectivity_data = $this->_storage->connectivity_test;
|
579 |
-
$connectivity_data['is_active'] = $this->_storage->is_on['is_active'];
|
580 |
-
$connectivity_data['timestamp'] = $this->_storage->is_on['timestamp'];
|
581 |
|
582 |
-
|
583 |
-
|
|
|
|
|
|
|
584 |
|
585 |
-
|
586 |
-
|
587 |
-
|
|
|
|
|
|
|
588 |
|
589 |
-
|
590 |
-
|
591 |
-
|
|
|
|
|
592 |
|
593 |
/**
|
594 |
-
*
|
595 |
-
*
|
596 |
-
* @author Leo Fajardo
|
597 |
-
* @since 1.2.3
|
598 |
*/
|
599 |
-
private
|
600 |
-
$id_slug_type_path_map = self::$_accounts->get_option( 'id_slug_type_path_map', array() );
|
601 |
|
602 |
-
|
603 |
-
|
|
|
|
|
|
|
604 |
|
605 |
-
|
606 |
-
|
|
|
|
|
|
|
607 |
|
608 |
-
|
609 |
-
|
|
|
|
|
|
|
610 |
|
611 |
-
|
612 |
-
|
613 |
-
|
614 |
-
|
615 |
-
|
616 |
-
|
617 |
|
618 |
-
|
619 |
-
|
620 |
-
|
621 |
-
|
622 |
-
|
623 |
-
! file_exists( $this->get_absolute_path( $plugin_basename ) )
|
624 |
-
) {
|
625 |
-
unset( $file_slug_map[ $plugin_basename ] );
|
626 |
-
self::$_accounts->set_option( 'file_slug_map', $file_slug_map, true );
|
627 |
|
628 |
-
|
629 |
-
|
630 |
-
|
631 |
-
|
|
|
632 |
|
633 |
-
|
634 |
-
|
635 |
-
|
636 |
-
|
637 |
-
|
638 |
-
* @param string $plugin_version
|
639 |
-
*/
|
640 |
-
function _after_version_update( $plugin_prev_version, $plugin_version ) {
|
641 |
-
if ( $this->is_theme() ) {
|
642 |
-
// Expire the cache of the previous tabs since the theme may
|
643 |
-
// have setting updates.
|
644 |
-
$this->_cache->expire( 'tabs' );
|
645 |
-
$this->_cache->expire( 'tabs_stylesheets' );
|
646 |
-
}
|
647 |
-
}
|
648 |
-
|
649 |
-
/**
|
650 |
-
* This action is connected to the 'plugins_loaded' hook and helps to determine
|
651 |
-
* if this is a new plugin installation or a plugin update.
|
652 |
-
*
|
653 |
-
* There are 3 different use-cases:
|
654 |
-
* 1) New plugin installation right with Freemius:
|
655 |
-
* 1.1 _activate_plugin_event_hook() will be executed first
|
656 |
-
* 1.2 Since $this->_storage->is_plugin_new_install is not set,
|
657 |
-
* and $this->_storage->plugin_last_version is not set,
|
658 |
-
* $this->_storage->is_plugin_new_install will be set to TRUE.
|
659 |
-
* 1.3 When _plugins_loaded() will be executed, $this->_storage->is_plugin_new_install will
|
660 |
-
* be already set to TRUE.
|
661 |
-
*
|
662 |
-
* 2) Plugin update, didn't have Freemius before, and now have the SDK:
|
663 |
-
* 2.1 _activate_plugin_event_hook() will not be executed, because
|
664 |
-
* the activation hook do NOT fires on updates since WP 3.1.
|
665 |
-
* 2.2 When _plugins_loaded() will be executed, $this->_storage->is_plugin_new_install will
|
666 |
-
* be empty, therefore, it will be set to FALSE.
|
667 |
-
*
|
668 |
-
* 3) Plugin update, had Freemius in prev version as well:
|
669 |
-
* 3.1 _version_updates_handler() will be executed 1st, since FS was installed
|
670 |
-
* before, $this->_storage->plugin_last_version will NOT be empty,
|
671 |
-
* therefore, $this->_storage->is_plugin_new_install will be set to FALSE.
|
672 |
-
* 3.2 When _plugins_loaded() will be executed, $this->_storage->is_plugin_new_install is
|
673 |
-
* already set, therefore, it will not be modified.
|
674 |
-
*
|
675 |
-
* Use-case #3 is backward compatible, #3.1 will be executed since 1.0.9.
|
676 |
-
*
|
677 |
-
* NOTE:
|
678 |
-
* The only fallback of this mechanism is if an admin updates a plugin based on use-case #2,
|
679 |
-
* and then, the next immediate PageView is the plugin's main settings page, it will not
|
680 |
-
* show the opt-in right away. The reason it will happen is because Freemius execution
|
681 |
-
* will be turned off till the plugin is fully loaded at least once
|
682 |
-
* (till $this->_storage->was_plugin_loaded is TRUE).
|
683 |
-
*
|
684 |
-
* @author Vova Feldman (@svovaf)
|
685 |
-
* @since 1.1.9
|
686 |
-
*
|
687 |
-
*/
|
688 |
-
function _plugins_loaded() {
|
689 |
-
// Update flag that plugin was loaded with Freemius at least once.
|
690 |
-
$this->_storage->was_plugin_loaded = true;
|
691 |
-
|
692 |
-
/**
|
693 |
-
* Bug fix - only set to false when it's a plugin, due to the
|
694 |
-
* execution sequence of the theme hooks and our methods, if
|
695 |
-
* this will be set for themes, Freemius will always assume
|
696 |
-
* it's a theme update.
|
697 |
-
*
|
698 |
-
* @author Vova Feldman (@svovaf)
|
699 |
-
* @since 1.2.2.2
|
700 |
-
*/
|
701 |
-
if ( $this->is_plugin() &&
|
702 |
-
! isset( $this->_storage->is_plugin_new_install )
|
703 |
-
) {
|
704 |
-
$this->_storage->is_plugin_new_install = false;
|
705 |
-
}
|
706 |
-
}
|
707 |
-
|
708 |
-
/**
|
709 |
-
* @author Vova Feldman (@svovaf)
|
710 |
-
* @since 1.0.9
|
711 |
-
*/
|
712 |
-
private function _register_hooks() {
|
713 |
-
$this->_logger->entrance();
|
714 |
-
|
715 |
-
if ( is_admin() ) {
|
716 |
-
if ( $this->is_plugin() ) {
|
717 |
-
$plugin_dir = dirname( $this->_plugin_dir_path ) . '/';
|
718 |
-
|
719 |
-
/**
|
720 |
-
* @since 1.2.2
|
721 |
-
*
|
722 |
-
* Hook to both free and premium version activations to support
|
723 |
-
* auto deactivation on the other version activation.
|
724 |
-
*/
|
725 |
-
register_activation_hook(
|
726 |
-
$plugin_dir . $this->_free_plugin_basename,
|
727 |
-
array( &$this, '_activate_plugin_event_hook' )
|
728 |
-
);
|
729 |
-
|
730 |
-
register_activation_hook(
|
731 |
-
$plugin_dir . $this->premium_plugin_basename(),
|
732 |
-
array( &$this, '_activate_plugin_event_hook' )
|
733 |
-
);
|
734 |
-
} else {
|
735 |
-
add_action( 'after_switch_theme', array( &$this, '_activate_theme_event_hook' ), 10, 2 );
|
736 |
-
|
737 |
-
/**
|
738 |
-
* Include the required hooks to capture the theme settings' page tabs
|
739 |
-
* and cache them.
|
740 |
-
*
|
741 |
-
* @author Vova Feldman (@svovaf)
|
742 |
-
* @since 1.2.2.7
|
743 |
-
*/
|
744 |
-
if ( ! $this->_cache->has_valid( 'tabs' ) ) {
|
745 |
-
add_action( 'admin_footer', array( &$this, '_tabs_capture' ) );
|
746 |
-
// Add license activation AJAX callback.
|
747 |
-
$this->add_ajax_action( 'store_tabs', array( &$this, '_store_tabs_ajax_action' ) );
|
748 |
-
|
749 |
-
add_action( 'admin_enqueue_scripts', array( &$this, '_store_tabs_styles' ), 9999999 );
|
750 |
-
}
|
751 |
-
|
752 |
-
add_action(
|
753 |
-
'admin_footer',
|
754 |
-
array( &$this, '_add_freemius_tabs' ),
|
755 |
-
/**
|
756 |
-
* The tabs JS code must be executed after the tabs capture logic (_tabs_capture()).
|
757 |
-
* That's why the priority is 11 while the tabs capture logic is added
|
758 |
-
* with priority 10.
|
759 |
-
*
|
760 |
-
* @author Vova Feldman (@svovaf)
|
761 |
-
*/
|
762 |
-
11
|
763 |
-
);
|
764 |
-
|
765 |
-
add_action( 'admin_footer', array( &$this, '_style_premium_theme' ) );
|
766 |
-
}
|
767 |
-
|
768 |
-
/**
|
769 |
-
* Part of the mechanism to identify new plugin install vs. plugin update.
|
770 |
-
*
|
771 |
-
* @author Vova Feldman (@svovaf)
|
772 |
-
* @since 1.1.9
|
773 |
-
*/
|
774 |
-
if ( empty( $this->_storage->was_plugin_loaded ) ) {
|
775 |
-
if ( $this->is_plugin() &&
|
776 |
-
$this->is_activation_mode( false ) &&
|
777 |
-
0 == did_action( 'plugins_loaded' )
|
778 |
-
) {
|
779 |
-
add_action( 'plugins_loaded', array( &$this, '_plugins_loaded' ) );
|
780 |
-
} else {
|
781 |
-
// If was activated before, then it was already loaded before.
|
782 |
-
$this->_plugins_loaded();
|
783 |
-
}
|
784 |
-
}
|
785 |
-
|
786 |
-
if ( ! self::is_ajax() ) {
|
787 |
-
if ( ! $this->is_addon() ) {
|
788 |
-
add_action( 'init', array( &$this, '_add_default_submenu_items' ), WP_FS__LOWEST_PRIORITY );
|
789 |
-
}
|
790 |
-
}
|
791 |
-
}
|
792 |
-
|
793 |
-
if ( $this->is_plugin() ) {
|
794 |
-
register_deactivation_hook( $this->_plugin_main_file_path, array( &$this, '_deactivate_plugin_hook' ) );
|
795 |
-
}
|
796 |
-
|
797 |
-
if ( $this->is_theme() && self::is_customizer() ) {
|
798 |
-
// Register customizer upsell.
|
799 |
-
add_action( 'customize_register', array( &$this, '_customizer_register' ) );
|
800 |
-
}
|
801 |
-
|
802 |
-
add_action( 'init', array( &$this, '_redirect_on_clicked_menu_link' ), WP_FS__LOWEST_PRIORITY );
|
803 |
-
|
804 |
-
add_action( 'admin_init', array( &$this, '_add_tracking_links' ) );
|
805 |
-
add_action( 'admin_init', array( &$this, '_add_license_activation' ) );
|
806 |
-
$this->add_ajax_action( 'update_billing', array( &$this, '_update_billing_ajax_action' ) );
|
807 |
-
$this->add_ajax_action( 'start_trial', array( &$this, '_start_trial_ajax_action' ) );
|
808 |
-
|
809 |
-
$this->add_ajax_action( 'install_premium_version', array(
|
810 |
-
&$this,
|
811 |
-
'_install_premium_version_ajax_action'
|
812 |
-
) );
|
813 |
|
814 |
-
|
|
|
|
|
|
|
|
|
815 |
|
816 |
-
|
|
|
|
|
|
|
817 |
|
818 |
-
|
819 |
-
|
820 |
-
|
|
|
|
|
821 |
|
822 |
-
|
823 |
-
|
824 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
825 |
|
826 |
-
|
827 |
-
|
828 |
-
|
829 |
-
|
830 |
-
|
831 |
-
|
832 |
-
if ( fs_request_is_action( 'reset_anonymous_mode' ) &&
|
833 |
-
$this->get_unique_affix() === fs_request_get( 'fs_unique_affix' )
|
834 |
-
) {
|
835 |
-
add_action( 'admin_init', array( &$this, 'connect_again' ) );
|
836 |
-
}
|
837 |
-
}
|
838 |
-
|
839 |
-
/**
|
840 |
-
* Keeping the uninstall hook registered for free or premium plugin version may result to a fatal error that
|
841 |
-
* could happen when a user tries to uninstall either version while one of them is still active. Uninstalling a
|
842 |
-
* plugin will trigger inclusion of the free or premium version and if one of them is active during the
|
843 |
-
* uninstallation, a fatal error may occur in case the plugin's class or functions are already defined.
|
844 |
-
*
|
845 |
-
* @author Leo Fajardo (leorw)
|
846 |
-
*
|
847 |
-
* @since 1.2.0
|
848 |
-
*/
|
849 |
-
private function unregister_uninstall_hook() {
|
850 |
-
$uninstallable_plugins = (array) get_option( 'uninstall_plugins' );
|
851 |
-
unset( $uninstallable_plugins[ $this->_free_plugin_basename ] );
|
852 |
-
unset( $uninstallable_plugins[ $this->premium_plugin_basename() ] );
|
853 |
-
|
854 |
-
update_option( 'uninstall_plugins', $uninstallable_plugins );
|
855 |
-
}
|
856 |
-
|
857 |
-
/**
|
858 |
-
* @since 1.2.0 Invalidate module's main file cache, otherwise, FS_Plugin_Updater will not fetch updates.
|
859 |
-
*/
|
860 |
-
private function clear_module_main_file_cache() {
|
861 |
-
if ( ! isset( $this->_storage->plugin_main_file ) ||
|
862 |
-
empty( $this->_storage->plugin_main_file->path )
|
863 |
-
) {
|
864 |
-
return;
|
865 |
-
}
|
866 |
-
|
867 |
-
$plugin_main_file = clone $this->_storage->plugin_main_file;
|
868 |
-
|
869 |
-
// Store cached path (2nd layer cache).
|
870 |
-
$plugin_main_file->prev_path = $plugin_main_file->path;
|
871 |
-
|
872 |
-
// Clear cached path.
|
873 |
-
unset( $plugin_main_file->path );
|
874 |
-
|
875 |
-
$this->_storage->plugin_main_file = $plugin_main_file;
|
876 |
-
|
877 |
-
/**
|
878 |
-
* Clear global cached path.
|
879 |
-
*
|
880 |
-
* @author Leo Fajardo (@leorw)
|
881 |
-
* @since 1.2.2
|
882 |
-
*/
|
883 |
-
$id_slug_type_path_map = self::$_accounts->get_option( 'id_slug_type_path_map' );
|
884 |
-
unset( $id_slug_type_path_map[ $this->_module_id ]['path'] );
|
885 |
-
self::$_accounts->set_option( 'id_slug_type_path_map', $id_slug_type_path_map, true );
|
886 |
-
}
|
887 |
-
|
888 |
-
/**
|
889 |
-
* @author Vova Feldman (@svovaf)
|
890 |
-
* @since 1.0.9
|
891 |
-
*/
|
892 |
-
private function _register_account_hooks() {
|
893 |
-
if ( ! is_admin() ) {
|
894 |
-
return;
|
895 |
-
}
|
896 |
-
|
897 |
-
/**
|
898 |
-
* Always show the deactivation feedback form since we added
|
899 |
-
* automatic free version deactivation upon premium code activation.
|
900 |
-
*
|
901 |
-
* @since 1.2.1.6
|
902 |
-
*/
|
903 |
-
$this->add_ajax_action(
|
904 |
-
'submit_uninstall_reason',
|
905 |
-
array( &$this, '_submit_uninstall_reason_action' )
|
906 |
-
);
|
907 |
-
|
908 |
-
if ( ( $this->is_plugin() && self::is_plugins_page() ) ||
|
909 |
-
( $this->is_theme() && self::is_themes_page() )
|
910 |
-
) {
|
911 |
-
add_action( 'admin_footer', array( &$this, '_add_deactivation_feedback_dialog_box' ) );
|
912 |
-
}
|
913 |
-
}
|
914 |
-
|
915 |
-
/**
|
916 |
-
* Leverage backtrace to find caller plugin file path.
|
917 |
-
*
|
918 |
-
* @author Vova Feldman (@svovaf)
|
919 |
-
* @since 1.0.6
|
920 |
-
*
|
921 |
-
* @param bool $is_init Is initiation sequence.
|
922 |
-
*
|
923 |
-
* @return string
|
924 |
-
*/
|
925 |
-
private function _find_caller_plugin_file( $is_init = false ) {
|
926 |
-
// Try to load the cached value of the file path.
|
927 |
-
if ( isset( $this->_storage->plugin_main_file ) ) {
|
928 |
-
$plugin_main_file = $this->_storage->plugin_main_file;
|
929 |
-
if ( isset( $plugin_main_file->path ) ) {
|
930 |
-
$absolute_path = $this->get_absolute_path( $plugin_main_file->path );
|
931 |
-
if ( file_exists( $absolute_path ) ) {
|
932 |
-
return $absolute_path;
|
933 |
-
}
|
934 |
-
}
|
935 |
-
}
|
936 |
-
|
937 |
-
/**
|
938 |
-
* @since 1.2.1
|
939 |
-
*
|
940 |
-
* `clear_module_main_file_cache()` is clearing the plugin's cached path on
|
941 |
-
* deactivation. Therefore, if any plugin/theme was initiating `Freemius`
|
942 |
-
* with that plugin's slug, it was overriding the empty plugin path with a wrong path.
|
943 |
-
*
|
944 |
-
* So, we've added a special mechanism with a 2nd layer of cache that uses `prev_path`
|
945 |
-
* when the class instantiator isn't the module.
|
946 |
-
*/
|
947 |
-
if ( ! $is_init ) {
|
948 |
-
// Fetch prev path cache.
|
949 |
-
if ( isset( $this->_storage->plugin_main_file ) &&
|
950 |
-
isset( $this->_storage->plugin_main_file->prev_path )
|
951 |
-
) {
|
952 |
-
$absolute_path = $this->get_absolute_path( $this->_storage->plugin_main_file->prev_path );
|
953 |
-
if ( file_exists( $absolute_path ) ) {
|
954 |
-
return $absolute_path;
|
955 |
-
}
|
956 |
-
}
|
957 |
-
|
958 |
-
wp_die(
|
959 |
-
$this->get_text_inline( 'Freemius SDK couldn\'t find the plugin\'s main file. Please contact sdk@freemius.com with the current error.', 'failed-finding-main-path' ) .
|
960 |
-
" Module: {$this->_slug}; SDK: " . WP_FS__SDK_VERSION . ";",
|
961 |
-
$this->get_text_inline( 'Error', 'error' ),
|
962 |
-
array( 'back_link' => true )
|
963 |
-
);
|
964 |
-
}
|
965 |
-
|
966 |
-
/**
|
967 |
-
* @since 1.2.1
|
968 |
-
*
|
969 |
-
* Only the original instantiator that calls dynamic_init can modify the module's path.
|
970 |
-
*/
|
971 |
-
// Find caller module.
|
972 |
-
$id_slug_type_path_map = self::$_accounts->get_option( 'id_slug_type_path_map', array() );
|
973 |
-
$this->_storage->plugin_main_file = (object) array(
|
974 |
-
'path' => $id_slug_type_path_map[ $this->_module_id ]['path'],
|
975 |
-
);
|
976 |
|
977 |
-
|
978 |
-
|
|
|
|
|
979 |
|
980 |
/**
|
981 |
-
* @
|
982 |
-
* @since 1.2.3
|
983 |
*
|
984 |
-
* @
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
985 |
*
|
986 |
-
* @
|
987 |
*/
|
988 |
-
private
|
989 |
-
$module_root_dir = $this->get_module_root_dir_path();
|
990 |
-
if ( 0 === strpos( $path, $module_root_dir ) ) {
|
991 |
-
$path = substr( $path, strlen( $module_root_dir ) );
|
992 |
-
}
|
993 |
|
994 |
-
|
995 |
-
|
|
|
|
|
996 |
|
997 |
/**
|
998 |
-
* @
|
999 |
-
* @since 1.2.3
|
1000 |
*
|
1001 |
-
* @
|
1002 |
-
|
|
|
|
|
|
|
|
|
1003 |
*
|
1004 |
-
* @
|
1005 |
*/
|
1006 |
-
private
|
1007 |
-
$module_root_dir = $this->get_module_root_dir_path( $module_type );
|
1008 |
-
if ( 0 !== strpos( $path, $module_root_dir ) ) {
|
1009 |
-
$path = fs_normalize_path( $module_root_dir . $path );
|
1010 |
-
}
|
1011 |
|
1012 |
-
|
1013 |
-
|
|
|
|
|
|
|
|
|
1014 |
|
1015 |
/**
|
1016 |
-
* @
|
1017 |
-
* @since 1.2.3
|
1018 |
*
|
1019 |
-
* @
|
|
|
|
|
|
|
|
|
|
|
1020 |
*
|
1021 |
-
* @
|
1022 |
*/
|
1023 |
-
private
|
1024 |
-
$is_plugin = empty( $module_type ) ?
|
1025 |
-
$this->is_plugin() :
|
1026 |
-
( WP_FS__MODULE_TYPE_PLUGIN === $module_type );
|
1027 |
|
1028 |
-
|
1029 |
-
|
1030 |
-
|
1031 |
-
|
|
|
|
|
1032 |
|
1033 |
-
|
1034 |
-
|
1035 |
-
|
1036 |
-
|
1037 |
-
|
1038 |
-
|
1039 |
-
* @since 1.2.2
|
1040 |
-
*/
|
1041 |
-
private function store_id_slug_type_path_map( $module_id, $slug ) {
|
1042 |
-
$id_slug_type_path_map = self::$_accounts->get_option( 'id_slug_type_path_map', array() );
|
1043 |
-
|
1044 |
-
$store_option = false;
|
1045 |
-
|
1046 |
-
if ( ! isset( $id_slug_type_path_map[ $module_id ] ) ) {
|
1047 |
-
$id_slug_type_path_map[ $module_id ] = array(
|
1048 |
-
'slug' => $slug
|
1049 |
-
);
|
1050 |
-
|
1051 |
-
$store_option = true;
|
1052 |
-
}
|
1053 |
-
|
1054 |
-
if ( ! isset( $id_slug_type_path_map[ $module_id ]['path'] ) ||
|
1055 |
-
/**
|
1056 |
-
* This verification is for cases when suddenly the same module
|
1057 |
-
* is installed but with a different folder name.
|
1058 |
-
*
|
1059 |
-
* @author Vova Feldman (@svovaf)
|
1060 |
-
* @since 1.2.3
|
1061 |
-
*/
|
1062 |
-
! file_exists( $this->get_absolute_path(
|
1063 |
-
$id_slug_type_path_map[ $module_id ]['path'],
|
1064 |
-
$id_slug_type_path_map[ $module_id ]['type']
|
1065 |
-
) )
|
1066 |
-
) {
|
1067 |
-
$caller_main_file_and_type = $this->get_caller_main_file_and_type();
|
1068 |
-
|
1069 |
-
$id_slug_type_path_map[ $module_id ]['type'] = $caller_main_file_and_type->module_type;
|
1070 |
-
$id_slug_type_path_map[ $module_id ]['path'] = $caller_main_file_and_type->path;
|
1071 |
-
|
1072 |
-
$store_option = true;
|
1073 |
-
}
|
1074 |
-
|
1075 |
-
if ( $store_option ) {
|
1076 |
-
self::$_accounts->set_option( 'id_slug_type_path_map', $id_slug_type_path_map, true );
|
1077 |
-
}
|
1078 |
-
}
|
1079 |
-
|
1080 |
-
/**
|
1081 |
-
* Identifies the caller type: plugin or theme.
|
1082 |
-
*
|
1083 |
-
* @author Leo Fajardo (@leorw)
|
1084 |
-
* @since 1.2.2
|
1085 |
-
*
|
1086 |
-
* @author Vova Feldman (@svovaf)
|
1087 |
-
* @since 1.2.2.3 Find the earliest module in the call stack that calls to the SDK. This fix is for cases when
|
1088 |
-
* add-ons are relying on loading the SDK from the parent module, and also allows themes including the
|
1089 |
-
* SDK an internal file instead of directly from functions.php.
|
1090 |
-
* @since 1.2.1.7 Knows how to handle cases when an add-on includes the parent module logic.
|
1091 |
-
*/
|
1092 |
-
private function get_caller_main_file_and_type() {
|
1093 |
-
self::require_plugin_essentials();
|
1094 |
-
|
1095 |
-
$all_plugins = get_plugins();
|
1096 |
-
$all_plugins_paths = array();
|
1097 |
-
|
1098 |
-
// Get active plugin's main files real full names (might be symlinks).
|
1099 |
-
foreach ( $all_plugins as $relative_path => &$data ) {
|
1100 |
-
if ( false === strpos( fs_normalize_path( $relative_path ), '/' ) ) {
|
1101 |
-
/**
|
1102 |
-
* Ignore plugins that don't have a folder (e.g. Hello Dolly) since they
|
1103 |
-
* can't really include the SDK.
|
1104 |
-
*
|
1105 |
-
* @author Vova Feldman
|
1106 |
-
* @since 1.2.1.7
|
1107 |
-
*/
|
1108 |
-
continue;
|
1109 |
-
}
|
1110 |
-
|
1111 |
-
$all_plugins_paths[] = fs_normalize_path( realpath( WP_PLUGIN_DIR . '/' . $relative_path ) );
|
1112 |
-
}
|
1113 |
-
|
1114 |
-
$caller_file_candidate = false;
|
1115 |
-
$caller_map = array();
|
1116 |
-
$module_type = WP_FS__MODULE_TYPE_PLUGIN;
|
1117 |
-
$themes_dir = fs_normalize_path( get_theme_root() );
|
1118 |
-
|
1119 |
-
for ( $i = 1, $bt = debug_backtrace(), $len = count( $bt ); $i < $len; $i ++ ) {
|
1120 |
-
if ( empty( $bt[ $i ]['file'] ) ) {
|
1121 |
-
continue;
|
1122 |
-
}
|
1123 |
-
|
1124 |
-
if ( $i > 1 && ! empty( $bt[ $i - 1 ]['file'] ) && $bt[ $i ]['file'] === $bt[ $i - 1 ]['file'] ) {
|
1125 |
-
// If file same as the prev file in the stack, skip it.
|
1126 |
-
continue;
|
1127 |
-
}
|
1128 |
-
|
1129 |
-
if ( ! empty( $bt[ $i ]['function'] ) && in_array( $bt[ $i ]['function'], array(
|
1130 |
-
'do_action',
|
1131 |
-
'apply_filter',
|
1132 |
-
// The string split is stupid, but otherwise, theme check
|
1133 |
-
// throws info notices.
|
1134 |
-
'requir' . 'e_once',
|
1135 |
-
'requir' . 'e',
|
1136 |
-
'includ' . 'e_once',
|
1137 |
-
'includ' . 'e'
|
1138 |
-
) )
|
1139 |
-
) {
|
1140 |
-
// Ignore call stack hooks and files inclusion.
|
1141 |
-
continue;
|
1142 |
-
}
|
1143 |
-
|
1144 |
-
$caller_file_path = fs_normalize_path( $bt[ $i ]['file'] );
|
1145 |
-
|
1146 |
-
if ( 'functions.php' === basename( $caller_file_path ) ) {
|
1147 |
-
/**
|
1148 |
-
* 1. Assumes that theme's starting execution file is functions.php.
|
1149 |
-
* 2. This complex logic fixes symlink issues (e.g. with Vargant).
|
1150 |
-
*
|
1151 |
-
* @author Vova Feldman (@svovaf)
|
1152 |
-
* @since 1.2.2.5
|
1153 |
-
*/
|
1154 |
-
|
1155 |
-
if ( $caller_file_path == fs_normalize_path( realpath( trailingslashit( $themes_dir ) . basename( dirname( $caller_file_path ) ) . '/' . basename( $caller_file_path ) ) ) ) {
|
1156 |
-
$module_type = WP_FS__MODULE_TYPE_THEME;
|
1157 |
|
1158 |
-
|
1159 |
-
|
1160 |
-
|
1161 |
-
|
1162 |
-
|
1163 |
-
|
1164 |
-
|
1165 |
-
|
1166 |
-
|
1167 |
-
|
1168 |
-
|
1169 |
-
|
1170 |
-
|
1171 |
-
|
1172 |
-
|
1173 |
-
|
1174 |
-
|
1175 |
-
|
1176 |
-
|
1177 |
-
|
1178 |
-
|
1179 |
-
|
1180 |
-
|
1181 |
-
|
1182 |
-
|
1183 |
-
|
1184 |
-
|
1185 |
-
|
1186 |
-
|
1187 |
-
}
|
1188 |
-
|
1189 |
-
return (object) array(
|
1190 |
-
'module_type' => $module_type,
|
1191 |
-
'path' => $caller_file_candidate
|
1192 |
-
);
|
1193 |
-
}
|
1194 |
-
|
1195 |
-
#----------------------------------------------------------------------------------
|
1196 |
-
#region Deactivation Feedback Form
|
1197 |
-
#----------------------------------------------------------------------------------
|
1198 |
-
|
1199 |
-
/**
|
1200 |
-
* Displays a confirmation and feedback dialog box when the user clicks on the "Deactivate" link on the plugins
|
1201 |
-
* page.
|
1202 |
-
*
|
1203 |
-
* @author Vova Feldman (@svovaf)
|
1204 |
-
* @author Leo Fajardo (@leorw)
|
1205 |
-
* @since 1.1.2
|
1206 |
-
*/
|
1207 |
-
function _add_deactivation_feedback_dialog_box() {
|
1208 |
-
/* Check the type of user:
|
1209 |
-
* 1. Long-term (long-term)
|
1210 |
-
* 2. Non-registered and non-anonymous short-term (non-registered-and-non-anonymous-short-term).
|
1211 |
-
* 3. Short-term (short-term)
|
1212 |
-
*/
|
1213 |
-
$is_long_term_user = true;
|
1214 |
|
1215 |
-
|
1216 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1217 |
|
1218 |
-
|
1219 |
-
|
|
|
1220 |
|
1221 |
-
|
1222 |
-
$date_diff_days = floor( $date_diff / ( 60 * 60 * 24 ) );
|
1223 |
|
1224 |
-
|
1225 |
-
$is_long_term_user = false;
|
1226 |
-
}
|
1227 |
|
1228 |
-
|
1229 |
|
1230 |
-
|
1231 |
-
$user_type = 'long-term';
|
1232 |
-
} else {
|
1233 |
-
if ( ! $this->is_registered() && ! $this->is_anonymous() ) {
|
1234 |
-
$user_type = 'non-registered-and-non-anonymous-short-term';
|
1235 |
-
} else {
|
1236 |
-
$user_type = 'short-term';
|
1237 |
-
}
|
1238 |
-
}
|
1239 |
|
1240 |
-
|
|
|
|
|
|
|
1241 |
|
1242 |
-
|
1243 |
-
|
1244 |
-
|
1245 |
-
|
1246 |
-
);
|
1247 |
|
1248 |
-
|
1249 |
-
|
1250 |
-
|
1251 |
-
|
1252 |
-
|
1253 |
-
|
1254 |
-
|
1255 |
-
|
1256 |
-
|
1257 |
-
*
|
1258 |
-
* @param string $user_type
|
1259 |
-
*
|
1260 |
-
* @return array The uninstall reasons for the specified user type.
|
1261 |
-
*/
|
1262 |
-
function _get_uninstall_reasons( $user_type = 'long-term' ) {
|
1263 |
-
$module_type = $this->_module_type;
|
1264 |
-
|
1265 |
-
$internal_message_template_var = array(
|
1266 |
-
'id' => $this->_module_id
|
1267 |
-
);
|
1268 |
-
|
1269 |
-
if ( $this->is_registered() && false !== $this->get_plan() && $this->get_plan()->has_technical_support() ) {
|
1270 |
-
$contact_support_template = fs_get_template( 'forms/deactivation/contact.php', $internal_message_template_var );
|
1271 |
-
} else {
|
1272 |
-
$contact_support_template = '';
|
1273 |
-
}
|
1274 |
-
|
1275 |
-
$reason_found_better_plugin = array(
|
1276 |
-
'id' => self::REASON_FOUND_A_BETTER_PLUGIN,
|
1277 |
-
'text' => sprintf( $this->get_text_inline( 'I found a better %s', 'reason-found-a-better-plugin' ), $module_type ),
|
1278 |
-
'input_type' => 'textfield',
|
1279 |
-
'input_placeholder' => sprintf( $this->get_text_inline( "What's the %s's name?", 'placeholder-plugin-name' ), $module_type ),
|
1280 |
-
);
|
1281 |
-
|
1282 |
-
$reason_temporary_deactivation = array(
|
1283 |
-
'id' => self::REASON_TEMPORARY_DEACTIVATION,
|
1284 |
-
'text' => sprintf(
|
1285 |
-
$this->get_text_inline( "It's a temporary %s. I'm just debugging an issue.", 'reason-temporary-x' ),
|
1286 |
-
strtolower( $this->is_plugin() ?
|
1287 |
-
|