Activity Log - Version 2.2.9

Version Description

  • Tweak! Update Freemius SDK
Download this release

Release Info

Developer KingYes
Plugin Icon 128x128 Activity Log
Version 2.2.9
Comparing to
See all releases

Code changes from version 2.2.8 to 2.2.9

Files changed (43) hide show
  1. aryo-activity-log.php +1 -1
  2. classes/freemius/assets/css/admin/common.css +1 -1
  3. classes/freemius/assets/css/admin/connect.css +1 -1
  4. classes/freemius/assets/scss/admin/common.scss +57 -45
  5. classes/freemius/assets/scss/admin/connect.scss +16 -0
  6. classes/freemius/config.php +21 -11
  7. classes/freemius/includes/class-freemius.php +157 -54
  8. classes/freemius/includes/class-fs-api.php +169 -69
  9. classes/freemius/includes/class-fs-plugin-updater.php +61 -0
  10. classes/freemius/includes/fs-core-functions.php +32 -28
  11. classes/freemius/includes/fs-essential-functions.php +69 -5
  12. classes/freemius/includes/i18n.php +14 -1
  13. classes/freemius/includes/managers/class-fs-admin-menu-manager.php +7 -2
  14. classes/freemius/includes/managers/class-fs-cache-manager.php +211 -0
  15. classes/freemius/includes/sdk/Exceptions/ArgumentNotExistException.php +4 -0
  16. classes/freemius/includes/sdk/Exceptions/EmptyArgumentException.php +4 -0
  17. classes/freemius/includes/sdk/Exceptions/InvalidArgumentException.php +4 -0
  18. classes/freemius/includes/sdk/Exceptions/OAuthException.php +4 -0
  19. classes/freemius/includes/sdk/Freemius.php +196 -66
  20. classes/freemius/includes/sdk/FreemiusBase.php +13 -52
  21. classes/freemius/includes/supplements/fs-essential-functions-1.1.7.1.php +45 -0
  22. classes/freemius/start.php +10 -4
  23. classes/freemius/templates/account.php +4 -0
  24. classes/freemius/templates/add-ons.php +4 -0
  25. classes/freemius/templates/admin-notice.php +11 -5
  26. classes/freemius/templates/all-admin-notice.php +4 -0
  27. classes/freemius/templates/checkout.php +4 -0
  28. classes/freemius/templates/connect.php +112 -79
  29. classes/freemius/templates/contact.php +5 -0
  30. classes/freemius/templates/deactivation-feedback-modal.php +6 -1
  31. classes/freemius/templates/debug.php +156 -140
  32. classes/freemius/templates/email.php +4 -0
  33. classes/freemius/templates/firewall-issues-js.php +4 -0
  34. classes/freemius/templates/pending-activation.php +0 -157
  35. classes/freemius/templates/plugin-icon.php +5 -0
  36. classes/freemius/templates/plugin-info/description.php +11 -0
  37. classes/freemius/templates/plugin-info/features.php +11 -0
  38. classes/freemius/templates/plugin-info/screenshots.php +11 -0
  39. classes/freemius/templates/powered-by.php +5 -1
  40. classes/freemius/templates/pricing.php +4 -0
  41. classes/freemius/templates/sticky-admin-notice-js.php +4 -0
  42. language/aryo-activity-log.pot +252 -241
  43. readme.txt +4 -1
aryo-activity-log.php CHANGED
@@ -5,7 +5,7 @@ Plugin URI: http://wordpress.org/plugins/aryo-activity-log/
5
  Description: Get aware of any activities that are taking place on your dashboard! Imagine it like a black-box for your WordPress site. e.g. post was deleted, plugin was activated, user logged in or logged out - it's all these for you to see.
6
  Author: Yakir Sitbon, Maor Chasen, Ariel Klikstein
7
  Author URI: http://pojo.me/
8
- Version: 2.2.8
9
  Text Domain: aryo-activity-log
10
  Domain Path: /language/
11
  License: GPLv2 or later
5
  Description: Get aware of any activities that are taking place on your dashboard! Imagine it like a black-box for your WordPress site. e.g. post was deleted, plugin was activated, user logged in or logged out - it's all these for you to see.
6
  Author: Yakir Sitbon, Maor Chasen, Ariel Klikstein
7
  Author URI: http://pojo.me/
8
+ Version: 2.2.9
9
  Text Domain: aryo-activity-log
10
  Domain Path: /language/
11
  License: GPLv2 or later
classes/freemius/assets/css/admin/common.css CHANGED
@@ -1 +1 @@
1
- .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-close{position:absolute;top:2px;bottom:2px;right:2px;cursor:pointer;color:#aaa;min-width:100px;text-align:center;padding-right:2px}.fs-notice .fs-close:hover{color:#fff;background:#A9A9A9}.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;bottom:-22px;top: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}.rtl .fs-notice .fs-close{left:2px;right:auto;padding-right:0;padding-left:2px}.fs-secure-notice{position:fixed;top:32px;left:160px;right:0;background:#ebfdeb;padding:10px 20px;color:green;z-index:9999;box-shadow:0px 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)}@media screen and (max-width: 960px){.fs-secure-notice{left:36px}}@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'}
1
+ .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;bottom:-22px;top: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}.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;box-shadow:0px 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)}@media screen and (max-width: 960px){.fs-secure-notice{left:36px}}@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'}
classes/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 p{margin:0;padding:0;font-size:1.2em}#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-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-trigger{font-size:0.9em;text-decoration:none;text-align:center;display:block}#fs_connect .fs-permissions ul{height:0;overflow:hidden;margin:0}#fs_connect .fs-permissions ul li{margin-bottom:12px}#fs_connect .fs-permissions ul li:last-child{margin-bottom:0}#fs_connect .fs-permissions ul li i.dashicons{float:left;font-size:40px;width:40px;height:40px}#fs_connect .fs-permissions ul li div{margin-left:55px}#fs_connect .fs-permissions ul li div span{font-weight:bold;text-transform:uppercase;color:#23282d}#fs_connect .fs-permissions ul li div p{margin:2px 0 0 0}#fs_connect .fs-permissions.fs-open{background:#fff}#fs_connect .fs-permissions.fs-open ul{height:auto;margin:20px 20px 10px 20px}@media screen and (max-width: 479px){#fs_connect .fs-permissions{background:#fff}#fs_connect .fs-permissions .fs-trigger{display:none}#fs_connect .fs-permissions ul{height:auto;margin:20px}}#fs_connect .fs-visual{padding:12px;line-height:0;background:#fafafa;height:80px;position:relative}#fs_connect .fs-visual .fs-site-icon{position:absolute;left:20px;top:10px}#fs_connect .fs-visual .fs-connect-logo{position:absolute;right:20px;top:10px}#fs_connect .fs-visual .fs-plugin-icon{position:absolute;top:10px;left:50%;margin-left:-40px}#fs_connect .fs-visual .fs-plugin-icon,#fs_connect .fs-visual .fs-site-icon,#fs_connect .fs-visual img,#fs_connect .fs-visual object{width:80px;height:80px}#fs_connect .fs-visual .dashicons-wordpress{font-size:64px;background:#01749a;color:#fff;width:64px;height:64px;padding:8px}#fs_connect .fs-visual .dashicons-plus{position:absolute;top:50%;font-size:30px;margin-top:-10px;color:#bbb}#fs_connect .fs-visual .dashicons-plus.fs-first{left:28%}#fs_connect .fs-visual .dashicons-plus.fs-second{left:65%}#fs_connect .fs-visual .fs-plugin-icon,#fs_connect .fs-visual .fs-connect-logo,#fs_connect .fs-visual .fs-site-icon{border:1px solid #ccc;padding:1px;background:#fff}#fs_connect .fs-terms{text-align:center;font-size:0.85em;padding:5px;background:rgba(0,0,0,0.05)}#fs_connect .fs-terms,#fs_connect .fs-terms a{color:#999}#fs_connect .fs-terms a{text-decoration:none}.rtl #fs_connect .fs-actions{padding:10px 20px;background:#C0C7CA}.rtl #fs_connect .fs-actions .button .dashicons{font-size:37px;margin-left:-8px;margin-right:12px}.rtl #fs_connect .fs-actions .button.button-primary:after{content:' \000bb'}.rtl #fs_connect .fs-actions .button.button-secondary{float:left}.rtl #fs_connect .fs-permissions ul li div{margin-right:55px;margin-left:0}.rtl #fs_connect .fs-permissions ul li i.dashicons{float:right}.rtl #fs_connect .fs-visual .fs-site-icon{right:20px;left:auto}.rtl #fs_connect .fs-visual .fs-connect-logo{right:auto;left:20px}.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 p{margin:0;padding:0;font-size:1.2em}#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-trigger{font-size:0.9em;text-decoration:none;text-align:center;display:block}#fs_connect .fs-permissions ul{height:0;overflow:hidden;margin:0}#fs_connect .fs-permissions ul li{margin-bottom:12px}#fs_connect .fs-permissions ul li:last-child{margin-bottom:0}#fs_connect .fs-permissions ul li i.dashicons{float:left;font-size:40px;width:40px;height:40px}#fs_connect .fs-permissions ul li div{margin-left:55px}#fs_connect .fs-permissions ul li div span{font-weight:bold;text-transform:uppercase;color:#23282d}#fs_connect .fs-permissions ul li div p{margin:2px 0 0 0}#fs_connect .fs-permissions.fs-open{background:#fff}#fs_connect .fs-permissions.fs-open ul{height:auto;margin:20px 20px 10px 20px}@media screen and (max-width: 479px){#fs_connect .fs-permissions{background:#fff}#fs_connect .fs-permissions .fs-trigger{display:none}#fs_connect .fs-permissions ul{height:auto;margin:20px}}#fs_connect .fs-visual{padding:12px;line-height:0;background:#fafafa;height:80px;position:relative}#fs_connect .fs-visual .fs-site-icon{position:absolute;left:20px;top:10px}#fs_connect .fs-visual .fs-connect-logo{position:absolute;right:20px;top:10px}#fs_connect .fs-visual .fs-plugin-icon{position:absolute;top:10px;left:50%;margin-left:-40px}#fs_connect .fs-visual .fs-plugin-icon,#fs_connect .fs-visual .fs-site-icon,#fs_connect .fs-visual img,#fs_connect .fs-visual object{width:80px;height:80px}#fs_connect .fs-visual .dashicons-wordpress{font-size:64px;background:#01749a;color:#fff;width:64px;height:64px;padding:8px}#fs_connect .fs-visual .dashicons-plus{position:absolute;top:50%;font-size:30px;margin-top:-10px;color:#bbb}#fs_connect .fs-visual .dashicons-plus.fs-first{left:28%}#fs_connect .fs-visual .dashicons-plus.fs-second{left:65%}#fs_connect .fs-visual .fs-plugin-icon,#fs_connect .fs-visual .fs-connect-logo,#fs_connect .fs-visual .fs-site-icon{border:1px solid #ccc;padding:1px;background:#fff}#fs_connect .fs-terms{text-align:center;font-size:0.85em;padding:5px;background:rgba(0,0,0,0.05)}#fs_connect .fs-terms,#fs_connect .fs-terms a{color:#999}#fs_connect .fs-terms a{text-decoration:none}.rtl #fs_connect .fs-actions{padding:10px 20px;background:#C0C7CA}.rtl #fs_connect .fs-actions .button .dashicons{font-size:37px;margin-left:-8px;margin-right:12px}.rtl #fs_connect .fs-actions .button.button-primary:after{content:' \000bb'}.rtl #fs_connect .fs-actions .button.button-primary.fs-loading:after{content:''}.rtl #fs_connect .fs-actions .button.button-secondary{float:left}.rtl #fs_connect .fs-permissions ul li div{margin-right:55px;margin-left:0}.rtl #fs_connect .fs-permissions ul li i.dashicons{float:right}.rtl #fs_connect .fs-visual .fs-site-icon{right:20px;left:auto}.rtl #fs_connect .fs-visual .fs-connect-logo{right:auto;left:20px}.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}
classes/freemius/assets/scss/admin/common.scss CHANGED
@@ -11,76 +11,87 @@
11
 
12
  &.success
13
  {
14
- color: green;
15
- // font-weight: normal;
16
  }
17
 
18
  &.promotion
19
  {
20
- border-color: $fs-notice-promotion-border-color !important;
21
  background-color: $fs-notice-promotion-bkg !important;
22
  }
23
 
 
 
 
 
 
 
24
  .fs-close
25
  {
26
- position: absolute;
27
- top: 2px;
28
- bottom: 2px;
29
- right: 2px;
 
 
 
30
  cursor: pointer;
31
- color: #aaa;
32
- min-width: 100px;
33
- text-align: center;
34
- padding-right: 2px;
35
 
36
  &:hover
37
  {
38
- color: #fff;
39
- background: #A9A9A9;
40
  }
41
 
42
  > *
43
  {
44
  margin-top: 7px;
45
- display: inline-block;
46
  }
47
  }
48
 
49
  label.fs-plugin-title
50
  {
51
- background: rgba(0, 0, 0, 0.3);
52
- color: #fff;
53
- padding: 2px 10px;
54
- position: absolute;
55
- bottom: -22px;
56
- top: auto;
57
- right: auto;
58
  @include border-radius(0 0 3px 3px);
59
- left: 10px;
60
- font-size: 12px;
61
  font-weight: bold;
62
- cursor: auto;
63
  }
64
  }
65
 
66
- .rtl .fs-notice .fs-close
67
  {
68
- left: 2px;
69
- right: auto;
70
- padding-right: 0;
71
- padding-left: 2px;
 
 
 
 
72
  }
73
 
74
  .fs-secure-notice
75
  {
76
- position: fixed;
77
- top: 32px;
78
- left: 160px;
79
- right: 0;
80
  background: rgb(235, 253, 235);
81
- padding: 10px 20px;
82
- color: green;
83
- z-index: 9999;
84
  box-shadow: 0px 2px 2px rgba(6, 113, 6, 0.3);
85
  @include opacity(0.95);
86
 
@@ -90,32 +101,33 @@
90
  }
91
  }
92
 
93
- @media screen and (max-width: 960px)
94
- {
95
  .fs-secure-notice
96
  {
97
  left: 36px;
98
  }
99
  }
100
 
101
- @media screen and (max-width: 782px)
102
- {
103
  .fs-secure-notice
104
  {
105
- left: 0;
106
- top: 46px;
107
  text-align: center;
108
  }
109
  }
110
 
111
- span.fs-submenu-item.fs-sub:before {
 
112
  // Add small arrow.
113
  content: '\21B3';
114
  padding: 0 5px;
115
  }
116
 
117
- .rtl {
118
- span.fs-submenu-item.fs-sub:before {
 
 
119
  // Add small RTL arrow.
120
  content: '\21B2';
121
  }
11
 
12
  &.success
13
  {
14
+ color: green;
15
+ // font-weight: normal;
16
  }
17
 
18
  &.promotion
19
  {
20
+ border-color: $fs-notice-promotion-border-color !important;
21
  background-color: $fs-notice-promotion-bkg !important;
22
  }
23
 
24
+ .fs-notice-body
25
+ {
26
+ margin: .5em 0;
27
+ padding: 2px;
28
+ }
29
+
30
  .fs-close
31
  {
32
+ // position: absolute;
33
+ // top: 2px;
34
+ // bottom: 2px;
35
+ // right: 2px;
36
+ // min-width: 100px;
37
+ // text-align: center;
38
+ // padding-right: 2px;
39
  cursor: pointer;
40
+ color: #aaa;
41
+ float: right;
 
 
42
 
43
  &:hover
44
  {
45
+ color: #666;
46
+ // background: #A9A9A9;
47
  }
48
 
49
  > *
50
  {
51
  margin-top: 7px;
52
+ display: inline-block;
53
  }
54
  }
55
 
56
  label.fs-plugin-title
57
  {
58
+ background: rgba(0, 0, 0, 0.3);
59
+ color: #fff;
60
+ padding: 2px 10px;
61
+ position: absolute;
62
+ bottom: -22px;
63
+ top: auto;
64
+ right: auto;
65
  @include border-radius(0 0 3px 3px);
66
+ left: 10px;
67
+ font-size: 12px;
68
  font-weight: bold;
69
+ cursor: auto;
70
  }
71
  }
72
 
73
+ .rtl .fs-notice
74
  {
75
+ .fs-close
76
+ {
77
+ // left: 2px;
78
+ // right: auto;
79
+ // padding-right: 0;
80
+ // padding-left: 2px;
81
+ float: left;
82
+ }
83
  }
84
 
85
  .fs-secure-notice
86
  {
87
+ position: fixed;
88
+ top: 32px;
89
+ left: 160px;
90
+ right: 0;
91
  background: rgb(235, 253, 235);
92
+ padding: 10px 20px;
93
+ color: green;
94
+ z-index: 9999;
95
  box-shadow: 0px 2px 2px rgba(6, 113, 6, 0.3);
96
  @include opacity(0.95);
97
 
101
  }
102
  }
103
 
104
+ @media screen and (max-width: 960px) {
 
105
  .fs-secure-notice
106
  {
107
  left: 36px;
108
  }
109
  }
110
 
111
+ @media screen and (max-width: 782px) {
 
112
  .fs-secure-notice
113
  {
114
+ left: 0;
115
+ top: 46px;
116
  text-align: center;
117
  }
118
  }
119
 
120
+ span.fs-submenu-item.fs-sub:before
121
+ {
122
  // Add small arrow.
123
  content: '\21B3';
124
  padding: 0 5px;
125
  }
126
 
127
+ .rtl
128
+ {
129
+ span.fs-submenu-item.fs-sub:before
130
+ {
131
  // Add small RTL arrow.
132
  content: '\21B2';
133
  }
classes/freemius/assets/scss/admin/connect.scss CHANGED
@@ -56,6 +56,14 @@ $form_width: 480px;
56
  {
57
  content: ' \279C';
58
  }
 
 
 
 
 
 
 
 
59
  }
60
 
61
  &.button-secondary
@@ -292,6 +300,14 @@ $form_width: 480px;
292
  {
293
  content: ' \000bb';
294
  }
 
 
 
 
 
 
 
 
295
  }
296
 
297
  &.button-secondary
56
  {
57
  content: ' \279C';
58
  }
59
+
60
+ &.fs-loading
61
+ {
62
+ &:after
63
+ {
64
+ content: '';
65
+ }
66
+ }
67
  }
68
 
69
  &.button-secondary
300
  {
301
  content: ' \000bb';
302
  }
303
+
304
+ &.fs-loading
305
+ {
306
+ &:after
307
+ {
308
+ content: '';
309
+ }
310
+ }
311
  }
312
 
313
  &.button-secondary
classes/freemius/config.php CHANGED
@@ -39,7 +39,7 @@
39
  */
40
  if ( ! defined( 'WP_FS__LOCALHOST_IP' ) ) {
41
  // VVV default public network IP.
42
- define( 'WP_FS__VVV_DEFAULT_PUBLIC_IP', '192.168.50.1' );
43
 
44
  // define( 'WP_FS__LOCALHOST_IP', WP_FS__VVV_DEFAULT_PUBLIC_IP );
45
  }
@@ -56,8 +56,9 @@
56
  * THEREFORE, MAKE SURE THAT WHEN USING THIS PARAMETER,YOUR TESTING ENVIRONMENT'S
57
  * CLOCK IS SYNCED.
58
  */
59
- define( 'WP_FS__SKIP_EMAIL_ACTIVATION', false );
60
-
 
61
 
62
  /**
63
  * Directories
@@ -81,17 +82,25 @@
81
  define( 'WP_FS__ADDRESS_LOCALHOST', 'http://' . WP_FS__DOMAIN_LOCALHOST . ':8080' );
82
  define( 'WP_FS__ADDRESS_PRODUCTION', 'https://' . WP_FS__DOMAIN_PRODUCTION );
83
 
 
 
 
84
  define( 'WP_FS__IS_PRODUCTION_MODE', ! defined( 'WP_FS__DEV_MODE' ) || ! WP_FS__DEV_MODE || ( WP_FS__TESTING_DOMAIN !== $_SERVER['HTTP_HOST'] ) );
85
 
86
  define( 'WP_FS__ADDRESS', ( WP_FS__IS_PRODUCTION_MODE ? WP_FS__ADDRESS_PRODUCTION : WP_FS__ADDRESS_LOCALHOST ) );
87
 
88
  if ( defined( 'WP_FS__LOCALHOST_IP' ) ) {
89
- define( 'WP_FS__IS_LOCALHOST', ( WP_FS__LOCALHOST_IP == $_SERVER['REMOTE_ADDR'] ) );
90
  } else {
91
- define( 'WP_FS__IS_LOCALHOST', ( substr( $_SERVER['REMOTE_ADDR'], 0, 4 ) == '127.' || $_SERVER['REMOTE_ADDR'] == '::1' ) );
 
 
 
 
92
  }
93
 
94
- define( 'WP_FS__IS_LOCALHOST_FOR_SERVER', ( false !== strpos( $_SERVER['HTTP_HOST'], 'localhost' ) ) );
 
95
 
96
  // Set API address for local testing.
97
  if ( ! WP_FS__IS_PRODUCTION_MODE ) {
@@ -109,7 +118,7 @@
109
  }
110
  define( 'WP_FS__OPTIONS_OPTION_NAME', WP_FS___OPTION_PREFIX . 'options' );
111
 
112
- define( 'WP_FS__IS_HTTPS', (
113
  // Checks if CloudFlare's HTTPS (Flexible SSL support)
114
  isset( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) && 'https' === strtolower( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) ) ||
115
  // Check if HTTPS request.
@@ -117,7 +126,8 @@
117
  ( isset( $_SERVER['SERVER_PORT'] ) && 443 == $_SERVER['SERVER_PORT'] )
118
  );
119
 
120
- define( 'WP_FS__IS_POST_REQUEST', ( strtoupper( $_SERVER['REQUEST_METHOD'] ) == 'POST' ) );
 
121
 
122
  /**
123
  * Billing Frequencies
@@ -136,7 +146,7 @@
136
  /**
137
  * Times in seconds
138
  */
139
- // define( 'WP_FS__TIME_5_MIN_IN_SEC', 300 );
140
  define( 'WP_FS__TIME_10_MIN_IN_SEC', 600 );
141
  // define( 'WP_FS__TIME_15_MIN_IN_SEC', 900 );
142
  define( 'WP_FS__TIME_24_HOURS_IN_SEC', 86400 );
@@ -144,8 +154,8 @@
144
  /**
145
  * Debugging
146
  */
147
- define( 'WP_FS__DEBUG_SDK', ! empty( $_GET['fs_dbg'] ) );
148
- define( 'WP_FS__ECHO_DEBUG_SDK', ! empty( $_GET['fs_dbg_echo'] ) );
149
  define( 'WP_FS__LOG_DATETIME_FORMAT', 'Y-n-d H:i:s' );
150
 
151
  if ( WP_FS__ECHO_DEBUG_SDK ) {
39
  */
40
  if ( ! defined( 'WP_FS__LOCALHOST_IP' ) ) {
41
  // VVV default public network IP.
42
+ define( 'WP_FS__VVV_DEFAULT_PUBLIC_IP', '192.168.50.4' );
43
 
44
  // define( 'WP_FS__LOCALHOST_IP', WP_FS__VVV_DEFAULT_PUBLIC_IP );
45
  }
56
  * THEREFORE, MAKE SURE THAT WHEN USING THIS PARAMETER,YOUR TESTING ENVIRONMENT'S
57
  * CLOCK IS SYNCED.
58
  */
59
+ if ( ! defined( 'WP_FS__SKIP_EMAIL_ACTIVATION' ) ) {
60
+ define( 'WP_FS__SKIP_EMAIL_ACTIVATION', false );
61
+ }
62
 
63
  /**
64
  * Directories
82
  define( 'WP_FS__ADDRESS_LOCALHOST', 'http://' . WP_FS__DOMAIN_LOCALHOST . ':8080' );
83
  define( 'WP_FS__ADDRESS_PRODUCTION', 'https://' . WP_FS__DOMAIN_PRODUCTION );
84
 
85
+ define( 'WP_FS__IS_HTTP_REQUEST', isset( $_SERVER['HTTP_HOST'] ) );
86
+ define( 'WP_FS__REMOTE_ADDR', fs_get_ip() );
87
+
88
  define( 'WP_FS__IS_PRODUCTION_MODE', ! defined( 'WP_FS__DEV_MODE' ) || ! WP_FS__DEV_MODE || ( WP_FS__TESTING_DOMAIN !== $_SERVER['HTTP_HOST'] ) );
89
 
90
  define( 'WP_FS__ADDRESS', ( WP_FS__IS_PRODUCTION_MODE ? WP_FS__ADDRESS_PRODUCTION : WP_FS__ADDRESS_LOCALHOST ) );
91
 
92
  if ( defined( 'WP_FS__LOCALHOST_IP' ) ) {
93
+ define( 'WP_FS__IS_LOCALHOST', ( WP_FS__LOCALHOST_IP === WP_FS__REMOTE_ADDR ) );
94
  } else {
95
+ define( 'WP_FS__IS_LOCALHOST', WP_FS__IS_HTTP_REQUEST &&
96
+ is_string( WP_FS__REMOTE_ADDR ) &&
97
+ ( substr( WP_FS__REMOTE_ADDR, 0, 4 ) == '127.' ||
98
+ WP_FS__REMOTE_ADDR == '::1' )
99
+ );
100
  }
101
 
102
+ define( 'WP_FS__IS_LOCALHOST_FOR_SERVER', ( ! WP_FS__IS_HTTP_REQUEST ||
103
+ false !== strpos( $_SERVER['HTTP_HOST'], 'localhost' ) ) );
104
 
105
  // Set API address for local testing.
106
  if ( ! WP_FS__IS_PRODUCTION_MODE ) {
118
  }
119
  define( 'WP_FS__OPTIONS_OPTION_NAME', WP_FS___OPTION_PREFIX . 'options' );
120
 
121
+ define( 'WP_FS__IS_HTTPS', ( WP_FS__IS_HTTP_REQUEST &&
122
  // Checks if CloudFlare's HTTPS (Flexible SSL support)
123
  isset( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) && 'https' === strtolower( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) ) ||
124
  // Check if HTTPS request.
126
  ( isset( $_SERVER['SERVER_PORT'] ) && 443 == $_SERVER['SERVER_PORT'] )
127
  );
128
 
129
+ define( 'WP_FS__IS_POST_REQUEST', ( WP_FS__IS_HTTP_REQUEST &&
130
+ strtoupper( $_SERVER['REQUEST_METHOD'] ) == 'POST' ) );
131
 
132
  /**
133
  * Billing Frequencies
146
  /**
147
  * Times in seconds
148
  */
149
+ define( 'WP_FS__TIME_5_MIN_IN_SEC', 300 );
150
  define( 'WP_FS__TIME_10_MIN_IN_SEC', 600 );
151
  // define( 'WP_FS__TIME_15_MIN_IN_SEC', 900 );
152
  define( 'WP_FS__TIME_24_HOURS_IN_SEC', 86400 );
154
  /**
155
  * Debugging
156
  */
157
+ define( 'WP_FS__DEBUG_SDK', WP_FS__DEV_MODE && ! empty( $_GET['fs_dbg'] ) );
158
+ define( 'WP_FS__ECHO_DEBUG_SDK', WP_FS__DEV_MODE && ! empty( $_GET['fs_dbg_echo'] ) );
159
  define( 'WP_FS__LOG_DATETIME_FORMAT', 'Y-n-d H:i:s' );
160
 
161
  if ( WP_FS__ECHO_DEBUG_SDK ) {
classes/freemius/includes/class-freemius.php CHANGED
@@ -191,6 +191,13 @@
191
  */
192
  private $_admin_notices;
193
 
 
 
 
 
 
 
 
194
  /**
195
  * @var FS_Logger
196
  * @since 1.0.0
@@ -458,7 +465,10 @@
458
  'slug' => $this->_slug
459
  );
460
 
461
- fs_require_once_template( 'deactivation-feedback-modal.php', $vars );
 
 
 
462
  }
463
 
464
  /**
@@ -797,6 +807,8 @@
797
 
798
  self::$_accounts = FS_Option_Manager::get_manager( WP_FS__ACCOUNTS_OPTION_NAME, true );
799
 
 
 
800
  // Configure which Freemius powered plugins should be auto updated.
801
  // add_filter( 'auto_update_plugin', '_include_plugins_in_auto_update', 10, 2 );
802
 
@@ -812,6 +824,10 @@
812
  * @since 1.0.8
813
  */
814
  static function add_debug_page() {
 
 
 
 
815
  self::$_static_logger->entrance();
816
 
817
  $title = sprintf( '%s [v.%s]', __fs( 'freemius-debug' ), WP_FS__SDK_VERSION );
@@ -905,6 +921,7 @@
905
  // If already installed or pending then sure it's on :)
906
  if ( $this->is_registered() || $this->is_pending_activation() ) {
907
  $this->_is_on = true;
 
908
  return true;
909
  }
910
 
@@ -936,8 +953,9 @@
936
  }
937
 
938
  if ( isset( $this->_storage->connectivity_test ) ) {
939
- if ( $_SERVER['HTTP_HOST'] == $this->_storage->connectivity_test['host'] &&
940
- fs_get_ip() == $this->_storage->connectivity_test['server_ip']
 
941
  ) {
942
  if ( ( $this->_storage->connectivity_test['is_connected'] &&
943
  $this->_storage->connectivity_test['is_active'] ) ||
@@ -945,7 +963,7 @@
945
  $version == $this->_storage->connectivity_test['version'] )
946
  ) {
947
  $this->_has_api_connection = $this->_storage->connectivity_test['is_connected'];
948
- $this->_is_on = $this->_storage->connectivity_test['is_active'] || (WP_FS__DEV_MODE && $this->_has_api_connection);
949
 
950
  return $this->_has_api_connection;
951
  }
@@ -980,7 +998,7 @@
980
  $this->_storage->connectivity_test = array(
981
  'is_connected' => $is_connected,
982
  'host' => $_SERVER['HTTP_HOST'],
983
- 'server_ip' => fs_get_ip(),
984
  'is_active' => $is_active,
985
  'timestamp' => WP_FS__SCRIPT_START_TIME,
986
  // Last version with connectivity attempt.
@@ -988,7 +1006,7 @@
988
  );
989
 
990
  $this->_has_api_connection = $is_connected;
991
- $this->_is_on = $is_active || (WP_FS__DEV_MODE && $is_connected);
992
 
993
  return $this->_has_api_connection;
994
  }
@@ -1385,7 +1403,7 @@
1385
  );
1386
  }
1387
 
1388
- $server_ip = fs_get_ip();
1389
 
1390
  // Generate the default email sections.
1391
  $sections = array(
@@ -1560,6 +1578,19 @@
1560
  $this->_permissions = $this->_get_option( $plugin_info, 'permissions', array() );
1561
 
1562
  if ( ! $this->is_registered() ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
1563
  if ( ! $this->has_api_connectivity() ) {
1564
  if ( is_admin() && $this->_admin_notices->has_sticky( 'failed_connect_api' ) ) {
1565
  if ( ! $this->_enable_anonymous ) {
@@ -1655,13 +1686,13 @@
1655
  &$this,
1656
  '_get_addon_info_filter'
1657
  ), WP_FS__DEFAULT_PRIORITY, 3 );
1658
- } else {
1659
- if ( $this->is_paying() || $this->_has_addons() ) {
1660
- new FS_Plugin_Updater( $this );
1661
- }
1662
  }
1663
  }
1664
 
 
 
 
 
1665
  // if ( $this->is_registered() ||
1666
  // $this->is_anonymous() ||
1667
  // $this->is_pending_activation()
@@ -2131,6 +2162,11 @@
2131
  return false;
2132
  }
2133
 
 
 
 
 
 
2134
  $sync_timestamp = $this->_storage->get( 'sync_timestamp' );
2135
 
2136
  if ( ! is_numeric( $sync_timestamp ) || $sync_timestamp >= time() ) {
@@ -2147,8 +2183,10 @@
2147
  // Initiate background plan sync.
2148
  $this->_sync_license( true );
2149
 
2150
- // Check for plugin updates.
2151
- $this->_check_updates( true );
 
 
2152
  }
2153
 
