Yasr – Yet Another Stars Rating - Version 1.9.6

Version Description

  • NEW FEATURE: 3 Brand new Gutenberg Blocks!! Yasr: Top 10 By Visitor Votes, Yasr: Most Active Visitos and Yasr Most Active Authors!
  • NEW FEATURE: Gutenberg Panel!
  • TWEAKED: In Gutenberg, Overall Rating value is now saved when post is saved/updated, instead of with an ajax call.
  • TWEAKED: updated freemius sdk to version 2.3.0
Download this release

Release Info

Developer Dudo
Plugin Icon 128x128 Yasr – Yet Another Stars Rating
Version 1.9.6
Comparing to
See all releases

Code changes from version 1.9.5 to 1.9.6

Files changed (71) hide show
  1. freemius/assets/css/admin/account.css +1 -1
  2. freemius/assets/css/admin/add-ons.css +2 -2
  3. freemius/assets/css/admin/common.css +1 -1
  4. freemius/assets/css/admin/connect.css +1 -1
  5. freemius/assets/css/admin/dialog-boxes.css +1 -1
  6. freemius/config.php +3 -3
  7. freemius/includes/class-freemius.php +1844 -355
  8. freemius/includes/class-fs-api.php +77 -38
  9. freemius/includes/class-fs-plugin-updater.php +164 -36
  10. freemius/includes/class-fs-storage.php +2 -0
  11. freemius/includes/entities/class-fs-payment.php +58 -0
  12. freemius/includes/entities/class-fs-plugin-license.php +22 -1
  13. freemius/includes/entities/class-fs-plugin-tag.php +12 -2
  14. freemius/includes/entities/class-fs-plugin.php +12 -0
  15. freemius/includes/entities/class-fs-site.php +4 -1
  16. freemius/includes/entities/class-fs-user.php +17 -0
  17. freemius/includes/fs-core-functions.php +35 -6
  18. freemius/includes/fs-plugin-info-dialog.php +557 -90
  19. freemius/includes/i18n.php +2 -2
  20. freemius/includes/managers/class-fs-admin-menu-manager.php +25 -14
  21. freemius/includes/managers/class-fs-option-manager.php +10 -3
  22. freemius/languages/freemius-da_DK.mo +0 -0
  23. freemius/languages/freemius-da_DK.po +1010 -722
  24. freemius/languages/freemius-en.mo +0 -0
  25. freemius/languages/freemius-en.po +510 -444
  26. freemius/languages/freemius-es_ES.mo +0 -0
  27. freemius/languages/freemius-es_ES.po +585 -510
  28. freemius/languages/freemius-fr_FR.mo +0 -0
  29. freemius/languages/freemius-fr_FR.po +585 -510
  30. freemius/languages/freemius-he_IL.mo +0 -0
  31. freemius/languages/freemius-he_IL.po +585 -510
  32. freemius/languages/freemius-hu_HU.mo +0 -0
  33. freemius/languages/freemius-hu_HU.po +586 -511
  34. freemius/languages/freemius-it_IT.mo +0 -0
  35. freemius/languages/freemius-it_IT.po +586 -511
  36. freemius/languages/freemius-ja_JP.mo +0 -0
  37. freemius/languages/freemius-ja_JP.po +586 -511
  38. freemius/languages/freemius-nl_NL.mo +0 -0
  39. freemius/languages/freemius-nl_NL.po +585 -510
  40. freemius/languages/freemius-ru_RU.mo +0 -0
  41. freemius/languages/freemius-ru_RU.po +585 -510
  42. freemius/languages/freemius.pot +504 -438
  43. freemius/start.php +1 -1
  44. freemius/templates/account.php +164 -24
  45. freemius/templates/account/billing.php +8 -16
  46. freemius/templates/account/partials/addon.php +81 -24
  47. freemius/templates/account/partials/site.php +2 -2
  48. freemius/templates/account/payments.php +1 -1
  49. freemius/templates/add-ons.php +260 -16
  50. freemius/templates/checkout.php +11 -3
  51. freemius/templates/connect.php +51 -12
  52. freemius/templates/forms/deactivation/form.php +539 -497
  53. freemius/templates/forms/license-activation.php +32 -31
  54. freemius/templates/forms/premium-versions-upgrade-metadata.php +3 -1
  55. freemius/templates/forms/subscription-cancellation.php +3 -3
  56. freemius/templates/js/open-license-activation.php +1 -1
  57. freemius/templates/js/style-premium-theme.php +10 -2
  58. freemius/templates/partials/network-activation.php +12 -4
  59. freemius/templates/pricing.php +5 -0
  60. js/src/yasr-guten-blocks.js +170 -96
  61. js/src/yasr-guten-panel.js +134 -0
  62. js/yasr-guten-blocks.js +151 -105
  63. js/yasr-guten-panel.js +191 -0
  64. lib/admin/editor/yasr-editor-functions.php +30 -25
  65. lib/admin/editor/yasr-metabox-top-right.php +1 -1
  66. lib/admin/settings/yasr-settings-functions.php +8 -1
  67. lib/yasr-db-functions.php +119 -81
  68. lib/yasr-functions.php +14 -5
  69. readme.txt +7 -1
  70. yasr-stats-page.php +2 -5
  71. yet-another-stars-rating.php +2 -2
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 .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%}
1
+ label.fs-tag,span.fs-tag{background:#ffba00;color:#fff;display:inline-block;border-radius:3px;padding:5px;font-size:11px;line-height:11px;vertical-align:baseline}label.fs-tag.fs-warn,span.fs-tag.fs-warn{background:#ffba00}label.fs-tag.fs-info,span.fs-tag.fs-info{background:#00a0d2}label.fs-tag.fs-success,span.fs-tag.fs-success{background:#46b450}label.fs-tag.fs-error,span.fs-tag.fs-error{background:#dc3232}#fs_account .postbox,#fs_account .widefat{max-width: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}.fs-field-beta_program label{margin-left:7px}label.fs-tag{background:#ffba00;color:#fff;display:inline-block;border-radius:3px;padding:5px;font-size:11px;line-height:11px;vertical-align:baseline}label.fs-tag.fs-warn{background:#ffba00}label.fs-tag.fs-success{background:#46b450}label.fs-tag.fs-error{background:#dc3232}#fs_sites .fs-scrollable-table .fs-table-body{max-height:200px;overflow:auto;border:1px solid #e5e5e5}#fs_sites .fs-scrollable-table .fs-table-body>table.widefat{border:none !important}#fs_sites .fs-scrollable-table .fs-main-column{width:100%}#fs_sites .fs-scrollable-table .fs-site-details td:first-of-type{text-align:right;color:grey;width:1px}#fs_sites .fs-scrollable-table .fs-site-details td:last-of-type{text-align:right}#fs_sites .fs-scrollable-table .fs-install-details table tr td{width:1px;white-space:nowrap}#fs_sites .fs-scrollable-table .fs-install-details table tr td:last-of-type{width:auto}#fs_addons h3{border:none;margin-bottom:0;padding:4px 5px}#fs_addons td{vertical-align:middle}#fs_addons thead{white-space:nowrap}#fs_addons td:first-child,#fs_addons th:first-child{text-align:left;font-weight:bold}#fs_addons td:last-child,#fs_addons th:last-child{text-align:right}#fs_addons th{font-weight:bold}#fs_billing_address{width:100%}#fs_billing_address tr td{width:50%;padding:5px}#fs_billing_address tr:first-of-type td{padding-top:0}#fs_billing_address span{font-weight:bold}#fs_billing_address input,#fs_billing_address select{display:block;width:100%;margin-top:5px}#fs_billing_address input::-moz-placeholder,#fs_billing_address select::-moz-placeholder{color:transparent;opacity:1}#fs_billing_address input:-ms-input-placeholder,#fs_billing_address select:-ms-input-placeholder{color:transparent}#fs_billing_address input::-webkit-input-placeholder,#fs_billing_address select::-webkit-input-placeholder{color:transparent}#fs_billing_address input.fs-read-mode,#fs_billing_address select.fs-read-mode{border-color:transparent;color:#777;border-bottom:1px dashed #ccc;padding-left:0;background:none}#fs_billing_address.fs-read-mode td span{display:none}#fs_billing_address.fs-read-mode input,#fs_billing_address.fs-read-mode select{border-color:transparent;color:#777;border-bottom:1px dashed #ccc;padding-left:0;background:none}#fs_billing_address.fs-read-mode input::-moz-placeholder,#fs_billing_address.fs-read-mode select::-moz-placeholder{color:#ccc;opacity:1}#fs_billing_address.fs-read-mode input:-ms-input-placeholder,#fs_billing_address.fs-read-mode select:-ms-input-placeholder{color:#ccc}#fs_billing_address.fs-read-mode input::-webkit-input-placeholder,#fs_billing_address.fs-read-mode select::-webkit-input-placeholder{color:#ccc}#fs_billing_address button{display:block;width:100%}
freemius/assets/css/admin/add-ons.css CHANGED
@@ -1,2 +1,2 @@
1
- #fs_addons .fs-cards-list{list-style:none}#fs_addons .fs-cards-list .fs-card{float:left;height:152px;width:310px;padding:0;margin:0 0 30px 30px;font-size:14px;list-style:none;border:1px solid #ddd;cursor:pointer;position:relative}#fs_addons .fs-cards-list .fs-card .fs-overlay{position:absolute;left:0;right:0;bottom:0;top:0;z-index:9}#fs_addons .fs-cards-list .fs-card .fs-inner{background-color:#fff;overflow:hidden;height:100%;position:relative}#fs_addons .fs-cards-list .fs-card .fs-inner ul{-moz-transition:all,0.15s;-o-transition:all,0.15s;-ms-transition:all,0.15s;-webkit-transition:all,0.15s;transition:all,0.15s;left:0;right:0;top:0;position:absolute}#fs_addons .fs-cards-list .fs-card .fs-inner li{list-style:none;line-height:18px;padding:0 15px;width:100%;display:block;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-card-banner{padding:0;margin:0;line-height:0;display:block;height:100px;background-repeat:repeat-x;background-size:100% 100%;-moz-transition:all,0.15s;-o-transition:all,0.15s;-ms-transition:all,0.15s;-webkit-transition:all,0.15s;transition:all,0.15s}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-title{margin:10px 0 0 0;height:18px;overflow:hidden;color:#000;white-space:nowrap;text-overflow:ellipsis;font-weight:bold}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-offer{font-size:0.9em}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-description{background-color:#f9f9f9;padding:10px 15px 100px 15px;border-top:1px solid #eee;margin:0 0 10px 0;color:#777}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-tag{position:absolute;top:10px;right:0px;background:greenyellow;display:block;padding:2px 10px;-moz-box-shadow:1px 1px 1px rgba(0,0,0,0.3);-webkit-box-shadow:1px 1px 1px rgba(0,0,0,0.3);box-shadow:1px 1px 1px rgba(0,0,0,0.3);text-transform:uppercase;font-size:0.9em;font-weight:bold}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-cta .button{position:absolute;top:112px;right:10px}@media screen and (min-width: 960px){#fs_addons .fs-cards-list .fs-card:hover .fs-overlay{border:2px solid #29abe1;margin-left:-1px;margin-top:-1px}#fs_addons .fs-cards-list .fs-card:hover .fs-inner ul{top:-100px}#fs_addons .fs-cards-list .fs-card:hover .fs-inner .fs-title,#fs_addons .fs-cards-list .fs-card:hover .fs-inner .fs-offer{color:#29abe1}}
2
- #TB_window,#TB_window iframe{width:772px !important}#plugin-information #section-description h2,#plugin-information #section-description h3,#plugin-information #section-description p,#plugin-information #section-description b,#plugin-information #section-description i,#plugin-information #section-description blockquote,#plugin-information #section-description li,#plugin-information #section-description ul,#plugin-information #section-description ol{clear:none}#plugin-information #section-description .fs-selling-points{padding-bottom:10px;border-bottom:1px solid #ddd}#plugin-information #section-description .fs-selling-points ul{margin:0}#plugin-information #section-description .fs-selling-points ul li{padding:0;list-style:none outside none}#plugin-information #section-description .fs-selling-points ul li i.dashicons{color:#71ae00;font-size:3em;vertical-align:middle;line-height:30px;float:left;margin:0 0 0 -15px}#plugin-information #section-description .fs-selling-points ul li h3{margin:1em 30px !important}#plugin-information #section-description .fs-screenshots:after{content:"";display:table;clear:both}#plugin-information #section-description .fs-screenshots ul{list-style:none;margin:0}#plugin-information #section-description .fs-screenshots ul li{width:225px;height:225px;float:left;margin-bottom:20px;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}#plugin-information #section-description .fs-screenshots ul li a{display:block;width:100%;height:100%;border:1px solid;-moz-box-shadow:1px 1px 1px rgba(0,0,0,0.2);-webkit-box-shadow:1px 1px 1px rgba(0,0,0,0.2);box-shadow:1px 1px 1px rgba(0,0,0,0.2);background-size:cover}#plugin-information #section-description .fs-screenshots ul li.odd{margin-right:20px}#plugin-information .plugin-information-pricing{margin:-16px;border-bottom:1px solid #ddd}#plugin-information .plugin-information-pricing .fs-plan h3{margin-top:0;padding:20px;font-size:16px}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper{border-bottom:1px solid #ddd}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper .nav-tab{cursor:pointer;position:relative;padding:0 10px;font-size:0.9em}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper .nav-tab label{text-transform:uppercase;color:green;background:greenyellow;position:absolute;left:-1px;right:-1px;bottom:100%;border:1px solid darkgreen;padding:2px;text-align:center;font-size:0.9em;line-height:1em}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper .nav-tab.nav-tab-active{cursor:default;background:#fffeec;border-bottom-color:#fffeec}#plugin-information .plugin-information-pricing .fs-plan.fs-single-cycle h3{background:#fffeec;margin:0;padding-bottom:0;color:#0073aa}#plugin-information .plugin-information-pricing .fs-plan.fs-single-cycle .nav-tab-wrapper,#plugin-information .plugin-information-pricing .fs-plan.fs-single-cycle .fs-billing-frequency{display:none}#plugin-information .plugin-information-pricing .fs-plan .fs-pricing-body{background:#fffeec;padding:20px}#plugin-information .plugin-information-pricing .fs-plan .button{width:100%;text-align:center;font-weight:bold;text-transform:uppercase;font-size:1.1em}#plugin-information .plugin-information-pricing .fs-plan label{white-space:nowrap}#plugin-information .plugin-information-pricing .fs-plan var{font-style:normal}#plugin-information .plugin-information-pricing .fs-plan .fs-billing-frequency,#plugin-information .plugin-information-pricing .fs-plan .fs-annual-discount{text-align:center;display:block;font-weight:bold;margin-bottom:10px;text-transform:uppercase;background:#F3F3F3;padding:2px;border:1px solid #ccc}#plugin-information .plugin-information-pricing .fs-plan .fs-annual-discount{text-transform:none;color:green;background:greenyellow}#plugin-information .plugin-information-pricing .fs-plan ul.fs-trial-terms{font-size:0.9em}#plugin-information .plugin-information-pricing .fs-plan ul.fs-trial-terms i{float:left;margin:0 0 0 -15px}#plugin-information .plugin-information-pricing .fs-plan ul.fs-trial-terms li{margin:10px 0 0 0}#plugin-information #section-features .fs-features{margin:-20px -26px}#plugin-information #section-features table{width:100%;border-spacing:0;border-collapse:separate}#plugin-information #section-features table thead th{padding:10px 0}#plugin-information #section-features table thead .fs-price{color:#71ae00;font-weight:normal;display:block;text-align:center}#plugin-information #section-features table tbody td{border-top:1px solid #ccc;padding:10px 0;text-align:center;width:100px;color:#71ae00}#plugin-information #section-features table tbody td:first-child{text-align:left;width:auto;color:inherit;padding-left:26px}#plugin-information #section-features table tbody tr.fs-odd td{background:#fefefe}#plugin-information #section-features .dashicons-yes{width:30px;height:30px;font-size:30px}@media screen and (max-width: 961px){#fs_addons .fs-cards-list .fs-card{height:265px}}
1
+ .fs-badge{position:absolute;top:10px;right:0;background:#71ae00;color:white;text-transform:uppercase;padding:5px 10px;-moz-border-radius:3px 0 0 3px;-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;font-weight:bold;border-right:0;-moz-box-shadow:0 2px 1px -1px rgba(0,0,0,0.3);-webkit-box-shadow:0 2px 1px -1px rgba(0,0,0,0.3);box-shadow:0 2px 1px -1px rgba(0,0,0,0.3)}#fs_addons .fs-cards-list{list-style:none}#fs_addons .fs-cards-list .fs-card{float:left;height:152px;width:310px;padding:0;margin:0 0 30px 30px;font-size:14px;list-style:none;border:1px solid #ddd;cursor:pointer;position:relative}#fs_addons .fs-cards-list .fs-card .fs-overlay{position:absolute;left:0;right:0;bottom:0;top:0;z-index:9}#fs_addons .fs-cards-list .fs-card .fs-inner{background-color:#fff;overflow:hidden;height:100%;position:relative}#fs_addons .fs-cards-list .fs-card .fs-inner>ul{-moz-transition:all,0.15s;-o-transition:all,0.15s;-ms-transition:all,0.15s;-webkit-transition:all,0.15s;transition:all,0.15s;left:0;right:0;top:0;position:absolute}#fs_addons .fs-cards-list .fs-card .fs-inner>ul>li{list-style:none;line-height:18px;padding:0 15px;width:100%;display:block;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-card-banner{padding:0;margin:0;line-height:0;display:block;height:100px;background-repeat:repeat-x;background-size:100% 100%;-moz-transition:all,0.15s;-o-transition:all,0.15s;-ms-transition:all,0.15s;-webkit-transition:all,0.15s;transition:all,0.15s}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-card-banner .fs-badge.fs-installed-addon-badge{font-size:1.02em;line-height:1.3em}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-title{margin:10px 0 0 0;height:18px;overflow:hidden;color:#000;white-space:nowrap;text-overflow:ellipsis;font-weight:bold}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-offer{font-size:0.9em}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-description{background-color:#f9f9f9;padding:10px 15px 100px 15px;border-top:1px solid #eee;margin:0 0 10px 0;color:#777}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-tag{position:absolute;top:10px;right:0px;background:greenyellow;display:block;padding:2px 10px;-moz-box-shadow:1px 1px 1px rgba(0,0,0,0.3);-webkit-box-shadow:1px 1px 1px rgba(0,0,0,0.3);box-shadow:1px 1px 1px rgba(0,0,0,0.3);text-transform:uppercase;font-size:0.9em;font-weight:bold}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-cta .button,#fs_addons .fs-cards-list .fs-card .fs-inner .fs-cta .button-group{position:absolute;top:112px;right:10px}@media screen and (min-width: 960px){#fs_addons .fs-cards-list .fs-card:hover .fs-overlay{border:2px solid #29abe1;margin-left:-1px;margin-top:-1px}#fs_addons .fs-cards-list .fs-card:hover .fs-inner ul{top:-100px}#fs_addons .fs-cards-list .fs-card:hover .fs-inner .fs-title,#fs_addons .fs-cards-list .fs-card:hover .fs-inner .fs-offer{color:#29abe1}}
2
+ #TB_window,#TB_window iframe{width:821px !important}#plugin-information .fyi{width:266px !important}#plugin-information #section-holder{margin-right:299px}#plugin-information #section-description h2,#plugin-information #section-description h3,#plugin-information #section-description p,#plugin-information #section-description b,#plugin-information #section-description i,#plugin-information #section-description blockquote,#plugin-information #section-description li,#plugin-information #section-description ul,#plugin-information #section-description ol{clear:none}#plugin-information #section-description .fs-selling-points{padding-bottom:10px;border-bottom:1px solid #ddd}#plugin-information #section-description .fs-selling-points ul{margin:0}#plugin-information #section-description .fs-selling-points ul li{padding:0;list-style:none outside none}#plugin-information #section-description .fs-selling-points ul li i.dashicons{color:#71ae00;font-size:3em;vertical-align:middle;line-height:30px;float:left;margin:0 0 0 -15px}#plugin-information #section-description .fs-selling-points ul li h3{margin:1em 30px !important}#plugin-information #section-description .fs-screenshots:after{content:"";display:table;clear:both}#plugin-information #section-description .fs-screenshots ul{list-style:none;margin:0}#plugin-information #section-description .fs-screenshots ul li{width:225px;height:225px;float:left;margin-bottom:20px;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}#plugin-information #section-description .fs-screenshots ul li a{display:block;width:100%;height:100%;border:1px solid;-moz-box-shadow:1px 1px 1px rgba(0,0,0,0.2);-webkit-box-shadow:1px 1px 1px rgba(0,0,0,0.2);box-shadow:1px 1px 1px rgba(0,0,0,0.2);background-size:cover}#plugin-information #section-description .fs-screenshots ul li.odd{margin-right:20px}#plugin-information .plugin-information-pricing{margin:-16px;border-bottom:1px solid #ddd}#plugin-information .plugin-information-pricing .fs-plan h3{margin-top:0;padding:20px;font-size:16px}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper{border-bottom:1px solid #ddd}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper .nav-tab{cursor:pointer;position:relative;padding:0 10px;font-size:0.9em}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper .nav-tab label{text-transform:uppercase;color:green;background:greenyellow;position:absolute;left:-1px;right:-1px;bottom:100%;border:1px solid darkgreen;padding:2px;text-align:center;font-size:0.9em;line-height:1em}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper .nav-tab.nav-tab-active{cursor:default;background:#fffeec;border-bottom-color:#fffeec}#plugin-information .plugin-information-pricing .fs-plan.fs-single-cycle h3{background:#fffeec;margin:0;padding-bottom:0;color:#0073aa}#plugin-information .plugin-information-pricing .fs-plan.fs-single-cycle .nav-tab-wrapper,#plugin-information .plugin-information-pricing .fs-plan.fs-single-cycle .fs-billing-frequency{display:none}#plugin-information .plugin-information-pricing .fs-plan .fs-pricing-body{background:#fffeec;padding:20px}#plugin-information .plugin-information-pricing .fs-plan .button{width:100%;text-align:center;font-weight:bold;text-transform:uppercase;font-size:1.1em}#plugin-information .plugin-information-pricing .fs-plan label{white-space:nowrap}#plugin-information .plugin-information-pricing .fs-plan var{font-style:normal}#plugin-information .plugin-information-pricing .fs-plan .fs-billing-frequency,#plugin-information .plugin-information-pricing .fs-plan .fs-annual-discount{text-align:center;display:block;font-weight:bold;margin-bottom:10px;text-transform:uppercase;background:#F3F3F3;padding:2px;border:1px solid #ccc}#plugin-information .plugin-information-pricing .fs-plan .fs-annual-discount{text-transform:none;color:green;background:greenyellow}#plugin-information .plugin-information-pricing .fs-plan ul.fs-trial-terms{font-size:0.9em}#plugin-information .plugin-information-pricing .fs-plan ul.fs-trial-terms i{float:left;margin:0 0 0 -15px}#plugin-information .plugin-information-pricing .fs-plan ul.fs-trial-terms li{margin:10px 0 0 0}#plugin-information #section-features .fs-features{margin:-20px -26px}#plugin-information #section-features table{width:100%;border-spacing:0;border-collapse:separate}#plugin-information #section-features table thead th{padding:10px 0}#plugin-information #section-features table thead .fs-price{color:#71ae00;font-weight:normal;display:block;text-align:center}#plugin-information #section-features table tbody td{border-top:1px solid #ccc;padding:10px 0;text-align:center;width:100px;color:#71ae00}#plugin-information #section-features table tbody td:first-child{text-align:left;width:auto;color:inherit;padding-left:26px}#plugin-information #section-features table tbody tr.fs-odd td{background:#fefefe}#plugin-information #section-features .dashicons-yes{width:30px;height:30px;font-size:30px}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .button-group .button,#plugin-information .fs-dropdown .button-group .button{position:relative;width:auto;top:0;right:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .button-group .button:focus,#plugin-information .fs-dropdown .button-group .button:focus{z-index:10}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .button-group .fs-dropdown-arrow,#plugin-information .fs-dropdown .button-group .fs-dropdown-arrow{border-top:6px solid white;border-right:4px solid transparent;border-left:4px solid transparent;top:12px;position:relative}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.active:not(.up) .button:not(.fs-dropdown-arrow-button),#plugin-information .fs-dropdown.active:not(.up) .button:not(.fs-dropdown-arrow-button){border-bottom-left-radius:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.active:not(.up) .fs-dropdown-arrow-button,#plugin-information .fs-dropdown.active:not(.up) .fs-dropdown-arrow-button{border-bottom-right-radius:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.active.up .button:not(.fs-dropdown-arrow-button),#plugin-information .fs-dropdown.active.up .button:not(.fs-dropdown-arrow-button){border-top-left-radius:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.active.up .fs-dropdown-arrow-button,#plugin-information .fs-dropdown.active.up .fs-dropdown-arrow-button{border-top-right-radius:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list,#plugin-information .fs-dropdown .fs-dropdown-list{position:absolute;right:-1px;top:100%;margin-left:auto;padding:3px 0;border:1px solid #bfbfbf;background-color:#fff;z-index:1;width:230px;text-align:left;-moz-box-shadow:0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12);-webkit-box-shadow:0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12);box-shadow:0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12)}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list li,#plugin-information .fs-dropdown .fs-dropdown-list li{margin:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list li a,#plugin-information .fs-dropdown .fs-dropdown-list li a{display:block;padding:5px 10px;text-decoration:none;text-shadow:none}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list li:hover,#plugin-information .fs-dropdown .fs-dropdown-list li:hover{background-color:#0074a3;color:#fff}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list li:hover a,#plugin-information .fs-dropdown .fs-dropdown-list li:hover a{color:#fff}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown:not(.up) .fs-dropdown-list,#plugin-information .fs-dropdown:not(.up) .fs-dropdown-list{-moz-border-radius:3px 0 3px 3px;-webkit-border-radius:3px 0 3px 3px;border-radius:3px 0 3px 3px}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.up .fs-dropdown-list,#plugin-information .fs-dropdown.up .fs-dropdown-list{-moz-border-radius:3px 3px 0 3px;-webkit-border-radius:3px 3px 0 3px;border-radius:3px 3px 0 3px}#plugin-information .fs-dropdown .button-group{width:100%}#plugin-information .fs-dropdown .button-group .button{float:none;font-size:14px;font-weight:normal;text-transform:none}#plugin-information .fs-dropdown .fs-dropdown-list{margin-top:1px}#plugin-information .fs-dropdown.up .fs-dropdown-list{top:auto;bottom:100%;margin-bottom:2px}#plugin-information.wp-core-ui .fs-pricing-body .fs-dropdown .button-group{text-align:center;display:table}#plugin-information.wp-core-ui .fs-pricing-body .fs-dropdown .button-group .button{display:table-cell}#plugin-information.wp-core-ui .fs-pricing-body .fs-dropdown .button-group .button:not(.fs-dropdown-arrow-button){left:1px;width:100%}#plugin-information-footer>.button,#plugin-information-footer .fs-dropdown{position:relative;top:3px}#plugin-information-footer>.button.left,#plugin-information-footer .fs-dropdown.left{float:left}#plugin-information-footer>.right,#plugin-information-footer .fs-dropdown{float:right}@media screen and (max-width: 961px){#fs_addons .fs-cards-list .fs-card{height:265px}}
freemius/assets/css/admin/common.css CHANGED
@@ -1,2 +1,2 @@
1
- .theme-browser .theme .fs-premium-theme-badge{position:absolute;top:10px;right:0;background:#71ae00;color:#fff;text-transform:uppercase;padding:5px 10px;-moz-border-radius:3px 0 0 3px;-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;font-weight:bold;border-right:0;-moz-box-shadow:0 2px 1px -1px rgba(0,0,0,0.3);-webkit-box-shadow:0 2px 1px -1px rgba(0,0,0,0.3);box-shadow:0 2px 1px -1px rgba(0,0,0,0.3);font-size:1.1em}#fs_frame{line-height:0;font-size:0}.fs-full-size-wrapper{margin:40px 0 -65px -20px}@media (max-width: 600px){.fs-full-size-wrapper{margin:0 0 -65px -10px}}
2
.fs-notice{position:relative}.fs-notice.fs-has-title{margin-bottom:30px !important}.fs-notice.success{color:green}.fs-notice.promotion{border-color:#00a0d2 !important;background-color:#f2fcff !important}.fs-notice .fs-notice-body{margin:.5em 0;padding:2px}.fs-notice .fs-close{cursor:pointer;color:#aaa;float:right}.fs-notice .fs-close:hover{color:#666}.fs-notice .fs-close>*{margin-top:7px;display:inline-block}.fs-notice label.fs-plugin-title{background:rgba(0,0,0,0.3);color:#fff;padding:2px 10px;position:absolute;top:100%;bottom:auto;right:auto;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px;left:10px;font-size:12px;font-weight:bold;cursor:auto}div.fs-notice.updated,div.fs-notice.success,div.fs-notice.promotion{display:block !important}.rtl .fs-notice .fs-close{float:left}.fs-secure-notice{position:fixed;top:32px;left:160px;right:0;background:#ebfdeb;padding:10px 20px;color:green;z-index:9999;-moz-box-shadow:0 2px 2px rgba(6,113,6,0.3);-webkit-box-shadow:0 2px 2px rgba(6,113,6,0.3);box-shadow:0 2px 2px rgba(6,113,6,0.3);opacity:0.95;filter:alpha(opacity=95)}.fs-secure-notice:hover{opacity:1;filter:alpha(opacity=100)}.fs-secure-notice a.fs-security-proof{color:green;text-decoration:none}@media screen and (max-width: 960px){.fs-secure-notice{left:36px}}@media screen and (max-width: 600px){.fs-secure-notice{display:none}}@media screen and (max-width: 500px){#fs_promo_tab{display:none}}@media screen and (max-width: 782px){.fs-secure-notice{left:0;top:46px;text-align:center}}span.fs-submenu-item.fs-sub:before{content:'\21B3';padding:0 5px}.rtl span.fs-submenu-item.fs-sub:before{content:'\21B2'}.fs-submenu-item.pricing.upgrade-mode{color:greenyellow}.fs-submenu-item.pricing.trial-mode{color:#83e2ff}#adminmenu .update-plugins.fs-trial{background-color:#00b9eb}.fs-ajax-spinner{border:0;width:20px;height:20px;margin-right:5px;vertical-align:sub;display:inline-block;background:url("/wp-admin/images/wpspin_light-2x.gif");background-size:contain}.wrap.fs-section h2{text-align:left}.plugins p.fs-upgrade-notice{border:0;background-color:#d54e21;padding:10px;color:#f9f9f9;margin-top:10px}
1
+ .fs-badge{position:absolute;top:10px;right:0;background:#71ae00;color:white;text-transform:uppercase;padding:5px 10px;-moz-border-radius:3px 0 0 3px;-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;font-weight:bold;border-right:0;-moz-box-shadow:0 2px 1px -1px rgba(0,0,0,0.3);-webkit-box-shadow:0 2px 1px -1px rgba(0,0,0,0.3);box-shadow:0 2px 1px -1px rgba(0,0,0,0.3)}.theme-browser .theme .fs-premium-theme-badge-container{position:absolute;right:0;top:0}.theme-browser .theme .fs-premium-theme-badge-container .fs-badge{position:relative;top:0;margin-top:10px;text-align:center}.theme-browser .theme .fs-premium-theme-badge-container .fs-badge.fs-premium-theme-badge{font-size:1.1em}.theme-browser .theme .fs-premium-theme-badge-container .fs-badge.fs-beta-theme-badge{background:#00a0d2}#fs_frame{line-height:0;font-size:0}.fs-full-size-wrapper{margin:40px 0 -65px -20px}@media (max-width: 600px){.fs-full-size-wrapper{margin:0 0 -65px -10px}}
2
.fs-notice{position:relative}.fs-notice.fs-has-title{margin-bottom:30px !important}.fs-notice.success{color:green}.fs-notice.promotion{border-color:#00a0d2 !important;background-color:#f2fcff !important}.fs-notice .fs-notice-body{margin:.5em 0;padding:2px}.fs-notice .fs-close{cursor:pointer;color:#aaa;float:right}.fs-notice .fs-close:hover{color:#666}.fs-notice .fs-close>*{margin-top:7px;display:inline-block}.fs-notice label.fs-plugin-title{background:rgba(0,0,0,0.3);color:#fff;padding:2px 10px;position:absolute;top:100%;bottom:auto;right:auto;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px;left:10px;font-size:12px;font-weight:bold;cursor:auto}div.fs-notice.updated,div.fs-notice.success,div.fs-notice.promotion{display:block !important}.rtl .fs-notice .fs-close{float:left}.fs-secure-notice{position:fixed;top:32px;left:160px;right:0;background:#ebfdeb;padding:10px 20px;color:green;z-index:9999;-moz-box-shadow:0 2px 2px rgba(6,113,6,0.3);-webkit-box-shadow:0 2px 2px rgba(6,113,6,0.3);box-shadow:0 2px 2px rgba(6,113,6,0.3);opacity:0.95;filter:alpha(opacity=95)}.fs-secure-notice:hover{opacity:1;filter:alpha(opacity=100)}.fs-secure-notice a.fs-security-proof{color:green;text-decoration:none}@media screen and (max-width: 960px){.fs-secure-notice{left:36px}}@media screen and (max-width: 600px){.fs-secure-notice{display:none}}@media screen and (max-width: 500px){#fs_promo_tab{display:none}}@media screen and (max-width: 782px){.fs-secure-notice{left:0;top:46px;text-align:center}}span.fs-submenu-item.fs-sub:before{content:'\21B3';padding:0 5px}.rtl span.fs-submenu-item.fs-sub:before{content:'\21B2'}.fs-submenu-item.pricing.upgrade-mode{color:greenyellow}.fs-submenu-item.pricing.trial-mode{color:#83e2ff}#adminmenu .update-plugins.fs-trial{background-color:#00b9eb}.fs-ajax-spinner{border:0;width:20px;height:20px;margin-right:5px;vertical-align:sub;display:inline-block;background:url("/wp-admin/images/wpspin_light-2x.gif");background-size:contain}.wrap.fs-section h2{text-align:left}.plugins p.fs-upgrade-notice{border:0;background-color:#d54e21;padding:10px;color:#f9f9f9;margin-top:10px}
freemius/assets/css/admin/connect.css CHANGED
@@ -1 +1 @@
1
- #fs_connect{width:480px;-moz-box-shadow:0px 1px 2px rgba(0,0,0,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}#fs_marketing_optin{display:none;margin-top:10px;border:1px solid #ccc;padding:10px;line-height:1.5em}#fs_marketing_optin .fs-message{display:block;margin-bottom:5px;font-size:1.05em;font-weight:600}#fs_marketing_optin.error{border:1px solid #d3135a;background:#fee}#fs_marketing_optin.error .fs-message{color:#d3135a}#fs_marketing_optin .fs-input-container{margin-top:5px}#fs_marketing_optin .fs-input-container label{margin-top:5px;display:block}#fs_marketing_optin .fs-input-container label input{float:left;margin:1px 0 0 0}#fs_marketing_optin .fs-input-container label:first-child{display:block;margin-bottom:2px}#fs_marketing_optin .fs-input-label{display:block;margin-left:20px}#fs_marketing_optin .fs-input-label .underlined{text-decoration:underline}.rtl #fs_marketing_optin .fs-input-container label input{float:right}.rtl #fs_marketing_optin .fs-input-label{margin-left:0;margin-right:20px}.rtl #fs_connect .fs-actions{padding:10px 20px;background:#C0C7CA}.rtl #fs_connect .fs-actions .button .dashicons{font-size:37px;margin-left:-8px;margin-right:12px}.rtl #fs_connect .fs-actions .button.button-primary:after{content:' \000bb'}.rtl #fs_connect .fs-actions .button.button-primary.fs-loading:after{content:''}.rtl #fs_connect .fs-actions .button.button-secondary{float:left}.rtl #fs_connect .fs-permissions ul li 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 .fs-sites-list-container td{cursor:pointer}#fs_connect #delegate_to_site_admins{margin-right:15px;float:right;height:26px;vertical-align:middle;line-height:37px;font-weight:bold;border-bottom:1px dashed;text-decoration:none}#fs_connect #delegate_to_site_admins.rtl{margin-left:15px;margin-right:0}#fs_connect .fs-actions{padding:10px 20px;background:#C0C7CA}#fs_connect .fs-actions .button{padding:0 10px 1px;line-height:35px;height:37px;font-size:16px;margin-bottom:0}#fs_connect .fs-actions .button .dashicons{font-size:37px;margin-left:-8px;margin-right:12px}#fs_connect .fs-actions .button.button-primary{padding-right:15px;padding-left:15px}#fs_connect .fs-actions .button.button-primary:after{content:' \279C'}#fs_connect .fs-actions .button.button-primary.fs-loading:after{content:''}#fs_connect .fs-actions .button.button-secondary{float:right}#fs_connect.fs-anonymous-disabled .fs-actions .button.button-primary{width:100%}#fs_connect .fs-permissions{padding:10px 20px;background:#FEFEFE;-moz-transition:background 0.5s ease;-o-transition:background 0.5s ease;-ms-transition:background 0.5s ease;-webkit-transition:background 0.5s ease;transition:background 0.5s ease}#fs_connect .fs-permissions .fs-license-sync-disclaimer{text-align:center;margin-top:0}#fs_connect .fs-permissions .fs-trigger{font-size:0.9em;text-decoration:none;text-align:center;display:block}#fs_connect .fs-permissions ul{height:0;overflow:hidden;margin:0}#fs_connect .fs-permissions ul li{margin-bottom:12px}#fs_connect .fs-permissions ul li:last-child{margin-bottom:0}#fs_connect .fs-permissions ul li i.dashicons{float:left;font-size:40px;width:40px;height:40px}#fs_connect .fs-permissions ul li 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}.fs-multisite-options-container{margin-top:10px;border:1px solid #ccc;padding:5px}.fs-multisite-options-container a{text-decoration:none}.fs-multisite-options-container a:focus{box-shadow:none}.fs-multisite-options-container a.selected{font-weight:bold}.fs-multisite-options-container.fs-apply-on-all-sites{border:0 none;padding:0}.fs-multisite-options-container.fs-apply-on-all-sites .fs-all-sites-options{border-spacing:0}.fs-multisite-options-container.fs-apply-on-all-sites .fs-all-sites-options td:not(:first-child){display:none}.fs-multisite-options-container .fs-sites-list-container{display:none;overflow:auto}.fs-multisite-options-container .fs-sites-list-container table td{border-top:1px solid #ccc;padding:4px 2px}.fs-tooltip-trigger{position:relative}.fs-tooltip-trigger:not(a){cursor:help}.fs-tooltip-trigger .fs-tooltip{opacity:0;visibility:hidden;-moz-transition:opacity 0.3s ease-in-out;-o-transition:opacity 0.3s ease-in-out;-ms-transition:opacity 0.3s ease-in-out;-webkit-transition:opacity 0.3s ease-in-out;transition:opacity 0.3s ease-in-out;position:absolute;background:rgba(0,0,0,0.8);color:#fff;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}#fs_marketing_optin{display:none;margin-top:10px;border:1px solid #ccc;padding:10px;line-height:1.5em}#fs_marketing_optin .fs-message{display:block;margin-bottom:5px;font-size:1.05em;font-weight:600}#fs_marketing_optin.error{border:1px solid #d3135a;background:#fee}#fs_marketing_optin.error .fs-message{color:#d3135a}#fs_marketing_optin .fs-input-container{margin-top:5px}#fs_marketing_optin .fs-input-container label{margin-top:5px;display:block}#fs_marketing_optin .fs-input-container label input{float:left;margin:1px 0 0 0}#fs_marketing_optin .fs-input-container label:first-child{display:block;margin-bottom:2px}#fs_marketing_optin .fs-input-label{display:block;margin-left:20px}#fs_marketing_optin .fs-input-label .underlined{text-decoration:underline}.rtl #fs_marketing_optin .fs-input-container label input{float:right}.rtl #fs_marketing_optin .fs-input-label{margin-left:0;margin-right:20px}.rtl #fs_connect .fs-actions{padding:10px 20px;background:#C0C7CA}.rtl #fs_connect .fs-actions .button .dashicons{font-size:37px;margin-left:-8px;margin-right:12px}.rtl #fs_connect .fs-actions .button.button-primary:after{content:' \000bb'}.rtl #fs_connect .fs-actions .button.button-primary.fs-loading:after{content:''}.rtl #fs_connect .fs-actions .button.button-secondary{float:left}.rtl #fs_connect .fs-permissions ul li 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-header .fs-close .dashicons,.fs-modal .fs-modal-header .fs-close:hover .dashicons{text-decoration:none}.fs-modal .fs-modal-body{border-bottom:0}.fs-modal .fs-modal-body p{font-size:14px}.fs-modal .fs-modal-body h2{font-size:20px;line-height:1.5em}.fs-modal .fs-modal-body>div{margin-top:10px}.fs-modal .fs-modal-body>div h2{font-weight:bold;font-size:20px;margin-top:0}.fs-modal .fs-modal-footer{border-top:#eeeeee solid 1px;text-align:right}.fs-modal .fs-modal-footer>.button{margin:0 7px}.fs-modal .fs-modal-footer>.button:first-child{margin:0}.fs-modal .fs-modal-panel>.notice.inline{margin:0;display:none}.fs-modal .fs-modal-panel:not(.active){display:none}.rtl .fs-modal .fs-modal-header .fs-close{right:auto;left:20px}body.has-fs-modal{overflow:hidden}.fs-modal.fs-modal-deactivation-feedback .reason-input,.fs-modal.fs-modal-deactivation-feedback .internal-message{margin:3px 0 3px 22px}.fs-modal.fs-modal-deactivation-feedback .reason-input input,.fs-modal.fs-modal-deactivation-feedback .reason-input textarea,.fs-modal.fs-modal-deactivation-feedback .internal-message input,.fs-modal.fs-modal-deactivation-feedback .internal-message textarea{width:100%}.fs-modal.fs-modal-deactivation-feedback li.reason.has-internal-message .internal-message{border:1px solid #ccc;padding:7px;display:none}@media (max-width: 650px){.fs-modal.fs-modal-deactivation-feedback li.reason li.reason{margin-bottom:10px}.fs-modal.fs-modal-deactivation-feedback li.reason li.reason .reason-input,.fs-modal.fs-modal-deactivation-feedback li.reason li.reason .internal-message{margin-left:29px}.fs-modal.fs-modal-deactivation-feedback li.reason li.reason label{display:table}.fs-modal.fs-modal-deactivation-feedback li.reason li.reason label>span{display:table-cell;font-size:1.3em}}.fs-modal.fs-modal-deactivation-feedback .anonymous-feedback-label{float:left}.fs-modal.fs-modal-deactivation-feedback .fs-modal-panel{margin-top:0 !important}.fs-modal.fs-modal-deactivation-feedback .fs-modal-panel h3{margin-top:0;line-height:1.5em}#the-list .deactivate>.fs-slug{display:none}.fs-modal.fs-modal-subscription-cancellation .fs-price-increase-warning{color:red;font-weight:bold;padding:0 25px;margin-bottom:0}.fs-modal.fs-modal-subscription-cancellation ul.subscription-actions label input{float:left;top:5px;position:relative}.rtl .fs-modal.fs-modal-subscription-cancellation ul.subscription-actions label input{float:right}.fs-modal.fs-modal-subscription-cancellation ul.subscription-actions label span{display:block;margin-left:24px}.rtl .fs-modal.fs-modal-subscription-cancellation ul.subscription-actions label span{margin-left:0;margin-right:24px}.fs-modal.fs-modal-license-activation .fs-modal-body input.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}.button-primary.warn{box-shadow:0 1px 0 #d2593c;text-shadow:0 -1px 1px #d2593c,1px 0 1px #d2593c,0 1px 1px #d2593c,-1px 0 1px #d2593c;background:#f56a48;border-color:#ec6544 #d2593c #d2593c}.button-primary.warn:hover{background:#fd6d4a;border-color:#d2593c}.button-primary.warn:focus{box-shadow:0 1px 0 #dd6041,0 0 2px 1px #e4a796}.button-primary.warn:active{background:#dd6041;border-color:#d2593c;box-shadow:inset 0 2px 0 #d2593c}.button-primary.warn.disabled{color:#f5b3a1 !important;background:#e76444 !important;border-color:#d85e40 !important;text-shadow:0 -1px 0 rgba(0,0,0,0.1) !important}
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-subscription-cancellation .fs-price-increase-warning{color:red;font-weight:bold;padding:0 25px;margin-bottom:0}.fs-modal.fs-modal-subscription-cancellation ul.subscription-actions label input{float:left;top:5px;position:relative}.rtl .fs-modal.fs-modal-subscription-cancellation ul.subscription-actions label input{float:right}.fs-modal.fs-modal-subscription-cancellation ul.subscription-actions label span{display:block;margin-left:24px}.rtl .fs-modal.fs-modal-subscription-cancellation ul.subscription-actions label span{margin-left:0;margin-right:24px}.fs-modal.fs-modal-license-activation .fs-modal-body input.fs-license-key{width:100%}.fs-license-options-container table,.fs-license-options-container table select,.fs-license-options-container table .fs-available-license-key{width:100%}.fs-license-options-container table td:first-child{width:1%}.fs-license-options-container table .fs-other-license-key-container label{position:relative;top:6px;float:left;margin-right:5px}.fs-license-options-container table .fs-other-license-key-container div{overflow:hidden;width:auto;height:30px;display:block;top:2px;position:relative}.fs-license-options-container table .fs-other-license-key-container div input{margin:0}.fs-sites-list-container td{cursor:pointer}.fs-multisite-options-container{margin-top:10px;border:1px solid #ccc;padding:5px}.fs-multisite-options-container a{text-decoration:none}.fs-multisite-options-container a:focus{box-shadow:none}.fs-multisite-options-container a.selected{font-weight:bold}.fs-multisite-options-container.fs-apply-on-all-sites{border:0 none;padding:0}.fs-multisite-options-container.fs-apply-on-all-sites .fs-all-sites-options{border-spacing:0}.fs-multisite-options-container.fs-apply-on-all-sites .fs-all-sites-options td:not(:first-child){display:none}.fs-multisite-options-container .fs-sites-list-container{display:none;overflow:auto}.fs-multisite-options-container .fs-sites-list-container table td{border-top:1px solid #ccc;padding:4px 2px}.fs-modal.fs-modal-license-key-resend .email-address-container{overflow:hidden;padding-right:2px}.fs-modal.fs-modal-license-key-resend.fs-freemium input.email-address{width:300px}.fs-modal.fs-modal-license-key-resend.fs-freemium label{display:block;margin-bottom:10px}.fs-modal.fs-modal-license-key-resend.fs-premium input.email-address{width:100%}.fs-modal.fs-modal-license-key-resend.fs-premium .button-container{float:right;margin-left:7px}@media (max-width: 650px){.fs-modal.fs-modal-license-key-resend.fs-premium .button-container{margin-top:2px}}
2
.rtl .fs-modal.fs-modal-license-key-resend .fs-modal-body .input-container>.email-address-container{padding-left:2px;padding-right:0}.rtl .fs-modal.fs-modal-license-key-resend .fs-modal-body .button-container{float:left;margin-right:7px;margin-left:0}a.show-license-resend-modal{margin-top:4px;display:inline-block}.fs-ajax-loader{position:relative;width:170px;height:20px;margin:auto}.fs-ajax-loader .fs-ajax-loader-bar{position:absolute;top:0;background-color:#0074a3;width:20px;height:20px;-webkit-animation-name:bounce_ajaxLoader;-moz-animation-name:bounce_ajaxLoader;-ms-animation-name:bounce_ajaxLoader;-o-animation-name:bounce_ajaxLoader;animation-name:bounce_ajaxLoader;-webkit-animation-duration:1.5s;-moz-animation-duration:1.5s;-ms-animation-duration:1.5s;-o-animation-duration:1.5s;animation-duration:1.5s;animation-iteration-count:infinite;-o-animation-iteration-count:infinite;-ms-animation-iteration-count:infinite;-webkit-animation-iteration-count:infinite;-moz-animation-iteration-count:infinite;-webkit-animation-direction:normal;-moz-animation-direction:normal;-ms-animation-direction:normal;-o-animation-direction:normal;animation-direction:normal;-moz-transform:0.3;-o-transform:0.3;-ms-transform:0.3;-webkit-transform:0.3;transform:0.3}.fs-ajax-loader .fs-ajax-loader-bar-1{left:0px;animation-delay:0.6s;-o-animation-delay:0.6s;-ms-animation-delay:0.6s;-webkit-animation-delay:0.6s;-moz-animation-delay:0.6s}.fs-ajax-loader .fs-ajax-loader-bar-2{left:19px;animation-delay:0.75s;-o-animation-delay:0.75s;-ms-animation-delay:0.75s;-webkit-animation-delay:0.75s;-moz-animation-delay:0.75s}.fs-ajax-loader .fs-ajax-loader-bar-3{left:38px;animation-delay:0.9s;-o-animation-delay:0.9s;-ms-animation-delay:0.9s;-webkit-animation-delay:0.9s;-moz-animation-delay:0.9s}.fs-ajax-loader .fs-ajax-loader-bar-4{left:57px;animation-delay:1.05s;-o-animation-delay:1.05s;-ms-animation-delay:1.05s;-webkit-animation-delay:1.05s;-moz-animation-delay:1.05s}.fs-ajax-loader .fs-ajax-loader-bar-5{left:76px;animation-delay:1.2s;-o-animation-delay:1.2s;-ms-animation-delay:1.2s;-webkit-animation-delay:1.2s;-moz-animation-delay:1.2s}.fs-ajax-loader .fs-ajax-loader-bar-6{left:95px;animation-delay:1.35s;-o-animation-delay:1.35s;-ms-animation-delay:1.35s;-webkit-animation-delay:1.35s;-moz-animation-delay:1.35s}.fs-ajax-loader .fs-ajax-loader-bar-7{left:114px;animation-delay:1.5s;-o-animation-delay:1.5s;-ms-animation-delay:1.5s;-webkit-animation-delay:1.5s;-moz-animation-delay:1.5s}.fs-ajax-loader .fs-ajax-loader-bar-8{left:133px;animation-delay:1.65s;-o-animation-delay:1.65s;-ms-animation-delay:1.65s;-webkit-animation-delay:1.65s;-moz-animation-delay:1.65s}@-moz-keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}@-ms-keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}@-o-keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}@-webkit-keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}@keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}.fs-modal-auto-install #request-filesystem-credentials-form h2,.fs-modal-auto-install #request-filesystem-credentials-form .request-filesystem-credentials-action-buttons{display:none}.fs-modal-auto-install #request-filesystem-credentials-form input[type=password],.fs-modal-auto-install #request-filesystem-credentials-form input[type=email],.fs-modal-auto-install #request-filesystem-credentials-form input[type=text]{-webkit-appearance:none;padding:10px 10px 5px 10px;width:300px;max-width:100%}.fs-modal-auto-install #request-filesystem-credentials-form>div,.fs-modal-auto-install #request-filesystem-credentials-form label,.fs-modal-auto-install #request-filesystem-credentials-form fieldset{width:300px;max-width:100%;margin:0 auto;display:block}.button-primary.warn{box-shadow:0 1px 0 #d2593c;text-shadow:0 -1px 1px #d2593c,1px 0 1px #d2593c,0 1px 1px #d2593c,-1px 0 1px #d2593c;background:#f56a48;border-color:#ec6544 #d2593c #d2593c}.button-primary.warn:hover{background:#fd6d4a;border-color:#d2593c}.button-primary.warn:focus{box-shadow:0 1px 0 #dd6041,0 0 2px 1px #e4a796}.button-primary.warn:active{background:#dd6041;border-color:#d2593c;box-shadow:inset 0 2px 0 #d2593c}.button-primary.warn.disabled{color:#f5b3a1 !important;background:#e76444 !important;border-color:#d85e40 !important;text-shadow:0 -1px 0 rgba(0,0,0,0.1) !important}
freemius/config.php CHANGED
@@ -204,7 +204,7 @@
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' );
@@ -351,8 +351,8 @@
351
*/
352
if ( ! defined( 'WP_FS__IS_NETWORK_ADMIN' ) ) {
353
define( 'WP_FS__IS_NETWORK_ADMIN',
354
- is_network_admin() ||
355
- ( is_multisite() &&
356
( ( defined( 'DOING_AJAX' ) && DOING_AJAX &&
357
( isset( $_REQUEST['_fs_network_admin'] ) /*||
358
( ! empty( $_REQUEST['action'] ) && 'delete-plugin' === $_REQUEST['action'] )*/ )
204
#--------------------------------------------------------------------------------
205
206
if ( ! defined( 'WP_FS__API_ADDRESS_LOCALHOST' ) ) {
207
+ define( 'WP_FS__API_ADDRESS_LOCALHOST', 'http://api.freemius-local.com:8080' );
208
}
209
if ( ! defined( 'WP_FS__API_SANDBOX_ADDRESS_LOCALHOST' ) ) {
210
define( 'WP_FS__API_SANDBOX_ADDRESS_LOCALHOST', 'http://sandbox-api.freemius:8080' );
351
*/
352
if ( ! defined( 'WP_FS__IS_NETWORK_ADMIN' ) ) {
353
define( 'WP_FS__IS_NETWORK_ADMIN',
354
+ is_multisite() &&
355
+ ( is_network_admin() ||
356
( ( defined( 'DOING_AJAX' ) && DOING_AJAX &&
357
( isset( $_REQUEST['_fs_network_admin'] ) /*||
358
( ! empty( $_REQUEST['action'] ) && 'delete-plugin' === $_REQUEST['action'] )*/ )
freemius/includes/class-freemius.php CHANGED
@@ -399,9 +399,11 @@
399
$this->_is_multisite_integrated &&
400
// Themes are always network activated, but the ACTUAL activation is per site.
401
$this->is_plugin() &&
402
- ( is_plugin_active_for_network( $this->_plugin_basename ) ||
403
- // Plugin network level activation or uninstall.
404
- is_plugin_inactive( $this->_plugin_basename ) )
405
);
406
407
$this->_storage->set_network_active(
@@ -409,6 +411,17 @@
409
$this->is_delegated_connection()
410
);
411
412
#region Migration
413
414
if ( is_multisite() ) {
@@ -493,6 +506,188 @@
493
$this->_version_updates_handler();
494
}
495
496
/**
497
* Checks whether this module has a settings menu.
498
*
@@ -1275,9 +1470,7 @@
1275
add_filter( 'site_transient_update_plugins', array( 'Freemius', '_remove_fs_updates_from_plugin_install_page' ), 10, 2 );
1276
} else if ( self::is_plugins_page() || self::is_updates_page() ) {
1277
/**
1278
- * On the "Plugins" and "Updates" admin pages, if there are premium or non–org-compliant
1279
- * plugins, modify their details dialog URLs (add a Freemius-specific param) so that the SDK can
1280
- * determine if the plugin information dialog should show information from Freemius.
1281
*
1282
* @author Leo Fajardo (@leorw)
1283
* @since 2.2.3
@@ -1408,6 +1601,7 @@
1408
1409
add_action( 'admin_init', array( &$this, '_add_license_activation' ) );
1410
add_action( 'admin_init', array( &$this, '_add_premium_version_upgrade_selection' ) );
1411
1412
$this->add_ajax_action( 'update_billing', array( &$this, '_update_billing_ajax_action' ) );
1413
$this->add_ajax_action( 'start_trial', array( &$this, '_start_trial_ajax_action' ) );
@@ -1467,7 +1661,7 @@
1467
static function _remove_fs_updates_from_plugin_install_page( $updates, $transient = null ) {
1468
if ( is_object( $updates ) && isset( $updates->response ) ) {
1469
foreach ( $updates->response as $file => $plugin ) {
1470
- if ( false !== strpos( $plugin->package, 'api.freemius' ) ) {
1471
unset( $updates->response[ $file ] );
1472
}
1473
}
@@ -1530,6 +1724,122 @@
1530
<?php
1531
}
1532
1533
/**
1534
* Keeping the uninstall hook registered for free or premium plugin version may result to a fatal error that
1535
* could happen when a user tries to uninstall either version while one of them is still active. Uninstalling a
@@ -1655,7 +1965,7 @@
1655
// Try to load the cached value of the file path.
1656
if ( isset( $this->_storage->plugin_main_file ) ) {
1657
$plugin_main_file = $this->_storage->plugin_main_file;
1658
- if ( isset( $plugin_main_file->path ) ) {
1659
$absolute_path = $this->get_absolute_path( $plugin_main_file->path );
1660
if ( file_exists( $absolute_path ) ) {
1661
return $absolute_path;
@@ -1676,7 +1986,7 @@
1676
if ( ! $is_init ) {
1677
// Fetch prev path cache.
1678
if ( isset( $this->_storage->plugin_main_file ) &&
1679
- isset( $this->_storage->plugin_main_file->prev_path )
1680
) {
1681
$absolute_path = $this->get_absolute_path( $this->_storage->plugin_main_file->prev_path );
1682
if ( file_exists( $absolute_path ) ) {
@@ -1780,7 +2090,7 @@
1780
$store_option = true;
1781
}
1782
1783
- if ( ! isset( $id_slug_type_path_map[ $module_id ]['path'] ) ||
1784
/**
1785
* This verification is for cases when suddenly the same module
1786
* is installed but with a different folder name.
@@ -1844,6 +2154,7 @@
1844
$caller_map = array();
1845
$module_type = WP_FS__MODULE_TYPE_PLUGIN;
1846
$themes_dir = fs_normalize_path( get_theme_root( get_stylesheet() ) );
1847
1848
for ( $i = 1, $bt = debug_backtrace(), $len = count( $bt ); $i < $len; $i ++ ) {
1849
if ( empty( $bt[ $i ]['file'] ) ) {
@@ -1869,12 +2180,46 @@
1869
'activate_plugin'
1870
) )
1871
) {
1872
// Ignore call stack hooks and files inclusion.
1873
continue;
1874
}
1875
1876
$caller_file_path = fs_normalize_path( $bt[ $i ]['file'] );
1877
1878
if ( 'functions.php' === basename( $caller_file_path ) ) {
1879
/**
1880
* 1. Assumes that theme's starting execution file is functions.php.
@@ -1934,50 +2279,84 @@
1934
*
1935
* @author Vova Feldman (@svovaf)
1936
* @author Leo Fajardo (@leorw)
1937
* @since 1.1.2
1938
*/
1939
function _add_deactivation_feedback_dialog_box() {
1940
- /* Check the type of user:
1941
- * 1. Long-term (long-term)
1942
- * 2. Non-registered and non-anonymous short-term (non-registered-and-non-anonymous-short-term).
1943
- * 3. Short-term (short-term)
1944
- */
1945
- $is_long_term_user = true;
1946
-
1947
- // Check if the site is at least 2 days old.
1948
- $time_installed = $this->_storage->install_timestamp;
1949
1950
- // Difference in seconds.
1951
- $date_diff = time() - $time_installed;
1952
1953
- // Convert seconds to days.
1954
- $date_diff_days = floor( $date_diff / ( 60 * 60 * 24 ) );
1955
1956
- if ( $date_diff_days < 2 ) {
1957
- $is_long_term_user = false;
1958
}
1959
1960
- $is_long_term_user = $this->apply_filters( 'is_long_term_user', $is_long_term_user );
1961
1962
- if ( $is_long_term_user ) {
1963
- $user_type = 'long-term';
1964
- } else {
1965
- if ( ! $this->is_registered() && ! $this->is_anonymous() ) {
1966
- $user_type = 'non-registered-and-non-anonymous-short-term';
1967
} else {
1968
- $user_type = 'short-term';
1969
}
1970
- }
1971
1972
- $uninstall_reasons = $this->_get_uninstall_reasons( $user_type );
1973
1974
- // Load the HTML template for the deactivation feedback dialog box.
1975
- $vars = array(
1976
- 'reasons' => $uninstall_reasons,
1977
- 'id' => $this->_module_id
1978
- );
1979
1980
/**
1981
* @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.
1982
*/
1983
fs_require_template( 'forms/deactivation/form.php', $vars );
@@ -2484,12 +2863,14 @@
2484
function is_site_activation_mode( $and_on = true ) {
2485
return (
2486
( $this->is_on() || ! $and_on ) &&
2487
- ( $this->is_premium() && true === $this->_storage->require_license_activation ) ||
2488
(
2489
- ( ! $this->is_registered() ||
2490
- ( $this->is_only_premium() && ! $this->has_features_enabled_license() ) ) &&
2491
- ( ! $this->is_enable_anonymous() ||
2492
- ( ! $this->is_anonymous() && ! $this->is_pending_activation() ) )
2493
)
2494
);
2495
}
@@ -2621,17 +3002,47 @@
2621
$active_basenames = get_option( 'active_plugins' );
2622
}
2623
2624
if ( is_multisite() ) {
2625
$network_active_basenames = get_site_option( 'active_sitewide_plugins' );
2626
2627
if ( is_array( $network_active_basenames ) && ! empty( $network_active_basenames ) ) {
2628
- $active_basenames = array_merge( $active_basenames, $network_active_basenames );
2629
}
2630
}
2631
2632
return $active_basenames;
2633
}
2634
2635
/**
2636
* Get collection of all active plugins. Including network activated plugins.
2637
*
@@ -2879,6 +3290,18 @@
2879
add_action( 'admin_footer', array( 'Freemius', '_enrich_ajax_url' ) );
2880
add_action( 'admin_footer', array( 'Freemius', '_open_support_forum_in_new_page' ) );
2881
2882
2883
self::$_statics_loaded = true;
2884
}
@@ -3475,7 +3898,10 @@
3475
$key = fs_strip_url_protocol( get_site_url( $blog_id ) );
3476
3477
$secure_auth = SECURE_AUTH_KEY;
3478
- if ( empty( $secure_auth ) || false !== strpos( $secure_auth, ' ' ) ) {
3479
// Protect against default auth key.
3480
$secure_auth = md5( microtime() );
3481
}
@@ -4372,9 +4798,31 @@
4372
4373
return;
4374
} else {
4375
- if ( $this->_parent->is_registered() && ! $this->is_registered() ) {
4376
// If parent plugin activated, automatically install add-on for the user.
4377
- $this->_activate_addon_account( $this->_parent );
4378
} else if ( ! $this->_parent->is_registered() && $this->is_registered() ) {
4379
// If add-on activated and parent not, automatically install parent for the user.
4380
$this->activate_parent_account( $this->_parent );
@@ -4480,14 +4928,18 @@
4480
private function should_use_freemius_updater_and_dialog() {
4481
return (
4482
/**
4483
- * Unless the `fs_allow_updater_and_dialog` URL param exists and its value is `true`, disallow updater
4484
- * and dialog on the "Add Plugins" admin page (/plugin-install.php) so that they won't interfere with
4485
- * the .org plugins' functionalities on that page (e.g. installation and viewing plugin details from
4486
- * .org).
4487
*/
4488
- ( ! self::is_plugin_install_page() || true === fs_request_get_bool( 'fs_allow_updater_and_dialog' ) ) &&
4489
- // Disallow updater and dialog when installing a plugin, otherwise .org "add-on" plugins will be affected.
4490
- ( 'install-plugin' !== fs_request_get( 'action' ) )
4491
);
4492
}
4493
@@ -4943,6 +5395,7 @@
4943
'premium_suffix' => $premium_suffix,
4944
'is_live' => $this->get_bool_option( $plugin_info, 'is_live', true ),
4945
'affiliate_moderation' => $this->get_option( $plugin_info, 'has_affiliation' ),
4946
) );
4947
4948
if ( $plugin->is_updated() ) {
@@ -4952,6 +5405,21 @@
4952
// Set the secret key after storing the plugin, we don't want to store the key in the storage.
4953
$this->_plugin->secret_key = $secret_key;
4954
4955
if ( ! isset( $plugin_info['menu'] ) ) {
4956
$plugin_info['menu'] = array();
4957
@@ -6066,7 +6534,7 @@
6066
}
6067
6068
if ( is_multisite() ) {
6069
- $this->switch_to_blog( $current_blog_id );
6070
6071
$this->do_action( "after_{$name}_cron_multisite" );
6072
}
@@ -6146,6 +6614,8 @@
6146
*/
6147
function _sync_cron_method( array $blog_ids, $current_blog_id = null ) {
6148
if ( $this->is_registered() ) {
6149
if ( $this->has_paid_plan() ) {
6150
// Initiate background plan sync.
6151
$this->_sync_license( true, false, $current_blog_id );
@@ -6486,10 +6956,10 @@
6486
* @author Leo Fajardo (@leorw)
6487
* @since 1.2.2
6488
*/
6489
- if ( $this->is_theme()
6490
- && ! $this->has_settings_menu()
6491
- && ! isset( $_REQUEST['fs_action'] )
6492
- && $this->can_activate_previous_theme()
6493
) {
6494
if ( $this->is_only_premium() ) {
6495
$this->activate_previous_theme();
@@ -6804,7 +7274,7 @@
6804
foreach ( $plans_ids_to_keep as $plan_id ) {
6805
$plan = self::_get_plan_by_id( $plan_id );
6806
if ( is_object( $plan ) ) {
6807
- $plans_to_keep[] = $plan;
6808
}
6809
}
6810
}
@@ -6973,44 +7443,48 @@
6973
// Clear API cache on activation.
6974
FS_Api::clear_cache();
6975
6976
- $is_premium_version_activation = ( current_filter() !== ( 'activate_' . $this->_free_plugin_basename ) );
6977
6978
$this->_logger->info( 'Activating ' . ( $is_premium_version_activation ? 'premium' : 'free' ) . ' plugin version.' );
6979
6980
- // 1. If running in the activation of the FREE module, get the basename of the PREMIUM.
6981
- // 2. If running in the activation of the PREMIUM module, get the basename of the FREE.
6982
- $other_version_basename = $is_premium_version_activation ?
6983
- $this->_free_plugin_basename :
6984
- $this->premium_plugin_basename();
6985
6986
- if ( ! $this->_is_network_active ) {
6987
/**
6988
- * During the activation, the plugin isn't yet active, therefore,
6989
- * _is_network_active will be set to false even if it's a network level
6990
- * activation. So we need to fix that by looking at the is_network_admin() value.
6991
*
6992
- * @author Vova Feldman
6993
*/
6994
- $this->_is_network_active = (
6995
- $this->_is_multisite_integrated &&
6996
- // Themes are always network activated, but the ACTUAL activation is per site.
6997
- $this->is_plugin() &&
6998
- fs_is_network_admin()
6999
- );
7000
- }
7001
-
7002
- /**
7003
- * If the other module version is activate, deactivate it.
7004
- *
7005
- * is_plugin_active() checks if the plugin active on the site or the network level
7006
- * and deactivate_plugins() deactivates the plugin whether its activated on the site
7007
- * or network level.
7008
- *
7009
- * @author Leo Fajardo (@leorw)
7010
- * @since 1.2.2
7011
- */
7012
- if ( is_plugin_active( $other_version_basename ) ) {
7013
- deactivate_plugins( $other_version_basename );
7014
}
7015
7016
if ( $this->is_registered() ) {
@@ -7060,14 +7534,41 @@
7060
}
7061
}
7062
7063
if (
7064
$is_premium_version_activation &&
7065
(
7066
( ! $this->is_registered() && $this->is_anonymous() ) ||
7067
(
7068
$this->is_registered() &&
7069
- ! $this->is_trial() &&
7070
- ! $this->has_features_enabled_license()
7071
)
7072
)
7073
) {
@@ -7109,6 +7610,194 @@
7109
$this->_storage->was_plugin_loaded = true;
7110
}
7111
7112
/**
7113
* Delete account.
7114
*
@@ -7166,6 +7855,7 @@
7166
7167
// Clear all storage data.
7168
$this->_storage->clear_all( true, array(
7169
'connectivity_test',
7170
'is_on',
7171
), false );
@@ -7521,7 +8211,7 @@
7521
get_current_blog_id() == $network_or_blog_id ||
7522
( true === $network_or_blog_id && fs_is_network_admin() )
7523
) {
7524
- unset( $this->_is_anonymous );
7525
}
7526
}
7527
@@ -7985,16 +8675,18 @@
7985
* @author Vova Feldman (@svovaf)
7986
* @since 1.1.2
7987
*
7988
- * @param string[] string $override
7989
- * @param bool $include_plugins Since 1.1.8 by default include plugin changes.
7990
- * @param bool $include_themes Since 1.1.8 by default include plugin changes.
7991
*
7992
* @return array
7993
*/
7994
private function get_install_data_for_api(
7995
array $override,
7996
$include_plugins = true,
7997
- $include_themes = true
7998
) {
7999
if ( ! defined( 'WP_FS__TRACK_PLUGINS' ) || false !== WP_FS__TRACK_PLUGINS ) {
8000
/**
@@ -8022,13 +8714,18 @@
8022
8023
$versions = $this->get_versions();
8024
8025
- return array_merge( $versions, array(
8026
'version' => $this->get_plugin_version(),
8027
'is_premium' => $this->is_premium(),
8028
- 'language' => get_bloginfo( 'language' ),
8029
- 'charset' => get_bloginfo( 'charset' ),
8030
- 'title' => get_bloginfo( 'name' ),
8031
- 'url' => get_site_url(),
8032
// Special params.
8033
'is_active' => true,
8034
'is_disconnected' => $this->is_tracking_prohibited(),
@@ -8796,6 +9493,18 @@
8796
return $this->_plugin->id;
8797
}
8798
8799
/**
8800
* @author Vova Feldman (@svovaf)
8801
* @since 1.2.1.5
@@ -9539,6 +10248,176 @@
9539
return false;
9540
}
9541
9542
/**
9543
* @author Vova Feldman (@svovaf)
9544
* @since 2.0.0
@@ -10017,7 +10896,7 @@
10017
* @return number[]
10018
*/
10019
private function get_plans_ids_associated_with_installs() {
10020
- if ( ! $this->_is_network_active ) {
10021
if ( ! is_object( $this->_site ) ||
10022
! FS_Plugin_Plan::is_valid_id( $this->_site->plan_id )
10023
) {
@@ -10152,24 +11031,11 @@
10152
$all_licenses = $this->get_user_licenses( $this->_user->id );
10153
}
10154
10155
- $foreign_licenses = array(
10156
- 'ids' => array(),
10157
- 'license_keys' => array()
10158
- );
10159
10160
$all_licenses_map = array();
10161
foreach ( $all_licenses as $license ) {
10162
$all_licenses_map[ $license->id ] = true;
10163
- if ( $license->user_id == $this->_user->id || $license->id == $site_license_id ) {
10164
- continue;
10165
- }
10166
-
10167
- $foreign_licenses['ids'][] = $license->id;
10168
- $foreign_licenses['license_keys'][] = $license->secret_key;
10169
- }
10170
-
10171
- if ( empty( $foreign_licenses['ids'] ) ) {
10172
- $foreign_licenses = array();
10173
}
10174
10175
$licenses = $this->_fetch_licenses( false, $site_license_id, $foreign_licenses, $blog_id );
@@ -10901,7 +11767,7 @@
10901
return true;
10902
}
10903
10904
- return ( 1 === count( $this->_plans ) );
10905
}
10906
10907
/**
@@ -11025,11 +11891,13 @@
11025
* @since 2.2.1
11026
*
11027
* @param bool $is_license_deactivation
11028
*/
11029
- function _maybe_add_subscription_cancellation_dialog_box( $is_license_deactivation = false ) {
11030
if ( fs_is_network_admin() ) {
11031
// Subscription cancellation dialog box is currently not supported for multisite networks.
11032
- return;
11033
}
11034
11035
$license = $this->_get_license();
@@ -11044,7 +11912,7 @@
11044
$license->is_lifetime() ||
11045
( ! $license->is_single_site() && $license->activated > 1 )
11046
) {
11047
- return;
11048
}
11049
11050
/**
@@ -11052,17 +11920,15 @@
11052
*/
11053
$subscription = $this->_get_subscription( $license->id );
11054
if ( ! is_object( $subscription ) || ! $subscription->is_active() ) {
11055
- return;
11056
}
11057
11058
- $vars = array(
11059
'id' => $this->_module_id,
11060
'license' => $license,
11061
'has_trial' => $this->is_paid_trial(),
11062
'is_license_deactivation' => $is_license_deactivation,
11063
);
11064
-
11065
- fs_require_template( 'forms/subscription-cancellation.php', $vars );
11066
}
11067
11068
/**
@@ -11127,10 +11993,17 @@
11127
11128
// Add license activation link and AJAX request handler.
11129
if ( self::is_plugins_page() ) {
11130
- /**
11131
- * @since 1.2.0 Add license action link only on plugins page.
11132
- */
11133
- $this->_add_license_action_link();
11134
}
11135
11136
// Add license activation AJAX callback.
@@ -11161,34 +12034,173 @@
11161
11162
/**
11163
* @author Leo Fajardo (@leorw)
11164
*
11165
* @since 1.1.9
11166
* @since 2.0.0 When a super-admin that hasn't connected before is network activating a license and excluding some of the sites for the license activation, go over the unselected sites in the network and if a site is not connected, skipped, nor delegated, if it's a freemium product then just skip the connection for the site, if it's a premium only product, delegate the connection and license activation to the site admin (Vova Feldman @svovaf).
11167
*/
11168
- function _activate_license_ajax_action() {
11169
$this->_logger->entrance();
11170
-
11171
- $this->check_ajax_referer( 'activate_license' );
11172
11173
- $license_key = trim( fs_request_get( 'license_key' ) );
11174
11175
- if ( empty( $license_key ) ) {
11176
- exit;
11177
}
11178
11179
- $plugin_id = fs_request_get( 'module_id', '', 'post' );
11180
- $fs = ( $plugin_id == $this->_module_id ) ?
11181
$this :
11182
$this->get_addon_instance( $plugin_id );
11183
11184
$error = false;
11185
$next_page = false;
11186
11187
- $sites = fs_is_network_admin() ?
11188
- fs_request_get( 'sites', array(), 'post' ) :
11189
- array();
11190
-
11191
- $blog_id = fs_request_get( 'blog_id' );
11192
$has_valid_blog_id = is_numeric( $blog_id );
11193
11194
if ( $fs->is_registered() ) {
@@ -11278,7 +12290,7 @@
11278
false,
11279
false,
11280
false,
11281
- fs_request_get_bool( 'is_marketing_allowed', null ),
11282
$sites
11283
);
11284
@@ -11332,7 +12344,7 @@
11332
}
11333
11334
if ( ! empty( $pending_sites ) ) {
11335
- if ( $this->is_freemium() ) {
11336
$this->skip_connection( $pending_sites );
11337
} else {
11338
$this->delegate_connection( $pending_sites );
@@ -11351,14 +12363,24 @@
11351
);
11352
11353
if ( false !== $error ) {
11354
- $result['error'] = $error;
11355
} else {
11356
$result['next_page'] = $next_page;
11357
}
11358
11359
- echo json_encode( $result );
11360
-
11361
- exit;
11362
}
11363
11364
/**
@@ -11393,8 +12415,12 @@
11393
$total_sites_to_delegate = count( $sites_by_action['delegate'] );
11394
11395
$next_page = '';
11396
if ( $total_sites === $total_sites_to_delegate &&
11397
- ! $this->is_network_upgrade_mode()
11398
) {
11399
$this->delegate_connection();
11400
} else {
@@ -11406,7 +12432,19 @@
11406
$this->skip_connection( $sites_by_action['skip'] );
11407
}
11408
11409
- if ( ! empty( $sites_by_action['allow'] ) ) {
11410
if ( ! $fs->is_registered() || ! $this->_is_network_active ) {
11411
$next_page = $fs->opt_in(
11412
false,
@@ -11993,11 +13031,11 @@
11993
$params['trial'] = 'true';
11994
}
11995
11996
- if ( $this->is_addon() ) {
11997
- return $this->_parent->addon_url( $this->_slug );
11998
- }
11999
12000
- return $this->_get_admin_page_url( 'pricing', $params );
12001
}
12002
12003
/**
@@ -12006,16 +13044,18 @@
12006
* @author Vova Feldman (@svovaf)
12007
* @since 1.0.6
12008
*
12009
- * @param string $billing_cycle Billing cycle
12010
- * @param bool $is_trial
12011
- * @param array $extra (optional) Extra parameters, override other query params.
12012
*
12013
* @return string
12014
*/
12015
function checkout_url(
12016
$billing_cycle = WP_FS__PERIOD_ANNUALLY,
12017
$is_trial = false,
12018
- $extra = array()
12019
) {
12020
$this->_logger->entrance();
12021
@@ -12033,7 +13073,7 @@
12033
*/
12034
$params = array_merge( $params, $extra );
12035
12036
- return $this->_get_admin_page_url( 'pricing', $params );
12037
}
12038
12039
/**
@@ -12042,10 +13082,11 @@
12042
* @author Vova Feldman (@svovaf)
12043
* @since 1.1.7
12044
*
12045
- * @param number $addon_id
12046
- * @param number $pricing_id
12047
- * @param string $billing_cycle
12048
- * @param bool $is_trial
12049
*
12050
* @return string
12051
*/
@@ -12053,12 +13094,13 @@
12053
$addon_id,
12054
$pricing_id,
12055
$billing_cycle = WP_FS__PERIOD_ANNUALLY,
12056
- $is_trial = false
12057
) {
12058
return $this->checkout_url( $billing_cycle, $is_trial, array(
12059
'plugin_id' => $addon_id,
12060
'pricing_id' => $pricing_id,
12061
- ) );
12062
}
12063
12064
#endregion
@@ -12598,6 +13640,10 @@
12598
* @return array Active & public sites collection.
12599
*/
12600
static function get_sites() {
12601
/**
12602
* For consistency with get_blog_list() which only return active public sites.
12603
*
@@ -12769,7 +13815,7 @@
12769
* 'blog_id' => string The associated blog ID.
12770
* }
12771
*/
12772
- private function find_first_install() {
12773
$sites = self::get_sites();
12774
12775
foreach ( $sites as $site ) {
@@ -13445,6 +14491,18 @@
13445
) );
13446
}
13447
13448
/* Logger
13449
------------------------------------------------------------------------------------------------------------------*/
13450
/**
@@ -13670,8 +14728,9 @@
13670
$this->get_install_by_blog_id();
13671
13672
if ( fs_is_network_admin() &&
13673
- ! is_object( $site ) &&
13674
- FS_Site::is_valid_id( $this->_storage->network_install_blog_id )
13675
) {
13676
$first_install = $this->find_first_install();
13677
@@ -13850,6 +14909,47 @@
13850
return $versions;
13851
}
13852
13853
/**
13854
* @author Vova Feldman (@svovaf)
13855
* @since 1.1.7.4
@@ -13895,18 +14995,7 @@
13895
13896
if ( true === $network_level_or_blog_id ) {
13897
if ( ! isset( $override_with['sites'] ) ) {
13898
- $params['sites'] = array();
13899
-
13900
- $sites = self::get_sites();
13901
-
13902
- foreach ( $sites as $site ) {
13903
- $blog_id = self::get_site_blog_id( $site );
13904
- if ( ! $this->is_site_delegated_connection( $blog_id ) &&
13905
- ! $this->is_installed_on_site( $blog_id )
13906
- ) {
13907
- $params['sites'][] = $this->get_site_info( $site );
13908
- }
13909
- }
13910
}
13911
} else {
13912
$site = is_numeric( $network_level_or_blog_id ) ?
@@ -14266,71 +15355,10 @@
14266
// If Freemius was OFF before, turn it on.
14267
$this->turn_on();
14268
14269
- if ( ! $this->_is_network_active || ! $is_network_level_opt_in ) {
14270
- $this->_set_account( $user, $first_install );
14271
-
14272
- $this->do_action( 'after_account_connection', $user, $first_install );
14273
- } else {
14274
- $this->_store_user();
14275
-
14276
- // Map site addresses to their blog IDs.
14277
- $address_to_blog_map = $this->get_address_to_blog_map();
14278
-
14279
- $first_blog_id = null;
14280
- $blog_2_install_map = array();
14281
- foreach ( $installs as $install ) {
14282
- $address = trailingslashit( fs_strip_url_protocol( $install->url ) );
14283
- $blog_id = $address_to_blog_map[ $address ];
14284
-
14285
- $this->_store_site( true, $blog_id, $install );
14286
-
14287
- if ( is_null( $first_blog_id ) ) {
14288
- $first_blog_id = $blog_id;
14289
- }
14290
-
14291
- $blog_2_install_map[ $blog_id ] = $install;
14292
- }
14293
-
14294
- if ( ! FS_User::is_valid_id( $this->_storage->network_user_id ) ||
14295
- ! is_object( self::_get_user_by_id( $this->_storage->network_user_id ) )
14296
- ) {
14297
- // Store network user.
14298
- $this->_storage->network_user_id = $this->_user->id;
14299
- }
14300
-
14301
- if ( ! FS_Site::is_valid_id( $this->_storage->network_install_blog_id ) ) {
14302
- $this->_storage->network_install_blog_id = $first_blog_id;
14303
- }
14304
-
14305
- if ( count( $installs ) === count( $address_to_blog_map ) ) {
14306
- // Super-admin opted-in for all sites in the network.
14307
- $this->_storage->is_network_connected = true;
14308
- }
14309
-
14310
- $this->_store_licenses( false );
14311
-
14312
- self::$_accounts->store();
14313
-
14314
- // Don't sync the installs data on network upgrade
14315
- if ( ! $this->network_upgrade_mode_completed() ) {
14316
- $this->send_installs_update();
14317
- }
14318
-
14319
- // Switch install context back to the first install.
14320
- $this->_site = $first_install;
14321
-
14322
- $current_blog = get_current_blog_id();
14323
-
14324
- foreach ( $blog_2_install_map as $blog_id => $install ) {
14325
- $this->switch_to_blog( $blog_id );
14326
-
14327
- $this->do_action( 'after_account_connection', $user, $install );
14328
- }
14329
-
14330
- $this->switch_to_blog( $current_blog );
14331
-
14332
- $this->do_action( 'after_network_account_connection', $user, $blog_2_install_map );
14333
- }
14334
14335
if ( is_numeric( $first_install->license_id ) ) {
14336
$this->_license = $this->_get_license_by_id( $first_install->license_id );
@@ -14975,27 +16003,63 @@
14975
* @author Vova Feldman (@svovaf)
14976
* @since 1.0.6
14977
*
14978
- * @param Freemius $parent_fs
14979
*/
14980
- private function _activate_addon_account( Freemius $parent_fs ) {
14981
if ( $this->is_registered() ) {
14982
// Already activated.
14983
return;
14984
}
14985
14986
// Activate add-on with parent plugin credentials.
14987
- $addon_install = $parent_fs->get_api_site_scope()->call(
14988
"/addons/{$this->_plugin->id}/installs.json",
14989
'post',
14990
- $this->get_install_data_for_api( array(
14991
- 'uid' => $this->get_anonymous_id(),
14992
- ), false, false )
14993
);
14994
14995
- if ( isset( $addon_install->error ) ) {
14996
$this->_admin_notices->add(
14997
sprintf( $this->get_text_inline( 'Couldn\'t activate %s.', 'could-not-activate-x' ), $this->get_plugin_name() ) . ' ' .
14998
- $this->get_text_inline( 'Please contact us with the following message:', 'contact-us-with-error-message' ) . ' ' . '<b>' . $addon_install->error->message . '</b>',
14999
$this->get_text_x_inline( 'Oops', 'exclamation', 'oops' ) . '...',
15000
'error'
15001
);
@@ -15003,27 +16067,131 @@
15003
return;
15004
}
15005
15006
// Get user information based on parent's plugin.
15007
$user = $parent_fs->get_user();
15008
15009
// First of all, set site and user info - otherwise we won't
15010
// be able to invoke API calls.
15011
- $this->_site = new FS_Site( $addon_install );
15012
$this->_user = $user;
15013
15014
// Sync add-on plans.
15015
$this->_sync_plans();
15016
15017
- // Get site's current plan.
15018
- //$this->_site->plan = $this->_get_plan_by_id( $this->_site->plan->id );
15019
15020
- $this->_set_account( $user, $this->_site );
15021
15022
- // Sync licenses.
15023
- $this->_sync_licenses();
15024
15025
- // Try to activate premium license.
15026
- $this->_activate_license( true );
15027
}
15028
15029
/**
@@ -15140,6 +16308,8 @@
15140
! $this->is_registered()
15141
);
15142
15143
if ( ( ! $this->has_api_connectivity() && ! $this->is_enable_anonymous() ) ||
15144
$should_hide_site_admin_settings
15145
) {
@@ -15346,12 +16516,18 @@
15346
}
15347
15348
if ( ! $this->_menu->has_menu() || $this->_menu->is_top_level() ) {
15349
- $this->_dynamically_added_top_level_page_hook_name = $this->_menu->add_page_and_update(
15350
- $this->get_plugin_name(),
15351
- $this->get_plugin_name(),
15352
- 'manage_options',
15353
- $this->_menu->has_menu() ? $this->_menu->get_slug() : $this->_slug
15354
- );
15355
} else {
15356
$this->_menu->add_subpage_and_update(
15357
$this->_menu->get_parent_slug(),
@@ -15437,6 +16613,44 @@
15437
);
15438
}
15439
15440
/**
15441
* Add default Freemius menu items.
15442
*
@@ -15449,28 +16663,7 @@
15449
15450
$is_activation_mode = $this->is_activation_mode();
15451
15452
- if ( $this->is_addon() ) {
15453
- // No submenu items for add-ons.
15454
- $add_submenu_items = false;
15455
- } else if ( $this->is_free_wp_org_theme() && ! fs_is_network_admin() ) {
15456
- // Also add submenu items when running in a free .org theme so the tabs will be visible.
15457
- $add_submenu_items = true;
15458
- } else if ( $is_activation_mode && ! $this->is_free_wp_org_theme() ) {
15459
- $add_submenu_items = false;
15460
- } else if ( fs_is_network_admin() ) {
15461
- /**
15462
- * Add submenu items to network level when plugin was network
15463
- * activated and the super-admin did NOT delegated the connection
15464
- * of all sites to site admins.
15465
- */
15466
- $add_submenu_items = (
15467
- $this->_is_network_active &&
15468
- ( WP_FS__SHOW_NETWORK_EVEN_WHEN_DELEGATED ||
15469
- ! $this->is_network_delegated_connection() )
15470
- );
15471
- } else {
15472
- $add_submenu_items = ( ! $this->_is_network_active || $this->is_delegated_connection() );
15473
- }
15474
15475
if ( $add_submenu_items ) {
15476
if ( $this->has_affiliate_program() ) {
@@ -16521,6 +17714,165 @@
16521
self::$_accounts->set_option( 'account_addons', $all_addons, $store );
16522
}
16523
16524
/**
16525
* Store account params in the Database.
16526
*
@@ -16615,7 +17967,9 @@
16615
$api = $this->get_api_site_scope();
16616
16617
if ( ! is_numeric( $license_id ) ) {
16618
- $license_id = $this->_license->id;
16619
}
16620
16621
$result = $api->get( "/licenses/{$license_id}/subscriptions.json", true );
@@ -16722,7 +18076,7 @@
16722
$plugin_id = $this->_plugin->id;
16723
}
16724
16725
- $user_licenses_endpoint = "/plugins/{$plugin_id}/licenses.json";
16726
if ( ! empty ( $foreign_licenses ) ) {
16727
$foreign_licenses = array(
16728
// Prefix with `+` to tell the server to include foreign licenses in the licenses collection.
@@ -16771,7 +18125,7 @@
16771
16772
if ( is_numeric( $site_license_id ) ) {
16773
// Try to retrieve a foreign license that is linked to the install.
16774
- $api_result = $api->call( '/licenses.json' );
16775
16776
if ( $this->is_api_result_object( $api_result, 'licenses' ) &&
16777
is_array( $api_result->licenses )
@@ -16784,7 +18138,17 @@
16784
} else {
16785
$api_errors[] = $api_result;
16786
}
16787
- } else if ( is_object( $this->_license ) ) {
16788
$is_license_in_result = false;
16789
if ( ! empty( $result ) ) {
16790
foreach ( $result as $license ) {
@@ -16798,7 +18162,7 @@
16798
if ( ! $is_license_in_result ) {
16799
// Fetch foreign license by ID and license key.
16800
$license = $api->get( "/licenses/{$this->_license->id}.json?license_key=" .
16801
- urlencode( $this->_license->secret_key ) );
16802
16803
if ( $this->is_api_result_entity( $license ) ) {
16804
$result[] = new FS_Plugin_License( $license );
@@ -16867,7 +18231,15 @@
16867
$plugin_id = $this->_plugin->id;
16868
}
16869
16870
- $result = $api->get( "/plugins/{$plugin_id}/payments.json?include_addons=true", $flush );
16871
16872
if ( ! isset( $result->error ) ) {
16873
for ( $i = 0, $len = count( $result->payments ); $i < $len; $i ++ ) {
@@ -16937,15 +18309,24 @@
16937
return false;
16938
}
16939
16940
// Check if version is actually newer.
16941
$has_new_version =
16942
// If it's an non-installed add-on then always return latest.
16943
( $this->_is_addon_id( $plugin_id ) && ! $this->is_addon_activated( $plugin_id ) ) ||
16944
// Compare versions.
16945
- version_compare( $this->get_plugin_version(), $latest_tag->version, '<' );
16946
16947
$this->_logger->departure( $has_new_version ? 'Found newer plugin version ' . $latest_tag->version : 'No new version' );
16948
16949
return $has_new_version ? $latest_tag : false;
16950
}
16951
@@ -17156,9 +18537,19 @@
17156
if ( $this->is_addon_activated( $addon_id ) ) {
17157
// If already installed, use add-on sync.
17158
$fs_addon = self::get_instance_by_id( $addon_id );
17159
- $fs_addon->_sync_license( $background );
17160
17161
- return;
17162
}
17163
17164
// Validate add-on exists.
@@ -17287,9 +18678,12 @@
17287
if ( ! self::$_global_admin_notices->has_sticky( 'api_blocked' ) ) {
17288
self::$_global_admin_notices->add(
17289
sprintf(
17290
- $this->get_text_x_inline( 'Your server is blocking the access to Freemius\' API, which is crucial for %1s synchronization. Please contact your host to whitelist %2s', '%1s - plugin title, %2s - API domain', 'server-blocking-access' ),
17291
$this->get_plugin_name(),
17292
- '<a href="' . $api->get_url() . '" target="_blank">' . $api->get_url() . '</a>'
17293
) . '<br> ' . $this->get_text_inline( 'Error received from the server:', 'server-error-message' ) . var_export( $result->error, true ),
17294
$this->get_text_x_inline( 'Oops', 'exclamation', 'oops' ) . '...',
17295
'error',
@@ -17452,7 +18846,7 @@
17452
$this->_store_licenses();
17453
17454
$plan_change = $is_free ?
17455
- 'upgraded' :
17456
( is_object( $new_license ) ?
17457
'changed' :
17458
'downgraded' );
@@ -17480,6 +18874,18 @@
17480
$this->_sync_site_subscription( $this->_license );
17481
}
17482
}
17483
}
17484
17485
$hmm_text = $this->get_text_x_inline( 'Hmm', 'something somebody says when they are thinking about what you have just said.', 'hmm' ) . '...';
@@ -17513,11 +18919,12 @@
17513
}
17514
break;
17515
case 'upgraded':
17516
$this->_admin_notices->add_sticky(
17517
- sprintf(
17518
- $this->get_text_inline( 'Your plan was successfully upgraded.', 'plan-upgraded-message' ),
17519
- '<i>' . $this->get_plugin_name() . '</i>'
17520
- ) . $this->get_complete_upgrade_instructions(),
17521
'plan_upgraded',
17522
$this->get_text_x_inline( 'Yee-haw', 'interjection expressing joy or exuberance', 'yee-haw' ) . '!'
17523
);
@@ -17632,22 +19039,24 @@
17632
*
17633
* @param bool $background
17634
*/
17635
- protected function _activate_license( $background = false ) {
17636
$this->_logger->entrance();
17637
17638
- $license_id = fs_request_get( 'license_id' );
17639
17640
- if ( is_object( $this->_site ) &&
17641
- FS_Plugin_License::is_valid_id( $license_id ) &&
17642
- $license_id == $this->_site->license_id
17643
- ) {
17644
- // License is already activated.
17645
- return;
17646
- }
17647
17648
- $premium_license = FS_Plugin_License::is_valid_id( $license_id ) ?
17649
- $this->_get_license_by_id( $license_id ) :
17650
- $this->_get_available_premium_license();
17651
17652
if ( ! is_object( $premium_license ) ) {
17653
return;
@@ -17696,7 +19105,7 @@
17696
}
17697
17698
$api = $this->get_api_site_scope();
17699
- $license = $api->call( "/licenses/{$premium_license->id}.json", 'put', $api_request_params );
17700
17701
if ( ! $this->is_api_result_entity( $license ) ) {
17702
if ( ! $background ) {
@@ -17730,6 +19139,18 @@
17730
17731
$this->_store_account();
17732
17733
if ( ! $background ) {
17734
$this->_admin_notices->add_sticky(
17735
$this->get_text_inline( 'Your license was successfully activated.', 'license-activated-message' ) .
@@ -18132,6 +19553,8 @@
18132
18133
if ( $this->has_secret_key() ) {
18134
$endpoint = add_query_arg( 'type', 'all', $endpoint );
18135
}
18136
18137
return $endpoint;
@@ -18288,9 +19711,16 @@
18288
function _get_invoice_api_url( $payment_id = false ) {
18289
$this->_logger->entrance();
18290
18291
- return $this->get_api_user_scope()->get_signed_url(
18292
"/payments/{$payment_id}/invoice.pdf"
18293
);
18294
}
18295
18296
/**
@@ -18336,7 +19766,7 @@
18336
$this->get_parent_instance() :
18337
$this;
18338
18339
- return $fs->get_account_url( 'download_latest', $params );
18340
}
18341
18342
#endregion Download Plugin ------------------------------------------------------------------
@@ -18425,7 +19855,9 @@
18425
if ( ! $flush && $api->is_cached( $path ) ) {
18426
$addons = self::get_all_addons();
18427
18428
- return $addons[ $this->_plugin->id ];
18429
}
18430
18431
$result = $api->get( $path, $flush );
@@ -18661,7 +20093,7 @@
18661
if ( ! isset( $result->error ) ) {
18662
$this->_admin_notices->add( sprintf(
18663
$this->get_text_inline( 'Verification mail was just sent to %s. If you can\'t find it after 5 min, please check your spam box.', 'verification-email-sent-message' ),
18664
- sprintf( '<a href="mailto:%1s">%2s</a>', esc_url( $this->_user->email ), $this->_user->email )
18665
) );
18666
} else {
18667
// handle different error cases.
@@ -18726,7 +20158,9 @@
18726
) {
18727
$first_time_path = '';
18728
} else {
18729
- $first_time_path = $this->_menu->get_first_time_path();
18730
}
18731
18732
if ( $this->_is_network_active &&
@@ -19371,7 +20805,8 @@
19371
$user->id,
19372
$user->public_key,
19373
! $this->is_live(),
19374
- $user->secret_key
19375
);
19376
}
19377
@@ -19399,7 +20834,8 @@
19399
$user->id,
19400
$user->public_key,
19401
! $this->is_live(),
19402
- $user->secret_key
19403
);
19404
19405
return $this->_user_api;
@@ -19424,7 +20860,8 @@
19424
$this->_site->id,
19425
$this->_site->public_key,
19426
! $this->is_live(),
19427
- $this->_site->secret_key
19428
);
19429
}
19430
@@ -19448,7 +20885,9 @@
19448
'plugin',
19449
$this->_plugin->id,
19450
$this->_plugin->public_key,
19451
- ! $this->is_live()
19452
);
19453
}
19454
@@ -19488,6 +20927,10 @@
19488
$plans = array( $plans );
19489
}
19490
19491
$this->_storage->has_trial_plan = FS_Plan_Manager::instance()->has_trial_plan( $plans );
19492
}
19493
@@ -19865,7 +21308,33 @@
19865
function _add_upgrade_action_link() {
19866
$this->_logger->entrance();
19867
19868
- if ( ! $this->is_paying() && $this->has_paid_plan() ) {
19869
$this->add_plugin_action_link(
19870
$this->get_text_inline( 'Upgrade', 'upgrade' ),
19871
$this->get_upgrade_url(),
@@ -19875,7 +21344,11 @@
19875
);
19876
}
19877
19878
- if ( $this->has_addons() ) {
19879
$this->add_plugin_action_link(
19880
$this->get_text_inline( 'Add-Ons', 'add-ons' ),
19881
$this->_get_admin_page_url( 'addons' ),
@@ -19926,7 +21399,7 @@
19926
}
19927
19928
/**
19929
- * Adds "Opt in" or "Opt out" link to the main "Plugins" page link actions collection.
19930
*
19931
* @author Leo Fajardo (@leorw)
19932
* @since 1.2.1.5
@@ -19938,13 +21411,19 @@
19938
19939
$this->_logger->entrance();
19940
19941
- /**
19942
- * If the activation has been delegated to site admins, no tracking-related actions for now.
19943
- *
19944
- * @author Leo Fajardo (@leorw)
19945
- */
19946
- if ( $this->_is_network_active && $this->is_network_delegated_connection() ) {
19947
- return;
19948
}
19949
19950
if ( fs_request_is_action_secure( $this->get_unique_affix() . '_reconnect' ) ) {
@@ -19962,14 +21441,16 @@
19962
return;
19963
}
19964
19965
- if ( ! $this->is_enable_anonymous() ) {
19966
- // Don't allow to opt-out if anonymous mode is disabled.
19967
- return;
19968
- }
19969
19970
- if ( ! $this->is_free_plan() ) {
19971
- // Don't allow to opt-out if running in paid plan.
19972
- return;
19973
}
19974
19975
if ( $this->add_ajax_action( 'stop_tracking', array( &$this, '_stop_tracking_callback' ) ) ) {
@@ -19980,7 +21461,8 @@
19980
return;
19981
}
19982
19983
- $url = '#';
19984
19985
if ( $this->is_registered() ) {
19986
if ( $this->is_tracking_allowed() ) {
@@ -19990,7 +21472,10 @@
19990
}
19991
19992
add_action( 'admin_footer', array( &$this, '_add_optout_dialog' ) );
19993
- } else {
19994
$link_text_id = $this->get_text_inline( 'Opt In', 'opt-in' );
19995
19996
$params = ! $this->is_anonymous() ?
@@ -20003,7 +21488,7 @@
20003
$url = $this->get_activation_url( $params );
20004
}
20005
20006
- if ( $this->is_plugin() && self::is_plugins_page() ) {
20007
$this->add_plugin_action_link(
20008
$link_text_id,
20009
$url,
@@ -20026,7 +21511,9 @@
20026
$url = false;
20027
20028
if ( ! $this->is_addon() || ! $this->has_free_plan() ) {
20029
- $first_time_path = $this->_menu->get_first_time_path();
20030
20031
if ( $this->is_activation_mode() ) {
20032
$url = $this->get_activation_url();
@@ -20214,8 +21701,8 @@
20214
$premium_plugin_basename = $this->premium_plugin_basename();
20215
20216
return sprintf(
20217
- /* translators: %1s: Product title; %2s: Plan title */
20218
- $this->get_text_inline( ' The paid version of %1s is already installed. Please activate it to start benefiting the %2s features. %3s', 'activate-premium-version' ),
20219
sprintf( '<em>%s</em>', esc_html( $this->get_plugin_title() ) ),
20220
$plan_title,
20221
sprintf(
@@ -20245,7 +21732,7 @@
20245
) ),
20246
$deactivation_step,
20247
$this->get_text_inline( 'Upload and activate the downloaded version', 'upload-and-activate' ),
20248
- '//bit.ly/upload-wp-' . $this->_module_type . 's',
20249
$this->get_text_inline( 'How to upload and activate?', 'howto-upload-activate' )
20250
);
20251
}
@@ -21228,7 +22715,9 @@
21228
'plugin',
21229
$user_plugin->id,
21230
$user_plugin->public_key,
21231
- ! $user_plugin->is_live
21232
);
21233
21234
$addons_result = $plugin_api->get( '/addons.json?enriched=true', true );
@@ -21318,7 +22807,7 @@
21318
'%s %s %s',
21319
$thank_you,
21320
$already_opted_in,
21321
- sprintf($this->get_text_inline( 'Due to the new %sEU General Data Protection Regulation (GDPR)%s compliance requirements it is required that you provide your explicit consent, again, confirming that you are onboard 🙂', 'due-to-gdpr-compliance-requirements' ), '<a href="https://eugdpr.org/" target="_blank" rel="noopener noreferrer">', '</a>') .
21322
'<br><br>' .
21323
'<b>' . $this->get_text_inline( "Please let us know if you'd like us to contact you for security & feature updates, educational content, and occasional offers:", 'contact-for-updates' ) . '</b>' .
21324
$actions .
399
$this->_is_multisite_integrated &&
400
// Themes are always network activated, but the ACTUAL activation is per site.
401
$this->is_plugin() &&
402
+ (
403
+ is_plugin_active_for_network( $this->_plugin_basename ) ||
404
+ // Plugin network level activation or uninstall.
405
+ ( fs_is_network_admin() && is_plugin_inactive( $this->_plugin_basename ) )
406
+ )
407
);
408
409
$this->_storage->set_network_active(
411
$this->is_delegated_connection()
412
);
413
414
+ if ( ! isset( $this->_storage->is_network_activated ) ) {
415
+ $this->_storage->is_network_activated = $this->_is_network_active;
416
+ }
417
+
418
+ if ( $this->_storage->is_network_activated != $this->_is_network_active ) {
419
+ // Update last activation level.
420
+ $this->_storage->is_network_activated = $this->_is_network_active;
421
+
422
+ $this->maybe_adjust_storage();
423
+ }
424
+
425
#region Migration
426
427
if ( is_multisite() ) {
506
$this->_version_updates_handler();
507
}
508
509
+ /**
510
+ * @author Leo Fajardo (@leorw)
511
+ * @since 2.3.0
512
+ */
513
+ private function maybe_adjust_storage() {
514
+ $install_timestamp = null;
515
+ $prev_is_premium = null;
516
+
517
+ $options_to_update = array();
518
+
519
+ $is_network_admin = fs_is_network_admin();
520
+
521
+ $network_install_timestamp = $this->_storage->get( 'install_timestamp', null, true );
522
+
523
+ if ( ! $is_network_admin ) {
524
+ if ( is_null( $network_install_timestamp ) ) {
525
+ // Plugin was not network-activated before.
526
+ return;
527
+ }
528
+
529
+ if ( is_null( $this->_storage->get( 'install_timestamp', null, false ) ) ) {
530
+ // Set the `install_timestamp` only if it's not yet set.
531
+ $install_timestamp = $network_install_timestamp;
532
+ }
533
+
534
+ $prev_is_premium = $this->_storage->get( 'prev_is_premium', null, true );
535
+ } else {
536
+ $current_wp_user = self::_get_current_wp_user();
537
+ $current_fs_user = self::_get_user_by_email( $current_wp_user->user_email );
538
+ $network_user_info = array();
539
+
540
+ $skips_count = 0;
541
+
542
+ $sites = self::get_sites();
543
+ $sites_count = count( $sites );
544
+
545
+ $blog_id_2_install_map = array();
546
+
547
+ $is_first_non_ignored_blog = true;
548
+
549
+ foreach ( $sites as $site ) {
550
+ $blog_id = self::get_site_blog_id( $site );
551
+
552
+ $blog_install_timestamp = $this->_storage->get( 'install_timestamp', null, $blog_id );
553
+
554
+ if ( is_null( $blog_install_timestamp ) ) {
555
+ // Plugin has not been installed on this blog.
556
+ continue;
557
+ }
558
+
559
+ $is_earlier_install = (
560
+ ! is_null( $install_timestamp ) &&
561
+ $blog_install_timestamp < $install_timestamp
562
+ );
563
+
564
+ $install = $this->get_install_by_blog_id( $blog_id );
565
+
566
+ $update_network_user_info = false;
567
+
568
+ if ( ! is_object( $install ) ) {
569
+ if ( ! $this->_storage->get( 'is_anonymous', false, $blog_id ) ) {
570
+ // The opt-in decision (whether to skip or opt in) is yet to be made.
571
+ continue;
572
+ }
573
+
574
+ $skips_count ++;
575
+ } else {
576
+ $blog_id_2_install_map[ $blog_id ] = $install;
577
+
578
+ if ( empty( $network_user_info ) ) {
579
+ // Set the network user info for the 1st time. Choose any user information whether or not it is for the current WP user.
580
+ $update_network_user_info = true;
581
+ }
582
+
583
+ if ( ! $update_network_user_info &&
584
+ is_object( $current_fs_user ) &&
585
+ $network_user_info['user_id'] != $current_fs_user->id &&
586
+ $install->user_id == $current_fs_user->id
587
+ ) {
588
+ // If an install that is owned by the current WP user is found, use its user information instead.
589
+ $update_network_user_info = true;
590
+ }
591
+
592
+ if ( ! $update_network_user_info &&
593
+ $is_earlier_install &&
594
+ ( ! is_object( $current_fs_user ) || $current_fs_user->id == $install->user_id )
595
+ ) {
596
+ // Update to the earliest install info if there's no install found so far that is owned by the current WP user; OR only if the found install is owned by the current WP user.
597
+ $update_network_user_info = true;
598
+ }
599
+ }
600
+
601
+ if ( $update_network_user_info ) {
602
+ $network_user_info = array(
603
+ 'user_id' => $install->user_id,
604
+ 'blog_id' => $blog_id
605
+ );
606
+ }
607
+
608
+ $site_prev_is_premium = $this->_storage->get( 'prev_is_premium', null, $blog_id );
609
+
610
+ if ( $is_first_non_ignored_blog ) {
611
+ $prev_is_premium = $site_prev_is_premium;
612
+
613
+ if ( is_null( $network_install_timestamp ) ) {
614
+ $install_timestamp = $blog_install_timestamp;
615
+ }
616
+
617
+ $is_first_non_ignored_blog = false;
618
+
619
+ continue;
620
+ }
621
+
622
+ if ( ! is_null( $prev_is_premium ) && $prev_is_premium !== $site_prev_is_premium ) {
623
+ // If a different `$site_prev_is_premium` value is found, do not include the option in the collection of options to update.
624
+ $prev_is_premium = null;
625
+ }
626
+
627
+ if ( $is_earlier_install ) {
628
+ // If an earlier install timestamp is found.
629
+ $install_timestamp = $blog_install_timestamp;
630
+ }
631
+ }
632
+
633
+ $installs_count = count( $blog_id_2_install_map );
634
+
635
+ if ( $sites_count === ( $installs_count + $skips_count ) ) {
636
+ if ( ! empty( $network_user_info ) ) {
637
+ $options_to_update['network_user_id'] = $network_user_info['user_id'];
638
+ $options_to_update['network_install_blog_id'] = $network_user_info['blog_id'];
639
+
640
+ foreach ( $blog_id_2_install_map as $blog_id => $install ) {
641
+ if ( $install->user_id == $network_user_info['user_id'] ) {
642
+ continue;
643
+ }
644
+
645
+ $this->_storage->store( 'is_delegated_connection', true, $blog_id );
646
+ }
647
+ }
648
+
649
+ if ( $sites_count === $skips_count ) {
650
+ /**
651
+ * Assume network-level skipping as the intended action if all actions identified were only
652
+ * skipping of the connection (i.e., no opt-ins and delegated connections so far).
653
+ */
654
+ $options_to_update['is_anonymous_ms'] = true;
655
+ } else if ( $sites_count === $installs_count ) {
656
+ /**
657
+ * Assume network-level opt-in as the intended action if all actions identified were only opt-ins
658
+ * (i.e., no delegation and skipping of the connections so far).
659
+ */
660
+ $options_to_update['is_network_connected'] = true;
661
+ }
662
+ }
663
+ }
664
+
665
+ if ( ! is_null( $install_timestamp ) ) {
666
+ $options_to_update['install_timestamp'] = $install_timestamp;
667
+ }
668
+
669
+ if ( ! is_null( $prev_is_premium ) ) {
670
+ $options_to_update['prev_is_premium'] = $prev_is_premium;
671
+ }
672
+
673
+ if ( ! empty( $options_to_update ) ) {
674
+ $this->adjust_storage( $options_to_update, $is_network_admin );
675
+ }
676
+ }
677
+
678
+ /**
679
+ * @author Leo Fajardo (@leorw)
680
+ * @since 2.3.0
681
+ *
682
+ * @param array $options
683
+ * @param bool $is_network_admin
684
+ */
685
+ private function adjust_storage( $options, $is_network_admin ) {
686
+ foreach ( $options as $name => $value ) {
687
+ $this->_storage->store( $name, $value, $is_network_admin ? true : null );
688
+ }
689
+ }
690
+
691
/**
692
* Checks whether this module has a settings menu.
693
*
1470
add_filter( 'site_transient_update_plugins', array( 'Freemius', '_remove_fs_updates_from_plugin_install_page' ), 10, 2 );
1471
} else if ( self::is_plugins_page() || self::is_updates_page() ) {
1472
/**
1473
+ * On the "Plugins" and "Updates" admin pages, if there are premium or non–org-compliant plugins, modify their details dialog URLs (add a Freemius-specific param) so that the SDK can determine if the plugin information dialog should show information from Freemius.
1474
*
1475
* @author Leo Fajardo (@leorw)
1476
* @since 2.2.3
1601
1602
add_action( 'admin_init', array( &$this, '_add_license_activation' ) );
1603
add_action( 'admin_init', array( &$this, '_add_premium_version_upgrade_selection' ) );
1604
+ add_action( 'admin_init', array( &$this, '_add_beta_mode_update_handler' ) );
1605
1606
$this->add_ajax_action( 'update_billing', array( &$this, '_update_billing_ajax_action' ) );
1607
$this->add_ajax_action( 'start_trial', array( &$this, '_start_trial_ajax_action' ) );
1661
static function _remove_fs_updates_from_plugin_install_page( $updates, $transient = null ) {
1662
if ( is_object( $updates ) && isset( $updates->response ) ) {
1663
foreach ( $updates->response as $file => $plugin ) {
1664
+ if ( isset( $plugin->package ) && false !== strpos( $plugin->package, 'api.freemius' ) ) {
1665
unset( $updates->response[ $file ] );
1666
}
1667
}
1724
<?php
1725
}
1726
1727
+ /**
1728
+ * @author Leo Fajardo (@leorw)
1729
+ * @since 2.3.0
1730
+ */
1731
+ static function _maybe_add_beta_label_styles() {
1732
+ $has_any_beta_version = false;
1733
+
1734
+ foreach ( self::$_instances as $instance ) {
1735
+ if ( $instance->is_beta() ) {
1736
+ $has_any_beta_version = true;
1737
+ break;
1738
+ }
1739
+ }
1740
+
1741
+ if ( $has_any_beta_version ) {
1742
+ fs_enqueue_local_style( 'fs_plugins', '/admin/plugins.css' );
1743
+ }
1744
+ }
1745
+
1746
+ /**
1747
+ * @author Leo Fajardo (@leorw)
1748
+ * @since 2.3.0
1749
+ */
1750
+ static function _maybe_add_beta_label_to_plugins_and_handle_confirmation() {
1751
+ $beta_data = array();
1752
+
1753
+ foreach ( self::$_instances as $instance ) {
1754
+ if ( ! $instance->is_premium() ) {
1755
+ continue;
1756
+ }
1757
+
1758
+ /**
1759
+ * If there's an available beta version update, a confirmation message will be shown when the
1760
+ * "Update now" link on the "Plugins" or "Themes" page is clicked.
1761
+ */
1762
+ $has_beta_update = $instance->has_beta_update();
1763
+
1764
+ $is_beta = (
1765
+ // The "Beta" label is added separately for themes.
1766
+ $instance->is_plugin() &&
1767
+ $instance->is_beta()
1768
+ );
1769
+
1770
+ if ( ! $is_beta && ! $has_beta_update ) {
1771
+ continue;
1772
+ }
1773
+
1774
+ $beta_data[ $instance->get_plugin_basename() ] = array( 'is_installed_version_beta' => $is_beta );
1775
+
1776
+ if ( ! $has_beta_update ) {
1777
+ continue;
1778
+ }
1779
+
1780
+ $beta_data[ $instance->get_plugin_basename() ]['beta_version_update_confirmation_message'] = sprintf(
1781
+ '%s %s',
1782
+ sprintf(
1783
+ fs_esc_attr_inline(
1784
+ 'An update to a Beta version will replace your installed version of %s with the latest Beta release - use with caution, and not on production sites. You have been warned.',
1785
+ 'beta-version-update-caution',
1786
+ $instance->get_slug()
1787
+ ),
1788
+ $instance->get_plugin_title()
1789
+ ),
1790
+ fs_esc_attr_inline( 'Would you like to proceed with the update?', 'update-confirmation', $instance->get_slug() )
1791
+ );
1792
+ }
1793
+
1794
+ if ( empty( $beta_data ) ) {
1795
+ return;
1796
+ }
1797
+ ?>
1798
+ <script type="text/javascript">
1799
+ ( function( $ ) {
1800
+ var betaData = <?php echo json_encode( $beta_data ) ?>;
1801
+
1802
+ for ( var pluginBasename in betaData ) {
1803
+ if ( ! betaData.hasOwnProperty( pluginBasename ) ) {
1804
+ continue;
1805
+ }
1806
+
1807
+ if ( ! betaData[ pluginBasename ].is_installed_version_beta ) {
1808
+ continue;
1809
+ }
1810
+
1811
+ var $parentContainer = $( '.wp-list-table.plugins tr[data-plugin="' + pluginBasename + '"]' );
1812
+ if ( 0 === $parentContainer.length ) {
1813
+ continue;
1814
+ }
1815
+
1816
+ $parentContainer.find( '.plugin-title > strong:first-child').append(
1817
+ '<span class="fs-tag fs-info"><?php fs_esc_js_echo_inline( 'Beta', 'beta' ) ?></span>'
1818
+ );
1819
+ }
1820
+
1821
+ setTimeout( function() {
1822
+ // Wait a little bit before adding the event handler, otherwise, it will be overridden by the core WP logic.
1823
+ $( '.plugins .update-message .update-link, .themes .theme .update-message' ).on( 'click', function() {
1824
+ var $parentContainer = $( this ).parents( 'tr:first' );
1825
+ pluginBasename = ( 0 !== $parentContainer.length ) ?
1826
+ $parentContainer.data( 'plugin' ) :
1827
+ $( this ).parents( '.theme:first' ).data( 'slug' );
1828
+
1829
+ if (
1830
+ betaData[ pluginBasename ] &&
1831
+ betaData[ pluginBasename ].beta_version_update_confirmation_message &&
1832
+ ! confirm( betaData[ pluginBasename ].beta_version_update_confirmation_message )
1833
+ ) {
1834
+ return false;
1835
+ }
1836
+ } );
1837
+ }, 20 );
1838
+ } )( jQuery );
1839
+ </script>
1840
+ <?php
1841
+ }
1842
+
1843
/**
1844
* Keeping the uninstall hook registered for free or premium plugin version may result to a fatal error that
1845
* could happen when a user tries to uninstall either version while one of them is still active. Uninstalling a
1965
// Try to load the cached value of the file path.
1966
if ( isset( $this->_storage->plugin_main_file ) ) {
1967
$plugin_main_file = $this->_storage->plugin_main_file;
1968
+ if ( ! empty( $plugin_main_file->path ) ) {
1969
$absolute_path = $this->get_absolute_path( $plugin_main_file->path );
1970
if ( file_exists( $absolute_path ) ) {
1971
return $absolute_path;
1986
if ( ! $is_init ) {
1987
// Fetch prev path cache.
1988
if ( isset( $this->_storage->plugin_main_file ) &&
1989
+ ! empty( $this->_storage->plugin_main_file->prev_path )
1990
) {
1991
$absolute_path = $this->get_absolute_path( $this->_storage->plugin_main_file->prev_path );
1992
if ( file_exists( $absolute_path ) ) {
2090
$store_option = true;
2091
}
2092
2093
+ if ( empty( $id_slug_type_path_map[ $module_id ]['path'] ) ||
2094
/**
2095
* This verification is for cases when suddenly the same module
2096
* is installed but with a different folder name.
2154
$caller_map = array();
2155
$module_type = WP_FS__MODULE_TYPE_PLUGIN;
2156
$themes_dir = fs_normalize_path( get_theme_root( get_stylesheet() ) );
2157
+ $plugin_dir_to_skip = false;
2158
2159
for ( $i = 1, $bt = debug_backtrace(), $len = count( $bt ); $i < $len; $i ++ ) {
2160
if ( empty( $bt[ $i ]['file'] ) ) {
2180
'activate_plugin'
2181
) )
2182
) {
2183
+ if ( 'activate_plugin' === $bt[ $i ]['function'] ) {
2184
+ /**
2185
+ * Store the directory of the activator plugin so that any other file that starts with it
2186
+ * cannot be mistakenly chosen as a candidate caller file.
2187
+ *
2188
+ * @author Leo Fajardo
2189
+ *
2190
+ * @since 2.3.0
2191
+ */
2192
+ $caller_file_path = fs_normalize_path( $bt[ $i ]['file'] );
2193
+
2194
+ foreach ( $all_plugins_paths as $plugin_path ) {
2195
+ $plugin_dir = fs_normalize_path( dirname( $plugin_path ) . '/' );
2196
+ if ( false !== strpos( $caller_file_path, $plugin_dir ) ) {
2197
+ $plugin_dir_to_skip = $plugin_dir;
2198
+
2199
+ break;
2200
+ }
2201
+ }
2202
+ }
2203
+
2204
// Ignore call stack hooks and files inclusion.
2205
continue;
2206
}
2207
2208
$caller_file_path = fs_normalize_path( $bt[ $i ]['file'] );
2209
2210
+ if ( ! empty( $plugin_dir_to_skip ) ) {
2211
+ /**
2212
+ * Skip if it's an activator plugin file to avoid mistakenly choosing it as a candidate caller file.
2213
+ *
2214
+ * @author Leo Fajardo
2215
+ *
2216
+ * @since 2.3.0
2217
+ */
2218
+ if ( 0 === strpos( $caller_file_path, $plugin_dir_to_skip ) ) {
2219
+ continue;
2220
+ }
2221
+ }
2222
+
2223
if ( 'functions.php' === basename( $caller_file_path ) ) {
2224
/**
2225
* 1. Assumes that theme's starting execution file is functions.php.
2279
*
2280
* @author Vova Feldman (@svovaf)
2281
* @author Leo Fajardo (@leorw)
2282
+ *
2283
* @since 1.1.2
2284
*/
2285
function _add_deactivation_feedback_dialog_box() {
2286
+ $subscription_cancellation_dialog_box_template_params = $this->apply_filters( 'show_deactivation_subscription_cancellation', true ) ?
2287
+ $this->_get_subscription_cancellation_dialog_box_template_params() :
2288
+ array();
2289
2290
+ /**
2291
+ * @since 2.3.0 Developers can optionally hide the deactivation feedback form using the 'show_deactivation_feedback_form' filter.
2292
+ */
2293
+ $show_deactivation_feedback_form = true;
2294
+ if ( $this->has_filter( 'show_deactivation_feedback_form' ) ) {
2295
+ $show_deactivation_feedback_form = $this->apply_filters( 'show_deactivation_feedback_form', true );
2296
+ } else if ( $this->is_addon() ) {
2297
+ /**
2298
+ * If the add-on's 'show_deactivation_feedback_form' is not set, try to inherit the value from the parent.
2299
+ */
2300
+ $show_deactivation_feedback_form = $this->get_parent_instance()->apply_filters( 'show_deactivation_feedback_form', true );
2301
+ }
2302
2303 <