FooGallery – Image Gallery WordPress Plugin - Version 1.4.31

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 Icon 128x128 FooGallery – Image Gallery WordPress Plugin
Version 1.4.31
Comparing to
See all releases

Code changes from version 1.4.30 to 1.4.31

Files changed (79) hide show
  1. README.txt +13 -1
  2. foogallery.php +2 -2
  3. freemius/assets/css/admin/account.css +1 -1
  4. freemius/assets/css/admin/affiliation.css +1 -1
  5. freemius/assets/css/admin/connect.css +1 -1
  6. freemius/assets/css/admin/dialog-boxes.css +1 -1
  7. freemius/assets/img/foogallery.png +0 -0
  8. freemius/assets/scss/_colors.scss +3 -0
  9. freemius/assets/scss/admin/_license-activation.scss +40 -0
  10. freemius/assets/scss/admin/_modal-common.scss +8 -0
  11. freemius/assets/scss/admin/_multisite-options.scss +40 -0
  12. freemius/assets/scss/admin/_tooltip.scss +66 -0
  13. freemius/assets/scss/admin/account.scss +51 -5
  14. freemius/assets/scss/admin/connect.scss +27 -0
  15. freemius/assets/scss/admin/dialog-boxes.scss +1 -0
  16. freemius/composer.json +1 -1
  17. freemius/config.php +372 -325
  18. freemius/includes/class-freemius.php +19676 -14057
  19. freemius/includes/class-fs-admin-notices.php +302 -0
  20. freemius/includes/class-fs-api.php +59 -2
  21. freemius/includes/class-fs-logger.php +4 -1
  22. freemius/includes/class-fs-options.php +431 -0
  23. freemius/includes/class-fs-plugin-updater.php +850 -703
  24. freemius/includes/class-fs-storage.php +523 -0
  25. freemius/includes/entities/class-fs-plugin-license.php +268 -223
  26. freemius/includes/entities/class-fs-plugin-tag.php +28 -2
  27. freemius/includes/entities/class-fs-plugin.php +98 -95
  28. freemius/includes/entities/class-fs-site.php +222 -147
  29. freemius/includes/fs-core-functions.php +185 -5
  30. freemius/includes/fs-essential-functions.php +53 -73
  31. freemius/includes/fs-plugin-info-dialog.php +1087 -967
  32. freemius/includes/i18n.php +6 -0
  33. freemius/includes/managers/class-fs-admin-menu-manager.php +136 -29
  34. freemius/includes/managers/class-fs-admin-notice-manager.php +342 -323
  35. freemius/includes/managers/class-fs-cache-manager.php +322 -277
  36. freemius/includes/managers/class-fs-key-value-storage.php +73 -9
  37. freemius/includes/managers/class-fs-option-manager.php +434 -297
  38. freemius/includes/managers/class-fs-plugin-manager.php +2 -2
  39. freemius/includes/sdk/FreemiusWordPress.php +5 -3
  40. freemius/includes/supplements/fs-essential-functions-1.1.7.1.php +1 -1
  41. freemius/languages/freemius-en.mo +0 -0
  42. freemius/languages/freemius-en.po +532 -417
  43. freemius/languages/freemius-es_ES.mo +0 -0
  44. freemius/languages/freemius-es_ES.po +638 -506
  45. freemius/languages/freemius-he_IL.mo +0 -0
  46. freemius/languages/freemius-he_IL.po +584 -452
  47. freemius/languages/freemius-it_IT.mo +0 -0
  48. freemius/languages/freemius-it_IT.po +633 -501
  49. freemius/languages/freemius-ja_JP.mo +0 -0
  50. freemius/languages/freemius-ja_JP.po +585 -453
  51. freemius/languages/freemius-nl_NL.mo +0 -0
  52. freemius/languages/freemius-ru_RU.mo +0 -0
  53. freemius/languages/freemius-ru_RU.po +2166 -0
  54. freemius/languages/freemius.pot +587 -451
  55. freemius/require.php +3 -0
  56. freemius/start.php +2 -2
  57. freemius/templates/account.php +324 -375
  58. freemius/templates/account/partials/activate-license-button.php +54 -0
  59. freemius/templates/account/partials/addon.php +343 -0
  60. freemius/templates/account/partials/deactivate-license-button.php +36 -0
  61. freemius/templates/account/partials/index.php +3 -0
  62. freemius/templates/account/partials/site.php +331 -0
  63. freemius/templates/all-admin-notice.php +0 -39
  64. freemius/templates/auto-installation.php +2 -1
  65. freemius/templates/checkout-legacy.php +0 -242
  66. freemius/templates/checkout.php +10 -2
  67. freemius/templates/connect.php +267 -33
  68. freemius/templates/contact.php +4 -0
  69. freemius/templates/debug.php +642 -564
  70. freemius/templates/debug/plugins-themes-sync.php +1 -1
  71. freemius/templates/debug/scheduled-crons.php +1 -2
  72. freemius/templates/forms/affiliation.php +336 -333
  73. freemius/templates/forms/license-activation.php +507 -24
  74. freemius/templates/js/open-license-activation.php +37 -0
  75. freemius/templates/partials/network-activation.php +81 -0
  76. freemius/templates/plugin-icon.php +3 -113
  77. freemius/templates/pricing.php +9 -4
  78. includes/functions.php +16 -2
  79. 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.5
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.30
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.30' );
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 .button i.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_addons h3{border:none;margin-bottom:0;padding:4px 5px}#fs_addons td{vertical-align:middle}#fs_addons thead{white-space:nowrap}#fs_addons td:first-child,#fs_addons th:first-child{text-align:left;font-weight:bold}#fs_addons td:last-child,#fs_addons th:last-child{text-align:right}#fs_addons th{font-weight:bold}#fs_billing_address{width:100%}#fs_billing_address tr td{width:50%;padding:5px}#fs_billing_address tr:first-of-type td{padding-top:0}#fs_billing_address span{font-weight:bold}#fs_billing_address input,#fs_billing_address select{display:block;width:100%;margin-top:5px}#fs_billing_address input::-moz-placeholder,#fs_billing_address select::-moz-placeholder{color:transparent;opacity:1}#fs_billing_address input:-ms-input-placeholder,#fs_billing_address select:-ms-input-placeholder{color:transparent}#fs_billing_address input::-webkit-input-placeholder,#fs_billing_address select::-webkit-input-placeholder{color:transparent}#fs_billing_address input.fs-read-mode,#fs_billing_address select.fs-read-mode{border-color:transparent;color:#777;border-bottom:1px dashed #ccc;padding-left:0;background:none}#fs_billing_address.fs-read-mode td span{display:none}#fs_billing_address.fs-read-mode input,#fs_billing_address.fs-read-mode select{border-color:transparent;color:#777;border-bottom:1px dashed #ccc;padding-left:0;background:none}#fs_billing_address.fs-read-mode input::-moz-placeholder,#fs_billing_address.fs-read-mode select::-moz-placeholder{color:#ccc;opacity:1}#fs_billing_address.fs-read-mode input:-ms-input-placeholder,#fs_billing_address.fs-read-mode select:-ms-input-placeholder{color:#ccc}#fs_billing_address.fs-read-mode input::-webkit-input-placeholder,#fs_billing_address.fs-read-mode select::-webkit-input-placeholder{color:#ccc}#fs_billing_address button{display:block;width:100%}
1
+ #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{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}
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%}.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}
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
- .button
34
{
35
- i.dashicons
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
- * @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
- }
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
- * @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.3
7
- */
8
- if ( ! defined( 'ABSPATH' ) ) {
9
- exit;
10
- }
11
-
12
- // "final class"
13
- class Freemius extends Freemius_Abstract {
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
- * @author Leo Fajardo (@leorw)
276
*
277
- * @since 1.2.3
278
*
279
- * @var FS_Affiliate
280
*/
281
- private $affiliate = null;
282
283
/**
284
- * @author Leo Fajardo (@leorw)
285
*
286
- * @since 1.2.3
287
*
288
- * @var FS_AffiliateTerms
289
*/
290
- private $plugin_affiliate_terms = null;
291
-
292
/**
293
- * @author Leo Fajardo (@leorw)
294
*
295
- * @since 1.2.3
296
*
297
- * @var FS_AffiliateTerms
298
*/
299
- private $custom_affiliate_terms = null;
300
-
301
- #region Uninstall Reasons IDs
302
-
303
- const REASON_NO_LONGER_NEEDED = 1;
304
- const REASON_FOUND_A_BETTER_PLUGIN = 2;
305
- const REASON_NEEDED_FOR_A_SHORT_PERIOD = 3;
306
- const REASON_BROKE_MY_SITE = 4;
307
- const REASON_SUDDENLY_STOPPED_WORKING = 5;
308
- const REASON_CANT_PAY_ANYMORE = 6;
309
- const REASON_OTHER = 7;
310
- const REASON_DIDNT_WORK = 8;
311
- const REASON_DONT_LIKE_TO_SHARE_MY_INFORMATION = 9;
312
- const REASON_COULDNT_MAKE_IT_WORK = 10;
313
- const REASON_GREAT_BUT_NEED_SPECIFIC_FEATURE = 11;
314
- const REASON_NOT_WORKING = 12;
315
- const REASON_NOT_WHAT_I_WAS_LOOKING_FOR = 13;
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
- if ( version_compare( $sdk_prev_version, '1.2.3', '<' ) &&
559
- version_compare( $sdk_version, '1.2.3', '>=' )
560
- ) {
561
- /**
562
- * Starting from version 1.2.3, paths are stored as relative paths and not absolute paths; so when
563
- * upgrading to 1.2.3, make paths relative.
564
- *
565
- * @author Leo Fajardo (@leorw)
566
- */
567
- $this->make_paths_relative();
568
- }
569
570
- if ( version_compare( $sdk_prev_version, '1.1.5', '<' ) &&
571
- version_compare( $sdk_version, '1.1.5', '>=' )
572
- ) {
573
- // On version 1.1.5 merged connectivity and is_on data.
574
- if ( isset( $this->_storage->connectivity_test ) ) {
575
- if ( ! isset( $this->_storage->is_on ) ) {
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
- // Override.
583
- $this->_storage->connectivity_test = $connectivity_data;
584
585
- // Remove previous structure.
586
- unset( $this->_storage->is_on );
587
- }
588
589
- }
590
- }
591
- }
592
593
/**
594
- * Makes paths relative.
595
- *
596
- * @author Leo Fajardo
597
- * @since 1.2.3
598
*/
599
- private function make_paths_relative() {
600
- $id_slug_type_path_map = self::$_accounts->get_option( 'id_slug_type_path_map', array() );
601
602
- if ( isset( $id_slug_type_path_map[ $this->_module_id ]['path'] ) ) {
603
- $id_slug_type_path_map[ $this->_module_id ]['path'] = $this->get_relative_path( $id_slug_type_path_map[ $this->_module_id ]['path'] );
604
605
- self::$_accounts->set_option( 'id_slug_type_path_map', $id_slug_type_path_map, true );
606
- }
607
608
- if ( isset( $this->_storage->plugin_main_file ) ) {
609
- $plugin_main_file = $this->_storage->plugin_main_file;
610
611
- if ( isset( $plugin_main_file->path ) ) {
612
- $this->_storage->plugin_main_file->path = $this->get_relative_path( $this->_storage->plugin_main_file->path );
613
- } else if ( isset( $plugin_main_file->prev_path ) ) {
614
- $this->_storage->plugin_main_file->prev_path = $this->get_relative_path( $this->_storage->plugin_main_file->prev_path );
615
- }
616
- }
617
618
- // Remove invalid path that is still associated with the current slug if there's any.
619
- $file_slug_map = self::$_accounts->get_option( 'file_slug_map', array() );
620
- foreach ( $file_slug_map as $plugin_basename => $slug ) {
621
- if ( $slug === $this->_slug &&
622
- $plugin_basename !== $this->_plugin_basename &&
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
- break;
629
- }
630
- }
631
- }
632
633
- /**
634
- * @author Vova Feldman (@svovaf)
635
- * @since 1.2.2.7
636
- *
637
- * @param string $plugin_prev_version
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
- $this->add_ajax_action( 'submit_affiliate_application', array( &$this, '_submit_affiliate_application' ) );
815
816
- $this->add_action( 'after_plans_sync', array( &$this, '_check_for_trial_plans' ) );
817
818
- $this->add_action( 'sdk_version_update', array( &$this, '_data_migration' ), WP_FS__DEFAULT_PRIORITY, 2 );
819
- $this->add_action( 'plugin_version_update', array( &$this, '_after_version_update' ), WP_FS__DEFAULT_PRIORITY, 2 );
820
- $this->add_filter( 'after_code_type_change', array( &$this, '_after_code_type_change' ) );
821
822
- add_action( 'admin_init', array( &$this, '_add_trial_notice' ) );
823
- add_action( 'admin_init', array( &$this, '_add_affiliate_program_notice' ) );
824
- add_action( 'admin_init', array( &$this, '_enqueue_common_css' ) );
825
826
- /**
827
- * Handle request to reset anonymous mode for `get_reconnect_url()`.
828
- *
829
- * @author Vova Feldman (@svovaf)
830
- * @since 1.2.1.5
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
- return $this->get_absolute_path( $id_slug_type_path_map[ $this->_module_id ]['path'] );
978
- }
979
980
/**
981
- * @author Leo Fajardo (@leorw)
982
- * @since 1.2.3
983
*
984
- * @param string $path
985
*
986
- * @return string
987
*/
988
- private function get_relative_path( $path ) {
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
- return $path;
995
- }
996
997
/**
998
- * @author Leo Fajardo (@leorw)
999
- * @since 1.2.3
1000
*
1001
- * @param string $path
1002
- * @param string|bool $module_type
1003
*
1004
- * @return string
1005
*/
1006
- private function get_absolute_path( $path, $module_type = false ) {
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
- return $path;
1013
- }
1014
1015
/**
1016
- * @author Leo Fajardo (@leorw)
1017
- * @since 1.2.3
1018
*
1019
- * @param string|bool $module_type
1020
*
1021
- * @return string
1022
*/
1023
- private function get_module_root_dir_path( $module_type = false ) {
1024
- $is_plugin = empty( $module_type ) ?
1025
- $this->is_plugin() :
1026
- ( WP_FS__MODULE_TYPE_PLUGIN === $module_type );
1027
1028
- return fs_normalize_path( trailingslashit( $is_plugin ?
1029
- WP_PLUGIN_DIR :
1030
- get_theme_root() ) );
1031
- }
1032
1033
- /**
1034
- * @author Leo Fajardo (@leorw)
1035
- *
1036
- * @param number $module_id
1037
- * @param string $slug
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
- * Relative path of the theme, e.g.:
1160
- * `my-theme/functions.php`
1161
- *
1162
- * @author Leo Fajardo (@leorw)
1163
- */
1164
- $caller_file_candidate = basename( dirname( $caller_file_path ) ) .
1165
- '/' .
1166
- basename( $caller_file_path );
1167
-
1168
- continue;
1169
- }
1170
- }
1171
-
1172
- $caller_file_hash = md5( $caller_file_path );
1173
-
1174
- if ( ! isset( $caller_map[ $caller_file_hash ] ) ) {
1175
- foreach ( $all_plugins_paths as $plugin_path ) {
1176
- if ( false !== strpos( $caller_file_path, fs_normalize_path( dirname( $plugin_path ) . '/' ) ) ) {
1177
- $caller_map[ $caller_file_hash ] = fs_normalize_path( $plugin_path );
1178
- break;
1179
- }
1180
- }
1181
- }
1182
-
1183
- if ( isset( $caller_map[ $caller_file_hash ] ) ) {
1184
- $module_type = WP_FS__MODULE_TYPE_PLUGIN;
1185
- $caller_file_candidate = plugin_basename( $caller_map[ $caller_file_hash ] );
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
- // Check if the site is at least 2 days old.
1216
- $time_installed = $this->_storage->install_timestamp;
1217
1218
- // Difference in seconds.
1219
- $date_diff = time() - $time_installed;
1220
1221
- // Convert seconds to days.
1222
- $date_diff_days = floor( $date_diff / ( 60 * 60 * 24 ) );
1223
1224
- if ( $date_diff_days < 2 ) {
1225
- $is_long_term_user = false;
1226
- }
1227
1228
- $is_long_term_user = $this->apply_filters( 'is_long_term_user', $is_long_term_user );
1229
1230
- if ( $is_long_term_user ) {
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
- $uninstall_reasons = $this->_get_uninstall_reasons( $user_type );
1241
1242
- // Load the HTML template for the deactivation feedback dialog box.
1243
- $vars = array(
1244
- 'reasons' => $uninstall_reasons,
1245
- 'id' => $this->_module_id
1246
- );
1247
1248
- /**
1249
- * @todo Deactivation form core functions should be loaded only once! Otherwise, when there are multiple Freemius powered plugins the same code is loaded multiple times. The only thing that should be loaded differently is the various deactivation reasons object based on the state of the plugin.
1250
- */
1251
- fs_require_template( 'forms/deactivation/form.php', $vars );
1252
- }
1253
-
1254
- /**
1255
- * @author Leo Fajardo (leorw)
1256
- * @since 1.1.2
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
-