2154
  if ( ! $this->is_addon() ) {
@@ -2213,12 +2251,19 @@
2213
  * @since 1.0.7
2214
  */
2215
  function _admin_init_action() {
2216
- // Automatically redirect to connect/activation page after plugin activation.
 
 
 
 
2217
  if ( $this->is_plugin_activation() ) {
2218
  delete_option( "fs_{$this->_slug}_activated" );
2219
- $this->_redirect_on_activation_hook();
2220
 
2221
- return;
 
 
 
 
2222
  }
2223
 
2224
  if ( fs_request_is_action( $this->_slug . '_skip_activation' ) ) {
@@ -2602,6 +2647,24 @@
2602
  unset( $this->_storage->is_anonymous );
2603
  }
2604
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2605
  /**
2606
  * Skip account connect, and set anonymous mode.
2607
  *
@@ -2631,16 +2694,16 @@
2631
  private function update_plugin_version_event() {
2632
  $this->_logger->entrance( 'slug = ' . $this->_slug );
2633
 
2634
- $this->_site->version = $this->get_plugin_version();
2635
-
2636
  // Send update event.
2637
  $site = $this->send_install_update( array(), true );
2638
 
2639
  if ( false !== $site && ! $this->is_api_error( $site ) ) {
2640
  $this->_site = new FS_Site( $site );
2641
  $this->_site->plan = $this->_get_plan_by_id( $site->plan_id );
2642
- $this->_store_site( true );
2643
  }
 
 
 
2644
  }
2645
 
2646
  /**
@@ -3245,6 +3308,21 @@
3245
  return $addons[ $this->_plugin->id ];
3246
  }
3247
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3248
  /**
3249
  * Get add-on by ID (from local data).
3250
  *
@@ -4334,10 +4412,12 @@
4334
  function setup_account( FS_User $user, FS_Site $site, $redirect = true ) {
4335
  $this->_user = $user;
4336
  $this->_site = $site;
 
 
 
4337
  $this->_enrich_site_plan( false );
4338
 
4339
  $this->_set_account( $user, $site );
4340
- $this->_sync_plans();
4341
 
4342
  if ( $this->is_trial() ) {
4343
  // Store trial plan information.
@@ -4915,7 +4995,7 @@
4915
  $this->embed_submenu_items();
4916
 
4917
  // Start with specially high number to make sure it's appended.
4918
- $i = 10000;
4919
  foreach ( $all_submenu_items_after as $meta ) {
4920
  $top_level_menu[ $i ] = $meta;
4921
  $i ++;
@@ -4925,12 +5005,26 @@
4925
  ksort( $top_level_menu );
4926
  }
4927
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4928
  function _add_default_submenu_items() {
4929
  if ( ! $this->is_on() ) {
4930
  return;
4931
  }
4932
 
4933
- if ( $this->is_registered() ) {
4934
  if ( $this->_menu->is_submenu_item_visible( 'support' ) ) {
4935
  $this->add_submenu_link_item(
4936
  $this->apply_filters( 'support_forum_submenu', __fs( 'support-forum', $this->_slug ) ),
@@ -5116,11 +5210,9 @@
5116
  $this->_logger->entrance( $tag );
5117
 
5118
  $args = func_get_args();
 
5119
 
5120
- return call_user_func_array( 'apply_filters', array_merge(
5121
- array( 'fs_' . $tag . '_' . $this->_slug ),
5122
- array_slice( $args, 1 ) )
5123
- );
5124
  }
5125
 
5126
  /**
@@ -5840,30 +5932,45 @@
5840
  $plan_change = 'none';
5841
 
5842
  if ( $this->is_api_error( $site ) ) {
5843
- $api = $this->get_api_site_scope();
5844
-
5845
- // Try to ping API to see if not blocked.
5846
- if ( ! $api->test() ) {
5847
- // Failed to ping API - blocked!
5848
- $this->_admin_notices->add(
5849
- sprintf(
5850
- __fs( 'server-blocking-access', $this->_slug ),
5851
- $this->get_plugin_name(),
5852
- '<a href="' . $api->get_url() . '" target="_blank">' . $api->get_url() . '</a>'
5853
- ) . '<br> ' . __fs( 'server-error-message', $this->_slug ) . var_export( $site->error, true ),
5854
- __fs( 'oops', $this->_slug ) . '...',
5855
- 'error',
5856
- $background
5857
- );
5858
- } else {
5859
- // Authentication params are broken.
5860
- $this->_admin_notices->add(
5861
- __fs( 'wrong-authentication-param-message', $this->_slug ),
5862
- __fs( 'oops', $this->_slug ) . '...',
5863
- 'error'
5864
- );
 
 
 
 
 
 
 
 
 
 
 
 
5865
  }
5866
  } else {
 
 
 
5867
  $site = new FS_Site( $site );
5868
 
5869
  // Sync licenses.
@@ -7028,11 +7135,7 @@
7028
  $this->_logger->entrance();
7029
 
7030
  $vars = array( 'slug' => $this->_slug );
7031
- if ( $this->is_pending_activation() ) {
7032
- fs_require_once_template( 'pending-activation.php', $vars );
7033
- } else {
7034
- fs_require_once_template( 'connect.php', $vars );
7035
- }
7036
  }
7037
 
7038
  /**
@@ -7338,7 +7441,7 @@
7338
 
7339
  // Add start trial button.
7340
  $message .= ' ' . sprintf(
7341
- '<a style="margin-left: 10px;" href="%s"><button class="button button-primary">%s &nbsp;&#10140;</button></a>',
7342
  $upgrade_url,
7343
  __fs( 'start-free-trial', $this->_slug )
7344
  );
191
  */
192
  private $_admin_notices;
193
 
194
+ /**
195
+ * @since 1.1.6
196
+ *
197
+ * @var FS_Admin_Notice_Manager
198
+ */
199
+ private static $_global_admin_notices;
200
+
201
  /**
202
  * @var FS_Logger
203
  * @since 1.0.0
465
  'slug' => $this->_slug
466
  );
467
 
468
+ /**
469
+ * @todo Deactivation form core functions should be loaded only once! Otherwise, when there are multiple Freemius powered plugins the same code is loaded multiple times. The only thing that should be loaded differently is the various deactivation reasons object based on the state of the plugin.
470
+ */
471
+ fs_require_template( 'deactivation-feedback-modal.php', $vars );
472
  }
473
 
474
  /**
807
 
808
  self::$_accounts = FS_Option_Manager::get_manager( WP_FS__ACCOUNTS_OPTION_NAME, true );
809
 
810
+ self::$_global_admin_notices = FS_Admin_Notice_Manager::instance( 'global' );
811
+
812
  // Configure which Freemius powered plugins should be auto updated.
813
  // add_filter( 'auto_update_plugin', '_include_plugins_in_auto_update', 10, 2 );
814
 
824
  * @since 1.0.8
825
  */
826
  static function add_debug_page() {
827
+ if ( ! current_user_can( 'activate_plugins' ) ) {
828
+ return;
829
+ }
830
+
831
  self::$_static_logger->entrance();
832
 
833
  $title = sprintf( '%s [v.%s]', __fs( 'freemius-debug' ), WP_FS__SDK_VERSION );
921
  // If already installed or pending then sure it's on :)
922
  if ( $this->is_registered() || $this->is_pending_activation() ) {
923
  $this->_is_on = true;
924
+
925
  return true;
926
  }
927
 
953
  }
954
 
955
  if ( isset( $this->_storage->connectivity_test ) ) {
956
+ if ( ! WP_FS__IS_HTTP_REQUEST ||
957
+ ( $_SERVER['HTTP_HOST'] == $this->_storage->connectivity_test['host'] &&
958
+ WP_FS__REMOTE_ADDR == $this->_storage->connectivity_test['server_ip'] )
959
  ) {
960
  if ( ( $this->_storage->connectivity_test['is_connected'] &&
961
  $this->_storage->connectivity_test['is_active'] ) ||
963
  $version == $this->_storage->connectivity_test['version'] )
964
  ) {
965
  $this->_has_api_connection = $this->_storage->connectivity_test['is_connected'];
966
+ $this->_is_on = $this->_storage->connectivity_test['is_active'] || ( WP_FS__DEV_MODE && $this->_has_api_connection );
967
 
968
  return $this->_has_api_connection;
969
  }
998
  $this->_storage->connectivity_test = array(
999
  'is_connected' => $is_connected,
1000
  'host' => $_SERVER['HTTP_HOST'],
1001
+ 'server_ip' => WP_FS__REMOTE_ADDR,
1002
  'is_active' => $is_active,
1003
  'timestamp' => WP_FS__SCRIPT_START_TIME,
1004
  // Last version with connectivity attempt.
1006
  );
1007
 
1008
  $this->_has_api_connection = $is_connected;
1009
+ $this->_is_on = $is_active || ( WP_FS__DEV_MODE && $is_connected );
1010
 
1011
  return $this->_has_api_connection;
1012
  }
1403
  );
1404
  }
1405
 
1406
+ $server_ip = WP_FS__REMOTE_ADDR;
1407
 
1408
  // Generate the default email sections.
1409
  $sections = array(
1578
  $this->_permissions = $this->_get_option( $plugin_info, 'permissions', array() );
1579
 
1580
  if ( ! $this->is_registered() ) {
1581
+ if ( ! WP_FS__IS_HTTP_REQUEST ) {
1582
+ /**
1583
+ * If not registered and executed without HTTP context (e.g. CLI, Cronjob),
1584
+ * then don't start Freemius.
1585
+ *
1586
+ * @author Vova Feldman (@svovaf)
1587
+ * @since 1.1.6.3
1588
+ *
1589
+ * @link https://wordpress.org/support/topic/errors-in-the-freemius-class-when-running-in-wordpress-in-cli
1590
+ */
1591
+ return;
1592
+ }
1593
+
1594
  if ( ! $this->has_api_connectivity() ) {
1595
  if ( is_admin() && $this->_admin_notices->has_sticky( 'failed_connect_api' ) ) {
1596
  if ( ! $this->_enable_anonymous ) {
1686
  &$this,
1687
  '_get_addon_info_filter'
1688
  ), WP_FS__DEFAULT_PRIORITY, 3 );
 
 
 
 
1689
  }
1690
  }
1691
 
1692
+ if ( $this->is_premium() ) {
1693
+ new FS_Plugin_Updater( $this );
1694
+ }
1695
+
1696
  // if ( $this->is_registered() ||
1697
  // $this->is_anonymous() ||
1698
  // $this->is_pending_activation()
2162
  return false;
2163
  }
2164
 
2165
+ // Check if API is not down.
2166
+ if ( FS_Api::is_temporary_down() ) {
2167
+ return false;
2168
+ }
2169
+
2170
  $sync_timestamp = $this->_storage->get( 'sync_timestamp' );
2171
 
2172
  if ( ! is_numeric( $sync_timestamp ) || $sync_timestamp >= time() ) {
2183
  // Initiate background plan sync.
2184
  $this->_sync_license( true );
2185
 
2186
+ if ( $this->is_paying() ) {
2187
+ // Check for plugin updates.
2188
+ $this->_check_updates( true );
2189
+ }
2190
  }
2191
 
2192
  if ( ! $this->is_addon() ) {
2251
  * @since 1.0.7
2252
  */
2253
  function _admin_init_action() {
2254
+ /**
2255
+ * Automatically redirect to connect/activation page after plugin activation.
2256
+ *
2257
+ * @since 1.1.7 Do NOT redirect to opt-in when running in network admin mode.
2258
+ */
2259
  if ( $this->is_plugin_activation() ) {
2260
  delete_option( "fs_{$this->_slug}_activated" );
 
2261
 
2262
+ if ( ! function_exists( 'is_network_admin' ) || ! is_network_admin() ) {
2263
+ $this->_redirect_on_activation_hook();
2264
+
2265
+ return;
2266
+ }
2267
  }
2268
 
2269
  if ( fs_request_is_action( $this->_slug . '_skip_activation' ) ) {
2647
  unset( $this->_storage->is_anonymous );
2648
  }
2649
 
2650
+ /**
2651
+ * Clears the anonymous mode and redirects to the opt-in screen.
2652
+ *
2653
+ * @author Vova Feldman (@svovaf)
2654
+ * @since 1.1.7
2655
+ */
2656
+ function connect_again() {
2657
+ if ( ! $this->is_anonymous() ) {
2658
+ return;
2659
+ }
2660
+
2661
+ $this->reset_anonymous_mode();
2662
+
2663
+ if ( fs_redirect( $this->get_activation_url() ) ) {
2664
+ exit();
2665
+ }
2666
+ }
2667
+
2668
  /**
2669
  * Skip account connect, and set anonymous mode.
2670
  *
2694
  private function update_plugin_version_event() {
2695
  $this->_logger->entrance( 'slug = ' . $this->_slug );
2696
 
 
 
2697
  // Send update event.
2698
  $site = $this->send_install_update( array(), true );
2699
 
2700
  if ( false !== $site && ! $this->is_api_error( $site ) ) {
2701
  $this->_site = new FS_Site( $site );
2702
  $this->_site->plan = $this->_get_plan_by_id( $site->plan_id );
 
2703
  }
2704
+
2705
+ $this->_site->version = $this->get_plugin_version();
2706
+ $this->_store_site( true );
2707
  }
2708
 
2709
  /**
3308
  return $addons[ $this->_plugin->id ];
3309
  }
3310
 
3311
+ /**
3312
+ * Check if user has any
3313
+ *
3314
+ * @author Vova Feldman (@svovaf)
3315
+ * @since 1.1.6
3316
+ *
3317
+ * @return bool
3318
+ */
3319
+ function has_account_addons() {
3320
+ $addons = $this->get_account_addons();
3321
+
3322
+ return is_array( $addons ) && ( 0 < count( $addons ) );
3323
+ }
3324
+
3325
+
3326
  /**
3327
  * Get add-on by ID (from local data).
3328
  *
4412
  function setup_account( FS_User $user, FS_Site $site, $redirect = true ) {
4413
  $this->_user = $user;
4414
  $this->_site = $site;
4415
+
4416
+ $this->_sync_plans();
4417
+
4418
  $this->_enrich_site_plan( false );
4419
 
4420
  $this->_set_account( $user, $site );
 
4421
 
4422
  if ( $this->is_trial() ) {
4423
  // Store trial plan information.
4995
  $this->embed_submenu_items();
4996
 
4997
  // Start with specially high number to make sure it's appended.
4998
+ $i = max( 10000, max( array_keys( $top_level_menu ) ) + 1 );
4999
  foreach ( $all_submenu_items_after as $meta ) {
5000
  $top_level_menu[ $i ] = $meta;
5001
  $i ++;
5005
  ksort( $top_level_menu );
5006
  }
5007
 
5008
+ /**
5009
+ * Displays the Support Forum link when enabled.
5010
+ *
5011
+ * Can be filtered like so:
5012
+ *
5013
+ * function _fs_show_support_menu( $is_visible, $menu_id ) {
5014
+ * if ( 'support' === $menu_id ) {
5015
+ * return _fs->is_registered();
5016
+ * }
5017
+ * return $is_visible;
5018
+ * }
5019
+ * _fs()->add_filter('is_submenu_visible', '_fs_show_support_menu', 10, 2);
5020
+ *
5021
+ */
5022
  function _add_default_submenu_items() {
5023
  if ( ! $this->is_on() ) {
5024
  return;
5025
  }
5026
 
5027
+ if ( $this->is_registered() || $this->is_anonymous() ) {
5028
  if ( $this->_menu->is_submenu_item_visible( 'support' ) ) {
5029
  $this->add_submenu_link_item(
5030
  $this->apply_filters( 'support_forum_submenu', __fs( 'support-forum', $this->_slug ) ),
5210
  $this->_logger->entrance( $tag );
5211
 
5212
  $args = func_get_args();
5213
+ array_unshift($args, $this->_slug);
5214
 
5215
+ return call_user_func_array( 'fs_apply_filter', $args);
 
 
 
5216
  }
5217
 
5218
  /**
5932
  $plan_change = 'none';
5933
 
5934
  if ( $this->is_api_error( $site ) ) {
5935
+ // Show API messages only if not background sync or if paying customer.
5936
+ if ( ! $background || $this->is_paying() ) {
5937
+ // Try to ping API to see if not blocked.
5938
+ if ( ! FS_Api::test() ) {
5939
+ /**
5940
+ * Failed to ping API - blocked!
5941
+ *
5942
+ * @author Vova Feldman (@svovaf)
5943
+ * @since 1.1.6 Only show message related to one of the Freemius powered plugins. Once it will be resolved it will fix the issue for all plugins anyways. There's no point to scare users with multiple error messages.
5944
+ */
5945
+ $api = $this->get_api_site_scope();
5946
+
5947
+ if ( ! self::$_global_admin_notices->has_sticky( 'api_blocked' ) ) {
5948
+ self::$_global_admin_notices->add(
5949
+ sprintf(
5950
+ __fs( 'server-blocking-access', $this->_slug ),
5951
+ $this->get_plugin_name(),
5952
+ '<a href="' . $api->get_url() . '" target="_blank">' . $api->get_url() . '</a>'
5953
+ ) . '<br> ' . __fs( 'server-error-message', $this->_slug ) . var_export( $site->error, true ),
5954
+ __fs( 'oops', $this->_slug ) . '...',
5955
+ 'error',
5956
+ $background,
5957
+ false,
5958
+ 'api_blocked'
5959
+ );
5960
+ }
5961
+ } else {
5962
+ // Authentication params are broken.
5963
+ $this->_admin_notices->add(
5964
+ __fs( 'wrong-authentication-param-message', $this->_slug ),
5965
+ __fs( 'oops', $this->_slug ) . '...',
5966
+ 'error'
5967
+ );
5968
+ }
5969
  }
5970
  } else {
5971
+ // Remove sticky API connectivity message.
5972
+ self::$_global_admin_notices->remove_sticky('api_blocked');
5973
+
5974
  $site = new FS_Site( $site );
5975
 
5976
  // Sync licenses.
7135
  $this->_logger->entrance();
7136
 
7137
  $vars = array( 'slug' => $this->_slug );
7138
+ fs_require_once_template( 'connect.php', $vars );
 
 
 
 
7139
  }
7140
 
7141
  /**
7441
 
7442
  // Add start trial button.
7443
  $message .= ' ' . sprintf(
7444
+ '<a style="margin-left: 10px; vertical-align: super;" href="%s"><button class="button button-primary">%s &nbsp;&#10140;</button></a>',
7445
  $upgrade_url,
7446
  __fs( 'start-free-trial', $this->_slug )
7447
  );
classes/freemius/includes/class-fs-api.php CHANGED
@@ -31,7 +31,7 @@
31
  private static $_options;
32
 
33
  /**
34
- * @var FS_Option_Manager API Caching layer
35
  */
36
  private static $_cache;
37
 
@@ -70,9 +70,7 @@
70
  $identifier = md5( $slug . $scope . $id . $public_key . ( is_string( $secret_key ) ? $secret_key : '' ) . json_encode( $is_sandbox ) );
71
 
72
  if ( ! isset( self::$_instances[ $identifier ] ) ) {
73
- if ( 0 === count( self::$_instances ) ) {
74
- self::_init();
75
- }
76
 
77
  self::$_instances[ $identifier ] = new FS_Api( $slug, $scope, $id, $public_key, $secret_key, $is_sandbox );
78
  }
@@ -81,12 +79,16 @@
81
  }
82
 
83
  private static function _init() {
 
 
 
 
84
  if ( ! class_exists( 'Freemius_Api' ) ) {
85
  require_once( WP_FS__DIR_SDK . '/Freemius.php' );
86
  }
87
 
88
  self::$_options = FS_Option_Manager::get_manager( WP_FS__OPTIONS_OPTION_NAME, true );
89
- self::$_cache = FS_Option_Manager::get_manager( WP_FS__API_CACHE_OPTION_NAME, true );
90
 
91
  self::$_clock_diff = self::$_options->get_option( 'api_clock_diff', 0 );
92
  Freemius_Api::SetClockDiff( self::$_clock_diff );
@@ -123,7 +125,7 @@
123
 
124
  // Sync clock and store.
125
  $new_clock_diff = ( false === $diff ) ?
126
- $this->_api->FindClockDiff() :
127
  $diff;
128
 
129
  if ( $new_clock_diff === self::$_clock_diff ) {
@@ -133,7 +135,7 @@
133
  self::$_clock_diff = $new_clock_diff;
134
 
135
  // Update API clock's diff.
136
- $this->_api->SetClockDiff( self::$_clock_diff );
137
 
138
  // Store new clock diff in storage.
139
  self::$_options->set_option( 'api_clock_diff', self::$_clock_diff, true );
@@ -154,26 +156,31 @@
154
  private function _call( $path, $method = 'GET', $params = array(), $retry = false ) {
155
  $this->_logger->entrance();
156
 
157
- $result = $this->_api->Api( $path, $method, $params );
158
-
159
- if ( null !== $result &&
160
- isset( $result->error ) &&
161
- 'request_expired' === $result->error->code
162
- ) {
163
- if ( ! $retry ) {
164
- $diff = isset( $result->error->timestamp ) ?
165
- ( time() - strtotime( $result->error->timestamp ) ) :
166
- false;
167
-
168
- // Try to sync clock diff.
169
- if ( false !== $this->_sync_clock_diff( $diff ) ) {
170
- // Retry call with new synced clock.
171
- return $this->_call( $path, $method, $params, true );
 
 
 
 
 
172
  }
173
  }
174
  }
175
 
176
- if ( null !== $result && isset( $result->error ) ) {
177
  // Log API errors.
178
  $this->_logger->error( $result->error->message );
179
  }
@@ -214,6 +221,8 @@
214
  * @return stdClass|mixed
215
  */
216
  function get( $path = '/', $flush = false, $expiration = WP_FS__TIME_24_HOURS_IN_SEC ) {
 
 
217
  $cache_key = $this->get_cache_key( $path );
218
 
219
  // Always flush during development.
@@ -221,30 +230,19 @@
221
  $flush = true;
222
  }
223
 
224
- // Get result from cache.
225
- $cache_entry = self::$_cache->get_option( $cache_key, false );
226
-
227
- $fetch = false;
228
- if ( $flush ||
229
- false === $cache_entry ||
230
- ! isset( $cache_entry->timestamp ) ||
231
- ! is_numeric( $cache_entry->timestamp ) ||
232
- $cache_entry->timestamp < WP_FS__SCRIPT_START_TIME
233
- ) {
234
- $fetch = true;
235
- }
236
 
237
- if ( $fetch ) {
238
  $result = $this->call( $path );
239
 
240
  if ( ! is_object( $result ) || isset( $result->error ) ) {
241
- if ( is_object( $cache_entry ) &&
242
- isset( $cache_entry->result ) &&
243
- ! isset( $cache_entry->result->error )
244
  ) {
245
  // If there was an error during a newer data fetch,
246
  // fallback to older data version.
247
- $result = $cache_entry->result;
248
  } else {
249
  // If no older data version, return result without
250
  // caching the error.
@@ -252,13 +250,12 @@
252
  }
253
  }
254
 
255
- $cache_entry = new stdClass();
256
- $cache_entry->result = $result;
257
- $cache_entry->timestamp = WP_FS__SCRIPT_START_TIME + $expiration;
258
- self::$_cache->set_option( $cache_key, $cache_entry, true );
259
  }
260
 
261
- return $cache_entry->result;
262
  }
263
 
264
  private function get_cache_key( $path, $method = 'GET', $params = array() ) {
@@ -271,38 +268,81 @@
271
  /**
272
  * Test API connectivity.
273
  *
 
274
  * @since 1.0.9 If fails, try to fallback to HTTP.
275
- *
276
- * @param null|string $unique_anonymous_id
277
  *
278
  * @return bool True if successful connectivity to the API.
279
  */
280
- function test( $unique_anonymous_id = null ) {
281
- $this->_logger->entrance();
282
 
283
- if ( ! function_exists( 'curl_version' ) ) {
284
- // cUrl extension is not active.
285
- return false;
286
- }
287
 
288
- $test = is_null( $unique_anonymous_id ) ?
289
- $this->_api->Test() :
290
- $this->_api->Test( $this->_call( 'ping.json?uid=' . $unique_anonymous_id ) );
291
 
292
- if ( false === $test && $this->_api->IsHttps() ) {
293
- // Fallback to HTTP, since HTTPS fails.
294
- $this->_api->SetHttp();
295
 
296
- self::$_options->set_option( 'api_force_http', true, true );
 
 
 
 
297
 
298
- $test = is_null( $unique_anonymous_id ) ?
299
- $this->_api->Test() :
300
- $this->_api->Test( $this->_call( 'ping.json?uid=' . $unique_anonymous_id ) );
 
 
 
 
 
 
 
 
 
 
 
301
  }
302
 
303
  return $test;
304
  }
305
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
306
  /**
307
  * Ping API for connectivity test, and return result object.
308
  *
@@ -315,12 +355,70 @@
315
  * @return object
316
  */
317
  function ping( $unique_anonymous_id = null, $is_update = false ) {
318
- return is_null( $unique_anonymous_id ) ?
319
- $this->_api->Ping() :
 
 
 
 
 
 
320
  $this->_call( 'ping.json?' . http_build_query( array(
321
  'uid' => $unique_anonymous_id,
322
  'is_update' => $is_update,
323
  ) ) );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
324
  }
325
 
326
  /**
@@ -334,11 +432,11 @@
334
  * @return bool
335
  */
336
  function is_valid_ping( $pong ) {
337
- return $this->_api->Test( $pong );
338
  }
339
 
340
  function get_url( $path = '' ) {
341
- return $this->_api->GetUrl( $path );
342
  }
343
 
344
  /**
@@ -348,7 +446,9 @@
348
  * @since 1.0.9
349
  */
350
  static function clear_cache() {
351
- self::$_cache = FS_Option_Manager::get_manager( WP_FS__API_CACHE_OPTION_NAME, true );
352
- self::$_cache->clear( true );
 
 
353
  }
354
  }
31
  private static $_options;
32
 
33
  /**
34
+ * @var FS_Cache_Manager API Caching layer
35
  */
36
  private static $_cache;
37
 
70
  $identifier = md5( $slug . $scope . $id . $public_key . ( is_string( $secret_key ) ? $secret_key : '' ) . json_encode( $is_sandbox ) );
71
 
72
  if ( ! isset( self::$_instances[ $identifier ] ) ) {
73
+ self::_init();
 
 
74
 
75
  self::$_instances[ $identifier ] = new FS_Api( $slug, $scope, $id, $public_key, $secret_key, $is_sandbox );
76
  }
79
  }
80
 
81
  private static function _init() {
82
+ if ( isset( self::$_options ) ) {
83
+ return;
84
+ }
85
+
86
  if ( ! class_exists( 'Freemius_Api' ) ) {
87
  require_once( WP_FS__DIR_SDK . '/Freemius.php' );
88
  }
89
 
90
  self::$_options = FS_Option_Manager::get_manager( WP_FS__OPTIONS_OPTION_NAME, true );
91
+ self::$_cache = FS_Cache_Manager::get_manager( WP_FS__API_CACHE_OPTION_NAME );
92
 
93
  self::$_clock_diff = self::$_options->get_option( 'api_clock_diff', 0 );
94
  Freemius_Api::SetClockDiff( self::$_clock_diff );
125
 
126
  // Sync clock and store.
127
  $new_clock_diff = ( false === $diff ) ?
128
+ Freemius_Api::FindClockDiff() :
129
  $diff;
130
 
131
  if ( $new_clock_diff === self::$_clock_diff ) {
135
  self::$_clock_diff = $new_clock_diff;
136
 
137
  // Update API clock's diff.
138
+ Freemius_Api::SetClockDiff( self::$_clock_diff );
139
 
140
  // Store new clock diff in storage.
141
  self::$_options->set_option( 'api_clock_diff', self::$_clock_diff, true );
156
  private function _call( $path, $method = 'GET', $params = array(), $retry = false ) {
157
  $this->_logger->entrance();
158
 
159
+ if ( self::is_temporary_down() ) {
160
+ $result = $this->get_temporary_unavailable_error();
161
+ } else {
162
+ $result = $this->_api->Api( $path, $method, $params );
163
+
164
+ if ( null !== $result &&
165
+ isset( $result->error ) &&
166
+ isset( $result->error->code ) &&
167
+ 'request_expired' === $result->error->code
168
+ ) {
169
+ if ( ! $retry ) {
170
+ $diff = isset( $result->error->timestamp ) ?
171
+ ( time() - strtotime( $result->error->timestamp ) ) :
172
+ false;
173
+
174
+ // Try to sync clock diff.
175
+ if ( false !== $this->_sync_clock_diff( $diff ) ) {
176
+ // Retry call with new synced clock.
177
+ return $this->_call( $path, $method, $params, true );
178
+ }
179
  }
180
  }
181
  }
182
 
183
+ if ( null !== $result && isset( $result->error ) && isset( $result->error->message ) ) {
184
  // Log API errors.
185
  $this->_logger->error( $result->error->message );
186
  }
221
  * @return stdClass|mixed
222
  */
223
  function get( $path = '/', $flush = false, $expiration = WP_FS__TIME_24_HOURS_IN_SEC ) {
224
+ $this->_logger->entrance();
225
+
226
  $cache_key = $this->get_cache_key( $path );
227
 
228
  // Always flush during development.
230
  $flush = true;
231
  }
232
 
233
+ $cached_result = self::$_cache->get( $cache_key );
 
 
 
 
 
 
 
 
 
 
 
234
 
235
+ if ( $flush || ! self::$_cache->has_valid( $cache_key ) ) {
236
  $result = $this->call( $path );
237
 
238
  if ( ! is_object( $result ) || isset( $result->error ) ) {
239
+ // Api returned an error.
240
+ if ( is_object( $cached_result ) &&
241
+ ! isset( $cached_result )
242
  ) {
243
  // If there was an error during a newer data fetch,
244
  // fallback to older data version.
245
+ $result = $cached_result;
246
  } else {
247
  // If no older data version, return result without
248
  // caching the error.
250
  }
251
  }
252
 
253
+ self::$_cache->set( $cache_key, $result, $expiration );
254
+
255
+ $cached_result = $result;
 
256
  }
257
 
258
+ return $cached_result;
259
  }
260
 
261
  private function get_cache_key( $path, $method = 'GET', $params = array() ) {
268
  /**
269
  * Test API connectivity.
270
  *
271
+ * @author Vova Feldman (@svovaf)
272
  * @since 1.0.9 If fails, try to fallback to HTTP.
273
+ * @since 1.1.6 Added a 5-min caching mechanism, to prevent from overloading the server if the API if
274
+ * temporary down.
275
  *
276
  * @return bool True if successful connectivity to the API.
277
  */
278
+ static function test() {
279
+ self::_init();
280
 
281
+ $cache_key = 'ping_test';
 
 
 
282
 
283
+ $test = self::$_cache->get_valid( $cache_key, null );
 
 
284
 
285
+ if ( is_null( $test ) ) {
286
+ $test = Freemius_Api::Test();
 
287
 
288
+ if ( false === $test && Freemius_Api::IsHttps() ) {
289
+ // Fallback to HTTP, since HTTPS fails.
290
+ Freemius_Api::SetHttp();
291
+
292
+ self::$_options->set_option( 'api_force_http', true, true );
293
 
294
+ $test = Freemius_Api::Test();
295
+
296
+ if ( false === $test ) {
297
+ /**
298
+ * API connectivity test fail also in HTTP request, therefore,
299
+ * fallback to HTTPS to keep connection secure.
300
+ *
301
+ * @since 1.1.6
302
+ */
303
+ self::$_options->set_option( 'api_force_http', false, true );
304
+ }
305
+ }
306
+
307
+ self::$_cache->set( $cache_key, $test, WP_FS__TIME_5_MIN_IN_SEC );
308
  }
309
 
310
  return $test;
311
  }
312
 
313
+ /**
314
+ * Check if API is temporary down.
315
+ *
316
+ * @author Vova Feldman (@svovaf)
317
+ * @since 1.1.6
318
+ *
319
+ * @return bool
320
+ */
321
+ static function is_temporary_down() {
322
+ self::_init();
323
+
324
+ $test = self::$_cache->get_valid( 'ping_test', null );
325
+
326
+ return ( false === $test );
327
+ }
328
+
329
+ /**
330
+ * @author Vova Feldman (@svovaf)
331
+ * @since 1.1.6
332
+ *
333
+ * @return object
334
+ */
335
+ private function get_temporary_unavailable_error() {
336
+ return (object) array(
337
+ 'error' => array(
338
+ 'type' => 'TemporaryUnavailable',
339
+ 'message' => 'API is temporary unavailable.',
340
+ 'code' => 'temporary_unavailable',
341
+ 'http' => 503
342
+ )
343
+ );
344
+ }
345
+
346
  /**
347
  * Ping API for connectivity test, and return result object.
348
  *
355
  * @return object
356
  */
357
  function ping( $unique_anonymous_id = null, $is_update = false ) {
358
+ $this->_logger->entrance();
359
+
360
+ if ( self::is_temporary_down() ) {
361
+ return $this->get_temporary_unavailable_error();
362
+ }
363
+
364
+ $pong = is_null( $unique_anonymous_id ) ?
365
+ Freemius_Api::Ping() :
366
  $this->_call( 'ping.json?' . http_build_query( array(
367
  'uid' => $unique_anonymous_id,
368
  'is_update' => $is_update,
369
  ) ) );
370
+
371
+ if ( $this->is_valid_ping( $pong ) ) {
372
+ return $pong;
373
+ }
374
+
375
+ if ( self::should_try_with_http( $pong ) ) {
376
+ // Fallback to HTTP, since HTTPS fails.
377
+ Freemius_Api::SetHttp();
378
+
379
+ self::$_options->set_option( 'api_force_http', true, true );
380
+
381
+ $pong = is_null( $unique_anonymous_id ) ?
382
+ Freemius_Api::Ping() :
383
+ $this->_call( 'ping.json?' . http_build_query( array(
384
+ 'uid' => $unique_anonymous_id,
385
+ 'is_update' => $is_update,
386
+ ) ) );
387
+
388
+ if ( ! $this->is_valid_ping( $pong ) ) {
389
+ self::$_options->set_option( 'api_force_http', false, true );
390
+ }
391
+ }
392
+
393
+ return $pong;
394
+ }
395
+
396
+ /**
397
+ * Check if based on the API result we should try
398
+ * to re-run the same request with HTTP instead of HTTPS.
399
+ *
400
+ * @author Vova Feldman (@svovaf)
401
+ * @since 1.1.6
402
+ *
403
+ * @param $result
404
+ *
405
+ * @return bool
406
+ */
407
+ private static function should_try_with_http($result) {
408
+ if ( ! Freemius_Api::IsHttps() ) {
409
+ return false;
410
+ }
411
+
412
+ return ( ! is_object( $result ) ||
413
+ ! isset( $result->error ) ||
414
+ ! isset( $result->error->code ) ||
415
+ ! in_array( $result->error->code, array(
416
+ 'curl_missing',
417
+ 'cloudflare_ddos_protection',
418
+ 'squid_cache_block',
419
+ 'too_many_requests',
420
+ ) ) );
421
+
422
  }
423
 
424
  /**
432
  * @return bool
433
  */
434
  function is_valid_ping( $pong ) {
435
+ return Freemius_Api::Test( $pong );
436
  }
437
 
438
  function get_url( $path = '' ) {
439
+ return Freemius_Api::GetUrl( $path, $this->_api->IsSandbox() );
440
  }
441
 
442
  /**
446
  * @since 1.0.9
447
  */
448
  static function clear_cache() {
449
+ self::_init();
450
+
451
+ self::$_cache = FS_Cache_Manager::get_manager( WP_FS__API_CACHE_OPTION_NAME );
452
+ self::$_cache->clear();
453
  }
454
  }
classes/freemius/includes/class-fs-plugin-updater.php CHANGED
@@ -52,6 +52,26 @@
52
  'pre_set_site_transient_update_plugins_filter'
53
  ) );
54
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
55
  if ( ! WP_FS__IS_PRODUCTION_MODE ) {
56
  add_filter( 'http_request_host_is_external', array(
57
  $this,
@@ -60,6 +80,47 @@
60
  }
61
  }
62
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
63
  /**
64
  * Since WP version 3.6, a new security feature was added that denies access to repository with a local ip.
65
  * During development mode we want to be able updating plugin versions via our localhost repository. This
52
  'pre_set_site_transient_update_plugins_filter'
53
  ) );
54
 
55
+ if ( ! $this->_fs->has_active_license() ) {
56
+ /**
57
+ * If user has the premium plugin's code but do NOT have an active license,
58
+ * encourage him to upgrade by showing that there's a new release, but instead
59
+ * of showing an update link, show upgrade link to the pricing page.
60
+ *
61
+ * @since 1.1.6
62
+ *
63
+ */
64
+ // WP 2.9+
65
+ add_action( "after_plugin_row_{$this->_fs->get_plugin_basename()}", array(
66
+ &$this,
67
+ 'catch_plugin_update_row'
68
+ ), 9 );
69
+ add_action( "after_plugin_row_{$this->_fs->get_plugin_basename()}", array(
70
+ &$this,
71
+ 'edit_and_echo_plugin_update_row'
72
+ ), 11, 2 );
73
+ }
74
+
75
  if ( ! WP_FS__IS_PRODUCTION_MODE ) {
76
  add_filter( 'http_request_host_is_external', array(
77
  $this,
80
  }
81
  }
82
 
83
+ /**
84
+ * Capture plugin update row by turning output buffering.
85
+ *
86
+ * @author Vova Feldman (@svovaf)
87
+ * @since 1.1.6
88
+ */
89
+ function catch_plugin_update_row() {
90
+ ob_start();
91
+ }
92
+
93
+ /**
94
+ * Overrides default update message format with "renew your license" message.
95
+ *
96
+ * @author Vova Feldman (@svovaf)
97
+ * @since 1.1.6
98
+ */
99
+ function edit_and_echo_plugin_update_row( $file, $plugin_data ) {
100
+ $plugin_update_row = ob_get_clean();
101
+
102
+ $current = get_site_transient( 'update_plugins' );
103
+ if ( ! isset( $current->response[ $file ] ) ) {
104
+ echo $plugin_update_row;
105
+
106
+ return false;
107
+ }
108
+
109
+ $r = $current->response[ $file ];
110
+
111
+ $plugin_update_row = preg_replace(
112
+ '/(\<div.+>)(.+)(\<a.+\<a.+)\<\/div\>/is',
113
+ '$1 $2 ' . sprintf(
114
+ __fs( 'renew-license-now' ),
115
+ '<a href="' . $this->_fs->pricing_url() . '">', '</a>',
116
+ $r->new_version ) .
117
+ '$4',
118
+ $plugin_update_row
119
+ );
120
+
121
+ echo $plugin_update_row;
122
+ }
123
+
124
  /**
125
  * Since WP version 3.6, a new security feature was added that denies access to repository with a local ip.
126
  * During development mode we want to be able updating plugin versions via our localhost repository. This
classes/freemius/includes/fs-core-functions.php CHANGED
@@ -138,34 +138,6 @@
138
  return ( is_admin() && $_REQUEST['page'] === $menu_slug );
139
  }
140
 
141
- /**
142
- * Get client IP.
143
- *
144
- * @author Vova Feldman (@svovaf)
145
- * @since 1.1.2
146
- *
147
- * @return string|null
148
- */
149
- function fs_get_ip() {
150
- $fields = array(
151
- 'HTTP_CF_CONNECTING_IP',
152
- 'HTTP_CLIENT_IP',
153
- 'HTTP_X_FORWARDED_FOR',
154
- 'HTTP_X_FORWARDED',
155
- 'HTTP_FORWARDED_FOR',
156
- 'HTTP_FORWARDED',
157
- 'REMOTE_ADDR',
158
- );
159
-
160
- foreach ( $fields as $ip_field ) {
161
- if ( ! empty( $_SERVER[ $ip_field ] ) ) {
162
- return $_SERVER[ $ip_field ];
163
- }
164
- }
165
-
166
- return null;
167
- }
168
-
169
  /* Core UI.
170
  --------------------------------------------------------------------------------------------*/
171
  function fs_ui_action_button( $slug, $page, $action, $title, $params = array(), $is_primary = true ) {
@@ -336,4 +308,36 @@
336
  fclose( $fp );
337
  }
338
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
339
 
138
  return ( is_admin() && $_REQUEST['page'] === $menu_slug );
139
  }
140
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
141
  /* Core UI.
142
  --------------------------------------------------------------------------------------------*/
143
  function fs_ui_action_button( $slug, $page, $action, $title, $params = array(), $is_primary = true ) {
308
  fclose( $fp );
309
  }
310
 
311
+ /* General Utilities
312
+ --------------------------------------------------------------------------------------------*/
313
+
314
+ /**
315
+ * Sorts an array by the value of the priority key.
316
+ *
317
+ * @author Daniel Iser (@danieliser)
318
+ * @since 1.1.7
319
+ *
320
+ * @param $a
321
+ * @param $b
322
+ *
323
+ * @return int
324
+ */
325
+ function fs_sort_by_priority( $a, $b ) {
326
+
327
+ // If b has a priority and a does not, b wins.
328
+ if ( ! isset( $a['priority'] ) && isset( $b['priority'] ) ) {
329
+ return 1;
330
+ }
331
+ // If b has a priority and a does not, b wins.
332
+ elseif ( isset( $a['priority'] ) && ! isset( $b['priority'] ) ) {
333
+ return -1;
334
+ }
335
+ // If neither has a priority or both priorities are equal its a tie.
336
+ elseif ( ( ! isset( $a['priority'] ) && ! isset( $b['priority'] ) ) || $a['priority'] === $b['priority'] ) {
337
+ return 0;
338
+ }
339
+
340
+ // If both have priority return the winner.
341
+ return ( $a['priority'] < $b['priority'] ) ? - 1 : 1;
342
+ }
343
 
classes/freemius/includes/fs-essential-functions.php CHANGED
@@ -120,8 +120,6 @@
120
 
121
  #endregion Core Redirect (copied from BuddyPress) -----------------------------------------
122
 
123
- #region
124
-
125
  if ( ! function_exists( '__fs' ) ) {
126
  global $fs_text_overrides;
127
 
@@ -146,7 +144,7 @@
146
  global $fs_text, $fs_text_overrides;
147
 
148
  if ( ! isset( $fs_text ) ) {
149
- require_once( dirname( __FILE__ ) . '/i18n.php' );
150
  }
151
 
152
  if ( isset( $fs_text_overrides[ $slug ] ) &&
@@ -197,8 +195,38 @@
197
  }
198
  }
199
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
200
  /**
201
- * Leverage backtrace to find caller plugin file path.
202
  *
203
  * @author Vova Feldman (@svovaf)
204
  * @since 1.0.6
@@ -239,6 +267,8 @@
239
  return $plugin_file;
240
  }
241
 
 
 
242
  /**
243
  * Update SDK newest version reference.
244
  *
@@ -282,6 +312,13 @@
282
  function fs_newest_sdk_plugin_first() {
283
  global $fs_active_plugins;
284
 
 
 
 
 
 
 
 
285
  $active_plugins = get_option( 'active_plugins' );
286
  $newest_sdk_plugin_key = array_search( $fs_active_plugins->newest->plugin_path, $active_plugins );
287
  if ( 0 == $newest_sdk_plugin_key ) {
@@ -336,4 +373,31 @@
336
  } else {
337
  fs_update_sdk_newest_version( $newest_sdk_path, $newest_sdk_data->plugin_path );
338
  }
339
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
120
 
121
  #endregion Core Redirect (copied from BuddyPress) -----------------------------------------
122
 
 
 
123
  if ( ! function_exists( '__fs' ) ) {
124
  global $fs_text_overrides;
125
 
144
  global $fs_text, $fs_text_overrides;
145
 
146
  if ( ! isset( $fs_text ) ) {
147
+ require_once( ( defined( 'WP_FS__DIR_INCLUDES' ) ? WP_FS__DIR_INCLUDES : dirname( __FILE__ ) ) . '/i18n.php' );
148
  }
149
 
150
  if ( isset( $fs_text_overrides[ $slug ] ) &&
195
  }
196
  }
197
 
198
+ if ( ! function_exists( 'fs_get_ip' ) ) {
199
+ /**
200
+ * Get client IP.
201
+ *
202
+ * @author Vova Feldman (@svovaf)
203
+ * @since 1.1.2
204
+ *
205
+ * @return string|null
206
+ */
207
+ function fs_get_ip() {
208
+ $fields = array(
209
+ 'HTTP_CF_CONNECTING_IP',
210
+ 'HTTP_CLIENT_IP',
211
+ 'HTTP_X_FORWARDED_FOR',
212
+ 'HTTP_X_FORWARDED',
213
+ 'HTTP_FORWARDED_FOR',
214
+ 'HTTP_FORWARDED',
215
+ 'REMOTE_ADDR',
216
+ );
217
+
218
+ foreach ( $fields as $ip_field ) {
219
+ if ( ! empty( $_SERVER[ $ip_field ] ) ) {
220
+ return $_SERVER[ $ip_field ];
221
+ }
222
+ }
223
+
224
+ return null;
225
+ }
226
+ }
227
+
228
  /**
229
+ * Leverage backtrace to find caller plugin main file path.
230
  *
231
  * @author Vova Feldman (@svovaf)
232
  * @since 1.0.6
267
  return $plugin_file;
268
  }
269
 
270
+ require_once dirname( __FILE__ ) . '/supplements/fs-essential-functions-1.1.7.1.php';
271
+
272
  /**
273
  * Update SDK newest version reference.
274
  *
312
  function fs_newest_sdk_plugin_first() {
313
  global $fs_active_plugins;
314
 
315
+ /**
316
+ * @todo Multi-site network activated plugin are always loaded prior to site plugins so if there's a a plugin activated in the network mode that has an older version of the SDK of another plugin which is site activated that has new SDK version, the fs-essential-functions.php will be loaded from the older SDK. Same thing about MU plugins (loaded even before network activated plugins).
317
+ *
318
+ * @link https://github.com/Freemius/wordpress-sdk/issues/26
319
+ */
320
+ // $active_sitewide_plugins = get_site_option( 'active_sitewide_plugins' );
321
+
322
  $active_plugins = get_option( 'active_plugins' );
323
  $newest_sdk_plugin_key = array_search( $fs_active_plugins->newest->plugin_path, $active_plugins );
324
  if ( 0 == $newest_sdk_plugin_key ) {
373
  } else {
374
  fs_update_sdk_newest_version( $newest_sdk_path, $newest_sdk_data->plugin_path );
375
  }
376
+ }
377
+
378
+ #region Actions / Filters -----------------------------------------
379
+
380
+ /**
381
+ * Apply filter for specific plugin.
382
+ *
383
+ * @author Vova Feldman (@svovaf)
384
+ * @since 1.0.9
385
+ *
386
+ * @param string $slug Plugin slug
387
+ * @param string $tag The name of the filter hook.
388
+ * @param mixed $value The value on which the filters hooked to `$tag` are applied on.
389
+ *
390
+ * @return mixed The filtered value after all hooked functions are applied to it.
391
+ *
392
+ * @uses apply_filters()
393
+ */
394
+ function fs_apply_filter( $slug, $tag, $value ) {
395
+ $args = func_get_args();
396
+
397
+ return call_user_func_array( 'apply_filters', array_merge(
398
+ array( 'fs_' . $tag . '_' . $slug ),
399
+ array_slice( $args, 2 ) )
400
+ );
401
+ }
402
+
403
+ #endregion Actions / Filters -----------------------------------------
classes/freemius/includes/i18n.php CHANGED
@@ -1,4 +1,15 @@
1
  <?php
 
 
 
 
 
 
 
 
 
 
 
