User Menus – Nav Menu Visibility - Version 1.2.6

Version Description

Download this release

Release Info

Developer danieliser
Plugin Icon 128x128 User Menus – Nav Menu Visibility
Version 1.2.6
Comparing to
See all releases

Code changes from version 1.2.5 to 1.2.6

Files changed (185) hide show
  1. assets/css/admin-general.css +0 -0
  2. assets/css/admin-general.css.map +0 -0
  3. assets/css/admin-general.min.css +0 -0
  4. assets/js/admin-general.js +4 -3
  5. assets/js/admin-general.min.js +1 -1
  6. assets/sass/admin-general.scss +0 -0
  7. freemius/LICENSE.txt +0 -0
  8. freemius/README.md +0 -0
  9. freemius/assets/css/admin/account.css +0 -0
  10. freemius/assets/css/admin/add-ons.css +0 -0
  11. freemius/assets/css/admin/affiliation.css +0 -0
  12. freemius/assets/css/admin/checkout.css +0 -0
  13. freemius/assets/css/admin/common.css +1 -1
  14. freemius/assets/css/admin/connect.css +1 -1
  15. freemius/assets/css/admin/debug.css +0 -0
  16. freemius/assets/css/admin/dialog-boxes.css +0 -0
  17. freemius/assets/css/admin/gdpr-optin-notice.css +0 -0
  18. freemius/assets/css/admin/index.php +0 -0
  19. freemius/assets/css/admin/plugins.css +0 -0
  20. freemius/assets/css/customizer.css +0 -0
  21. freemius/assets/css/index.php +0 -0
  22. freemius/assets/img/index.php +0 -0
  23. freemius/assets/img/plugin-icon.png +0 -0
  24. freemius/assets/img/theme-icon.png +0 -0
  25. freemius/assets/img/user-menus.png +0 -0
  26. freemius/assets/index.php +0 -0
  27. freemius/assets/js/index.php +0 -0
  28. freemius/assets/js/nojquery.ba-postmessage.js +0 -0
  29. freemius/assets/js/nojquery.ba-postmessage.min.js +0 -0
  30. freemius/assets/js/postmessage.js +0 -0
  31. freemius/config.php +0 -0
  32. freemius/includes/class-freemius-abstract.php +0 -0
  33. freemius/includes/class-freemius.php +79 -41
  34. freemius/includes/class-fs-admin-notices.php +0 -0
  35. freemius/includes/class-fs-api.php +0 -0
  36. freemius/includes/class-fs-logger.php +2 -2
  37. freemius/includes/class-fs-options.php +0 -0
  38. freemius/includes/class-fs-plugin-updater.php +0 -0
  39. freemius/includes/class-fs-security.php +0 -0
  40. freemius/includes/class-fs-storage.php +0 -0
  41. freemius/includes/class-fs-user-lock.php +0 -0
  42. freemius/includes/customizer/class-fs-customizer-support-section.php +0 -0
  43. freemius/includes/customizer/class-fs-customizer-upsell-control.php +0 -0
  44. freemius/includes/customizer/index.php +0 -0
  45. freemius/includes/debug/class-fs-debug-bar-panel.php +0 -0
  46. freemius/includes/debug/debug-bar-start.php +0 -0
  47. freemius/includes/debug/index.php +0 -0
  48. freemius/includes/entities/class-fs-affiliate-terms.php +0 -0
  49. freemius/includes/entities/class-fs-affiliate.php +0 -0
  50. freemius/includes/entities/class-fs-billing.php +0 -0
  51. freemius/includes/entities/class-fs-entity.php +0 -0
  52. freemius/includes/entities/class-fs-payment.php +0 -0
  53. freemius/includes/entities/class-fs-plugin-info.php +0 -0
  54. freemius/includes/entities/class-fs-plugin-license.php +0 -0
  55. freemius/includes/entities/class-fs-plugin-plan.php +0 -0
  56. freemius/includes/entities/class-fs-plugin-tag.php +0 -0
  57. freemius/includes/entities/class-fs-plugin.php +0 -0
  58. freemius/includes/entities/class-fs-pricing.php +0 -0
  59. freemius/includes/entities/class-fs-scope-entity.php +0 -0
  60. freemius/includes/entities/class-fs-site.php +17 -0
  61. freemius/includes/entities/class-fs-subscription.php +0 -0
  62. freemius/includes/entities/class-fs-user.php +0 -17
  63. freemius/includes/entities/index.php +0 -0
  64. freemius/includes/fs-core-functions.php +0 -0
  65. freemius/includes/fs-essential-functions.php +0 -0
  66. freemius/includes/fs-plugin-info-dialog.php +0 -0
  67. freemius/includes/i18n.php +0 -0
  68. freemius/includes/index.php +0 -0
  69. freemius/includes/l10n.php +0 -0
  70. freemius/includes/managers/class-fs-admin-menu-manager.php +0 -0
  71. freemius/includes/managers/class-fs-admin-notice-manager.php +0 -0
  72. freemius/includes/managers/class-fs-cache-manager.php +0 -0
  73. freemius/includes/managers/class-fs-gdpr-manager.php +0 -0
  74. freemius/includes/managers/class-fs-key-value-storage.php +0 -0
  75. freemius/includes/managers/class-fs-license-manager.php +0 -0
  76. freemius/includes/managers/class-fs-option-manager.php +0 -0
  77. freemius/includes/managers/class-fs-plan-manager.php +0 -0
  78. freemius/includes/managers/class-fs-plugin-manager.php +0 -0
  79. freemius/includes/managers/index.php +0 -0
  80. freemius/includes/sdk/Exceptions/ArgumentNotExistException.php +0 -0
  81. freemius/includes/sdk/Exceptions/EmptyArgumentException.php +0 -0
  82. freemius/includes/sdk/Exceptions/Exception.php +0 -0
  83. freemius/includes/sdk/Exceptions/InvalidArgumentException.php +0 -0
  84. freemius/includes/sdk/Exceptions/OAuthException.php +0 -0
  85. freemius/includes/sdk/Exceptions/index.php +0 -0
  86. freemius/includes/sdk/FreemiusBase.php +0 -0
  87. freemius/includes/sdk/FreemiusWordPress.php +0 -0
  88. freemius/includes/sdk/LICENSE.txt +0 -0
  89. freemius/includes/sdk/index.php +0 -0
  90. freemius/includes/supplements/fs-essential-functions-1.1.7.1.php +0 -0
  91. freemius/includes/supplements/fs-essential-functions-2.2.1.php +0 -0
  92. freemius/includes/supplements/index.php +0 -0
  93. freemius/index.php +0 -0
  94. freemius/languages/freemius-cs_CZ.mo +0 -0
  95. freemius/languages/freemius-da_DK.mo +0 -0
  96. freemius/languages/freemius-en.mo +0 -0
  97. freemius/languages/freemius-es_ES.mo +0 -0
  98. freemius/languages/freemius-fr_FR.mo +0 -0
  99. freemius/languages/freemius-he_IL.mo +0 -0
  100. freemius/languages/freemius-hu_HU.mo +0 -0
  101. freemius/languages/freemius-it_IT.mo +0 -0
  102. freemius/languages/freemius-ja.mo +0 -0
  103. freemius/languages/freemius-nl_NL.mo +0 -0
  104. freemius/languages/freemius-ru_RU.mo +0 -0
  105. freemius/languages/freemius-ta.mo +0 -0
  106. freemius/languages/freemius-zh_CN.mo +0 -0
  107. freemius/languages/freemius.pot +345 -313
  108. freemius/languages/index.php +0 -0
  109. freemius/package.json +1 -1
  110. freemius/require.php +0 -0
  111. freemius/start.php +3 -3
  112. freemius/templates/account.php +5 -3
  113. freemius/templates/account/billing.php +0 -0
  114. freemius/templates/account/index.php +0 -0
  115. freemius/templates/account/partials/activate-license-button.php +0 -0
  116. freemius/templates/account/partials/addon.php +0 -0
  117. freemius/templates/account/partials/deactivate-license-button.php +0 -0
  118. freemius/templates/account/partials/index.php +0 -0
  119. freemius/templates/account/partials/site.php +0 -0
  120. freemius/templates/account/payments.php +0 -0
  121. freemius/templates/add-ons.php +0 -0
  122. freemius/templates/add-trial-to-pricing.php +0 -0
  123. freemius/templates/admin-notice.php +0 -0
  124. freemius/templates/ajax-loader.php +0 -0
  125. freemius/templates/auto-installation.php +0 -0
  126. freemius/templates/checkout.php +0 -0
  127. freemius/templates/connect.php +49 -37
  128. freemius/templates/contact.php +0 -0
  129. freemius/templates/debug.php +0 -0
  130. freemius/templates/debug/api-calls.php +0 -0
  131. freemius/templates/debug/index.php +0 -0
  132. freemius/templates/debug/logger.php +0 -0
  133. freemius/templates/debug/plugins-themes-sync.php +0 -0
  134. freemius/templates/debug/scheduled-crons.php +0 -0
  135. freemius/templates/email.php +0 -0
  136. freemius/templates/firewall-issues-js.php +0 -0
  137. freemius/templates/forms/affiliation.php +0 -0
  138. freemius/templates/forms/data-debug-mode.php +0 -0
  139. freemius/templates/forms/deactivation/contact.php +0 -0
  140. freemius/templates/forms/deactivation/form.php +0 -0
  141. freemius/templates/forms/deactivation/index.php +0 -0
  142. freemius/templates/forms/deactivation/retry-skip.php +0 -0
  143. freemius/templates/forms/index.php +0 -0
  144. freemius/templates/forms/license-activation.php +3 -1
  145. freemius/templates/forms/optout.php +0 -0
  146. freemius/templates/forms/premium-versions-upgrade-handler.php +0 -0
  147. freemius/templates/forms/premium-versions-upgrade-metadata.php +0 -0
  148. freemius/templates/forms/resend-key.php +0 -0
  149. freemius/templates/forms/subscription-cancellation.php +0 -0
  150. freemius/templates/forms/trial-start.php +0 -0
  151. freemius/templates/forms/user-change.php +0 -0
  152. freemius/templates/gdpr-optin-js.php +0 -0
  153. freemius/templates/index.php +0 -0
  154. freemius/templates/js/index.php +0 -0
  155. freemius/templates/js/jquery.content-change.php +0 -0
  156. freemius/templates/js/open-license-activation.php +0 -0
  157. freemius/templates/js/style-premium-theme.php +0 -0
  158. freemius/templates/partials/index.php +0 -0
  159. freemius/templates/partials/network-activation.php +0 -0
  160. freemius/templates/plugin-icon.php +0 -0
  161. freemius/templates/plugin-info/description.php +0 -0
  162. freemius/templates/plugin-info/features.php +0 -0
  163. freemius/templates/plugin-info/index.php +0 -0
  164. freemius/templates/plugin-info/screenshots.php +0 -0
  165. freemius/templates/powered-by.php +0 -0
  166. freemius/templates/pricing.php +0 -0
  167. freemius/templates/secure-https-header.php +0 -0
  168. freemius/templates/sticky-admin-notice-js.php +0 -0
  169. freemius/templates/tabs-capture-js.php +0 -0
  170. freemius/templates/tabs.php +0 -0
  171. includes/classes/admin/menu-editor.php +66 -44
  172. includes/classes/admin/menu-importer.php +7 -6
  173. includes/classes/admin/menu-settings.php +65 -56
  174. includes/classes/admin/reviews.php +73 -64
  175. includes/classes/importer/menu.php +45 -31
  176. includes/classes/menu/item.php +16 -8
  177. includes/classes/menu/items.php +29 -30
  178. includes/classes/site/menus.php +17 -17
  179. includes/classes/user/codes.php +9 -2
  180. includes/classes/walker/nav-menu-edit-custom-fields-deprecated.php +9 -5
  181. includes/classes/walker/nav-menu-edit-custom-fields.php +10 -8
  182. languages/user-menus.pot +59 -45
  183. readme.md +13 -1
  184. readme.txt +21 -4
  185. user-menus.php +81 -45
assets/css/admin-general.css CHANGED
File without changes
assets/css/admin-general.css.map CHANGED
File without changes
assets/css/admin-general.min.css CHANGED
File without changes
assets/js/admin-general.js CHANGED
@@ -108,13 +108,14 @@
108
  .on('click', '.jpum-user-codes > button', toggle_user_codes)
109
  .on('click keypress', '.jpum-user-codes li > a', insert_user_code)
110
  .on('click', reset_user_codes)
111
- .on('menu-item-added', refresh_all_items)
112
- .ready(refresh_all_items)
113
- .ready(disable_register_menu_item);
114
 
115
  // Add click event directly to submit buttons to prevent being prevented by default action.
116
  $('.submit-add-to-menu').click(function () {
117
  setTimeout(refresh_all_items, 1000);
118
  });
119
 
 
 
 
120
  }(jQuery, jQuery(document)));
108
  .on('click', '.jpum-user-codes > button', toggle_user_codes)
109
  .on('click keypress', '.jpum-user-codes li > a', insert_user_code)
110
  .on('click', reset_user_codes)
111
+ .on('menu-item-added', refresh_all_items);
 
 
112
 
113
  // Add click event directly to submit buttons to prevent being prevented by default action.
114
  $('.submit-add-to-menu').click(function () {
115
  setTimeout(refresh_all_items, 1000);
116
  });
117
 
118
+ $(refresh_all_items);
119
+ $(disable_register_menu_item);
120
+
121
  }(jQuery, jQuery(document)));
assets/js/admin-general.min.js CHANGED
@@ -1 +1 @@
1
- !function(o){"use strict";function e(){var e=o(this),t=e.parents(".menu-item").find(".nav_item_options-redirect_url");"custom"==e.val()?t.slideDown():t.slideUp()}function t(){var e=o(this),t=e.parents(".menu-item").find(".nav_item_options-avatar_size");0<=e.val().indexOf("{avatar}")?t.slideDown():t.slideUp()}function n(){var e=o(this),t=e.parents(".menu-item"),n=t.find(".nav_item_options-can_see"),i=t.find(".nav_item_options-roles"),s=t.find(".jpum-user-codes");"logged_in"===e.val()?(n.slideDown(),i.slideDown(),t.addClass("show-insert-button"),s.fadeOut(0).fadeIn()):(n.slideUp(),i.slideUp(),s.fadeOut(function(){t.removeClass("show-insert-button")}))}function s(e){void 0!==e&&o(e.target).parents(".jpum-user-codes").length||o(".jpum-user-codes").removeClass("open")}function i(){o("input.edit-menu-item-title").each(function(){var e=o(this).parents("label"),t=_.template(o("#tmpl-jpum-user-codes").html());e.parents("p").find(".jpum-user-codes").length||e.after(t())}),o(".nav_item_options-redirect_type select").each(e),o(".nav_item_options-which_users select").each(n),o(".nav_item_options-which_users select").each(n),o("input.edit-menu-item-title").each(t)}jQuery(document).on("change",".nav_item_options-redirect_type select",e).on("change",".nav_item_options-which_users select",n).on("change keyup focusout","input.edit-menu-item-title",t).on("click",".jpum-user-codes > button",function(){o(this).parent().toggleClass("open")}).on("click keypress",".jpum-user-codes li > a",function(e){var t=o(this),n=t.parents("p").find("input"),i=n.val();e.which=e.which||e.keyCode,"keypress"===e.type&&13!==e.keyCode&&32!==e.keyCode||(n.val(i+"{"+t.data("code")+"}").trigger("change"),s(),e.preventDefault())}).on("click",s).on("menu-item-added",i).ready(i).ready(function(){var e=o(".user-menus-registration-disabled");e.length&&e.find('li:eq(1) input[type="checkbox"]').attr("disabled",!0)}),o(".submit-add-to-menu").click(function(){setTimeout(i,1e3)})}(jQuery);
1
+ !function(o){"use strict";function e(){var e=o(this),t=e.parents(".menu-item").find(".nav_item_options-redirect_url");"custom"==e.val()?t.slideDown():t.slideUp()}function t(){var e=o(this),t=e.parents(".menu-item").find(".nav_item_options-avatar_size");0<=e.val().indexOf("{avatar}")?t.slideDown():t.slideUp()}function n(){var e=o(this),t=e.parents(".menu-item"),n=t.find(".nav_item_options-can_see"),i=t.find(".nav_item_options-roles"),s=t.find(".jpum-user-codes");"logged_in"===e.val()?(n.slideDown(),i.slideDown(),t.addClass("show-insert-button"),s.fadeOut(0).fadeIn()):(n.slideUp(),i.slideUp(),s.fadeOut(function(){t.removeClass("show-insert-button")}))}function s(e){void 0!==e&&o(e.target).parents(".jpum-user-codes").length||o(".jpum-user-codes").removeClass("open")}function i(){o("input.edit-menu-item-title").each(function(){var e=o(this).parents("label"),t=_.template(o("#tmpl-jpum-user-codes").html());e.parents("p").find(".jpum-user-codes").length||e.after(t())}),o(".nav_item_options-redirect_type select").each(e),o(".nav_item_options-which_users select").each(n),o(".nav_item_options-which_users select").each(n),o("input.edit-menu-item-title").each(t)}jQuery(document).on("change",".nav_item_options-redirect_type select",e).on("change",".nav_item_options-which_users select",n).on("change keyup focusout","input.edit-menu-item-title",t).on("click",".jpum-user-codes > button",function(){o(this).parent().toggleClass("open")}).on("click keypress",".jpum-user-codes li > a",function(e){var t=o(this),n=t.parents("p").find("input"),i=n.val();e.which=e.which||e.keyCode,"keypress"===e.type&&13!==e.keyCode&&32!==e.keyCode||(n.val(i+"{"+t.data("code")+"}").trigger("change"),s(),e.preventDefault())}).on("click",s).on("menu-item-added",i),o(".submit-add-to-menu").click(function(){setTimeout(i,1e3)}),o(i),o(function(){var e=o(".user-menus-registration-disabled");e.length&&e.find('li:eq(1) input[type="checkbox"]').attr("disabled",!0)})}(jQuery);
assets/sass/admin-general.scss CHANGED
File without changes
freemius/LICENSE.txt CHANGED
File without changes
freemius/README.md CHANGED
File without changes
freemius/assets/css/admin/account.css CHANGED
File without changes
freemius/assets/css/admin/add-ons.css CHANGED
File without changes
freemius/assets/css/admin/affiliation.css CHANGED
File without changes
freemius/assets/css/admin/checkout.css CHANGED
File without changes
freemius/assets/css/admin/common.css CHANGED
@@ -1,2 +1,2 @@
1
  .fs-badge{position:absolute;top:10px;right:0;background:#71ae00;color:white;text-transform:uppercase;padding:5px 10px;-moz-border-radius:3px 0 0 3px;-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;font-weight:bold;border-right:0;-moz-box-shadow:0 2px 1px -1px rgba(0,0,0,0.3);-webkit-box-shadow:0 2px 1px -1px rgba(0,0,0,0.3);box-shadow:0 2px 1px -1px rgba(0,0,0,0.3)}.theme-browser .theme .fs-premium-theme-badge-container{position:absolute;right:0;top:0}.theme-browser .theme .fs-premium-theme-badge-container .fs-badge{position:relative;top:0;margin-top:10px;text-align:center}.theme-browser .theme .fs-premium-theme-badge-container .fs-badge.fs-premium-theme-badge{font-size:1.1em}.theme-browser .theme .fs-premium-theme-badge-container .fs-badge.fs-beta-theme-badge{background:#00a0d2}.fs-switch{position:relative;display:inline-block;color:#ccc;text-shadow:0 1px 1px rgba(255,255,255,0.8);height:18px;padding:6px 6px 5px 6px;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);background:#ececec;box-shadow:0 0 4px rgba(0,0,0,0.1),inset 0 1px 3px 0 rgba(0,0,0,0.1);cursor:pointer}.fs-switch span{display:inline-block;width:35px;text-transform:uppercase}.fs-switch .fs-toggle{position:absolute;top:1px;width:37px;height:25px;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.3);border-radius:4px;background:#fff;background-color:#fff;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #ececec), color-stop(1, #fff));background-image:-webkit-linear-gradient(top, #ececec, #fff);background-image:-moz-linear-gradient(top, #ececec, #fff);background-image:-ms-linear-gradient(top, #ececec, #fff);background-image:-o-linear-gradient(top, #ececec, #fff);background-image:linear-gradient(top, bottom, #ececec, #fff);box-shadow:inset 0 1px 0 0 rgba(255,255,255,0.5);z-index:999;-moz-transition:0.4s cubic-bezier(0.54, 1.6, 0.5, 1);-o-transition:0.4s cubic-bezier(0.54, 1.6, 0.5, 1);-ms-transition:0.4s cubic-bezier(0.54, 1.6, 0.5, 1);-webkit-transition:0.4s cubic-bezier(0.54, 1.6, 0.5, 1);transition:0.4s cubic-bezier(0.54, 1.6, 0.5, 1)}.fs-switch.fs-off .fs-toggle{left:2%}.fs-switch.fs-on .fs-toggle{left:54%}.fs-switch.fs-round{top:8px;padding:4px 25px;-moz-border-radius:24px;-webkit-border-radius:24px;border-radius:24px}.fs-switch.fs-round .fs-toggle{top:0;width:24px;height:24px;-moz-border-radius:24px;-webkit-border-radius:24px;border-radius:24px}.fs-switch.fs-round.fs-off .fs-toggle{left:-1px}.fs-switch.fs-round.fs-on{background:#0085ba}.fs-switch.fs-round.fs-on .fs-toggle{left:25px}.fs-switch.fs-small.fs-round{padding:1px 19px}.fs-switch.fs-small.fs-round .fs-toggle{top:0;width:18px;height:18px;-moz-border-radius:18px;-webkit-border-radius:18px;border-radius:18px}.fs-switch.fs-small.fs-round.fs-on .fs-toggle{left:19px}.fs-switch-feedback{margin-left:10px}.fs-switch-feedback.success{color:#71ae00}.rtl .fs-switch-feedback{margin-left:0;margin-right:10px}#fs_frame{line-height:0;font-size:0}.fs-full-size-wrapper{margin:40px 0 -65px -20px}@media (max-width: 600px){.fs-full-size-wrapper{margin:0 0 -65px -10px}}
2
- .fs-notice{position:relative}.fs-notice.fs-has-title{margin-bottom:30px !important}.fs-notice.success{color:green}.fs-notice.promotion{border-color:#00a0d2 !important;background-color:#f2fcff !important}.fs-notice .fs-notice-body{margin:.5em 0;padding:2px}.fs-notice .fs-close{cursor:pointer;color:#aaa;float:right}.fs-notice .fs-close:hover{color:#666}.fs-notice .fs-close>*{margin-top:7px;display:inline-block}.fs-notice label.fs-plugin-title{background:rgba(0,0,0,0.3);color:#fff;padding:2px 10px;position:absolute;top:100%;bottom:auto;right:auto;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px;left:10px;font-size:12px;font-weight:bold;cursor:auto}div.fs-notice.updated,div.fs-notice.success,div.fs-notice.promotion{display:block !important}.rtl .fs-notice .fs-close{float:left}.fs-secure-notice{position:fixed;top:32px;left:160px;right:0;background:#ebfdeb;padding:10px 20px;color:green;z-index:9999;-moz-box-shadow:0 2px 2px rgba(6,113,6,0.3);-webkit-box-shadow:0 2px 2px rgba(6,113,6,0.3);box-shadow:0 2px 2px rgba(6,113,6,0.3);opacity:0.95;filter:alpha(opacity=95)}.fs-secure-notice:hover{opacity:1;filter:alpha(opacity=100)}.fs-secure-notice a.fs-security-proof{color:green;text-decoration:none}@media screen and (max-width: 960px){.fs-secure-notice{left:36px}}@media screen and (max-width: 600px){.fs-secure-notice{display:none}}@media screen and (max-width: 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;margin-bottom:-2px}.wrap.fs-section h2{text-align:left}.plugins p.fs-upgrade-notice{border:0;background-color:#d54e21;padding:10px;color:#f9f9f9;margin-top:10px}
1
  .fs-badge{position:absolute;top:10px;right:0;background:#71ae00;color:white;text-transform:uppercase;padding:5px 10px;-moz-border-radius:3px 0 0 3px;-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;font-weight:bold;border-right:0;-moz-box-shadow:0 2px 1px -1px rgba(0,0,0,0.3);-webkit-box-shadow:0 2px 1px -1px rgba(0,0,0,0.3);box-shadow:0 2px 1px -1px rgba(0,0,0,0.3)}.theme-browser .theme .fs-premium-theme-badge-container{position:absolute;right:0;top:0}.theme-browser .theme .fs-premium-theme-badge-container .fs-badge{position:relative;top:0;margin-top:10px;text-align:center}.theme-browser .theme .fs-premium-theme-badge-container .fs-badge.fs-premium-theme-badge{font-size:1.1em}.theme-browser .theme .fs-premium-theme-badge-container .fs-badge.fs-beta-theme-badge{background:#00a0d2}.fs-switch{position:relative;display:inline-block;color:#ccc;text-shadow:0 1px 1px rgba(255,255,255,0.8);height:18px;padding:6px 6px 5px 6px;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);background:#ececec;box-shadow:0 0 4px rgba(0,0,0,0.1),inset 0 1px 3px 0 rgba(0,0,0,0.1);cursor:pointer}.fs-switch span{display:inline-block;width:35px;text-transform:uppercase}.fs-switch .fs-toggle{position:absolute;top:1px;width:37px;height:25px;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.3);border-radius:4px;background:#fff;background-color:#fff;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #ececec), color-stop(1, #fff));background-image:-webkit-linear-gradient(top, #ececec, #fff);background-image:-moz-linear-gradient(top, #ececec, #fff);background-image:-ms-linear-gradient(top, #ececec, #fff);background-image:-o-linear-gradient(top, #ececec, #fff);background-image:linear-gradient(top, bottom, #ececec, #fff);box-shadow:inset 0 1px 0 0 rgba(255,255,255,0.5);z-index:999;-moz-transition:0.4s cubic-bezier(0.54, 1.6, 0.5, 1);-o-transition:0.4s cubic-bezier(0.54, 1.6, 0.5, 1);-ms-transition:0.4s cubic-bezier(0.54, 1.6, 0.5, 1);-webkit-transition:0.4s cubic-bezier(0.54, 1.6, 0.5, 1);transition:0.4s cubic-bezier(0.54, 1.6, 0.5, 1)}.fs-switch.fs-off .fs-toggle{left:2%}.fs-switch.fs-on .fs-toggle{left:54%}.fs-switch.fs-round{top:8px;padding:4px 25px;-moz-border-radius:24px;-webkit-border-radius:24px;border-radius:24px}.fs-switch.fs-round .fs-toggle{top:0;width:24px;height:24px;-moz-border-radius:24px;-webkit-border-radius:24px;border-radius:24px}.fs-switch.fs-round.fs-off .fs-toggle{left:-1px}.fs-switch.fs-round.fs-on{background:#0085ba}.fs-switch.fs-round.fs-on .fs-toggle{left:25px}.fs-switch.fs-small.fs-round{padding:1px 19px}.fs-switch.fs-small.fs-round .fs-toggle{top:0;width:18px;height:18px;-moz-border-radius:18px;-webkit-border-radius:18px;border-radius:18px}.fs-switch.fs-small.fs-round.fs-on .fs-toggle{left:19px}.fs-switch-feedback{margin-left:10px}.fs-switch-feedback.success{color:#71ae00}.rtl .fs-switch-feedback{margin-left:0;margin-right:10px}#fs_frame{line-height:0;font-size:0}.fs-full-size-wrapper{margin:40px 0 -65px -20px}@media (max-width: 600px){.fs-full-size-wrapper{margin:0 0 -65px -10px}}
2
+ .fs-notice{position:relative}.fs-notice.fs-has-title{margin-bottom:30px !important}.fs-notice.success{color:green}.fs-notice.promotion{border-color:#00a0d2 !important;background-color:#f2fcff !important}.fs-notice .fs-notice-body{margin:.5em 0;padding:2px}.fs-notice .fs-close{cursor:pointer;color:#aaa;float:right}.fs-notice .fs-close:hover{color:#666}.fs-notice .fs-close>*{margin-top:7px;display:inline-block}.fs-notice label.fs-plugin-title{background:rgba(0,0,0,0.3);color:#fff;padding:2px 10px;position:absolute;top:100%;bottom:auto;right:auto;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px;left:10px;font-size:12px;font-weight:bold;cursor:auto}div.fs-notice.updated,div.fs-notice.success,div.fs-notice.promotion{display:block !important}.rtl .fs-notice .fs-close{float:left}.fs-secure-notice{position:fixed;top:32px;left:160px;right:0;background:#ebfdeb;padding:10px 20px;color:green;z-index:9999;-moz-box-shadow:0 2px 2px rgba(6,113,6,0.3);-webkit-box-shadow:0 2px 2px rgba(6,113,6,0.3);box-shadow:0 2px 2px rgba(6,113,6,0.3);opacity:0.95;filter:alpha(opacity=95)}.fs-secure-notice:hover{opacity:1;filter:alpha(opacity=100)}.fs-secure-notice a.fs-security-proof{color:green;text-decoration:none}@media screen and (max-width: 960px){.fs-secure-notice{left:36px}}@media screen and (max-width: 600px){.fs-secure-notice{display:none}}@media screen and (max-width: 1250px){#fs_promo_tab{display:none}}@media screen and (max-width: 782px){.fs-secure-notice{left:0;top:46px;text-align:center}}span.fs-submenu-item.fs-sub:before{content:'\21B3';padding:0 5px}.rtl span.fs-submenu-item.fs-sub:before{content:'\21B2'}.fs-submenu-item.pricing.upgrade-mode{color:greenyellow}.fs-submenu-item.pricing.trial-mode{color:#83e2ff}#adminmenu .update-plugins.fs-trial{background-color:#00b9eb}.fs-ajax-spinner{border:0;width:20px;height:20px;margin-right:5px;vertical-align:sub;display:inline-block;background:url("/wp-admin/images/wpspin_light-2x.gif");background-size:contain;margin-bottom:-2px}.wrap.fs-section h2{text-align:left}.plugins p.fs-upgrade-notice{border:0;background-color:#d54e21;padding:10px;color:#f9f9f9;margin-top:10px}
freemius/assets/css/admin/connect.css CHANGED
@@ -1 +1 @@
1
- #fs_connect{width:480px;-moz-box-shadow:0px 1px 2px rgba(0,0,0,0.3);-webkit-box-shadow:0px 1px 2px rgba(0,0,0,0.3);box-shadow:0px 1px 2px rgba(0,0,0,0.3);margin:20px 0}@media screen and (max-width: 479px){#fs_connect{-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;width:auto;margin:0 0 0 -10px}}#fs_connect .fs-content{background:#fff;padding:15px 20px}#fs_connect .fs-content .fs-error{background:snow;color:#d3135a;border:1px solid #d3135a;-moz-box-shadow:0 1px 1px 0 rgba(0,0,0,0.1);-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,0.1);box-shadow:0 1px 1px 0 rgba(0,0,0,0.1);text-align:center;padding:5px;margin-bottom:10px}#fs_connect .fs-content p{margin:0;padding:0;font-size:1.2em}#fs_connect .fs-license-key-container{position:relative;width:280px;margin:10px auto 0 auto}#fs_connect .fs-license-key-container input{width:100%}#fs_connect .fs-license-key-container .dashicons{position:absolute;top:5px;right:5px}#fs_connect.require-license-key .fs-sites-list-container td{cursor:pointer}#fs_connect #delegate_to_site_admins{margin-right:15px;float:right;height:26px;vertical-align:middle;line-height:37px;font-weight:bold;border-bottom:1px dashed;text-decoration:none}#fs_connect #delegate_to_site_admins.rtl{margin-left:15px;margin-right:0}#fs_connect .fs-actions{padding:10px 20px;background:#C0C7CA}#fs_connect .fs-actions .button{padding:0 10px 1px;line-height:35px;height:37px;font-size:16px;margin-bottom:0}#fs_connect .fs-actions .button .dashicons{font-size:37px;margin-left:-8px;margin-right:12px}#fs_connect .fs-actions .button.button-primary{padding-right:15px;padding-left:15px}#fs_connect .fs-actions .button.button-primary:after{content:' \279C'}#fs_connect .fs-actions .button.button-primary.fs-loading:after{content:''}#fs_connect .fs-actions .button.button-secondary{float:right}#fs_connect.fs-anonymous-disabled .fs-actions .button.button-primary{width:100%}#fs_connect .fs-permissions{padding:10px 20px;background:#FEFEFE;-moz-transition:background 0.5s ease;-o-transition:background 0.5s ease;-ms-transition:background 0.5s ease;-webkit-transition:background 0.5s ease;transition:background 0.5s ease}#fs_connect .fs-permissions .fs-license-sync-disclaimer{text-align:center;margin-top:0}#fs_connect .fs-permissions .fs-trigger{font-size:0.9em;text-decoration:none;text-align:center;display:block}#fs_connect .fs-permissions ul{height:0;overflow:hidden;margin:0}#fs_connect .fs-permissions ul li{margin-bottom:12px}#fs_connect .fs-permissions ul li:last-child{margin-bottom:0}#fs_connect .fs-permissions ul li i.dashicons{float:left;font-size:40px;width:40px;height:40px}#fs_connect .fs-permissions ul li .fs-switch{float:right}#fs_connect .fs-permissions ul li .fs-permission-description{margin-left:55px}#fs_connect .fs-permissions ul li .fs-permission-description span{font-weight:bold;text-transform:uppercase;color:#23282d}#fs_connect .fs-permissions ul li .fs-permission-description p{margin:2px 0 0 0}#fs_connect .fs-permissions.fs-open{background:#fff}#fs_connect .fs-permissions.fs-open ul{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 .fs-permission-description{margin-right:55px;margin-left:0}.rtl #fs_connect .fs-permissions ul li .fs-switch{float:left}.rtl #fs_connect .fs-permissions ul li i.dashicons{float:right}.rtl #fs_connect .fs-visual .fs-site-icon{right:20px;left:auto}.rtl #fs_connect .fs-visual .fs-connect-logo{right:auto;left:20px}#fs_theme_connect_wrapper{position:fixed;top:0;height:100%;width:100%;z-index:99990;background:rgba(0,0,0,0.75);text-align:center;overflow-y:auto}#fs_theme_connect_wrapper:before{content:"";display:inline-block;vertical-align:middle;height:100%}#fs_theme_connect_wrapper>button.close{color:white;cursor:pointer;height:40px;width:40px;position:absolute;right:0;border:0;background-color:transparent;top:32px}#fs_theme_connect_wrapper #fs_connect{top:0;text-align:left;display:inline-block;vertical-align:middle;margin-top:52px;margin-bottom:20px}#fs_theme_connect_wrapper #fs_connect .fs-terms{background:rgba(140,140,140,0.64)}#fs_theme_connect_wrapper #fs_connect .fs-terms,#fs_theme_connect_wrapper #fs_connect .fs-terms a{color:#c5c5c5}.wp-pointer-content #fs_connect{margin:0;-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none}.fs-opt-in-pointer .wp-pointer-content{padding:0}.fs-opt-in-pointer.wp-pointer-top .wp-pointer-arrow{border-bottom-color:#dfdfdf}.fs-opt-in-pointer.wp-pointer-top .wp-pointer-arrow-inner{border-bottom-color:#fafafa}.fs-opt-in-pointer.wp-pointer-bottom .wp-pointer-arrow{border-top-color:#dfdfdf}.fs-opt-in-pointer.wp-pointer-bottom .wp-pointer-arrow-inner{border-top-color:#fafafa}.fs-opt-in-pointer.wp-pointer-left .wp-pointer-arrow{border-right-color:#dfdfdf}.fs-opt-in-pointer.wp-pointer-left .wp-pointer-arrow-inner{border-right-color:#fafafa}.fs-opt-in-pointer.wp-pointer-right .wp-pointer-arrow{border-left-color:#dfdfdf}.fs-opt-in-pointer.wp-pointer-right .wp-pointer-arrow-inner{border-left-color:#fafafa}
1
+ #fs_connect{width:480px;-moz-box-shadow:0px 1px 2px rgba(0,0,0,0.3);-webkit-box-shadow:0px 1px 2px rgba(0,0,0,0.3);box-shadow:0px 1px 2px rgba(0,0,0,0.3);margin:20px 0}@media screen and (max-width: 479px){#fs_connect{-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;width:auto;margin:0 0 0 -10px}}#fs_connect .fs-content{background:#fff;padding:15px 20px}#fs_connect .fs-content .fs-error{background:snow;color:#d3135a;border:1px solid #d3135a;-moz-box-shadow:0 1px 1px 0 rgba(0,0,0,0.1);-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,0.1);box-shadow:0 1px 1px 0 rgba(0,0,0,0.1);text-align:center;padding:5px;margin-bottom:10px}#fs_connect .fs-content p{margin:0;padding:0;font-size:1.2em}#fs_connect .fs-license-key-container{position:relative;width:280px;margin:10px auto 0 auto}#fs_connect .fs-license-key-container input{width:100%}#fs_connect .fs-license-key-container .dashicons{position:absolute;top:5px;right:5px}#fs_connect.require-license-key .fs-sites-list-container td{cursor:pointer}#fs_connect #delegate_to_site_admins{margin-right:15px;float:right;height:26px;vertical-align:middle;line-height:37px;font-weight:bold;border-bottom:1px dashed;text-decoration:none}#fs_connect #delegate_to_site_admins.rtl{margin-left:15px;margin-right:0}#fs_connect .fs-actions{padding:10px 20px;background:#C0C7CA}#fs_connect .fs-actions .button{padding:0 10px 1px;line-height:35px;height:37px;font-size:16px;margin-bottom:0}#fs_connect .fs-actions .button .dashicons{font-size:37px;margin-left:-8px;margin-right:12px}#fs_connect .fs-actions .button.button-primary{padding-right:15px;padding-left:15px}#fs_connect .fs-actions .button.button-primary:after{content:' \279C'}#fs_connect .fs-actions .button.button-primary.fs-loading:after{content:''}#fs_connect .fs-actions .button.button-secondary{float:right}#fs_connect.fs-anonymous-disabled .fs-actions .button.button-primary{width:100%}#fs_connect .fs-permissions{padding:10px 20px;background:#FEFEFE;-moz-transition:background 0.5s ease;-o-transition:background 0.5s ease;-ms-transition:background 0.5s ease;-webkit-transition:background 0.5s ease;transition:background 0.5s ease}#fs_connect .fs-permissions .fs-license-sync-disclaimer{text-align:center;margin-top:0}#fs_connect .fs-permissions>.fs-trigger{font-size:0.9em;text-decoration:none;text-align:center;display:block}#fs_connect .fs-permissions ul{height:0;overflow:hidden;margin:0}#fs_connect .fs-permissions ul li{margin-bottom:12px}#fs_connect .fs-permissions ul li:last-child{margin-bottom:0}#fs_connect .fs-permissions ul li>i.dashicons{float:left;font-size:40px;width:40px;height:40px}#fs_connect .fs-permissions ul li .fs-switch{float:right}#fs_connect .fs-permissions ul li .fs-permission-description{margin-left:55px}#fs_connect .fs-permissions ul li .fs-permission-description span{font-weight:bold;text-transform:uppercase;color:#23282d}#fs_connect .fs-permissions ul li .fs-permission-description p{margin:2px 0 0 0}#fs_connect .fs-permissions.fs-open{background:#fff}#fs_connect .fs-permissions.fs-open ul{overflow:initial;height:auto;margin:20px 20px 10px 20px}@media screen and (max-width: 479px){#fs_connect .fs-permissions{background:#fff}#fs_connect .fs-permissions .fs-trigger{display:none}#fs_connect .fs-permissions ul{height:auto;margin:20px}}#fs_connect .fs-freemium-licensing{padding:8px;background:#777;color:#fff}#fs_connect .fs-freemium-licensing p{text-align:center;display:block;margin:0;padding:0}#fs_connect .fs-freemium-licensing a{color:#C2EEFF;text-decoration:underline}#fs_connect .fs-visual{padding:12px;line-height:0;background:#fafafa;height:80px;position:relative}#fs_connect .fs-visual .fs-site-icon{position:absolute;left:20px;top:10px}#fs_connect .fs-visual .fs-connect-logo{position:absolute;right:20px;top:10px}#fs_connect .fs-visual .fs-plugin-icon{position:absolute;top:10px;left:50%;margin-left:-40px}#fs_connect .fs-visual .fs-plugin-icon,#fs_connect .fs-visual .fs-site-icon,#fs_connect .fs-visual img,#fs_connect .fs-visual object{width:80px;height:80px}#fs_connect .fs-visual .dashicons-wordpress{font-size:64px;background:#01749a;color:#fff;width:64px;height:64px;padding:8px}#fs_connect .fs-visual .dashicons-plus{position:absolute;top:50%;font-size:30px;margin-top:-10px;color:#bbb}#fs_connect .fs-visual .dashicons-plus.fs-first{left:28%}#fs_connect .fs-visual .dashicons-plus.fs-second{left:65%}#fs_connect .fs-visual .fs-plugin-icon,#fs_connect .fs-visual .fs-connect-logo,#fs_connect .fs-visual .fs-site-icon{border:1px solid #ccc;padding:1px;background:#fff}#fs_connect .fs-terms{text-align:center;font-size:0.85em;padding:5px;background:rgba(0,0,0,0.05)}#fs_connect .fs-terms,#fs_connect .fs-terms a{color:#999}#fs_connect .fs-terms a{text-decoration:none}.fs-multisite-options-container{margin-top:10px;border:1px solid #ccc;padding:5px}.fs-multisite-options-container a{text-decoration:none}.fs-multisite-options-container a:focus{box-shadow:none}.fs-multisite-options-container a.selected{font-weight:bold}.fs-multisite-options-container.fs-apply-on-all-sites{border:0 none;padding:0}.fs-multisite-options-container.fs-apply-on-all-sites .fs-all-sites-options{border-spacing:0}.fs-multisite-options-container.fs-apply-on-all-sites .fs-all-sites-options td:not(:first-child){display:none}.fs-multisite-options-container .fs-sites-list-container{display:none;overflow:auto}.fs-multisite-options-container .fs-sites-list-container table td{border-top:1px solid #ccc;padding:4px 2px}.fs-tooltip-trigger{position:relative}.fs-tooltip-trigger:not(a){cursor:help}.fs-tooltip-trigger .fs-tooltip{opacity:0;visibility:hidden;-moz-transition:opacity 0.3s ease-in-out;-o-transition:opacity 0.3s ease-in-out;-ms-transition:opacity 0.3s ease-in-out;-webkit-transition:opacity 0.3s ease-in-out;transition:opacity 0.3s ease-in-out;position:absolute;background:rgba(0,0,0,0.8);color:#fff !important;font-family:'arial', serif;font-size:12px;padding:10px;z-index:999999;bottom:100%;margin-bottom:5px;left:-17px;right:0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;-moz-box-shadow:1px 1px 1px rgba(0,0,0,0.2);-webkit-box-shadow:1px 1px 1px rgba(0,0,0,0.2);box-shadow:1px 1px 1px rgba(0,0,0,0.2);line-height:1.3em;font-weight:bold;text-align:left;text-transform:none !important}.rtl .fs-tooltip-trigger .fs-tooltip{text-align:right;left:auto;right:-17px}.fs-tooltip-trigger .fs-tooltip::after{content:' ';display:block;width:0;height:0;border-style:solid;border-width:5px 5px 0 5px;border-color:rgba(0,0,0,0.8) transparent transparent transparent;position:absolute;top:100%;left:21px}.rtl .fs-tooltip-trigger .fs-tooltip::after{right:21px;left:auto}.fs-tooltip-trigger:hover .fs-tooltip{visibility:visible;opacity:1}#fs_marketing_optin{display:none;margin-top:10px;border:1px solid #ccc;padding:10px;line-height:1.5em}#fs_marketing_optin .fs-message{display:block;margin-bottom:5px;font-size:1.05em;font-weight:600}#fs_marketing_optin.error{border:1px solid #d3135a;background:#fee}#fs_marketing_optin.error .fs-message{color:#d3135a}#fs_marketing_optin .fs-input-container{margin-top:5px}#fs_marketing_optin .fs-input-container label{margin-top:5px;display:block}#fs_marketing_optin .fs-input-container label input{float:left;margin:1px 0 0 0}#fs_marketing_optin .fs-input-container label:first-child{display:block;margin-bottom:2px}#fs_marketing_optin .fs-input-label{display:block;margin-left:20px}#fs_marketing_optin .fs-input-label .underlined{text-decoration:underline}.rtl #fs_marketing_optin .fs-input-container label input{float:right}.rtl #fs_marketing_optin .fs-input-label{margin-left:0;margin-right:20px}.rtl #fs_connect .fs-actions{padding:10px 20px;background:#C0C7CA}.rtl #fs_connect .fs-actions .button .dashicons{font-size:37px;margin-left:-8px;margin-right:12px}.rtl #fs_connect .fs-actions .button.button-primary:after{content:' \000bb'}.rtl #fs_connect .fs-actions .button.button-primary.fs-loading:after{content:''}.rtl #fs_connect .fs-actions .button.button-secondary{float:left}.rtl #fs_connect .fs-permissions ul li .fs-permission-description{margin-right:55px;margin-left:0}.rtl #fs_connect .fs-permissions ul li .fs-switch{float:left}.rtl #fs_connect .fs-permissions ul li i.dashicons{float:right}.rtl #fs_connect .fs-visual .fs-site-icon{right:20px;left:auto}.rtl #fs_connect .fs-visual .fs-connect-logo{right:auto;left:20px}#fs_theme_connect_wrapper{position:fixed;top:0;height:100%;width:100%;z-index:99990;background:rgba(0,0,0,0.75);text-align:center;overflow-y:auto}#fs_theme_connect_wrapper:before{content:"";display:inline-block;vertical-align:middle;height:100%}#fs_theme_connect_wrapper>button.close{color:white;cursor:pointer;height:40px;width:40px;position:absolute;right:0;border:0;background-color:transparent;top:32px}#fs_theme_connect_wrapper #fs_connect{top:0;text-align:left;display:inline-block;vertical-align:middle;margin-top:52px;margin-bottom:20px}#fs_theme_connect_wrapper #fs_connect .fs-terms{background:rgba(140,140,140,0.64)}#fs_theme_connect_wrapper #fs_connect .fs-terms,#fs_theme_connect_wrapper #fs_connect .fs-terms a{color:#c5c5c5}.wp-pointer-content #fs_connect{margin:0;-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none}.fs-opt-in-pointer .wp-pointer-content{padding:0}.fs-opt-in-pointer.wp-pointer-top .wp-pointer-arrow{border-bottom-color:#dfdfdf}.fs-opt-in-pointer.wp-pointer-top .wp-pointer-arrow-inner{border-bottom-color:#fafafa}.fs-opt-in-pointer.wp-pointer-bottom .wp-pointer-arrow{border-top-color:#dfdfdf}.fs-opt-in-pointer.wp-pointer-bottom .wp-pointer-arrow-inner{border-top-color:#fafafa}.fs-opt-in-pointer.wp-pointer-left .wp-pointer-arrow{border-right-color:#dfdfdf}.fs-opt-in-pointer.wp-pointer-left .wp-pointer-arrow-inner{border-right-color:#fafafa}.fs-opt-in-pointer.wp-pointer-right .wp-pointer-arrow{border-left-color:#dfdfdf}.fs-opt-in-pointer.wp-pointer-right .wp-pointer-arrow-inner{border-left-color:#fafafa}#license_issues_link{display:block;text-align:center;font-size:0.9em;margin-top:10px}
freemius/assets/css/admin/debug.css CHANGED
File without changes
freemius/assets/css/admin/dialog-boxes.css CHANGED
File without changes
freemius/assets/css/admin/gdpr-optin-notice.css CHANGED
File without changes
freemius/assets/css/admin/index.php CHANGED
File without changes
freemius/assets/css/admin/plugins.css CHANGED
File without changes
freemius/assets/css/customizer.css CHANGED
File without changes
freemius/assets/css/index.php CHANGED
File without changes
freemius/assets/img/index.php CHANGED
File without changes
freemius/assets/img/plugin-icon.png CHANGED
File without changes
freemius/assets/img/theme-icon.png CHANGED
File without changes
freemius/assets/img/user-menus.png ADDED
Binary file
freemius/assets/index.php CHANGED
File without changes
freemius/assets/js/index.php CHANGED
File without changes
freemius/assets/js/nojquery.ba-postmessage.js CHANGED
File without changes
freemius/assets/js/nojquery.ba-postmessage.min.js CHANGED
File without changes
freemius/assets/js/postmessage.js CHANGED
File without changes
freemius/config.php CHANGED
File without changes
freemius/includes/class-freemius-abstract.php CHANGED
File without changes
freemius/includes/class-freemius.php CHANGED
@@ -384,6 +384,13 @@
384
  * @var boolean|null
385
  */
386
  private $_use_external_pricing = null;
 
 
 
 
 
 
 
387
 
388
  #endregion
389
 
@@ -5484,7 +5491,7 @@
5484
  function is_extensions_tracking_allowed() {
5485
  return ( true === $this->apply_filters(
5486
  'is_extensions_tracking_allowed',
5487
- $this->_storage->get( 'is_extensions_tracking_allowed', true )
5488
  ) );
5489
  }
5490
 
@@ -5528,10 +5535,12 @@
5528
  * @author Leo Fajardo (@leorw)
5529
  * @since 2.3.2
5530
  *
5531
- * @param bool $is_enabled
5532
  */
5533
- private function update_extensions_tracking_flag( $is_enabled ) {
5534
- $this->_storage->store( 'is_extensions_tracking_allowed', $is_enabled );
 
 
5535
  }
5536
 
5537
  /**
@@ -6860,8 +6869,6 @@
6860
  */
6861
  function _sync_cron_method( array $blog_ids, $current_blog_id = null ) {
6862
  if ( $this->is_registered() ) {
6863
- $this->sync_user_beta_mode();
6864
-
6865
  if ( $this->has_paid_plan() ) {
6866
  // Initiate background plan sync.
6867
  $this->_sync_license( true, false, $current_blog_id );
@@ -7234,7 +7241,8 @@
7234
  }
7235
 
7236
  if ( $this->is_plugin_new_install() || $this->is_only_premium() ) {
7237
- if ( ! $this->_anonymous_mode ) {
 
7238
  // Show notice for new plugin installations.
7239
  $this->_admin_notices->add(
7240
  sprintf(
@@ -7285,6 +7293,10 @@
7285
  * @return bool
7286
  */
7287
  private function should_add_sticky_optin_notice() {
 
 
 
 
7288
  if ( fs_is_network_admin() ) {
7289
  if ( ! $this->_is_network_active ) {
7290
  return false;
@@ -13238,26 +13250,25 @@
13238
  self::shoot_ajax_failure();
13239
  }
13240
 
13241
- $user = $this->get_api_user_scope()->call(
13242
  '',
13243
  'put',
13244
  array(
13245
- 'plugin_id' => $this->get_id(),
13246
  'is_beta' => ( 'true' == $is_beta ),
13247
  'fields' => 'is_beta'
13248
  )
13249
  );
13250
 
13251
- if ( ! $this->is_api_result_entity( $user ) ) {
13252
  self::shoot_ajax_failure(
13253
- FS_Api::is_api_error_object( $user ) ?
13254
- $user->error->message :
13255
  fs_text_inline( "An unknown error has occurred while trying to set the user's beta mode.", 'unknown-error-occurred', $this->get_slug() )
13256
  );
13257
  }
13258
 
13259
- $this->_user->is_beta = $user->is_beta;
13260
- $this->_store_user();
13261
 
13262
  self::shoot_ajax_response( array( 'success' => true ) );
13263
  }
@@ -13292,7 +13303,7 @@
13292
  fs_request_get( 'blog_id', null ),
13293
  fs_request_get( 'module_id', null, 'post' ),
13294
  fs_request_get( 'user_id', null ),
13295
- fs_request_get_bool( 'is_extensions_tracking_allowed', true )
13296
  );
13297
 
13298
  if (
@@ -13482,7 +13493,31 @@
13482
  * @return string
13483
  */
13484
  function get_pricing_js_path() {
13485
- return $this->apply_filters( 'freemius_pricing_js_path', WP_FS__DIR_INCLUDES . '/freemius-pricing/freemius-pricing.js' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
13486
  }
13487
 
13488
  /**
@@ -13527,7 +13562,7 @@
13527
  $blog_id = null,
13528
  $plugin_id = null,
13529
  $license_owner_id = null,
13530
- $is_extensions_tracking_allowed = true
13531
  ) {
13532
  $this->_logger->entrance();
13533
 
@@ -16448,19 +16483,6 @@
16448
  );
16449
  }
16450
 
16451
- /**
16452
- * @author Leo Fajardo (@leorw)
16453
- * @since 2.3.0
16454
- */
16455
- private function sync_user_beta_mode() {
16456
- $user = $this->get_api_user_scope()->get( '/?plugin_id=' . $this->get_id() . '&fields=is_beta' );
16457
-
16458
- if ( $this->is_api_result_entity( $user ) ) {
16459
- $this->_user->is_beta = $user->is_beta;
16460
- $this->_store_user();
16461
- }
16462
- }
16463
-
16464
  /**
16465
  * @author Vova Feldman (@svovaf)
16466
  * @since 1.1.7.4
@@ -17148,9 +17170,7 @@
17148
  $this->disable_opt_in_notice_and_lock_user();
17149
  }
17150
 
17151
- if ( ! is_null( $is_extensions_tracking_allowed ) ) {
17152
- $this->update_extensions_tracking_flag( $is_extensions_tracking_allowed );
17153
- }
17154
 
17155
  return $this->setup_account(
17156
  $this->_user,
@@ -17195,9 +17215,7 @@
17195
  $this->disable_opt_in_notice_and_lock_user();
17196
  }
17197
 
17198
- if ( ! is_null( $is_extensions_tracking_allowed ) ) {
17199
- $this->update_extensions_tracking_flag( $is_extensions_tracking_allowed );
17200
- }
17201
 
17202
  $sites = array();
17203
  foreach ( $site_ids as $site_id ) {
@@ -17240,9 +17258,7 @@
17240
  $this->disable_opt_in_notice_and_lock_user();
17241
  }
17242
 
17243
- if ( ! is_null( $is_extensions_tracking_allowed ) ) {
17244
- $this->update_extensions_tracking_flag( $is_extensions_tracking_allowed );
17245
- }
17246
 
17247
  $install_ids = array();
17248
 
@@ -17353,7 +17369,7 @@
17353
  */
17354
  $license_key = fs_request_get( 'license_secret_key' );
17355
 
17356
- $this->update_extensions_tracking_flag( fs_request_get_bool( 'is_extensions_tracking_allowed', true ) );
17357
 
17358
  $this->install_with_current_user( $license_key );
17359
  }
@@ -20605,6 +20621,20 @@
20605
  }
20606
  }
20607
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
20608
  if ( $this->is_addon() || $this->has_addons() ) {
20609
  /**
20610
  * Purge the valid user licenses cache so that when the "Account" or the "Add-Ons" page is loaded,
@@ -21298,7 +21328,7 @@
21298
 
21299
  if ( $this->has_secret_key() ) {
21300
  $endpoint = add_query_arg( 'type', 'all', $endpoint );
21301
- } else if ( $this->is_registered() && $this->_user->is_beta() ) {
21302
  $endpoint = add_query_arg( 'type', 'beta', $endpoint );
21303
  }
21304
 
@@ -23396,6 +23426,14 @@
23396
  return;
23397
  }
23398
 
 
 
 
 
 
 
 
 
23399
  if ( fs_is_network_admin() ) {
23400
  if ( ! $this->_is_network_active ) {
23401
  // Don't add tracking links when browsing the network WP Admin and the plugin is not network active.
384
  * @var boolean|null
385
  */
386
  private $_use_external_pricing = null;
387
+ /**
388
+ * @author Leo Fajardo (@leorw)
389
+ * @since 2.4.2
390
+ *
391
+ * @var string|null
392
+ */
393
+ private $_pricing_js_path = null;
394
 
395
  #endregion
396
 
5491
  function is_extensions_tracking_allowed() {
5492
  return ( true === $this->apply_filters(
5493
  'is_extensions_tracking_allowed',
5494
+ $this->_storage->get( 'is_extensions_tracking_allowed', null )
5495
  ) );
5496
  }
5497
 
5535
  * @author Leo Fajardo (@leorw)
5536
  * @since 2.3.2
5537
  *
5538
+ * @param bool|null $is_enabled
5539
  */
5540
+ function update_extensions_tracking_flag( $is_enabled ) {
5541
+ if ( is_bool( $is_enabled ) ) {
5542
+ $this->_storage->store( 'is_extensions_tracking_allowed', $is_enabled );
5543
+ }
5544
  }
5545
 
5546
  /**
6869
  */
6870
  function _sync_cron_method( array $blog_ids, $current_blog_id = null ) {
6871
  if ( $this->is_registered() ) {
 
 
6872
  if ( $this->has_paid_plan() ) {
6873
  // Initiate background plan sync.
6874
  $this->_sync_license( true, false, $current_blog_id );
7241
  }
7242
 
7243
  if ( $this->is_plugin_new_install() || $this->is_only_premium() ) {
7244
+ if ( ! $this->_anonymous_mode &&
7245
+ ( ! $this->is_addon() || ! $this->_parent->is_anonymous() ) ) {
7246
  // Show notice for new plugin installations.
7247
  $this->_admin_notices->add(
7248
  sprintf(
7293
  * @return bool
7294
  */
7295
  private function should_add_sticky_optin_notice() {
7296
+ if ( $this->is_addon() && $this->_parent->is_anonymous() ) {
7297
+ return false;
7298
+ }
7299
+
7300
  if ( fs_is_network_admin() ) {
7301
  if ( ! $this->_is_network_active ) {
7302
  return false;
13250
  self::shoot_ajax_failure();
13251
  }
13252
 
13253
+ $site = $this->get_api_site_scope()->call(
13254
  '',
13255
  'put',
13256
  array(
 
13257
  'is_beta' => ( 'true' == $is_beta ),
13258
  'fields' => 'is_beta'
13259
  )
13260
  );
13261
 
13262
+ if ( ! $this->is_api_result_entity( $site ) ) {
13263
  self::shoot_ajax_failure(
13264
+ FS_Api::is_api_error_object( $site ) ?
13265
+ $site->error->message :
13266
  fs_text_inline( "An unknown error has occurred while trying to set the user's beta mode.", 'unknown-error-occurred', $this->get_slug() )
13267
  );
13268
  }
13269
 
13270
+ $this->_site->is_beta = $site->is_beta;
13271
+ $this->_store_site();
13272
 
13273
  self::shoot_ajax_response( array( 'success' => true ) );
13274
  }
13303
  fs_request_get( 'blog_id', null ),
13304
  fs_request_get( 'module_id', null, 'post' ),
13305
  fs_request_get( 'user_id', null ),
13306
+ fs_request_get_bool( 'is_extensions_tracking_allowed', null )
13307
  );
13308
 
13309
  if (
13493
  * @return string
13494
  */
13495
  function get_pricing_js_path() {
13496
+ if ( ! isset( $this->_pricing_js_path ) ) {
13497
+ $pricing_js_path = $this->apply_filters( 'freemius_pricing_js_path', '' );
13498
+
13499
+ if ( empty( $pricing_js_path ) ) {
13500
+ global $fs_active_plugins;
13501
+
13502
+ foreach ( $fs_active_plugins->plugins as $sdk_path => $data ) {
13503
+ if ( $data->plugin_path == $this->get_plugin_basename() ) {
13504
+ $plugin_or_theme_root_dir = ( $this->is_plugin() ? WP_PLUGIN_DIR : get_theme_root( get_stylesheet() ) );
13505
+
13506
+ $pricing_js_path = $plugin_or_theme_root_dir
13507
+ . '/'
13508
+ // The basename will be `plugins`, `themes`, or the basename of a custom plugins or themes directory.
13509
+ . str_replace( '../' . basename( $plugin_or_theme_root_dir ) . '/', '', $sdk_path )
13510
+ . '/includes/freemius-pricing/freemius-pricing.js';
13511
+
13512
+ break;
13513
+ }
13514
+ }
13515
+ }
13516
+
13517
+ $this->_pricing_js_path = $pricing_js_path;
13518
+ }
13519
+
13520
+ return $this->_pricing_js_path;
13521
  }
13522
 
13523
  /**
13562
  $blog_id = null,
13563
  $plugin_id = null,
13564
  $license_owner_id = null,
13565
+ $is_extensions_tracking_allowed = null
13566
  ) {
13567
  $this->_logger->entrance();
13568
 
16483
  );
16484
  }
16485
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16486
  /**
16487
  * @author Vova Feldman (@svovaf)
16488
  * @since 1.1.7.4
17170
  $this->disable_opt_in_notice_and_lock_user();
17171
  }
17172
 
17173
+ $this->update_extensions_tracking_flag( $is_extensions_tracking_allowed );
 
 
17174
 
17175
  return $this->setup_account(
17176
  $this->_user,
17215
  $this->disable_opt_in_notice_and_lock_user();
17216
  }
17217
 
17218
+ $this->update_extensions_tracking_flag( $is_extensions_tracking_allowed );
 
 
17219
 
17220
  $sites = array();
17221
  foreach ( $site_ids as $site_id ) {
17258
  $this->disable_opt_in_notice_and_lock_user();
17259
  }
17260
 
17261
+ $this->update_extensions_tracking_flag( $is_extensions_tracking_allowed );
 
 
17262
 
17263
  $install_ids = array();
17264
 
17369
  */
17370
  $license_key = fs_request_get( 'license_secret_key' );
17371
 
17372
+ $this->update_extensions_tracking_flag( fs_request_get_bool( 'is_extensions_tracking_allowed', null ) );
17373
 
17374
  $this->install_with_current_user( $license_key );
17375
  }
20621
  }
20622
  }
20623
 
20624
+ if ( ! $this->is_addon() &&
20625
+ $this->_site->is_beta() !== $site->is_beta
20626
+ ) {
20627
+ // Beta flag updated.
20628
+ $this->_site = $site;
20629
+
20630
+ $this->_store_site(
20631
+ true,
20632
+ $is_site_level_sync ?
20633
+ null :
20634
+ $this->get_network_install_blog_id()
20635
+ );
20636
+ }
20637
+
20638
  if ( $this->is_addon() || $this->has_addons() ) {
20639
  /**
20640
  * Purge the valid user licenses cache so that when the "Account" or the "Add-Ons" page is loaded,
21328
 
21329
  if ( $this->has_secret_key() ) {
21330
  $endpoint = add_query_arg( 'type', 'all', $endpoint );
21331
+ } else if ( is_object( $this->_site ) && $this->_site->is_beta() ) {
21332
  $endpoint = add_query_arg( 'type', 'beta', $endpoint );
21333
  }
21334
 
23426
  return;
23427
  }
23428
 
23429
+ if (
23430
+ $this->is_addon() &&
23431
+ ! $this->is_only_premium() &&
23432
+ $this->_parent->is_anonymous()
23433
+ ) {
23434
+ return;
23435
+ }
23436
+
23437
  if ( fs_is_network_admin() ) {
23438
  if ( ! $this->_is_network_active ) {
23439
  // Don't add tracking links when browsing the network WP Admin and the plugin is not network active.
freemius/includes/class-fs-admin-notices.php CHANGED
File without changes
freemius/includes/class-fs-api.php CHANGED
File without changes
freemius/includes/class-fs-logger.php CHANGED
@@ -142,7 +142,7 @@
142
  return $this->_file_start;
143
  }
144
 
145
- private function _log( &$message, $type = 'log', $wrapper ) {
146
  if ( ! $this->is_on() ) {
147
  return;
148
  }
@@ -688,4 +688,4 @@ KEY `type` (`type` ASC))" );
688
  }
689
 
690
  #endregion
691
- }
142
  return $this->_file_start;
143
  }
144
 
145
+ private function _log( &$message, $type, $wrapper = false ) {
146
  if ( ! $this->is_on() ) {
147
  return;
148
  }
688
  }
689
 
690
  #endregion
691
+ }
freemius/includes/class-fs-options.php CHANGED
File without changes
freemius/includes/class-fs-plugin-updater.php CHANGED
File without changes
freemius/includes/class-fs-security.php CHANGED
File without changes
freemius/includes/class-fs-storage.php CHANGED
File without changes
freemius/includes/class-fs-user-lock.php CHANGED
File without changes
freemius/includes/customizer/class-fs-customizer-support-section.php CHANGED
File without changes
freemius/includes/customizer/class-fs-customizer-upsell-control.php CHANGED
File without changes
freemius/includes/customizer/index.php CHANGED
File without changes
freemius/includes/debug/class-fs-debug-bar-panel.php CHANGED
File without changes
freemius/includes/debug/debug-bar-start.php CHANGED
File without changes
freemius/includes/debug/index.php CHANGED
File without changes
freemius/includes/entities/class-fs-affiliate-terms.php CHANGED
File without changes
freemius/includes/entities/class-fs-affiliate.php CHANGED
File without changes
freemius/includes/entities/class-fs-billing.php CHANGED
File without changes
freemius/includes/entities/class-fs-entity.php CHANGED
File without changes
freemius/includes/entities/class-fs-payment.php CHANGED
File without changes
freemius/includes/entities/class-fs-plugin-info.php CHANGED
File without changes
freemius/includes/entities/class-fs-plugin-license.php CHANGED
File without changes
freemius/includes/entities/class-fs-plugin-plan.php CHANGED
File without changes
freemius/includes/entities/class-fs-plugin-tag.php CHANGED
File without changes
freemius/includes/entities/class-fs-plugin.php CHANGED
File without changes
freemius/includes/entities/class-fs-pricing.php CHANGED
File without changes
freemius/includes/entities/class-fs-scope-entity.php CHANGED
File without changes
freemius/includes/entities/class-fs-site.php CHANGED
@@ -102,6 +102,14 @@
102
  * @var bool
103
  */
104
  public $is_uninstalled = false;
 
 
 
 
 
 
 
 
105
 
106
  /**
107
  * @param stdClass|bool $site
@@ -233,4 +241,13 @@
233
  function is_tracking_prohibited() {
234
  return ! $this->is_tracking_allowed();
235
  }
 
 
 
 
 
 
 
 
 
236
  }
102
  * @var bool
103
  */
104
  public $is_uninstalled = false;
105
+ /**
106
+ * @author Edgar Melkonyan
107
+ *
108
+ * @since 2.4.2
109
+ *
110
+ * @var bool
111
+ */
112
+ public $is_beta;
113
 
114
  /**
115
  * @param stdClass|bool $site
241
  function is_tracking_prohibited() {
242
  return ! $this->is_tracking_allowed();
243
  }
244
+
245
+ /**
246
+ * @author Edgar Melkonyan
247
+ *
248
+ * @return bool
249
+ */
250
+ function is_beta() {
251
+ return ( isset( $this->is_beta ) && true === $this->is_beta );
252
+ }
253
  }
freemius/includes/entities/class-fs-subscription.php CHANGED
File without changes
freemius/includes/entities/class-fs-user.php CHANGED
@@ -31,13 +31,6 @@
31
  */
32
  public $is_verified;
33
  /**
34
- * @author Leo Fajardo (@leorw)
35
- * @since 2.3.0
36
- *
37
- * @var bool
38
- */
39
- public $is_beta;
40
- /**
41
  * @var string|null
42
  */
43
  public $customer_id;
@@ -63,16 +56,6 @@
63
  return ( isset( $this->is_verified ) && true === $this->is_verified );
64
  }
65
 
66
- /**
67
- * @author Leo Fajardo (@leorw)
68
- * @since 2.3.0
69
- *
70
- * @return bool
71
- */
72
- function is_beta() {
73
- return ( isset( $this->is_beta ) && true === $this->is_beta );
74
- }
75
-
76
  static function get_type() {
77
  return 'user';
78
  }
31
  */
32
  public $is_verified;
33
  /**
 
 
 
 
 
 
 
34
  * @var string|null
35
  */
36
  public $customer_id;
56
  return ( isset( $this->is_verified ) && true === $this->is_verified );
57
  }
58
 
 
 
 
 
 
 
 
 
 
 
59
  static function get_type() {
60
  return 'user';
61
  }
freemius/includes/entities/index.php CHANGED
File without changes
freemius/includes/fs-core-functions.php CHANGED
File without changes
freemius/includes/fs-essential-functions.php CHANGED
File without changes
freemius/includes/fs-plugin-info-dialog.php CHANGED
File without changes
freemius/includes/i18n.php CHANGED
File without changes
freemius/includes/index.php CHANGED
File without changes
freemius/includes/l10n.php CHANGED
File without changes
freemius/includes/managers/class-fs-admin-menu-manager.php CHANGED
File without changes
freemius/includes/managers/class-fs-admin-notice-manager.php CHANGED
File without changes
freemius/includes/managers/class-fs-cache-manager.php CHANGED
File without changes
freemius/includes/managers/class-fs-gdpr-manager.php CHANGED
File without changes
freemius/includes/managers/class-fs-key-value-storage.php CHANGED
File without changes
freemius/includes/managers/class-fs-license-manager.php CHANGED
File without changes
freemius/includes/managers/class-fs-option-manager.php CHANGED
File without changes
freemius/includes/managers/class-fs-plan-manager.php CHANGED
File without changes
freemius/includes/managers/class-fs-plugin-manager.php CHANGED
File without changes
freemius/includes/managers/index.php CHANGED
File without changes
freemius/includes/sdk/Exceptions/ArgumentNotExistException.php CHANGED
File without changes
freemius/includes/sdk/Exceptions/EmptyArgumentException.php CHANGED
File without changes
freemius/includes/sdk/Exceptions/Exception.php CHANGED
File without changes
freemius/includes/sdk/Exceptions/InvalidArgumentException.php CHANGED
File without changes
freemius/includes/sdk/Exceptions/OAuthException.php CHANGED
File without changes
freemius/includes/sdk/Exceptions/index.php CHANGED
File without changes
freemius/includes/sdk/FreemiusBase.php CHANGED
File without changes
freemius/includes/sdk/FreemiusWordPress.php CHANGED
File without changes
freemius/includes/sdk/LICENSE.txt CHANGED
File without changes
freemius/includes/sdk/index.php CHANGED
File without changes
freemius/includes/supplements/fs-essential-functions-1.1.7.1.php CHANGED
File without changes
freemius/includes/supplements/fs-essential-functions-2.2.1.php CHANGED
File without changes
freemius/includes/supplements/index.php CHANGED
File without changes
freemius/index.php CHANGED
File without changes
freemius/languages/freemius-cs_CZ.mo CHANGED
Binary file
freemius/languages/freemius-da_DK.mo CHANGED
Binary file
freemius/languages/freemius-en.mo CHANGED
Binary file
freemius/languages/freemius-es_ES.mo CHANGED
Binary file
freemius/languages/freemius-fr_FR.mo CHANGED
Binary file
freemius/languages/freemius-he_IL.mo CHANGED
Binary file
freemius/languages/freemius-hu_HU.mo CHANGED
Binary file
freemius/languages/freemius-it_IT.mo CHANGED
Binary file
freemius/languages/freemius-ja.mo CHANGED
Binary file
freemius/languages/freemius-nl_NL.mo CHANGED
Binary file
freemius/languages/freemius-ru_RU.mo CHANGED
Binary file
freemius/languages/freemius-ta.mo CHANGED
Binary file
freemius/languages/freemius-zh_CN.mo CHANGED
Binary file
freemius/languages/freemius.pot CHANGED
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2020 freemius
2
  # This file is distributed under the same license as the freemius package.
3
  msgid ""
4
  msgstr ""
@@ -16,795 +16,795 @@ msgstr ""
16
  "X-Poedit-SourceCharset: UTF-8\n"
17
  "Plural-Forms: nplurals=2; plural=(n != 1);\n"
18
 
19
- #: includes/class-freemius.php:1912, templates/account.php:910
20
  msgid "An update to a Beta version will replace your installed version of %s with the latest Beta release - use with caution, and not on production sites. You have been warned."
21
  msgstr ""
22
 
23
- #: includes/class-freemius.php:1919
24
  msgid "Would you like to proceed with the update?"
25
  msgstr ""
26
 
27
- #: includes/class-freemius.php:2131
28
  msgid "Freemius SDK couldn't find the plugin's main file. Please contact sdk@freemius.com with the current error."
29
  msgstr ""
30
 
31
- #: includes/class-freemius.php:2133
32
  msgid "Error"
33
  msgstr ""
34
 
35
- #: includes/class-freemius.php:2533
36
  msgid "I found a better %s"
37
  msgstr ""
38
 
39
- #: includes/class-freemius.php:2535
40
  msgid "What's the %s's name?"
41
  msgstr ""
42
 
43
- #: includes/class-freemius.php:2541
44
  msgid "It's a temporary %s. I'm just debugging an issue."
45
  msgstr ""
46
 
47
- #: includes/class-freemius.php:2543
48
  msgid "Deactivation"
49
  msgstr ""
50
 
51
- #: includes/class-freemius.php:2544
52
  msgid "Theme Switch"
53
  msgstr ""
54
 
55
- #: includes/class-freemius.php:2553, templates/forms/resend-key.php:24, templates/forms/user-change.php:29
56
  msgid "Other"
57
  msgstr ""
58
 
59
- #: includes/class-freemius.php:2561
60
  msgid "I no longer need the %s"
61
  msgstr ""
62
 
63
- #: includes/class-freemius.php:2568
64
  msgid "I only needed the %s for a short period"
65
  msgstr ""
66
 
67
- #: includes/class-freemius.php:2574
68
  msgid "The %s broke my site"
69
  msgstr ""
70
 
71
- #: includes/class-freemius.php:2581
72
  msgid "The %s suddenly stopped working"
73
  msgstr ""
74
 
75
- #: includes/class-freemius.php:2591
76
  msgid "I can't pay for it anymore"
77
  msgstr ""
78
 
79
- #: includes/class-freemius.php:2593
80
  msgid "What price would you feel comfortable paying?"
81
  msgstr ""
82
 
83
- #: includes/class-freemius.php:2599
84
  msgid "I don't like to share my information with you"
85
  msgstr ""
86
 
87
- #: includes/class-freemius.php:2620
88
  msgid "The %s didn't work"
89
  msgstr ""
90
 
91
- #: includes/class-freemius.php:2630
92
  msgid "I couldn't understand how to make it work"
93
  msgstr ""
94
 
95
- #: includes/class-freemius.php:2638
96
  msgid "The %s is great, but I need specific feature that you don't support"
97
  msgstr ""
98
 
99
- #: includes/class-freemius.php:2640
100
  msgid "What feature?"
101
  msgstr ""
102
 
103
- #: includes/class-freemius.php:2644
104
  msgid "The %s is not working"
105
  msgstr ""
106
 
107
- #: includes/class-freemius.php:2646
108
  msgid "Kindly share what didn't work so we can fix it for future users..."
109
  msgstr ""
110
 
111
- #: includes/class-freemius.php:2650
112
  msgid "It's not what I was looking for"
113
  msgstr ""
114
 
115
- #: includes/class-freemius.php:2652
116
  msgid "What you've been looking for?"
117
  msgstr ""
118
 
119
- #: includes/class-freemius.php:2656
120
  msgid "The %s didn't work as expected"
121
  msgstr ""
122
 
123
- #: includes/class-freemius.php:2658
124
  msgid "What did you expect?"
125
  msgstr ""
126
 
127
- #: includes/class-freemius.php:3513, templates/debug.php:20
128
  msgid "Freemius Debug"
129
  msgstr ""
130
 
131
- #: includes/class-freemius.php:4265
132
  msgid "I don't know what is cURL or how to install it, help me!"
133
  msgstr ""
134
 
135
- #: includes/class-freemius.php:4267
136
  msgid "We'll make sure to contact your hosting company and resolve the issue. You will get a follow-up email to %s once we have an update."
137
  msgstr ""
138
 
139
- #: includes/class-freemius.php:4274
140
  msgid "Great, please install cURL and enable it in your php.ini file. In addition, search for the 'disable_functions' directive in your php.ini file and remove any disabled methods starting with 'curl_'. To make sure it was successfully activated, use 'phpinfo()'. Once activated, deactivate the %s and reactivate it back again."
141
  msgstr ""
142
 
143
- #: includes/class-freemius.php:4379
144
  msgid "Yes - do your thing"
145
  msgstr ""
146
 
147
- #: includes/class-freemius.php:4384
148
  msgid "No - just deactivate"
149
  msgstr ""
150
 
151
- #: includes/class-freemius.php:4429, includes/class-freemius.php:4923, includes/class-freemius.php:6182, includes/class-freemius.php:13357, includes/class-freemius.php:14075, includes/class-freemius.php:17526, includes/class-freemius.php:17631, includes/class-freemius.php:17806, includes/class-freemius.php:20040, includes/class-freemius.php:20398, includes/class-freemius.php:20408, includes/class-freemius.php:21079, includes/class-freemius.php:21985, includes/class-freemius.php:22118, includes/class-freemius.php:22274, templates/add-ons.php:57
152
  msgctxt "exclamation"
153
  msgid "Oops"
154
  msgstr ""
155
 
156
- #: includes/class-freemius.php:4498
157
  msgid "Thank for giving us the chance to fix it! A message was just sent to our technical staff. We will get back to you as soon as we have an update to %s. Appreciate your patience."
158
  msgstr ""
159
 
160
- #: includes/class-freemius.php:4920
161
  msgctxt "addonX cannot run without pluginY"
162
  msgid "%s cannot run without %s."
163
  msgstr ""
164
 
165
- #: includes/class-freemius.php:4921
166
  msgctxt "addonX cannot run..."
167
  msgid "%s cannot run without the plugin."
168
  msgstr ""
169
 
170
- #: includes/class-freemius.php:5120, includes/class-freemius.php:5145, includes/class-freemius.php:21150
171
  msgid "Unexpected API error. Please contact the %s's author with the following error."
172
  msgstr ""
173
 
174
- #: includes/class-freemius.php:5848
175
  msgid "Premium %s version was successfully activated."
176
  msgstr ""
177
 
178
- #: includes/class-freemius.php:5860, includes/class-freemius.php:7762
179
  msgctxt "Used to express elation, enthusiasm, or triumph (especially in electronic communication)."
180
  msgid "W00t"
181
  msgstr ""
182
 
183
- #: includes/class-freemius.php:5875
184
  msgid "You have a %s license."
185
  msgstr ""
186
 
187
- #: includes/class-freemius.php:5879, includes/class-freemius.php:16925, includes/class-freemius.php:16936, includes/class-freemius.php:20309, includes/class-freemius.php:20659, includes/class-freemius.php:20728, includes/class-freemius.php:20900
188
  msgctxt "interjection expressing joy or exuberance"
189
  msgid "Yee-haw"
190
  msgstr ""
191
 
192
- #: includes/class-freemius.php:6165
193
  msgid "%s free trial was successfully cancelled. Since the add-on is premium only it was automatically deactivated. If you like to use it in the future, you'll have to purchase a license."
194
  msgstr ""
195
 
196
- #: includes/class-freemius.php:6169
197
  msgid "%s is a premium only add-on. You have to purchase a license first before activating the plugin."
198
  msgstr ""
199
 
200
- #: includes/class-freemius.php:6178, templates/add-ons.php:186, templates/account/partials/addon.php:381
201
  msgid "More information about %s"
202
  msgstr ""
203
 
204
- #: includes/class-freemius.php:6179
205
  msgid "Purchase License"
206
  msgstr ""
207
 
208
- #: includes/class-freemius.php:7118, templates/connect.php:171
209
  msgid "You should receive an activation email for %s to your mailbox at %s. Please make sure you click the activation button in that email to %s."
210
  msgstr ""
211
 
212
- #: includes/class-freemius.php:7122
213
  msgid "start the trial"
214
  msgstr ""
215
 
216
- #: includes/class-freemius.php:7123, templates/connect.php:175
217
  msgid "complete the install"
218
  msgstr ""
219
 
220
- #: includes/class-freemius.php:7241
221
  msgid "You are just one step away - %s"
222
  msgstr ""
223
 
224
- #: includes/class-freemius.php:7244
225
  msgctxt "%s - plugin name. As complete \"PluginX\" activation now"
226
  msgid "Complete \"%s\" Activation Now"
227
  msgstr ""
228
 
229
- #: includes/class-freemius.php:7322
230
  msgid "We made a few tweaks to the %s, %s"
231
  msgstr ""
232
 
233
- #: includes/class-freemius.php:7326
234
  msgid "Opt in to make \"%s\" better!"
235
  msgstr ""
236
 
237
- #: includes/class-freemius.php:7761
238
  msgid "The upgrade of %s was successfully completed."
239
  msgstr ""
240
 
241
- #: includes/class-freemius.php:10243, includes/class-fs-plugin-updater.php:1099, includes/class-fs-plugin-updater.php:1294, includes/class-fs-plugin-updater.php:1301, templates/auto-installation.php:32
242
  msgid "Add-On"
243
  msgstr ""
244
 
245
- #: includes/class-freemius.php:10245, templates/account.php:392, templates/account.php:400, templates/debug.php:358, templates/debug.php:549
246
  msgid "Plugin"
247
  msgstr ""
248
 
249
- #: includes/class-freemius.php:10246, templates/account.php:393, templates/account.php:401, templates/debug.php:358, templates/debug.php:549, templates/forms/deactivation/form.php:71
250
  msgid "Theme"
251
  msgstr ""
252
 
253
- #: includes/class-freemius.php:13176
254
  msgid "An unknown error has occurred while trying to toggle the license's white-label mode."
255
  msgstr ""
256
 
257
- #: includes/class-freemius.php:13190
258
  msgid "Your %s license was flagged as white-labeled to hide sensitive information from the WP Admin (e.g. your email, license key, prices, billing address & invoices). If you ever wish to revert it back, you can easily do it through your %s. If this was a mistake you can also %s."
259
  msgstr ""
260
 
261
- #: includes/class-freemius.php:13195
262
  msgid "User Dashboard"
263
  msgstr ""
264
 
265
- #: includes/class-freemius.php:13196
266
  msgid "revert it now"
267
  msgstr ""
268
 
269
- #: includes/class-freemius.php:13255
270
  msgid "An unknown error has occurred while trying to set the user's beta mode."
271
  msgstr ""
272
 
273
- #: includes/class-freemius.php:13328
274
  msgid "Invalid new user ID or email address."
275
  msgstr ""
276
 
277
- #: includes/class-freemius.php:13358, includes/class-freemius.php:22229
278
  msgid "Sorry, we could not complete the email update. Another user with the same email is already registered."
279
  msgstr ""
280
 
281
- #: includes/class-freemius.php:13359, includes/class-freemius.php:22230
282
  msgid "If you would like to give up the ownership of the %s's account to %s click the Change Ownership button."
283
  msgstr ""
284
 
285
- #: includes/class-freemius.php:13366, includes/class-freemius.php:22237
286
  msgid "Change Ownership"
287
  msgstr ""
288
 
289
- #: includes/class-freemius.php:13942
290
  msgid "Invalid site details collection."
291
  msgstr ""
292
 
293
- #: includes/class-freemius.php:14062
294
  msgid "We couldn't find your email address in the system, are you sure it's the right address?"
295
  msgstr ""
296
 
297
- #: includes/class-freemius.php:14064
298
  msgid "We can't see any active licenses associated with that email address, are you sure it's the right address?"
299
  msgstr ""
300
 
301
- #: includes/class-freemius.php:14338
302
  msgid "Account is pending activation."
303
  msgstr ""
304
 
305
- #: includes/class-freemius.php:14450, templates/forms/premium-versions-upgrade-handler.php:47
306
  msgid "Buy a license now"
307
  msgstr ""
308
 
309
- #: includes/class-freemius.php:14462, templates/forms/premium-versions-upgrade-handler.php:46
310
  msgid "Renew your license now"
311
  msgstr ""
312
 
313
- #: includes/class-freemius.php:14466
314
  msgid "%s to access version %s security & feature updates, and support."
315
  msgstr ""
316
 
317
- #: includes/class-freemius.php:16907
318
  msgid "%s activation was successfully completed."
319
  msgstr ""
320
 
321
- #: includes/class-freemius.php:16921
322
  msgid "Your account was successfully activated with the %s plan."
323
  msgstr ""
324
 
325
- #: includes/class-freemius.php:16932, includes/class-freemius.php:20724
326
  msgid "Your trial has been successfully started."
327
  msgstr ""
328
 
329
- #: includes/class-freemius.php:17524, includes/class-freemius.php:17629, includes/class-freemius.php:17804
330
  msgid "Couldn't activate %s."
331
  msgstr ""
332
 
333
- #: includes/class-freemius.php:17525, includes/class-freemius.php:17630, includes/class-freemius.php:17805
334
  msgid "Please contact us with the following message:"
335
  msgstr ""
336
 
337
- #: includes/class-freemius.php:17626, templates/forms/data-debug-mode.php:162
338
  msgid "An unknown error has occurred."
339
  msgstr ""
340
 
341
- #: includes/class-freemius.php:18162, includes/class-freemius.php:23310
342
  msgid "Upgrade"
343
  msgstr ""
344
 
345
- #: includes/class-freemius.php:18168
346
  msgid "Start Trial"
347
  msgstr ""
348
 
349
- #: includes/class-freemius.php:18170
350
  msgid "Pricing"
351
  msgstr ""
352
 
353
- #: includes/class-freemius.php:18250, includes/class-freemius.php:18252
354
  msgid "Affiliation"
355
  msgstr ""
356
 
357
- #: includes/class-freemius.php:18280, includes/class-freemius.php:18282, templates/account.php:240, templates/debug.php:324
358
  msgid "Account"
359
  msgstr ""
360
 
361
- #: includes/class-freemius.php:18296, includes/class-freemius.php:18298, includes/customizer/class-fs-customizer-support-section.php:60
362
  msgid "Contact Us"
363
  msgstr ""
364
 
365
- #: includes/class-freemius.php:18309, includes/class-freemius.php:18311, includes/class-freemius.php:23324, templates/account.php:119, templates/account/partials/addon.php:44
366
  msgid "Add-Ons"
367
  msgstr ""
368
 
369
- #: includes/class-freemius.php:18345
370
  msgctxt "ASCII arrow left icon"
371
  msgid "&#x2190;"
372
  msgstr ""
373
 
374
- #: includes/class-freemius.php:18345
375
  msgctxt "ASCII arrow right icon"
376
  msgid "&#x27a4;"
377
  msgstr ""
378
 
379
- #: includes/class-freemius.php:18347, templates/pricing.php:109
380
  msgctxt "noun"
381
  msgid "Pricing"
382
  msgstr ""
383
 
384
- #: includes/class-freemius.php:18560, includes/customizer/class-fs-customizer-support-section.php:67
385
  msgid "Support Forum"
386
  msgstr ""
387
 
388
- #: includes/class-freemius.php:19534
389
  msgid "Your email has been successfully verified - you are AWESOME!"
390
  msgstr ""
391
 
392
- #: includes/class-freemius.php:19535
393
  msgctxt "a positive response"
394
  msgid "Right on"
395
  msgstr ""
396
 
397
- #: includes/class-freemius.php:20041
398
  msgid "seems like the key you entered doesn't match our records."
399
  msgstr ""
400
 
401
- #: includes/class-freemius.php:20065
402
  msgid "Debug mode was successfully enabled and will be automatically disabled in 60 min. You can also disable it earlier by clicking the \"Stop Debug\" link."
403
  msgstr ""
404
 
405
- #: includes/class-freemius.php:20300
406
  msgid "Your %s Add-on plan was successfully upgraded."
407
  msgstr ""
408
 
409
- #: includes/class-freemius.php:20302
410
  msgid "%s Add-on was successfully purchased."
411
  msgstr ""
412
 
413
- #: includes/class-freemius.php:20305
414
  msgid "Download the latest version"
415
  msgstr ""
416
 
417
- #: includes/class-freemius.php:20391
418
  msgid "Your server is blocking the access to Freemius' API, which is crucial for %1$s synchronization. Please contact your host to whitelist %2$s"
419
  msgstr ""
420
 
421
- #: includes/class-freemius.php:20397, includes/class-freemius.php:20407, includes/class-freemius.php:20859, includes/class-freemius.php:20948
422
  msgid "Error received from the server:"
423
  msgstr ""
424
 
425
- #: includes/class-freemius.php:20407
426
  msgid "It seems like one of the authentication parameters is wrong. Update your Public Key, Secret Key & User ID, and try again."
427
  msgstr ""
428
 
429
- #: includes/class-freemius.php:20621, includes/class-freemius.php:20864, includes/class-freemius.php:20919, includes/class-freemius.php:21026
430
  msgctxt "something somebody says when they are thinking about what you have just said."
431
  msgid "Hmm"
432
  msgstr ""
433
 
434
- #: includes/class-freemius.php:20634
435
  msgid "It looks like you are still on the %s plan. If you did upgrade or change your plan, it's probably an issue on our side - sorry."
436
  msgstr ""
437
 
438
- #: includes/class-freemius.php:20635, templates/account.php:121, templates/add-ons.php:250, templates/account/partials/addon.php:46
439
  msgctxt "trial period"
440
  msgid "Trial"
441
  msgstr ""
442
 
443
- #: includes/class-freemius.php:20640
444
  msgid "I have upgraded my account but when I try to Sync the License, the plan remains %s."
445
  msgstr ""
446
 
447
- #: includes/class-freemius.php:20644, includes/class-freemius.php:20703
448
  msgid "Please contact us here"
449
  msgstr ""
450
 
451
- #: includes/class-freemius.php:20655
452
  msgid "Your plan was successfully activated."
453
  msgstr ""
454
 
455
- #: includes/class-freemius.php:20656
456
  msgid "Your plan was successfully upgraded."
457
  msgstr ""
458
 
459
- #: includes/class-freemius.php:20673
460
  msgid "Your plan was successfully changed to %s."
461
  msgstr ""
462
 
463
- #: includes/class-freemius.php:20689
464
  msgid "Your license has expired. You can still continue using the free %s forever."
465
  msgstr ""
466
 
467
- #: includes/class-freemius.php:20691
468
  msgid "Your license has expired. %1$sUpgrade now%2$s to continue using the %3$s without interruptions."
469
  msgstr ""
470
 
471
- #: includes/class-freemius.php:20699
472
  msgid "Your license has been cancelled. If you think it's a mistake, please contact support."
473
  msgstr ""
474
 
475
- #: includes/class-freemius.php:20712
476
  msgid "Your license has expired. You can still continue using all the %s features, but you'll need to renew your license to continue getting updates and support."
477
  msgstr ""
478
 
479
- #: includes/class-freemius.php:20738
480
  msgid "Your free trial has expired. You can still continue using all our free features."
481
  msgstr ""
482
 
483
- #: includes/class-freemius.php:20740
484
  msgid "Your free trial has expired. %1$sUpgrade now%2$s to continue using the %3$s without interruptions."
485
  msgstr ""
486
 
487
- #: includes/class-freemius.php:20855
488
  msgid "It looks like the license could not be activated."
489
  msgstr ""
490
 
491
- #: includes/class-freemius.php:20897
492
  msgid "Your license was successfully activated."
493
  msgstr ""
494
 
495
- #: includes/class-freemius.php:20923
496
  msgid "It looks like your site currently doesn't have an active license."
497
  msgstr ""
498
 
499
- #: includes/class-freemius.php:20947
500
  msgid "It looks like the license deactivation failed."
501
  msgstr ""
502
 
503
- #: includes/class-freemius.php:20976
504
  msgid "Your %s license was successfully deactivated."
505
  msgstr ""
506
 
507
- #: includes/class-freemius.php:20977
508
  msgid "Your license was successfully deactivated, you are back to the %s plan."
509
  msgstr ""
510
 
511
- #: includes/class-freemius.php:20980
512
  msgid "O.K"
513
  msgstr ""
514
 
515
- #: includes/class-freemius.php:21033
516
  msgid "Seems like we are having some temporary issue with your subscription cancellation. Please try again in few minutes."
517
  msgstr ""
518
 
519
- #: includes/class-freemius.php:21042
520
  msgid "Your subscription was successfully cancelled. Your %s plan license will expire in %s."
521
  msgstr ""
522
 
523
- #: includes/class-freemius.php:21084
524
  msgid "You are already running the %s in a trial mode."
525
  msgstr ""
526
 
527
- #: includes/class-freemius.php:21095
528
  msgid "You already utilized a trial before."
529
  msgstr ""
530
 
531
- #: includes/class-freemius.php:21109
532
  msgid "Plan %s do not exist, therefore, can't start a trial."
533
  msgstr ""
534
 
535
- #: includes/class-freemius.php:21120
536
  msgid "Plan %s does not support a trial period."
537
  msgstr ""
538
 
539
- #: includes/class-freemius.php:21131
540
  msgid "None of the %s's plans supports a trial period."
541
  msgstr ""
542
 
543
- #: includes/class-freemius.php:21181
544
  msgid "It looks like you are not in trial mode anymore so there's nothing to cancel :)"
545
  msgstr ""
546
 
547
- #: includes/class-freemius.php:21217
548
  msgid "Seems like we are having some temporary issue with your trial cancellation. Please try again in few minutes."
549
  msgstr ""
550
 
551
- #: includes/class-freemius.php:21236
552
  msgid "Your %s free trial was successfully cancelled."
553
  msgstr ""
554
 
555
- #: includes/class-freemius.php:21552
556
  msgid "Version %s was released."
557
  msgstr ""
558
 
559
- #: includes/class-freemius.php:21552
560
  msgid "Please download %s."
561
  msgstr ""
562
 
563
- #: includes/class-freemius.php:21559
564
  msgid "the latest %s version here"
565
  msgstr ""
566
 
567
- #: includes/class-freemius.php:21564
568
  msgid "New"
569
  msgstr ""
570
 
571
- #: includes/class-freemius.php:21569
572
  msgid "Seems like you got the latest release."
573
  msgstr ""
574
 
575
- #: includes/class-freemius.php:21570
576
  msgid "You are all good!"
577
  msgstr ""
578
 
579
- #: includes/class-freemius.php:21873
580
  msgid "Verification mail was just sent to %s. If you can't find it after 5 min, please check your spam box."
581
  msgstr ""
582
 
583
- #: includes/class-freemius.php:22013
584
  msgid "Site successfully opted in."
585
  msgstr ""
586
 
587
- #: includes/class-freemius.php:22014, includes/class-freemius.php:23020
588
  msgid "Awesome"
589
  msgstr ""
590
 
591
- #: includes/class-freemius.php:22030, templates/forms/optout.php:41
592
  msgid "We appreciate your help in making the %s better by letting us track some usage data."
593
  msgstr ""
594
 
595
- #: includes/class-freemius.php:22031
596
  msgid "Thank you!"
597
  msgstr ""
598
 
599
- #: includes/class-freemius.php:22038
600
  msgid "We will no longer be sending any usage data of %s on %s to %s."
601
  msgstr ""
602
 
603
- #: includes/class-freemius.php:22196
604
  msgid "Please check your mailbox, you should receive an email via %s to confirm the ownership change. From security reasons, you must confirm the change within the next 15 min. If you cannot find the email, please check your spam folder."
605
  msgstr ""
606
 
607
- #: includes/class-freemius.php:22202
608
  msgid "Thanks for confirming the ownership change. An email was just sent to %s for final approval."
609
  msgstr ""
610
 
611
- #: includes/class-freemius.php:22207
612
  msgid "%s is the new owner of the account."
613
  msgstr ""
614
 
615
- #: includes/class-freemius.php:22209
616
  msgctxt "as congratulations"
617
  msgid "Congrats"
618
  msgstr ""
619
 
620
- #: includes/class-freemius.php:22245
621
  msgid "Your email was successfully updated. You should receive an email with confirmation instructions in few moments."
622
  msgstr ""
623
 
624
- #: includes/class-freemius.php:22257
625
  msgid "Please provide your full name."
626
  msgstr ""
627
 
628
- #: includes/class-freemius.php:22262
629
  msgid "Your name was successfully updated."
630
  msgstr ""
631
 
632
- #: includes/class-freemius.php:22323
633
  msgid "You have successfully updated your %s."
634
  msgstr ""
635
 
636
- #: includes/class-freemius.php:22382
637
  msgid "Is this your client's site? %s if you wish to hide sensitive info like your email, license key, prices, billing address & invoices from the WP Admin."
638
  msgstr ""
639
 
640
- #: includes/class-freemius.php:22385
641
  msgid "Click here"
642
  msgstr ""
643
 
644
- #: includes/class-freemius.php:22483
645
  msgid "Just letting you know that the add-ons information of %s is being pulled from an external server."
646
  msgstr ""
647
 
648
- #: includes/class-freemius.php:22484
649
  msgctxt "advance notice of something that will need attention."
650
  msgid "Heads up"
651
  msgstr ""
652
 
653
- #: includes/class-freemius.php:23060
654
  msgctxt "exclamation"
655
  msgid "Hey"
656
  msgstr ""
657
 
658
- #: includes/class-freemius.php:23060
659
  msgid "How do you like %s so far? Test all our %s premium features with a %d-day free trial."
660
  msgstr ""
661
 
662
- #: includes/class-freemius.php:23068
663
  msgid "No commitment for %s days - cancel anytime!"
664
  msgstr ""
665
 
666
- #: includes/class-freemius.php:23069
667
  msgid "No credit card required"
668
  msgstr ""
669
 
670
- #: includes/class-freemius.php:23076, templates/forms/trial-start.php:53
671
  msgctxt "call to action"
672
  msgid "Start free trial"
673
  msgstr ""
674
 
675
- #: includes/class-freemius.php:23153
676
  msgid "Hey there, did you know that %s has an affiliate program? If you like the %s you can become our ambassador and earn some cash!"
677
  msgstr ""
678
 
679
- #: includes/class-freemius.php:23162
680
  msgid "Learn more"
681
  msgstr ""
682
 
683
- #: includes/class-freemius.php:23348, templates/account.php:556, templates/account.php:706, templates/connect.php:179, templates/connect.php:456, templates/forms/license-activation.php:27, templates/account/partials/addon.php:321
684
  msgid "Activate License"
685
  msgstr ""
686
 
687
- #: includes/class-freemius.php:23349, templates/account.php:650, templates/account.php:705, templates/account/partials/addon.php:322, templates/account/partials/site.php:271
688
  msgid "Change License"
689
  msgstr ""
690
 
691
- #: includes/class-freemius.php:23462, templates/account/partials/site.php:169
692
  msgid "Opt Out"
693
  msgstr ""
694
 
695
- #: includes/class-freemius.php:23464, includes/class-freemius.php:23470, templates/account/partials/site.php:49, templates/account/partials/site.php:169
696
  msgid "Opt In"
697
  msgstr ""
698
 
699
- #: includes/class-freemius.php:23700
700
  msgid " The paid version of %1$s is already installed. Please activate it to start benefiting the %2$s features. %3$s"
701
  msgstr ""
702
 
703
- #: includes/class-freemius.php:23708
704
  msgid "Activate %s features"
705
  msgstr ""
706
 
707
- #: includes/class-freemius.php:23721
708
  msgid "Please follow these steps to complete the upgrade"
709
  msgstr ""
710
 
711
- #: includes/class-freemius.php:23725
712
  msgid "Download the latest %s version"
713
  msgstr ""
714
 
715
- #: includes/class-freemius.php:23729
716
  msgid "Upload and activate the downloaded version"
717
  msgstr ""
718
 
719
- #: includes/class-freemius.php:23731
720
  msgid "How to upload and activate?"
721
  msgstr ""
722
 
723
- #: includes/class-freemius.php:23865
724
  msgid "%sClick here%s to choose the sites where you'd like to activate the license on."
725
  msgstr ""
726
 
727
- #: includes/class-freemius.php:24034
728
  msgid "Auto installation only works for opted-in users."
729
  msgstr ""
730
 
731
- #: includes/class-freemius.php:24044, includes/class-freemius.php:24077, includes/class-fs-plugin-updater.php:1273, includes/class-fs-plugin-updater.php:1287
732
  msgid "Invalid module ID."
733
  msgstr ""
734
 
735
- #: includes/class-freemius.php:24053, includes/class-fs-plugin-updater.php:1309
736
  msgid "Premium version already active."
737
  msgstr ""
738
 
739
- #: includes/class-freemius.php:24060
740
  msgid "You do not have a valid license to access the premium version."
741
  msgstr ""
742
 
743
- #: includes/class-freemius.php:24067
744
  msgid "Plugin is a \"Serviceware\" which means it does not have a premium code version."
745
  msgstr ""
746
 
747
- #: includes/class-freemius.php:24085, includes/class-fs-plugin-updater.php:1308
748
  msgid "Premium add-on version already installed."
749
  msgstr ""
750
 
751
- #: includes/class-freemius.php:24435
752
  msgid "View paid features"
753
  msgstr ""
754
 
755
- #: includes/class-freemius.php:24757
756
  msgid "Thank you so much for using %s and its add-ons!"
757
  msgstr ""
758
 
759
- #: includes/class-freemius.php:24758
760
  msgid "Thank you so much for using %s!"
761
  msgstr ""
762
 
763
- #: includes/class-freemius.php:24764
764
  msgid "You've already opted-in to our usage-tracking, which helps us keep improving the %s."
765
  msgstr ""
766
 
767
- #: includes/class-freemius.php:24768
768
  msgid "Thank you so much for using our products!"
769
  msgstr ""
770
 
771
- #: includes/class-freemius.php:24769
772
  msgid "You've already opted-in to our usage-tracking, which helps us keep improving them."
773
  msgstr ""
774
 
775
- #: includes/class-freemius.php:24788
776
  msgid "%s and its add-ons"
777
  msgstr ""
778
 
779
- #: includes/class-freemius.php:24797
780
  msgid "Products"
781
  msgstr ""
782
 
783
- #: includes/class-freemius.php:24804, templates/connect.php:280
784
  msgid "Yes"
785
  msgstr ""
786
 
787
- #: includes/class-freemius.php:24805, templates/connect.php:281
788
  msgid "send me security & feature updates, educational content and offers."
789
  msgstr ""
790
 
791
- #: includes/class-freemius.php:24806, templates/connect.php:286
792
  msgid "No"
793
  msgstr ""
794
 
795
- #: includes/class-freemius.php:24808, templates/connect.php:288
796
  msgid "do %sNOT%s send me security & feature updates, educational content and offers."
797
  msgstr ""
798
 
799
- #: includes/class-freemius.php:24818
800
  msgid "Due to the new %sEU General Data Protection Regulation (GDPR)%s compliance requirements it is required that you provide your explicit consent, again, confirming that you are onboard :-)"
801
  msgstr ""
802
 
803
- #: includes/class-freemius.php:24820, templates/connect.php:295
804
  msgid "Please let us know if you'd like us to contact you for security & feature updates, educational content, and occasional offers:"
805
  msgstr ""
806
 
807
- #: includes/class-freemius.php:25102
808
  msgid "License key is empty."
809
  msgstr ""
810
 
@@ -832,15 +832,15 @@ msgstr ""
832
  msgid "Important Upgrade Notice:"
833
  msgstr ""
834
 
835
- #: includes/class-fs-plugin-updater.php:1338
836
  msgid "Installing plugin: %s"
837
  msgstr ""
838
 
839
- #: includes/class-fs-plugin-updater.php:1379
840
  msgid "Unable to connect to the filesystem. Please confirm your credentials."
841
  msgstr ""
842
 
843
- #: includes/class-fs-plugin-updater.php:1561
844
  msgid "The remote plugin package does not contain a folder with the desired slug and renaming did not work."
845
  msgstr ""
846
 
@@ -861,7 +861,7 @@ msgstr ""
861
  msgid "Install Free Version Update Now"
862
  msgstr ""
863
 
864
- #: includes/fs-plugin-info-dialog.php:745, templates/account.php:639
865
  msgid "Install Update Now"
866
  msgstr ""
867
 
@@ -878,7 +878,7 @@ msgctxt "as download latest version"
878
  msgid "Download Latest Free Version"
879
  msgstr ""
880
 
881
- #: includes/fs-plugin-info-dialog.php:772, templates/account.php:99, templates/add-ons.php:37, templates/account/partials/addon.php:25
882
  msgctxt "as download latest version"
883
  msgid "Download Latest"
884
  msgstr ""
@@ -887,11 +887,11 @@ msgstr ""
887
  msgid "Activate this add-on"
888
  msgstr ""
889
 
890
- #: includes/fs-plugin-info-dialog.php:789, templates/connect.php:453
891
  msgid "Activate Free Version"
892
  msgstr ""
893
 
894
- #: includes/fs-plugin-info-dialog.php:790, templates/account.php:123, templates/add-ons.php:330, templates/account/partials/addon.php:48
895
  msgid "Activate"
896
  msgstr ""
897
 
@@ -1020,7 +1020,7 @@ msgstr ""
1020
  msgid "Details"
1021
  msgstr ""
1022
 
1023
- #: includes/fs-plugin-info-dialog.php:1318, templates/account.php:110, templates/debug.php:201, templates/debug.php:238, templates/debug.php:455, templates/account/partials/addon.php:36
1024
  msgctxt "product version"
1025
  msgid "Version"
1026
  msgstr ""
@@ -1034,7 +1034,7 @@ msgstr ""
1034
  msgid "Last Updated"
1035
  msgstr ""
1036
 
1037
- #: includes/fs-plugin-info-dialog.php:1337, templates/account.php:525
1038
  msgctxt "x-ago"
1039
  msgid "%s ago"
1040
  msgstr ""
@@ -1143,293 +1143,293 @@ msgstr ""
1143
  msgid "Latest Free Version Installed"
1144
  msgstr ""
1145
 
1146
- #: templates/account.php:100, templates/forms/subscription-cancellation.php:96, templates/account/partials/addon.php:26, templates/account/partials/site.php:311
1147
  msgid "Downgrading your plan"
1148
  msgstr ""
1149
 
1150
- #: templates/account.php:101, templates/forms/subscription-cancellation.php:97, templates/account/partials/addon.php:27, templates/account/partials/site.php:312
1151
  msgid "Cancelling the subscription"
1152
  msgstr ""
1153
 
1154
  #. translators: %1$s: Either 'Downgrading your plan' or 'Cancelling the subscription'
1155
- #: templates/account.php:103, templates/forms/subscription-cancellation.php:99, templates/account/partials/site.php:314
1156
  msgid "%1$s will immediately stop all future recurring payments and your %2$s plan license will expire in %3$s."
1157
  msgstr ""
1158
 
1159
- #: templates/account.php:104, templates/forms/subscription-cancellation.php:100, templates/account/partials/addon.php:30, templates/account/partials/site.php:315
1160
  msgid "Please note that we will not be able to grandfather outdated pricing for renewals/new subscriptions after a cancellation. If you choose to renew the subscription manually in the future, after a price increase, which typically occurs once a year, you will be charged the updated price."
1161
  msgstr ""
1162
 
1163
- #: templates/account.php:105, templates/forms/subscription-cancellation.php:106, templates/account/partials/addon.php:31
1164
  msgid "Cancelling the trial will immediately block access to all premium features. Are you sure?"
1165
  msgstr ""
1166
 
1167
- #: templates/account.php:106, templates/forms/subscription-cancellation.php:101, templates/account/partials/addon.php:32, templates/account/partials/site.php:316
1168
  msgid "You can still enjoy all %s features but you will not have access to %s security & feature updates, nor support."
1169
  msgstr ""
1170
 
1171
- #: templates/account.php:107, templates/forms/subscription-cancellation.php:102, templates/account/partials/addon.php:33, templates/account/partials/site.php:317
1172
  msgid "Once your license expires you can still use the Free version but you will NOT have access to the %s features."
1173
  msgstr ""
1174
 
1175
  #. translators: %s: Plan title (e.g. "Professional")
1176
- #: templates/account.php:109, templates/account/partials/activate-license-button.php:31, templates/account/partials/addon.php:35
1177
  msgid "Activate %s Plan"
1178
  msgstr ""
1179
 
1180
  #. translators: %s: Time period (e.g. Auto renews in "2 months")
1181
- #: templates/account.php:112, templates/account/partials/addon.php:38, templates/account/partials/site.php:291
1182
  msgid "Auto renews in %s"
1183
  msgstr ""
1184
 
1185
  #. translators: %s: Time period (e.g. Expires in "2 months")
1186
- #: templates/account.php:114, templates/account/partials/addon.php:40, templates/account/partials/site.php:293
1187
  msgid "Expires in %s"
1188
  msgstr ""
1189
 
1190
- #: templates/account.php:115
1191
  msgctxt "as synchronize license"
1192
  msgid "Sync License"
1193
  msgstr ""
1194
 
1195
- #: templates/account.php:116, templates/account/partials/addon.php:41
1196
  msgid "Cancel Trial"
1197
  msgstr ""
1198
 
1199
- #: templates/account.php:117, templates/account/partials/addon.php:42
1200
  msgid "Change Plan"
1201
  msgstr ""
1202
 
1203
- #: templates/account.php:118, templates/account/partials/addon.php:43
1204
  msgctxt "verb"
1205
  msgid "Upgrade"
1206
  msgstr ""
1207
 
1208
- #: templates/account.php:120, templates/account/partials/addon.php:45, templates/account/partials/site.php:318
1209
  msgctxt "verb"
1210
  msgid "Downgrade"
1211
  msgstr ""
1212
 
1213
- #: templates/account.php:122, templates/add-ons.php:246, templates/plugin-info/features.php:72, templates/account/partials/addon.php:47, templates/account/partials/site.php:33
1214
  msgid "Free"
1215
  msgstr ""
1216
 
1217
- #: templates/account.php:124, templates/debug.php:371, includes/customizer/class-fs-customizer-upsell-control.php:110, templates/account/partials/addon.php:49
1218
  msgctxt "as product pricing plan"
1219
  msgid "Plan"
1220
  msgstr ""
1221
 
1222
- #: templates/account.php:125
1223
  msgid "Bundle Plan"
1224
  msgstr ""
1225
 
1226
- #: templates/account.php:248
1227
  msgid "Free Trial"
1228
  msgstr ""
1229
 
1230
- #: templates/account.php:259
1231
  msgid "Account Details"
1232
  msgstr ""
1233
 
1234
- #: templates/account.php:266, templates/forms/data-debug-mode.php:33
1235
  msgid "Start Debug"
1236
  msgstr ""
1237
 
1238
- #: templates/account.php:268
1239
  msgid "Stop Debug"
1240
  msgstr ""
1241
 
1242
- #: templates/account.php:275
1243
  msgid "Billing & Invoices"
1244
  msgstr ""
1245
 
1246
- #: templates/account.php:286
1247
  msgid "Deleting the account will automatically deactivate your %s plan license so you can use it on other sites. If you want to terminate the recurring payments as well, click the \"Cancel\" button, and first \"Downgrade\" your account. Are you sure you would like to continue with the deletion?"
1248
  msgstr ""
1249
 
1250
- #: templates/account.php:288
1251
  msgid "Deletion is not temporary. Only delete if you no longer want to use this %s anymore. Are you sure you would like to continue with the deletion?"
1252
  msgstr ""
1253
 
1254
- #: templates/account.php:291
1255
  msgid "Delete Account"
1256
  msgstr ""
1257
 
1258
- #: templates/account.php:303, templates/account/partials/addon.php:231, templates/account/partials/deactivate-license-button.php:35
1259
  msgid "Deactivate License"
1260
  msgstr ""
1261
 
1262
- #: templates/account.php:326, templates/forms/subscription-cancellation.php:125
1263
  msgid "Are you sure you want to proceed?"
1264
  msgstr ""
1265
 
1266
- #: templates/account.php:326, templates/account/partials/addon.php:255
1267
  msgid "Cancel Subscription"
1268
  msgstr ""
1269
 
1270
- #: templates/account.php:355, templates/account/partials/addon.php:340
1271
  msgctxt "as synchronize"
1272
  msgid "Sync"
1273
  msgstr ""
1274
 
1275
- #: templates/account.php:370, templates/debug.php:505
1276
  msgid "Name"
1277
  msgstr ""
1278
 
1279
- #: templates/account.php:376, templates/debug.php:506
1280
  msgid "Email"
1281
  msgstr ""
1282
 
1283
- #: templates/account.php:383, templates/debug.php:369, templates/debug.php:555
1284
  msgid "User ID"
1285
  msgstr ""
1286
 
1287
- #: templates/account.php:401, templates/account.php:719, templates/account.php:752, templates/debug.php:236, templates/debug.php:363, templates/debug.php:452, templates/debug.php:504, templates/debug.php:553, templates/debug.php:632, templates/account/payments.php:35, templates/debug/logger.php:21
1288
  msgid "ID"
1289
  msgstr ""
1290
 
1291
- #: templates/account.php:408
1292
  msgid "Site ID"
1293
  msgstr ""
1294
 
1295
- #: templates/account.php:411
1296
  msgid "No ID"
1297
  msgstr ""
1298
 
1299
- #: templates/account.php:416, templates/debug.php:243, templates/debug.php:372, templates/debug.php:456, templates/debug.php:508, templates/account/partials/site.php:227
1300
  msgid "Public Key"
1301
  msgstr ""
1302
 
1303
- #: templates/account.php:422, templates/debug.php:373, templates/debug.php:457, templates/debug.php:509, templates/account/partials/site.php:239
1304
  msgid "Secret Key"
1305
  msgstr ""
1306
 
1307
- #: templates/account.php:425
1308
  msgctxt "as secret encryption key missing"
1309
  msgid "No Secret"
1310
  msgstr ""
1311
 
1312
- #: templates/account.php:452, templates/account/partials/site.php:120, templates/account/partials/site.php:122
1313
  msgid "Trial"
1314
  msgstr ""
1315
 
1316
- #: templates/account.php:479, templates/debug.php:561, templates/account/partials/site.php:260
1317
  msgid "License Key"
1318
  msgstr ""
1319
 
1320
- #: templates/account.php:510
1321
  msgid "Join the Beta program"
1322
  msgstr ""
1323
 
1324
- #: templates/account.php:516
1325
  msgid "not verified"
1326
  msgstr ""
1327
 
1328
- #: templates/account.php:525, templates/account/partials/addon.php:190
1329
  msgid "Expired"
1330
  msgstr ""
1331
 
1332
- #: templates/account.php:585
1333
  msgid "Premium version"
1334
  msgstr ""
1335
 
1336
- #: templates/account.php:587
1337
  msgid "Free version"
1338
  msgstr ""
1339
 
1340
- #: templates/account.php:599
1341
  msgid "Verify Email"
1342
  msgstr ""
1343
 
1344
- #: templates/account.php:613
1345
  msgid "Download %s Version"
1346
  msgstr ""
1347
 
1348
- #: templates/account.php:629
1349
  msgid "Download Paid Version"
1350
  msgstr ""
1351
 
1352
- #: templates/account.php:647, templates/account.php:890, templates/account/partials/site.php:248, templates/account/partials/site.php:270
1353
  msgctxt "verb"
1354
  msgid "Show"
1355
  msgstr ""
1356
 
1357
- #: templates/account.php:662
1358
  msgid "What is your %s?"
1359
  msgstr ""
1360
 
1361
- #: templates/account.php:670, templates/account/billing.php:21
1362
  msgctxt "verb"
1363
  msgid "Edit"
1364
  msgstr ""
1365
 
1366
- #: templates/account.php:674, templates/forms/user-change.php:27
1367
  msgid "Change User"
1368
  msgstr ""
1369
 
1370
- #: templates/account.php:698
1371
  msgid "Sites"
1372
  msgstr ""
1373
 
1374
- #: templates/account.php:711
1375
  msgid "Search by address"
1376
  msgstr ""
1377
 
1378
- #: templates/account.php:720, templates/debug.php:366
1379
  msgid "Address"
1380
  msgstr ""
1381
 
1382
- #: templates/account.php:721
1383
  msgid "License"
1384
  msgstr ""
1385
 
1386
- #: templates/account.php:722
1387
  msgid "Plan"
1388
  msgstr ""
1389
 
1390
- #: templates/account.php:755
1391
  msgctxt "as software license"
1392
  msgid "License"
1393
  msgstr ""
1394
 
1395
- #: templates/account.php:884
1396
  msgctxt "verb"
1397
  msgid "Hide"
1398
  msgstr ""
1399
 
1400
- #: templates/account.php:906, templates/forms/data-debug-mode.php:31
1401
  msgid "Processing"
1402
  msgstr ""
1403
 
1404
- #: templates/account.php:909
1405
  msgid "Get updates for bleeding edge Beta versions of %s."
1406
  msgstr ""
1407
 
1408
- #: templates/account.php:967
1409
  msgid "Cancelling %s"
1410
  msgstr ""
1411
 
1412
- #: templates/account.php:967, templates/account.php:984, templates/forms/subscription-cancellation.php:27, templates/forms/deactivation/form.php:133
1413
  msgid "trial"
1414
  msgstr ""
1415
 
1416
- #: templates/account.php:982, templates/forms/deactivation/form.php:150
1417
  msgid "Cancelling %s..."
1418
  msgstr ""
1419
 
1420
- #: templates/account.php:985, templates/forms/subscription-cancellation.php:28, templates/forms/deactivation/form.php:134
1421
  msgid "subscription"
1422
  msgstr ""
1423
 
1424
- #: templates/account.php:999
1425
  msgid "Deactivating your license will block all premium features, but will enable activating the license on another site. Are you sure you want to proceed?"
1426
  msgstr ""
1427
 
1428
- #: templates/account.php:1073
1429
  msgid "Disabling white-label mode"
1430
  msgstr ""
1431
 
1432
- #: templates/account.php:1074
1433
  msgid "Enabling white-label mode"
1434
  msgstr ""
1435
 
@@ -1455,7 +1455,7 @@ msgctxt "installed add-on"
1455
  msgid "Installed"
1456
  msgstr ""
1457
 
1458
- #: templates/admin-notice.php:13, templates/forms/license-activation.php:220, templates/forms/resend-key.php:77
1459
  msgctxt "as close a window"
1460
  msgid "Dismiss"
1461
  msgstr ""
@@ -1510,84 +1510,92 @@ msgstr ""
1510
  msgid "Agree & Activate License"
1511
  msgstr ""
1512
 
1513
- #: templates/connect.php:189
1514
- msgid "Thanks for purchasing %s! To get started, please enter your license key:"
1515
  msgstr ""
1516
 
1517
- #: templates/connect.php:196
1518
  msgid "Never miss an important update - opt in to our security & feature updates notifications, educational content, offers, and non-sensitive diagnostic tracking with %4$s."
1519
  msgstr ""
1520
 
1521
- #: templates/connect.php:197
1522
  msgid "Never miss an important update - opt in to our security and feature updates notifications, and non-sensitive diagnostic tracking with %4$s."
1523
  msgstr ""
1524
 
1525
- #: templates/connect.php:203
1526
  msgid "Never miss an important update - opt in to our security & feature updates notifications, educational content, offers, and non-sensitive diagnostic tracking with %4$s. If you skip this, that's okay! %1$s will still work just fine."
1527
  msgstr ""
1528
 
1529
- #: templates/connect.php:204
1530
  msgid "Never miss an important update - opt in to our security & feature updates notifications, and non-sensitive diagnostic tracking with %4$s. If you skip this, that's okay! %1$s will still work just fine."
1531
  msgstr ""
1532
 
1533
- #: templates/connect.php:238
1534
  msgid "We're excited to introduce the Freemius network-level integration."
1535
  msgstr ""
1536
 
1537
- #: templates/connect.php:241
1538
  msgid "During the update process we detected %d site(s) that are still pending license activation."
1539
  msgstr ""
1540
 
1541
- #: templates/connect.php:243
1542
  msgid "If you'd like to use the %s on those sites, please enter your license key below and click the activation button."
1543
  msgstr ""
1544
 
1545
- #: templates/connect.php:245
1546
  msgid "%s's paid features"
1547
  msgstr ""
1548
 
1549
- #: templates/connect.php:250
1550
  msgid "Alternatively, you can skip it for now and activate the license later, in your %s's network-level Account page."
1551
  msgstr ""
1552
 
1553
- #: templates/connect.php:252
1554
  msgid "During the update process we detected %s site(s) in the network that are still pending your attention."
1555
  msgstr ""
1556
 
1557
- #: templates/connect.php:261, templates/forms/data-debug-mode.php:35, templates/forms/license-activation.php:49
1558
  msgid "License key"
1559
  msgstr ""
1560
 
1561
- #: templates/connect.php:264, templates/forms/license-activation.php:22
1562
  msgid "Can't find your license key?"
1563
  msgstr ""
1564
 
1565
- #: templates/connect.php:323, templates/connect.php:695, templates/forms/deactivation/retry-skip.php:20
1566
  msgctxt "verb"
1567
  msgid "Skip"
1568
  msgstr ""
1569
 
1570
- #: templates/connect.php:326
1571
  msgid "Delegate to Site Admins"
1572
  msgstr ""
1573
 
1574
- #: templates/connect.php:326
1575
  msgid "If you click it, this decision will be delegated to the sites administrators."
1576
  msgstr ""
1577
 
1578
- #: templates/connect.php:364
 
 
 
 
1579
  msgid "Your Profile Overview"
1580
  msgstr ""
1581
 
1582
- #: templates/connect.php:365
1583
  msgid "Name and email address"
1584
  msgstr ""
1585
 
1586
- #: templates/connect.php:372
 
 
 
 
1587
  msgid "Your Site Overview"
1588
  msgstr ""
1589
 
1590
- #: templates/connect.php:373
1591
  msgid "Site URL, WP version, PHP info"
1592
  msgstr ""
1593
 
@@ -1595,64 +1603,84 @@ msgstr ""
1595
  msgid "Admin Notices"
1596
  msgstr ""
1597
 
1598
- #: templates/connect.php:380, templates/connect.php:396
1599
  msgid "Updates, announcements, marketing, no spam"
1600
  msgstr ""
1601
 
1602
- #: templates/connect.php:386
1603
- msgid "Current %s Events"
 
 
 
 
1604
  msgstr ""
1605
 
1606
- #: templates/connect.php:387
1607
- msgid "Activation, deactivation and uninstall"
1608
  msgstr ""
1609
 
1610
- #: templates/connect.php:395
1611
  msgid "Newsletter"
1612
  msgstr ""
1613
 
1614
- #: templates/connect.php:403
1615
  msgid "Plugins & Themes"
1616
  msgstr ""
1617
 
1618
- #: templates/connect.php:404
 
 
 
 
 
 
 
 
1619
  msgid "Title, slug, version, and is active"
1620
  msgstr ""
1621
 
1622
- #: templates/connect.php:421, templates/forms/license-activation.php:41
1623
- msgid "The %1$s will be periodically sending data to %2$s to check for security and feature updates, and verify the validity of your license."
1624
  msgstr ""
1625
 
1626
  #: templates/connect.php:426
 
 
 
 
 
 
 
 
1627
  msgid "What permissions are being granted?"
1628
  msgstr ""
1629
 
1630
- #: templates/connect.php:452
1631
  msgid "Don't have a license key?"
1632
  msgstr ""
1633
 
1634
- #: templates/connect.php:455
1635
  msgid "Have a license key?"
1636
  msgstr ""
1637
 
1638
- #: templates/connect.php:463
1639
  msgid "Privacy Policy"
1640
  msgstr ""
1641
 
1642
- #: templates/connect.php:465
1643
  msgid "License Agreement"
1644
  msgstr ""
1645
 
1646
- #: templates/connect.php:465
1647
  msgid "Terms of Service"
1648
  msgstr ""
1649
 
1650
- #: templates/connect.php:854
1651
  msgctxt "as in the process of sending an email"
1652
  msgid "Sending email"
1653
  msgstr ""
1654
 
1655
- #: templates/connect.php:855
1656
  msgctxt "as activating plugin"
1657
  msgid "Activating"
1658
  msgstr ""
@@ -2241,7 +2269,11 @@ msgstr ""
2241
  msgid "Update License"
2242
  msgstr ""
2243
 
2244
- #: templates/forms/license-activation.php:181
 
 
 
 
2245
  msgid "Associate with the license owner's account."
2246
  msgstr ""
2247
 
1
+ # Copyright (C) 2021 freemius
2
  # This file is distributed under the same license as the freemius package.
3
  msgid ""
4
  msgstr ""
16
  "X-Poedit-SourceCharset: UTF-8\n"
17
  "Plural-Forms: nplurals=2; plural=(n != 1);\n"
18
 
19
+ #: includes/class-freemius.php:1919, templates/account.php:912
20
  msgid "An update to a Beta version will replace your installed version of %s with the latest Beta release - use with caution, and not on production sites. You have been warned."
21
  msgstr ""
22
 
23
+ #: includes/class-freemius.php:1926
24
  msgid "Would you like to proceed with the update?"
25
  msgstr ""
26
 
27
+ #: includes/class-freemius.php:2138
28
  msgid "Freemius SDK couldn't find the plugin's main file. Please contact sdk@freemius.com with the current error."
29
  msgstr ""
30
 
31
+ #: includes/class-freemius.php:2140
32
  msgid "Error"
33
  msgstr ""
34
 
35
+ #: includes/class-freemius.php:2540
36
  msgid "I found a better %s"
37
  msgstr ""
38
 
39
+ #: includes/class-freemius.php:2542
40
  msgid "What's the %s's name?"
41
  msgstr ""
42
 
43
+ #: includes/class-freemius.php:2548
44
  msgid "It's a temporary %s. I'm just debugging an issue."
45
  msgstr ""
46
 
47
+ #: includes/class-freemius.php:2550
48
  msgid "Deactivation"
49
  msgstr ""
50
 
51
+ #: includes/class-freemius.php:2551
52
  msgid "Theme Switch"
53
  msgstr ""
54
 
55
+ #: includes/class-freemius.php:2560, templates/forms/resend-key.php:24, templates/forms/user-change.php:29
56
  msgid "Other"
57
  msgstr ""
58
 
59
+ #: includes/class-freemius.php:2568
60
  msgid "I no longer need the %s"
61
  msgstr ""
62
 
63
+ #: includes/class-freemius.php:2575
64
  msgid "I only needed the %s for a short period"
65
  msgstr ""
66
 
67
+ #: includes/class-freemius.php:2581
68
  msgid "The %s broke my site"
69
  msgstr ""
70
 
71
+ #: includes/class-freemius.php:2588
72
  msgid "The %s suddenly stopped working"
73
  msgstr ""
74
 
75
+ #: includes/class-freemius.php:2598
76
  msgid "I can't pay for it anymore"
77
  msgstr ""
78
 
79
+ #: includes/class-freemius.php:2600
80
  msgid "What price would you feel comfortable paying?"
81
  msgstr ""
82
 
83
+ #: includes/class-freemius.php:2606
84
  msgid "I don't like to share my information with you"
85
  msgstr ""
86
 
87
+ #: includes/class-freemius.php:2627
88
  msgid "The %s didn't work"
89
  msgstr ""
90
 
91
+ #: includes/class-freemius.php:2637
92
  msgid "I couldn't understand how to make it work"
93
  msgstr ""
94
 
95
+ #: includes/class-freemius.php:2645
96
  msgid "The %s is great, but I need specific feature that you don't support"
97
  msgstr ""
98
 
99
+ #: includes/class-freemius.php:2647
100
  msgid "What feature?"
101
  msgstr ""
102
 
103
+ #: includes/class-freemius.php:2651
104
  msgid "The %s is not working"
105
  msgstr ""
106
 
107
+ #: includes/class-freemius.php:2653
108
  msgid "Kindly share what didn't work so we can fix it for future users..."
109
  msgstr ""
110
 
111
+ #: includes/class-freemius.php:2657
112
  msgid "It's not what I was looking for"
113
  msgstr ""
114
 
115
+ #: includes/class-freemius.php:2659
116
  msgid "What you've been looking for?"
117
  msgstr ""
118
 
119
+ #: includes/class-freemius.php:2663
120
  msgid "The %s didn't work as expected"
121
  msgstr ""
122
 
123
+ #: includes/class-freemius.php:2665
124
  msgid "What did you expect?"
125
  msgstr ""
126
 
127
+ #: includes/class-freemius.php:3520, templates/debug.php:20
128
  msgid "Freemius Debug"
129
  msgstr ""
130
 
131
+ #: includes/class-freemius.php:4272
132
  msgid "I don't know what is cURL or how to install it, help me!"
133
  msgstr ""
134
 
135
+ #: includes/class-freemius.php:4274
136
  msgid "We'll make sure to contact your hosting company and resolve the issue. You will get a follow-up email to %s once we have an update."
137
  msgstr ""
138
 
139
+ #: includes/class-freemius.php:4281
140
  msgid "Great, please install cURL and enable it in your php.ini file. In addition, search for the 'disable_functions' directive in your php.ini file and remove any disabled methods starting with 'curl_'. To make sure it was successfully activated, use 'phpinfo()'. Once activated, deactivate the %s and reactivate it back again."
141
  msgstr ""
142
 
143
+ #: includes/class-freemius.php:4386
144
  msgid "Yes - do your thing"
145
  msgstr ""
146
 
147
+ #: includes/class-freemius.php:4391
148
  msgid "No - just deactivate"
149
  msgstr ""
150
 
151
+ #: includes/class-freemius.php:4436, includes/class-freemius.php:4930, includes/class-freemius.php:6191, includes/class-freemius.php:13368, includes/class-freemius.php:14110, includes/class-freemius.php:17542, includes/class-freemius.php:17647, includes/class-freemius.php:17822, includes/class-freemius.php:20056, includes/class-freemius.php:20414, includes/class-freemius.php:20424, includes/class-freemius.php:21109, includes/class-freemius.php:22015, includes/class-freemius.php:22148, includes/class-freemius.php:22304, templates/add-ons.php:57
152
  msgctxt "exclamation"
153
  msgid "Oops"
154
  msgstr ""
155
 
156
+ #: includes/class-freemius.php:4505
157
  msgid "Thank for giving us the chance to fix it! A message was just sent to our technical staff. We will get back to you as soon as we have an update to %s. Appreciate your patience."
158
  msgstr ""
159
 
160
+ #: includes/class-freemius.php:4927
161
  msgctxt "addonX cannot run without pluginY"
162
  msgid "%s cannot run without %s."
163
  msgstr ""
164
 
165
+ #: includes/class-freemius.php:4928
166
  msgctxt "addonX cannot run..."
167
  msgid "%s cannot run without the plugin."
168
  msgstr ""
169
 
170
+ #: includes/class-freemius.php:5127, includes/class-freemius.php:5152, includes/class-freemius.php:21180
171
  msgid "Unexpected API error. Please contact the %s's author with the following error."
172
  msgstr ""
173
 
174
+ #: includes/class-freemius.php:5857
175
  msgid "Premium %s version was successfully activated."
176
  msgstr ""
177
 
178
+ #: includes/class-freemius.php:5869, includes/class-freemius.php:7774
179
  msgctxt "Used to express elation, enthusiasm, or triumph (especially in electronic communication)."
180
  msgid "W00t"
181
  msgstr ""
182
 
183
+ #: includes/class-freemius.php:5884
184
  msgid "You have a %s license."
185
  msgstr ""
186
 
187
+ #: includes/class-freemius.php:5888, includes/class-freemius.php:16947, includes/class-freemius.php:16958, includes/class-freemius.php:20325, includes/class-freemius.php:20689, includes/class-freemius.php:20758, includes/class-freemius.php:20930
188
  msgctxt "interjection expressing joy or exuberance"
189
  msgid "Yee-haw"
190
  msgstr ""
191
 
192
+ #: includes/class-freemius.php:6174
193
  msgid "%s free trial was successfully cancelled. Since the add-on is premium only it was automatically deactivated. If you like to use it in the future, you'll have to purchase a license."
194
  msgstr ""
195
 
196
+ #: includes/class-freemius.php:6178
197
  msgid "%s is a premium only add-on. You have to purchase a license first before activating the plugin."
198
  msgstr ""
199
 
200
+ #: includes/class-freemius.php:6187, templates/add-ons.php:186, templates/account/partials/addon.php:381
201
  msgid "More information about %s"
202
  msgstr ""
203
 
204
+ #: includes/class-freemius.php:6188
205
  msgid "Purchase License"
206
  msgstr ""
207
 
208
+ #: includes/class-freemius.php:7125, templates/connect.php:171
209
  msgid "You should receive an activation email for %s to your mailbox at %s. Please make sure you click the activation button in that email to %s."
210
  msgstr ""
211
 
212
+ #: includes/class-freemius.php:7129
213
  msgid "start the trial"
214
  msgstr ""
215
 
216
+ #: includes/class-freemius.php:7130, templates/connect.php:175
217
  msgid "complete the install"
218
  msgstr ""
219
 
220
+ #: includes/class-freemius.php:7249
221
  msgid "You are just one step away - %s"
222
  msgstr ""
223
 
224
+ #: includes/class-freemius.php:7252
225
  msgctxt "%s - plugin name. As complete \"PluginX\" activation now"
226
  msgid "Complete \"%s\" Activation Now"
227
  msgstr ""
228
 
229
+ #: includes/class-freemius.php:7334
230
  msgid "We made a few tweaks to the %s, %s"
231
  msgstr ""
232
 
233
+ #: includes/class-freemius.php:7338
234
  msgid "Opt in to make \"%s\" better!"
235
  msgstr ""
236
 
237
+ #: includes/class-freemius.php:7773
238
  msgid "The upgrade of %s was successfully completed."
239
  msgstr ""
240
 
241
+ #: includes/class-freemius.php:10255, includes/class-fs-plugin-updater.php:1087, includes/class-fs-plugin-updater.php:1282, includes/class-fs-plugin-updater.php:1289, templates/auto-installation.php:32
242
  msgid "Add-On"
243
  msgstr ""
244
 
245
+ #: includes/class-freemius.php:10257, templates/account.php:394, templates/account.php:402, templates/debug.php:358, templates/debug.php:549
246
  msgid "Plugin"
247
  msgstr ""
248
 
249
+ #: includes/class-freemius.php:10258, templates/account.php:395, templates/account.php:403, templates/debug.php:358, templates/debug.php:549, templates/forms/deactivation/form.php:71
250
  msgid "Theme"
251
  msgstr ""
252
 
253
+ #: includes/class-freemius.php:13188
254
  msgid "An unknown error has occurred while trying to toggle the license's white-label mode."
255
  msgstr ""
256
 
257
+ #: includes/class-freemius.php:13202
258
  msgid "Your %s license was flagged as white-labeled to hide sensitive information from the WP Admin (e.g. your email, license key, prices, billing address & invoices). If you ever wish to revert it back, you can easily do it through your %s. If this was a mistake you can also %s."
259
  msgstr ""
260
 
261
+ #: includes/class-freemius.php:13207
262
  msgid "User Dashboard"
263
  msgstr ""
264
 
265
+ #: includes/class-freemius.php:13208
266
  msgid "revert it now"
267
  msgstr ""
268
 
269
+ #: includes/class-freemius.php:13266
270
  msgid "An unknown error has occurred while trying to set the user's beta mode."
271
  msgstr ""
272
 
273
+ #: includes/class-freemius.php:13339
274
  msgid "Invalid new user ID or email address."
275
  msgstr ""
276
 
277
+ #: includes/class-freemius.php:13369, includes/class-freemius.php:22259
278
  msgid "Sorry, we could not complete the email update. Another user with the same email is already registered."
279
  msgstr ""
280
 
281
+ #: includes/class-freemius.php:13370, includes/class-freemius.php:22260
282
  msgid "If you would like to give up the ownership of the %s's account to %s click the Change Ownership button."
283
  msgstr ""
284
 
285
+ #: includes/class-freemius.php:13377, includes/class-freemius.php:22267
286
  msgid "Change Ownership"
287
  msgstr ""
288
 
289
+ #: includes/class-freemius.php:13977
290
  msgid "Invalid site details collection."
291
  msgstr ""
292
 
293
+ #: includes/class-freemius.php:14097
294
  msgid "We couldn't find your email address in the system, are you sure it's the right address?"
295
  msgstr ""
296
 
297
+ #: includes/class-freemius.php:14099
298
  msgid "We can't see any active licenses associated with that email address, are you sure it's the right address?"
299
  msgstr ""
300
 
301
+ #: includes/class-freemius.php:14373
302
  msgid "Account is pending activation."
303
  msgstr ""
304
 
305
+ #: includes/class-freemius.php:14485, templates/forms/premium-versions-upgrade-handler.php:47
306
  msgid "Buy a license now"
307
  msgstr ""
308
 
309
+ #: includes/class-freemius.php:14497, templates/forms/premium-versions-upgrade-handler.php:46
310
  msgid "Renew your license now"
311
  msgstr ""
312
 
313
+ #: includes/class-freemius.php:14501
314
  msgid "%s to access version %s security & feature updates, and support."
315
  msgstr ""
316
 
317
+ #: includes/class-freemius.php:16929
318
  msgid "%s activation was successfully completed."
319
  msgstr ""
320
 
321
+ #: includes/class-freemius.php:16943
322
  msgid "Your account was successfully activated with the %s plan."
323
  msgstr ""
324
 
325
+ #: includes/class-freemius.php:16954, includes/class-freemius.php:20754
326
  msgid "Your trial has been successfully started."
327
  msgstr ""
328
 
329
+ #: includes/class-freemius.php:17540, includes/class-freemius.php:17645, includes/class-freemius.php:17820
330
  msgid "Couldn't activate %s."
331
  msgstr ""
332
 
333
+ #: includes/class-freemius.php:17541, includes/class-freemius.php:17646, includes/class-freemius.php:17821
334
  msgid "Please contact us with the following message:"
335
  msgstr ""
336
 
337
+ #: includes/class-freemius.php:17642, templates/forms/data-debug-mode.php:162
338
  msgid "An unknown error has occurred."
339
  msgstr ""
340
 
341
+ #: includes/class-freemius.php:18178, includes/class-freemius.php:23340
342
  msgid "Upgrade"
343
  msgstr ""
344
 
345
+ #: includes/class-freemius.php:18184
346
  msgid "Start Trial"
347
  msgstr ""
348
 
349
+ #: includes/class-freemius.php:18186
350
  msgid "Pricing"
351
  msgstr ""
352
 
353
+ #: includes/class-freemius.php:18266, includes/class-freemius.php:18268
354
  msgid "Affiliation"
355
  msgstr ""
356
 
357
+ #: includes/class-freemius.php:18296, includes/class-freemius.php:18298, templates/account.php:242, templates/debug.php:324
358
  msgid "Account"
359
  msgstr ""
360
 
361
+ #: includes/class-freemius.php:18312, includes/class-freemius.php:18314, includes/customizer/class-fs-customizer-support-section.php:60
362
  msgid "Contact Us"
363
  msgstr ""
364
 
365
+ #: includes/class-freemius.php:18325, includes/class-freemius.php:18327, includes/class-freemius.php:23354, templates/account.php:121, templates/account/partials/addon.php:44
366
  msgid "Add-Ons"
367
  msgstr ""
368
 
369
+ #: includes/class-freemius.php:18361
370
  msgctxt "ASCII arrow left icon"
371
  msgid "&#x2190;"
372
  msgstr ""
373
 
374
+ #: includes/class-freemius.php:18361
375
  msgctxt "ASCII arrow right icon"
376
  msgid "&#x27a4;"
377
  msgstr ""
378
 
379
+ #: includes/class-freemius.php:18363, templates/pricing.php:109
380
  msgctxt "noun"
381
  msgid "Pricing"
382
  msgstr ""
383
 
384
+ #: includes/class-freemius.php:18576, includes/customizer/class-fs-customizer-support-section.php:67
385
  msgid "Support Forum"
386
  msgstr ""
387
 
388
+ #: includes/class-freemius.php:19550
389
  msgid "Your email has been successfully verified - you are AWESOME!"
390
  msgstr ""
391
 
392
+ #: includes/class-freemius.php:19551
393
  msgctxt "a positive response"
394
  msgid "Right on"
395
  msgstr ""
396
 
397
+ #: includes/class-freemius.php:20057
398
  msgid "seems like the key you entered doesn't match our records."
399
  msgstr ""
400
 
401
+ #: includes/class-freemius.php:20081
402
  msgid "Debug mode was successfully enabled and will be automatically disabled in 60 min. You can also disable it earlier by clicking the \"Stop Debug\" link."
403
  msgstr ""
404
 
405
+ #: includes/class-freemius.php:20316
406
  msgid "Your %s Add-on plan was successfully upgraded."
407
  msgstr ""
408
 
409
+ #: includes/class-freemius.php:20318
410
  msgid "%s Add-on was successfully purchased."
411
  msgstr ""
412
 
413
+ #: includes/class-freemius.php:20321
414
  msgid "Download the latest version"
415
  msgstr ""
416
 
417
+ #: includes/class-freemius.php:20407
418
  msgid "Your server is blocking the access to Freemius' API, which is crucial for %1$s synchronization. Please contact your host to whitelist %2$s"
419
  msgstr ""
420
 
421
+ #: includes/class-freemius.php:20413, includes/class-freemius.php:20423, includes/class-freemius.php:20889, includes/class-freemius.php:20978
422
  msgid "Error received from the server:"
423
  msgstr ""
424
 
425
+ #: includes/class-freemius.php:20423
426
  msgid "It seems like one of the authentication parameters is wrong. Update your Public Key, Secret Key & User ID, and try again."
427
  msgstr ""
428
 
429
+ #: includes/class-freemius.php:20651, includes/class-freemius.php:20894, includes/class-freemius.php:20949, includes/class-freemius.php:21056
430
  msgctxt "something somebody says when they are thinking about what you have just said."
431
  msgid "Hmm"
432
  msgstr ""
433
 
434
+ #: includes/class-freemius.php:20664
435
  msgid "It looks like you are still on the %s plan. If you did upgrade or change your plan, it's probably an issue on our side - sorry."
436
  msgstr ""
437
 
438
+ #: includes/class-freemius.php:20665, templates/account.php:123, templates/add-ons.php:250, templates/account/partials/addon.php:46
439
  msgctxt "trial period"
440
  msgid "Trial"
441
  msgstr ""
442
 
443
+ #: includes/class-freemius.php:20670
444
  msgid "I have upgraded my account but when I try to Sync the License, the plan remains %s."
445
  msgstr ""
446
 
447
+ #: includes/class-freemius.php:20674, includes/class-freemius.php:20733
448
  msgid "Please contact us here"
449
  msgstr ""
450
 
451
+ #: includes/class-freemius.php:20685
452
  msgid "Your plan was successfully activated."
453
  msgstr ""
454
 
455
+ #: includes/class-freemius.php:20686
456
  msgid "Your plan was successfully upgraded."
457
  msgstr ""
458
 
459
+ #: includes/class-freemius.php:20703
460
  msgid "Your plan was successfully changed to %s."
461
  msgstr ""
462
 
463
+ #: includes/class-freemius.php:20719
464
  msgid "Your license has expired. You can still continue using the free %s forever."
465
  msgstr ""
466
 
467
+ #: includes/class-freemius.php:20721
468
  msgid "Your license has expired. %1$sUpgrade now%2$s to continue using the %3$s without interruptions."
469
  msgstr ""
470
 
471
+ #: includes/class-freemius.php:20729
472
  msgid "Your license has been cancelled. If you think it's a mistake, please contact support."
473
  msgstr ""
474
 
475
+ #: includes/class-freemius.php:20742
476
  msgid "Your license has expired. You can still continue using all the %s features, but you'll need to renew your license to continue getting updates and support."
477
  msgstr ""
478
 
479
+ #: includes/class-freemius.php:20768
480
  msgid "Your free trial has expired. You can still continue using all our free features."
481
  msgstr ""
482
 
483
+ #: includes/class-freemius.php:20770
484
  msgid "Your free trial has expired. %1$sUpgrade now%2$s to continue using the %3$s without interruptions."
485
  msgstr ""
486
 
487
+ #: includes/class-freemius.php:20885
488
  msgid "It looks like the license could not be activated."
489
  msgstr ""
490
 
491
+ #: includes/class-freemius.php:20927
492
  msgid "Your license was successfully activated."
493
  msgstr ""
494
 
495
+ #: includes/class-freemius.php:20953
496
  msgid "It looks like your site currently doesn't have an active license."
497
  msgstr ""
498
 
499
+ #: includes/class-freemius.php:20977
500
  msgid "It looks like the license deactivation failed."
501
  msgstr ""
502
 
503
+ #: includes/class-freemius.php:21006
504
  msgid "Your %s license was successfully deactivated."
505
  msgstr ""
506
 
507
+ #: includes/class-freemius.php:21007
508
  msgid "Your license was successfully deactivated, you are back to the %s plan."
509
  msgstr ""
510
 
511
+ #: includes/class-freemius.php:21010
512
  msgid "O.K"
513
  msgstr ""
514
 
515
+ #: includes/class-freemius.php:21063
516
  msgid "Seems like we are having some temporary issue with your subscription cancellation. Please try again in few minutes."
517
  msgstr ""
518
 
519
+ #: includes/class-freemius.php:21072
520
  msgid "Your subscription was successfully cancelled. Your %s plan license will expire in %s."
521
  msgstr ""
522
 
523
+ #: includes/class-freemius.php:21114
524
  msgid "You are already running the %s in a trial mode."
525
  msgstr ""
526
 
527
+ #: includes/class-freemius.php:21125
528
  msgid "You already utilized a trial before."
529
  msgstr ""
530
 
531
+ #: includes/class-freemius.php:21139
532
  msgid "Plan %s do not exist, therefore, can't start a trial."
533
  msgstr ""
534
 
535
+ #: includes/class-freemius.php:21150
536
  msgid "Plan %s does not support a trial period."
537
  msgstr ""
538
 
539
+ #: includes/class-freemius.php:21161
540
  msgid "None of the %s's plans supports a trial period."
541
  msgstr ""
542
 
543
+ #: includes/class-freemius.php:21211
544
  msgid "It looks like you are not in trial mode anymore so there's nothing to cancel :)"
545
  msgstr ""
546
 
547
+ #: includes/class-freemius.php:21247
548
  msgid "Seems like we are having some temporary issue with your trial cancellation. Please try again in few minutes."
549
  msgstr ""
550
 
551
+ #: includes/class-freemius.php:21266
552
  msgid "Your %s free trial was successfully cancelled."
553
  msgstr ""
554
 
555
+ #: includes/class-freemius.php:21582
556
  msgid "Version %s was released."
557
  msgstr ""
558
 
559
+ #: includes/class-freemius.php:21582
560
  msgid "Please download %s."
561
  msgstr ""
562
 
563
+ #: includes/class-freemius.php:21589
564
  msgid "the latest %s version here"
565
  msgstr ""
566
 
567
+ #: includes/class-freemius.php:21594
568
  msgid "New"
569
  msgstr ""
570
 
571
+ #: includes/class-freemius.php:21599
572
  msgid "Seems like you got the latest release."
573
  msgstr ""
574
 
575
+ #: includes/class-freemius.php:21600
576
  msgid "You are all good!"
577
  msgstr ""
578
 
579
+ #: includes/class-freemius.php:21903
580
  msgid "Verification mail was just sent to %s. If you can't find it after 5 min, please check your spam box."
581
  msgstr ""
582
 
583
+ #: includes/class-freemius.php:22043
584
  msgid "Site successfully opted in."
585
  msgstr ""
586
 
587
+ #: includes/class-freemius.php:22044, includes/class-freemius.php:23050
588
  msgid "Awesome"
589
  msgstr ""
590
 
591
+ #: includes/class-freemius.php:22060, templates/forms/optout.php:41
592
  msgid "We appreciate your help in making the %s better by letting us track some usage data."
593
  msgstr ""
594
 
595
+ #: includes/class-freemius.php:22061
596
  msgid "Thank you!"
597
  msgstr ""
598
 
599
+ #: includes/class-freemius.php:22068
600
  msgid "We will no longer be sending any usage data of %s on %s to %s."
601
  msgstr ""
602
 
603
+ #: includes/class-freemius.php:22226
604
  msgid "Please check your mailbox, you should receive an email via %s to confirm the ownership change. From security reasons, you must confirm the change within the next 15 min. If you cannot find the email, please check your spam folder."
605
  msgstr ""
606
 
607
+ #: includes/class-freemius.php:22232
608
  msgid "Thanks for confirming the ownership change. An email was just sent to %s for final approval."
609
  msgstr ""
610
 
611
+ #: includes/class-freemius.php:22237
612
  msgid "%s is the new owner of the account."
613
  msgstr ""
614
 
615
+ #: includes/class-freemius.php:22239
616
  msgctxt "as congratulations"
617
  msgid "Congrats"
618
  msgstr ""
619
 
620
+ #: includes/class-freemius.php:22275
621
  msgid "Your email was successfully updated. You should receive an email with confirmation instructions in few moments."
622
  msgstr ""
623
 
624
+ #: includes/class-freemius.php:22287
625
  msgid "Please provide your full name."
626
  msgstr ""
627
 
628
+ #: includes/class-freemius.php:22292
629
  msgid "Your name was successfully updated."
630
  msgstr ""
631
 
632
+ #: includes/class-freemius.php:22353
633
  msgid "You have successfully updated your %s."
634
  msgstr ""
635
 
636
+ #: includes/class-freemius.php:22412
637
  msgid "Is this your client's site? %s if you wish to hide sensitive info like your email, license key, prices, billing address & invoices from the WP Admin."
638
  msgstr ""
639
 
640
+ #: includes/class-freemius.php:22415
641
  msgid "Click here"
642
  msgstr ""
643
 
644
+ #: includes/class-freemius.php:22513
645
  msgid "Just letting you know that the add-ons information of %s is being pulled from an external server."
646
  msgstr ""
647
 
648
+ #: includes/class-freemius.php:22514
649
  msgctxt "advance notice of something that will need attention."
650
  msgid "Heads up"
651
  msgstr ""
652
 
653
+ #: includes/class-freemius.php:23090
654
  msgctxt "exclamation"
655
  msgid "Hey"
656
  msgstr ""
657
 
658
+ #: includes/class-freemius.php:23090
659
  msgid "How do you like %s so far? Test all our %s premium features with a %d-day free trial."
660
  msgstr ""
661
 
662
+ #: includes/class-freemius.php:23098
663
  msgid "No commitment for %s days - cancel anytime!"
664
  msgstr ""
665
 
666
+ #: includes/class-freemius.php:23099
667
  msgid "No credit card required"
668
  msgstr ""
669
 
670
+ #: includes/class-freemius.php:23106, templates/forms/trial-start.php:53
671
  msgctxt "call to action"
672
  msgid "Start free trial"
673
  msgstr ""
674
 
675
+ #: includes/class-freemius.php:23183
676
  msgid "Hey there, did you know that %s has an affiliate program? If you like the %s you can become our ambassador and earn some cash!"
677
  msgstr ""
678
 
679
+ #: includes/class-freemius.php:23192
680
  msgid "Learn more"
681
  msgstr ""
682
 
683
+ #: includes/class-freemius.php:23378, templates/account.php:558, templates/account.php:708, templates/connect.php:179, templates/connect.php:461, templates/forms/license-activation.php:27, templates/account/partials/addon.php:321
684
  msgid "Activate License"
685
  msgstr ""
686
 
687
+ #: includes/class-freemius.php:23379, templates/account.php:652, templates/account.php:707, templates/account/partials/addon.php:322, templates/account/partials/site.php:271
688
  msgid "Change License"
689
  msgstr ""
690
 
691
+ #: includes/class-freemius.php:23500, templates/account/partials/site.php:169
692
  msgid "Opt Out"
693
  msgstr ""
694
 
695
+ #: includes/class-freemius.php:23502, includes/class-freemius.php:23508, templates/account/partials/site.php:49, templates/account/partials/site.php:169
696
  msgid "Opt In"
697
  msgstr ""
698
 
699
+ #: includes/class-freemius.php:23738
700
  msgid " The paid version of %1$s is already installed. Please activate it to start benefiting the %2$s features. %3$s"
701
  msgstr ""
702
 
703
+ #: includes/class-freemius.php:23746
704
  msgid "Activate %s features"
705
  msgstr ""
706
 
707
+ #: includes/class-freemius.php:23759
708
  msgid "Please follow these steps to complete the upgrade"
709
  msgstr ""
710
 
711
+ #: includes/class-freemius.php:23763
712
  msgid "Download the latest %s version"
713
  msgstr ""
714
 
715
+ #: includes/class-freemius.php:23767
716
  msgid "Upload and activate the downloaded version"
717
  msgstr ""
718
 
719
+ #: includes/class-freemius.php:23769
720
  msgid "How to upload and activate?"
721
  msgstr ""
722
 
723
+ #: includes/class-freemius.php:23903
724
  msgid "%sClick here%s to choose the sites where you'd like to activate the license on."
725
  msgstr ""
726
 
727
+ #: includes/class-freemius.php:24072
728
  msgid "Auto installation only works for opted-in users."
729
  msgstr ""
730
 
731
+ #: includes/class-freemius.php:24082, includes/class-freemius.php:24115, includes/class-fs-plugin-updater.php:1261, includes/class-fs-plugin-updater.php:1275
732
  msgid "Invalid module ID."
733
  msgstr ""
734
 
735
+ #: includes/class-freemius.php:24091, includes/class-fs-plugin-updater.php:1297
736
  msgid "Premium version already active."
737
  msgstr ""
738
 
739
+ #: includes/class-freemius.php:24098
740
  msgid "You do not have a valid license to access the premium version."
741
  msgstr ""
742
 
743
+ #: includes/class-freemius.php:24105
744
  msgid "Plugin is a \"Serviceware\" which means it does not have a premium code version."
745
  msgstr ""
746
 
747
+ #: includes/class-freemius.php:24123, includes/class-fs-plugin-updater.php:1296
748
  msgid "Premium add-on version already installed."
749
  msgstr ""
750
 
751
+ #: includes/class-freemius.php:24473
752
  msgid "View paid features"
753
  msgstr ""
754
 
755
+ #: includes/class-freemius.php:24795
756
  msgid "Thank you so much for using %s and its add-ons!"
757
  msgstr ""
758
 
759
+ #: includes/class-freemius.php:24796
760
  msgid "Thank you so much for using %s!"
761
  msgstr ""
762
 
763
+ #: includes/class-freemius.php:24802
764
  msgid "You've already opted-in to our usage-tracking, which helps us keep improving the %s."
765
  msgstr ""
766
 
767
+ #: includes/class-freemius.php:24806
768
  msgid "Thank you so much for using our products!"
769
  msgstr ""
770
 
771
+ #: includes/class-freemius.php:24807
772
  msgid "You've already opted-in to our usage-tracking, which helps us keep improving them."
773
  msgstr ""
774
 
775
+ #: includes/class-freemius.php:24826
776
  msgid "%s and its add-ons"
777
  msgstr ""
778
 
779
+ #: includes/class-freemius.php:24835
780
  msgid "Products"
781
  msgstr ""
782
 
783
+ #: includes/class-freemius.php:24842, templates/connect.php:275
784
  msgid "Yes"
785
  msgstr ""
786
 
787
+ #: includes/class-freemius.php:24843, templates/connect.php:276
788
  msgid "send me security & feature updates, educational content and offers."
789
  msgstr ""
790
 
791
+ #: includes/class-freemius.php:24844, templates/connect.php:281
792
  msgid "No"
793
  msgstr ""
794
 
795
+ #: includes/class-freemius.php:24846, templates/connect.php:283
796
  msgid "do %sNOT%s send me security & feature updates, educational content and offers."
797
  msgstr ""
798
 
799
+ #: includes/class-freemius.php:24856
800
  msgid "Due to the new %sEU General Data Protection Regulation (GDPR)%s compliance requirements it is required that you provide your explicit consent, again, confirming that you are onboard :-)"
801
  msgstr ""
802
 
803
+ #: includes/class-freemius.php:24858, templates/connect.php:290
804
  msgid "Please let us know if you'd like us to contact you for security & feature updates, educational content, and occasional offers:"
805
  msgstr ""
806
 
807
+ #: includes/class-freemius.php:25140
808
  msgid "License key is empty."
809
  msgstr ""
810
 
832
  msgid "Important Upgrade Notice:"
833
  msgstr ""
834
 
835
+ #: includes/class-fs-plugin-updater.php:1326
836
  msgid "Installing plugin: %s"
837
  msgstr ""
838
 
839
+ #: includes/class-fs-plugin-updater.php:1367
840
  msgid "Unable to connect to the filesystem. Please confirm your credentials."
841
  msgstr ""
842
 
843
+ #: includes/class-fs-plugin-updater.php:1549
844
  msgid "The remote plugin package does not contain a folder with the desired slug and renaming did not work."
845
  msgstr ""
846
 
861
  msgid "Install Free Version Update Now"
862
  msgstr ""
863
 
864
+ #: includes/fs-plugin-info-dialog.php:745, templates/account.php:641
865
  msgid "Install Update Now"
866
  msgstr ""
867
 
878
  msgid "Download Latest Free Version"
879
  msgstr ""
880
 
881
+ #: includes/fs-plugin-info-dialog.php:772, templates/account.php:101, templates/add-ons.php:37, templates/account/partials/addon.php:25
882
  msgctxt "as download latest version"
883
  msgid "Download Latest"
884
  msgstr ""
887
  msgid "Activate this add-on"
888
  msgstr ""
889
 
890
+ #: includes/fs-plugin-info-dialog.php:789, templates/connect.php:458
891
  msgid "Activate Free Version"
892
  msgstr ""
893
 
894
+ #: includes/fs-plugin-info-dialog.php:790, templates/account.php:125, templates/add-ons.php:330, templates/account/partials/addon.php:48
895
  msgid "Activate"
896
  msgstr ""
897
 
1020
  msgid "Details"
1021
  msgstr ""
1022
 
1023
+ #: includes/fs-plugin-info-dialog.php:1318, templates/account.php:112, templates/debug.php:201, templates/debug.php:238, templates/debug.php:455, templates/account/partials/addon.php:36
1024
  msgctxt "product version"
1025
  msgid "Version"
1026
  msgstr ""
1034
  msgid "Last Updated"
1035
  msgstr ""
1036
 
1037
+ #: includes/fs-plugin-info-dialog.php:1337, templates/account.php:527
1038
  msgctxt "x-ago"
1039
  msgid "%s ago"
1040
  msgstr ""
1143
  msgid "Latest Free Version Installed"
1144
  msgstr ""
1145
 
1146
+ #: templates/account.php:102, templates/forms/subscription-cancellation.php:96, templates/account/partials/addon.php:26, templates/account/partials/site.php:311
1147
  msgid "Downgrading your plan"
1148
  msgstr ""
1149
 
1150
+ #: templates/account.php:103, templates/forms/subscription-cancellation.php:97, templates/account/partials/addon.php:27, templates/account/partials/site.php:312
1151
  msgid "Cancelling the subscription"
1152
  msgstr ""
1153
 
1154
  #. translators: %1$s: Either 'Downgrading your plan' or 'Cancelling the subscription'
1155
+ #: templates/account.php:105, templates/forms/subscription-cancellation.php:99, templates/account/partials/site.php:314
1156
  msgid "%1$s will immediately stop all future recurring payments and your %2$s plan license will expire in %3$s."
1157
  msgstr ""
1158
 
1159
+ #: templates/account.php:106, templates/forms/subscription-cancellation.php:100, templates/account/partials/addon.php:30, templates/account/partials/site.php:315
1160
  msgid "Please note that we will not be able to grandfather outdated pricing for renewals/new subscriptions after a cancellation. If you choose to renew the subscription manually in the future, after a price increase, which typically occurs once a year, you will be charged the updated price."
1161
  msgstr ""
1162
 
1163
+ #: templates/account.php:107, templates/forms/subscription-cancellation.php:106, templates/account/partials/addon.php:31
1164
  msgid "Cancelling the trial will immediately block access to all premium features. Are you sure?"
1165
  msgstr ""
1166
 
1167
+ #: templates/account.php:108, templates/forms/subscription-cancellation.php:101, templates/account/partials/addon.php:32, templates/account/partials/site.php:316
1168
  msgid "You can still enjoy all %s features but you will not have access to %s security & feature updates, nor support."
1169
  msgstr ""
1170
 
1171
+ #: templates/account.php:109, templates/forms/subscription-cancellation.php:102, templates/account/partials/addon.php:33, templates/account/partials/site.php:317
1172
  msgid "Once your license expires you can still use the Free version but you will NOT have access to the %s features."
1173
  msgstr ""
1174
 
1175
  #. translators: %s: Plan title (e.g. "Professional")
1176
+ #: templates/account.php:111, templates/account/partials/activate-license-button.php:31, templates/account/partials/addon.php:35
1177
  msgid "Activate %s Plan"
1178
  msgstr ""
1179
 
1180
  #. translators: %s: Time period (e.g. Auto renews in "2 months")
1181
+ #: templates/account.php:114, templates/account/partials/addon.php:38, templates/account/partials/site.php:291
1182
  msgid "Auto renews in %s"
1183
  msgstr ""
1184
 
1185
  #. translators: %s: Time period (e.g. Expires in "2 months")
1186
+ #: templates/account.php:116, templates/account/partials/addon.php:40, templates/account/partials/site.php:293
1187
  msgid "Expires in %s"
1188
  msgstr ""
1189
 
1190
+ #: templates/account.php:117
1191
  msgctxt "as synchronize license"
1192
  msgid "Sync License"
1193
  msgstr ""
1194
 
1195
+ #: templates/account.php:118, templates/account/partials/addon.php:41
1196
  msgid "Cancel Trial"
1197
  msgstr ""
1198
 
1199
+ #: templates/account.php:119, templates/account/partials/addon.php:42
1200
  msgid "Change Plan"
1201
  msgstr ""
1202
 
1203
+ #: templates/account.php:120, templates/account/partials/addon.php:43
1204
  msgctxt "verb"
1205
  msgid "Upgrade"
1206
  msgstr ""
1207
 
1208
+ #: templates/account.php:122, templates/account/partials/addon.php:45, templates/account/partials/site.php:318
1209
  msgctxt "verb"
1210
  msgid "Downgrade"
1211
  msgstr ""
1212
 
1213
+ #: templates/account.php:124, templates/add-ons.php:246, templates/plugin-info/features.php:72, templates/account/partials/addon.php:47, templates/account/partials/site.php:33
1214
  msgid "Free"
1215
  msgstr ""
1216
 
1217
+ #: templates/account.php:126, templates/debug.php:371, includes/customizer/class-fs-customizer-upsell-control.php:110, templates/account/partials/addon.php:49
1218
  msgctxt "as product pricing plan"
1219
  msgid "Plan"
1220
  msgstr ""
1221
 
1222
+ #: templates/account.php:127
1223
  msgid "Bundle Plan"
1224
  msgstr ""
1225
 
1226
+ #: templates/account.php:250
1227
  msgid "Free Trial"
1228
  msgstr ""
1229
 
1230
+ #: templates/account.php:261
1231
  msgid "Account Details"
1232
  msgstr ""
1233
 
1234
+ #: templates/account.php:268, templates/forms/data-debug-mode.php:33
1235
  msgid "Start Debug"
1236
  msgstr ""
1237
 
1238
+ #: templates/account.php:270
1239
  msgid "Stop Debug"
1240
  msgstr ""
1241
 
1242
+ #: templates/account.php:277
1243
  msgid "Billing & Invoices"
1244
  msgstr ""
1245
 
1246
+ #: templates/account.php:288
1247
  msgid "Deleting the account will automatically deactivate your %s plan license so you can use it on other sites. If you want to terminate the recurring payments as well, click the \"Cancel\" button, and first \"Downgrade\" your account. Are you sure you would like to continue with the deletion?"
1248
  msgstr ""
1249
 
1250
+ #: templates/account.php:290
1251
  msgid "Deletion is not temporary. Only delete if you no longer want to use this %s anymore. Are you sure you would like to continue with the deletion?"
1252
  msgstr ""
1253
 
1254
+ #: templates/account.php:293
1255
  msgid "Delete Account"
1256
  msgstr ""
1257
 
1258
+ #: templates/account.php:305, templates/account/partials/addon.php:231, templates/account/partials/deactivate-license-button.php:35
1259
  msgid "Deactivate License"
1260
  msgstr ""
1261
 
1262
+ #: templates/account.php:328, templates/forms/subscription-cancellation.php:125
1263
  msgid "Are you sure you want to proceed?"
1264
  msgstr ""
1265
 
1266
+ #: templates/account.php:328, templates/account/partials/addon.php:255
1267
  msgid "Cancel Subscription"
1268
  msgstr ""
1269
 
1270
+ #: templates/account.php:357, templates/account/partials/addon.php:340
1271
  msgctxt "as synchronize"
1272
  msgid "Sync"
1273
  msgstr ""
1274
 
1275
+ #: templates/account.php:372, templates/debug.php:505
1276
  msgid "Name"
1277
  msgstr ""
1278
 
1279
+ #: templates/account.php:378, templates/debug.php:506
1280
  msgid "Email"
1281
  msgstr ""
1282
 
1283
+ #: templates/account.php:385, templates/debug.php:369, templates/debug.php:555
1284
  msgid "User ID"
1285
  msgstr ""
1286
 
1287
+ #: templates/account.php:403, templates/account.php:721, templates/account.php:754, templates/debug.php:236, templates/debug.php:363, templates/debug.php:452, templates/debug.php:504, templates/debug.php:553, templates/debug.php:632, templates/account/payments.php:35, templates/debug/logger.php:21
1288
  msgid "ID"
1289
  msgstr ""
1290
 
1291
+ #: templates/account.php:410
1292
  msgid "Site ID"
1293
  msgstr ""
1294
 
1295
+ #: templates/account.php:413
1296
  msgid "No ID"
1297
  msgstr ""
1298
 
1299
+ #: templates/account.php:418, templates/debug.php:243, templates/debug.php:372, templates/debug.php:456, templates/debug.php:508, templates/account/partials/site.php:227
1300
  msgid "Public Key"
1301
  msgstr ""
1302
 
1303
+ #: templates/account.php:424, templates/debug.php:373, templates/debug.php:457, templates/debug.php:509, templates/account/partials/site.php:239
1304
  msgid "Secret Key"
1305
  msgstr ""
1306
 
1307
+ #: templates/account.php:427
1308
  msgctxt "as secret encryption key missing"
1309
  msgid "No Secret"
1310
  msgstr ""
1311
 
1312
+ #: templates/account.php:454, templates/account/partials/site.php:120, templates/account/partials/site.php:122
1313
  msgid "Trial"
1314
  msgstr ""
1315
 
1316
+ #: templates/account.php:481, templates/debug.php:561, templates/account/partials/site.php:260
1317
  msgid "License Key"
1318
  msgstr ""
1319
 
1320
+ #: templates/account.php:512
1321
  msgid "Join the Beta program"
1322
  msgstr ""
1323
 
1324
+ #: templates/account.php:518
1325
  msgid "not verified"
1326
  msgstr ""
1327
 
1328
+ #: templates/account.php:527, templates/account/partials/addon.php:190
1329
  msgid "Expired"
1330
  msgstr ""
1331
 
1332
+ #: templates/account.php:587
1333
  msgid "Premium version"
1334
  msgstr ""
1335
 
1336
+ #: templates/account.php:589
1337
  msgid "Free version"
1338
  msgstr ""
1339
 
1340
+ #: templates/account.php:601
1341
  msgid "Verify Email"
1342
  msgstr ""
1343
 
1344
+ #: templates/account.php:615
1345
  msgid "Download %s Version"
1346
  msgstr ""
1347
 
1348
+ #: templates/account.php:631
1349
  msgid "Download Paid Version"
1350
  msgstr ""
1351
 
1352
+ #: templates/account.php:649, templates/account.php:892, templates/account/partials/site.php:248, templates/account/partials/site.php:270
1353
  msgctxt "verb"
1354
  msgid "Show"
1355
  msgstr ""
1356
 
1357
+ #: templates/account.php:664
1358
  msgid "What is your %s?"
1359
  msgstr ""
1360
 
1361
+ #: templates/account.php:672, templates/account/billing.php:21
1362
  msgctxt "verb"
1363
  msgid "Edit"
1364
  msgstr ""
1365
 
1366
+ #: templates/account.php:676, templates/forms/user-change.php:27
1367
  msgid "Change User"
1368
  msgstr ""
1369
 
1370
+ #: templates/account.php:700
1371
  msgid "Sites"
1372
  msgstr ""
1373
 
1374
+ #: templates/account.php:713
1375
  msgid "Search by address"
1376
  msgstr ""
1377
 
1378
+ #: templates/account.php:722, templates/debug.php:366
1379
  msgid "Address"
1380
  msgstr ""
1381
 
1382
+ #: templates/account.php:723
1383
  msgid "License"
1384
  msgstr ""
1385
 
1386
+ #: templates/account.php:724
1387
  msgid "Plan"
1388
  msgstr ""
1389
 
1390
+ #: templates/account.php:757
1391
  msgctxt "as software license"
1392
  msgid "License"
1393
  msgstr ""
1394
 
1395
+ #: templates/account.php:886
1396
  msgctxt "verb"
1397
  msgid "Hide"
1398
  msgstr ""
1399
 
1400
+ #: templates/account.php:908, templates/forms/data-debug-mode.php:31
1401
  msgid "Processing"
1402
  msgstr ""
1403
 
1404
+ #: templates/account.php:911
1405
  msgid "Get updates for bleeding edge Beta versions of %s."
1406
  msgstr ""
1407
 
1408
+ #: templates/account.php:969
1409
  msgid "Cancelling %s"
1410
  msgstr ""
1411
 
1412
+ #: templates/account.php:969, templates/account.php:986, templates/forms/subscription-cancellation.php:27, templates/forms/deactivation/form.php:133
1413
  msgid "trial"
1414
  msgstr ""
1415
 
1416
+ #: templates/account.php:984, templates/forms/deactivation/form.php:150
1417
  msgid "Cancelling %s..."
1418
  msgstr ""
1419
 
1420
+ #: templates/account.php:987, templates/forms/subscription-cancellation.php:28, templates/forms/deactivation/form.php:134
1421
  msgid "subscription"
1422
  msgstr ""
1423
 
1424
+ #: templates/account.php:1001
1425
  msgid "Deactivating your license will block all premium features, but will enable activating the license on another site. Are you sure you want to proceed?"
1426
  msgstr ""
1427
 
1428
+ #: templates/account.php:1075
1429
  msgid "Disabling white-label mode"
1430
  msgstr ""
1431
 
1432
+ #: templates/account.php:1076
1433
  msgid "Enabling white-label mode"
1434
  msgstr ""
1435
 
1455
  msgid "Installed"
1456
  msgstr ""
1457
 
1458
+ #: templates/admin-notice.php:13, templates/forms/license-activation.php:222, templates/forms/resend-key.php:77
1459
  msgctxt "as close a window"
1460
  msgid "Dismiss"
1461
  msgstr ""
1510
  msgid "Agree & Activate License"
1511
  msgstr ""
1512
 
1513
+ #: templates/connect.php:184
1514
+ msgid "Welcome to %s! To get started, please enter your license key:"
1515
  msgstr ""
1516
 
1517
+ #: templates/connect.php:191
1518
  msgid "Never miss an important update - opt in to our security & feature updates notifications, educational content, offers, and non-sensitive diagnostic tracking with %4$s."
1519
  msgstr ""
1520
 
1521
+ #: templates/connect.php:192
1522
  msgid "Never miss an important update - opt in to our security and feature updates notifications, and non-sensitive diagnostic tracking with %4$s."
1523
  msgstr ""
1524
 
1525
+ #: templates/connect.php:198
1526
  msgid "Never miss an important update - opt in to our security & feature updates notifications, educational content, offers, and non-sensitive diagnostic tracking with %4$s. If you skip this, that's okay! %1$s will still work just fine."
1527
  msgstr ""
1528
 
1529
+ #: templates/connect.php:199
1530
  msgid "Never miss an important update - opt in to our security & feature updates notifications, and non-sensitive diagnostic tracking with %4$s. If you skip this, that's okay! %1$s will still work just fine."
1531
  msgstr ""
1532
 
1533
+ #: templates/connect.php:233
1534
  msgid "We're excited to introduce the Freemius network-level integration."
1535
  msgstr ""
1536
 
1537
+ #: templates/connect.php:236
1538
  msgid "During the update process we detected %d site(s) that are still pending license activation."
1539
  msgstr ""
1540
 
1541
+ #: templates/connect.php:238
1542
  msgid "If you'd like to use the %s on those sites, please enter your license key below and click the activation button."
1543
  msgstr ""
1544
 
1545
+ #: templates/connect.php:240
1546
  msgid "%s's paid features"
1547
  msgstr ""
1548
 
1549
+ #: templates/connect.php:245
1550
  msgid "Alternatively, you can skip it for now and activate the license later, in your %s's network-level Account page."
1551
  msgstr ""
1552
 
1553
+ #: templates/connect.php:247
1554
  msgid "During the update process we detected %s site(s) in the network that are still pending your attention."
1555
  msgstr ""
1556
 
1557
+ #: templates/connect.php:256, templates/forms/data-debug-mode.php:35, templates/forms/license-activation.php:49
1558
  msgid "License key"
1559
  msgstr ""
1560
 
1561
+ #: templates/connect.php:259, templates/forms/license-activation.php:22
1562
  msgid "Can't find your license key?"
1563
  msgstr ""
1564
 
1565
+ #: templates/connect.php:318, templates/connect.php:700, templates/forms/deactivation/retry-skip.php:20
1566
  msgctxt "verb"
1567
  msgid "Skip"
1568
  msgstr ""
1569
 
1570
+ #: templates/connect.php:321
1571
  msgid "Delegate to Site Admins"
1572
  msgstr ""
1573
 
1574
+ #: templates/connect.php:321
1575
  msgid "If you click it, this decision will be delegated to the sites administrators."
1576
  msgstr ""
1577
 
1578
+ #: templates/connect.php:346
1579
+ msgid "License issues?"
1580
+ msgstr ""
1581
+
1582
+ #: templates/connect.php:362
1583
  msgid "Your Profile Overview"
1584
  msgstr ""
1585
 
1586
+ #: templates/connect.php:363
1587
  msgid "Name and email address"
1588
  msgstr ""
1589
 
1590
+ #: templates/connect.php:370
1591
+ msgid "So you can manage and control your license remotely from the User Dashboard."
1592
+ msgstr ""
1593
+
1594
+ #: templates/connect.php:371
1595
  msgid "Your Site Overview"
1596
  msgstr ""
1597
 
1598
+ #: templates/connect.php:372
1599
  msgid "Site URL, WP version, PHP info"
1600
  msgstr ""
1601
 
1603
  msgid "Admin Notices"
1604
  msgstr ""
1605
 
1606
+ #: templates/connect.php:380, templates/connect.php:398
1607
  msgid "Updates, announcements, marketing, no spam"
1608
  msgstr ""
1609
 
1610
+ #: templates/connect.php:387
1611
+ msgid "So you can reuse the license when the %s is no longer active."
1612
+ msgstr ""
1613
+
1614
+ #: templates/connect.php:388
1615
+ msgid "Current %s Status"
1616
  msgstr ""
1617
 
1618
+ #: templates/connect.php:389
1619
+ msgid "Active, deactivated, or uninstalled"
1620
  msgstr ""
1621
 
1622
+ #: templates/connect.php:397
1623
  msgid "Newsletter"
1624
  msgstr ""
1625
 
1626
+ #: templates/connect.php:405
1627
  msgid "Plugins & Themes"
1628
  msgstr ""
1629
 
1630
+ #: templates/connect.php:405
1631
+ msgid "optional"
1632
+ msgstr ""
1633
+
1634
+ #: templates/connect.php:406
1635
+ msgid "To help us troubleshoot any potential issues that may arise from other plugin or theme conflicts."
1636
+ msgstr ""
1637
+
1638
+ #: templates/connect.php:407
1639
  msgid "Title, slug, version, and is active"
1640
  msgstr ""
1641
 
1642
+ #: templates/connect.php:424
1643
+ msgid "The %1$s will periodically send %2$s to %3$s for security & feature updates delivery, and license management."
1644
  msgstr ""
1645
 
1646
  #: templates/connect.php:426
1647
+ msgid "diagnostic data"
1648
+ msgstr ""
1649
+
1650
+ #: templates/connect.php:427
1651
+ msgid "Freemius is our licensing and software updates engine"
1652
+ msgstr ""
1653
+
1654
+ #: templates/connect.php:430
1655
  msgid "What permissions are being granted?"
1656
  msgstr ""
1657
 
1658
+ #: templates/connect.php:457
1659
  msgid "Don't have a license key?"
1660
  msgstr ""
1661
 
1662
+ #: templates/connect.php:460
1663
  msgid "Have a license key?"
1664
  msgstr ""
1665
 
1666
+ #: templates/connect.php:468
1667
  msgid "Privacy Policy"
1668
  msgstr ""
1669
 
1670
+ #: templates/connect.php:470
1671
  msgid "License Agreement"
1672
  msgstr ""
1673
 
1674
+ #: templates/connect.php:470
1675
  msgid "Terms of Service"
1676
  msgstr ""
1677
 
1678
+ #: templates/connect.php:866
1679
  msgctxt "as in the process of sending an email"
1680
  msgid "Sending email"
1681
  msgstr ""
1682
 
1683
+ #: templates/connect.php:867
1684
  msgctxt "as activating plugin"
1685
  msgid "Activating"
1686
  msgstr ""
2269
  msgid "Update License"
2270
  msgstr ""
2271
 
2272
+ #: templates/forms/license-activation.php:41
2273
+ msgid "The %1$s will be periodically sending data to %2$s to check for security and feature updates, and verify the validity of your license."
2274
+ msgstr ""
2275
+
2276
+ #: templates/forms/license-activation.php:183
2277
  msgid "Associate with the license owner's account."
2278
  msgstr ""
2279
 
freemius/languages/index.php CHANGED
File without changes
freemius/package.json CHANGED
@@ -4,7 +4,7 @@
4
  "author": "Freemius, Inc.",
5
  "license": "GPL-3.0",
6
  "homepage": "https://freemius.com",
7
- "version": "2.4.0",
8
  "main": "gulpfile.js",
9
  "dependencies": {},
10
  "scripts": {
4
  "author": "Freemius, Inc.",
5
  "license": "GPL-3.0",
6
  "homepage": "https://freemius.com",
7
+ "version": "2.4.2",
8
  "main": "gulpfile.js",
9
  "dependencies": {},
10
  "scripts": {
freemius/require.php CHANGED
File without changes
freemius/start.php CHANGED
@@ -15,7 +15,7 @@
15
  *
16
  * @var string
17
  */
18
- $this_sdk_version = '2.4.1';
19
 
20
  #region SDK Selection Logic --------------------------------------------------------------------
21
 
@@ -512,7 +512,7 @@
512
  }
513
 
514
  /**
515
- * @param array <string,string> $module Plugin or Theme details.
516
  *
517
  * @return Freemius
518
  * @throws Freemius_Exception
@@ -527,4 +527,4 @@
527
  function fs_dump_log() {
528
  FS_Logger::dump();
529
  }
530
- }
15
  *
16
  * @var string
17
  */
18
+ $this_sdk_version = '2.4.2';
19
 
20
  #region SDK Selection Logic --------------------------------------------------------------------
21
 
512
  }
513
 
514
  /**
515
+ * @param array <string,string|bool|array> $module Plugin or Theme details.
516
  *
517
  * @return Freemius
518
  * @throws Freemius_Exception
527
  function fs_dump_log() {
528
  FS_Logger::dump();
529
  }
530
+ }
freemius/templates/account.php CHANGED
@@ -21,7 +21,9 @@
21
  /**
22
  * @var FS_Plugin_Tag $update
23
  */
24
- $update = $fs->get_update( false, false, WP_FS__TIME_24_HOURS_IN_SEC / 24 );
 
 
25
 
26
  if ( is_object($update) ) {
27
  /**
@@ -433,11 +435,11 @@
433
  'value' => $fs->get_plugin_version()
434
  );
435
 
436
- if ( $is_premium && ! $is_whitelabeled ) {
437
  $profile[] = array(
438
  'id' => 'beta_program',
439
  'title' => '',
440
- 'value' => $user->is_beta
441
  );
442
  }
443
 
21
  /**
22
  * @var FS_Plugin_Tag $update
23
  */
24
+ $update = $fs->has_release_on_freemius() ?
25
+ $fs->get_update( false, false, WP_FS__TIME_24_HOURS_IN_SEC / 24 ) :
26
+ null;
27
 
28
  if ( is_object($update) ) {
29
  /**
435
  'value' => $fs->get_plugin_version()
436
  );
437
 
438
+ if ( ! fs_is_network_admin() && $is_premium && ! $is_whitelabeled ) {
439
  $profile[] = array(
440
  'id' => 'beta_program',
441
  'title' => '',
442
+ 'value' => $site->is_beta
443
  );
444
  }
445
 
freemius/templates/account/billing.php CHANGED
File without changes
freemius/templates/account/index.php CHANGED
File without changes
freemius/templates/account/partials/activate-license-button.php CHANGED
File without changes
freemius/templates/account/partials/addon.php CHANGED
File without changes
freemius/templates/account/partials/deactivate-license-button.php CHANGED
File without changes
freemius/templates/account/partials/index.php CHANGED
File without changes
freemius/templates/account/partials/site.php CHANGED
File without changes
freemius/templates/account/payments.php CHANGED
File without changes
freemius/templates/add-ons.php CHANGED
File without changes
freemius/templates/add-trial-to-pricing.php CHANGED
File without changes
freemius/templates/admin-notice.php CHANGED
File without changes
freemius/templates/ajax-loader.php CHANGED
File without changes
freemius/templates/auto-installation.php CHANGED
File without changes
freemius/templates/checkout.php CHANGED
File without changes
freemius/templates/connect.php CHANGED
@@ -181,12 +181,7 @@
181
 
182
  $message = $fs->apply_filters(
183
  'connect-message_on-premium',
184
- ($is_network_upgrade_mode ?
185
- '' :
186
- /* translators: %s: name (e.g. Hey John,) */
187
- $hey_x_text . '<br>'
188
- ) .
189
- sprintf( fs_text_inline( 'Thanks for purchasing %s! To get started, please enter your license key:', 'thanks-for-purchasing', $slug ), '<b>' . $fs->get_plugin_name() . '</b>' ),
190
  $first_name,
191
  $fs->get_plugin_name()
192
  );
@@ -347,6 +342,9 @@
347
  } ?>><?php echo esc_html( $button_label ) ?></button>
348
  </form>
349
  <?php endif ?>
 
 
 
350
  </div><?php
351
 
352
  // Set core permission list items.
@@ -367,26 +365,30 @@
367
  );
368
  }
369
 
370
- $permissions['site'] = array(
371
- 'icon-class' => 'dashicons dashicons-admin-settings',
372
- 'label' => $fs->get_text_inline( 'Your Site Overview', 'permissions-site' ),
373
- 'desc' => $fs->get_text_inline( 'Site URL, WP version, PHP info', 'permissions-site_desc' ),
374
- 'priority' => 10,
375
- );
376
-
377
- $permissions['notices'] = array(
378
- 'icon-class' => 'dashicons dashicons-testimonial',
379
- 'label' => $fs->get_text_inline( 'Admin Notices', 'permissions-admin-notices' ),
380
- 'desc' => $fs->get_text_inline( 'Updates, announcements, marketing, no spam', 'permissions-newsletter_desc' ),
381
- 'priority' => 13,
382
- );
 
 
 
383
 
384
- $permissions['events'] = array(
385
- 'icon-class' => 'dashicons dashicons-admin-' . ( $fs->is_plugin() ? 'plugins' : 'appearance' ),
386
- 'label' => sprintf( $fs->get_text_inline( 'Current %s Events', 'permissions-events' ), ucfirst( $fs->get_module_type() ) ),
387
- 'desc' => $fs->get_text_inline( 'Activation, deactivation and uninstall', 'permissions-events_desc' ),
388
- 'priority' => 20,
389
- );
 
390
 
391
  // Add newsletter permissions if enabled.
392
  if ( $is_gdpr_required || $fs->is_permission_requested( 'newsletter' ) ) {
@@ -398,14 +400,15 @@
398
  );
399
  }
400
 
401
- $permissions['extensions'] = array(
402
  'icon-class' => 'dashicons dashicons-menu',
403
- 'label' => $fs->get_text_inline( 'Plugins & Themes', 'permissions-extensions' ),
 
404
  'desc' => $fs->get_text_inline( 'Title, slug, version, and is active', 'permissions-extensions_desc' ),
405
  'priority' => 25,
406
  'optional' => true,
407
- 'default' => $fs->apply_filters( 'permission_extensions_default', true )
408
- );
409
 
410
  // Allow filtering of the permissions list.
411
  $permissions = $fs->apply_filters( 'permission_list', $permissions );
@@ -417,13 +420,15 @@
417
  <div class="fs-permissions">
418
  <?php if ( $require_license_key ) : ?>
419
  <p class="fs-license-sync-disclaimer"><?php
420
- echo sprintf(
421
- fs_esc_html_inline( 'The %1$s will be periodically sending data to %2$s to check for security and feature updates, and verify the validity of your license.', 'license-sync-disclaimer', $slug ),
422
  $fs->get_module_label( true ),
423
- $freemius_link
 
424
  ) ?></p>
425
- <?php endif ?>
426
  <a class="fs-trigger" href="#" tabindex="1"><?php fs_esc_html_echo_inline( 'What permissions are being granted?', 'what-permissions', $slug ) ?></a>
 
427
  <ul><?php
428
  foreach ( $permissions as $id => $permission ) : ?>
429
  <li id="fs-permission-<?php echo esc_attr( $id ); ?>"
@@ -436,7 +441,7 @@
436
  <?php endif ?>
437
 
438
  <div class="fs-permission-description">
439
- <span><?php echo esc_html( $permission['label'] ); ?></span>
440
 
441
  <p><?php echo esc_html( $permission['desc'] ); ?></p>
442
  </div>
@@ -702,9 +707,16 @@
702
  var ajaxOptin = ( requireLicenseKey || isNetworkActive );
703
 
704
  $form.on('submit', function () {
705
- var isExtensionsTrackingAllowed = $( '#fs-permission-extensions .fs-switch' ).hasClass( 'fs-on' );
706
-
707
- $( 'input[name=is_extensions_tracking_allowed]' ).val( isExtensionsTrackingAllowed ? 1 : 0 );
 
 
 
 
 
 
 
708
 
709
  /**
710
  * @author Vova Feldman (@svovaf)
181
 
182
  $message = $fs->apply_filters(
183
  'connect-message_on-premium',
184
+ sprintf( fs_text_inline( 'Welcome to %s! To get started, please enter your license key:', 'thanks-for-purchasing', $slug ), '<b>' . $fs->get_plugin_name() . '</b>' ),
 
 
 
 
 
185
  $first_name,
186
  $fs->get_plugin_name()
187
  );
342
  } ?>><?php echo esc_html( $button_label ) ?></button>
343
  </form>
344
  <?php endif ?>
345
+ <?php if ( $require_license_key ) : ?>
346
+ <a id="license_issues_link" href="<?php echo $fs->apply_filters( 'known_license_issues_url', 'https://freemius.com/help/documentation/wordpress-sdk/license-activation-issues/' ) ?>" target="_blank"><?php fs_esc_html_echo_inline( 'License issues?', 'license-issues', $slug ) ?></a>
347
+ <?php endif ?>
348
  </div><?php
349
 
350
  // Set core permission list items.
365
  );
366
  }
367
 
368
+ $permissions['site'] = array(
369
+ 'icon-class' => 'dashicons dashicons-admin-settings',
370
+ 'tooltip' => ( $require_license_key ? sprintf( $fs->get_text_inline( 'So you can manage and control your license remotely from the User Dashboard.', 'permissions-site_tooltip' ), $fs->get_module_type() ) : '' ),
371
+ 'label' => $fs->get_text_inline( 'Your Site Overview', 'permissions-site' ),
372
+ 'desc' => $fs->get_text_inline( 'Site URL, WP version, PHP info', 'permissions-site_desc' ),
373
+ 'priority' => 10,
374
+ );
375
+
376
+ if ( ! $require_license_key ) {
377
+ $permissions['notices'] = array(
378
+ 'icon-class' => 'dashicons dashicons-testimonial',
379
+ 'label' => $fs->get_text_inline( 'Admin Notices', 'permissions-admin-notices' ),
380
+ 'desc' => $fs->get_text_inline( 'Updates, announcements, marketing, no spam', 'permissions-newsletter_desc' ),
381
+ 'priority' => 13,
382
+ );
383
+ }
384
 
385
+ $permissions['events'] = array(
386
+ 'icon-class' => 'dashicons dashicons-admin-' . ( $fs->is_plugin() ? 'plugins' : 'appearance' ),
387
+ 'tooltip' => ( $require_license_key ? sprintf( $fs->get_text_inline( 'So you can reuse the license when the %s is no longer active.', 'permissions-events_tooltip' ), $fs->get_module_type() ) : '' ),
388
+ 'label' => sprintf( $fs->get_text_inline( 'Current %s Status', 'permissions-events' ), ucfirst( $fs->get_module_type() ) ),
389
+ 'desc' => $fs->get_text_inline( 'Active, deactivated, or uninstalled', 'permissions-events_desc' ),
390
+ 'priority' => 20,
391
+ );
392
 
393
  // Add newsletter permissions if enabled.
394
  if ( $is_gdpr_required || $fs->is_permission_requested( 'newsletter' ) ) {
400
  );
401
  }
402
 
403
+ $permissions['extensions'] = array(
404
  'icon-class' => 'dashicons dashicons-menu',
405
+ 'label' => $fs->get_text_inline( 'Plugins & Themes', 'permissions-extensions' ) . ( $require_license_key ? ' (' . $fs->get_text_inline( 'optional' ) . ')' : '' ),
406
+ 'tooltip' => $fs->get_text_inline( 'To help us troubleshoot any potential issues that may arise from other plugin or theme conflicts.', 'permissions-events_tooltip' ),
407
  'desc' => $fs->get_text_inline( 'Title, slug, version, and is active', 'permissions-extensions_desc' ),
408
  'priority' => 25,
409
  'optional' => true,
410
+ 'default' => $fs->apply_filters( 'permission_extensions_default', ! $require_license_key )
411
+ );
412
 
413
  // Allow filtering of the permissions list.
414
  $permissions = $fs->apply_filters( 'permission_list', $permissions );
420
  <div class="fs-permissions">
421
  <?php if ( $require_license_key ) : ?>
422
  <p class="fs-license-sync-disclaimer"><?php
423
+ echo sprintf(
424
+ fs_esc_html_inline( 'The %1$s will periodically send %2$s to %3$s for security & feature updates delivery, and license management.', 'license-sync-disclaimer', $slug ),
425
  $fs->get_module_label( true ),
426
+ sprintf('<a class="fs-trigger" href="#" tabindex="1">%s</a>', fs_esc_html_inline('diagnostic data', 'send-data')),
427
+ '<a class="fs-tooltip-trigger' . (is_rtl() ? ' rtl' : '') . '" href="' . $freemius_site_url . '" target="_blank" rel="noopener" tabindex="1">freemius.com <i class="dashicons dashicons-editor-help" style="text-decoration: none;"><span class="fs-tooltip" style="width: 170px">' . $fs->get_text_inline( 'Freemius is our licensing and software updates engine', 'permissions-extensions_desc' ) . '</span></i></a>'
428
  ) ?></p>
429
+ <?php else : ?>
430
  <a class="fs-trigger" href="#" tabindex="1"><?php fs_esc_html_echo_inline( 'What permissions are being granted?', 'what-permissions', $slug ) ?></a>
431
+ <?php endif ?>
432
  <ul><?php
433
  foreach ( $permissions as $id => $permission ) : ?>
434
  <li id="fs-permission-<?php echo esc_attr( $id ); ?>"
441
  <?php endif ?>
442
 
443
  <div class="fs-permission-description">
444
+ <span<?php if ( ! empty($permission['tooltip']) ) : ?> class="fs-tooltip-trigger"<?php endif ?>><?php echo esc_html( $permission['label'] ); ?><?php if ( ! empty($permission['tooltip']) ) : ?><i class="dashicons dashicons-editor-help"><span class="fs-tooltip" style="width: 200px"><?php echo $permission['tooltip'] ?></span></i><?php endif ?></span>
445
 
446
  <p><?php echo esc_html( $permission['desc'] ); ?></p>
447
  </div>
707
  var ajaxOptin = ( requireLicenseKey || isNetworkActive );
708
 
709
  $form.on('submit', function () {
710
+ var $extensionsPermission = $('#fs-permission-extensions .fs-switch'),
711
+ isExtensionsTrackingAllowed = ($extensionsPermission.length > 0) ?
712
+ $extensionsPermission.hasClass('fs-on') :
713
+ null;
714
+
715
+ if (null === isExtensionsTrackingAllowed) {
716
+ $('input[name=is_extensions_tracking_allowed]').remove();
717
+ } else {
718
+ $('input[name=is_extensions_tracking_allowed]').val(isExtensionsTrackingAllowed ? 1 : 0);
719
+ }
720
 
721
  /**
722
  * @author Vova Feldman (@svovaf)
freemius/templates/contact.php CHANGED
File without changes
freemius/templates/debug.php CHANGED
File without changes
freemius/templates/debug/api-calls.php CHANGED
File without changes
freemius/templates/debug/index.php CHANGED
File without changes
freemius/templates/debug/logger.php CHANGED
File without changes
freemius/templates/debug/plugins-themes-sync.php CHANGED
File without changes
freemius/templates/debug/scheduled-crons.php CHANGED
File without changes
freemius/templates/email.php CHANGED
File without changes
freemius/templates/firewall-issues-js.php CHANGED
File without changes
freemius/templates/forms/affiliation.php CHANGED
File without changes
freemius/templates/forms/data-debug-mode.php CHANGED
File without changes
freemius/templates/forms/deactivation/contact.php CHANGED
File without changes
freemius/templates/forms/deactivation/form.php CHANGED
File without changes
freemius/templates/forms/deactivation/index.php CHANGED
File without changes
freemius/templates/forms/deactivation/retry-skip.php CHANGED
File without changes
freemius/templates/forms/index.php CHANGED
File without changes
freemius/templates/forms/license-activation.php CHANGED
@@ -115,13 +115,15 @@ HTML;
115
  * @var FS_Plugin_License $license
116
  */
117
  foreach ( $available_licenses as $license ) {
 
 
118
  $label = sprintf(
119
  "%s-Site %s License - %s",
120
  ( 1 == $license->quota ?
121
  'Single' :
122
  ( $license->is_unlimited() ? 'Unlimited' : $license->quota )
123
  ),
124
- $fs->_get_plan_by_id( $license->plan_id )->title,
125
  $license->get_html_escaped_masked_secret_key()
126
  );
127
 
115
  * @var FS_Plugin_License $license
116
  */
117
  foreach ( $available_licenses as $license ) {
118
+ $plan = $fs->_get_plan_by_id( $license->plan_id );
119
+
120
  $label = sprintf(
121
  "%s-Site %s License - %s",
122
  ( 1 == $license->quota ?
123
  'Single' :
124
  ( $license->is_unlimited() ? 'Unlimited' : $license->quota )
125
  ),
126
+ ( is_object( $plan ) ? $plan->title : '' ),
127
  $license->get_html_escaped_masked_secret_key()
128
  );
129
 
freemius/templates/forms/optout.php CHANGED
File without changes
freemius/templates/forms/premium-versions-upgrade-handler.php CHANGED
File without changes
freemius/templates/forms/premium-versions-upgrade-metadata.php CHANGED
File without changes
freemius/templates/forms/resend-key.php CHANGED
File without changes
freemius/templates/forms/subscription-cancellation.php CHANGED
File without changes
freemius/templates/forms/trial-start.php CHANGED
File without changes
freemius/templates/forms/user-change.php CHANGED
File without changes
freemius/templates/gdpr-optin-js.php CHANGED
File without changes
freemius/templates/index.php CHANGED
File without changes
freemius/templates/js/index.php CHANGED
File without changes
freemius/templates/js/jquery.content-change.php CHANGED
File without changes
freemius/templates/js/open-license-activation.php CHANGED
File without changes
freemius/templates/js/style-premium-theme.php CHANGED
File without changes
freemius/templates/partials/index.php CHANGED
File without changes
freemius/templates/partials/network-activation.php CHANGED
File without changes
freemius/templates/plugin-icon.php CHANGED
File without changes
freemius/templates/plugin-info/description.php CHANGED
File without changes
freemius/templates/plugin-info/features.php CHANGED
File without changes
freemius/templates/plugin-info/index.php CHANGED
File without changes
freemius/templates/plugin-info/screenshots.php CHANGED
File without changes
freemius/templates/powered-by.php CHANGED
File without changes
freemius/templates/pricing.php CHANGED
File without changes
freemius/templates/secure-https-header.php CHANGED
File without changes
freemius/templates/sticky-admin-notice-js.php CHANGED
File without changes
freemius/templates/tabs-capture-js.php CHANGED
File without changes
freemius/templates/tabs.php CHANGED
File without changes
includes/classes/admin/menu-editor.php CHANGED
@@ -1,4 +1,9 @@
1
  <?php
 
 
 
 
 
2
 
3
  namespace JP\UM\Admin;
4
 
@@ -17,13 +22,17 @@ class Menu_Editor {
17
  * Init
18
  */
19
  public static function init() {
20
- add_filter( 'wp_edit_nav_menu_walker', array( __CLASS__, 'nav_menu_walker' ), 999999999 );
21
- add_action( 'admin_head-nav-menus.php', array( __CLASS__, 'register_metaboxes' ) );
22
- add_action( 'admin_enqueue_scripts', array( __CLASS__, 'enqueue_scripts' ) );
23
  }
24
 
25
  /**
26
  * Override the Admin Menu Walker
 
 
 
 
27
  */
28
  public static function nav_menu_walker( $walker ) {
29
  global $wp_version;
@@ -34,10 +43,10 @@ class Menu_Editor {
34
  // not sure about this one, was part of the original solution.
35
  doing_filter( 'plugins_loaded' ),
36
  // No need if its already loaded by another plugin.
37
- $walker === 'Walker_Nav_Menu_Edit_Custom_Fields',
38
  ];
39
 
40
- if ( in_array( true, $bail_early ) ) {
41
  return $walker;
42
  }
43
 
@@ -55,38 +64,39 @@ class Menu_Editor {
55
 
56
 
57
  /**
58
- *
59
  */
60
  public static function register_metaboxes() {
61
- add_meta_box( 'jp_user_menus', __( 'User Links', 'user-menus' ), array( __CLASS__, 'nav_menu_metabox', ), 'nav-menus', 'side', 'default' );
62
  }
63
 
64
  /**
65
- * @param $object
 
 
66
  */
67
  public static function nav_menu_metabox( $object ) {
68
  global $_nav_menu_placeholder, $nav_menu_selected_id;
69
 
70
- $link_types = array(
71
- array(
72
  'object' => 'login',
73
  'title' => __( 'Login', 'user-menus' ),
74
- ),
75
- array(
76
- 'object' => 'register',
77
- 'title' => __( 'Register', 'user-menus' ),
78
- ),
79
- array(
80
  'object' => 'logout',
81
  'title' => __( 'Logout', 'user-menus' ),
82
- ),
83
- );
84
 
85
  foreach ( $link_types as $key => $link ) {
86
-
87
  $i = isset( $i ) ? $i + 1 : 1;
88
 
89
- $link_types[ $key ] = (object) array_replace_recursive( array(
90
  'type' => '',
91
  'object' => '',
92
  'title' => '',
@@ -99,22 +109,21 @@ class Menu_Editor {
99
  'target' => '',
100
  'attr_title' => '',
101
  'description' => '',
102
- 'classes' => array(),
103
  'xfn' => '',
104
- ), $link );
105
-
106
  }
107
 
108
- $walker = new \Walker_Nav_Menu_Checklist;
109
 
110
- $removed_args = array(
111
  'action',
112
  'customlink-tab',
113
  'edit-menu-item',
114
  'menu-item',
115
  'page-tab',
116
  '_wpnonce',
117
- );
118
 
119
  ?>
120
 
@@ -126,56 +135,69 @@ class Menu_Editor {
126
  <?php if ( $registration_disabled ) : ?>
127
  <small>
128
  <span class="dashicons dashicons-info"></span>
129
- <?php printf( __( 'Registration is %scurrently disabled%s on your site.', 'popup-maker' ), '<a href="' . admin_url( 'options-general.php' ) . '">', '</a>' ) ; ?>
 
 
 
130
  </small>
131
  <?php endif; ?>
132
 
133
  <ul id="user-menus-checklist-all" class="categorychecklist form-no-clear <?php echo $registration_disabled ? 'user-menus-registration-disabled' : ''; ?>">
134
- <?php echo walk_nav_menu_tree( array_map( 'wp_setup_nav_menu_item', $link_types ), 0, (object) array( 'walker' => $walker ) ); ?>
135
  </ul>
136
 
137
  <p class="button-controls">
138
  <span class="list-controls">
139
- <a href="<?php
140
- echo esc_url( add_query_arg( array(
 
141
  'user-menus-all' => 'all',
142
  'selectall' => 1,
143
- ), remove_query_arg( $removed_args ) ) );
144
- ?>#user-menus-div" class="select-all"><?php _e( 'Select All' ); ?></a>
 
 
 
 
 
 
145
  </span>
146
 
147
  <span class="add-to-menu">
148
- <input type="submit"<?php wp_nav_menu_disabled_check( $nav_menu_selected_id ); ?> class="button-secondary submit-add-to-menu right" value="<?php esc_attr_e( 'Add to Menu' ); ?>" name="add-user-menus-menu-item" id="submit-user-menus-div" />
149
  <span class="spinner"></span>
150
  </span> </p>
151
  </div>
152
  </div>
153
 
154
  <?php
155
-
156
  }
157
 
158
  /**
159
- * @param $hook
 
 
160
  */
161
  public static function enqueue_scripts( $hook ) {
162
- if ( $hook != 'nav-menus.php' ) {
163
  return;
164
  }
165
 
166
- add_action( 'admin_footer', array( __CLASS__, 'media_templates' ) );
167
 
168
- // Use minified libraries if SCRIPT_DEBUG is turned off
169
  $suffix = ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) ? '' : '.min';
170
 
171
- wp_enqueue_script( 'jpum-scripts', \JP_User_Menus::$URL . 'assets/js/admin-general' . $suffix . '.js', array( 'jquery', 'underscore' ), \JP_User_Menus::$VER, true );
172
- wp_enqueue_style( 'jpum-styles', \JP_User_Menus::$URL . 'assets/css/admin-general' . $suffix . '.css', array( 'dashicons' ), \JP_User_Menus::$VER );
173
  }
174
 
175
  /**
176
- *
177
  */
178
- public static function media_templates() { ?>
 
 
179
  <script type="text/html" id="tmpl-jpum-user-codes">
180
  <div class="jpum-user-codes">
181
  <button type="button" title="<?php _e( 'Insert User Menu Codes', 'user-menus' ); ?>">
@@ -184,8 +206,8 @@ class Menu_Editor {
184
  <ul>
185
  <?php foreach ( Codes::valid_codes() as $code => $label ) : ?>
186
  <li>
187
- <a title="<?php echo $label; ?>" href="#" data-code="<?php echo $code; ?>">
188
- <?php echo $label; ?>
189
  </a>
190
  </li>
191
  <?php endforeach; ?>
1
  <?php
2
+ /**
3
+ * Admin menu editor class
4
+ *
5
+ * @package User Menus
6
+ */
7
 
8
  namespace JP\UM\Admin;
9
 
22
  * Init
23
  */
24
  public static function init() {
25
+ add_filter( 'wp_edit_nav_menu_walker', [ __CLASS__, 'nav_menu_walker' ], 999999999 );
26
+ add_action( 'admin_head-nav-menus.php', [ __CLASS__, 'register_metaboxes' ] );
27
+ add_action( 'admin_enqueue_scripts', [ __CLASS__, 'enqueue_scripts' ] );
28
  }
29
 
30
  /**
31
  * Override the Admin Menu Walker
32
+ *
33
+ * @param string $walker Current walker name.
34
+ *
35
+ * @return string
36
  */
37
  public static function nav_menu_walker( $walker ) {
38
  global $wp_version;
43
  // not sure about this one, was part of the original solution.
44
  doing_filter( 'plugins_loaded' ),
45
  // No need if its already loaded by another plugin.
46
+ 'Walker_Nav_Menu_Edit_Custom_Fields' === $walker,
47
  ];
48
 
49
+ if ( in_array( true, $bail_early, true ) ) {
50
  return $walker;
51
  }
52
 
64
 
65
 
66
  /**
67
+ * Register metaboxes.
68
  */
69
  public static function register_metaboxes() {
70
+ add_meta_box( 'jp_user_menus', __( 'User Links', 'user-menus' ), [ __CLASS__, 'nav_menu_metabox' ], 'nav-menus', 'side', 'default' );
71
  }
72
 
73
  /**
74
+ * Render nav menu metabox.
75
+ *
76
+ * @param mixed $object Nav menu object.
77
  */
78
  public static function nav_menu_metabox( $object ) {
79
  global $_nav_menu_placeholder, $nav_menu_selected_id;
80
 
81
+ $link_types = [
82
+ [
83
  'object' => 'login',
84
  'title' => __( 'Login', 'user-menus' ),
85
+ ],
86
+ [
87
+ 'object' => 'register',
88
+ 'title' => __( 'Register', 'user-menus' ),
89
+ ],
90
+ [
91
  'object' => 'logout',
92
  'title' => __( 'Logout', 'user-menus' ),
93
+ ],
94
+ ];
95
 
96
  foreach ( $link_types as $key => $link ) {
 
97
  $i = isset( $i ) ? $i + 1 : 1;
98
 
99
+ $link_types[ $key ] = (object) array_replace_recursive( [
100
  'type' => '',
101
  'object' => '',
102
  'title' => '',
109
  'target' => '',
110
  'attr_title' => '',
111
  'description' => '',
112
+ 'classes' => [],
113
  'xfn' => '',
114
+ ], $link );
 
115
  }
116
 
117
+ $walker = new \Walker_Nav_Menu_Checklist();
118
 
119
+ $removed_args = [
120
  'action',
121
  'customlink-tab',
122
  'edit-menu-item',
123
  'menu-item',
124
  'page-tab',
125
  '_wpnonce',
126
+ ];
127
 
128
  ?>
129
 
135
  <?php if ( $registration_disabled ) : ?>
136
  <small>
137
  <span class="dashicons dashicons-info"></span>
138
+ <?php
139
+ // translators: 1: link to registration page, 2: closing link tag.
140
+ echo esc_html( sprintf( __( 'Registration is %1$scurrently disabled%2$s on your site.', 'user-menus' ), '<a href="' . admin_url( 'options-general.php' ) . '">', '</a>' ) );
141
+ ?>
142
  </small>
143
  <?php endif; ?>
144
 
145
  <ul id="user-menus-checklist-all" class="categorychecklist form-no-clear <?php echo $registration_disabled ? 'user-menus-registration-disabled' : ''; ?>">
146
+ <?php echo walk_nav_menu_tree( array_map( 'wp_setup_nav_menu_item', $link_types ), 0, (object) [ 'walker' => $walker ] ); ?>
147
  </ul>
148
 
149
  <p class="button-controls">
150
  <span class="list-controls">
151
+ <a href="
152
+ <?php
153
+ echo esc_url( add_query_arg( [
154
  'user-menus-all' => 'all',
155
  'selectall' => 1,
156
+ ], remove_query_arg( $removed_args ) ) );
157
+ ?>
158
+ #user-menus-div" class="select-all">
159
+ <?php
160
+ /* phpcs:ignore WordPress.Security.EscapeOutput.UnsafePrintingFunction */
161
+ _e( 'Select All', 'user-menus' );
162
+ ?>
163
+ </a>
164
  </span>
165
 
166
  <span class="add-to-menu">
167
+ <input type="submit"<?php wp_nav_menu_disabled_check( $nav_menu_selected_id ); ?> class="button-secondary submit-add-to-menu right" value="<?php esc_attr_e( 'Add to Menu', 'user-menus' ); ?>" name="add-user-menus-menu-item" id="submit-user-menus-div" />
168
  <span class="spinner"></span>
169
  </span> </p>
170
  </div>
171
  </div>
172
 
173
  <?php
 
174
  }
175
 
176
  /**
177
+ * Enqueue scripts and styles.
178
+ *
179
+ * @param string $hook Hook name.
180
  */
181
  public static function enqueue_scripts( $hook ) {
182
+ if ( 'nav-menus.php' !== $hook ) {
183
  return;
184
  }
185
 
186
+ add_action( 'admin_footer', [ __CLASS__, 'media_templates' ] );
187
 
188
+ // Use minified libraries if SCRIPT_DEBUG is turned off.
189
  $suffix = ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) ? '' : '.min';
190
 
191
+ wp_enqueue_script( 'jpum-scripts', \JP_User_Menus::$URL . 'assets/js/admin-general' . $suffix . '.js', [ 'jquery', 'underscore' ], \JP_User_Menus::$VER, true );
192
+ wp_enqueue_style( 'jpum-styles', \JP_User_Menus::$URL . 'assets/css/admin-general' . $suffix . '.css', [ 'dashicons' ], \JP_User_Menus::$VER );
193
  }
194
 
195
  /**
196
+ * Render media templates.
197
  */
198
+ public static function media_templates() {
199
+ /* phpcs:disable WordPress.Security.EscapeOutput.UnsafePrintingFunction */
200
+ ?>
201
  <script type="text/html" id="tmpl-jpum-user-codes">
202
  <div class="jpum-user-codes">
203
  <button type="button" title="<?php _e( 'Insert User Menu Codes', 'user-menus' ); ?>">
206
  <ul>
207
  <?php foreach ( Codes::valid_codes() as $code => $label ) : ?>
208
  <li>
209
+ <a title="<?php echo esc_attr( $label ); ?>" href="#" data-code="<?php echo esc_attr( $code ); ?>">
210
+ <?php echo esc_html( $label ); ?>
211
  </a>
212
  </li>
213
  <?php endforeach; ?>
includes/classes/admin/menu-importer.php CHANGED
@@ -1,4 +1,9 @@
1
  <?php
 
 
 
 
 
2
 
3
  namespace JP\UM\Admin;
4
 
@@ -16,7 +21,7 @@ class Menu_Importer {
16
  * Init
17
  */
18
  public static function init() {
19
- add_action( 'admin_init', array( __CLASS__, 'register_importer' ) );
20
  }
21
 
22
  /**
@@ -28,9 +33,7 @@ class Menu_Importer {
28
  * @return void
29
  */
30
  public static function register_importer() {
31
-
32
  if ( defined( 'WP_LOAD_IMPORTERS' ) ) {
33
-
34
  if ( ! class_exists( 'JP\UM\Importer\Menu' ) ) {
35
  require_once \JP_User_Menus::$DIR . 'includes/classes/importer/menu.php';
36
  }
@@ -41,11 +44,9 @@ class Menu_Importer {
41
  'jpum_nav_menu_importer',
42
  __( 'WP Nav Menus', 'user-menus' ),
43
  __( 'Import nav menus and other menu item meta skipped by the default importer', 'user-menus' ),
44
- array( $importer, 'dispatch' )
45
  );
46
-
47
  }
48
-
49
  }
50
  }
51
 
1
  <?php
2
+ /**
3
+ * Menu importer class.
4
+ *
5
+ * @package User Menus
6
+ */
7
 
8
  namespace JP\UM\Admin;
9
 
21
  * Init
22
  */
23
  public static function init() {
24
+ add_action( 'admin_init', [ __CLASS__, 'register_importer' ] );
25
  }
26
 
27
  /**
33
  * @return void
34
  */
35
  public static function register_importer() {
 
36
  if ( defined( 'WP_LOAD_IMPORTERS' ) ) {
 
37
  if ( ! class_exists( 'JP\UM\Importer\Menu' ) ) {
38
  require_once \JP_User_Menus::$DIR . 'includes/classes/importer/menu.php';
39
  }
44
  'jpum_nav_menu_importer',
45
  __( 'WP Nav Menus', 'user-menus' ),
46
  __( 'Import nav menus and other menu item meta skipped by the default importer', 'user-menus' ),
47
+ [ $importer, 'dispatch' ]
48
  );
 
49
  }
 
50
  }
51
  }
52
 
includes/classes/admin/menu-settings.php CHANGED
@@ -1,4 +1,9 @@
1
  <?php
 
 
 
 
 
2
 
3
  namespace JP\UM\Admin;
4
 
@@ -17,30 +22,30 @@ class Menu_Settings {
17
  * Init
18
  */
19
  public static function init() {
20
- add_action( 'wp_nav_menu_item_custom_fields', array( __CLASS__, 'fields' ), 10, 4 );
21
- // add_action( 'wp_nav_menu_item_custom_fields_customize_template', array( __CLASS__, 'fields' ) );
22
- add_action( 'wp_update_nav_menu_item', array( __CLASS__, 'save' ), 10, 2 );
23
  }
24
 
25
  /**
26
- * @param $item_id
27
- * @param $item
28
- * @param $depth
29
- * @param $args
 
 
30
  */
31
  public static function fields( $item_id, $item, $depth, $args ) {
32
-
33
  $allowed_user_roles = static::allowed_user_roles();
34
 
35
  wp_nonce_field( 'jpum-menu-editor-nonce', 'jpum-menu-editor-nonce' ); ?>
36
 
37
  <p class="nav_item_options-avatar_size description description-wide">
38
 
39
- <label for="jp_nav_item_options-avatar_size-<?php echo $item->ID; ?>">
40
 
41
- <?php _e( 'Avatar Size', 'user-menus' ); ?><br />
42
 
43
- <input type="number" min="0" step="1" name="jp_nav_item_options[<?php echo $item->ID; ?>][avatar_size]" id="jp_nav_item_options-avatar_size-<?php echo $item->ID; ?>" value="<?php esc_attr_e( $item->avatar_size ); ?>" class="widefat code" />
44
 
45
  </label>
46
 
@@ -49,29 +54,29 @@ class Menu_Settings {
49
 
50
  <?php
51
 
52
- $which_users_options = array(
53
  '' => __( 'Everyone', 'user-menus' ),
54
  'logged_out' => __( 'Logged Out Users', 'user-menus' ),
55
  'logged_in' => __( 'Logged In Users', 'user-menus' ),
56
- );
57
-
58
- if ( in_array( $item->object, array( 'login', 'register', 'logout' ) ) ) :
59
 
60
- $redirect_types = array(
 
61
  'current' => __( 'Current Page', 'user-menus' ),
62
  'home' => __( 'Home Page', 'user-menus' ),
63
  'custom' => __( 'Custom URL', 'user-menus' ),
64
- ); ?>
 
65
 
66
  <p class="nav_item_options-redirect_type description description-wide">
67
 
68
- <label for="jp_nav_item_options-redirect_type-<?php echo $item->ID; ?>">
69
 
70
- <?php _e( 'Where should users be taken afterwards?', 'user-menus' ); ?><br />
71
 
72
- <select name="jp_nav_item_options[<?php echo $item->ID; ?>][redirect_type]" id="jp_nav_item_options-redirect_type-<?php echo $item->ID; ?>" class="widefat">
73
  <?php foreach ( $redirect_types as $option => $label ) : ?>
74
- <option value="<?php echo $option; ?>" <?php selected( $option, $item->redirect_type ); ?>>
75
  <?php echo esc_html( $label ); ?>
76
  </option>
77
  <?php endforeach; ?>
@@ -83,11 +88,11 @@ class Menu_Settings {
83
 
84
  <p class="nav_item_options-redirect_url description description-wide">
85
 
86
- <label for="jp_nav_item_options-redirect_url-<?php echo $item->ID; ?>">
87
 
88
- <?php _e( 'Enter a url user should be redirected to', 'user-menus' ); ?><br />
89
 
90
- <input type="text" name="jp_nav_item_options[<?php echo $item->ID; ?>][redirect_url]" id="jp_nav_item_options-redirect_url-<?php echo $item->ID; ?>" value="<?php esc_attr_e( $item->redirect_url ); ?>" class="widefat code" />
91
 
92
  </label>
93
 
@@ -95,38 +100,38 @@ class Menu_Settings {
95
 
96
  <p class="nav_item_options-which_users description description-wide">
97
 
98
- <label for="jp_nav_item_options-which_users-<?php echo $item->ID; ?>">
99
 
100
- <?php _e( 'Who can see this link?', 'user-menus' ); ?>
101
 
102
  </label>
103
 
104
- <select n id="jp_nav_item_options-which_users-<?php echo $item->ID; ?>" class="widefat" disabled="disabled">
105
  <option>
106
- <?php
107
- if('logout' == $item->object) {
108
- echo $which_users_options['logged_in'];
109
- } else {
110
- echo $which_users_options['logged_out'];
111
- }
112
- ?>
113
  </option>
114
  </select>
115
 
116
  </p>
117
 
118
- <?php else: ?>
119
 
120
  <p class="nav_item_options-which_users description description-wide">
121
 
122
- <label for="jp_nav_item_options-which_users-<?php echo $item->ID; ?>">
123
 
124
- <?php _e( 'Who can see this link?', 'user-menus' ); ?><br />
125
 
126
- <select name="jp_nav_item_options[<?php echo $item->ID; ?>][which_users]" id="jp_nav_item_options-which_users-<?php echo $item->ID; ?>" class="widefat">
127
- <?php foreach ( $which_users_options as $option => $label ) : ?>
128
- <option value="<?php echo $option; ?>" <?php selected( $option, $item->which_users ); ?>>
129
- <?php echo esc_html( $label ); ?>
130
  </option>
131
  <?php endforeach; ?>
132
  </select>
@@ -138,15 +143,15 @@ class Menu_Settings {
138
  <p class="nav_item_options-can_see description description-wide">
139
 
140
  <label>
141
- <input type="radio" name="jp_nav_item_options[<?php echo $item->ID; ?>][can_see]" value="yes" <?php checked( $item->can_see, 'yes' ); ?>/>
142
- <?php _e( 'Choose which roles can see this link', 'user-menus' ); ?>
143
  </label>
144
 
145
  <br />
146
 
147
  <label>
148
- <input type="radio" name="jp_nav_item_options[<?php echo $item->ID; ?>][can_see]" value="no" <?php checked( $item->can_see, 'no' ); ?>/>
149
- <?php _e( 'Choose which roles won\'t see this link', 'user-menus' ); ?>
150
  </label>
151
 
152
  </p>
@@ -154,18 +159,21 @@ class Menu_Settings {
154
  <p class="nav_item_options-roles description description-wide">
155
 
156
  <?php foreach ( $allowed_user_roles as $option => $label ) : ?>
157
- <label> <input type="checkbox" name="jp_nav_item_options[<?php echo $item->ID; ?>][roles][]" value="<?php echo $option; ?>" <?php checked( in_array( $option, $item->roles ), true ); ?>/>
158
  <?php echo esc_html( $label ); ?>
159
  </label>
160
  <?php endforeach; ?>
161
 
162
  </p>
163
 
164
- <?php endif;
 
165
  }
166
 
167
  /**
168
- * @return array|mixed|void
 
 
169
  */
170
  public static function allowed_user_roles() {
171
  global $wp_roles;
@@ -176,7 +184,7 @@ class Menu_Settings {
176
  $roles = apply_filters( 'jpum_user_roles', $wp_roles->role_names );
177
 
178
  if ( ! is_array( $roles ) || empty( $roles ) ) {
179
- $roles = array();
180
  }
181
  }
182
 
@@ -184,20 +192,22 @@ class Menu_Settings {
184
  }
185
 
186
  /**
187
- * @param $menu_id
188
- * @param $item_id
 
 
189
  */
190
  public static function save( $menu_id, $item_id ) {
191
-
192
  $allowed_roles = static::allowed_user_roles();
193
 
194
- if ( empty( $_POST['jp_nav_item_options'][ $item_id ] ) || ! isset( $_POST['jpum-menu-editor-nonce'] ) || ! wp_verify_nonce( $_POST['jpum-menu-editor-nonce'], 'jpum-menu-editor-nonce' ) ) {
195
  return;
196
  }
197
 
198
- $item_options = Item::parse_options( $_POST['jp_nav_item_options'][ $item_id ] );
 
199
 
200
- if ( $item_options['which_users'] == 'logged_in' ) {
201
  // Validate chosen roles and remove non-allowed roles.
202
  foreach ( (array) $item_options['roles'] as $key => $role ) {
203
  if ( ! array_key_exists( $role, $allowed_roles ) ) {
@@ -217,7 +227,6 @@ class Menu_Settings {
217
  delete_post_meta( $item_id, '_jp_nav_item_options' );
218
  }
219
  }
220
-
221
  }
222
 
223
  Menu_Settings::init();
1
  <?php
2
+ /**
3
+ * Menu settings class.
4
+ *
5
+ * @package User Menus
6
+ */
7
 
8
  namespace JP\UM\Admin;
9
 
22
  * Init
23
  */
24
  public static function init() {
25
+ add_action( 'wp_nav_menu_item_custom_fields', [ __CLASS__, 'fields' ], 10, 4 );
26
+ add_action( 'wp_update_nav_menu_item', [ __CLASS__, 'save' ], 10, 2 );
 
27
  }
28
 
29
  /**
30
+ * Render fields for each menu item.
31
+ *
32
+ * @param int $item_id Item ID.
33
+ * @param object $item Item object.
34
+ * @param int $depth Current menu item depth.
35
+ * @param array $args Additional array of arguments.
36
  */
37
  public static function fields( $item_id, $item, $depth, $args ) {
 
38
  $allowed_user_roles = static::allowed_user_roles();
39
 
40
  wp_nonce_field( 'jpum-menu-editor-nonce', 'jpum-menu-editor-nonce' ); ?>
41
 
42
  <p class="nav_item_options-avatar_size description description-wide">
43
 
44
+ <label for="jp_nav_item_options-avatar_size-<?php echo esc_attr( $item->ID ); ?>">
45
 
46
+ <?php echo esc_html( __( 'Avatar Size', 'user-menus' ) ); ?><br />
47
 
48
+ <input type="number" min="0" step="1" name="jp_nav_item_options[<?php echo esc_attr( $item->ID ); ?>][avatar_size]" id="jp_nav_item_options-avatar_size-<?php echo esc_attr( $item->ID ); ?>" value="<?php echo esc_attr( $item->avatar_size ); ?>" class="widefat code" />
49
 
50
  </label>
51
 
54
 
55
  <?php
56
 
57
+ $which_users_options = [
58
  '' => __( 'Everyone', 'user-menus' ),
59
  'logged_out' => __( 'Logged Out Users', 'user-menus' ),
60
  'logged_in' => __( 'Logged In Users', 'user-menus' ),
61
+ ];
 
 
62
 
63
+ if ( in_array( $item->object, [ 'login', 'register', 'logout' ], true ) ) :
64
+ $redirect_types = [
65
  'current' => __( 'Current Page', 'user-menus' ),
66
  'home' => __( 'Home Page', 'user-menus' ),
67
  'custom' => __( 'Custom URL', 'user-menus' ),
68
+ ];
69
+ ?>
70
 
71
  <p class="nav_item_options-redirect_type description description-wide">
72
 
73
+ <label for="jp_nav_item_options-redirect_type-<?php echo esc_attr( $item->ID ); ?>">
74
 
75
+ <?php echo esc_html( __( 'Where should users be taken afterwards?', 'user-menus' ) ); ?><br />
76
 
77
+ <select name="jp_nav_item_options[<?php echo esc_attr( $item->ID ); ?>][redirect_type]" id="jp_nav_item_options-redirect_type-<?php echo esc_attr( $item->ID ); ?>" class="widefat">
78
  <?php foreach ( $redirect_types as $option => $label ) : ?>
79
+ <option value="<?php echo $option; ?>" <?php /*phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped */ selected( $option, $item->redirect_type ); ?>>
80
  <?php echo esc_html( $label ); ?>
81
  </option>
82
  <?php endforeach; ?>
88
 
89
  <p class="nav_item_options-redirect_url description description-wide">
90
 
91
+ <label for="jp_nav_item_options-redirect_url-<?php echo esc_attr( $item->ID ); ?>">
92
 
93
+ <?php echo esc_html( __( 'Enter a url user should be redirected to', 'user-menus' ) ); ?><br />
94
 
95
+ <input type="text" name="jp_nav_item_options[<?php echo esc_attr( $item->ID ); ?>][redirect_url]" id="jp_nav_item_options-redirect_url-<?php echo esc_attr( $item->ID ); ?>" value="<?php echo esc_attr( $item->redirect_url ); ?>" class="widefat code" />
96
 
97
  </label>
98
 
100
 
101
  <p class="nav_item_options-which_users description description-wide">
102
 
103
+ <label for="jp_nav_item_options-which_users-<?php echo esc_attr( $item->ID ); ?>">
104
 
105
+ <?php echo esc_html( __( 'Who can see this link?', 'user-menus' ) ); ?>
106
 
107
  </label>
108
 
109
+ <select n id="jp_nav_item_options-which_users-<?php echo esc_attr( $item->ID ); ?>" class="widefat" disabled="disabled">
110
  <option>
111
+ <?php
112
+ if ( 'logout' === $item->object ) {
113
+ echo esc_html( $which_users_options['logged_in'] );
114
+ } else {
115
+ echo esc_html( $which_users_options['logged_out'] );
116
+ }
117
+ ?>
118
  </option>
119
  </select>
120
 
121
  </p>
122
 
123
+ <?php else : ?>
124
 
125
  <p class="nav_item_options-which_users description description-wide">
126
 
127
+ <label for="jp_nav_item_options-which_users-<?php echo esc_attr( $item->ID ); ?>">
128
 
129
+ <?php echo esc_html( __( 'Who can see this link?', 'user-menus' ) ); ?><br />
130
 
131
+ <select name="jp_nav_item_options[<?php echo esc_attr( $item->ID ); ?>][which_users]" id="jp_nav_item_options-which_users-<?php echo esc_attr( $item->ID ); ?>" class="widefat">
132
+ <?php foreach ( $which_users_options as $option => $label ) : ?>
133
+ <option value="<?php echo $option; ?>" <?php /*phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped */ selected( $option, $item->which_users ); ?>>
134
+ <?php echo esc_html( $label ); ?>
135
  </option>
136
  <?php endforeach; ?>
137
  </select>
143
  <p class="nav_item_options-can_see description description-wide">
144
 
145
  <label>
146
+ <input type="radio" name="jp_nav_item_options[<?php echo esc_attr( $item->ID ); ?>][can_see]" value="yes" <?php checked( $item->can_see, 'yes' ); ?>/>
147
+ <?php echo esc_html( __( 'Choose which roles can see this link', 'user-menus' ) ); ?>
148
  </label>
149
 
150
  <br />
151
 
152
  <label>
153
+ <input type="radio" name="jp_nav_item_options[<?php echo esc_attr( $item->ID ); ?>][can_see]" value="no" <?php checked( $item->can_see, 'no' ); ?>/>
154
+ <?php echo esc_html( __( 'Choose which roles won\'t see this link', 'user-menus' ) ); ?>
155
  </label>
156
 
157
  </p>
159
  <p class="nav_item_options-roles description description-wide">
160
 
161
  <?php foreach ( $allowed_user_roles as $option => $label ) : ?>
162
+ <label> <input type="checkbox" name="jp_nav_item_options[<?php echo esc_attr( $item->ID ); ?>][roles][]" value="<?php echo $option; ?>" <?php /*phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped */ checked( in_array( esc_attr( $option ), $item->roles, true ), true ); ?>/>
163
  <?php echo esc_html( $label ); ?>
164
  </label>
165
  <?php endforeach; ?>
166
 
167
  </p>
168
 
169
+ <?php
170
+ endif;
171
  }
172
 
173
  /**
174
+ * Get array of allowed user roles.
175
+ *
176
+ * @return array
177
  */
178
  public static function allowed_user_roles() {
179
  global $wp_roles;
184
  $roles = apply_filters( 'jpum_user_roles', $wp_roles->role_names );
185
 
186
  if ( ! is_array( $roles ) || empty( $roles ) ) {
187
+ $roles = [];
188
  }
189
  }
190
 
192
  }
193
 
194
  /**
195
+ * Save menu item data.
196
+ *
197
+ * @param int $menu_id Menu ID.
198
+ * @param int $item_id Item ID.
199
  */
200
  public static function save( $menu_id, $item_id ) {
 
201
  $allowed_roles = static::allowed_user_roles();
202
 
203
+ if ( empty( $_POST['jp_nav_item_options'][ $item_id ] ) || ! isset( $_POST['jpum-menu-editor-nonce'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['jpum-menu-editor-nonce'] ) ), 'jpum-menu-editor-nonce' ) ) {
204
  return;
205
  }
206
 
207
+ /* phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized */
208
+ $item_options = Item::parse_options( wp_unslash( $_POST['jp_nav_item_options'][ $item_id ] ) );
209
 
210
+ if ( 'logged_in' === $item_options['which_users'] ) {
211
  // Validate chosen roles and remove non-allowed roles.
212
  foreach ( (array) $item_options['roles'] as $key => $role ) {
213
  if ( ! array_key_exists( $role, $allowed_roles ) ) {
227
  delete_post_meta( $item_id, '_jp_nav_item_options' );
228
  }
229
  }
 
230
  }
231
 
232
  Menu_Settings::init();
includes/classes/admin/reviews.php CHANGED
@@ -1,4 +1,9 @@
1
  <?php
 
 
 
 
 
2
 
3
  namespace JP\UM\Admin;
4
 
@@ -23,11 +28,11 @@ class Reviews {
23
  public static $api_url;
24
 
25
  /**
26
- *
27
  */
28
  public static function init() {
29
- add_action( 'admin_init', array( __CLASS__, 'hooks' ) );
30
- add_action( 'wp_ajax_jpum_review_action', array( __CLASS__, 'ajax_handler' ) );
31
  }
32
 
33
  /**
@@ -36,9 +41,9 @@ class Reviews {
36
  public static function hooks() {
37
  if ( is_admin() && current_user_can( 'edit_theme_options' ) ) {
38
  self::installed_on();
39
- add_action( 'admin_notices', array( __CLASS__, 'admin_notices' ) );
40
- add_action( 'network_admin_notices', array( __CLASS__, 'admin_notices' ) );
41
- add_action( 'user_admin_notices', array( __CLASS__, 'admin_notices' ) );
42
  }
43
  }
44
 
@@ -62,16 +67,17 @@ class Reviews {
62
  * AJAX Handler
63
  */
64
  public static function ajax_handler() {
65
- $args = wp_parse_args( $_REQUEST, array(
 
 
 
 
 
66
  'group' => self::get_trigger_group(),
67
  'code' => self::get_trigger_code(),
68
  'pri' => self::get_current_trigger( 'pri' ),
69
  'reason' => 'maybe_later',
70
- ) );
71
-
72
- if ( ! wp_verify_nonce( $_REQUEST['nonce'], 'jpum_review_action' ) ) {
73
- wp_send_json_error();
74
- }
75
 
76
  try {
77
  $user_id = get_current_user_id();
@@ -92,27 +98,27 @@ class Reviews {
92
  }
93
 
94
  wp_send_json_success();
95
-
96
  } catch ( \Exception $e ) {
97
  wp_send_json_error( $e );
98
  }
99
  }
100
 
101
  /**
 
 
102
  * @return int|string
103
  */
104
  public static function get_trigger_group() {
105
  static $selected;
106
 
107
  if ( ! isset( $selected ) ) {
108
-
109
  $dismissed_triggers = self::dismissed_triggers();
110
 
111
  $triggers = self::triggers();
112
 
113
  foreach ( $triggers as $g => $group ) {
114
  foreach ( $group['triggers'] as $t => $trigger ) {
115
- if ( ! in_array( false, $trigger['conditions'] ) && ( empty( $dismissed_triggers[ $g ] ) || $dismissed_triggers[ $g ] < $trigger['pri'] ) ) {
116
  $selected = $g;
117
  break;
118
  }
@@ -128,18 +134,19 @@ class Reviews {
128
  }
129
 
130
  /**
 
 
131
  * @return int|string
132
  */
133
  public static function get_trigger_code() {
134
  static $selected;
135
 
136
  if ( ! isset( $selected ) ) {
137
-
138
  $dismissed_triggers = self::dismissed_triggers();
139
 
140
  foreach ( self::triggers() as $g => $group ) {
141
  foreach ( $group['triggers'] as $t => $trigger ) {
142
- if ( ! in_array( false, $trigger['conditions'] ) && ( empty( $dismissed_triggers[ $g ] ) || $dismissed_triggers[ $g ] < $trigger['pri'] ) ) {
143
  $selected = $t;
144
  break;
145
  }
@@ -155,7 +162,9 @@ class Reviews {
155
  }
156
 
157
  /**
158
- * @param null $key
 
 
159
  *
160
  * @return bool|mixed|void
161
  */
@@ -189,7 +198,7 @@ class Reviews {
189
  $dismissed_triggers = get_user_meta( $user_id, '_jpum_reviews_dismissed_triggers', true );
190
 
191
  if ( ! $dismissed_triggers ) {
192
- $dismissed_triggers = array();
193
  }
194
 
195
  return $dismissed_triggers;
@@ -217,50 +226,50 @@ class Reviews {
217
  /**
218
  * Gets a list of triggers.
219
  *
220
- * @param null $group
221
- * @param null $code
222
  *
223
- * @return bool|mixed|void
224
  */
225
  public static function triggers( $group = null, $code = null ) {
226
  static $triggers;
227
 
228
  if ( ! isset( $triggers ) ) {
229
-
230
  $time_message = __( 'Hi there! You\'ve been using the User Menus plugin on your site for %s now - We hope it\'s been helpful. If you\'re enjoying the plugin, would you mind rating it 5-stars to help spread the word?', 'user-menus' );
231
- $triggers = array(
232
- 'time_installed' => array(
233
- 'triggers' => array(
234
- 'one_week' => array(
235
  'message' => sprintf( $time_message, __( '2 weeks', 'user-menus' ) ),
236
- 'conditions' => array(
237
  strtotime( self::installed_on() . ' +2 weeks' ) < time(),
238
- ),
239
  'link' => 'https://wordpress.org/support/plugin/user-menus/reviews/?rate=5#rate-response',
240
  'pri' => 10,
241
- ),
242
- 'three_months' => array(
243
  'message' => sprintf( $time_message, __( '3 months', 'user-menus' ) ),
244
- 'conditions' => array(
245
  strtotime( self::installed_on() . ' +3 months' ) < time(),
246
- ),
247
  'link' => 'https://wordpress.org/support/plugin/user-menus/reviews/?rate=5#rate-response',
248
  'pri' => 20,
249
- ),
250
 
251
- ),
252
  'pri' => 10,
253
- ),
254
- );
255
 
256
  $triggers = apply_filters( 'jpum_reviews_triggers', $triggers );
257
 
258
- // Sort Groups
259
- uasort( $triggers, array( __CLASS__, 'rsort_by_priority' ) );
260
 
261
  // Sort each groups triggers.
262
  foreach ( $triggers as $k => $v ) {
263
- uasort( $triggers[ $k ]['triggers'], array( __CLASS__, 'rsort_by_priority' ) );
264
  }
265
  }
266
 
@@ -270,10 +279,10 @@ class Reviews {
270
  }
271
 
272
  if ( ! isset( $code ) ) {
273
- return $triggers[ $group ];
274
- } else {
275
- return isset( $triggers[ $group ]['triggers'][ $code ] ) ? $triggers[ $group ]['triggers'][ $code ] : false;
276
- }
277
  }
278
 
279
  return $triggers;
@@ -300,9 +309,9 @@ class Reviews {
300
  <script type="text/javascript">
301
  (function ($) {
302
  var trigger = {
303
- group: '<?php echo $group; ?>',
304
- code: '<?php echo $code; ?>',
305
- pri: '<?php echo $pri; ?>'
306
  };
307
 
308
  function dismiss(reason) {
@@ -312,7 +321,7 @@ class Reviews {
312
  url: ajaxurl,
313
  data: {
314
  action: 'jpum_review_action',
315
- nonce: '<?php echo wp_create_nonce( 'jpum_review_action' ); ?>',
316
  group: trigger.group,
317
  code: trigger.code,
318
  pri: trigger.pri,
@@ -324,12 +333,12 @@ class Reviews {
324
  $.ajax({
325
  method: "POST",
326
  dataType: "json",
327
- url: '<?php echo self::$api_url; ?>',
328
  data: {
329
  trigger_group: trigger.group,
330
  trigger_code: trigger.code,
331
  reason: reason,
332
- uuid: '<?php echo $uuid; ?>'
333
  }
334
  });
335
  <?php endif; ?>
@@ -376,27 +385,27 @@ class Reviews {
376
  <div class="notice notice-success is-dismissible jpum-notice">
377
 
378
  <p>
379
- <img class="logo" src="<?php echo \JP_User_Menus::$URL; ?>assets/images/icon-128x128.png" />
380
  <strong>
381
- <?php echo $trigger['message']; ?>
382
  <br />
383
  ~<a target="_blank" href="https://twitter.com/danieliser" title="Follow Daniel on Twitter">@danieliser</a>
384
  </strong>
385
  </p>
386
  <ul>
387
  <li>
388
- <a class="jpum-dismiss" target="_blank" href="<?php echo $trigger['link']; ?>>" data-reason="am_now">
389
- <strong><?php _e( 'Ok, you deserve it', 'user-menus' ); ?></strong>
390
  </a>
391
  </li>
392
  <li>
393
  <a href="#" class="jpum-dismiss" data-reason="maybe_later">
394
- <?php _e( 'Nope, maybe later', 'user-menus' ); ?>
395
  </a>
396
  </li>
397
  <li>
398
  <a href="#" class="jpum-dismiss" data-reason="already_did">
399
- <?php _e( 'I already did', 'user-menus' ); ?>
400
  </a>
401
  </li>
402
  </ul>
@@ -414,13 +423,13 @@ class Reviews {
414
  public static function hide_notices() {
415
  $code = self::get_trigger_code();
416
 
417
- $conditions = array(
418
  self::already_did(),
419
  self::last_dismissed() && strtotime( self::last_dismissed() . ' +2 weeks' ) > time(),
420
  empty( $code ),
421
- );
422
 
423
- return in_array( true, $conditions );
424
  }
425
 
426
  /**
@@ -435,10 +444,10 @@ class Reviews {
435
  }
436
 
437
  /**
438
- * Sort array by priority value
439
  *
440
- * @param $a
441
- * @param $b
442
  *
443
  * @return int
444
  */
@@ -453,8 +462,8 @@ class Reviews {
453
  /**
454
  * Sort array in reverse by priority value
455
  *
456
- * @param $a
457
- * @param $b
458
  *
459
  * @return int
460
  */
1
  <?php
2
+ /**
3
+ * Review request class.
4
+ *
5
+ * @package User Menus
6
+ */
7
 
8
  namespace JP\UM\Admin;
9
 
28
  public static $api_url;
29
 
30
  /**
31
+ * Initialize.
32
  */
33
  public static function init() {
34
+ add_action( 'admin_init', [ __CLASS__, 'hooks' ] );
35
+ add_action( 'wp_ajax_jpum_review_action', [ __CLASS__, 'ajax_handler' ] );
36
  }
37
 
38
  /**
41
  public static function hooks() {
42
  if ( is_admin() && current_user_can( 'edit_theme_options' ) ) {
43
  self::installed_on();
44
+ add_action( 'admin_notices', [ __CLASS__, 'admin_notices' ] );
45
+ add_action( 'network_admin_notices', [ __CLASS__, 'admin_notices' ] );
46
+ add_action( 'user_admin_notices', [ __CLASS__, 'admin_notices' ] );
47
  }
48
  }
49
 
67
  * AJAX Handler
68
  */
69
  public static function ajax_handler() {
70
+ /* phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotValidated */
71
+ if ( ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_REQUEST['nonce'] ) ), 'jpum_review_action' ) ) {
72
+ wp_send_json_error();
73
+ }
74
+
75
+ $args = wp_parse_args( $_REQUEST, [
76
  'group' => self::get_trigger_group(),
77
  'code' => self::get_trigger_code(),
78
  'pri' => self::get_current_trigger( 'pri' ),
79
  'reason' => 'maybe_later',
80
+ ] );
 
 
 
 
81
 
82
  try {
83
  $user_id = get_current_user_id();
98
  }
99
 
100
  wp_send_json_success();
 
101
  } catch ( \Exception $e ) {
102
  wp_send_json_error( $e );
103
  }
104
  }
105
 
106
  /**
107
+ * Get review trigger group.
108
+ *
109
  * @return int|string
110
  */
111
  public static function get_trigger_group() {
112
  static $selected;
113
 
114
  if ( ! isset( $selected ) ) {
 
115
  $dismissed_triggers = self::dismissed_triggers();
116
 
117
  $triggers = self::triggers();
118
 
119
  foreach ( $triggers as $g => $group ) {
120
  foreach ( $group['triggers'] as $t => $trigger ) {
121
+ if ( ! in_array( false, $trigger['conditions'], true ) && ( empty( $dismissed_triggers[ $g ] ) || $dismissed_triggers[ $g ] < $trigger['pri'] ) ) {
122
  $selected = $g;
123
  break;
124
  }
134
  }
135
 
136
  /**
137
+ * Get review trigger code.
138
+ *
139
  * @return int|string
140
  */
141
  public static function get_trigger_code() {
142
  static $selected;
143
 
144
  if ( ! isset( $selected ) ) {
 
145
  $dismissed_triggers = self::dismissed_triggers();
146
 
147
  foreach ( self::triggers() as $g => $group ) {
148
  foreach ( $group['triggers'] as $t => $trigger ) {
149
+ if ( ! in_array( false, $trigger['conditions'], true ) && ( empty( $dismissed_triggers[ $g ] ) || $dismissed_triggers[ $g ] < $trigger['pri'] ) ) {
150
  $selected = $t;
151
  break;
152
  }
162
  }
163
 
164
  /**
165
+ * Get current trigger.
166
+ *
167
+ * @param string $key Trigger key string.
168
  *
169
  * @return bool|mixed|void
170
  */
198
  $dismissed_triggers = get_user_meta( $user_id, '_jpum_reviews_dismissed_triggers', true );
199
 
200
  if ( ! $dismissed_triggers ) {
201
+ $dismissed_triggers = [];
202
  }
203
 
204
  return $dismissed_triggers;
226
  /**
227
  * Gets a list of triggers.
228
  *
229
+ * @param string $group Group key.
230
+ * @param string $code Trigger ID.
231
  *
232
+ * @return array
233
  */
234
  public static function triggers( $group = null, $code = null ) {
235
  static $triggers;
236
 
237
  if ( ! isset( $triggers ) ) {
238
+ /* phpcs:ignore WordPress.WP.I18n.MissingTranslatorsComment */
239
  $time_message = __( 'Hi there! You\'ve been using the User Menus plugin on your site for %s now - We hope it\'s been helpful. If you\'re enjoying the plugin, would you mind rating it 5-stars to help spread the word?', 'user-menus' );
240
+ $triggers = [
241
+ 'time_installed' => [
242
+ 'triggers' => [
243
+ 'one_week' => [
244
  'message' => sprintf( $time_message, __( '2 weeks', 'user-menus' ) ),
245
+ 'conditions' => [
246
  strtotime( self::installed_on() . ' +2 weeks' ) < time(),
247
+ ],
248
  'link' => 'https://wordpress.org/support/plugin/user-menus/reviews/?rate=5#rate-response',
249
  'pri' => 10,
250
+ ],
251
+ 'three_months' => [
252
  'message' => sprintf( $time_message, __( '3 months', 'user-menus' ) ),
253
+ 'conditions' => [
254
  strtotime( self::installed_on() . ' +3 months' ) < time(),
255
+ ],
256
  'link' => 'https://wordpress.org/support/plugin/user-menus/reviews/?rate=5#rate-response',
257
  'pri' => 20,
258
+ ],
259
 
260
+ ],
261
  'pri' => 10,
262
+ ],
263
+ ];
264
 
265
  $triggers = apply_filters( 'jpum_reviews_triggers', $triggers );
266
 
267
+ // Sort Groups.
268
+ uasort( $triggers, [ __CLASS__, 'rsort_by_priority' ] );
269
 
270
  // Sort each groups triggers.
271
  foreach ( $triggers as $k => $v ) {
272
+ uasort( $triggers[ $k ]['triggers'], [ __CLASS__, 'rsort_by_priority' ] );
273
  }
274
  }
275
 
279
  }
280
 
281
  if ( ! isset( $code ) ) {
282
+ return $triggers[ $group ];
283
+ } else {
284
+ return isset( $triggers[ $group ]['triggers'][ $code ] ) ? $triggers[ $group ]['triggers'][ $code ] : false;
285
+ }
286
  }
287
 
288
  return $triggers;
309
  <script type="text/javascript">
310
  (function ($) {
311
  var trigger = {
312
+ group: '<?php echo esc_html( $group ); ?>',
313
+ code: '<?php echo esc_html( $code ); ?>',
314
+ pri: '<?php echo esc_html( $pri ); ?>'
315
  };
316
 
317
  function dismiss(reason) {
321
  url: ajaxurl,
322
  data: {
323
  action: 'jpum_review_action',
324
+ nonce: '<?php echo esc_attr( wp_create_nonce( 'jpum_review_action' ) ); ?>',
325
  group: trigger.group,
326
  code: trigger.code,
327
  pri: trigger.pri,
333
  $.ajax({
334
  method: "POST",
335
  dataType: "json",
336
+ url: '<?php echo esc_attr( self::$api_url ); ?>',
337
  data: {
338
  trigger_group: trigger.group,
339
  trigger_code: trigger.code,
340
  reason: reason,
341
+ uuid: '<?php echo esc_attr( $uuid ); ?>'
342
  }
343
  });
344
  <?php endif; ?>
385
  <div class="notice notice-success is-dismissible jpum-notice">
386
 
387
  <p>
388
+ <img class="logo" src="<?php echo esc_attr( \JP_User_Menus::$URL ); ?>assets/images/icon-128x128.png" />
389
  <strong>
390
+ <?php echo esc_attr( $trigger['message'] ); ?>
391
  <br />
392
  ~<a target="_blank" href="https://twitter.com/danieliser" title="Follow Daniel on Twitter">@danieliser</a>
393
  </strong>
394
  </p>
395
  <ul>
396
  <li>
397
+ <a class="jpum-dismiss" target="_blank" href="<?php echo esc_attr( $trigger['link'] ); ?>>" data-reason="am_now">
398
+ <strong><?php echo esc_html( __( 'Ok, you deserve it', 'user-menus' ) ); ?></strong>
399
  </a>
400
  </li>
401
  <li>
402
  <a href="#" class="jpum-dismiss" data-reason="maybe_later">
403
+ <?php esc_html( __( 'Nope, maybe later', 'user-menus' ) ); ?>
404
  </a>
405
  </li>
406
  <li>
407
  <a href="#" class="jpum-dismiss" data-reason="already_did">
408
+ <?php esc_html( __( 'I already did', 'user-menus' ) ); ?>
409
  </a>
410
  </li>
411
  </ul>
423
  public static function hide_notices() {
424
  $code = self::get_trigger_code();
425
 
426
+ $conditions = [
427
  self::already_did(),
428
  self::last_dismissed() && strtotime( self::last_dismissed() . ' +2 weeks' ) > time(),
429
  empty( $code ),
430
+ ];
431
 
432
+ return in_array( true, $conditions, true );
433
  }
434
 
435
  /**
444
  }
445
 
446
  /**
447
+ * Sort array by priority value.
448
  *
449
+ * @param string|int $a The first value to compare.
450
+ * @param string|int $b The second value to compare.
451
  *
452
  * @return int
453
  */
462
  /**
463
  * Sort array in reverse by priority value
464
  *
465
+ * @param string|int $a The first value to compare.
466
+ * @param string|int $b The second value to compare.
467
  *
468
  * @return int
469
  */
includes/classes/importer/menu.php CHANGED
@@ -1,4 +1,9 @@
1
  <?php
 
 
 
 
 
2
 
3
  namespace JP\UM\Importer;
4
 
@@ -12,13 +17,10 @@ if ( ! defined( 'WP_LOAD_IMPORTERS' ) ) {
12
 
13
  /** Display verbose errors */
14
  if ( ! defined( 'IMPORT_DEBUG' ) ) {
15
- /**
16
- *
17
- */
18
  define( 'IMPORT_DEBUG', false );
19
  }
20
 
21
- // Load Importer API
22
  if ( ! function_exists( 'get_importers' ) ) {
23
  require_once ABSPATH . 'wp-admin/includes/import.php';
24
  }
@@ -27,6 +29,7 @@ if ( ! class_exists( 'WP_Importer' ) ) {
27
  require_once ABSPATH . 'wp-admin/includes/class-wp-importer.php';
28
  }
29
 
 
30
 
31
  /**
32
  * Class JP\UM\Importer\Menu
@@ -34,36 +37,50 @@ if ( ! class_exists( 'WP_Importer' ) ) {
34
  class Menu extends \WP_Importer {
35
 
36
  /**
37
- * @var float max. supported WXR version
 
 
38
  */
39
  public $max_wxr_version = 1.2;
40
 
41
  /**
42
- * @var integer WXR attachment ID
 
 
43
  */
44
  public $id;
45
 
46
  /**
47
- * @var string WXR File Version
 
 
48
  */
49
  public $version;
 
50
  /**
 
 
51
  * @var array
52
  */
53
- public $posts = array();
 
54
  /**
 
 
55
  * @var string
56
  */
57
  public $base_url = '';
58
 
59
  /**
 
 
60
  * @var array
61
  */
62
- public $invalid_meta_keys = array(
63
  '_wp_attached_file',
64
  '_wp_attachment_metadata',
65
  '_edit_lock',
66
- );
67
 
68
  /**
69
  * Registered callback function for the WordPress Importer
@@ -133,7 +150,7 @@ class Menu extends \WP_Importer {
133
  echo esc_html( $file['error'] ) . '</p>';
134
 
135
  return false;
136
- } else if ( ! file_exists( $file['file'] ) ) {
137
  echo '<p><strong>' . __( 'Sorry, there has been an error.', 'user-menus' ) . '</strong><br />';
138
  printf( __( 'The export file could not be found at <code>%s</code>. It is likely that this was caused by a permissions problem.', 'user-menus' ), esc_html( $file['file'] ) );
139
  echo '</p>';
@@ -163,11 +180,11 @@ class Menu extends \WP_Importer {
163
  /**
164
  * The main controller for the actual import stage.
165
  *
166
- * @param string $file Path to the WXR file for importing
167
  */
168
  public function import( $file ) {
169
- add_filter( 'import_post_meta_key', array( $this, 'is_valid_meta_key' ) );
170
- add_filter( 'http_request_timeout', array( $this, 'bump_request_timeout' ) );
171
 
172
  $this->import_start( $file );
173
 
@@ -188,9 +205,9 @@ class Menu extends \WP_Importer {
188
  /**
189
  * Parse a WXR file
190
  *
191
- * @param string $file Path to WXR file for parsing
192
  *
193
- * @return array Information gathered from the WXR file
194
  */
195
  public function parse( $file ) {
196
  $parser = new \WXR_Parser();
@@ -199,9 +216,9 @@ class Menu extends \WP_Importer {
199
  }
200
 
201
  /**
202
- * Parses the WXR file and prepares us for the task of processing parsed data
203
  *
204
- * @param string $file Path to the WXR file for importing
205
  */
206
  public function import_start( $file ) {
207
  if ( ! is_file( $file ) ) {
@@ -217,7 +234,8 @@ class Menu extends \WP_Importer {
217
 
218
  if ( is_wp_error( $import_data ) ) {
219
  echo '<p><strong>' . __( 'Sorry, there has been an error.', 'user-menus' ) . '</strong><br />';
220
- echo esc_html( $import_data->get_error_message() );;
 
221
  echo '</p>';
222
 
223
  $this->footer();
@@ -238,29 +256,25 @@ class Menu extends \WP_Importer {
238
  foreach ( $this->posts as $post ) {
239
 
240
  // Exclude other post types.
241
- if ( 'nav_menu_item' != $post['post_type'] || ! empty( $post['post_id'] ) ) {
242
  continue;
243
  }
244
 
245
  $post_id = (int) $post['post_id'];
246
 
247
  if ( isset( $post['postmeta'] ) ) {
248
-
249
  foreach ( $post['postmeta'] as $meta ) {
250
-
251
  $key = apply_filters( 'import_post_meta_key', $meta['key'] );
252
  $value = false;
253
 
254
-
255
  if ( $key ) {
256
- // export gets meta straight from the DB so could have a serialized string
257
  if ( ! $value ) {
258
  $value = maybe_unserialize( $meta['value'] );
259
  }
260
 
261
  update_post_meta( $post_id, $key, $value );
262
  do_action( 'import_post_meta', $post_id, $key, $value );
263
-
264
  }
265
  }
266
  }
@@ -270,27 +284,27 @@ class Menu extends \WP_Importer {
270
  }
271
 
272
  /**
273
- * Performs post-import cleanup of files and the cache
274
  */
275
  public function import_end() {
276
  wp_import_cleanup( $this->id );
277
 
278
  wp_cache_flush();
279
 
280
- echo '<p>' . __( 'All done.', 'user-menus' ) . ' <a href="' . admin_url() . '">' . __( 'Have fun!', 'user-menus' ) . '</a>' . '</p>';
281
 
282
  do_action( 'import_end' );
283
  }
284
 
285
  /**
286
- * Decide if the given meta key maps to information we will want to import
287
  *
288
- * @param string $key The meta key to check
289
  *
290
- * @return string|bool The key if we do want to import, false if not
291
  */
292
  public function is_valid_meta_key( $key ) {
293
- if ( in_array( $key, $this->invalid_meta_keys ) ) {
294
  return false;
295
  }
296
 
1
  <?php
2
+ /**
3
+ * Nav menu custom importer class.
4
+ *
5
+ * @package User Menus
6
+ */
7
 
8
  namespace JP\UM\Importer;
9
 
17
 
18
  /** Display verbose errors */
19
  if ( ! defined( 'IMPORT_DEBUG' ) ) {
 
 
 
20
  define( 'IMPORT_DEBUG', false );
21
  }
22
 
23
+ // Load Importer API.
24
  if ( ! function_exists( 'get_importers' ) ) {
25
  require_once ABSPATH . 'wp-admin/includes/import.php';
26
  }
29
  require_once ABSPATH . 'wp-admin/includes/class-wp-importer.php';
30
  }
31
 
32
+ /* phpcs:disable WordPress.WP.I18n.MissingTranslatorsComment, WordPress.Security.EscapeOutput.OutputNotEscaped */
33
 
34
  /**
35
  * Class JP\UM\Importer\Menu
37
  class Menu extends \WP_Importer {
38
 
39
  /**
40
+ * Max supported WXR version
41
+ *
42
+ * @var float
43
  */
44
  public $max_wxr_version = 1.2;
45
 
46
  /**
47
+ * WXR attachment ID
48
+ *
49
+ * @var integer
50
  */
51
  public $id;
52
 
53
  /**
54
+ * WXR File Version
55
+ *
56
+ * @var string
57
  */
58
  public $version;
59
+
60
  /**
61
+ * Array of posts.
62
+ *
63
  * @var array
64
  */
65
+ public $posts = [];
66
+
67
  /**
68
+ * Base URL.
69
+ *
70
  * @var string
71
  */
72
  public $base_url = '';
73
 
74
  /**
75
+ * Invalid meta keys.
76
+ *
77
  * @var array
78
  */
79
+ public $invalid_meta_keys = [
80
  '_wp_attached_file',
81
  '_wp_attachment_metadata',
82
  '_edit_lock',
83
+ ];
84
 
85
  /**
86
  * Registered callback function for the WordPress Importer
150
  echo esc_html( $file['error'] ) . '</p>';
151
 
152
  return false;
153
+ } elseif ( ! file_exists( $file['file'] ) ) {
154
  echo '<p><strong>' . __( 'Sorry, there has been an error.', 'user-menus' ) . '</strong><br />';
155
  printf( __( 'The export file could not be found at <code>%s</code>. It is likely that this was caused by a permissions problem.', 'user-menus' ), esc_html( $file['file'] ) );
156
  echo '</p>';
180
  /**
181
  * The main controller for the actual import stage.
182
  *
183
+ * @param string $file Path to the WXR file for importing.
184
  */
185
  public function import( $file ) {
186
+ add_filter( 'import_post_meta_key', [ $this, 'is_valid_meta_key' ] );
187
+ add_filter( 'http_request_timeout', [ $this, 'bump_request_timeout' ] );
188
 
189
  $this->import_start( $file );
190
 
205
  /**
206
  * Parse a WXR file
207
  *
208
+ * @param string $file Path to WXR file for parsing.
209
  *
210
+ * @return array Information gathered from the WXR file.
211
  */
212
  public function parse( $file ) {
213
  $parser = new \WXR_Parser();
216
  }
217
 
218
  /**
219
+ * Parses the WXR file and prepares us for the task of processing parsed data.
220
  *
221
+ * @param string $file Path to the WXR file for importing.
222
  */
223
  public function import_start( $file ) {
224
  if ( ! is_file( $file ) ) {
234
 
235
  if ( is_wp_error( $import_data ) ) {
236
  echo '<p><strong>' . __( 'Sorry, there has been an error.', 'user-menus' ) . '</strong><br />';
237
+ echo esc_html( $import_data->get_error_message() );
238
+
239
  echo '</p>';
240
 
241
  $this->footer();
256
  foreach ( $this->posts as $post ) {
257
 
258
  // Exclude other post types.
259
+ if ( 'nav_menu_item' !== $post['post_type'] || ! empty( $post['post_id'] ) ) {
260
  continue;
261
  }
262
 
263
  $post_id = (int) $post['post_id'];
264
 
265
  if ( isset( $post['postmeta'] ) ) {
 
266
  foreach ( $post['postmeta'] as $meta ) {
 
267
  $key = apply_filters( 'import_post_meta_key', $meta['key'] );
268
  $value = false;
269
 
 
270
  if ( $key ) {
271
+ // export gets meta straight from the DB so could have a serialized string.
272
  if ( ! $value ) {
273
  $value = maybe_unserialize( $meta['value'] );
274
  }
275
 
276
  update_post_meta( $post_id, $key, $value );
277
  do_action( 'import_post_meta', $post_id, $key, $value );
 
278
  }
279
  }
280
  }
284
  }
285
 
286
  /**
287
+ * Performs post-import cleanup of files and the cache.
288
  */
289
  public function import_end() {
290
  wp_import_cleanup( $this->id );
291
 
292
  wp_cache_flush();
293
 
294
+ echo '<p>' . __( 'All done.', 'user-menus' ) . ' <a href="' . admin_url() . '">' . __( 'Have fun!', 'user-menus' ) . '</a></p>';
295
 
296
  do_action( 'import_end' );
297
  }
298
 
299
  /**
300
+ * Decide if the given meta key maps to information we will want to import.
301
  *
302
+ * @param string $key The meta key to check.
303
  *
304
+ * @return string|bool The key if we do want to import, false if not.
305
  */
306
  public function is_valid_meta_key( $key ) {
307
+ if ( in_array( $key, $this->invalid_meta_keys, true ) ) {
308
  return false;
309
  }
310
 
includes/classes/menu/item.php CHANGED
@@ -1,4 +1,9 @@
1
  <?php
 
 
 
 
 
2
 
3
  namespace JP\UM\Menu;
4
 
@@ -12,7 +17,9 @@ if ( ! defined( 'ABSPATH' ) ) {
12
  class Item {
13
 
14
  /**
15
- * @param int $item_id
 
 
16
  *
17
  * @return array
18
  */
@@ -25,24 +32,25 @@ class Item {
25
  }
26
 
27
  /**
28
- * @param array $options
 
 
29
  *
30
  * @return array
31
  */
32
- public static function parse_options( $options = array() ) {
33
-
34
  if ( ! is_array( $options ) ) {
35
- $options = array();
36
  }
37
 
38
- return wp_parse_args( $options, array(
39
  'avatar_size' => 24,
40
  'redirect_type' => 'current',
41
  'redirect_url' => '',
42
  'which_users' => '',
43
  'can_see' => 'yes',
44
- 'roles' => array(),
45
- ) );
46
  }
47
 
48
  }
1
  <?php
2
+ /**
3
+ * Menu item class.
4
+ *
5
+ * @package User Menus
6
+ */
7
 
8
  namespace JP\UM\Menu;
9
 
17
  class Item {
18
 
19
  /**
20
+ * Get item options.
21
+ *
22
+ * @param int $item_id Item ID.
23
  *
24
  * @return array
25
  */
32
  }
33
 
34
  /**
35
+ * Parse options.
36
+ *
37
+ * @param array $options Array of options to parse.
38
  *
39
  * @return array
40
  */
41
+ public static function parse_options( $options = [] ) {
 
42
  if ( ! is_array( $options ) ) {
43
+ $options = [];
44
  }
45
 
46
+ return wp_parse_args( $options, [
47
  'avatar_size' => 24,
48
  'redirect_type' => 'current',
49
  'redirect_url' => '',
50
  'which_users' => '',
51
  'can_see' => 'yes',
52
+ 'roles' => [],
53
+ ] );
54
  }
55
 
56
  }
includes/classes/menu/items.php CHANGED
@@ -1,4 +1,9 @@
1
  <?php
 
 
 
 
 
2
 
3
  namespace JP\UM\Menu;
4
 
@@ -13,24 +18,28 @@ if ( ! defined( 'ABSPATH' ) ) {
13
  */
14
  class Items {
15
 
 
 
 
 
 
16
  private static $current_item;
17
 
18
  /**
19
  * Init
20
  */
21
  public static function init() {
22
- add_filter( 'wp_setup_nav_menu_item', array( __CLASS__, 'merge_item_data' ) );
23
  }
24
 
25
  /**
26
  * Merge Item data into the $item object.
27
  *
28
- * @param $item
29
  *
30
  * @return mixed
31
  */
32
  public static function merge_item_data( $item ) {
33
-
34
  self::$current_item = $item;
35
 
36
  // Merge Rules.
@@ -38,8 +47,7 @@ class Items {
38
  $item->$key = $value;
39
  }
40
 
41
- if ( in_array( $item->object, array( 'login', 'register', 'logout' ) ) ) {
42
-
43
  $item->type_label = __( 'User Link', 'user-menus' );
44
 
45
  switch ( $item->redirect_type ) {
@@ -66,14 +74,13 @@ class Items {
66
  break;
67
 
68
  case 'register':
69
- $item->url = add_query_arg( array( 'redirect_to' => $redirect ), wp_registration_url() );
70
  break;
71
 
72
  case 'logout':
73
  $item->url = wp_logout_url( $redirect );
74
  break;
75
  }
76
-
77
  }
78
 
79
  // User text replacement.
@@ -81,49 +88,50 @@ class Items {
81
  $item->title = static::user_titles( $item->title );
82
  }
83
 
84
-
85
  return $item;
86
  }
87
 
88
  /**
 
 
89
  * @return string
90
  */
91
  public static function current_url() {
92
- $protocol = ( ! empty( $_SERVER['HTTPS'] ) && $_SERVER['HTTPS'] !== 'off' ) || $_SERVER['SERVER_PORT'] == 443 ? 'https://' : 'http://';
 
93
 
94
- return $protocol . $_SERVER['HTTP_HOST'] . $_SERVER["REQUEST_URI"];
 
95
  }
96
 
97
  /**
98
- * @param string $title
 
 
99
  *
100
  * @return mixed|string
101
  */
102
  public static function user_titles( $title = '' ) {
103
-
104
  preg_match_all( '/{(.*?)}/', $title, $found );
105
 
106
  if ( count( $found[1] ) ) {
107
-
108
  foreach ( $found[1] as $key => $match ) {
109
-
110
  $title = static::text_replace( $title, $match );
111
-
112
  }
113
  }
114
 
115
  return $title;
116
-
117
  }
118
 
119
  /**
120
- * @param string $title
121
- * @param string $match
 
 
122
  *
123
  * @return mixed|string
124
  */
125
  public static function text_replace( $title = '', $match = '' ) {
126
-
127
  if ( empty( $match ) ) {
128
  return $title;
129
  }
@@ -131,7 +139,7 @@ class Items {
131
  if ( strpos( $match, '||' ) !== false ) {
132
  $matches = explode( '||', $match );
133
  } else {
134
- $matches = array( $match );
135
  }
136
 
137
  $current_user = wp_get_current_user();
@@ -139,22 +147,16 @@ class Items {
139
  $replace = '';
140
 
141
  foreach ( $matches as $string ) {
142
-
143
-
144
  if ( ! array_key_exists( $string, Codes::valid_codes() ) ) {
145
 
146
  // If its not a valid code it is likely a fallback.
147
  $replace = $string;
148
-
149
- } else if ( $current_user->ID == 0 && array_key_exists( $string, Codes::valid_codes() ) ) {
150
 
151
  // If the code exists & user is not logged in, return nothing.
152
  $replace = '';
153
-
154
  } else {
155
-
156
  switch ( $string ) {
157
-
158
  case 'avatar':
159
  $replace = get_avatar( $current_user->ID, self::$current_item->avatar_size );
160
  break;
@@ -186,16 +188,13 @@ class Items {
186
  default:
187
  $replace = $string;
188
  break;
189
-
190
  }
191
-
192
  }
193
 
194
  // If we found a replacement stop the loop.
195
  if ( ! empty( $replace ) ) {
196
  break;
197
  }
198
-
199
  }
200
 
201
  return str_replace( '{' . $match . '}', $replace, $title );
1
  <?php
2
+ /**
3
+ * Menu items class.
4
+ *
5
+ * @package User Menus
6
+ */
7
 
8
  namespace JP\UM\Menu;
9
 
18
  */
19
  class Items {
20
 
21
+ /**
22
+ * Current item.
23
+ *
24
+ * @var object
25
+ */
26
  private static $current_item;
27
 
28
  /**
29
  * Init
30
  */
31
  public static function init() {
32
+ add_filter( 'wp_setup_nav_menu_item', [ __CLASS__, 'merge_item_data' ] );
33
  }
34
 
35
  /**
36
  * Merge Item data into the $item object.
37
  *
38
+ * @param object $item Item object.
39
  *
40
  * @return mixed
41
  */
42
  public static function merge_item_data( $item ) {
 
43
  self::$current_item = $item;
44
 
45
  // Merge Rules.
47
  $item->$key = $value;
48
  }
49
 
50
+ if ( in_array( $item->object, [ 'login', 'register', 'logout' ], true ) ) {
 
51
  $item->type_label = __( 'User Link', 'user-menus' );
52
 
53
  switch ( $item->redirect_type ) {
74
  break;
75
 
76
  case 'register':
77
+ $item->url = add_query_arg( [ 'redirect_to' => $redirect ], wp_registration_url() );
78
  break;
79
 
80
  case 'logout':
81
  $item->url = wp_logout_url( $redirect );
82
  break;
83
  }
 
84
  }
85
 
86
  // User text replacement.
88
  $item->title = static::user_titles( $item->title );
89
  }
90
 
 
91
  return $item;
92
  }
93
 
94
  /**
95
+ * Get the current url.
96
+ *
97
  * @return string
98
  */
99
  public static function current_url() {
100
+ /* phpcs:disable WordPress.Security.ValidatedSanitizedInput.InputNotValidated */
101
+ $protocol = ( ! empty( $_SERVER['HTTPS'] ) && 'off' !== $_SERVER['HTTPS'] ) || 443 === $_SERVER['SERVER_PORT'] ? 'https://' : 'http://';
102
 
103
+ return $protocol . sanitize_text_field( wp_unslash( $_SERVER['HTTP_HOST'] ) ) . sanitize_text_field( wp_unslash( $_SERVER['REQUEST_URI'] ) );
104
+ /* phpcs:enable WordPress.Security.ValidatedSanitizedInput.InputNotValidated */
105
  }
106
 
107
  /**
108
+ * Get replacement titles.
109
+ *
110
+ * @param string $title Menu item title.
111
  *
112
  * @return mixed|string
113
  */
114
  public static function user_titles( $title = '' ) {
 
115
  preg_match_all( '/{(.*?)}/', $title, $found );
116
 
117
  if ( count( $found[1] ) ) {
 
118
  foreach ( $found[1] as $key => $match ) {
 
119
  $title = static::text_replace( $title, $match );
 
120
  }
121
  }
122
 
123
  return $title;
 
124
  }
125
 
126
  /**
127
+ * Replace text.
128
+ *
129
+ * @param string $title Text to search.
130
+ * @param string $match Strings to match.
131
  *
132
  * @return mixed|string
133
  */
134
  public static function text_replace( $title = '', $match = '' ) {
 
135
  if ( empty( $match ) ) {
136
  return $title;
137
  }
139
  if ( strpos( $match, '||' ) !== false ) {
140
  $matches = explode( '||', $match );
141
  } else {
142
+ $matches = [ $match ];
143
  }
144
 
145
  $current_user = wp_get_current_user();
147
  $replace = '';
148
 
149
  foreach ( $matches as $string ) {
 
 
150
  if ( ! array_key_exists( $string, Codes::valid_codes() ) ) {
151
 
152
  // If its not a valid code it is likely a fallback.
153
  $replace = $string;
154
+ } elseif ( 0 === $current_user->ID && array_key_exists( $string, Codes::valid_codes() ) ) {
 
155
 
156
  // If the code exists & user is not logged in, return nothing.
157
  $replace = '';
 
158
  } else {
 
159
  switch ( $string ) {
 
160
  case 'avatar':
161
  $replace = get_avatar( $current_user->ID, self::$current_item->avatar_size );
162
  break;
188
  default:
189
  $replace = $string;
190
  break;
 
191
  }
 
192
  }
193
 
194
  // If we found a replacement stop the loop.
195
  if ( ! empty( $replace ) ) {
196
  break;
197
  }
 
198
  }
199
 
200
  return str_replace( '{' . $match . '}', $replace, $title );
includes/classes/site/menus.php CHANGED
@@ -1,4 +1,9 @@
1
  <?php
 
 
 
 
 
2
 
3
  namespace JP\UM\Site;
4
 
@@ -15,37 +20,35 @@ class Menus {
15
  * Init
16
  */
17
  public static function init() {
18
- add_filter( 'wp_get_nav_menu_items', array( __CLASS__, 'exclude_menu_items' ) );
19
  }
20
 
21
  /**
22
  * Exclude menu items via wp_get_nav_menu_items filter.
23
  *
24
  * Guarantees compatibility with nearly any theme.
 
 
25
  */
26
- public static function exclude_menu_items( $items = array() ) {
27
-
28
  if ( empty( $items ) ) {
29
  return $items;
30
  }
31
 
32
  $logged_in = is_user_logged_in();
33
 
34
- $excluded = array();
35
 
36
  foreach ( $items as $key => $item ) {
 
37
 
38
- $exclude = in_array( $item->menu_item_parent, $excluded );
39
-
40
- if ( 'logout' == $item->object ) {
41
  $exclude = ! $logged_in;
42
- } elseif ( 'login' == $item->object || 'register' == $item->object ) {
43
  $exclude = $logged_in;
44
  } else {
45
-
46
  if ( is_object( $item ) && isset( $item->which_users ) ) {
47
  switch ( $item->which_users ) {
48
-
49
  case 'logged_in':
50
  if ( ! $logged_in ) {
51
  $exclude = true;
@@ -62,8 +65,8 @@ class Menus {
62
  * - $allowed_by_role will be set to true by default, allowing all not-matched roles to see it.
63
  * - if any matching role is found, $allowed_by_role will be set to false.
64
  */
65
- $can_see = 'yes' === $item->can_see;
66
- $allowed_by_role = !$can_see;
67
 
68
  foreach ( $item->roles as $role ) {
69
  if ( current_user_can( $role ) ) {
@@ -81,20 +84,17 @@ class Menus {
81
  case 'logged_out':
82
  $exclude = $logged_in;
83
  break;
84
-
85
  }
86
  }
87
-
88
  }
89
 
90
  $exclude = apply_filters( 'jpum_should_exclude_item', $exclude, $item );
91
 
92
- // unset non-visible item
93
  if ( $exclude ) {
94
- $excluded[] = $item->ID; // store ID of item
95
  unset( $items[ $key ] );
96
  }
97
-
98
  }
99
 
100
  return $items;
1
  <?php
2
+ /**
3
+ * Site menu class.
4
+ *
5
+ * @package User Menus
6
+ */
7
 
8
  namespace JP\UM\Site;
9
 
20
  * Init
21
  */
22
  public static function init() {
23
+ add_filter( 'wp_get_nav_menu_items', [ __CLASS__, 'exclude_menu_items' ] );
24
  }
25
 
26
  /**
27
  * Exclude menu items via wp_get_nav_menu_items filter.
28
  *
29
  * Guarantees compatibility with nearly any theme.
30
+ *
31
+ * @param array $items Menu items.
32
  */
33
+ public static function exclude_menu_items( $items = [] ) {
 
34
  if ( empty( $items ) ) {
35
  return $items;
36
  }
37
 
38
  $logged_in = is_user_logged_in();
39
 
40
+ $excluded = [];
41
 
42
  foreach ( $items as $key => $item ) {
43
+ $exclude = in_array( $item->menu_item_parent, $excluded, true );
44
 
45
+ if ( 'logout' === $item->object ) {
 
 
46
  $exclude = ! $logged_in;
47
+ } elseif ( 'login' === $item->object || 'register' === $item->object ) {
48
  $exclude = $logged_in;
49
  } else {
 
50
  if ( is_object( $item ) && isset( $item->which_users ) ) {
51
  switch ( $item->which_users ) {
 
52
  case 'logged_in':
53
  if ( ! $logged_in ) {
54
  $exclude = true;
65
  * - $allowed_by_role will be set to true by default, allowing all not-matched roles to see it.
66
  * - if any matching role is found, $allowed_by_role will be set to false.
67
  */
68
+ $can_see = 'yes' === $item->can_see;
69
+ $allowed_by_role = ! $can_see;
70
 
71
  foreach ( $item->roles as $role ) {
72
  if ( current_user_can( $role ) ) {
84
  case 'logged_out':
85
  $exclude = $logged_in;
86
  break;
 
87
  }
88
  }
 
89
  }
90
 
91
  $exclude = apply_filters( 'jpum_should_exclude_item', $exclude, $item );
92
 
93
+ // unset non-visible item.
94
  if ( $exclude ) {
95
+ $excluded[] = $item->ID; // store ID of item.
96
  unset( $items[ $key ] );
97
  }
 
98
  }
99
 
100
  return $items;
includes/classes/user/codes.php CHANGED
@@ -1,4 +1,9 @@
1
  <?php
 
 
 
 
 
2
 
3
  namespace JP\UM\User;
4
 
@@ -12,10 +17,12 @@ if ( ! defined( 'ABSPATH' ) ) {
12
  class Codes {
13
 
14
  /**
 
 
15
  * @return array
16
  */
17
  public static function valid_codes() {
18
- return array(
19
  'avatar' => __( 'Avatar', 'user-menus' ),
20
  'first_name' => __( 'First Name', 'user-menus' ),
21
  'last_name' => __( 'Last Name', 'user-menus' ),
@@ -23,7 +30,7 @@ class Codes {
23
  'display_name' => __( 'Display Name', 'user-menus' ),
24
  'nickname' => __( 'Nickname', 'user-menus' ),
25
  'email' => __( 'Email', 'user-menus' ),
26
- );
27
  }
28
 
29
  }
1
  <?php
2
+ /**
3
+ * User code class.
4
+ *
5
+ * @package User Menus
6
+ */
7
 
8
  namespace JP\UM\User;
9
 
17
  class Codes {
18
 
19
  /**
20
+ * Get a list of valid user replacement codes.
21
+ *
22
  * @return array
23
  */
24
  public static function valid_codes() {
25
+ return [
26
  'avatar' => __( 'Avatar', 'user-menus' ),
27
  'first_name' => __( 'First Name', 'user-menus' ),
28
  'last_name' => __( 'Last Name', 'user-menus' ),
30
  'display_name' => __( 'Display Name', 'user-menus' ),
31
  'nickname' => __( 'Nickname', 'user-menus' ),
32
  'email' => __( 'Email', 'user-menus' ),
33
+ ];
34
  }
35
 
36
  }
includes/classes/walker/nav-menu-edit-custom-fields-deprecated.php CHANGED
@@ -1,4 +1,9 @@
1
  <?php
 
 
 
 
 
2
 
3
  if ( ! class_exists( 'Walker_Nav_Menu_Edit' ) ) {
4
  /** Walker_Nav_Menu_Edit class */
@@ -27,13 +32,13 @@ class Walker_Nav_Menu_Edit_Custom_Fields extends Walker_Nav_Menu_Edit {
27
  * @param string $output Passed by reference. Used to append additional content.
28
  * @param object $item Menu item data object.
29
  * @param int $depth Depth of menu item.
30
- * @param array $args
31
  *
32
  * @see Walker_Nav_Menu_Edit::start_el()
33
  */
34
- public function start_el( &$output, $item, $depth = 0, $args = array() ) {
35
  $item_output = '';
36
- $output .= parent::start_el( $output, $item, $depth, $args );
37
  // NOTE: Check this regex on major WP version updates!
38
  $output .= preg_replace( '/(?=<fieldset[^>]+class="[^"]*field-move)/', $this->get_custom_fields( $item, $depth, $args ), $item_output );
39
  }
@@ -47,9 +52,8 @@ class Walker_Nav_Menu_Edit_Custom_Fields extends Walker_Nav_Menu_Edit {
47
  *
48
  * @return string Additional fields or html for the nav menu editor.
49
  * @uses do_action() Calls 'menu_item_custom_fields' hook
50
- *
51
  */
52
- protected function get_custom_fields( $item, $depth, $args = array() ) {
53
  ob_start();
54
  $item_id = intval( $item->ID );
55
  /**
1
  <?php
2
+ /**
3
+ * Nav menu walker class for Old WP Versions.
4
+ *
5
+ * @package User Menus
6
+ */
7
 
8
  if ( ! class_exists( 'Walker_Nav_Menu_Edit' ) ) {
9
  /** Walker_Nav_Menu_Edit class */
32
  * @param string $output Passed by reference. Used to append additional content.
33
  * @param object $item Menu item data object.
34
  * @param int $depth Depth of menu item.
35
+ * @param array $args Additional arguments.
36
  *
37
  * @see Walker_Nav_Menu_Edit::start_el()
38
  */
39
+ public function start_el( &$output, $item, $depth = 0, $args = [] ) {
40
  $item_output = '';
41
+ $output .= parent::start_el( $output, $item, $depth, $args );
42
  // NOTE: Check this regex on major WP version updates!
43
  $output .= preg_replace( '/(?=<fieldset[^>]+class="[^"]*field-move)/', $this->get_custom_fields( $item, $depth, $args ), $item_output );
44
  }
52
  *
53
  * @return string Additional fields or html for the nav menu editor.
54
  * @uses do_action() Calls 'menu_item_custom_fields' hook
 
55
  */
56
+ protected function get_custom_fields( $item, $depth, $args = [] ) {
57
  ob_start();
58
  $item_id = intval( $item->ID );
59
  /**
includes/classes/walker/nav-menu-edit-custom-fields.php CHANGED
@@ -1,6 +1,10 @@
1
  <?php
 
 
 
 
 
2
 
3
- /** Walker_Nav_Menu_Edit class */
4
  if ( ! class_exists( 'Walker_Nav_Menu_Edit' ) ) {
5
  global $wp_version;
6
  if ( version_compare( $wp_version, '4.4', '>=' ) ) {
@@ -32,15 +36,14 @@ class Walker_Nav_Menu_Edit_Custom_Fields extends Walker_Nav_Menu_Edit {
32
  * @param string $output Passed by reference. Used to append additional content.
33
  * @param object $item Menu item data object.
34
  * @param int $depth Depth of menu item.
35
- * @param array $args
36
- * @param int $id
37
  *
38
  * @see Walker_Nav_Menu_Edit::start_el()
39
- *
40
  */
41
- public function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) {
42
  $item_output = '';
43
- $output .= parent::start_el( $item_output, $item, $depth, $args, $id );
44
  // NOTE: Check this regex on major WP version updates!
45
  $output .= preg_replace( '/(?=<fieldset[^>]+class="[^"]*field-move)/', $this->get_custom_fields( $item, $depth, $args ), $item_output );
46
  }
@@ -61,7 +64,7 @@ class Walker_Nav_Menu_Edit_Custom_Fields extends Walker_Nav_Menu_Edit {
61
  *
62
  * @since 0.1.0
63
  */
64
- protected function get_custom_fields( $item, $depth, $args = array(), $id = 0 ) {
65
  ob_start();
66
  $item_id = intval( $item->ID );
67
  /**
@@ -74,7 +77,6 @@ class Walker_Nav_Menu_Edit_Custom_Fields extends Walker_Nav_Menu_Edit {
74
  *
75
  * @return string Custom fields
76
  * @since 0.1.0
77
- *
78
  */
79
  do_action( 'wp_nav_menu_item_custom_fields', $item_id, $item, $depth, $args );
80
 
1
  <?php
2
+ /**
3
+ * Nav menu walker class for Old WP Versions.
4
+ *
5
+ * @package User Menus
6
+ */
7
 
 
8
  if ( ! class_exists( 'Walker_Nav_Menu_Edit' ) ) {
9
  global $wp_version;
10
  if ( version_compare( $wp_version, '4.4', '>=' ) ) {
36
  * @param string $output Passed by reference. Used to append additional content.
37
  * @param object $item Menu item data object.
38
  * @param int $depth Depth of menu item.
39
+ * @param array $args Additional arguments.
40
+ * @param int $id Id of menu item.
41
  *
42
  * @see Walker_Nav_Menu_Edit::start_el()
 
43
  */
44
+ public function start_el( &$output, $item, $depth = 0, $args = [], $id = 0 ) {
45
  $item_output = '';
46
+ $output .= parent::start_el( $item_output, $item, $depth, $args, $id );
47
  // NOTE: Check this regex on major WP version updates!
48
  $output .= preg_replace( '/(?=<fieldset[^>]+class="[^"]*field-move)/', $this->get_custom_fields( $item, $depth, $args ), $item_output );
49
  }
64
  *
65
  * @since 0.1.0
66
  */
67
+ protected function get_custom_fields( $item, $depth, $args = [], $id = 0 ) {
68
  ob_start();
69
  $item_id = intval( $item->ID );
70
  /**
77
  *
78
  * @return string Custom fields
79
  * @since 0.1.0
 
80
  */
81
  do_action( 'wp_nav_menu_item_custom_fields', $item_id, $item, $depth, $args );
82
 
languages/user-menus.pot CHANGED
@@ -15,182 +15,196 @@ msgstr ""
15
  "X-Poedit-SourceCharset: UTF-8\n"
16
  "Plural-Forms: nplurals=2; plural=(n != 1);\n"
17
 
18
- #: user-menus.php:205
 
19
  msgid "The %4$s %1$s %5$s plugin requires %2$s version %3$s or greater."
20
  msgstr ""
21
 
22
- #: user-menus.php:207
23
  msgid "Plugin Activation Error"
24
  msgstr ""
25
 
26
- #: includes/classes/admin/menu-editor.php:61
27
  msgid "User Links"
28
  msgstr ""
29
 
30
- #: includes/classes/admin/menu-editor.php:73
31
  msgid "Login"
32
  msgstr ""
33
 
34
- #: includes/classes/admin/menu-editor.php:77
35
  msgid "Register"
36
  msgstr ""
37
 
38
- #: includes/classes/admin/menu-editor.php:81
39
  msgid "Logout"
40
  msgstr ""
41
 
42
- #: includes/classes/admin/menu-editor.php:181
 
 
 
 
 
 
 
 
 
 
 
 
 
43
  msgid "Insert User Menu Codes"
44
  msgstr ""
45
 
46
- #: includes/classes/admin/menu-importer.php:42
47
  msgid "WP Nav Menus"
48
  msgstr ""
49
 
50
- #: includes/classes/admin/menu-importer.php:43
51
  msgid "Import nav menus and other menu item meta skipped by the default importer"
52
  msgstr ""
53
 
54
- #: includes/classes/admin/menu-settings.php:41
55
  msgid "Avatar Size"
56
  msgstr ""
57
 
58
- #: includes/classes/admin/menu-settings.php:53
59
  msgid "Everyone"
60
  msgstr ""
61
 
62
- #: includes/classes/admin/menu-settings.php:54
63
  msgid "Logged Out Users"
64
  msgstr ""
65
 
66
- #: includes/classes/admin/menu-settings.php:55
67
  msgid "Logged In Users"
68
  msgstr ""
69
 
70
- #: includes/classes/admin/menu-settings.php:124, includes/classes/admin/menu-settings.php:100
71
  msgid "Who can see this link?"
72
  msgstr ""
73
 
74
- #: includes/classes/admin/menu-settings.php:142
75
  msgid "Choose which roles can see this link"
76
  msgstr ""
77
 
78
- #: includes/classes/admin/menu-settings.php:149
79
  msgid "Choose which roles won't see this link"
80
  msgstr ""
81
 
82
- #: includes/classes/admin/menu-settings.php:61
83
  msgid "Current Page"
84
  msgstr ""
85
 
86
- #: includes/classes/admin/menu-settings.php:62
87
  msgid "Home Page"
88
  msgstr ""
89
 
90
- #: includes/classes/admin/menu-settings.php:63
91
  msgid "Custom URL"
92
  msgstr ""
93
 
94
- #: includes/classes/admin/menu-settings.php:70
95
  msgid "Where should users be taken afterwards?"
96
  msgstr ""
97
 
98
- #: includes/classes/admin/menu-settings.php:88
99
  msgid "Enter a url user should be redirected to"
100
  msgstr ""
101
 
102
- #: includes/classes/admin/reviews.php:230
103
  msgid "Hi there! You've been using the User Menus plugin on your site for %s now - We hope it's been helpful. If you're enjoying the plugin, would you mind rating it 5-stars to help spread the word?"
104
  msgstr ""
105
 
106
- #: includes/classes/admin/reviews.php:235
107
  msgid "2 weeks"
108
  msgstr ""
109
 
110
- #: includes/classes/admin/reviews.php:243
111
  msgid "3 months"
112
  msgstr ""
113
 
114
- #: includes/classes/admin/reviews.php:389
115
  msgid "Ok, you deserve it"
116
  msgstr ""
117
 
118
- #: includes/classes/admin/reviews.php:394
119
  msgid "Nope, maybe later"
120
  msgstr ""
121
 
122
- #: includes/classes/admin/reviews.php:399
123
  msgid "I already did"
124
  msgstr ""
125
 
126
- #: includes/classes/importer/menu.php:99
127
  msgid "Import Nav Menus"
128
  msgstr ""
129
 
130
- #: includes/classes/importer/menu.php:106
131
  msgid "A new version of this importer is available. Please update to version %s to ensure compatibility with newer export files."
132
  msgstr ""
133
 
134
- #: includes/classes/importer/menu.php:116
135
  msgid "Upload your WordPress export (WXR) file and import the Nav Menus and any meta for the Nav Menu items."
136
  msgstr ""
137
 
138
- #: includes/classes/importer/menu.php:117
139
  msgid "Choose a WXR (.xml) file to upload, then click Upload file and import."
140
  msgstr ""
141
 
142
- #: includes/classes/importer/menu.php:137, includes/classes/importer/menu.php:132, includes/classes/importer/menu.php:147, includes/classes/importer/menu.php:208, includes/classes/importer/menu.php:219
143
  msgid "Sorry, there has been an error."
144
  msgstr ""
145
 
146
- #: includes/classes/importer/menu.php:138
147
  msgid "The export file could not be found at <code>%s</code>. It is likely that this was caused by a permissions problem."
148
  msgstr ""
149
 
150
- #: includes/classes/importer/menu.php:156
151
  msgid "This WXR file (version %s) may not be supported by this version of the importer. Please consider updating."
152
  msgstr ""
153
 
154
- #: includes/classes/importer/menu.php:209
155
  msgid "The file does not exist, please try again."
156
  msgstr ""
157
 
158
- #: includes/classes/importer/menu.php:280
159
  msgid "All done."
160
  msgstr ""
161
 
162
- #: includes/classes/importer/menu.php:280
163
  msgid "Have fun!"
164
  msgstr ""
165
 
166
- #: includes/classes/menu/items.php:43
167
  msgid "User Link"
168
  msgstr ""
169
 
170
- #: includes/classes/user/codes.php:19
171
  msgid "Avatar"
172
  msgstr ""
173
 
174
- #: includes/classes/user/codes.php:20
175
  msgid "First Name"
176
  msgstr ""
177
 
178
- #: includes/classes/user/codes.php:21
179
  msgid "Last Name"
180
  msgstr ""
181
 
182
- #: includes/classes/user/codes.php:22
183
  msgid "Username"
184
  msgstr ""
185
 
186
- #: includes/classes/user/codes.php:23
187
  msgid "Display Name"
188
  msgstr ""
189
 
190
- #: includes/classes/user/codes.php:24
191
  msgid "Nickname"
192
  msgstr ""
193
 
194
- #: includes/classes/user/codes.php:25
195
  msgid "Email"
196
  msgstr ""
15
  "X-Poedit-SourceCharset: UTF-8\n"
16
  "Plural-Forms: nplurals=2; plural=(n != 1);\n"
17
 
18
+ #. translators: 1: Plugin Name, 2: Flagged software (PHP or WP), 3: PHP or WordPress version
19
+ #: user-menus.php:235
20
  msgid "The %4$s %1$s %5$s plugin requires %2$s version %3$s or greater."
21
  msgstr ""
22
 
23
+ #: user-menus.php:238
24
  msgid "Plugin Activation Error"
25
  msgstr ""
26
 
27
+ #: includes/classes/admin/menu-editor.php:70
28
  msgid "User Links"
29
  msgstr ""
30
 
31
+ #: includes/classes/admin/menu-editor.php:84
32
  msgid "Login"
33
  msgstr ""
34
 
35
+ #: includes/classes/admin/menu-editor.php:88
36
  msgid "Register"
37
  msgstr ""
38
 
39
+ #: includes/classes/admin/menu-editor.php:92
40
  msgid "Logout"
41
  msgstr ""
42
 
43
+ #. translators: 1: link to registration page, 2: closing link tag.
44
+ #: includes/classes/admin/menu-editor.php:140
45
+ msgid "Registration is %1$scurrently disabled%2$s on your site."
46
+ msgstr ""
47
+
48
+ #: includes/classes/admin/menu-editor.php:161
49
+ msgid "Select All"
50
+ msgstr ""
51
+
52
+ #: includes/classes/admin/menu-editor.php:167
53
+ msgid "Add to Menu"
54
+ msgstr ""
55
+
56
+ #: includes/classes/admin/menu-editor.php:203
57
  msgid "Insert User Menu Codes"
58
  msgstr ""
59
 
60
+ #: includes/classes/admin/menu-importer.php:45
61
  msgid "WP Nav Menus"
62
  msgstr ""
63
 
64
+ #: includes/classes/admin/menu-importer.php:46
65
  msgid "Import nav menus and other menu item meta skipped by the default importer"
66
  msgstr ""
67
 
68
+ #: includes/classes/admin/menu-settings.php:46
69
  msgid "Avatar Size"
70
  msgstr ""
71
 
72
+ #: includes/classes/admin/menu-settings.php:58
73
  msgid "Everyone"
74
  msgstr ""
75
 
76
+ #: includes/classes/admin/menu-settings.php:59
77
  msgid "Logged Out Users"
78
  msgstr ""
79
 
80
+ #: includes/classes/admin/menu-settings.php:60
81
  msgid "Logged In Users"
82
  msgstr ""
83
 
84
+ #: includes/classes/admin/menu-settings.php:129, includes/classes/admin/menu-settings.php:105
85
  msgid "Who can see this link?"
86
  msgstr ""
87
 
88
+ #: includes/classes/admin/menu-settings.php:147
89
  msgid "Choose which roles can see this link"
90
  msgstr ""
91
 
92
+ #: includes/classes/admin/menu-settings.php:154
93
  msgid "Choose which roles won't see this link"
94
  msgstr ""
95
 
96
+ #: includes/classes/admin/menu-settings.php:65
97
  msgid "Current Page"
98
  msgstr ""
99
 
100
+ #: includes/classes/admin/menu-settings.php:66
101
  msgid "Home Page"
102
  msgstr ""
103
 
104
+ #: includes/classes/admin/menu-settings.php:67
105
  msgid "Custom URL"
106
  msgstr ""
107
 
108
+ #: includes/classes/admin/menu-settings.php:75
109
  msgid "Where should users be taken afterwards?"
110
  msgstr ""
111
 
112
+ #: includes/classes/admin/menu-settings.php:93
113
  msgid "Enter a url user should be redirected to"
114
  msgstr ""
115
 
116
+ #: includes/classes/admin/reviews.php:239
117
  msgid "Hi there! You've been using the User Menus plugin on your site for %s now - We hope it's been helpful. If you're enjoying the plugin, would you mind rating it 5-stars to help spread the word?"
118
  msgstr ""
119
 
120
+ #: includes/classes/admin/reviews.php:244
121
  msgid "2 weeks"
122
  msgstr ""
123
 
124
+ #: includes/classes/admin/reviews.php:252
125
  msgid "3 months"
126
  msgstr ""
127
 
128
+ #: includes/classes/admin/reviews.php:398
129
  msgid "Ok, you deserve it"
130
  msgstr ""
131
 
132
+ #: includes/classes/admin/reviews.php:403
133
  msgid "Nope, maybe later"
134
  msgstr ""
135
 
136
+ #: includes/classes/admin/reviews.php:408
137
  msgid "I already did"
138
  msgstr ""
139
 
140
+ #: includes/classes/importer/menu.php:116
141
  msgid "Import Nav Menus"
142
  msgstr ""
143
 
144
+ #: includes/classes/importer/menu.php:123
145
  msgid "A new version of this importer is available. Please update to version %s to ensure compatibility with newer export files."
146
  msgstr ""
147
 
148
+ #: includes/classes/importer/menu.php:133
149
  msgid "Upload your WordPress export (WXR) file and import the Nav Menus and any meta for the Nav Menu items."
150
  msgstr ""
151
 
152
+ #: includes/classes/importer/menu.php:134
153
  msgid "Choose a WXR (.xml) file to upload, then click Upload file and import."
154
  msgstr ""
155
 
156
+ #: includes/classes/importer/menu.php:154, includes/classes/importer/menu.php:149, includes/classes/importer/menu.php:164, includes/classes/importer/menu.php:225, includes/classes/importer/menu.php:236
157
  msgid "Sorry, there has been an error."
158
  msgstr ""
159
 
160
+ #: includes/classes/importer/menu.php:155
161
  msgid "The export file could not be found at <code>%s</code>. It is likely that this was caused by a permissions problem."
162
  msgstr ""
163
 
164
+ #: includes/classes/importer/menu.php:173
165
  msgid "This WXR file (version %s) may not be supported by this version of the importer. Please consider updating."
166
  msgstr ""
167
 
168
+ #: includes/classes/importer/menu.php:226
169
  msgid "The file does not exist, please try again."
170
  msgstr ""
171
 
172
+ #: includes/classes/importer/menu.php:294
173
  msgid "All done."
174
  msgstr ""
175
 
176
+ #: includes/classes/importer/menu.php:294
177
  msgid "Have fun!"
178
  msgstr ""
179
 
180
+ #: includes/classes/menu/items.php:51
181
  msgid "User Link"
182
  msgstr ""
183
 
184
+ #: includes/classes/user/codes.php:26
185
  msgid "Avatar"
186
  msgstr ""
187
 
188
+ #: includes/classes/user/codes.php:27
189
  msgid "First Name"
190
  msgstr ""
191
 
192
+ #: includes/classes/user/codes.php:28
193
  msgid "Last Name"
194
  msgstr ""
195
 
196
+ #: includes/classes/user/codes.php:29
197
  msgid "Username"
198
  msgstr ""
199
 
200
+ #: includes/classes/user/codes.php:30
201
  msgid "Display Name"
202
  msgstr ""
203
 
204
+ #: includes/classes/user/codes.php:31
205
  msgid "Nickname"
206
  msgstr ""
207
 
208
+ #: includes/classes/user/codes.php:32
209
  msgid "Email"
210
  msgstr ""
readme.md CHANGED
@@ -1,4 +1,5 @@
1
  # User Menus
 
2
  Needs to show or hide menu items to logged in users, logged out users or specific user roles in WordPress? User Menus is the plugin you need!
3
 
4
  Feel free to browse the code and make suggestions/requests. Thanks!
@@ -6,29 +7,35 @@ Feel free to browse the code and make suggestions/requests. Thanks!
6
  ## Getting Started
7
 
8
  ### Downloading And Using As A Plugin
 
9
  To use this plugin, this repo can be downloaded as a zip and installed as-is as a WordPress plugin. Once installed and activated, Go to wp-admin > Appearance > Menus and edit your menu.
10
 
11
  ### Getting Set Up For Development
12
 
13
  #### Prerequisites
 
14
  In order to run our Gulp tasks, you will need Node.js and NPM installed. To do so, you can [follow the NPM documentation's guide](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm).
15
  If you have not used NPM before, you can [refer to this beginner's guide to NPM](https://www.sitepoint.com/beginners-guide-node-package-manager/).
16
 
17
  This plugin uses a series of [Gulp](https://gulpjs.com) tasks to clean and prepare builds. To get started, run `npm install` to get the necessary gulp dependencies.
18
 
19
  #### Gulp Tasks
 
20
  As normal, we have our gulp tasks in the gulpfile.js file.
21
 
22
  Task info coming soon....
23
 
24
  ## Built With
 
25
  * [SASS](https://sass-lang.com) - The CSS pre-processor we use. We use the SCSS syntax.
26
 
27
  ## Deployment
 
28
  This is a WordPress plugin that is hosted on the WordPress.org SVN repo.
29
  There is not currently any automated deployment. Instead, once a release is published on GitHub, that release is manually uploaded to the SVN.
30
 
31
  ## Contributing
 
32
  Community made feature requests, patches, localizations, bug reports, and contributions are always welcome and are crucial to ensure User Menus continues to grow.
33
 
34
  When contributing please ensure you follow the guidelines below so that we can keep on top of things.
@@ -36,27 +43,32 @@ When contributing please ensure you follow the guidelines below so that we can k
36
  Please Note: GitHub is not intended for support based questions. For those, please use the [support forums](https://wordpress.org/support/plugin/user-menus).
37
 
38
  ### Creating Issues
 
39
  * If you have any bugs or feature requests, please [create an issue](https://github.com/JunglePlugins/User-Menus/issues/new)
40
  * For bug reports, please clearly describe the bug/issue and include steps on how to reproduce it
41
  * For feature requests, please clearly describe what you would like, how it would be used, and example screenshots (if possible)
42
 
43
  ### Pull Requests
 
44
  * Ensure you stick to the [WordPress Coding Standards](https://codex.wordpress.org/WordPress_Coding_Standards)
45
  * When committing, reference your issue (if present) and include a note about the fix
46
  * Push the changes to your fork and submit a pull request to the 'master' branch of this repository
47
  * We are trying to ensure that every function is documented well and follows the standards set by phpDoc going forward
48
 
49
  ## Versioning
 
50
  We use [SemVer](http://semver.org/) for versioning. For the versions available, see [the releases in this repository](https://github.com/JunglePlugins/User-Menus/releases).
51
 
52
  ## Developers
 
53
  * Daniel Iser - Lead Developer
54
- * Frank Corso - Developer
55
 
56
  See also [the list of contributors](https://github.com/JunglePlugins/User-Menus/graphs/contributors) who participated in this project.
57
 
58
  ## License
 
59
  This project is licensed under the GPLv3 License.
60
 
61
  ## Support
 
62
  This is a developer's portal for User Menus and **should not** be used for support. Please [create a support ticket here](https://wordpress.org/support/plugin/user-menus).
1
  # User Menus
2
+
3
  Needs to show or hide menu items to logged in users, logged out users or specific user roles in WordPress? User Menus is the plugin you need!
4
 
5
  Feel free to browse the code and make suggestions/requests. Thanks!
7
  ## Getting Started
8
 
9
  ### Downloading And Using As A Plugin
10
+
11
  To use this plugin, this repo can be downloaded as a zip and installed as-is as a WordPress plugin. Once installed and activated, Go to wp-admin > Appearance > Menus and edit your menu.
12
 
13
  ### Getting Set Up For Development
14
 
15
  #### Prerequisites
16
+
17
  In order to run our Gulp tasks, you will need Node.js and NPM installed. To do so, you can [follow the NPM documentation's guide](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm).
18
  If you have not used NPM before, you can [refer to this beginner's guide to NPM](https://www.sitepoint.com/beginners-guide-node-package-manager/).
19
 
20
  This plugin uses a series of [Gulp](https://gulpjs.com) tasks to clean and prepare builds. To get started, run `npm install` to get the necessary gulp dependencies.
21
 
22
  #### Gulp Tasks
23
+
24
  As normal, we have our gulp tasks in the gulpfile.js file.
25
 
26
  Task info coming soon....
27
 
28
  ## Built With
29
+
30
  * [SASS](https://sass-lang.com) - The CSS pre-processor we use. We use the SCSS syntax.
31
 
32
  ## Deployment
33
+
34
  This is a WordPress plugin that is hosted on the WordPress.org SVN repo.
35
  There is not currently any automated deployment. Instead, once a release is published on GitHub, that release is manually uploaded to the SVN.
36
 
37
  ## Contributing
38
+
39
  Community made feature requests, patches, localizations, bug reports, and contributions are always welcome and are crucial to ensure User Menus continues to grow.
40
 
41
  When contributing please ensure you follow the guidelines below so that we can keep on top of things.
43
  Please Note: GitHub is not intended for support based questions. For those, please use the [support forums](https://wordpress.org/support/plugin/user-menus).
44
 
45
  ### Creating Issues
46
+
47
  * If you have any bugs or feature requests, please [create an issue](https://github.com/JunglePlugins/User-Menus/issues/new)
48
  * For bug reports, please clearly describe the bug/issue and include steps on how to reproduce it
49
  * For feature requests, please clearly describe what you would like, how it would be used, and example screenshots (if possible)
50
 
51
  ### Pull Requests
52
+
53
  * Ensure you stick to the [WordPress Coding Standards](https://codex.wordpress.org/WordPress_Coding_Standards)
54
  * When committing, reference your issue (if present) and include a note about the fix
55
  * Push the changes to your fork and submit a pull request to the 'master' branch of this repository
56
  * We are trying to ensure that every function is documented well and follows the standards set by phpDoc going forward
57
 
58
  ## Versioning
59
+
60
  We use [SemVer](http://semver.org/) for versioning. For the versions available, see [the releases in this repository](https://github.com/JunglePlugins/User-Menus/releases).
61
 
62
  ## Developers
63
+
64
  * Daniel Iser - Lead Developer
 
65
 
66
  See also [the list of contributors](https://github.com/JunglePlugins/User-Menus/graphs/contributors) who participated in this project.
67
 
68
  ## License
69
+
70
  This project is licensed under the GPLv3 License.
71
 
72
  ## Support
73
+
74
  This is a developer's portal for User Menus and **should not** be used for support. Please [create a support ticket here](https://wordpress.org/support/plugin/user-menus).
readme.txt CHANGED
@@ -5,10 +5,10 @@ Plugin URI: https://wordpress.org/plugins/user-menus/
5
  Donate link: https://code-atlantic.com/donate/
6
  Tags: menu, menus, user-menu, logout, nav-menu, nav-menus, user, user-role, user-roles
7
  Requires at least: 4.6
8
- Tested up to: 5.7
9
- Stable tag: 1.2.5
10
  Requires PHP: 5.6
11
- Freemius: 2.4.1
12
  License: GPLv3 or Any Later Version
13
 
14
  Show/hide menu items to logged in users, logged out users or specific user roles. Display logged in user details in menu. Add a logout link to menu.
@@ -108,25 +108,37 @@ Bugs can be reported either in our support forum or preferably on the [User Menu
108
 
109
  == Changelog ==
110
 
 
 
 
 
 
 
111
  = v1.2.5 - 12/31/2020 =
112
- * Update Freemius to 2.4.1
 
113
 
114
  = v1.2.4 - 08/20/2020 =
 
115
  * Improvement: Removed class that could cause links to be disabled with some themes.
116
  * Tweak: Update Freemius sdk to v2.4.0.1.
117
  * Fix: Compatibility issue with some sites where duplicate fields were shown in the menu editor.
118
 
119
  = v1.2.3 - 3/23/2020 =
 
120
  * Tweak: Add compatibility fix for WP 5.4 menu walker
121
 
122
  = v1.2.2 - 12/17/2019 =
 
123
  * Improvement: Login, Register & Logout menu links now hint at who they will be visible for.
124
  * Fix: Deprecation notice for sites using PHP 7.4
125
 
126
  = v1.2.1 - 10/20/2019 =
 
127
  * Fix: Bug in some sites where Menu Editor Description field was not shown.
128
 
129
  = v1.2.0 - 10/10/2019 =
 
130
  * Feature: Added option to *show* or *hide* the menu item for chosen roles.
131
  * Feature: Added Register user link navigation menu type with optional redirect.
132
  * Improvement: Added Freemius integration to allow for future premium offerings
@@ -135,19 +147,24 @@ Bugs can be reported either in our support forum or preferably on the [User Menu
135
  * Fix: Bug where missing data in menu items caused an error to be thrown in edge cases.
136
 
137
  = v1.1.3 =
 
138
  * Improvement: Corrected usage of get_avatar to ensure compatibility with 3rd party avatar plugins.
139
 
140
  = v1.1.2 =
 
141
  * Improvement: Made changes to the nav menu editor to make it more compatible with other plugins.
142
 
143
  = v1.1.1 =
 
144
  * Fix: Forgot to add new files during commit. Correcting this issue.
145
 
146
  = v1.1.0 =
 
147
  * Feature: Added ability to insert user avatar in menu items with size option to match your needs.
148
  * Improvement: Added accessibility enhancements to menu editor. Includes keyboard support, proper focus, tabbing & titles.
149
  * Improvement: Added proper labeling to the user code dropdown.
150
  * Tweak: Restyled user code insert elements to better resemble default WP admin.
151
 
152
  = v1.0.0 =
 
153
  * Initial Release
5
  Donate link: https://code-atlantic.com/donate/
6
  Tags: menu, menus, user-menu, logout, nav-menu, nav-menus, user, user-role, user-roles
7
  Requires at least: 4.6
8
+ Tested up to: 5.8
9
+ Stable tag: 1.2.6
10
  Requires PHP: 5.6
11
+ Freemius: 2.4.2
12
  License: GPLv3 or Any Later Version
13
 
14
  Show/hide menu items to logged in users, logged out users or specific user roles. Display logged in user details in menu. Add a logout link to menu.
108
 
109
  == Changelog ==
110
 
111
+ = v1.2.6 - 07/20/2021 =
112
+
113
+ * Improvement: Update Freemius to 2.4.2
114
+ * Improvement: Code styling clean up.
115
+ * Improvement: Compatibility with jQuery v3.
116
+
117
  = v1.2.5 - 12/31/2020 =
118
+
119
+ * Improvement:Update Freemius to 2.4.1
120
 
121
  = v1.2.4 - 08/20/2020 =
122
+
123
  * Improvement: Removed class that could cause links to be disabled with some themes.
124
  * Tweak: Update Freemius sdk to v2.4.0.1.
125
  * Fix: Compatibility issue with some sites where duplicate fields were shown in the menu editor.
126
 
127
  = v1.2.3 - 3/23/2020 =
128
+
129
  * Tweak: Add compatibility fix for WP 5.4 menu walker
130
 
131
  = v1.2.2 - 12/17/2019 =
132
+
133
  * Improvement: Login, Register & Logout menu links now hint at who they will be visible for.
134
  * Fix: Deprecation notice for sites using PHP 7.4
135
 
136
  = v1.2.1 - 10/20/2019 =
137
+
138
  * Fix: Bug in some sites where Menu Editor Description field was not shown.
139
 
140
  = v1.2.0 - 10/10/2019 =
141
+
142
  * Feature: Added option to *show* or *hide* the menu item for chosen roles.
143
  * Feature: Added Register user link navigation menu type with optional redirect.
144
  * Improvement: Added Freemius integration to allow for future premium offerings
147
  * Fix: Bug where missing data in menu items caused an error to be thrown in edge cases.
148
 
149
  = v1.1.3 =
150
+
151
  * Improvement: Corrected usage of get_avatar to ensure compatibility with 3rd party avatar plugins.
152
 
153
  = v1.1.2 =
154
+
155
  * Improvement: Made changes to the nav menu editor to make it more compatible with other plugins.
156
 
157
  = v1.1.1 =
158
+
159
  * Fix: Forgot to add new files during commit. Correcting this issue.
160
 
161
  = v1.1.0 =
162
+
163
  * Feature: Added ability to insert user avatar in menu items with size option to match your needs.
164
  * Improvement: Added accessibility enhancements to menu editor. Includes keyboard support, proper focus, tabbing & titles.
165
  * Improvement: Added proper labeling to the user code dropdown.
166
  * Tweak: Restyled user code insert elements to better resemble default WP admin.
167
 
168
  = v1.0.0 =
169
+
170
  * Initial Release
user-menus.php CHANGED
@@ -3,7 +3,7 @@
3
  * Plugin Name: User Menus
4
  * Plugin URI: https://wordpress.org/plugins/user-menus/
5
  * Description: Quickly customize your menus with a user's name & avatar, or show items based on user role.
6
- * Version: 1.2.5
7
  * Author: Code Atlantic
8
  * Author URI: https://code-atlantic.com/
9
  * License: GPL2 or later
@@ -14,6 +14,7 @@
14
  * Minimum WP: 4.6
15
  *
16
  * @author Daniel Iser
 
17
  * @copyright Copyright (c) 2019, Code Atlantic LLC
18
  *
19
  * Prior Work Credits. Big thanks to the following:
@@ -26,39 +27,43 @@ if ( ! defined( 'ABSPATH' ) ) {
26
  }
27
 
28
  if ( ! function_exists( 'um_fs' ) ) {
29
- // Create a helper function for easy SDK access.
30
- function um_fs() {
31
- global $um_fs;
32
-
33
- if ( ! isset( $um_fs ) ) {
34
- // Include Freemius SDK.
35
- require_once dirname(__FILE__) . '/freemius/start.php';
36
-
37
- $um_fs = fs_dynamic_init( array(
38
- 'id' => '3637',
39
- 'slug' => 'user-menus',
40
- 'type' => 'plugin',
41
- 'public_key' => 'pk_367ac2d0a38c35ef2a78d161fed88',
42
- 'is_premium' => false,
43
- 'has_addons' => false,
44
- 'has_paid_plans' => false,
45
- 'menu' => array(
46
- 'first-path' => 'plugins.php',
47
- 'account' => false,
48
- 'contact' => false,
49
- 'support' => false,
50
- ),
51
- ) );
52
- }
53
-
54
- return $um_fs;
55
- }
56
-
57
- // Init Freemius.
58
- um_fs();
59
-
60
- // Signal that SDK was initiated.
61
- do_action( 'um_fs_loaded' );
 
 
 
 
62
  }
63
 
64
  /**
@@ -67,50 +72,72 @@ if ( ! function_exists( 'um_fs' ) ) {
67
  class JP_User_Menus {
68
 
69
  /**
 
 
70
  * @var string
71
  */
72
  public static $NAME = 'User Menus';
73
 
74
  /**
 
 
75
  * @var string
76
  */
77
- public static $VER = '1.2.5';
78
 
79
  /**
 
 
80
  * @var string
81
  */
82
  public static $MIN_PHP_VER = '5.6';
83
 
84
  /**
 
 
85
  * @var string
86
  */
87
  public static $MIN_WP_VER = '4.6';
88
 
89
  /**
 
 
90
  * @var string
91
  */
92
  public static $URL = '';
 
93
  /**
 
 
94
  * @var string
95
  */
96
  public static $DIR = '';
 
97
  /**
 
 
98
  * @var string
99
  */
100
  public static $FILE = '';
101
 
102
  /**
 
 
103
  * @var string
104
  */
105
  public static $TEMPLATE_PATH = 'jp/user-menus/';
106
 
107
  /**
 
 
108
  * @var string
109
  */
110
  public static $TD = 'user-menus';
 
111
  /**
 
 
112
  * @var JP_User_Menus $instance The one true JP_User_Menus
113
- * @since 1.0.0
114
  */
115
  private static $instance;
116
 
@@ -123,10 +150,10 @@ class JP_User_Menus {
123
  */
124
  public static function instance() {
125
  if ( ! self::$instance ) {
126
- self::$instance = new static;
127
  self::$instance->setup_constants();
128
 
129
- add_action( 'plugins_loaded', array( self::$instance, 'load_textdomain' ) );
130
 
131
  self::$instance->includes();
132
  }
@@ -151,24 +178,25 @@ class JP_User_Menus {
151
  * @since 1.0.0
152
  */
153
  private function includes() {
154
- // Menu Items
155
  require_once self::$DIR . 'includes/classes/menu/item.php';
156
  require_once self::$DIR . 'includes/classes/menu/items.php';
157
  require_once self::$DIR . 'includes/classes/user/codes.php';
158
  if ( is_admin() ) {
159
- // Admin Menu Editor
160
  require_once self::$DIR . 'includes/classes/admin/menu-editor.php';
161
  require_once self::$DIR . 'includes/classes/admin/menu-settings.php';
162
  require_once self::$DIR . 'includes/classes/admin/menu-importer.php';
163
  require_once self::$DIR . 'includes/classes/admin/reviews.php';
164
  } else {
165
- // Site Menu Filter
166
  require_once self::$DIR . 'includes/classes/site/menus.php';
167
  }
168
  }
169
 
170
  /**
171
  * Get the plugin path.
 
172
  * @return string
173
  */
174
  public function plugin_path() {
@@ -177,6 +205,7 @@ class JP_User_Menus {
177
 
178
  /**
179
  * Get the plugin url.
 
180
  * @return string
181
  */
182
  public function plugin_url() {
@@ -197,14 +226,19 @@ class JP_User_Menus {
197
  return;
198
  }
199
 
200
- $version = 'PHP' == $flag ? self::$MIN_PHP_VER : self::$MIN_WP_VER;
201
 
202
  // Deactivate automatically due to insufficient PHP or WP Version.
203
  deactivate_plugins( basename( __FILE__ ) );
204
 
205
- $notice = sprintf( __( 'The %4$s %1$s %5$s plugin requires %2$s version %3$s or greater.', 'user-menus' ), self::$NAME, $flag, $version, "<strong>", "</strong>" );
 
206
 
207
- wp_die( "<p>$notice</p>", __( 'Plugin Activation Error', 'user-menus' ), array( 'response' => 200, 'back_link' => true, ) );
 
 
 
 
208
  }
209
 
210
  /**
@@ -219,6 +253,8 @@ class JP_User_Menus {
219
  }
220
 
221
  /**
 
 
222
  * @return object
223
  */
224
  function jp_user_menus() {
@@ -228,4 +264,4 @@ function jp_user_menus() {
228
  jp_user_menus();
229
 
230
  // Ensure plugin & environment compatibility.
231
- register_activation_hook( __FILE__, array( 'JP_User_Menus', 'activation_check' ) );
3
  * Plugin Name: User Menus
4
  * Plugin URI: https://wordpress.org/plugins/user-menus/
5
  * Description: Quickly customize your menus with a user's name & avatar, or show items based on user role.
6
+ * Version: 1.2.6
7
  * Author: Code Atlantic
8
  * Author URI: https://code-atlantic.com/
9
  * License: GPL2 or later
14
  * Minimum WP: 4.6
15
  *
16
  * @author Daniel Iser
17
+ * @package User Menus
18
  * @copyright Copyright (c) 2019, Code Atlantic LLC
19
  *
20
  * Prior Work Credits. Big thanks to the following:
27
  }
28
 
29
  if ( ! function_exists( 'um_fs' ) ) {
30
+ /**
31
+ * Create a helper function for easy SDK access.
32
+ *
33
+ * @return \Freemius
34
+ */
35
+ function um_fs() {
36
+ global $um_fs;
37
+
38
+ if ( ! isset( $um_fs ) ) {
39
+ // Include Freemius SDK.
40
+ require_once dirname( __FILE__ ) . '/freemius/start.php';
41
+
42
+ $um_fs = fs_dynamic_init( [
43
+ 'id' => '3637',
44
+ 'slug' => 'user-menus',
45
+ 'type' => 'plugin',
46
+ 'public_key' => 'pk_367ac2d0a38c35ef2a78d161fed88',
47
+ 'is_premium' => false,
48
+ 'has_addons' => false,
49
+ 'has_paid_plans' => false,
50
+ 'menu' => [
51
+ 'first-path' => 'plugins.php',
52
+ 'account' => false,
53
+ 'contact' => false,
54
+ 'support' => false,
55
+ ],
56
+ ] );
57
+ }
58
+
59
+ return $um_fs;
60
+ }
61
+
62
+ // Init Freemius.
63
+ um_fs();
64
+
65
+ // Signal that SDK was initiated.
66
+ do_action( 'um_fs_loaded' );
67
  }
68
 
69
  /**
72
  class JP_User_Menus {
73
 
74
  /**
75
+ * Plugin Name
76
+ *
77
  * @var string
78
  */
79
  public static $NAME = 'User Menus';
80
 
81
  /**
82
+ * Plugin Version
83
+ *
84
  * @var string
85
  */
86
+ public static $VER = '1.2.6';
87
 
88
  /**
89
+ * Minimum PHP version
90
+ *
91
  * @var string
92
  */
93
  public static $MIN_PHP_VER = '5.6';
94
 
95
  /**
96
+ * Minimum WP version
97
+ *
98
  * @var string
99
  */
100
  public static $MIN_WP_VER = '4.6';
101
 
102
  /**
103
+ * Plugin URL
104
+ *
105
  * @var string
106
  */
107
  public static $URL = '';
108
+
109
  /**
110
+ * Plugin Directory
111
+ *
112
  * @var string
113
  */
114
  public static $DIR = '';
115
+
116
  /**
117
+ * Plugin File
118
+ *
119
  * @var string
120
  */
121
  public static $FILE = '';
122
 
123
  /**
124
+ * Plugin Template Directory
125
+ *
126
  * @var string
127
  */
128
  public static $TEMPLATE_PATH = 'jp/user-menus/';
129
 
130
  /**
131
+ * Text Domain
132
+ *
133
  * @var string
134
  */
135
  public static $TD = 'user-menus';
136
+
137
  /**
138
+ * Instance of the plugin class
139
+ *
140
  * @var JP_User_Menus $instance The one true JP_User_Menus
 
141
  */
142
  private static $instance;
143
 
150
  */
151
  public static function instance() {
152
  if ( ! self::$instance ) {
153
+ self::$instance = new static();
154
  self::$instance->setup_constants();
155
 
156
+ add_action( 'plugins_loaded', [ self::$instance, 'load_textdomain' ] );
157
 
158
  self::$instance->includes();
159
  }
178
  * @since 1.0.0
179
  */
180
  private function includes() {
181
+ // Menu Items.
182
  require_once self::$DIR . 'includes/classes/menu/item.php';
183
  require_once self::$DIR . 'includes/classes/menu/items.php';
184
  require_once self::$DIR . 'includes/classes/user/codes.php';
185
  if ( is_admin() ) {
186
+ // Admin Menu Editor.
187
  require_once self::$DIR . 'includes/classes/admin/menu-editor.php';
188
  require_once self::$DIR . 'includes/classes/admin/menu-settings.php';
189
  require_once self::$DIR . 'includes/classes/admin/menu-importer.php';
190
  require_once self::$DIR . 'includes/classes/admin/reviews.php';
191
  } else {
192
+ // Site Menu Filter.
193
  require_once self::$DIR . 'includes/classes/site/menus.php';
194
  }
195
  }
196
 
197
  /**
198
  * Get the plugin path.
199
+ *
200
  * @return string
201
  */
202
  public function plugin_path() {
205
 
206
  /**
207
  * Get the plugin url.
208
+ *
209
  * @return string
210
  */
211
  public function plugin_url() {
226
  return;
227
  }
228
 
229
+ $version = 'PHP' === $flag ? self::$MIN_PHP_VER : self::$MIN_WP_VER;
230
 
231
  // Deactivate automatically due to insufficient PHP or WP Version.
232
  deactivate_plugins( basename( __FILE__ ) );
233
 
234
+ /* translators: 1: Plugin Name, 2: Flagged software (PHP or WP), 3: PHP or WordPress version */
235
+ $notice = sprintf( __( 'The %4$s %1$s %5$s plugin requires %2$s version %3$s or greater.', 'user-menus' ), self::$NAME, $flag, $version, '<strong>', '</strong>' );
236
 
237
+ /* phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped */
238
+ wp_die( sprintf( '<p>%s</p>', $notice ), __( 'Plugin Activation Error', 'user-menus' ), [
239
+ 'response' => 200,
240
+ 'back_link' => true,
241
+ ] );
242
  }
243
 
244
  /**
253
  }
254
 
255
  /**
256
+ * Globally available function to get plugin instance.
257
+ *
258
  * @return object
259
  */
260
  function jp_user_menus() {
264
  jp_user_menus();
265
 
266
  // Ensure plugin & environment compatibility.
267
+ register_activation_hook( __FILE__, [ 'JP_User_Menus', 'activation_check' ] );