2
  /**
3
  * All strings can now be overridden.
4
  *
@@ -53,6 +64,7 @@
53
  'license-single-site' => __( 'Single Site License', 'freemius' ),
54
  'license-unlimited' => __( 'Unlimited Licenses', 'freemius' ),
55
  'license-x-sites' => __( 'Up to %s Sites', 'freemius' ),
 
56
  'x-plan' => _x( '%s Plan', 'e.g. Professional Plan', 'freemius' ),
57
  'you-are-step-away' => __( 'You are just one step away - %s', 'freemius' ),
58
  'activate-x-now' => _x( 'Complete "%s" Activation Now', '%s - plugin name. As complete "Jetpack" activation now', 'freemius' ),
@@ -159,6 +171,7 @@
159
  'privacy-policy' => __( 'Privacy Policy', 'freemius' ),
160
  'tos' => __( 'Terms of Service', 'freemius' ),
161
  'activating' => _x( 'Activating', 'as activating plugin', 'freemius' ),
 
162
  'opt-in-connect' => _x( 'Allow & Continue', 'button label', 'freemius' ),
163
  'skip' => _x( 'Skip', 'verb', 'freemius' ),
164
  'resend-activation-email' => __( 'Re-send activation email', 'freemius' ),
@@ -271,7 +284,7 @@
271
  'deactivate-plugin-title' => __( 'That\'s exhausting, please deactivate', 'freemius' ),
272
  'deactivate-plugin-desc' => __( 'We feel your frustration and sincerely apologize for the inconvenience. Hope to see you again in the future.', 'freemius' ),
273
  'fix-request-sent-message' => __( '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.', 'freemius' ),
274
- 'server-blocking-access' => _x( 'Your server is blocking the access to Freemius\' API, which is crucial for %1s license synchronization. Please contact your host to whitelist %2s', '%1s - plugin title, %2s - API domain', 'freemius' ),
275
  'wrong-authentication-param-message' => __( 'It seems like one of the authentication parameters is wrong. Update your Public Key, Secret Key & User ID, and try again.', 'freemius' ),
276
  #endregion Connectivity Issues
277
  #region Change Owner
1
  <?php
2
+ /**
3
+ * @package Freemius
4
+ * @copyright Copyright (c) 2015, Freemius, Inc.
5
+ * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
6
+ * @since 1.1.4
7
+ */
8
+
9
+ if ( ! defined( 'ABSPATH' ) ) {
10
+ exit;
11
+ }
12
+
13
  /**
14
  * All strings can now be overridden.
15
  *
64
  'license-single-site' => __( 'Single Site License', 'freemius' ),
65
  'license-unlimited' => __( 'Unlimited Licenses', 'freemius' ),
66
  'license-x-sites' => __( 'Up to %s Sites', 'freemius' ),
67
+ 'renew-license-now' => __( '%sRenew your license now%s to access version %s features and support.', 'freemius' ),
68
  'x-plan' => _x( '%s Plan', 'e.g. Professional Plan', 'freemius' ),
69
  'you-are-step-away' => __( 'You are just one step away - %s', 'freemius' ),
70
  'activate-x-now' => _x( 'Complete "%s" Activation Now', '%s - plugin name. As complete "Jetpack" activation now', 'freemius' ),
171
  'privacy-policy' => __( 'Privacy Policy', 'freemius' ),
172
  'tos' => __( 'Terms of Service', 'freemius' ),
173
  'activating' => _x( 'Activating', 'as activating plugin', 'freemius' ),
174
+ 'sending-email' => _x( 'Sending email', 'as in the process of sending an email', 'freemius' ),
175
  'opt-in-connect' => _x( 'Allow & Continue', 'button label', 'freemius' ),
176
  'skip' => _x( 'Skip', 'verb', 'freemius' ),
177
  'resend-activation-email' => __( 'Re-send activation email', 'freemius' ),
284
  'deactivate-plugin-title' => __( 'That\'s exhausting, please deactivate', 'freemius' ),
285
  'deactivate-plugin-desc' => __( 'We feel your frustration and sincerely apologize for the inconvenience. Hope to see you again in the future.', 'freemius' ),
286
  'fix-request-sent-message' => __( '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.', 'freemius' ),
287
+ 'server-blocking-access' => _x( 'Your server is blocking the access to Freemius\' API, which is crucial for %1s synchronization. Please contact your host to whitelist %2s', '%1s - plugin title, %2s - API domain', 'freemius' ),
288
  'wrong-authentication-param-message' => __( 'It seems like one of the authentication parameters is wrong. Update your Public Key, Secret Key & User ID, and try again.', 'freemius' ),
289
  #endregion Connectivity Issues
290
  #region Change Owner
classes/freemius/includes/managers/class-fs-admin-menu-manager.php CHANGED
@@ -110,7 +110,7 @@
110
  }
111
 
112
  private function get_bool_option( &$options, $key, $default = false ) {
113
- return isset( $options[ $key ] ) && is_bool( $options[ $key ] ) ? $options[ $key ] : $default;
114
  }
115
 
116
  #endregion Helpers
@@ -239,7 +239,12 @@
239
  * @return bool
240
  */
241
  function is_submenu_item_visible( $id, $default = true ) {
242
- return $this->get_bool_option( $this->_default_submenu_items, $id, $default );
 
 
 
 
 
243
  }
244
 
245
  /**
110
  }
111
 
112
  private function get_bool_option( &$options, $key, $default = false ) {
113
+ return isset( $options[ $key ] ) &&is_bool( $options[ $key ] ) ? $options[ $key ] : $default;
114
  }
115
 
116
  #endregion Helpers
239
  * @return bool
240
  */
241
  function is_submenu_item_visible( $id, $default = true ) {
242
+ return fs_apply_filter(
243
+ $this->_plugin_slug,
244
+ 'is_submenu_visible',
245
+ $this->get_bool_option( $this->_default_submenu_items, $id, $default ),
246
+ $id
247
+ );
248
  }
249
 
250
  /**
classes/freemius/includes/managers/class-fs-cache-manager.php ADDED
@@ -0,0 +1,211 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * @package Freemius
4
+ * @copyright Copyright (c) 2015, Freemius, Inc.
5
+ * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
6
+ * @since 1.1.6
7
+ */
8
+
9
+ if ( ! defined( 'ABSPATH' ) ) {
10
+ exit;
11
+ }
12
+
13
+ class FS_Cache_Manager {
14
+ /**
15
+ * @var FS_Option_Manager
16
+ */
17
+ private $_options;
18
+ /**
19
+ * @var FS_Logger
20
+ */
21
+ private $_logger;
22
+
23
+ /**
24
+ * @var FS_Cache_Manager[]
25
+ */
26
+ private static $_MANAGERS = array();
27
+
28
+ /**
29
+ * @author Vova Feldman (@svovaf)
30
+ * @since 1.1.3
31
+ *
32
+ * @param string $id
33
+ */
34
+ private function __construct( $id ) {
35
+ $this->_logger = FS_Logger::get_logger( WP_FS__SLUG . '_cach_mngr_' . $id, WP_FS__DEBUG_SDK, WP_FS__ECHO_DEBUG_SDK );
36
+
37
+ $this->_logger->entrance();
38
+ $this->_logger->log( 'id = ' . $id );
39
+
40
+ $this->_options = FS_Option_Manager::get_manager( $id, true );
41
+ }
42
+
43
+ /**
44
+ * @author Vova Feldman (@svovaf)
45
+ * @since 1.1.6
46
+ *
47
+ * @param $id
48
+ *
49
+ * @return FS_Cache_Manager
50
+ */
51
+ static function get_manager( $id ) {
52
+ $id = strtolower( $id );
53
+
54
+ if ( ! isset( self::$_MANAGERS[ $id ] ) ) {
55
+ self::$_MANAGERS[ $id ] = new FS_Cache_Manager( $id );
56
+ }
57
+
58
+ return self::$_MANAGERS[ $id ];
59
+ }
60
+
61
+ /**
62
+ * @author Vova Feldman (@svovaf)
63
+ * @since 1.1.6
64
+ *
65
+ * @return bool
66
+ */
67
+ function is_empty() {
68
+ $this->_logger->entrance();
69
+
70
+ return $this->_options->is_empty();
71
+ }
72
+
73
+ /**
74
+ * @author Vova Feldman (@svovaf)
75
+ * @since 1.1.6
76
+ */
77
+ function clear() {
78
+ $this->_logger->entrance();
79
+
80
+ $this->_options->clear( true );
81
+ }
82
+
83
+ /**
84
+ * Delete cache manager from DB.
85
+ *
86
+ * @author Vova Feldman (@svovaf)
87
+ * @since 1.0.9
88
+ */
89
+ function delete() {
90
+ $this->_options->delete();
91
+ }
92
+
93
+ /**
94
+ * Check if there's a cached item.
95
+ *
96
+ * @author Vova Feldman (@svovaf)
97
+ * @since 1.1.6
98
+ *
99
+ * @param string $key
100
+ *
101
+ * @return bool
102
+ */
103
+ function has( $key ) {
104
+ $cache_entry = $this->_options->get_option( $key, false );
105
+
106
+ return ( is_object( $cache_entry ) &&
107
+ isset( $cache_entry->timestamp ) &&
108
+ is_numeric( $cache_entry->timestamp )
109
+ );
110
+ }
111
+
112
+ /**
113
+ * Check if there's a valid cached item.
114
+ *
115
+ * @author Vova Feldman (@svovaf)
116
+ * @since 1.1.6
117
+ *
118
+ * @param string $key
119
+ *
120
+ * @return bool
121
+ */
122
+ function has_valid( $key ) {
123
+ $cache_entry = $this->_options->get_option( $key, false );
124
+
125
+ return ( is_object( $cache_entry ) &&
126
+ isset( $cache_entry->timestamp ) &&
127
+ is_numeric( $cache_entry->timestamp ) &&
128
+ $cache_entry->timestamp > WP_FS__SCRIPT_START_TIME
129
+ );
130
+ }
131
+
132
+ /**
133
+ * @author Vova Feldman (@svovaf)
134
+ * @since 1.1.6
135
+ *
136
+ * @param string $key
137
+ * @param mixed $default
138
+ *
139
+ * @return mixed
140
+ */
141
+ function get( $key, $default = null ) {
142
+ $this->_logger->entrance( 'key = ' . $key );
143
+
144
+ $cache_entry = $this->_options->get_option( $key, false );
145
+
146
+ if ( is_object( $cache_entry ) &&
147
+ isset( $cache_entry->timestamp ) &&
148
+ is_numeric( $cache_entry->timestamp )
149
+ ) {
150
+ return $cache_entry->result;
151
+ }
152
+
153
+ return $default;
154
+ }
155
+
156
+ /**
157
+ * @author Vova Feldman (@svovaf)
158
+ * @since 1.1.6
159
+ *
160
+ * @param string $key
161
+ * @param mixed $default
162
+ *
163
+ * @return mixed
164
+ */
165
+ function get_valid( $key, $default = null ) {
166
+ $this->_logger->entrance( 'key = ' . $key );
167
+
168
+ $cache_entry = $this->_options->get_option( $key, false );
169
+
170
+ if ( is_object( $cache_entry ) &&
171
+ isset( $cache_entry->timestamp ) &&
172
+ is_numeric( $cache_entry->timestamp ) &&
173
+ $cache_entry->timestamp > WP_FS__SCRIPT_START_TIME
174
+ ) {
175
+ return $cache_entry->result;
176
+ }
177
+
178
+ return $default;
179
+ }
180
+
181
+ /**
182
+ * @author Vova Feldman (@svovaf)
183
+ * @since 1.1.6
184
+ *
185
+ * @param string $key
186
+ * @param mixed $value
187
+ * @param int $expiration
188
+ */
189
+ function set( $key, $value, $expiration = WP_FS__TIME_24_HOURS_IN_SEC ) {
190
+ $this->_logger->entrance( 'key = ' . $key );
191
+
192
+ $cache_entry = new stdClass();
193
+ $cache_entry->result = $value;
194
+ $cache_entry->timestamp = WP_FS__SCRIPT_START_TIME + $expiration;
195
+ $this->_options->set_option( $key, $cache_entry, true );
196
+ }
197
+
198
+ /**
199
+ * Purge cached item.
200
+ *
201
+ * @author Vova Feldman (@svovaf)
202
+ * @since 1.1.6
203
+ *
204
+ * @param string $key
205
+ */
206
+ function purge( $key ) {
207
+ $this->_logger->entrance( 'key = ' . $key );
208
+
209
+ $this->_options->unset_option( $key, true );
210
+ }
211
+ }
classes/freemius/includes/sdk/Exceptions/ArgumentNotExistException.php CHANGED
@@ -1,2 +1,6 @@
1
  <?php
 
 
 
 
2
  class Freemius_ArgumentNotExistException extends Freemius_InvalidArgumentException { }
1
  <?php
2
+ if ( ! class_exists( 'Freemius_InvalidArgumentException' ) ) {
3
+ exit;
4
+ }
5
+
6
  class Freemius_ArgumentNotExistException extends Freemius_InvalidArgumentException { }
classes/freemius/includes/sdk/Exceptions/EmptyArgumentException.php CHANGED
@@ -1,2 +1,6 @@
1
  <?php
 
 
 
 
2
  class Freemius_EmptyArgumentException extends Freemius_InvalidArgumentException { }
1
  <?php
2
+ if ( ! class_exists( 'Freemius_InvalidArgumentException' ) ) {
3
+ exit;
4
+ }
5
+
6
  class Freemius_EmptyArgumentException extends Freemius_InvalidArgumentException { }
classes/freemius/includes/sdk/Exceptions/InvalidArgumentException.php CHANGED
@@ -1,2 +1,6 @@
1
  <?php
 
 
 
 
2
  class Freemius_InvalidArgumentException extends Freemius_Exception { }
1
  <?php
2
+ if ( ! class_exists( 'Freemius_Exception' ) ) {
3
+ exit;
4
+ }
5
+
6
  class Freemius_InvalidArgumentException extends Freemius_Exception { }
classes/freemius/includes/sdk/Exceptions/OAuthException.php CHANGED
@@ -1,4 +1,8 @@
1
  <?php
 
 
 
 
2
  class Freemius_OAuthException extends Freemius_Exception
3
  {
4
  public function __construct($pResult)
1
  <?php
2
+ if ( ! class_exists( 'Freemius_Exception' ) ) {
3
+ exit;
4
+ }
5
+
6
  class Freemius_OAuthException extends Freemius_Exception
7
  {
8
  public function __construct($pResult)
classes/freemius/includes/sdk/Freemius.php CHANGED
@@ -75,8 +75,8 @@
75
  parent::Init( $pScope, $pID, $pPublic, $pSecret, $pSandbox );
76
  }
77
 
78
- public function GetUrl( $pCanonizedPath = '' ) {
79
- $address = ( $this->_sandbox ? FS_API__SANDBOX_ADDRESS : FS_API__ADDRESS );
80
 
81
  if ( ':' === $address[0] ) {
82
  $address = self::$_protocol . $address;
@@ -85,6 +85,8 @@
85
  return $address . $pCanonizedPath;
86
  }
87
 
 
 
88
  /**
89
  * @var int Clock diff in seconds between current server to API server.
90
  */
@@ -101,6 +103,21 @@
101
  self::$_clock_diff = $pSeconds;
102
  }
103
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
104
  /**
105
  * @var string http or https
106
  */
@@ -132,25 +149,27 @@
132
  * {scope_entity_secret_key}))
133
  *
134
  * @param string $pResourceUrl
135
- * @param array $opts
 
 
136
  */
137
- protected function SignRequest( $pResourceUrl, &$opts ) {
138
  $eol = "\n";
139
  $content_md5 = '';
140
  $now = ( time() - self::$_clock_diff );
141
  $date = date( 'r', $now );
142
  $content_type = '';
143
 
144
- if ( isset( $opts[ CURLOPT_POST ] ) && 0 < $opts[ CURLOPT_POST ] ) {
145
- $content_md5 = md5( $opts[ CURLOPT_POSTFIELDS ] );
146
- $opts[ CURLOPT_HTTPHEADER ][] = 'Content-MD5: ' . $content_md5;
147
- $content_type = 'application/json';
148
  }
149
 
150
- $opts[ CURLOPT_HTTPHEADER ][] = 'Date: ' . $date;
151
 
152
  $string_to_sign = implode( $eol, array(
153
- $opts[ CURLOPT_CUSTOMREQUEST ],
154
  $content_md5,
155
  $content_type,
156
  $date,
@@ -162,13 +181,15 @@
162
  $auth_type = ( $this->_secret !== $this->_public ) ? 'FS' : 'FSP';
163
 
164
  // Add authorization header.
165
- $opts[ CURLOPT_HTTPHEADER ][] = 'Authorization: ' .
166
- $auth_type . ' ' .
167
- $this->_id . ':' .
168
- $this->_public . ':' .
169
- self::Base64UrlEncode(
170
- hash_hmac( 'sha256', $string_to_sign, $this->_secret )
171
- );
 
 
172
  }
173
 
174
  /**
@@ -202,7 +223,7 @@
202
  // the signature uses public key hash encoding.
203
  $auth_type = ( $this->_secret !== $this->_public ) ? 'FS' : 'FSP';
204
 
205
- return $this->GetUrl(
206
  $pResourceUrl . '?' .
207
  ( 1 < count( $resource ) && ! empty( $resource[1] ) ? $resource[1] . '&' : '' ) .
208
  http_build_query( array(
@@ -212,37 +233,42 @@
212
  self::Base64UrlEncode( hash_hmac(
213
  'sha256', $string_to_sign, $this->_secret
214
  ) )
215
- ) ) );
216
  }
217
 
218
  /**
219
- * Makes an HTTP request. This method can be overridden by subclasses if
220
- * developers want to do fancier things or use something other than curl to
221
- * make the request.
222
- *
223
- * @param string $pCanonizedPath The URL to make the request to
224
- * @param string $pMethod HTTP method
225
- * @param array $params The parameters to use for the POST body
226
- * @param null|resource $ch Initialized curl handle
227
  *
228
  * @return object[]|object|null
229
  *
230
- * @throws Freemius_Exception
231
  */
232
- public function MakeRequest( $pCanonizedPath, $pMethod = 'GET', $params = array(), $ch = null ) {
233
- if ( !FS_SDK__HAS_CURL ) {
234
- $this->ThrowNoCurlException();
 
 
 
 
 
 
 
235
  }
236
 
237
  // Connectivity errors simulation.
238
  if ( FS_SDK__SIMULATE_NO_API_CONNECTIVITY_CLOUDFLARE ) {
239
- $this->ThrowCloudFlareDDoSException();
240
  } else if ( FS_SDK__SIMULATE_NO_API_CONNECTIVITY_SQUID_ACL ) {
241
- $this->ThrowSquidAclException();
242
  }
243
 
244
- if ( ! $ch ) {
245
- $ch = curl_init();
246
  }
247
 
248
  $opts = self::$CURL_OPTS;
@@ -252,25 +278,20 @@
252
  }
253
 
254
  if ( 'POST' === $pMethod || 'PUT' === $pMethod ) {
255
- if ( is_array( $params ) && 0 < count( $params ) ) {
256
  $opts[ CURLOPT_HTTPHEADER ][] = 'Content-Type: application/json';
257
- $opts[ CURLOPT_POST ] = count( $params );
258
- $opts[ CURLOPT_POSTFIELDS ] = json_encode( $params );
259
  }
260
 
261
  $opts[ CURLOPT_RETURNTRANSFER ] = true;
262
  }
263
 
264
- $opts[ CURLOPT_URL ] = $this->GetUrl( $pCanonizedPath );
265
  $opts[ CURLOPT_CUSTOMREQUEST ] = $pMethod;
266
 
267
  $resource = explode( '?', $pCanonizedPath );
268
 
269
- // Only sign request if not ping.json connectivity test.
270
- if ( '/v1/ping.json' !== strtolower( substr( $resource[0], - strlen( '/v1/ping.json' ) ) ) ) {
271
- $this->SignRequest( $resource[0], $opts );
272
- }
273
-
274
  // disable the 'Expect: 100-continue' behaviour. This causes CURL to wait
275
  // for 2 seconds if the server does not support this header.
276
  $opts[ CURLOPT_HTTPHEADER ][] = 'Expect:';
@@ -280,8 +301,14 @@
280
  $opts[ CURLOPT_SSL_VERIFYPEER ] = false;
281
  }
282
 
283
- curl_setopt_array( $ch, $opts );
284
- $result = curl_exec( $ch );
 
 
 
 
 
 
285
 
286
  /*if (curl_errno($ch) == 60) // CURLE_SSL_CACERT
287
  {
@@ -299,33 +326,25 @@
299
  if ( false === $result && empty( $opts[ CURLOPT_IPRESOLVE ] ) ) {
300
  $matches = array();
301
  $regex = '/Failed to connect to ([^:].*): Network is unreachable/';
302
- if ( preg_match( $regex, curl_error( $ch ), $matches ) ) {
303
  if ( strlen( @inet_pton( $matches[1] ) ) === 16 ) {
304
  // self::errorLog('Invalid IPv6 configuration on server, Please disable or get native IPv6 on your server.');
305
  self::$CURL_OPTS[ CURLOPT_IPRESOLVE ] = CURL_IPRESOLVE_V4;
306
- curl_setopt( $ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 );
307
- $result = curl_exec( $ch );
308
  }
309
  }
310
  }
311
 
312
  if ( $result === false ) {
313
- $e = new Freemius_Exception( array(
314
- 'error' => array(
315
- 'code' => curl_errno( $ch ),
316
- 'message' => curl_error( $ch ),
317
- 'type' => 'CurlException',
318
- ),
319
- ) );
320
-
321
- curl_close( $ch );
322
- throw $e;
323
  }
324
 
325
- curl_close( $ch );
326
 
327
- if (empty($result))
328
  return null;
 
329
 
330
  $decoded = json_decode( $result );
331
 
@@ -333,11 +352,11 @@
333
  if ( preg_match( '/Please turn JavaScript on/i', $result ) &&
334
  preg_match( '/text\/javascript/', $result )
335
  ) {
336
- $this->ThrowCloudFlareDDoSException( $result );
337
  } else if ( preg_match( '/Access control configuration prevents your request from being allowed at this time. Please contact your service provider if you feel this is incorrect./', $result ) &&
338
  preg_match( '/squid/', $result )
339
  ) {
340
- $this->ThrowSquidAclException( $result );
341
  } else {
342
  $decoded = (object) array(
343
  'error' => (object) array(
@@ -353,12 +372,121 @@
353
  return $decoded;
354
  }
355
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
356
  /**
357
  * @param string $pResult
358
  *
359
  * @throws Freemius_Exception
360
  */
361
- private function ThrowNoCurlException( $pResult = '' ) {
362
  throw new Freemius_Exception( array(
363
  'error' => (object) array(
364
  'type' => 'cUrlMissing',
@@ -374,7 +502,7 @@
374
  *
375
  * @throws Freemius_Exception
376
  */
377
- private function ThrowCloudFlareDDoSException( $pResult = '' ) {
378
  throw new Freemius_Exception( array(
379
  'error' => (object) array(
380
  'type' => 'CloudFlareDDoSProtection',
@@ -390,7 +518,7 @@
390
  *
391
  * @throws Freemius_Exception
392
  */
393
- private function ThrowSquidAclException( $pResult = '' ) {
394
  throw new Freemius_Exception( array(
395
  'error' => (object) array(
396
  'type' => 'SquidCacheBlock',
@@ -400,4 +528,6 @@
400
  )
401
  ) );
402
  }
 
 
403
  }
75
  parent::Init( $pScope, $pID, $pPublic, $pSecret, $pSandbox );
76
  }
77
 
78
+ public static function GetUrl( $pCanonizedPath = '', $pIsSandbox = false ) {
79
+ $address = ( $pIsSandbox ? FS_API__SANDBOX_ADDRESS : FS_API__ADDRESS );
80
 
81
  if ( ':' === $address[0] ) {
82
  $address = self::$_protocol . $address;
85
  return $address . $pCanonizedPath;
86
  }
87
 
88
+ #region Servers Clock Diff ------------------------------------------------------
89
+
90
  /**
91
  * @var int Clock diff in seconds between current server to API server.
92
  */
103
  self::$_clock_diff = $pSeconds;
104
  }
105
 
106
+ /**
107
+ * Find clock diff between current server to API server.
108
+ *
109
+ * @since 1.0.2
110
+ * @return int Clock diff in seconds.
111
+ */
112
+ public static function FindClockDiff() {
113
+ $time = time();
114
+ $pong = self::Ping();
115
+
116
+ return ( $time - strtotime( $pong->timestamp ) );
117
+ }
118
+
119
+ #endregion Servers Clock Diff ------------------------------------------------------
120
+
121
  /**
122
  * @var string http or https
123
  */
149
  * {scope_entity_secret_key}))
150
  *
151
  * @param string $pResourceUrl
152
+ * @param array $pCurlOptions
153
+ *
154
+ * @return array
155
  */
156
+ function SignRequest( $pResourceUrl, $pCurlOptions ) {
157
  $eol = "\n";
158
  $content_md5 = '';
159
  $now = ( time() - self::$_clock_diff );
160
  $date = date( 'r', $now );
161
  $content_type = '';
162
 
163
+ if ( isset( $pCurlOptions[ CURLOPT_POST ] ) && 0 < $pCurlOptions[ CURLOPT_POST ] ) {
164
+ $content_md5 = md5( $pCurlOptions[ CURLOPT_POSTFIELDS ] );
165
+ $pCurlOptions[ CURLOPT_HTTPHEADER ][] = 'Content-MD5: ' . $content_md5;
166
+ $content_type = 'application/json';
167
  }
168
 
169
+ $pCurlOptions[ CURLOPT_HTTPHEADER ][] = 'Date: ' . $date;
170
 
171
  $string_to_sign = implode( $eol, array(
172
+ $pCurlOptions[ CURLOPT_CUSTOMREQUEST ],
173
  $content_md5,
174
  $content_type,
175
  $date,
181
  $auth_type = ( $this->_secret !== $this->_public ) ? 'FS' : 'FSP';
182
 
183
  // Add authorization header.
184
+ $pCurlOptions[ CURLOPT_HTTPHEADER ][] = 'Authorization: ' .
185
+ $auth_type . ' ' .
186
+ $this->_id . ':' .
187
+ $this->_public . ':' .
188
+ self::Base64UrlEncode(
189
+ hash_hmac( 'sha256', $string_to_sign, $this->_secret )
190
+ );
191
+
192
+ return $pCurlOptions;
193
  }
194
 
195
  /**
223
  // the signature uses public key hash encoding.
224
  $auth_type = ( $this->_secret !== $this->_public ) ? 'FS' : 'FSP';
225
 
226
+ return Freemius_Api::GetUrl(
227
  $pResourceUrl . '?' .
228
  ( 1 < count( $resource ) && ! empty( $resource[1] ) ? $resource[1] . '&' : '' ) .
229
  http_build_query( array(
233
  self::Base64UrlEncode( hash_hmac(
234
  'sha256', $string_to_sign, $this->_secret
235
  ) )
236
+ ) ), $this->_isSandbox );
237
  }
238
 
239
  /**
240
+ * @param string $pCanonizedPath
241
+ * @param string $pMethod
242
+ * @param array $pParams
243
+ * @param null|resource $pCurlHandler
244
+ * @param bool $pIsSandbox
245
+ * @param null|callable $pBeforeExecutionFunction
 
 
246
  *
247
  * @return object[]|object|null
248
  *
249
+ * @throws \Freemius_Exception
250
  */
251
+ private static function MakeStaticRequest(
252
+ $pCanonizedPath,
253
+ $pMethod = 'GET',
254
+ $pParams = array(),
255
+ $pCurlHandler = null,
256
+ $pIsSandbox = false,
257
+ $pBeforeExecutionFunction = null
258
+ ) {
259
+ if ( ! FS_SDK__HAS_CURL ) {
260
+ self::ThrowNoCurlException();
261
  }
262
 
263
  // Connectivity errors simulation.
264
  if ( FS_SDK__SIMULATE_NO_API_CONNECTIVITY_CLOUDFLARE ) {
265
+ self::ThrowCloudFlareDDoSException();
266
  } else if ( FS_SDK__SIMULATE_NO_API_CONNECTIVITY_SQUID_ACL ) {
267
+ self::ThrowSquidAclException();
268
  }
269
 
270
+ if ( ! $pCurlHandler ) {
271
+ $pCurlHandler = curl_init();
272
  }
273
 
274
  $opts = self::$CURL_OPTS;
278
  }
279
 
280
  if ( 'POST' === $pMethod || 'PUT' === $pMethod ) {
281
+ if ( is_array( $pParams ) && 0 < count( $pParams ) ) {
282
  $opts[ CURLOPT_HTTPHEADER ][] = 'Content-Type: application/json';
283
+ $opts[ CURLOPT_POST ] = count( $pParams );
284
+ $opts[ CURLOPT_POSTFIELDS ] = json_encode( $pParams );
285
  }
286
 
287
  $opts[ CURLOPT_RETURNTRANSFER ] = true;
288
  }
289
 
290
+ $opts[ CURLOPT_URL ] = Freemius_Api::GetUrl( $pCanonizedPath, $pIsSandbox );
291
  $opts[ CURLOPT_CUSTOMREQUEST ] = $pMethod;
292
 
293
  $resource = explode( '?', $pCanonizedPath );
294
 
 
 
 
 
 
295
  // disable the 'Expect: 100-continue' behaviour. This causes CURL to wait
296
  // for 2 seconds if the server does not support this header.
297
  $opts[ CURLOPT_HTTPHEADER ][] = 'Expect:';
301
  $opts[ CURLOPT_SSL_VERIFYPEER ] = false;
302
  }
303
 
304
+ if ( false !== $pBeforeExecutionFunction &&
305
+ is_callable( $pBeforeExecutionFunction )
306
+ ) {
307
+ $opts = call_user_func( $pBeforeExecutionFunction, $resource[0], $opts );
308
+ }
309
+
310
+ curl_setopt_array( $pCurlHandler, $opts );
311
+ $result = curl_exec( $pCurlHandler );
312
 
313
  /*if (curl_errno($ch) == 60) // CURLE_SSL_CACERT
314
  {
326
  if ( false === $result && empty( $opts[ CURLOPT_IPRESOLVE ] ) ) {
327
  $matches = array();
328
  $regex = '/Failed to connect to ([^:].*): Network is unreachable/';
329
+ if ( preg_match( $regex, curl_error( $pCurlHandler ), $matches ) ) {
330
  if ( strlen( @inet_pton( $matches[1] ) ) === 16 ) {
331
  // self::errorLog('Invalid IPv6 configuration on server, Please disable or get native IPv6 on your server.');
332
  self::$CURL_OPTS[ CURLOPT_IPRESOLVE ] = CURL_IPRESOLVE_V4;
333
+ curl_setopt( $pCurlHandler, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 );
334
+ $result = curl_exec( $pCurlHandler );
335
  }
336
  }
337
  }
338
 
339
  if ( $result === false ) {
340
+ self::ThrowCurlException( $pCurlHandler );
 
 
 
 
 
 
 
 
 
341
  }
342
 
343
+ curl_close( $pCurlHandler );
344
 
345
+ if ( empty( $result ) ) {
346
  return null;
347
+ }
348
 
349
  $decoded = json_decode( $result );
350
 
352
  if ( preg_match( '/Please turn JavaScript on/i', $result ) &&
353
  preg_match( '/text\/javascript/', $result )
354
  ) {
355
+ self::ThrowCloudFlareDDoSException( $result );
356
  } else if ( preg_match( '/Access control configuration prevents your request from being allowed at this time. Please contact your service provider if you feel this is incorrect./', $result ) &&
357
  preg_match( '/squid/', $result )
358
  ) {
359
+ self::ThrowSquidAclException( $result );
360
  } else {
361
  $decoded = (object) array(
362
  'error' => (object) array(
372
  return $decoded;
373
  }
374
 
375
+
376
+ /**
377
+ * Makes an HTTP request. This method can be overridden by subclasses if
378
+ * developers want to do fancier things or use something other than curl to
379
+ * make the request.
380
+ *
381
+ * @param string $pCanonizedPath The URL to make the request to
382
+ * @param string $pMethod HTTP method
383
+ * @param array $pParams The parameters to use for the POST body
384
+ * @param null|resource $pCurlHandler Initialized curl handle
385
+ *
386
+ * @return object[]|object|null
387
+ *
388
+ * @throws Freemius_Exception
389
+ */
390
+ public function MakeRequest(
391
+ $pCanonizedPath,
392
+ $pMethod = 'GET',
393
+ $pParams = array(),
394
+ $pCurlHandler = null
395
+ ) {
396
+ $resource = explode( '?', $pCanonizedPath );
397
+
398
+ // Only sign request if not ping.json connectivity test.
399
+ $sign_request = ( '/v1/ping.json' !== strtolower( substr( $resource[0], - strlen( '/v1/ping.json' ) ) ) );
400
+
401
+ return self::MakeStaticRequest(
402
+ $pCanonizedPath,
403
+ $pMethod,
404
+ $pParams,
405
+ $pCurlHandler,
406
+ $this->_isSandbox,
407
+ $sign_request ? array( &$this, 'SignRequest' ) : null
408
+ );
409
+ }
410
+
411
+ #region Connectivity Test ------------------------------------------------------
412
+
413
+ /**
414
+ * If successful connectivity to the API endpoint using ping.json endpoint.
415
+ *
416
+ * - OR -
417
+ *
418
+ * Validate if ping result object is valid.
419
+ *
420
+ * @param mixed $pPong
421
+ *
422
+ * @return bool
423
+ */
424
+ public static function Test( $pPong = null ) {
425
+ $pong = is_null( $pPong ) ?
426
+ self::Ping() :
427
+ $pPong;
428
+
429
+ return (
430
+ is_object( $pong ) &&
431
+ isset( $pong->api ) &&
432
+ 'pong' === $pong->api
433
+ );
434
+ }
435
+
436
+ /**
437
+ * Ping API to test connectivity.
438
+ *
439
+ * @return object
440
+ */
441
+ public static function Ping() {
442
+ try {
443
+ $result = self::MakeStaticRequest( '/v' . FS_API__VERSION . '/ping.json' );
444
+ } catch ( Freemius_Exception $e ) {
445
+ // Map to error object.
446
+ $result = (object) $e->getResult();
447
+ } catch ( Exception $e ) {
448
+ // Map to error object.
449
+ $result = (object) array(
450
+ 'error' => array(
451
+ 'type' => 'Unknown',
452
+ 'message' => $e->getMessage() . ' (' . $e->getFile() . ': ' . $e->getLine() . ')',
453
+ 'code' => 'unknown',
454
+ 'http' => 402
455
+ )
456
+ );
457
+ }
458
+
459
+ return $result;
460
+ }
461
+
462
+ #endregion Connectivity Test ------------------------------------------------------
463
+
464
+ #region Connectivity Exceptions ------------------------------------------------------
465
+
466
+ /**
467
+ * @param resource $pCurlHandler
468
+ *
469
+ * @throws Freemius_Exception
470
+ */
471
+ private static function ThrowCurlException( $pCurlHandler ) {
472
+ $e = new Freemius_Exception( array(
473
+ 'error' => array(
474
+ 'code' => curl_errno( $pCurlHandler ),
475
+ 'message' => curl_error( $pCurlHandler ),
476
+ 'type' => 'CurlException',
477
+ ),
478
+ ) );
479
+
480
+ curl_close( $pCurlHandler );
481
+ throw $e;
482
+ }
483
+
484
  /**
485
  * @param string $pResult
486
  *
487
  * @throws Freemius_Exception
488
  */
489
+ private static function ThrowNoCurlException( $pResult = '' ) {
490
  throw new Freemius_Exception( array(
491
  'error' => (object) array(
492
  'type' => 'cUrlMissing',
502
  *
503
  * @throws Freemius_Exception
504
  */
505
+ private static function ThrowCloudFlareDDoSException( $pResult = '' ) {
506
  throw new Freemius_Exception( array(
507
  'error' => (object) array(
508
  'type' => 'CloudFlareDDoSProtection',
518
  *
519
  * @throws Freemius_Exception
520
  */
521
+ private static function ThrowSquidAclException( $pResult = '' ) {
522
  throw new Freemius_Exception( array(
523
  'error' => (object) array(
524
  'type' => 'SquidCacheBlock',
528
  )
529
  ) );
530
  }
531
+
532
+ #endregion Connectivity Exceptions ------------------------------------------------------
533
  }
classes/freemius/includes/sdk/FreemiusBase.php CHANGED
@@ -44,25 +44,25 @@
44
  protected $_public;
45
  protected $_secret;
46
  protected $_scope;
47
- protected $_sandbox;
48
 
49
  /**
50
- * @param string $pScope 'app', 'developer', 'user' or 'install'.
51
- * @param number $pID Element's id.
52
- * @param string $pPublic Public key.
53
- * @param string $pSecret Element's secret key.
54
- * @param bool $pSandbox Whether or not to run API in sandbox mode.
55
  */
56
- public function Init( $pScope, $pID, $pPublic, $pSecret, $pSandbox = false ) {
57
- $this->_id = $pID;
58
- $this->_public = $pPublic;
59
- $this->_secret = $pSecret;
60
- $this->_scope = $pScope;
61
- $this->_sandbox = $pSandbox;
62
  }
63
 
64
  public function IsSandbox() {
65
- return $this->_sandbox;
66
  }
67
 
68
  function CanonizePath( $pPath ) {
@@ -139,45 +139,6 @@
139
  return $result;
140
  }
141
 
142
- /**
143
- * If successful connectivity to the API endpoint using ping.json endpoint.
144
- *
145
- * - OR -
146
- *
147
- * Validate if ping result object is valid.
148
- *
149
- * @param mixed $pPong
150
- *
151
- * @return bool
152
- */
153
- public function Test( $pPong = null ) {
154
- $pong = is_null( $pPong ) ? $this->Ping() : $pPong;
155
-
156
- return ( is_object( $pong ) && isset( $pong->api ) && 'pong' === $pong->api );
157
- }
158
-
159
- /**
160
- * Ping API to test connectivity.
161
- *
162
- * @return object
163
- */
164
- public function Ping() {
165
- return $this->_Api( '/v' . FS_API__VERSION . '/ping.json' );
166
- }
167
-
168
- /**
169
- * Find clock diff between current server to API server.
170
- *
171
- * @since 1.0.2
172
- * @return int Clock diff in seconds.
173
- */
174
- public function FindClockDiff() {
175
- $time = time();
176
- $pong = $this->_Api( '/v' . FS_API__VERSION . '/ping.json' );
177
-
178
- return ( $time - strtotime( $pong->timestamp ) );
179
- }
180
-
181
  public function Api( $pPath, $pMethod = 'GET', $pParams = array() ) {
182
  return $this->_Api( $this->CanonizePath( $pPath ), $pMethod, $pParams );
183
  }
44
  protected $_public;
45
  protected $_secret;
46
  protected $_scope;
47
+ protected $_isSandbox;
48
 
49
  /**
50
+ * @param string $pScope 'app', 'developer', 'user' or 'install'.
51
+ * @param number $pID Element's id.
52
+ * @param string $pPublic Public key.
53
+ * @param string $pSecret Element's secret key.
54
+ * @param bool $pIsSandbox Whether or not to run API in sandbox mode.
55
  */
56
+ public function Init( $pScope, $pID, $pPublic, $pSecret, $pIsSandbox = false ) {
57
+ $this->_id = $pID;
58
+ $this->_public = $pPublic;
59
+ $this->_secret = $pSecret;
60
+ $this->_scope = $pScope;
61
+ $this->_isSandbox = $pIsSandbox;
62
  }
63
 
64
  public function IsSandbox() {
65
+ return $this->_isSandbox;
66
  }
67
 
68
  function CanonizePath( $pPath ) {
139
  return $result;
140
  }
141
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
142
  public function Api( $pPath, $pMethod = 'GET', $pParams = array() ) {
143
  return $this->_Api( $this->CanonizePath( $pPath ), $pMethod, $pParams );
144
  }
classes/freemius/includes/supplements/fs-essential-functions-1.1.7.1.php ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * @package Freemius
4
+ * @copyright Copyright (c) 2015, Freemius, Inc.
5
+ * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
6
+ * @since 1.1.7
7
+ */
8
+
9
+ if ( ! defined( 'ABSPATH' ) ) {
10
+ exit;
11
+ }
12
+
13
+ /**
14
+ * Find the plugin main file path based on any give file inside the plugin's folder.
15
+ *
16
+ * @author Vova Feldman (@svovaf)
17
+ * @since 1.1.7.1
18
+ *
19
+ * @param string $file Absolute path to a file inside a plugin's folder.
20
+ *
21
+ * @return string
22
+ */
23
+ function fs_find_direct_caller_plugin_file( $file ) {
24
+ /**
25
+ * All the code below will be executed once on activation.
26
+ * If the user changes the main plugin's file name, the file_exists()
27
+ * will catch it.
28
+ */
29
+ if ( ! function_exists( 'get_plugins' ) ) {
30
+ require_once( ABSPATH . 'wp-admin/includes/plugin.php' );
31
+ }
32
+
33
+ $all_plugins = get_plugins();
34
+
35
+ $file_real_path = fs_normalize_path( realpath( $file ) );
36
+
37
+ // Get active plugin's main files real full names (might be symlinks).
38
+ foreach ( $all_plugins as $relative_path => &$data ) {
39
+ if ( 0 === strpos( $file_real_path, fs_normalize_path( dirname( realpath( WP_PLUGIN_DIR . '/' . $relative_path ) ) ) ) ) {
40
+ return $relative_path;
41
+ }
42
+ }
43
+
44
+ return null;
45
+ }
classes/freemius/start.php CHANGED
@@ -10,7 +10,7 @@
10
  exit;
11
  }
12
 
13
- $this_sdk_version = '1.1.6.2';
14
 
15
  #region SDK Selection Logic --------------------------------------------------------------------
16
 
@@ -40,6 +40,10 @@
40
  }
41
  }
42
 
 
 
 
 
43
  // Update current SDK info based on the SDK path.
44
  if ( ! isset( $fs_active_plugins->plugins[ $this_sdk_relative_path ] ) ||
45
  $this_sdk_version != $fs_active_plugins->plugins[ $this_sdk_relative_path ]->version
@@ -47,7 +51,7 @@
47
  $fs_active_plugins->plugins[ $this_sdk_relative_path ] = (object) array(
48
  'version' => $this_sdk_version,
49
  'timestamp' => time(),
50
- 'plugin_path' => plugin_basename( fs_find_caller_plugin_file() ),
51
  );
52
  }
53
 
@@ -57,14 +61,14 @@
57
  /**
58
  * This will be executed only once, for the first time a Freemius powered plugin is activated.
59
  */
60
- fs_update_sdk_newest_version( $this_sdk_relative_path );
61
 
62
  $is_current_sdk_newest = true;
63
  } else if ( version_compare( $fs_active_plugins->newest->version, $this_sdk_version, '<' ) ) {
64
  /**
65
  * Current SDK is newer than the newest stored SDK.
66
  */
67
- fs_update_sdk_newest_version( $this_sdk_relative_path );
68
 
69
  if ( class_exists( 'Freemius' ) ) {
70
  // Older SDK version was already loaded.
@@ -202,6 +206,7 @@
202
  * fs_connect_message_on_update_{plugin_slug}
203
  * fs_uninstall_confirmation_message_{plugin_slug}
204
  * fs_pending_activation_message_{plugin_slug}
 
205
  *
206
  * --------------------------------------------------------
207
  *
@@ -257,6 +262,7 @@
257
  require_once WP_FS__DIR_INCLUDES . '/fs-core-functions.php';
258
  // require_once WP_FS__DIR_INCLUDES . '/managers/class-fs-abstract-manager.php';
259
  require_once WP_FS__DIR_INCLUDES . '/managers/class-fs-option-manager.php';
 
260
  require_once WP_FS__DIR_INCLUDES . '/managers/class-fs-admin-notice-manager.php';
261
  require_once WP_FS__DIR_INCLUDES . '/managers/class-fs-admin-menu-manager.php';
262
  require_once WP_FS__DIR_INCLUDES . '/managers/class-fs-key-value-storage.php';
10
  exit;
11
  }
12
 
13
+ $this_sdk_version = '1.1.7.1';
14
 
15
  #region SDK Selection Logic --------------------------------------------------------------------
16
 
40
  }
41
  }
42
 
43
+ if ( ! function_exists( 'fs_find_direct_caller_plugin_file' ) ) {
44
+ require_once dirname( __FILE__ ) . '/includes/supplements/fs-essential-functions-1.1.7.1.php';
45
+ }
46
+
47
  // Update current SDK info based on the SDK path.
48
  if ( ! isset( $fs_active_plugins->plugins[ $this_sdk_relative_path ] ) ||
49
  $this_sdk_version != $fs_active_plugins->plugins[ $this_sdk_relative_path ]->version
51
  $fs_active_plugins->plugins[ $this_sdk_relative_path ] = (object) array(
52
  'version' => $this_sdk_version,
53
  'timestamp' => time(),
54
+ 'plugin_path' => plugin_basename( fs_find_direct_caller_plugin_file( __FILE__ ) ),
55
  );
56
  }
57
 
61
  /**
62
  * This will be executed only once, for the first time a Freemius powered plugin is activated.
63
  */
64
+ fs_update_sdk_newest_version( $this_sdk_relative_path, $fs_active_plugins->plugins[ $this_sdk_relative_path ]->plugin_path );
65
 
66
  $is_current_sdk_newest = true;
67
  } else if ( version_compare( $fs_active_plugins->newest->version, $this_sdk_version, '<' ) ) {
68
  /**
69
  * Current SDK is newer than the newest stored SDK.
70
  */
71
+ fs_update_sdk_newest_version( $this_sdk_relative_path, $fs_active_plugins->plugins[ $this_sdk_relative_path ]->plugin_path );
72
 
73
  if ( class_exists( 'Freemius' ) ) {
74
  // Older SDK version was already loaded.
206
  * fs_connect_message_on_update_{plugin_slug}
207
  * fs_uninstall_confirmation_message_{plugin_slug}
208
  * fs_pending_activation_message_{plugin_slug}
209
+ * fs_is_submenu_visible_{plugin_slug}
210
  *
211
  * --------------------------------------------------------
212
  *
262
  require_once WP_FS__DIR_INCLUDES . '/fs-core-functions.php';
263
  // require_once WP_FS__DIR_INCLUDES . '/managers/class-fs-abstract-manager.php';
264
  require_once WP_FS__DIR_INCLUDES . '/managers/class-fs-option-manager.php';
265
+ require_once WP_FS__DIR_INCLUDES . '/managers/class-fs-cache-manager.php';
266
  require_once WP_FS__DIR_INCLUDES . '/managers/class-fs-admin-notice-manager.php';
267
  require_once WP_FS__DIR_INCLUDES . '/managers/class-fs-admin-menu-manager.php';
268
  require_once WP_FS__DIR_INCLUDES . '/managers/class-fs-key-value-storage.php';
classes/freemius/templates/account.php CHANGED
@@ -6,6 +6,10 @@
6
  * @since 1.0.3
7
  */
8
 
 
 
 
 
9
  $slug = $VARS['slug'];
10
  /**
11
  * @var Freemius $fs
6
  * @since 1.0.3
7
  */
8
 
9
+ if ( ! defined( 'ABSPATH' ) ) {
10
+ exit;
11
+ }
12
+
13
  $slug = $VARS['slug'];
14
  /**
15
  * @var Freemius $fs
classes/freemius/templates/add-ons.php CHANGED
@@ -6,6 +6,10 @@
6
  * @since 1.0.3
7
  */
8
 
 
 
 
 
9
  $slug = $VARS['slug'];
10
  /**
11
  * @var Freemius
6
  * @since 1.0.3
7
  */
8
 
9
+ if ( ! defined( 'ABSPATH' ) ) {
10
+ exit;
11
+ }
12
+
13
  $slug = $VARS['slug'];
14
  /**
15
  * @var Freemius
classes/freemius/templates/admin-notice.php CHANGED
@@ -5,6 +5,10 @@
5
  * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
6
  * @since 1.0.3
7
  */
 
 
 
 
8
  ?>
9
  <div data-id="<?php echo $VARS['id'] ?>" data-slug="<?php echo $VARS['slug'] ?>" class="<?php
10
  switch ( $VARS['type'] ) {
@@ -27,10 +31,12 @@
27
  } ?><?php if ( ! empty( $VARS['plugin'] ) ) {
28
  echo ' fs-has-title';
29
  } ?>"><?php if ( ! empty( $VARS['plugin'] ) ) : ?><label
30
- class="fs-plugin-title"><?php echo $VARS['plugin'] ?></label><?php endif ?><p>
31
- <?php if ( ! empty( $VARS['title'] ) ) : ?><b><?php echo $VARS['title'] ?></b> <?php endif ?>
32
- <?php echo $VARS['message'] ?>
33
- </p><?php if ( $VARS['sticky'] ) : ?>
34
  <div class="fs-close"><i class="dashicons dashicons-no"
35
  title="<?php _efs( 'dismiss' ) ?>"></i> <span><?php _efs( 'dismiss' ) ?></span>
36
- </div><?php endif ?></div>
 
 
 
 
 
5
  * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
6
  * @since 1.0.3
7
  */
8
+
9
+ if ( ! defined( 'ABSPATH' ) ) {
10
+ exit;
11
+ }
12
  ?>
13
  <div data-id="<?php echo $VARS['id'] ?>" data-slug="<?php echo $VARS['slug'] ?>" class="<?php
14
  switch ( $VARS['type'] ) {
31
  } ?><?php if ( ! empty( $VARS['plugin'] ) ) {
32
  echo ' fs-has-title';
33
  } ?>"><?php if ( ! empty( $VARS['plugin'] ) ) : ?><label
34
+ class="fs-plugin-title"><?php echo $VARS['plugin'] ?></label><?php endif ?><?php if ( $VARS['sticky'] ) : ?>
 
 
 
35
  <div class="fs-close"><i class="dashicons dashicons-no"
36
  title="<?php _efs( 'dismiss' ) ?>"></i> <span><?php _efs( 'dismiss' ) ?></span>
37
+ </div><?php endif ?>
38
+ <div class="fs-notice-body">
39
+ <?php if ( ! empty( $VARS['title'] ) ) : ?><b><?php echo $VARS['title'] ?></b> <?php endif ?>
40
+ <?php echo $VARS['message'] ?>
41
+ </div>
42
+ </div>
classes/freemius/templates/all-admin-notice.php CHANGED
@@ -5,6 +5,10 @@
5
  * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
6
  * @since 1.0.3
7
  */
 
 
 
 
8
  ?>
9
  <div class="<?php
10
  switch ($VARS['type']) {
5
  * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
6
  * @since 1.0.3
7
  */
8
+
9
+ if ( ! defined( 'ABSPATH' ) ) {
10
+ exit;
11
+ }
12
  ?>
13
  <div class="<?php
14
  switch ($VARS['type']) {
classes/freemius/templates/checkout.php CHANGED
@@ -6,6 +6,10 @@
6
  * @since 1.0.3
7
  */
8
 
 
 
 
 
9
  wp_enqueue_script( 'jquery' );
10
  wp_enqueue_script( 'json2' );
11
  fs_enqueue_local_script( 'postmessage', 'nojquery.ba-postmessage.min.js' );
6
  * @since 1.0.3
7
  */
8
 
9
+ if ( ! defined( 'ABSPATH' ) ) {
10
+ exit;
11
+ }
12
+
13
  wp_enqueue_script( 'jquery' );
14
  wp_enqueue_script( 'json2' );
15
  fs_enqueue_local_script( 'postmessage', 'nojquery.ba-postmessage.min.js' );
classes/freemius/templates/connect.php CHANGED
@@ -6,8 +6,13 @@
6
  * @since 1.0.7
7
  */
8
 
9
- $slug = $VARS['slug'];
10
- $fs = freemius( $slug );
 
 
 
 
 
11
 
12
  $fs->_enqueue_connect_essentials();
13
 
@@ -29,7 +34,7 @@
29
  // Insights platform information.
30
  'https://freemius.com/wordpress/insights/';
31
  ?>
32
- <div id="fs_connect" class="wrap<?php if ( ! $fs->enable_anonymous() ) {
33
  echo ' fs-anonymous-disabled';
34
  } ?>">
35
  <div class="fs-visual">
@@ -44,47 +49,58 @@
44
  </div>
45
  <div class="fs-content">
46
  <p><?php
47
- $filter = 'connect_message';
48
- $default_optin_message = 'connect-message';
49
-
50
- if ( $fs->is_plugin_update() ) {
51
- // If Freemius was added on a plugin update, set different
52
- // opt-in message.
53
- $default_optin_message = 'connect-message_on-update';
54
-
55
- // If user customized the opt-in message on update, use
56
- // that message. Otherwise, fallback to regular opt-in
57
- // custom message if exist.
58
- if ( $fs->has_filter( 'connect_message_on_update' ) ) {
59
- $filter = 'connect_message_on_update';
 
 
 
 
 
 
 
 
 
 
60
  }
61
- }
62
 
63
- echo $fs->apply_filters( $filter,
64
- sprintf(
65
- __fs( 'hey-x', $slug ) . '<br>' .
66
- __fs( $default_optin_message, $slug ),
 
 
 
 
 
 
67
  $first_name,
68
- '<b>' . $fs->get_plugin_name() . '</b>',
69
- '<b>' . $current_user->user_login . '</b>',
70
  '<a href="' . $site_url . '" target="_blank">' . $site_url . '</a>',
71
  '<a href="' . $freemius_site_url . '" target="_blank">freemius.com</a>'
72
- ),
73
- $first_name,
74
- $fs->get_plugin_name(),
75
- $current_user->user_login,
76
- '<a href="' . $site_url . '" target="_blank">' . $site_url . '</a>',
77
- '<a href="' . $freemius_site_url . '" target="_blank">freemius.com</a>'
78
- );
79
  ?></p>
80
  </div>
81
  <div class="fs-actions">
82
- <?php if ( $fs->enable_anonymous() ) : ?>
83
  <a href="<?php echo wp_nonce_url( $fs->_get_admin_page_url( '', array( 'fs_action' => $slug . '_skip_activation' ) ), $slug . '_skip_activation' ) ?>"
84
  class="button button-secondary" tabindex="2"><?php _efs( 'skip', $slug ) ?></a>
85
  <?php endif ?>
 
86
  <?php $fs_user = Freemius::_get_user_by_email( $current_user->user_email ) ?>
87
- <?php if ( is_object( $fs_user ) ) : ?>
88
  <form action="" method="POST">
89
  <input type="hidden" name="fs_action" value="<?php echo $slug ?>_activate_existing">
90
  <?php wp_nonce_field( 'activate_existing_' . $fs->get_public_key() ) ?>
@@ -99,7 +115,7 @@
99
  'user_lastname' => $current_user->user_lastname,
100
  'user_nickname' => $current_user->user_nicename,
101
  'user_email' => $current_user->user_email,
102
- 'user_ip' => fs_get_ip(),
103
  'plugin_slug' => $slug,
104
  'plugin_id' => $fs->get_id(),
105
  'plugin_public_key' => $fs->get_public_key(),
@@ -140,53 +156,69 @@
140
  <input type="hidden" name="<?php echo $name ?>" value="<?php echo esc_attr( $value ) ?>">
141
  <?php endforeach ?>
142
  <button class="button button-primary" tabindex="1"
143
- type="submit"><?php _efs( 'opt-in-connect', $slug ) ?></button>
144
  </form>
145
  <?php endif ?>
146
- </div>
147
- <div class="fs-permissions">
148
- <a class="fs-trigger" href="#"><?php _efs( 'what-permissions', $slug ) ?></a>
149
- <ul>
150
- <li>
151
- <i class="dashicons dashicons-admin-users"></i>
152
-
153
- <div>
154
- <span><?php _efs( 'permissions-profile', $slug ) ?></span>
155
-
156
- <p><?php _efs( 'permissions-profile_desc', $slug ) ?></p>
157
- </div>
158
- </li>
159
- <li>
160
- <i class="dashicons dashicons-wordpress"></i>
161
-
162
- <div>
163
- <span><?php _efs( 'permissions-site', $slug ) ?></span>
164
-
165
- <p><?php _efs( 'permissions-site_desc', $slug ) ?></p>
166
- </div>
167
- </li>
168
- <?php if ( $fs->is_permission_requested( 'newsletter' ) ) : ?>
169
- <li>
170
- <i class="dashicons dashicons-email-alt"></i>
171
-
172
- <div>
173
- <span><?php _efs( 'permissions-newsletter', $slug ) ?></span>
174
-
175
- <p><?php _efs( 'permissions-newsletter_desc', $slug ) ?></p>
176
- </div>
177
- </li>
178
- <?php endif ?>
179
- <li>
180
- <i class="dashicons dashicons-admin-plugins"></i>
181
-
182
- <div>
183
- <span><?php _efs( 'permissions-events', $slug ) ?></span>
184
-
185
- <p><?php _efs( 'permissions-events_desc', $slug ) ?></p>
186
- </div>
187
- </li>
188
- </ul>
189
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
190
  <div class="fs-terms">
191
  <a href="https://freemius.com/privacy/" target="_blank"><?php _efs( 'privacy-policy', $slug ) ?></a>
192
  &nbsp;&nbsp;-&nbsp;&nbsp;
@@ -200,7 +232,8 @@
200
  $(document.body).css({'cursor': 'wait'});
201
  });
202
  $('.button.button-primary').on('click', function () {
203
- $(this).html('<?php _efs( 'activating' , $slug ) ?>...').css({'cursor': 'wait'});
 
204
  });
205
  $('.fs-permissions .fs-trigger').on('click', function () {
206
  $('.fs-permissions').toggleClass('fs-open');
6
  * @since 1.0.7
7
  */
8
 
9
+ if ( ! defined( 'ABSPATH' ) ) {
10
+ exit;
11
+ }
12
+
13
+ $slug = $VARS['slug'];
14
+ $fs = freemius( $slug );
15
+ $is_pending_activation = $fs->is_pending_activation();
16
 
17
  $fs->_enqueue_connect_essentials();
18
 
34
  // Insights platform information.
35
  'https://freemius.com/wordpress/insights/';
36
  ?>
37
+ <div id="fs_connect" class="wrap<?php if ( ! $fs->enable_anonymous() || $is_pending_activation ) {
38
  echo ' fs-anonymous-disabled';
39
  } ?>">
40
  <div class="fs-visual">
49
  </div>
50
  <div class="fs-content">
51
  <p><?php
52
+ if ( $is_pending_activation ) {
53
+ echo $fs->apply_filters( 'pending_activation_message', sprintf(
54
+ __fs( 'thanks-x', $slug ) . '<br>' .
55
+ __fs( 'pending-activation-message', $slug ),
56
+ $first_name,
57
+ '<b>' . $fs->get_plugin_name() . '</b>',
58
+ '<b>' . $current_user->user_email . '</b>'
59
+ ) );
60
+ } else {
61
+ $filter = 'connect_message';
62
+ $default_optin_message = 'connect-message';
63
+
64
+ if ( $fs->is_plugin_update() ) {
65
+ // If Freemius was added on a plugin update, set different
66
+ // opt-in message.
67
+ $default_optin_message = 'connect-message_on-update';
68
+
69
+ // If user customized the opt-in message on update, use
70
+ // that message. Otherwise, fallback to regular opt-in
71
+ // custom message if exist.
72
+ if ( $fs->has_filter( 'connect_message_on_update' ) ) {
73
+ $filter = 'connect_message_on_update';
74
+ }
75
  }
 
76
 
77
+ echo $fs->apply_filters( $filter,
78
+ sprintf(
79
+ __fs( 'hey-x', $slug ) . '<br>' .
80
+ __fs( $default_optin_message, $slug ),
81
+ $first_name,
82
+ '<b>' . $fs->get_plugin_name() . '</b>',
83
+ '<b>' . $current_user->user_login . '</b>',
84
+ '<a href="' . $site_url . '" target="_blank">' . $site_url . '</a>',
85
+ '<a href="' . $freemius_site_url . '" target="_blank">freemius.com</a>'
86
+ ),
87
  $first_name,
88
+ $fs->get_plugin_name(),
89
+ $current_user->user_login,
90
  '<a href="' . $site_url . '" target="_blank">' . $site_url . '</a>',
91
  '<a href="' . $freemius_site_url . '" target="_blank">freemius.com</a>'
92
+ );
93
+ }
 
 
 
 
 
94
  ?></p>
95
  </div>
96
  <div class="fs-actions">
97
+ <?php if ( $fs->enable_anonymous() && ! $is_pending_activation ) : ?>
98
  <a href="<?php echo wp_nonce_url( $fs->_get_admin_page_url( '', array( 'fs_action' => $slug . '_skip_activation' ) ), $slug . '_skip_activation' ) ?>"
99
  class="button button-secondary" tabindex="2"><?php _efs( 'skip', $slug ) ?></a>
100
  <?php endif ?>
101
+
102
  <?php $fs_user = Freemius::_get_user_by_email( $current_user->user_email ) ?>
103
+ <?php if ( is_object( $fs_user ) && ! $is_pending_activation ) : ?>
104
  <form action="" method="POST">
105
  <input type="hidden" name="fs_action" value="<?php echo $slug ?>_activate_existing">
106
  <?php wp_nonce_field( 'activate_existing_' . $fs->get_public_key() ) ?>
115
  'user_lastname' => $current_user->user_lastname,
116
  'user_nickname' => $current_user->user_nicename,
117
  'user_email' => $current_user->user_email,
118
+ 'user_ip' => WP_FS__REMOTE_ADDR,
119
  'plugin_slug' => $slug,
120
  'plugin_id' => $fs->get_id(),
121
  'plugin_public_key' => $fs->get_public_key(),
156
  <input type="hidden" name="<?php echo $name ?>" value="<?php echo esc_attr( $value ) ?>">
157
  <?php endforeach ?>
158
  <button class="button button-primary" tabindex="1"
159
+ type="submit"><?php _efs( $is_pending_activation ? 'resend-activation-email' : 'opt-in-connect', $slug ) ?></button>
160
  </form>
161
  <?php endif ?>
162
+ </div><?php
163
+
164
+ // Set core permission list items.
165
+ $permissions = array(
166
+ 'profile' => array(
167
+ 'icon-class' => 'dashicons dashicons-admin-users',
168
+ 'label' => __fs( 'permissions-profile' ),
169
+ 'desc' => __fs( 'permissions-profile_desc' ),
170
+ 'priority' => 5,
171
+ ),
172
+ 'site' => array(
173
+ 'icon-class' => 'dashicons dashicons-wordpress',
174
+ 'label' => __fs( 'permissions-site' ),
175
+ 'desc' => __fs( 'permissions-site_desc' ),
176
+ 'priority' => 10,
177
+ ),
178
+ 'events' => array(
179
+ 'icon-class' => 'dashicons dashicons-admin-plugins',
180
+ 'label' => __fs( 'permissions-events' ),
181
+ 'desc' => __fs( 'permissions-events_desc' ),
182
+ 'priority' => 20,
183
+ ),
184
+ );
185
+
186
+ // Add newsletter permissions if enabled.
187
+ if ( $fs->is_permission_requested( 'newsletter' ) ) {
188
+ $permissions['newsletter'] = array(
189
+ 'icon-class' => 'dashicons dashicons-email-alt',
190
+ 'label' => __fs( 'permissions-newsletter' ),
191
+ 'desc' => __fs( 'permissions-newsletter_desc' ),
192
+ 'priority' => 15,
193
+ );
194
+ }
195
+
196
+ // Allow filtering of the permissions list.
197
+ $permissions = $fs->apply_filters( 'permission_list', $permissions );
198
+
199
+ // Sort by priority.
200
+ uasort( $permissions, 'fs_sort_by_priority' );
201
+
202
+ if ( ! empty( $permissions ) ) : ?>
203
+ <div class="fs-permissions">
204
+ <a class="fs-trigger" href="#"><?php _efs( 'what-permissions', $slug ) ?></a>
205
+ <ul><?php
206
+ foreach ( $permissions as $id => $permission ) : ?>
207
+ <li id="fs-permission-<?php esc_attr_e( $id ); ?>"
208
+ class="fs-permission fs-<?php esc_attr_e( $id ); ?>">
209
+ <i class="<?php esc_attr_e( $permission['icon-class'] ); ?>"></i>
210
+
211
+ <div>
212
+ <span><?php esc_html_e( $permission['label'] ); ?></span>
213
+
214
+ <p><?php esc_html_e( $permission['desc'] ); ?></p>
215
+ </div>
216
+ </li>
217
+ <?php endforeach; ?>
218
+ </ul>
219
+ </div>
220
+ <?php endif; ?>
221
+
222
  <div class="fs-terms">
223
  <a href="https://freemius.com/privacy/" target="_blank"><?php _efs( 'privacy-policy', $slug ) ?></a>
224
  &nbsp;&nbsp;-&nbsp;&nbsp;
232
  $(document.body).css({'cursor': 'wait'});
233
  });
234
  $('.button.button-primary').on('click', function () {
235
+ $(this).addClass('fs-loading');
236
+ $(this).html('<?php _efs( $is_pending_activation ? 'sending-email' : 'activating' , $slug ) ?>...').css({'cursor': 'wait'});
237
  });
238
  $('.fs-permissions .fs-trigger').on('click', function () {
239
  $('.fs-permissions').toggleClass('fs-open');
classes/freemius/templates/contact.php CHANGED
@@ -6,6 +6,10 @@
6
  * @since 1.0.3
7
  */
8
 
 
 
 
 
9
  wp_enqueue_script( 'jquery' );
10
  wp_enqueue_script( 'json2' );
11
  fs_enqueue_local_script( 'postmessage', 'nojquery.ba-postmessage.min.js' );
@@ -34,6 +38,7 @@
34
  $query_params = array_merge( $_GET, array_merge( $context_params, array(
35
  'plugin_version' => $fs->get_plugin_version(),
36
  'wp_login_url' => wp_login_url(),
 
37
  // 'wp_admin_css' => get_bloginfo('wpurl') . "/wp-admin/load-styles.php?c=1&load=buttons,wp-admin,dashicons",
38
  ) ) );
39
  ?>
6
  * @since 1.0.3
7
  */
8
 
9
+ if ( ! defined( 'ABSPATH' ) ) {
10
+ exit;
11
+ }
12
+
13
  wp_enqueue_script( 'jquery' );
14
  wp_enqueue_script( 'json2' );
15
  fs_enqueue_local_script( 'postmessage', 'nojquery.ba-postmessage.min.js' );
38
  $query_params = array_merge( $_GET, array_merge( $context_params, array(
39
  'plugin_version' => $fs->get_plugin_version(),
40
  'wp_login_url' => wp_login_url(),
41
+ 'site_url' => get_site_url(),
42
  // 'wp_admin_css' => get_bloginfo('wpurl') . "/wp-admin/load-styles.php?c=1&load=buttons,wp-admin,dashicons",
43
  ) ) );
44
  ?>
classes/freemius/templates/deactivation-feedback-modal.php CHANGED
@@ -5,6 +5,11 @@
5
  * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
6
  * @since 1.1.2
7
  */
 
 
 
 
 
8
  $slug = $VARS['slug'];
9
  $fs = freemius( $slug );
10
 
@@ -19,7 +24,7 @@
19
  $reasons_list_items_html .= '<li class="' . $list_item_classes . '" data-input-type="' . $reason['input_type'] . '" data-input-placeholder="' . $reason['input_placeholder'] . '"><label><span><input type="radio" name="selected-reason" value="' . $reason['id'] . '"/></span><span>' . $reason['text'] . '</span></label></li>';
20
  }
21
  ?>
22
- <script>
23
  (function( $ ) {
24
  var reasonsHtml = <?php echo json_encode( $reasons_list_items_html ); ?>,
25
  modalHtml =
5
  * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
6
  * @since 1.1.2
7
  */
8
+
9
+ if ( ! defined( 'ABSPATH' ) ) {
10
+ exit;
11
+ }
12
+
13
  $slug = $VARS['slug'];
14
  $fs = freemius( $slug );
15
 
24
  $reasons_list_items_html .= '<li class="' . $list_item_classes . '" data-input-type="' . $reason['input_type'] . '" data-input-placeholder="' . $reason['input_placeholder'] . '"><label><span><input type="radio" name="selected-reason" value="' . $reason['id'] . '"/></span><span>' . $reason['text'] . '</span></label></li>';
25
  }
26
  ?>
27
+ <script type="text/javascript">
28
  (function( $ ) {
29
  var reasonsHtml = <?php echo json_encode( $reasons_list_items_html ); ?>,
30
  modalHtml =
classes/freemius/templates/debug.php CHANGED
@@ -1,135 +1,149 @@
1
  <?php
 
 
 
 
 
 
 
 
 
 
 
2
  global $fs_active_plugins;
3
 
4
  $fs_options = FS_Option_Manager::get_manager( WP_FS__ACCOUNTS_OPTION_NAME, true );
5
  ?>
6
- <h1><?php echo __fs( 'Freemius Debug' ) . ' - ' . __fs( 'SDK' ) . ' v.' . $fs_active_plugins->newest->version ?></h1>
7
- <h2><?php _efs( 'actions' ) ?></h2>
8
- <table>
9
- <tbody>
10
- <tr>
11
- <td>
12
- <!-- Delete All Accounts -->
13
- <form action="" method="POST">
14
- <input type="hidden" name="fs_action" value="delete_all_accounts">
15
- <?php wp_nonce_field( 'delete_all_accounts' ) ?>
16
- <button class="button button-primary"
17
- onclick="if (confirm('<?php _efs( 'delete-all-confirm' ) ?>')) this.parentNode.submit(); return false;"><?php _efs( 'delete-all-accounts' ) ?></button>
18
- </form>
19
- </td>
20
- <td>
21
- <!-- Clear API Cache -->
22
- <form action="" method="POST">
23
- <input type="hidden" name="fs_clear_api_cache" value="true">
24
- <button class="button button-primary"><?php _efs( 'clear-api-cache' ) ?></button>
25
- </form>
26
- </td>
27
- <td>
28
- <!-- Sync Data with Server -->
29
- <form action="" method="POST">
30
- <input type="hidden" name="background_sync" value="true">
31
- <button class="button button-primary"><?php _efs( 'sync-data-from-server' ) ?></button>
32
- </form>
33
- </td>
34
- </tr>
35
- </tbody>
36
- </table>
37
- <h2><?php _efs( 'sdk-versions' ) ?></h2>
38
- <table id="fs_sdks" class="widefat">
39
- <thead>
40
- <tr>
41
- <th><?php _efs( 'version' ) ?></th>
42
- <th><?php _efs( 'sdk-path' ) ?></th>
43
- <th><?php _efs( 'plugin-path' ) ?></th>
44
- <th><?php _efs( 'is-active' ) ?></th>
45
- </tr>
46
- </thead>
47
- <tbody>
48
- <?php foreach ( $fs_active_plugins->plugins as $sdk_path => &$data ) : ?>
49
- <?php $is_active = ( WP_FS__SDK_VERSION == $data->version ) ?>
50
- <tr<?php if ( $is_active ) {
51
- echo ' style="background: #E6FFE6; font-weight: bold"';
52
- } ?>>
53
- <td><?php echo $data->version ?></td>
54
- <td><?php echo $sdk_path ?></td>
55
- <td><?php echo $data->plugin_path ?></td>
56
- <td><?php echo ( $is_active ) ? 'Active' : 'Inactive' ?></td>
57
  </tr>
58
- <?php endforeach ?>
59
- </tbody>
60
- </table>
61
- <h2><?php _efs( 'plugins' ) ?></h2>
62
- <table id="fs_plugins" class="widefat">
63
- <thead>
64
- <tr>
65
- <th><?php _efs( 'id' ) ?></th>
66
- <th><?php _efs( 'slug' ) ?></th>
67
- <th><?php _efs( 'version' ) ?></th>
68
- <th><?php _efs( 'title' ) ?></th>
69
- <th><?php _efs( 'api' ) ?></th>
70
- <th><?php _efs( 'freemius-state' ) ?></th>
71
- <th><?php _efs( 'plugin-path' ) ?></th>
72
- <th><?php _efs( 'public-key' ) ?></th>
73
- </tr>
74
- </thead>
75
- <tbody>
76
- <?php $plugins = $fs_options->get_option( 'plugins' ) ?>
77
- <?php foreach ( $plugins as $slug => $data ) : ?>
78
- <?php $is_active = is_plugin_active( $data->file ) ?>
79
- <?php $fs = $is_active ? freemius( $slug ) : null ?>
80
- <tr<?php if ( $is_active ) {
81
- echo ' style="background: #E6FFE6; font-weight: bold"';
82
- } ?>>
83
- <td><?php echo $data->id ?></td>
84
- <td><?php echo $slug ?></td>
85
- <td><?php echo $data->version ?></td>
86
- <td><?php echo $data->title ?></td>
87
- <td><?php if ( $is_active ) {
88
- echo $fs->has_api_connectivity() ?
89
- __fs( 'connected' ) :
90
- __fs( 'blocked' );
91
- } ?></td>
92
- <td><?php if ( $is_active ) {
93
- echo $fs->is_on() ?
94
- __fs( 'on' ) :
95
- __fs( 'off' );
96
- } ?></td>
97
- <td><?php echo $data->file ?></td>
98
- <td><?php echo $data->public_key ?></td>
99
  </tr>
100
- <?php endforeach ?>
101
- </tbody>
102
- </table>
103
-
104
- <h2><?php _efs( 'plugin-installs' ) ?> / <?php _efs( 'sites' ) ?></h2>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
105
  <?php
106
  /**
107
  * @var FS_Site[] $sites
108
  */
109
  $sites = $VARS['sites'];
110
  ?>
111
- <table id="fs_installs" class="widefat">
112
- <thead>
113
- <tr>
114
- <th><?php _efs( 'id' ) ?></th>
115
- <th><?php _efs( 'plan' ) ?></th>
116
- <th><?php _efs( 'public-key' ) ?></th>
117
- <th><?php _efs( 'secret-key' ) ?></th>
118
- </tr>
119
- </thead>
120
- <tbody>
121
- <?php foreach ( $sites as $slug => $site ) : ?>
122
  <tr>
123
- <td><?php echo $site->id ?></td>
124
- <td><?php
125
- echo is_object( $site->plan ) ? $site->plan->name : ''
126
- ?></td>
127
- <td><?php echo $site->public_key ?></td>
128
- <td><?php echo $site->secret_key ?></td>
129
  </tr>
130
- <?php endforeach ?>
131
- </tbody>
132
- </table>
 
 
 
 
 
 
 
 
 
 
 
 
133
  <?php
134
  $addons = $VARS['addons'];
135
  ?>
@@ -164,34 +178,36 @@
164
  </tbody>
165
  </table>
166
  <?php endforeach ?>
167
- <h2><?php _efs( 'users' ) ?></h2>
168
  <?php
169
  /**
170
  * @var FS_User[] $users
171
  */
172
  $users = $VARS['users'];
173
  ?>
174
- <table id="fs_users" class="widefat">
175
- <thead>
176
- <tr>
177
- <th><?php _efs( 'id' ) ?></th>
178
- <th><?php _efs( 'name' ) ?></th>
179
- <th><?php _efs( 'email' ) ?></th>
180
- <th><?php _efs( 'verified' ) ?></th>
181
- <th><?php _efs( 'public-key' ) ?></th>
182
- <th><?php _efs( 'secret-key' ) ?></th>
183
- </tr>
184
- </thead>
185
- <tbody>
186
- <?php foreach ( $users as $user_id => $user ) : ?>
187
  <tr>
188
- <td><?php echo $user->id ?></td>
189
- <td><?php echo $user->get_name() ?></td>
190
- <td><?php echo $user->email ?></td>
191
- <td><?php echo json_encode( $user->is_verified ) ?></td>
192
- <td><?php echo $user->public_key ?></td>
193
- <td><?php echo $user->secret_key ?></td>
194
  </tr>
195
- <?php endforeach ?>
196
- </tbody>
197
- </table>
 
 
 
 
 
 
 
 
 
 
 
 
1
  <?php
2
+ /**
3
+ * @package Freemius
4
+ * @copyright Copyright (c) 2015, Freemius, Inc.
5
+ * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
6
+ * @since 1.1.1
7
+ */
8
+
9
+ if ( ! defined( 'ABSPATH' ) ) {
10
+ exit;
11
+ }
12
+
13
  global $fs_active_plugins;
14
 
15
  $fs_options = FS_Option_Manager::get_manager( WP_FS__ACCOUNTS_OPTION_NAME, true );
16
  ?>
17
+ <h1><?php echo __fs( 'Freemius Debug' ) . ' - ' . __fs( 'SDK' ) . ' v.' . $fs_active_plugins->newest->version ?></h1>
18
+ <h2><?php _efs( 'actions' ) ?></h2>
19
+ <table>
20
+ <tbody>
21
+ <tr>
22
+ <td>
23
+ <!-- Delete All Accounts -->
24
+ <form action="" method="POST">
25
+ <input type="hidden" name="fs_action" value="delete_all_accounts">
26
+ <?php wp_nonce_field( 'delete_all_accounts' ) ?>
27
+ <button class="button button-primary"
28
+ onclick="if (confirm('<?php _efs( 'delete-all-confirm' ) ?>')) this.parentNode.submit(); return false;"><?php _efs( 'delete-all-accounts' ) ?></button>
29
+ </form>
30
+ </td>
31
+ <td>
32
+ <!-- Clear API Cache -->
33
+ <form action="" method="POST">
34
+ <input type="hidden" name="fs_clear_api_cache" value="true">
35
+ <button class="button button-primary"><?php _efs( 'clear-api-cache' ) ?></button>
36
+ </form>
37
+ </td>
38
+ <td>
39
+ <!-- Sync Data with Server -->
40
+ <form action="" method="POST">
41
+ <input type="hidden" name="background_sync" value="true">
42
+ <button class="button button-primary"><?php _efs( 'sync-data-from-server' ) ?></button>
43
+ </form>
44
+ </td>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
45
  </tr>
46
+ </tbody>
47
+ </table>
48
+ <h2><?php _efs( 'sdk-versions' ) ?></h2>
49
+ <table id="fs_sdks" class="widefat">
50
+ <thead>
51
+ <tr>
52
+ <th><?php _efs( 'version' ) ?></th>
53
+ <th><?php _efs( 'sdk-path' ) ?></th>
54
+ <th><?php _efs( 'plugin-path' ) ?></th>
55
+ <th><?php _efs( 'is-active' ) ?></th>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
56
  </tr>
57
+ </thead>
58
+ <tbody>
59
+ <?php foreach ( $fs_active_plugins->plugins as $sdk_path => &$data ) : ?>
60
+ <?php $is_active = ( WP_FS__SDK_VERSION == $data->version ) ?>
61
+ <tr<?php if ( $is_active ) {
62
+ echo ' style="background: #E6FFE6; font-weight: bold"';
63
+ } ?>>
64
+ <td><?php echo $data->version ?></td>
65
+ <td><?php echo $sdk_path ?></td>
66
+ <td><?php echo $data->plugin_path ?></td>
67
+ <td><?php echo ( $is_active ) ? 'Active' : 'Inactive' ?></td>
68
+ </tr>
69
+ <?php endforeach ?>
70
+ </tbody>
71
+ </table>
72
+ <?php $plugins = $fs_options->get_option( 'plugins' ) ?>
73
+ <?php if ( is_array( $plugins ) && 0 < count( $plugins ) ) : ?>
74
+ <h2><?php _efs( 'plugins' ) ?></h2>
75
+ <table id="fs_plugins" class="widefat">
76
+ <thead>
77
+ <tr>
78
+ <th><?php _efs( 'id' ) ?></th>
79
+ <th><?php _efs( 'slug' ) ?></th>
80
+ <th><?php _efs( 'version' ) ?></th>
81
+ <th><?php _efs( 'title' ) ?></th>
82
+ <th><?php _efs( 'api' ) ?></th>
83
+ <th><?php _efs( 'freemius-state' ) ?></th>
84
+ <th><?php _efs( 'plugin-path' ) ?></th>
85
+ <th><?php _efs( 'public-key' ) ?></th>
86
+ </tr>
87
+ </thead>
88
+ <tbody>
89
+ <?php foreach ( $plugins as $slug => $data ) : ?>
90
+ <?php $is_active = is_plugin_active( $data->file ) ?>
91
+ <?php $fs = $is_active ? freemius( $slug ) : null ?>
92
+ <tr<?php if ( $is_active ) {
93
+ echo ' style="background: #E6FFE6; font-weight: bold"';
94
+ } ?>>
95
+ <td><?php echo $data->id ?></td>
96
+ <td><?php echo $slug ?></td>
97
+ <td><?php echo $data->version ?></td>
98
+ <td><?php echo $data->title ?></td>
99
+ <td><?php if ( $is_active ) {
100
+ echo $fs->has_api_connectivity() ?
101
+ __fs( 'connected' ) :
102
+ __fs( 'blocked' );
103
+ } ?></td>
104
+ <td><?php if ( $is_active ) {
105
+ echo $fs->is_on() ?
106
+ __fs( 'on' ) :
107
+ __fs( 'off' );
108
+ } ?></td>
109
+ <td><?php echo $data->file ?></td>
110
+ <td><?php echo $data->public_key ?></td>
111
+ </tr>
112
+ <?php endforeach ?>
113
+ </tbody>
114
+ </table>
115
+ <?php endif ?>
116
  <?php
117
  /**
118
  * @var FS_Site[] $sites
119
  */
120
  $sites = $VARS['sites'];
121
  ?>
122
+ <?php if ( is_array( $sites ) && 0 < count( $sites ) ) : ?>
123
+ <h2><?php _efs( 'plugin-installs' ) ?> / <?php _efs( 'sites' ) ?></h2>
124
+ <table id="fs_installs" class="widefat">
125
+ <thead>
 
 
 
 
 
 
 
126
  <tr>
127
+ <th><?php _efs( 'id' ) ?></th>
128
+ <th><?php _efs( 'plan' ) ?></th>
129
+ <th><?php _efs( 'public-key' ) ?></th>
130
+ <th><?php _efs( 'secret-key' ) ?></th>
 
 
131
  </tr>
132
+ </thead>
133
+ <tbody>
134
+ <?php foreach ( $sites as $slug => $site ) : ?>
135
+ <tr>
136
+ <td><?php echo $site->id ?></td>
137
+ <td><?php
138
+ echo is_object( $site->plan ) ? $site->plan->name : ''
139
+ ?></td>
140
+ <td><?php echo $site->public_key ?></td>
141
+ <td><?php echo $site->secret_key ?></td>
142
+ </tr>
143
+ <?php endforeach ?>
144
+ </tbody>
145
+ </table>
146
+ <?php endif ?>
147
  <?php
148
  $addons = $VARS['addons'];
149
  ?>
178
  </tbody>
179
  </table>
180
  <?php endforeach ?>
 
181
  <?php
182
  /**
183
  * @var FS_User[] $users
184
  */
185
  $users = $VARS['users'];
186
  ?>
187
+ <?php if ( is_array( $users ) && 0 < count( $users ) ) : ?>
188
+ <h2><?php _efs( 'users' ) ?></h2>
189
+ <table id="fs_users" class="widefat">
190
+ <thead>
 
 
 
 
 
 
 
 
 
191
  <tr>
192
+ <th><?php _efs( 'id' ) ?></th>
193
+ <th><?php _efs( 'name' ) ?></th>
194
+ <th><?php _efs( 'email' ) ?></th>
195
+ <th><?php _efs( 'verified' ) ?></th>
196
+ <th><?php _efs( 'public-key' ) ?></th>
197
+ <th><?php _efs( 'secret-key' ) ?></th>
198
  </tr>
199
+ </thead>
200
+ <tbody>
201
+ <?php foreach ( $users as $user_id => $user ) : ?>
202
+ <tr>
203
+ <td><?php echo $user->id ?></td>
204
+ <td><?php echo $user->get_name() ?></td>
205
+ <td><?php echo $user->email ?></td>
206
+ <td><?php echo json_encode( $user->is_verified ) ?></td>
207
+ <td><?php echo $user->public_key ?></td>
208
+ <td><?php echo $user->secret_key ?></td>
209
+ </tr>
210
+ <?php endforeach ?>
211
+ </tbody>
212
+ </table>
213
+ <?php endif ?>
classes/freemius/templates/email.php CHANGED
@@ -6,6 +6,10 @@
6
  * @since 1.1.1
7
  */
8
 
 
 
 
 
9
  $sections = $VARS['sections'];
10
  ?>
11
  <table>
6
  * @since 1.1.1
7
  */
8
 
9
+ if ( ! defined( 'ABSPATH' ) ) {
10
+ exit;
11
+ }
12
+
13
  $sections = $VARS['sections'];
14
  ?>
15
  <table>
classes/freemius/templates/firewall-issues-js.php CHANGED
@@ -9,6 +9,10 @@
9
  * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
10
  * @since 1.0.9
11
  */
 
 
 
 
12
  ?>
13
  <script type="text/javascript">
14
  jQuery(document).ready(function ($) {
9
  * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
10
  * @since 1.0.9
11
  */
12
+
13
+ if ( ! defined( 'ABSPATH' ) ) {
14
+ exit;
15
+ }
16
  ?>
17
  <script type="text/javascript">
18
  jQuery(document).ready(function ($) {
classes/freemius/templates/pending-activation.php DELETED
@@ -1,157 +0,0 @@
1
- <?php
2
- /**
3
- * @package Freemius
4
- * @copyright Copyright (c) 2015, Freemius, Inc.
5
- * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
6
- * @since 1.0.9
7
- */
8
-
9
- wp_enqueue_script( 'jquery' );
10
- wp_enqueue_script( 'json2' );
11
- fs_enqueue_local_script( 'postmessage', 'nojquery.ba-postmessage.min.js' );
12
- fs_enqueue_local_script( 'fs-postmessage', 'postmessage.js' );
13
-
14
- fs_enqueue_local_style( 'fs_connect', '/admin/connect.css' );
15
-
16
- $slug = $VARS['slug'];
17
- $fs = freemius( $slug );
18
- $current_user = wp_get_current_user();
19
-
20
- $first_name = $current_user->user_firstname;
21
- if ( empty( $first_name ) ) {
22
- $first_name = $current_user->nickname;
23
- }
24
-
25
- $site_url = get_site_url();
26
- $protocol_pos = strpos( $site_url, '://' );
27
- if ( false !== $protocol_pos ) {
28
- $site_url = substr( $site_url, $protocol_pos + 3 );
29
- }
30
- ?>
31
- <div id="fs_connect" class="wrap fs-anonymous-disabled">
32
- <div class="fs-visual">
33
- <b class="fs-site-icon"><i class="dashicons dashicons-wordpress"></i></b>
34
- <i class="dashicons dashicons-plus fs-first"></i>
35
-
36
- <div class="fs-plugin-icon">
37
- <object data="//plugins.svn.wordpress.org/<?php echo $slug ?>/assets/icon-128x128.png" type="image/png">
38
- <object data="//plugins.svn.wordpress.org/<?php echo $slug ?>/assets/icon-128x128.jpg" type="image/png">
39
- <object data="//plugins.svn.wordpress.org/<?php echo $slug ?>/assets/icon-256x256.png"
40
- type="image/png">
41
- <object data="//plugins.svn.wordpress.org/<?php echo $slug ?>/assets/icon-256x256.jpg"
42
- type="image/png">
43
- <img src="//wimg.freemius.com/plugin-icon.png"/>
44
- </object>
45
- </object>
46
- </object>
47
- </object>
48
- </div>
49
- <i class="dashicons dashicons-plus fs-second"></i>
50
- <img class="fs-connect-logo" width="80" height="80" src="//img.freemius.com/connect-logo.png"/>
51
- </div>
52
- <div class="fs-content">
53
- <p><?php
54
- echo $fs->apply_filters( 'pending_activation_message', sprintf(
55
- __fs( 'thanks-x', $slug ) . '<br>' .
56
- __fs( 'pending-activation-message', $slug ),
57
- $first_name,
58
- '<b>' . $fs->get_plugin_name() . '</b>',
59
- '<b>' . $current_user->user_email . '</b>'
60
- ) )
61
- ?></p>
62
- </div>
63
- <div class="fs-actions">
64
- <?php $fs_user = Freemius::_get_user_by_email( $current_user->user_email ) ?>
65
- <form method="post" action="<?php echo WP_FS__ADDRESS ?>/action/service/user/install/">
66
- <?php
67
- $params = array(
68
- 'user_firstname' => $current_user->user_firstname,
69
- 'user_lastname' => $current_user->user_lastname,
70
- 'user_nickname' => $current_user->user_nicename,
71
- 'user_email' => $current_user->user_email,
72
- 'plugin_slug' => $slug,
73
- 'plugin_id' => $fs->get_id(),
74
- 'plugin_public_key' => $fs->get_public_key(),
75
- 'plugin_version' => $fs->get_plugin_version(),
76
- 'return_url' => wp_nonce_url( $fs->_get_admin_page_url(
77
- '',
78
- array( 'fs_action' => $slug . '_activate_new' )
79
- ), $slug . '_activate_new' ),
80
- 'account_url' => wp_nonce_url( $fs->_get_admin_page_url(
81
- 'account',
82
- array( 'fs_action' => 'sync_user' )
83
- ), 'sync_user' ),
84
- 'site_url' => get_site_url(),
85
- 'site_name' => get_bloginfo( 'name' ),
86
- 'platform_version' => get_bloginfo( 'version' ),
87
- 'language' => get_bloginfo( 'language' ),
88
- 'charset' => get_bloginfo( 'charset' ),
89
- );
90
- ?>
91
- <?php foreach ( $params as $name => $value ) : ?>
92
- <input type="hidden" name="<?php echo $name ?>" value="<?php echo esc_attr( $value ) ?>">
93
- <?php endforeach ?>
94
- <button class="button button-primary" tabindex="1"
95
- type="submit"><?php _efs( 'resend-activation-email', $slug ) ?></button>
96
- </form>
97
- </div>
98
- <div class="fs-permissions">
99
- <a class="fs-trigger" href="#"><?php _efs( 'what-permissions', $slug ) ?></a>
100
- <ul>
101
- <li>
102
- <i class="dashicons dashicons-admin-users"></i>
103
-
104
- <div>
105
- <span><?php _efs( 'permissions-profile', $slug ) ?></span>
106
-
107
- <p><?php _efs( 'permissions-profile_desc', $slug ) ?></p>
108
- </div>
109
- </li>
110
- <li>
111
- <i class="dashicons dashicons-wordpress"></i>
112
-
113
- <div>
114
- <span><?php _efs( 'permissions-site', $slug ) ?></span>
115
-
116
- <p><?php _efs( 'permissions-site_desc', $slug ) ?></p>
117
- </div>
118
- </li>
119
- <?php if ( $fs->is_permission_requested( 'newsletter' ) ) : ?>
120
- <li>
121
- <i class="dashicons dashicons-email-alt"></i>
122
-
123
- <div>
124
- <span><?php _efs( 'permissions-newsletter', $slug ) ?></span>
125
-
126
- <p><?php _efs( 'permissions-newsletter_desc', $slug ) ?></p>
127
- </div>
128
- </li>
129
- <?php endif ?>
130
- <li>
131
- <i class="dashicons dashicons-admin-plugins"></i>
132
-
133
- <div>
134
- <span><?php _efs( 'permissions-events', $slug ) ?></span>
135
-
136
- <p><?php _efs( 'permissions-events_desc', $slug ) ?></p>
137
- </div>
138
- </li>
139
- </ul>
140
- </div>
141
- <div class="fs-terms">
142
- <a href="https://freemius.com/privacy/" target="_blank"><?php _efs( 'privacy-policy', $slug ) ?></a>
143
- &nbsp;&nbsp;-&nbsp;&nbsp;
144
- <a href="https://freemius.com/terms/" target="_blank"><?php _efs( 'tos', $slug ) ?></a>
145
- </div>
146
- </div>
147
- <script type="text/javascript">
148
- (function ($) {
149
- $('.button.button-primary').on('click', function () {
150
- $(document.body).css({'cursor': 'wait'});
151
- $(this).html('Sending email...').css({'cursor': 'wait'});
152
- });
153
- $('.fs-permissions .fs-trigger').on('click', function () {
154
- $('.fs-permissions').toggleClass('fs-open');
155
- });
156
- })(jQuery);
157
- </script>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
classes/freemius/templates/plugin-icon.php CHANGED
@@ -5,6 +5,11 @@
5
  * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
6
  * @since 1.1.4
7
  */
 
 
 
 
 
8
  $slug = $VARS['slug'];
9
  $fs = freemius( $slug );
10
 
5
  * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
6
  * @since 1.1.4
7
  */
8
+
9
+ if ( ! defined( 'ABSPATH' ) ) {
10
+ exit;
11
+ }
12
+
13
  $slug = $VARS['slug'];
14
  $fs = freemius( $slug );
15
 
classes/freemius/templates/plugin-info/description.php CHANGED
@@ -1,4 +1,15 @@
1
  <?php
 
 
 
 
 
 
 
 
 
 
 
2
  /**
3
  * @var FS_Plugin $plugin
4
  */
1
  <?php
2
+ /**
3
+ * @package Freemius
4
+ * @copyright Copyright (c) 2015, Freemius, Inc.
5
+ * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
6
+ * @since 1.0.6
7
+ */
8
+
9
+ if ( ! defined( 'ABSPATH' ) ) {
10
+ exit;
11
+ }
12
+
13
  /**
14
  * @var FS_Plugin $plugin
15
  */
classes/freemius/templates/plugin-info/features.php CHANGED
@@ -1,4 +1,15 @@
1
  <?php
 
 
 
 
 
 
 
 
 
 
 
2
  /**
3
  * @var FS_Plugin $plugin
4
  */
1
  <?php
2
+ /**
3
+ * @package Freemius
4
+ * @copyright Copyright (c) 2015, Freemius, Inc.
5
+ * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
6
+ * @since 1.0.6
7
+ */
8
+
9
+ if ( ! defined( 'ABSPATH' ) ) {
10
+ exit;
11
+ }
12
+
13
  /**
14
  * @var FS_Plugin $plugin
15
  */
classes/freemius/templates/plugin-info/screenshots.php CHANGED
@@ -1,4 +1,15 @@
1
  <?php
 
 
 
 
 
 
 
 
 
 
 
2
  /**
3
  * @var FS_Plugin $plugin
4
  */
1
  <?php
2
+ /**
3
+ * @package Freemius
4
+ * @copyright Copyright (c) 2015, Freemius, Inc.
5
+ * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
6
+ * @since 1.0.6
7
+ */
8
+
9
+ if ( ! defined( 'ABSPATH' ) ) {
10
+ exit;
11
+ }
12
+
13
  /**
14
  * @var FS_Plugin $plugin
15
  */
classes/freemius/templates/powered-by.php CHANGED
@@ -6,8 +6,12 @@
6
  * @since 1.0.5
7
  */
8
 
 
 
 
 
9
  /**
10
- * KEEP THE POWERED BY TAB AND GET ADDITIONAL - 2% - OFF THE COMMISSION
11
  */
12
 
13
  wp_enqueue_script( 'jquery' );
6
  * @since 1.0.5
7
  */
8
 
9
+ if ( ! defined( 'ABSPATH' ) ) {
10
+ exit;
11
+ }
12
+
13
  /**
14
+ * KEEP THE POWERED BY TAB AND GET ADDITIONAL - 1% - OFF THE COMMISSION
15
  */
16
 
17
  wp_enqueue_script( 'jquery' );
classes/freemius/templates/pricing.php CHANGED
@@ -6,6 +6,10 @@
6
  * @since 1.0.3
7
  */
8
 
 
 
 
 
9
  wp_enqueue_script( 'jquery' );
10
  wp_enqueue_script( 'json2' );
11
  fs_enqueue_local_script( 'postmessage', 'nojquery.ba-postmessage.min.js' );
6
  * @since 1.0.3
7
  */
8
 
9
+ if ( ! defined( 'ABSPATH' ) ) {
10
+ exit;
11
+ }
12
+
13
  wp_enqueue_script( 'jquery' );
14
  wp_enqueue_script( 'json2' );
15
  fs_enqueue_local_script( 'postmessage', 'nojquery.ba-postmessage.min.js' );
classes/freemius/templates/sticky-admin-notice-js.php CHANGED
@@ -8,6 +8,10 @@
8
  * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
9
  * @since 1.0.7
10
  */
 
 
 
 
11
  ?>
12
  <script type="text/javascript" >
13
  jQuery(document).ready(function($) {
8
  * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
9
  * @since 1.0.7
10
  */
11
+
12
+ if ( ! defined( 'ABSPATH' ) ) {
13
+ exit;
14
+ }
15
  ?>
16
  <script type="text/javascript" >
17
  jQuery(document).ready(function($) {
language/aryo-activity-log.pot CHANGED
@@ -1,14 +1,14 @@
1
  # SOME DESCRIPTIVE TITLE.
2
  # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
3
- # This file is distributed under the same license as the aryo-activity-log package.
4
  # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
5
  #
6
  #, fuzzy
7
  msgid ""
8
  msgstr ""
9
- "Project-Id-Version: aryo-activity-log 2.2.8\n"
10
  "Report-Msgid-Bugs-To: \n"
11
- "POT-Creation-Date: 2016-01-17 16:31+0200\n"
12
  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14
  "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -400,12 +400,12 @@ msgid ""
400
  msgstr ""
401
 
402
  #: classes/freemius/includes/fs-plugin-functions.php:392
403
- #: classes/freemius/includes/i18n.php:99
404
  msgid "Install Now"
405
  msgstr ""
406
 
407
  #: classes/freemius/includes/fs-plugin-functions.php:397
408
- #: classes/freemius/includes/i18n.php:100
409
  msgid "Install Update Now"
410
  msgstr ""
411
 
@@ -418,372 +418,378 @@ msgstr ""
418
  msgid "Latest Version Installed"
419
  msgstr ""
420
 
421
- #: classes/freemius/includes/i18n.php:24
422
  msgid "Account"
423
  msgstr ""
424
 
425
- #: classes/freemius/includes/i18n.php:25
426
  msgid "Add On"
427
  msgstr ""
428
 
429
- #: classes/freemius/includes/i18n.php:26
430
  msgid "Contact Us"
431
  msgstr ""
432
 
433
- #: classes/freemius/includes/i18n.php:27
434
  msgid "Change Ownership"
435
  msgstr ""
436
 
437
- #: classes/freemius/includes/i18n.php:28
438
  msgid "Support"
439
  msgstr ""
440
 
441
- #: classes/freemius/includes/i18n.php:29
442
  msgid "Support Forum"
443
  msgstr ""
444
 
445
- #: classes/freemius/includes/i18n.php:30
446
  msgid "Add Ons"
447
  msgstr ""
448
 
449
- #: classes/freemius/includes/i18n.php:31
450
  msgctxt "verb"
451
  msgid "Upgrade"
452
  msgstr ""
453
 
454
- #: classes/freemius/includes/i18n.php:32
455
  msgid "Awesome"
456
  msgstr ""
457
 
458
- #: classes/freemius/includes/i18n.php:33
459
  msgctxt "noun"
460
  msgid "Pricing"
461
  msgstr ""
462
 
463
- #: classes/freemius/includes/i18n.php:34
464
  msgctxt "noun"
465
  msgid "Price"
466
  msgstr ""
467
 
468
- #: classes/freemius/includes/i18n.php:35
469
  msgid "Unlimited Updates"
470
  msgstr ""
471
 
472
- #: classes/freemius/includes/i18n.php:36
473
  msgctxt "verb"
474
  msgid "Downgrade"
475
  msgstr ""
476
 
477
- #: classes/freemius/includes/i18n.php:37
478
  msgid "Free Trial"
479
  msgstr ""
480
 
481
- #: classes/freemius/includes/i18n.php:38
482
  msgid "Details"
483
  msgstr ""
484
 
485
- #: classes/freemius/includes/i18n.php:39
486
  msgid "Account Details"
487
  msgstr ""
488
 
489
- #: classes/freemius/includes/i18n.php:40
490
  msgctxt "verb"
491
  msgid "Delete"
492
  msgstr ""
493
 
494
- #: classes/freemius/includes/i18n.php:41
495
  msgid "Delete Account"
496
  msgstr ""
497
 
498
- #: classes/freemius/includes/i18n.php:42
499
  msgctxt "as close a window"
500
  msgid "Dismiss"
501
  msgstr ""
502
 
503
- #: classes/freemius/includes/i18n.php:43
504
  msgctxt "as product pricing plan"
505
  msgid "Plan"
506
  msgstr ""
507
 
508
- #: classes/freemius/includes/i18n.php:44
509
  msgid "Change Plan"
510
  msgstr ""
511
 
512
- #: classes/freemius/includes/i18n.php:45
513
  #, php-format
514
  msgctxt "as download professional version"
515
  msgid "Download %s Version"
516
  msgstr ""
517
 
518
- #: classes/freemius/includes/i18n.php:46
519
  #, php-format
520
  msgctxt "as download professional version now"
521
  msgid "Download %s version now"
522
  msgstr ""
523
 
524
- #: classes/freemius/includes/i18n.php:47
525
  msgctxt "as download latest version"
526
  msgid "Download Latest"
527
  msgstr ""
528
 
529
- #: classes/freemius/includes/i18n.php:48
530
  #, php-format
531
  msgctxt "E.g. you have a professional license."
532
  msgid "You have a %s license."
533
  msgstr ""
534
 
535
- #: classes/freemius/includes/i18n.php:49
536
  msgid "New"
537
  msgstr ""
538
 
539
- #: classes/freemius/includes/i18n.php:50
540
  msgid "Free"
541
  msgstr ""
542
 
543
- #: classes/freemius/includes/i18n.php:51
544
  msgctxt "as trial plan"
545
  msgid "Trial"
546
  msgstr ""
547
 
548
- #: classes/freemius/includes/i18n.php:52
549
  msgctxt "verb"
550
  msgid "Purchase"
551
  msgstr ""
552
 
553
- #: classes/freemius/includes/i18n.php:53
554
  msgid "Single Site License"
555
  msgstr ""
556
 
557
- #: classes/freemius/includes/i18n.php:54
558
  msgid "Unlimited Licenses"
559
  msgstr ""
560
 
561
- #: classes/freemius/includes/i18n.php:55
562
  #, php-format
563
  msgid "Up to %s Sites"
564
  msgstr ""
565
 
566
- #: classes/freemius/includes/i18n.php:56
 
 
 
 
 
567
  #, php-format
568
  msgctxt "e.g. Professional Plan"
569
  msgid "%s Plan"
570
  msgstr ""
571
 
572
- #: classes/freemius/includes/i18n.php:57
573
  #, php-format
574
  msgid "You are just one step away - %s"
575
  msgstr ""
576
 
577
- #: classes/freemius/includes/i18n.php:58
578
  #, php-format
579
  msgctxt "%s - plugin name. As complete \"Jetpack\" activation now"
580
  msgid "Complete \"%s\" Activation Now"
581
  msgstr ""
582
 
583
- #: classes/freemius/includes/i18n.php:59
584
  #, php-format
585
  msgid "We made a few tweaks to the plugin, %s"
586
  msgstr ""
587
 
588
- #: classes/freemius/includes/i18n.php:60
589
  #, php-format
590
  msgid "Opt-in to make \"%s\" Better!"
591
  msgstr ""
592
 
593
- #: classes/freemius/includes/i18n.php:61
594
  msgid "Error"
595
  msgstr ""
596
 
597
- #: classes/freemius/includes/i18n.php:62
598
  msgid ""
599
  "Freemius SDK couldn't find the plugin's main file. Please contact "
600
  "sdk@freemius.com with the current error."
601
  msgstr ""
602
 
603
- #: classes/freemius/includes/i18n.php:65
604
  msgctxt "as expiration date"
605
  msgid "Expiration"
606
  msgstr ""
607
 
608
- #: classes/freemius/includes/i18n.php:66
609
  msgid "not verified"
610
  msgstr ""
611
 
612
- #: classes/freemius/includes/i18n.php:67
613
  msgid "Verify Email"
614
  msgstr ""
615
 
616
- #: classes/freemius/includes/i18n.php:68
617
  #, php-format
618
  msgctxt "e.g. expires in 2 months"
619
  msgid "Expires in %s"
620
  msgstr ""
621
 
622
- #: classes/freemius/includes/i18n.php:69
623
  #, php-format
624
  msgctxt "e.g. auto renews in 2 months"
625
  msgid "Auto renews in %s"
626
  msgstr ""
627
 
628
- #: classes/freemius/includes/i18n.php:70
629
  msgid "No expiration"
630
  msgstr ""
631
 
632
- #: classes/freemius/includes/i18n.php:71
633
  msgid "Expired"
634
  msgstr ""
635
 
636
- #: classes/freemius/includes/i18n.php:72
637
  #, php-format
638
  msgid "In %s"
639
  msgstr ""
640
 
641
- #: classes/freemius/includes/i18n.php:73
642
  msgctxt "as plugin version"
643
  msgid "Version"
644
  msgstr ""
645
 
646
- #: classes/freemius/includes/i18n.php:74
647
  msgid "Name"
648
  msgstr ""
649
 
650
- #: classes/freemius/includes/i18n.php:75
651
  #: notifications/class-aal-notification-email.php:15
652
  msgid "Email"
653
  msgstr ""
654
 
655
- #: classes/freemius/includes/i18n.php:76
656
  msgid "Verified"
657
  msgstr ""
658
 
659
- #: classes/freemius/includes/i18n.php:77 language/strings.php:29
660
  msgid "Plugin"
661
  msgstr ""
662
 
663
- #: classes/freemius/includes/i18n.php:78
664
  msgid "Plugins"
665
  msgstr ""
666
 
667
- #: classes/freemius/includes/i18n.php:79
668
  msgctxt "as file/folder path"
669
  msgid "Path"
670
  msgstr ""
671
 
672
- #: classes/freemius/includes/i18n.php:80
673
  msgid "Title"
674
  msgstr ""
675
 
676
- #: classes/freemius/includes/i18n.php:81
677
  msgctxt "as WP plugin slug"
678
  msgid "Slug"
679
  msgstr ""
680
 
681
- #: classes/freemius/includes/i18n.php:82
682
  msgid "ID"
683
  msgstr ""
684
 
685
- #: classes/freemius/includes/i18n.php:83
686
  msgid "Users"
687
  msgstr ""
688
 
689
- #: classes/freemius/includes/i18n.php:84
690
  msgid "Plugin Installs"
691
  msgstr ""
692
 
693
- #: classes/freemius/includes/i18n.php:85
694
  msgctxt "like websites"
695
  msgid "Sites"
696
  msgstr ""
697
 
698
- #: classes/freemius/includes/i18n.php:86
699
  msgid "User ID"
700
  msgstr ""
701
 
702
- #: classes/freemius/includes/i18n.php:87
703
  msgid "Site ID"
704
  msgstr ""
705
 
706
- #: classes/freemius/includes/i18n.php:88
707
  msgid "Public Key"
708
  msgstr ""
709
 
710
- #: classes/freemius/includes/i18n.php:89
711
  msgid "Secret Key"
712
  msgstr ""
713
 
714
- #: classes/freemius/includes/i18n.php:90
715
  msgctxt "as secret encryption key missing"
716
  msgid "No Secret"
717
  msgstr ""
718
 
719
- #: classes/freemius/includes/i18n.php:91
720
  msgid "No ID"
721
  msgstr ""
722
 
723
- #: classes/freemius/includes/i18n.php:92
724
  msgctxt "as synchronize license"
725
  msgid "Sync License"
726
  msgstr ""
727
 
728
- #: classes/freemius/includes/i18n.php:93
729
  msgctxt "as synchronize"
730
  msgid "Sync"
731
  msgstr ""
732
 
733
- #: classes/freemius/includes/i18n.php:94
734
  msgid "Deactivate License"
735
  msgstr ""
736
 
737
- #: classes/freemius/includes/i18n.php:95
738
  msgid "Activate"
739
  msgstr ""
740
 
741
- #: classes/freemius/includes/i18n.php:96 classes/freemius/includes/i18n.php:118
 
742
  msgid "Deactivate"
743
  msgstr ""
744
 
745
- #: classes/freemius/includes/i18n.php:97
746
  msgctxt "active mode"
747
  msgid "Active"
748
  msgstr ""
749
 
750
- #: classes/freemius/includes/i18n.php:98
751
  msgctxt "is active mode?"
752
  msgid "Is Active"
753
  msgstr ""
754
 
755
- #: classes/freemius/includes/i18n.php:101
756
  #, php-format
757
  msgid "More information about %s"
758
  msgstr ""
759
 
760
- #: classes/freemius/includes/i18n.php:102
761
  msgid "Localhost"
762
  msgstr ""
763
 
764
- #: classes/freemius/includes/i18n.php:103
765
  #, php-format
766
  msgctxt "as activate Professional plan"
767
  msgid "Activate %s Plan"
768
  msgstr ""
769
 
770
- #: classes/freemius/includes/i18n.php:104
771
  #, php-format
772
  msgid "What is your %s?"
773
  msgstr ""
774
 
775
- #: classes/freemius/includes/i18n.php:105
776
  msgid "Activate this add-on"
777
  msgstr ""
778
 
779
- #: classes/freemius/includes/i18n.php:106
780
  msgid ""
781
  "Deactivating your license will block all premium features, but will enable "
782
  "you to activate the license on another site. Are you sure you want to "
783
  "proceed?"
784
  msgstr ""
785
 
786
- #: classes/freemius/includes/i18n.php:107
787
  #, php-format
788
  msgid ""
789
  "Deleting the account will automatically deactivate your %s plan license so "
@@ -792,162 +798,162 @@ msgid ""
792
  "account. Are you sure you would like to continue with the deletion?"
793
  msgstr ""
794
 
795
- #: classes/freemius/includes/i18n.php:108
796
  msgid ""
797
  "Deletion is not temporary. Only delete if you no longer want to use this "
798
  "plugin anymore. Are you sure you would like to continue with the deletion?"
799
  msgstr ""
800
 
801
- #: classes/freemius/includes/i18n.php:109
802
  #, php-format
803
  msgid ""
804
  "Downgrading your plan will immediately stop all future recurring payments "
805
  "and your %s plan license will expire in %s."
806
  msgstr ""
807
 
808
- #: classes/freemius/includes/i18n.php:110
809
  #, php-format
810
  msgid ""
811
  "You can still enjoy all %s features but you will not have access to plugin "
812
  "updates and support."
813
  msgstr ""
814
 
815
- #: classes/freemius/includes/i18n.php:111
816
  #, php-format
817
  msgid ""
818
  "Once your license expire you can still use the Free version but you will NOT "
819
  "have access to the %s features."
820
  msgstr ""
821
 
822
- #: classes/freemius/includes/i18n.php:112
823
  msgid "Are you sure you want to proceed?"
824
  msgstr ""
825
 
826
- #: classes/freemius/includes/i18n.php:115
827
  #, php-format
828
  msgid "Add Ons for %s"
829
  msgstr ""
830
 
831
- #: classes/freemius/includes/i18n.php:117
832
  msgid "If you have a moment, please let us know why you are deactivating"
833
  msgstr ""
834
 
835
- #: classes/freemius/includes/i18n.php:119
836
  msgid "Yes - Deactivate"
837
  msgstr ""
838
 
839
- #: classes/freemius/includes/i18n.php:120
840
  msgid "Submit & Deactivate"
841
  msgstr ""
842
 
843
- #: classes/freemius/includes/i18n.php:121
844
  msgctxt "the text of the cancel button of the plugin deactivation dialog box."
845
  msgid "Cancel"
846
  msgstr ""
847
 
848
- #: classes/freemius/includes/i18n.php:122
849
  msgid "I no longer need the plugin"
850
  msgstr ""
851
 
852
- #: classes/freemius/includes/i18n.php:123
853
  msgid "I found a better plugin"
854
  msgstr ""
855
 
856
- #: classes/freemius/includes/i18n.php:124
857
  msgid "I only needed the plugin for a short period"
858
  msgstr ""
859
 
860
- #: classes/freemius/includes/i18n.php:125
861
  msgid "The plugin broke my site"
862
  msgstr ""
863
 
864
- #: classes/freemius/includes/i18n.php:126
865
  msgid "The plugin suddenly stopped working"
866
  msgstr ""
867
 
868
- #: classes/freemius/includes/i18n.php:127
869
  msgid "I can't pay for it anymore"
870
  msgstr ""
871
 
872
- #: classes/freemius/includes/i18n.php:128
873
  msgctxt ""
874
  "the text of the \"other\" reason for deactivating the plugin that is shown "
875
  "in the modal box."
876
  msgid "Other"
877
  msgstr ""
878
 
879
- #: classes/freemius/includes/i18n.php:129
880
  msgid "What's the plugin's name?"
881
  msgstr ""
882
 
883
- #: classes/freemius/includes/i18n.php:130
884
  msgid "What price would you feel comfortable paying?"
885
  msgstr ""
886
 
887
- #: classes/freemius/includes/i18n.php:131
888
  msgid "I couldn't understand how to make it work"
889
  msgstr ""
890
 
891
- #: classes/freemius/includes/i18n.php:132
892
  msgid "The plugin is great, but I need specific feature that you don't support"
893
  msgstr ""
894
 
895
- #: classes/freemius/includes/i18n.php:133
896
  msgid "The plugin is not working"
897
  msgstr ""
898
 
899
- #: classes/freemius/includes/i18n.php:134
900
  msgid "It's not what I was looking for"
901
  msgstr ""
902
 
903
- #: classes/freemius/includes/i18n.php:135
904
  msgid "The plugin didn't work as expected"
905
  msgstr ""
906
 
907
- #: classes/freemius/includes/i18n.php:136
908
  msgid "What feature?"
909
  msgstr ""
910
 
911
- #: classes/freemius/includes/i18n.php:137
912
  msgid "Kindly share what didn't work so we can fix it for future users..."
913
  msgstr ""
914
 
915
- #: classes/freemius/includes/i18n.php:138
916
  msgid "What you've been looking for?"
917
  msgstr ""
918
 
919
- #: classes/freemius/includes/i18n.php:139
920
  msgid "What did you expect?"
921
  msgstr ""
922
 
923
- #: classes/freemius/includes/i18n.php:140
924
  msgid "The plugin didn't work"
925
  msgstr ""
926
 
927
- #: classes/freemius/includes/i18n.php:141
928
  msgid "I don't like to share my information with you"
929
  msgstr ""
930
 
931
- #: classes/freemius/includes/i18n.php:145
932
  #, php-format
933
  msgctxt "greeting"
934
  msgid "Hey %s,"
935
  msgstr ""
936
 
937
- #: classes/freemius/includes/i18n.php:146
938
  #, php-format
939
  msgctxt "a greeting. E.g. Thanks John!"
940
  msgid "Thanks %s!"
941
  msgstr ""
942
 
943
- #: classes/freemius/includes/i18n.php:147
944
  #, php-format
945
  msgid ""
946
  "In order to enjoy all our features and functionality, %s needs to connect "
947
  "your user, %s at %s, to %s"
948
  msgstr ""
949
 
950
- #: classes/freemius/includes/i18n.php:148
951
  #, php-format
952
  msgid ""
953
  "Please help us improve %2$s! If you opt-in, some data about your usage of "
@@ -955,7 +961,7 @@ msgid ""
955
  "work just fine."
956
  msgstr ""
957
 
958
- #: classes/freemius/includes/i18n.php:149
959
  #, php-format
960
  msgid ""
961
  "You should receive an activation email for %s to your mailbox at %s. Please "
@@ -963,414 +969,419 @@ msgid ""
963
  "install."
964
  msgstr ""
965
 
966
- #: classes/freemius/includes/i18n.php:150
967
  msgid "What permissions are being granted?"
968
  msgstr ""
969
 
970
- #: classes/freemius/includes/i18n.php:151
971
  msgid "Your Profile Overview"
972
  msgstr ""
973
 
974
- #: classes/freemius/includes/i18n.php:152
975
  msgid "Name and email address"
976
  msgstr ""
977
 
978
- #: classes/freemius/includes/i18n.php:153
979
  msgid "Your Site Overview"
980
  msgstr ""
981
 
982
- #: classes/freemius/includes/i18n.php:154
983
  msgid "Site address, WordPress version, PHP Version"
984
  msgstr ""
985
 
986
- #: classes/freemius/includes/i18n.php:155
987
  msgid "Plugin Events"
988
  msgstr ""
989
 
990
- #: classes/freemius/includes/i18n.php:156
991
  msgid "Activation, deactivation and uninstall"
992
  msgstr ""
993
 
994
- #: classes/freemius/includes/i18n.php:157
995
  msgid "Newsletter"
996
  msgstr ""
997
 
998
- #: classes/freemius/includes/i18n.php:158
999
  msgid "Updates, announcements, marketing, no spam"
1000
  msgstr ""
1001
 
1002
- #: classes/freemius/includes/i18n.php:159
1003
  msgid "Privacy Policy"
1004
  msgstr ""
1005
 
1006
- #: classes/freemius/includes/i18n.php:160
1007
  msgid "Terms of Service"
1008
  msgstr ""
1009
 
1010
- #: classes/freemius/includes/i18n.php:161
1011
  msgctxt "as activating plugin"
1012
  msgid "Activating"
1013
  msgstr ""
1014
 
1015
- #: classes/freemius/includes/i18n.php:162
 
 
 
 
 
1016
  msgctxt "button label"
1017
  msgid "Allow & Continue"
1018
  msgstr ""
1019
 
1020
- #: classes/freemius/includes/i18n.php:163
1021
  msgctxt "verb"
1022
  msgid "Skip"
1023
  msgstr ""
1024
 
1025
- #: classes/freemius/includes/i18n.php:164
1026
  msgid "Re-send activation email"
1027
  msgstr ""
1028
 
1029
- #: classes/freemius/includes/i18n.php:168
1030
  msgid "Screenshots"
1031
  msgstr ""
1032
 
1033
- #: classes/freemius/includes/i18n.php:169
1034
  #, php-format
1035
  msgid "Click to view full-size screenshot %d"
1036
  msgstr ""
1037
 
1038
- #: classes/freemius/includes/i18n.php:173
1039
  msgid "Freemius Debug"
1040
  msgstr ""
1041
 
1042
- #: classes/freemius/includes/i18n.php:174
1043
  msgctxt "as turned on"
1044
  msgid "On"
1045
  msgstr ""
1046
 
1047
- #: classes/freemius/includes/i18n.php:175
1048
  msgctxt "as turned off"
1049
  msgid "Off"
1050
  msgstr ""
1051
 
1052
- #: classes/freemius/includes/i18n.php:176
1053
  msgid "Freemius State"
1054
  msgstr ""
1055
 
1056
- #: classes/freemius/includes/i18n.php:177
1057
  msgctxt "as connection was successful"
1058
  msgid "Connected"
1059
  msgstr ""
1060
 
1061
- #: classes/freemius/includes/i18n.php:178
1062
  msgctxt "as connection blocked"
1063
  msgid "Blocked"
1064
  msgstr ""
1065
 
1066
- #: classes/freemius/includes/i18n.php:179
1067
  msgctxt "as application program interface"
1068
  msgid "API"
1069
  msgstr ""
1070
 
1071
- #: classes/freemius/includes/i18n.php:180
1072
  msgctxt "as software development kit versions"
1073
  msgid "SDK"
1074
  msgstr ""
1075
 
1076
- #: classes/freemius/includes/i18n.php:181
1077
  msgctxt "as software development kit versions"
1078
  msgid "SDK Versions"
1079
  msgstr ""
1080
 
1081
- #: classes/freemius/includes/i18n.php:182
1082
  msgctxt "as plugin folder path"
1083
  msgid "Plugin Path"
1084
  msgstr ""
1085
 
1086
- #: classes/freemius/includes/i18n.php:183
1087
  msgctxt "as sdk path"
1088
  msgid "SDK Path"
1089
  msgstr ""
1090
 
1091
- #: classes/freemius/includes/i18n.php:184
1092
  #, php-format
1093
  msgid "Add Ons of Plugin %s"
1094
  msgstr ""
1095
 
1096
- #: classes/freemius/includes/i18n.php:185
1097
  msgid "Are you sure you want to delete the all Freemius data?"
1098
  msgstr ""
1099
 
1100
- #: classes/freemius/includes/i18n.php:186
1101
  msgid "Actions"
1102
  msgstr ""
1103
 
1104
- #: classes/freemius/includes/i18n.php:187
1105
  msgid "Delete All Accounts"
1106
  msgstr ""
1107
 
1108
- #: classes/freemius/includes/i18n.php:188
1109
  msgid "Clear API Cache"
1110
  msgstr ""
1111
 
1112
- #: classes/freemius/includes/i18n.php:189
1113
  msgid "Sync Data From Server"
1114
  msgstr ""
1115
 
1116
- #: classes/freemius/includes/i18n.php:193
1117
  msgctxt "as congratulations"
1118
  msgid "Congrats"
1119
  msgstr ""
1120
 
1121
- #: classes/freemius/includes/i18n.php:194
1122
  msgctxt "exclamation"
1123
  msgid "Oops"
1124
  msgstr ""
1125
 
1126
- #: classes/freemius/includes/i18n.php:195
1127
  msgctxt "interjection expressing joy or exuberance"
1128
  msgid "Yee-haw"
1129
  msgstr ""
1130
 
1131
- #: classes/freemius/includes/i18n.php:196
1132
  msgctxt ""
1133
  "(especially in electronic communication) used to express elation, "
1134
  "enthusiasm, or triumph."
1135
  msgid "W00t"
1136
  msgstr ""
1137
 
1138
- #: classes/freemius/includes/i18n.php:197
1139
  msgctxt "a positive response"
1140
  msgid "Right on"
1141
  msgstr ""
1142
 
1143
- #: classes/freemius/includes/i18n.php:198
1144
  msgctxt ""
1145
  "something somebody says when they are thinking about what you have just "
1146
  "said. "
1147
  msgid "Hmm"
1148
  msgstr ""
1149
 
1150
- #: classes/freemius/includes/i18n.php:199
1151
  msgid "O.K"
1152
  msgstr ""
1153
 
1154
- #: classes/freemius/includes/i18n.php:200
1155
  msgctxt "exclamation"
1156
  msgid "Hey"
1157
  msgstr ""
1158
 
1159
- #: classes/freemius/includes/i18n.php:201
1160
  msgctxt "advance notice of something that will need attention."
1161
  msgid "Heads up"
1162
  msgstr ""
1163
 
1164
- #: classes/freemius/includes/i18n.php:205
1165
  msgid "Seems like you got the latest release."
1166
  msgstr ""
1167
 
1168
- #: classes/freemius/includes/i18n.php:206
1169
  msgid "You are all good!"
1170
  msgstr ""
1171
 
1172
- #: classes/freemius/includes/i18n.php:207
1173
  msgid ""
1174
  "Sorry, we could not complete the email update. Another user with the same "
1175
  "email is already registered."
1176
  msgstr ""
1177
 
1178
- #: classes/freemius/includes/i18n.php:208
1179
  #, php-format
1180
  msgid ""
1181
  "If you would like to give up the ownership of the plugin's account to %s "
1182
  "click the Change Ownership button."
1183
  msgstr ""
1184
 
1185
- #: classes/freemius/includes/i18n.php:209
1186
  msgid ""
1187
  "Your email was successfully updated. You should receive an email with "
1188
  "confirmation instructions in few moments."
1189
  msgstr ""
1190
 
1191
- #: classes/freemius/includes/i18n.php:210
1192
  msgid "Your name was successfully updated."
1193
  msgstr ""
1194
 
1195
- #: classes/freemius/includes/i18n.php:211
1196
  #, php-format
1197
  msgid "You have successfully updated your %s."
1198
  msgstr ""
1199
 
1200
- #: classes/freemius/includes/i18n.php:212
1201
  msgid "Please provide your full name."
1202
  msgstr ""
1203
 
1204
- #: classes/freemius/includes/i18n.php:213
1205
  #, php-format
1206
  msgid ""
1207
  "Verification mail was just sent to %s. If you can't find it after 5 min, "
1208
  "please check your spam box."
1209
  msgstr ""
1210
 
1211
- #: classes/freemius/includes/i18n.php:214
1212
  #, php-format
1213
  msgid ""
1214
  "Just letting you know that the add-ons information of %s is being pulled "
1215
  "from external server."
1216
  msgstr ""
1217
 
1218
- #: classes/freemius/includes/i18n.php:215
1219
  msgid "No credit card required"
1220
  msgstr ""
1221
 
1222
- #: classes/freemius/includes/i18n.php:216
1223
  msgid "Premium plugin version was successfully activated."
1224
  msgstr ""
1225
 
1226
- #: classes/freemius/includes/i18n.php:217
1227
  #, php-format
1228
  msgid "The upgrade of %s was successfully completed."
1229
  msgstr ""
1230
 
1231
- #: classes/freemius/includes/i18n.php:218
1232
  #, php-format
1233
  msgid "Your account was successfully activated with the %s plan."
1234
  msgstr ""
1235
 
1236
- #: classes/freemius/includes/i18n.php:219
1237
  #, php-format
1238
  msgid "Download the latest %s version now"
1239
  msgstr ""
1240
 
1241
- #: classes/freemius/includes/i18n.php:220
1242
  msgid "Download the latest version now"
1243
  msgstr ""
1244
 
1245
- #: classes/freemius/includes/i18n.php:221
1246
  #, php-format
1247
  msgctxt "%s - product name, e.g. Facebook add-on was successfully..."
1248
  msgid "%s Add-on was successfully purchased."
1249
  msgstr ""
1250
 
1251
- #: classes/freemius/includes/i18n.php:222
1252
  #, php-format
1253
  msgid "Your %s Add-on plan was successfully upgraded."
1254
  msgstr ""
1255
 
1256
- #: classes/freemius/includes/i18n.php:223
1257
  msgid "Your email has been successfully verified - you are AWESOME!"
1258
  msgstr ""
1259
 
1260
- #: classes/freemius/includes/i18n.php:224
1261
  msgid "Your plan was successfully upgraded."
1262
  msgstr ""
1263
 
1264
- #: classes/freemius/includes/i18n.php:225
1265
  #, php-format
1266
  msgid "Your plan was successfully changed to %s."
1267
  msgstr ""
1268
 
1269
- #: classes/freemius/includes/i18n.php:226
1270
  msgid ""
1271
  "Your license has expired. You can still continue using the free plugin "
1272
  "forever."
1273
  msgstr ""
1274
 
1275
- #: classes/freemius/includes/i18n.php:227
1276
  msgid "Your trial has been successfully started."
1277
  msgstr ""
1278
 
1279
- #: classes/freemius/includes/i18n.php:228
1280
  msgid "Your license was successfully activated."
1281
  msgstr ""
1282
 
1283
- #: classes/freemius/includes/i18n.php:229
1284
  msgid "It looks like your site currently don't have an active license."
1285
  msgstr ""
1286
 
1287
- #: classes/freemius/includes/i18n.php:230
1288
  #, php-format
1289
  msgid "Your license was successfully deactivated, you are back to the %s plan."
1290
  msgstr ""
1291
 
1292
- #: classes/freemius/includes/i18n.php:231
1293
  msgid "It looks like the license deactivation failed."
1294
  msgstr ""
1295
 
1296
- #: classes/freemius/includes/i18n.php:232
1297
  msgid "It looks like the license could not be activated."
1298
  msgstr ""
1299
 
1300
- #: classes/freemius/includes/i18n.php:233
1301
  msgid "Error received from the server:"
1302
  msgstr ""
1303
 
1304
- #: classes/freemius/includes/i18n.php:234
1305
  msgid ""
1306
  "Your trial has expired. You can still continue using all our free features."
1307
  msgstr ""
1308
 
1309
- #: classes/freemius/includes/i18n.php:235
1310
  #, php-format
1311
  msgid ""
1312
  "Your plan was successfully downgraded. Your %s plan license will expire in "
1313
  "%s."
1314
  msgstr ""
1315
 
1316
- #: classes/freemius/includes/i18n.php:236
1317
  msgid ""
1318
  "Seems like we are having some temporary issue with your plan downgrade. "
1319
  "Please try again in few minutes."
1320
  msgstr ""
1321
 
1322
- #: classes/freemius/includes/i18n.php:237
1323
  msgid ""
1324
  "It looks like you are not in trial mode anymore so there's nothing to "
1325
  "cancel :)"
1326
  msgstr ""
1327
 
1328
- #: classes/freemius/includes/i18n.php:238
1329
  #, php-format
1330
  msgid "Your %s Plan trial was successfully cancelled."
1331
  msgstr ""
1332
 
1333
- #: classes/freemius/includes/i18n.php:239
1334
  #, php-format
1335
  msgctxt "%s - numeric version number"
1336
  msgid "Version %s was released."
1337
  msgstr ""
1338
 
1339
- #: classes/freemius/includes/i18n.php:240
1340
  #, php-format
1341
  msgid "Please download %s."
1342
  msgstr ""
1343
 
1344
- #: classes/freemius/includes/i18n.php:241
1345
  #, php-format
1346
  msgctxt "%s - plan name, as the latest professional version here"
1347
  msgid "the latest %s version here"
1348
  msgstr ""
1349
 
1350
- #: classes/freemius/includes/i18n.php:242
1351
  #, php-format
1352
  msgid ""
1353
  "How do you like %s so far? Test all our %s premium features with a %d-day "
1354
  "free trial."
1355
  msgstr ""
1356
 
1357
- #: classes/freemius/includes/i18n.php:243
1358
  msgctxt "call to action"
1359
  msgid "Start free trial"
1360
  msgstr ""
1361
 
1362
- #: classes/freemius/includes/i18n.php:244
1363
  msgid ""
1364
  "Seems like we are having some temporary issue with your trial cancellation. "
1365
  "Please try again in few minutes."
1366
  msgstr ""
1367
 
1368
- #: classes/freemius/includes/i18n.php:245
1369
  #, php-format
1370
  msgid "No commitment for %s days - cancel anytime!"
1371
  msgstr ""
1372
 
1373
- #: classes/freemius/includes/i18n.php:246
1374
  #, php-format
1375
  msgid ""
1376
  "Your license has expired. You can still continue using all the %s features, "
@@ -1378,130 +1389,130 @@ msgid ""
1378
  "support."
1379
  msgstr ""
1380
 
1381
- #: classes/freemius/includes/i18n.php:247
1382
  #, php-format
1383
  msgid "Couldn't activate %s."
1384
  msgstr ""
1385
 
1386
- #: classes/freemius/includes/i18n.php:248
1387
  msgid "Please contact us with the following message:"
1388
  msgstr ""
1389
 
1390
- #: classes/freemius/includes/i18n.php:249
1391
  msgid ""
1392
  "It looks like your plan did't change. If you did upgrade, it's probably an "
1393
  "issue on our side - sorry."
1394
  msgstr ""
1395
 
1396
- #: classes/freemius/includes/i18n.php:250
1397
  msgid "Please contact us here"
1398
  msgstr ""
1399
 
1400
- #: classes/freemius/includes/i18n.php:251
1401
  #, php-format
1402
  msgid ""
1403
  "I have upgraded my account but when I try to Sync the License, the plan "
1404
  "remains %s."
1405
  msgstr ""
1406
 
1407
- #: classes/freemius/includes/i18n.php:254
1408
  msgid "From unknown reason, the API connectivity test fails."
1409
  msgstr ""
1410
 
1411
- #: classes/freemius/includes/i18n.php:255
1412
  msgid ""
1413
  "We use PHP cURL library for the API calls, which is a very common library "
1414
  "and usually installed out of the box. Unfortunately, cURL is not installed "
1415
  "on your server."
1416
  msgstr ""
1417
 
1418
- #: classes/freemius/includes/i18n.php:256
1419
  msgid ""
1420
  "From unknown reason, CloudFlare, the firewall we use, blocks the connection."
1421
  msgstr ""
1422
 
1423
- #: classes/freemius/includes/i18n.php:257
1424
  #, php-format
1425
  msgctxt "as pluginX requires an access to our API"
1426
  msgid "%s requires an access to our API."
1427
  msgstr ""
1428
 
1429
- #: classes/freemius/includes/i18n.php:258
1430
  msgid ""
1431
  "It looks like your server is using Squid ACL (access control lists), which "
1432
  "blocks the connection."
1433
  msgstr ""
1434
 
1435
- #: classes/freemius/includes/i18n.php:259
1436
  msgid "I don't know what is Squid or ACL, help me!"
1437
  msgstr ""
1438
 
1439
- #: classes/freemius/includes/i18n.php:260
1440
- #: classes/freemius/includes/i18n.php:264
1441
  #, php-format
1442
  msgid ""
1443
  "We'll make sure to contact your hosting company and resolve the issue. You "
1444
  "will get a follow-up email to %s once we have an update."
1445
  msgstr ""
1446
 
1447
- #: classes/freemius/includes/i18n.php:261
1448
  msgid "I'm a system administrator"
1449
  msgstr ""
1450
 
1451
- #: classes/freemius/includes/i18n.php:262
1452
  #, php-format
1453
  msgid ""
1454
  "Great, please whitelist the following domains: %s. Once you done, deactivate "
1455
  "the plugin and activate it again."
1456
  msgstr ""
1457
 
1458
- #: classes/freemius/includes/i18n.php:263
1459
  msgid "I don't know what is cURL or how to install it, help me!"
1460
  msgstr ""
1461
 
1462
- #: classes/freemius/includes/i18n.php:265
1463
  msgid ""
1464
  "Great, please install cURL and enable it in your php.ini file. To make sure "
1465
  "it was successfully activated, use 'phpinfo()'. Once activated, deactivate "
1466
  "the plugin and reactivate it back again."
1467
  msgstr ""
1468
 
1469
- #: classes/freemius/includes/i18n.php:266
1470
  msgid ""
1471
  "We are sure it's an issue on our side and more than happy to resolve it for "
1472
  "you ASAP if you give us a chance."
1473
  msgstr ""
1474
 
1475
- #: classes/freemius/includes/i18n.php:267
1476
  msgid "Yes - I'm giving you a chance to fix it"
1477
  msgstr ""
1478
 
1479
- #: classes/freemius/includes/i18n.php:268
1480
  #, php-format
1481
  msgid ""
1482
  "We will do our best to whitelist your server and resolve this issue ASAP. "
1483
  "You will get a follow-up email to %s once we have an update."
1484
  msgstr ""
1485
 
1486
- #: classes/freemius/includes/i18n.php:269
1487
  msgid "Let's try your previous version"
1488
  msgstr ""
1489
 
1490
- #: classes/freemius/includes/i18n.php:270
1491
  msgid "Uninstall this version and install the previous one."
1492
  msgstr ""
1493
 
1494
- #: classes/freemius/includes/i18n.php:271
1495
  msgid "That's exhausting, please deactivate"
1496
  msgstr ""
1497
 
1498
- #: classes/freemius/includes/i18n.php:272
1499
  msgid ""
1500
  "We feel your frustration and sincerely apologize for the inconvenience. Hope "
1501
  "to see you again in the future."
1502
  msgstr ""
1503
 
1504
- #: classes/freemius/includes/i18n.php:273
1505
  #, php-format
1506
  msgid ""
1507
  "Thank for giving us the chance to fix it! A message was just sent to our "
@@ -1509,21 +1520,21 @@ msgid ""
1509
  "Appreciate your patience."
1510
  msgstr ""
1511
 
1512
- #: classes/freemius/includes/i18n.php:274
1513
  #, php-format
1514
  msgctxt "%1s - plugin title, %2s - API domain"
1515
  msgid ""
1516
  "Your server is blocking the access to Freemius' API, which is crucial for "
1517
- "%1s license synchronization. Please contact your host to whitelist %2s"
1518
  msgstr ""
1519
 
1520
- #: classes/freemius/includes/i18n.php:275
1521
  msgid ""
1522
  "It seems like one of the authentication parameters is wrong. Update your "
1523
  "Public Key, Secret Key & User ID, and try again."
1524
  msgstr ""
1525
 
1526
- #: classes/freemius/includes/i18n.php:278
1527
  #, php-format
1528
  msgid ""
1529
  "Please check your mailbox, you should receive an email via %s to confirm the "
@@ -1531,42 +1542,42 @@ msgid ""
1531
  "the next 15 min. If you cannot find the email, please check your spam folder."
1532
  msgstr ""
1533
 
1534
- #: classes/freemius/includes/i18n.php:279
1535
  #, php-format
1536
  msgid ""
1537
  "Thanks for confirming the ownership change. An email was just sent to %s for "
1538
  "final approval."
1539
  msgstr ""
1540
 
1541
- #: classes/freemius/includes/i18n.php:280
1542
  #, php-format
1543
  msgid "%s is the new owner of the account."
1544
  msgstr ""
1545
 
1546
- #: classes/freemius/includes/i18n.php:282
1547
  #, php-format
1548
  msgctxt "addonX cannot run without pluginY"
1549
  msgid "%s cannot run without %s."
1550
  msgstr ""
1551
 
1552
- #: classes/freemius/includes/i18n.php:283
1553
  #, php-format
1554
  msgctxt "addonX cannot run..."
1555
  msgid "%s cannot run without the plugin."
1556
  msgstr ""
1557
 
1558
- #: classes/freemius/includes/i18n.php:284
1559
  #, php-format
1560
  msgctxt "pluginX activation was successfully..."
1561
  msgid "%s activation was successfully completed."
1562
  msgstr ""
1563
 
1564
- #: classes/freemius/includes/i18n.php:285
1565
  msgctxt "Plugin installer section title"
1566
  msgid "Features & Pricing"
1567
  msgstr ""
1568
 
1569
- #: classes/freemius/templates/account.php:283
1570
  msgctxt "verb"
1571
  msgid "Edit"
1572
  msgstr ""
1
  # SOME DESCRIPTIVE TITLE.
2
  # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
3
+ # This file is distributed under the same license as the PACKAGE package.
4
  # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
5
  #
6
  #, fuzzy
7
  msgid ""
8
  msgstr ""
9
+ "Project-Id-Version: aryo-activity-log 2.2.9\n"
10
  "Report-Msgid-Bugs-To: \n"
11
+ "POT-Creation-Date: 2016-02-04 15:08+0200\n"
12
  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14
  "Language-Team: LANGUAGE <LL@li.org>\n"
400
  msgstr ""
401
 
402
  #: classes/freemius/includes/fs-plugin-functions.php:392
403
+ #: classes/freemius/includes/i18n.php:111
404
  msgid "Install Now"
405
  msgstr ""
406
 
407
  #: classes/freemius/includes/fs-plugin-functions.php:397
408
+ #: classes/freemius/includes/i18n.php:112
409
  msgid "Install Update Now"
410
  msgstr ""
411
 
418
  msgid "Latest Version Installed"
419
  msgstr ""
420
 
421
+ #: classes/freemius/includes/i18n.php:35
422
  msgid "Account"
423
  msgstr ""
424
 
425
+ #: classes/freemius/includes/i18n.php:36
426
  msgid "Add On"
427
  msgstr ""
428
 
429
+ #: classes/freemius/includes/i18n.php:37
430
  msgid "Contact Us"
431
  msgstr ""
432
 
433
+ #: classes/freemius/includes/i18n.php:38
434
  msgid "Change Ownership"
435
  msgstr ""
436
 
437
+ #: classes/freemius/includes/i18n.php:39
438
  msgid "Support"
439
  msgstr ""
440
 
441
+ #: classes/freemius/includes/i18n.php:40
442
  msgid "Support Forum"
443
  msgstr ""
444
 
445
+ #: classes/freemius/includes/i18n.php:41
446
  msgid "Add Ons"
447
  msgstr ""
448
 
449
+ #: classes/freemius/includes/i18n.php:42
450
  msgctxt "verb"
451
  msgid "Upgrade"
452
  msgstr ""
453
 
454
+ #: classes/freemius/includes/i18n.php:43
455
  msgid "Awesome"
456
  msgstr ""
457
 
458
+ #: classes/freemius/includes/i18n.php:44
459
  msgctxt "noun"
460
  msgid "Pricing"
461
  msgstr ""
462
 
463
+ #: classes/freemius/includes/i18n.php:45
464
  msgctxt "noun"
465
  msgid "Price"
466
  msgstr ""
467
 
468
+ #: classes/freemius/includes/i18n.php:46
469
  msgid "Unlimited Updates"
470
  msgstr ""
471
 
472
+ #: classes/freemius/includes/i18n.php:47
473
  msgctxt "verb"
474
  msgid "Downgrade"
475
  msgstr ""
476
 
477
+ #: classes/freemius/includes/i18n.php:48
478
  msgid "Free Trial"
479
  msgstr ""
480
 
481
+ #: classes/freemius/includes/i18n.php:49
482
  msgid "Details"
483
  msgstr ""
484
 
485
+ #: classes/freemius/includes/i18n.php:50
486
  msgid "Account Details"
487
  msgstr ""
488
 
489
+ #: classes/freemius/includes/i18n.php:51
490
  msgctxt "verb"
491
  msgid "Delete"
492
  msgstr ""
493
 
494
+ #: classes/freemius/includes/i18n.php:52
495
  msgid "Delete Account"
496
  msgstr ""
497
 
498
+ #: classes/freemius/includes/i18n.php:53
499
  msgctxt "as close a window"
500
  msgid "Dismiss"
501
  msgstr ""
502
 
503
+ #: classes/freemius/includes/i18n.php:54
504
  msgctxt "as product pricing plan"
505
  msgid "Plan"
506
  msgstr ""
507
 
508
+ #: classes/freemius/includes/i18n.php:55
509
  msgid "Change Plan"
510
  msgstr ""
511
 
512
+ #: classes/freemius/includes/i18n.php:56
513
  #, php-format
514
  msgctxt "as download professional version"
515
  msgid "Download %s Version"
516
  msgstr ""
517
 
518
+ #: classes/freemius/includes/i18n.php:57
519
  #, php-format
520
  msgctxt "as download professional version now"
521
  msgid "Download %s version now"
522
  msgstr ""
523
 
524
+ #: classes/freemius/includes/i18n.php:58
525
  msgctxt "as download latest version"
526
  msgid "Download Latest"
527
  msgstr ""
528
 
529
+ #: classes/freemius/includes/i18n.php:59
530
  #, php-format
531
  msgctxt "E.g. you have a professional license."
532
  msgid "You have a %s license."
533
  msgstr ""
534
 
535
+ #: classes/freemius/includes/i18n.php:60
536
  msgid "New"
537
  msgstr ""
538
 
539
+ #: classes/freemius/includes/i18n.php:61
540
  msgid "Free"
541
  msgstr ""
542
 
543
+ #: classes/freemius/includes/i18n.php:62
544
  msgctxt "as trial plan"
545
  msgid "Trial"
546
  msgstr ""
547
 
548
+ #: classes/freemius/includes/i18n.php:63
549
  msgctxt "verb"
550
  msgid "Purchase"
551
  msgstr ""
552
 
553
+ #: classes/freemius/includes/i18n.php:64
554
  msgid "Single Site License"
555
  msgstr ""
556
 
557
+ #: classes/freemius/includes/i18n.php:65
558
  msgid "Unlimited Licenses"
559
  msgstr ""
560
 
561
+ #: classes/freemius/includes/i18n.php:66
562
  #, php-format
563
  msgid "Up to %s Sites"
564
  msgstr ""
565
 
566
+ #: classes/freemius/includes/i18n.php:67
567
+ #, php-format
568
+ msgid "%sRenew your license now%s to access version %s features and support."
569
+ msgstr ""
570
+
571
+ #: classes/freemius/includes/i18n.php:68
572
  #, php-format
573
  msgctxt "e.g. Professional Plan"
574
  msgid "%s Plan"
575
  msgstr ""
576
 
577
+ #: classes/freemius/includes/i18n.php:69
578
  #, php-format
579
  msgid "You are just one step away - %s"
580
  msgstr ""
581
 
582
+ #: classes/freemius/includes/i18n.php:70
583
  #, php-format
584
  msgctxt "%s - plugin name. As complete \"Jetpack\" activation now"
585
  msgid "Complete \"%s\" Activation Now"
586
  msgstr ""
587
 
588
+ #: classes/freemius/includes/i18n.php:71
589
  #, php-format
590
  msgid "We made a few tweaks to the plugin, %s"
591
  msgstr ""
592
 
593
+ #: classes/freemius/includes/i18n.php:72
594
  #, php-format
595
  msgid "Opt-in to make \"%s\" Better!"
596
  msgstr ""
597
 
598
+ #: classes/freemius/includes/i18n.php:73
599
  msgid "Error"
600
  msgstr ""
601
 
602
+ #: classes/freemius/includes/i18n.php:74
603
  msgid ""
604
  "Freemius SDK couldn't find the plugin's main file. Please contact "
605
  "sdk@freemius.com with the current error."
606
  msgstr ""
607
 
608
+ #: classes/freemius/includes/i18n.php:77
609
  msgctxt "as expiration date"
610
  msgid "Expiration"
611
  msgstr ""
612
 
613
+ #: classes/freemius/includes/i18n.php:78
614
  msgid "not verified"
615
  msgstr ""
616
 
617
+ #: classes/freemius/includes/i18n.php:79
618
  msgid "Verify Email"
619
  msgstr ""
620
 
621
+ #: classes/freemius/includes/i18n.php:80
622
  #, php-format
623
  msgctxt "e.g. expires in 2 months"
624
  msgid "Expires in %s"
625
  msgstr ""
626
 
627
+ #: classes/freemius/includes/i18n.php:81
628
  #, php-format
629
  msgctxt "e.g. auto renews in 2 months"
630
  msgid "Auto renews in %s"
631
  msgstr ""
632
 
633
+ #: classes/freemius/includes/i18n.php:82
634
  msgid "No expiration"
635
  msgstr ""
636
 
637
+ #: classes/freemius/includes/i18n.php:83
638
  msgid "Expired"
639
  msgstr ""
640
 
641
+ #: classes/freemius/includes/i18n.php:84
642
  #, php-format
643
  msgid "In %s"
644
  msgstr ""
645
 
646
+ #: classes/freemius/includes/i18n.php:85
647
  msgctxt "as plugin version"
648
  msgid "Version"
649
  msgstr ""
650
 
651
+ #: classes/freemius/includes/i18n.php:86
652
  msgid "Name"
653
  msgstr ""
654
 
655
+ #: classes/freemius/includes/i18n.php:87
656
  #: notifications/class-aal-notification-email.php:15
657
  msgid "Email"
658
  msgstr ""
659
 
660
+ #: classes/freemius/includes/i18n.php:88
661
  msgid "Verified"
662
  msgstr ""
663
 
664
+ #: classes/freemius/includes/i18n.php:89 language/strings.php:29
665
  msgid "Plugin"
666
  msgstr ""
667
 
668
+ #: classes/freemius/includes/i18n.php:90
669
  msgid "Plugins"
670
  msgstr ""
671
 
672
+ #: classes/freemius/includes/i18n.php:91
673
  msgctxt "as file/folder path"
674
  msgid "Path"
675
  msgstr ""
676
 
677
+ #: classes/freemius/includes/i18n.php:92
678
  msgid "Title"
679
  msgstr ""
680
 
681
+ #: classes/freemius/includes/i18n.php:93
682
  msgctxt "as WP plugin slug"
683
  msgid "Slug"
684
  msgstr ""
685
 
686
+ #: classes/freemius/includes/i18n.php:94
687
  msgid "ID"
688
  msgstr ""
689
 
690
+ #: classes/freemius/includes/i18n.php:95
691
  msgid "Users"
692
  msgstr ""
693
 
694
+ #: classes/freemius/includes/i18n.php:96
695
  msgid "Plugin Installs"
696
  msgstr ""
697
 
698
+ #: classes/freemius/includes/i18n.php:97
699
  msgctxt "like websites"
700
  msgid "Sites"
701
  msgstr ""
702
 
703
+ #: classes/freemius/includes/i18n.php:98
704
  msgid "User ID"
705
  msgstr ""
706
 
707
+ #: classes/freemius/includes/i18n.php:99
708
  msgid "Site ID"
709
  msgstr ""
710
 
711
+ #: classes/freemius/includes/i18n.php:100
712
  msgid "Public Key"
713
  msgstr ""
714
 
715
+ #: classes/freemius/includes/i18n.php:101
716
  msgid "Secret Key"
717
  msgstr ""
718
 
719
+ #: classes/freemius/includes/i18n.php:102
720
  msgctxt "as secret encryption key missing"
721
  msgid "No Secret"
722
  msgstr ""
723
 
724
+ #: classes/freemius/includes/i18n.php:103
725
  msgid "No ID"
726
  msgstr ""
727
 
728
+ #: classes/freemius/includes/i18n.php:104
729
  msgctxt "as synchronize license"
730
  msgid "Sync License"
731
  msgstr ""
732
 
733
+ #: classes/freemius/includes/i18n.php:105
734
  msgctxt "as synchronize"
735
  msgid "Sync"
736
  msgstr ""
737
 
738
+ #: classes/freemius/includes/i18n.php:106
739
  msgid "Deactivate License"
740
  msgstr ""
741
 
742
+ #: classes/freemius/includes/i18n.php:107
743
  msgid "Activate"
744
  msgstr ""
745
 
746
+ #: classes/freemius/includes/i18n.php:108
747
+ #: classes/freemius/includes/i18n.php:130
748
  msgid "Deactivate"
749
  msgstr ""
750
 
751
+ #: classes/freemius/includes/i18n.php:109
752
  msgctxt "active mode"
753
  msgid "Active"
754
  msgstr ""
755
 
756
+ #: classes/freemius/includes/i18n.php:110
757
  msgctxt "is active mode?"
758
  msgid "Is Active"
759
  msgstr ""
760
 
761
+ #: classes/freemius/includes/i18n.php:113
762
  #, php-format
763
  msgid "More information about %s"
764
  msgstr ""
765
 
766
+ #: classes/freemius/includes/i18n.php:114
767
  msgid "Localhost"
768
  msgstr ""
769
 
770
+ #: classes/freemius/includes/i18n.php:115
771
  #, php-format
772
  msgctxt "as activate Professional plan"
773
  msgid "Activate %s Plan"
774
  msgstr ""
775
 
776
+ #: classes/freemius/includes/i18n.php:116
777
  #, php-format
778
  msgid "What is your %s?"
779
  msgstr ""
780
 
781
+ #: classes/freemius/includes/i18n.php:117
782
  msgid "Activate this add-on"
783
  msgstr ""
784
 
785
+ #: classes/freemius/includes/i18n.php:118
786
  msgid ""
787
  "Deactivating your license will block all premium features, but will enable "
788
  "you to activate the license on another site. Are you sure you want to "
789
  "proceed?"
790
  msgstr ""
791
 
792
+ #: classes/freemius/includes/i18n.php:119
793
  #, php-format
794
  msgid ""
795
  "Deleting the account will automatically deactivate your %s plan license so "
798
  "account. Are you sure you would like to continue with the deletion?"
799
  msgstr ""
800
 
801
+ #: classes/freemius/includes/i18n.php:120
802
  msgid ""
803
  "Deletion is not temporary. Only delete if you no longer want to use this "
804
  "plugin anymore. Are you sure you would like to continue with the deletion?"
805
  msgstr ""
806
 
807
+ #: classes/freemius/includes/i18n.php:121
808
  #, php-format
809
  msgid ""
810
  "Downgrading your plan will immediately stop all future recurring payments "
811
  "and your %s plan license will expire in %s."
812
  msgstr ""
813
 
814
+ #: classes/freemius/includes/i18n.php:122
815
  #, php-format
816
  msgid ""
817
  "You can still enjoy all %s features but you will not have access to plugin "
818
  "updates and support."
819
  msgstr ""
820
 
821
+ #: classes/freemius/includes/i18n.php:123
822
  #, php-format
823
  msgid ""
824
  "Once your license expire you can still use the Free version but you will NOT "
825
  "have access to the %s features."
826
  msgstr ""
827
 
828
+ #: classes/freemius/includes/i18n.php:124
829
  msgid "Are you sure you want to proceed?"
830
  msgstr ""
831
 
832
+ #: classes/freemius/includes/i18n.php:127
833
  #, php-format
834
  msgid "Add Ons for %s"
835
  msgstr ""
836
 
837
+ #: classes/freemius/includes/i18n.php:129
838
  msgid "If you have a moment, please let us know why you are deactivating"
839
  msgstr ""
840
 
841
+ #: classes/freemius/includes/i18n.php:131
842
  msgid "Yes - Deactivate"
843
  msgstr ""
844
 
845
+ #: classes/freemius/includes/i18n.php:132
846
  msgid "Submit & Deactivate"
847
  msgstr ""
848
 
849
+ #: classes/freemius/includes/i18n.php:133
850
  msgctxt "the text of the cancel button of the plugin deactivation dialog box."
851
  msgid "Cancel"
852
  msgstr ""
853
 
854
+ #: classes/freemius/includes/i18n.php:134
855
  msgid "I no longer need the plugin"
856
  msgstr ""
857
 
858
+ #: classes/freemius/includes/i18n.php:135
859
  msgid "I found a better plugin"
860
  msgstr ""
861
 
862
+ #: classes/freemius/includes/i18n.php:136
863
  msgid "I only needed the plugin for a short period"
864
  msgstr ""
865
 
866
+ #: classes/freemius/includes/i18n.php:137
867
  msgid "The plugin broke my site"
868
  msgstr ""
869
 
870
+ #: classes/freemius/includes/i18n.php:138
871
  msgid "The plugin suddenly stopped working"
872
  msgstr ""
873
 
874
+ #: classes/freemius/includes/i18n.php:139
875
  msgid "I can't pay for it anymore"
876
  msgstr ""
877
 
878
+ #: classes/freemius/includes/i18n.php:140
879
  msgctxt ""
880
  "the text of the \"other\" reason for deactivating the plugin that is shown "
881
  "in the modal box."
882
  msgid "Other"
883
  msgstr ""
884
 
885
+ #: classes/freemius/includes/i18n.php:141
886
  msgid "What's the plugin's name?"
887
  msgstr ""
888
 
889
+ #: classes/freemius/includes/i18n.php:142
890
  msgid "What price would you feel comfortable paying?"
891
  msgstr ""
892
 
893
+ #: classes/freemius/includes/i18n.php:143
894
  msgid "I couldn't understand how to make it work"
895
  msgstr ""
896
 
897
+ #: classes/freemius/includes/i18n.php:144
898
  msgid "The plugin is great, but I need specific feature that you don't support"
899
  msgstr ""
900
 
901
+ #: classes/freemius/includes/i18n.php:145
902
  msgid "The plugin is not working"
903
  msgstr ""
904
 
905
+ #: classes/freemius/includes/i18n.php:146
906
  msgid "It's not what I was looking for"
907
  msgstr ""
908
 
909
+ #: classes/freemius/includes/i18n.php:147
910
  msgid "The plugin didn't work as expected"
911
  msgstr ""
912
 
913
+ #: classes/freemius/includes/i18n.php:148
914
  msgid "What feature?"
915
  msgstr ""
916
 
917
+ #: classes/freemius/includes/i18n.php:149
918
  msgid "Kindly share what didn't work so we can fix it for future users..."
919
  msgstr ""
920
 
921
+ #: classes/freemius/includes/i18n.php:150
922
  msgid "What you've been looking for?"
923
  msgstr ""
924
 
925
+ #: classes/freemius/includes/i18n.php:151
926
  msgid "What did you expect?"
927
  msgstr ""
928
 
929
+ #: classes/freemius/includes/i18n.php:152
930
  msgid "The plugin didn't work"
931
  msgstr ""
932
 
933
+ #: classes/freemius/includes/i18n.php:153
934
  msgid "I don't like to share my information with you"
935
  msgstr ""
936
 
937
+ #: classes/freemius/includes/i18n.php:157
938
  #, php-format
939
  msgctxt "greeting"
940
  msgid "Hey %s,"
941
  msgstr ""
942
 
943
+ #: classes/freemius/includes/i18n.php:158
944
  #, php-format
945
  msgctxt "a greeting. E.g. Thanks John!"
946
  msgid "Thanks %s!"
947
  msgstr ""
948
 
949
+ #: classes/freemius/includes/i18n.php:159
950
  #, php-format
951
  msgid ""
952
  "In order to enjoy all our features and functionality, %s needs to connect "
953
  "your user, %s at %s, to %s"
954
  msgstr ""
955
 
956
+ #: classes/freemius/includes/i18n.php:160
957
  #, php-format
958
  msgid ""
959
  "Please help us improve %2$s! If you opt-in, some data about your usage of "
961
  "work just fine."
962
  msgstr ""
963
 
964
+ #: classes/freemius/includes/i18n.php:161
965
  #, php-format
966
  msgid ""
967
  "You should receive an activation email for %s to your mailbox at %s. Please "
969
  "install."
970
  msgstr ""
971
 
972
+ #: classes/freemius/includes/i18n.php:162
973
  msgid "What permissions are being granted?"
974
  msgstr ""
975
 
976
+ #: classes/freemius/includes/i18n.php:163
977
  msgid "Your Profile Overview"
978
  msgstr ""
979
 
980
+ #: classes/freemius/includes/i18n.php:164
981
  msgid "Name and email address"
982
  msgstr ""
983
 
984
+ #: classes/freemius/includes/i18n.php:165
985
  msgid "Your Site Overview"
986
  msgstr ""
987
 
988
+ #: classes/freemius/includes/i18n.php:166
989
  msgid "Site address, WordPress version, PHP Version"
990
  msgstr ""
991
 
992
+ #: classes/freemius/includes/i18n.php:167
993
  msgid "Plugin Events"
994
  msgstr ""
995
 
996
+ #: classes/freemius/includes/i18n.php:168
997
  msgid "Activation, deactivation and uninstall"
998
  msgstr ""
999
 
1000
+ #: classes/freemius/includes/i18n.php:169
1001
  msgid "Newsletter"
1002
  msgstr ""
1003
 
1004
+ #: classes/freemius/includes/i18n.php:170
1005
  msgid "Updates, announcements, marketing, no spam"
1006
  msgstr ""
1007
 
1008
+ #: classes/freemius/includes/i18n.php:171
1009
  msgid "Privacy Policy"
1010
  msgstr ""
1011
 
1012
+ #: classes/freemius/includes/i18n.php:172
1013
  msgid "Terms of Service"
1014
  msgstr ""
1015
 
1016
+ #: classes/freemius/includes/i18n.php:173
1017
  msgctxt "as activating plugin"
1018
  msgid "Activating"
1019
  msgstr ""
1020
 
1021
+ #: classes/freemius/includes/i18n.php:174
1022
+ msgctxt "as in the process of sending an email"
1023
+ msgid "Sending email"
1024
+ msgstr ""
1025
+
1026
+ #: classes/freemius/includes/i18n.php:175
1027
  msgctxt "button label"
1028
  msgid "Allow & Continue"
1029
  msgstr ""
1030
 
1031
+ #: classes/freemius/includes/i18n.php:176
1032
  msgctxt "verb"
1033
  msgid "Skip"
1034
  msgstr ""
1035
 
1036
+ #: classes/freemius/includes/i18n.php:177
1037
  msgid "Re-send activation email"
1038
  msgstr ""
1039
 
1040
+ #: classes/freemius/includes/i18n.php:181
1041
  msgid "Screenshots"
1042
  msgstr ""
1043
 
1044
+ #: classes/freemius/includes/i18n.php:182
1045
  #, php-format
1046
  msgid "Click to view full-size screenshot %d"
1047
  msgstr ""
1048
 
1049
+ #: classes/freemius/includes/i18n.php:186
1050
  msgid "Freemius Debug"
1051
  msgstr ""
1052
 
1053
+ #: classes/freemius/includes/i18n.php:187
1054
  msgctxt "as turned on"
1055
  msgid "On"
1056
  msgstr ""
1057
 
1058
+ #: classes/freemius/includes/i18n.php:188
1059
  msgctxt "as turned off"
1060
  msgid "Off"
1061
  msgstr ""
1062
 
1063
+ #: classes/freemius/includes/i18n.php:189
1064
  msgid "Freemius State"
1065
  msgstr ""
1066
 
1067
+ #: classes/freemius/includes/i18n.php:190
1068
  msgctxt "as connection was successful"
1069
  msgid "Connected"
1070
  msgstr ""
1071
 
1072
+ #: classes/freemius/includes/i18n.php:191
1073
  msgctxt "as connection blocked"
1074
  msgid "Blocked"
1075
  msgstr ""
1076
 
1077
+ #: classes/freemius/includes/i18n.php:192
1078
  msgctxt "as application program interface"
1079
  msgid "API"
1080
  msgstr ""
1081
 
1082
+ #: classes/freemius/includes/i18n.php:193
1083
  msgctxt "as software development kit versions"
1084
  msgid "SDK"
1085
  msgstr ""
1086
 
1087
+ #: classes/freemius/includes/i18n.php:194
1088
  msgctxt "as software development kit versions"
1089
  msgid "SDK Versions"
1090
  msgstr ""
1091
 
1092
+ #: classes/freemius/includes/i18n.php:195
1093
  msgctxt "as plugin folder path"
1094
  msgid "Plugin Path"
1095
  msgstr ""
1096
 
1097
+ #: classes/freemius/includes/i18n.php:196
1098
  msgctxt "as sdk path"
1099
  msgid "SDK Path"
1100
  msgstr ""
1101
 
1102
+ #: classes/freemius/includes/i18n.php:197
1103
  #, php-format
1104
  msgid "Add Ons of Plugin %s"
1105
  msgstr ""
1106
 
1107
+ #: classes/freemius/includes/i18n.php:198
1108
  msgid "Are you sure you want to delete the all Freemius data?"
1109
  msgstr ""
1110
 
1111
+ #: classes/freemius/includes/i18n.php:199
1112
  msgid "Actions"
1113
  msgstr ""
1114
 
1115
+ #: classes/freemius/includes/i18n.php:200
1116
  msgid "Delete All Accounts"
1117
  msgstr ""
1118
 
1119
+ #: classes/freemius/includes/i18n.php:201
1120
  msgid "Clear API Cache"
1121
  msgstr ""
1122
 
1123
+ #: classes/freemius/includes/i18n.php:202
1124
  msgid "Sync Data From Server"
1125
  msgstr ""
1126
 
1127
+ #: classes/freemius/includes/i18n.php:206
1128
  msgctxt "as congratulations"
1129
  msgid "Congrats"
1130
  msgstr ""
1131
 
1132
+ #: classes/freemius/includes/i18n.php:207
1133
  msgctxt "exclamation"
1134
  msgid "Oops"
1135
  msgstr ""
1136
 
1137
+ #: classes/freemius/includes/i18n.php:208
1138
  msgctxt "interjection expressing joy or exuberance"
1139
  msgid "Yee-haw"
1140
  msgstr ""
1141
 
1142
+ #: classes/freemius/includes/i18n.php:209
1143
  msgctxt ""
1144
  "(especially in electronic communication) used to express elation, "
1145
  "enthusiasm, or triumph."
1146
  msgid "W00t"
1147
  msgstr ""
1148
 
1149
+ #: classes/freemius/includes/i18n.php:210
1150
  msgctxt "a positive response"
1151
  msgid "Right on"
1152
  msgstr ""
1153
 
1154
+ #: classes/freemius/includes/i18n.php:211
1155
  msgctxt ""
1156
  "something somebody says when they are thinking about what you have just "
1157
  "said. "
1158
  msgid "Hmm"
1159
  msgstr ""
1160
 
1161
+ #: classes/freemius/includes/i18n.php:212
1162
  msgid "O.K"
1163
  msgstr ""
1164
 
1165
+ #: classes/freemius/includes/i18n.php:213
1166
  msgctxt "exclamation"
1167
  msgid "Hey"
1168
  msgstr ""
1169
 
1170
+ #: classes/freemius/includes/i18n.php:214
1171
  msgctxt "advance notice of something that will need attention."
1172
  msgid "Heads up"
1173
  msgstr ""
1174
 
1175
+ #: classes/freemius/includes/i18n.php:218
1176
  msgid "Seems like you got the latest release."
1177
  msgstr ""
1178
 
1179
+ #: classes/freemius/includes/i18n.php:219
1180
  msgid "You are all good!"
1181
  msgstr ""
1182
 
1183
+ #: classes/freemius/includes/i18n.php:220
1184
  msgid ""
1185
  "Sorry, we could not complete the email update. Another user with the same "
1186
  "email is already registered."
1187
  msgstr ""
1188
 
1189
+ #: classes/freemius/includes/i18n.php:221
1190
  #, php-format
1191
  msgid ""
1192
  "If you would like to give up the ownership of the plugin's account to %s "
1193
  "click the Change Ownership button."
1194
  msgstr ""
1195
 
1196
+ #: classes/freemius/includes/i18n.php:222
1197
  msgid ""
1198
  "Your email was successfully updated. You should receive an email with "
1199
  "confirmation instructions in few moments."
1200
  msgstr ""
1201
 
1202
+ #: classes/freemius/includes/i18n.php:223
1203
  msgid "Your name was successfully updated."
1204
  msgstr ""
1205
 
1206
+ #: classes/freemius/includes/i18n.php:224
1207
  #, php-format
1208
  msgid "You have successfully updated your %s."
1209
  msgstr ""
1210
 
1211
+ #: classes/freemius/includes/i18n.php:225
1212
  msgid "Please provide your full name."
1213
  msgstr ""
1214
 
1215
+ #: classes/freemius/includes/i18n.php:226
1216
  #, php-format
1217
  msgid ""
1218
  "Verification mail was just sent to %s. If you can't find it after 5 min, "
1219
  "please check your spam box."
1220
  msgstr ""
1221
 
1222
+ #: classes/freemius/includes/i18n.php:227
1223
  #, php-format
1224
  msgid ""
1225
  "Just letting you know that the add-ons information of %s is being pulled "
1226
  "from external server."
1227
  msgstr ""
1228
 
1229
+ #: classes/freemius/includes/i18n.php:228
1230
  msgid "No credit card required"
1231
  msgstr ""
1232
 
1233
+ #: classes/freemius/includes/i18n.php:229
1234
  msgid "Premium plugin version was successfully activated."
1235
  msgstr ""
1236
 
1237
+ #: classes/freemius/includes/i18n.php:230
1238
  #, php-format
1239
  msgid "The upgrade of %s was successfully completed."
1240
  msgstr ""
1241
 
1242
+ #: classes/freemius/includes/i18n.php:231
1243
  #, php-format
1244
  msgid "Your account was successfully activated with the %s plan."
1245
  msgstr ""
1246
 
1247
+ #: classes/freemius/includes/i18n.php:232
1248
  #, php-format
1249
  msgid "Download the latest %s version now"
1250
  msgstr ""
1251
 
1252
+ #: classes/freemius/includes/i18n.php:233
1253
  msgid "Download the latest version now"
1254
  msgstr ""
1255
 
1256
+ #: classes/freemius/includes/i18n.php:234
1257
  #, php-format
1258
  msgctxt "%s - product name, e.g. Facebook add-on was successfully..."
1259
  msgid "%s Add-on was successfully purchased."
1260
  msgstr ""
1261
 
1262
+ #: classes/freemius/includes/i18n.php:235
1263
  #, php-format
1264
  msgid "Your %s Add-on plan was successfully upgraded."
1265
  msgstr ""
1266
 
1267
+ #: classes/freemius/includes/i18n.php:236
1268
  msgid "Your email has been successfully verified - you are AWESOME!"
1269
  msgstr ""
1270
 
1271
+ #: classes/freemius/includes/i18n.php:237
1272
  msgid "Your plan was successfully upgraded."
1273
  msgstr ""
1274
 
1275
+ #: classes/freemius/includes/i18n.php:238
1276
  #, php-format
1277
  msgid "Your plan was successfully changed to %s."
1278
  msgstr ""
1279
 
1280
+ #: classes/freemius/includes/i18n.php:239
1281
  msgid ""
1282
  "Your license has expired. You can still continue using the free plugin "
1283
  "forever."
1284
  msgstr ""
1285
 
1286
+ #: classes/freemius/includes/i18n.php:240
1287
  msgid "Your trial has been successfully started."
1288
  msgstr ""
1289
 
1290
+ #: classes/freemius/includes/i18n.php:241
1291
  msgid "Your license was successfully activated."
1292
  msgstr ""
1293
 
1294
+ #: classes/freemius/includes/i18n.php:242
1295
  msgid "It looks like your site currently don't have an active license."
1296
  msgstr ""
1297
 
1298
+ #: classes/freemius/includes/i18n.php:243
1299
  #, php-format
1300
  msgid "Your license was successfully deactivated, you are back to the %s plan."
1301
  msgstr ""
1302
 
1303
+ #: classes/freemius/includes/i18n.php:244
1304
  msgid "It looks like the license deactivation failed."
1305
  msgstr ""
1306
 
1307
+ #: classes/freemius/includes/i18n.php:245
1308
  msgid "It looks like the license could not be activated."
1309
  msgstr ""
1310
 
1311
+ #: classes/freemius/includes/i18n.php:246
1312
  msgid "Error received from the server:"
1313
  msgstr ""
1314
 
1315
+ #: classes/freemius/includes/i18n.php:247
1316
  msgid ""
1317
  "Your trial has expired. You can still continue using all our free features."
1318
  msgstr ""
1319
 
1320
+ #: classes/freemius/includes/i18n.php:248
1321
  #, php-format
1322
  msgid ""
1323
  "Your plan was successfully downgraded. Your %s plan license will expire in "
1324
  "%s."
1325
  msgstr ""
1326
 
1327
+ #: classes/freemius/includes/i18n.php:249
1328
  msgid ""
1329
  "Seems like we are having some temporary issue with your plan downgrade. "
1330
  "Please try again in few minutes."
1331
  msgstr ""
1332
 
1333
+ #: classes/freemius/includes/i18n.php:250
1334
  msgid ""
1335
  "It looks like you are not in trial mode anymore so there's nothing to "
1336
  "cancel :)"
1337
  msgstr ""
1338
 
1339
+ #: classes/freemius/includes/i18n.php:251
1340
  #, php-format
1341
  msgid "Your %s Plan trial was successfully cancelled."
1342
  msgstr ""
1343
 
1344
+ #: classes/freemius/includes/i18n.php:252
1345
  #, php-format
1346
  msgctxt "%s - numeric version number"
1347
  msgid "Version %s was released."
1348
  msgstr ""
1349
 
1350
+ #: classes/freemius/includes/i18n.php:253
1351
  #, php-format
1352
  msgid "Please download %s."
1353
  msgstr ""
1354
 
1355
+ #: classes/freemius/includes/i18n.php:254
1356
  #, php-format
1357
  msgctxt "%s - plan name, as the latest professional version here"
1358
  msgid "the latest %s version here"
1359
  msgstr ""
1360
 
1361
+ #: classes/freemius/includes/i18n.php:255
1362
  #, php-format
1363
  msgid ""
1364
  "How do you like %s so far? Test all our %s premium features with a %d-day "
1365
  "free trial."
1366
  msgstr ""
1367
 
1368
+ #: classes/freemius/includes/i18n.php:256
1369
  msgctxt "call to action"
1370
  msgid "Start free trial"
1371
  msgstr ""
1372
 
1373
+ #: classes/freemius/includes/i18n.php:257
1374
  msgid ""
1375
  "Seems like we are having some temporary issue with your trial cancellation. "
1376
  "Please try again in few minutes."
1377
  msgstr ""
1378
 
1379
+ #: classes/freemius/includes/i18n.php:258
1380
  #, php-format
1381
  msgid "No commitment for %s days - cancel anytime!"
1382
  msgstr ""
1383
 
1384
+ #: classes/freemius/includes/i18n.php:259
1385
  #, php-format
1386
  msgid ""
1387
  "Your license has expired. You can still continue using all the %s features, "
1389
  "support."
1390
  msgstr ""
1391
 
1392
+ #: classes/freemius/includes/i18n.php:260
1393
  #, php-format
1394
  msgid "Couldn't activate %s."
1395
  msgstr ""
1396
 
1397
+ #: classes/freemius/includes/i18n.php:261
1398
  msgid "Please contact us with the following message:"
1399
  msgstr ""
1400
 
1401
+ #: classes/freemius/includes/i18n.php:262
1402
  msgid ""
1403
  "It looks like your plan did't change. If you did upgrade, it's probably an "
1404
  "issue on our side - sorry."
1405
  msgstr ""
1406
 
1407
+ #: classes/freemius/includes/i18n.php:263
1408
  msgid "Please contact us here"
1409
  msgstr ""
1410
 
1411
+ #: classes/freemius/includes/i18n.php:264
1412
  #, php-format
1413
  msgid ""
1414
  "I have upgraded my account but when I try to Sync the License, the plan "
1415
  "remains %s."
1416
  msgstr ""
1417
 
1418
+ #: classes/freemius/includes/i18n.php:267
1419
  msgid "From unknown reason, the API connectivity test fails."
1420
  msgstr ""
1421
 
1422
+ #: classes/freemius/includes/i18n.php:268
1423
  msgid ""
1424
  "We use PHP cURL library for the API calls, which is a very common library "
1425
  "and usually installed out of the box. Unfortunately, cURL is not installed "
1426
  "on your server."
1427
  msgstr ""
1428
 
1429
+ #: classes/freemius/includes/i18n.php:269
1430
  msgid ""
1431
  "From unknown reason, CloudFlare, the firewall we use, blocks the connection."
1432
  msgstr ""
1433
 
1434
+ #: classes/freemius/includes/i18n.php:270
1435
  #, php-format
1436
  msgctxt "as pluginX requires an access to our API"
1437
  msgid "%s requires an access to our API."
1438
  msgstr ""
1439
 
1440
+ #: classes/freemius/includes/i18n.php:271
1441
  msgid ""
1442
  "It looks like your server is using Squid ACL (access control lists), which "
1443
  "blocks the connection."
1444
  msgstr ""
1445
 
1446
+ #: classes/freemius/includes/i18n.php:272
1447
  msgid "I don't know what is Squid or ACL, help me!"
1448
  msgstr ""
1449
 
1450
+ #: classes/freemius/includes/i18n.php:273
1451
+ #: classes/freemius/includes/i18n.php:277
1452
  #, php-format
1453
  msgid ""
1454
  "We'll make sure to contact your hosting company and resolve the issue. You "
1455
  "will get a follow-up email to %s once we have an update."
1456
  msgstr ""
1457
 
1458
+ #: classes/freemius/includes/i18n.php:274
1459
  msgid "I'm a system administrator"
1460
  msgstr ""
1461
 
1462
+ #: classes/freemius/includes/i18n.php:275
1463
  #, php-format
1464
  msgid ""
1465
  "Great, please whitelist the following domains: %s. Once you done, deactivate "
1466
  "the plugin and activate it again."
1467
  msgstr ""
1468
 
1469
+ #: classes/freemius/includes/i18n.php:276
1470
  msgid "I don't know what is cURL or how to install it, help me!"
1471
  msgstr ""
1472
 
1473
+ #: classes/freemius/includes/i18n.php:278
1474
  msgid ""
1475
  "Great, please install cURL and enable it in your php.ini file. To make sure "
1476
  "it was successfully activated, use 'phpinfo()'. Once activated, deactivate "
1477
  "the plugin and reactivate it back again."
1478
  msgstr ""
1479
 
1480
+ #: classes/freemius/includes/i18n.php:279
1481
  msgid ""
1482
  "We are sure it's an issue on our side and more than happy to resolve it for "
1483
  "you ASAP if you give us a chance."
1484
  msgstr ""
1485
 
1486
+ #: classes/freemius/includes/i18n.php:280
1487
  msgid "Yes - I'm giving you a chance to fix it"
1488
  msgstr ""
1489
 
1490
+ #: classes/freemius/includes/i18n.php:281
1491
  #, php-format
1492
  msgid ""
1493
  "We will do our best to whitelist your server and resolve this issue ASAP. "
1494
  "You will get a follow-up email to %s once we have an update."
1495
  msgstr ""
1496
 
1497
+ #: classes/freemius/includes/i18n.php:282
1498
  msgid "Let's try your previous version"
1499
  msgstr ""
1500
 
1501
+ #: classes/freemius/includes/i18n.php:283
1502
  msgid "Uninstall this version and install the previous one."
1503
  msgstr ""
1504
 
1505
+ #: classes/freemius/includes/i18n.php:284
1506
  msgid "That's exhausting, please deactivate"
1507
  msgstr ""
1508
 
1509
+ #: classes/freemius/includes/i18n.php:285
1510
  msgid ""
1511
  "We feel your frustration and sincerely apologize for the inconvenience. Hope "
1512
  "to see you again in the future."
1513
  msgstr ""
1514
 
1515
+ #: classes/freemius/includes/i18n.php:286
1516
  #, php-format
1517
  msgid ""
1518
  "Thank for giving us the chance to fix it! A message was just sent to our "
1520
  "Appreciate your patience."
1521
  msgstr ""
1522
 
1523
+ #: classes/freemius/includes/i18n.php:287
1524
  #, php-format
1525
  msgctxt "%1s - plugin title, %2s - API domain"
1526
  msgid ""
1527
  "Your server is blocking the access to Freemius' API, which is crucial for "
1528
+ "%1s synchronization. Please contact your host to whitelist %2s"
1529
  msgstr ""
1530
 
1531
+ #: classes/freemius/includes/i18n.php:288
1532
  msgid ""
1533
  "It seems like one of the authentication parameters is wrong. Update your "
1534
  "Public Key, Secret Key & User ID, and try again."
1535
  msgstr ""
1536
 
1537
+ #: classes/freemius/includes/i18n.php:291
1538
  #, php-format
1539
  msgid ""
1540
  "Please check your mailbox, you should receive an email via %s to confirm the "
1542
  "the next 15 min. If you cannot find the email, please check your spam folder."
1543
  msgstr ""
1544
 
1545
+ #: classes/freemius/includes/i18n.php:292
1546
  #, php-format
1547
  msgid ""
1548
  "Thanks for confirming the ownership change. An email was just sent to %s for "
1549
  "final approval."
1550
  msgstr ""
1551
 
1552
+ #: classes/freemius/includes/i18n.php:293
1553
  #, php-format
1554
  msgid "%s is the new owner of the account."
1555
  msgstr ""
1556
 
1557
+ #: classes/freemius/includes/i18n.php:295
1558
  #, php-format
1559
  msgctxt "addonX cannot run without pluginY"
1560
  msgid "%s cannot run without %s."
1561
  msgstr ""
1562
 
1563
+ #: classes/freemius/includes/i18n.php:296
1564
  #, php-format
1565
  msgctxt "addonX cannot run..."
1566
  msgid "%s cannot run without the plugin."
1567
  msgstr ""
1568
 
1569
+ #: classes/freemius/includes/i18n.php:297
1570
  #, php-format
1571
  msgctxt "pluginX activation was successfully..."
1572
  msgid "%s activation was successfully completed."
1573
  msgstr ""
1574
 
1575
+ #: classes/freemius/includes/i18n.php:298
1576
  msgctxt "Plugin installer section title"
1577
  msgid "Features & Pricing"
1578
  msgstr ""
1579
 
1580
+ #: classes/freemius/templates/account.php:287
1581
  msgctxt "verb"
1582
  msgid "Edit"
1583
  msgstr ""
readme.txt CHANGED
@@ -3,7 +3,7 @@ Contributors: pojo.me, KingYes, ariel.k, maor, freemius
3
  Tags: actions, activity, Activity Log, activity logs, admin, admin actions, administration, analytics, audit, audit log, audit logs, bbPress, change, changes, dashboard, email notifications, event, event log, log, logger, Logs, monitor, multi-users, multisite, notifications, security, security audit trail, security event log, stats, stream, tracking, troubleshooting, user activity report, user tracking, woocommerce, woocommerce log, woocommerce monitor, woocommerce monitoring, woocommrece security, wordpress activity log, WordPress Admin, wordpress admin monitoring, wordpress audit, wordpress email alerts, wordpress log, wordpress monitor, wordpress monitoring, wordpress multisite, wordpress security, wordpress security alerts, wordpress security audit log, wordpress security monitor, wordpress security plugin, wordpress user tracking
4
  Requires at least: 3.5
5
  Tested up to: 4.4
6
- Stable tag: 2.2.8
7
  License: GPLv2 or later
8
 
9
  Get aware of any activities that are taking place on your dashboard! Imagine it like a black-box for your WordPress site.
@@ -96,6 +96,9 @@ Would you like to like to contribute to Activity Log? You are more than welcome
96
 
97
  == Changelog ==
98
 
 
 
 
99
  = 2.2.8 =
100
  * Tweak! Update Freemius SDK
101
 
3
  Tags: actions, activity, Activity Log, activity logs, admin, admin actions, administration, analytics, audit, audit log, audit logs, bbPress, change, changes, dashboard, email notifications, event, event log, log, logger, Logs, monitor, multi-users, multisite, notifications, security, security audit trail, security event log, stats, stream, tracking, troubleshooting, user activity report, user tracking, woocommerce, woocommerce log, woocommerce monitor, woocommerce monitoring, woocommrece security, wordpress activity log, WordPress Admin, wordpress admin monitoring, wordpress audit, wordpress email alerts, wordpress log, wordpress monitor, wordpress monitoring, wordpress multisite, wordpress security, wordpress security alerts, wordpress security audit log, wordpress security monitor, wordpress security plugin, wordpress user tracking
4
  Requires at least: 3.5
5
  Tested up to: 4.4
6
+ Stable tag: 2.2.9
7
  License: GPLv2 or later
8
 
9
  Get aware of any activities that are taking place on your dashboard! Imagine it like a black-box for your WordPress site.
96
 
97
  == Changelog ==
98
 
99
+ = 2.2.9 =
100
+ * Tweak! Update Freemius SDK
101
+
102
  = 2.2.8 =
103
  * Tweak! Update Freemius SDK
104