Yasr – Yet Another Stars Rating - Version 2.5.2

Version Description

  • NEW FEATURE: is now possible delete overall rating data in Yet Another Stars Rating -> Stats -> Overall Rating
  • FIXED: Schema title come with rating string if "Enable stars next to the title?" is enabled
  • TWEAKED: all rankings functions has been rewritten to work with REST API. Documentation will come soon.
  • TWEAKED: a lot of minor changes.
Download this release

Release Info

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

Code changes from version 2.5.1 to 2.5.2

Files changed (42) hide show
  1. admin/settings/classes/YasrStats.php +308 -0
  2. admin/settings/yasr-stats-page.php +37 -11
  3. freemius/assets/css/admin/account.css +1 -1
  4. freemius/config.php +4 -1
  5. freemius/includes/class-freemius.php +108 -6
  6. freemius/includes/class-fs-plugin-updater.php +49 -6
  7. freemius/includes/fs-plugin-info-dialog.php +15 -9
  8. freemius/includes/i18n.php +2 -0
  9. freemius/includes/sdk/FreemiusWordPress.php +5 -1
  10. freemius/languages/freemius-cs_CZ.mo +0 -0
  11. freemius/languages/freemius-da_DK.mo +0 -0
  12. freemius/languages/freemius-en.mo +0 -0
  13. freemius/languages/freemius-es_ES.mo +0 -0
  14. freemius/languages/freemius-fr_FR.mo +0 -0
  15. freemius/languages/freemius-he_IL.mo +0 -0
  16. freemius/languages/freemius-hu_HU.mo +0 -0
  17. freemius/languages/freemius-it_IT.mo +0 -0
  18. freemius/languages/freemius-ja.mo +0 -0
  19. freemius/languages/freemius-nl_NL.mo +0 -0
  20. freemius/languages/freemius-ru_RU.mo +0 -0
  21. freemius/languages/freemius-ta.mo +0 -0
  22. freemius/languages/freemius-zh_CN.mo +0 -0
  23. freemius/languages/freemius.pot +304 -272
  24. freemius/start.php +1 -1
  25. freemius/templates/account.php +23 -0
  26. freemius/templates/forms/affiliation.php +2 -0
  27. includes/classes/YasrDatabaseRatings.php +39 -0
  28. includes/classes/YasrMultiSetData.php +18 -3
  29. includes/classes/YasrRankingData.php +124 -0
  30. includes/rest/classes/YasrCustomEndpoint.php +182 -36
  31. includes/rest/classes/YasrCustomFields.php +1 -1
  32. includes/shortcodes/classes/YasrOverallRating.php +1 -1
  33. includes/shortcodes/classes/YasrRankings.php +72 -91
  34. includes/shortcodes/classes/YasrVisitorMultiSet.php +1 -0
  35. includes/shortcodes/classes/YasrVisitorVotes.php +58 -55
  36. includes/shortcodes/yasr-shortcode-ajax.php +4 -0
  37. includes/yasr-includes-functions.php +1 -1
  38. includes/yasr-includes-init.php +3 -3
  39. public/classes/YasrPublicFilters.php +93 -62
  40. public/yasr-public-init.php +3 -2
  41. readme.txt +7 -1
  42. yet-another-stars-rating.php +2 -2
admin/settings/classes/YasrStats.php ADDED
@@ -0,0 +1,308 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+
5
+ Copyright 2014 Dario Curvino (email : d.curvino@tiscali.it)
6
+
7
+ This program is free software: you can redistribute it and/or modify
8
+ it under the terms of the GNU General Public License as published by
9
+ the Free Software Foundation, either version 2 of the License, or
10
+ (at your option) any later version.
11
+
12
+ This program is distributed in the hope that it will be useful,
13
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ GNU General Public License for more details.
16
+
17
+ You should have received a copy of the GNU General Public License
18
+ along with this program. If not, see <http://www.gnu.org/licenses/>
19
+ */
20
+
21
+ if ( ! defined( 'ABSPATH' ) ) {
22
+ exit( 'You\'re not allowed to see this page' );
23
+ } // Exit if accessed directly
24
+
25
+ /**
26
+ * Create a new table class that will extend the WP_List_Table
27
+ */
28
+ class YasrStats extends YASR_WP_List_Table {
29
+
30
+ private $active_tab;
31
+
32
+ function __construct($active_tab) {
33
+ parent::__construct();
34
+ $this->active_tab = $active_tab;
35
+ }
36
+ /**
37
+ * Prepare the items for the table to process
38
+ *
39
+ * @return Void
40
+ */
41
+ public function prepare_items() {
42
+ $columns = $this->get_columns();
43
+ $hidden = $this->get_hidden_columns();
44
+ $sortable = $this->get_sortable_columns();
45
+
46
+ //print bulk_Actions
47
+ $this->get_bulk_actions();
48
+ $this->process_bulk_action();
49
+
50
+ if ($this->active_tab === 'logs' || $this->active_tab === '') {
51
+ $data = YasrDatabaseRatings::getAllVisitorVotes();
52
+ }
53
+ else if($this->active_tab === 'logs_multi') {
54
+ $data = YasrMultiSetData::returnAllLogMulti();
55
+ }
56
+ else if($this->active_tab === 'overall') {
57
+ $data = YasrDatabaseRatings::getAllOverallRatings();
58
+ }
59
+
60
+ usort($data, array( $this, 'sort_data' ));
61
+
62
+ $perPage = 25;
63
+ $currentPage = $this->get_pagenum();
64
+ $totalItems = count($data);
65
+
66
+ $this->set_pagination_args(
67
+ array(
68
+ 'total_items' => $totalItems,
69
+ 'per_page' => $perPage
70
+ )
71
+ );
72
+
73
+ $data = array_slice($data, (( $currentPage - 1 ) * $perPage ), $perPage);
74
+
75
+ $this->_column_headers = array( $columns, $hidden, $sortable );
76
+ $this->items = $data;
77
+
78
+ }
79
+
80
+ /**
81
+ * Override the parent columns method. Defines the columns to use in your listing table
82
+ *
83
+ * @return Array
84
+ */
85
+ public function get_columns() {
86
+
87
+ $columns = array(
88
+ 'cb' => '<input type="checkbox" />',
89
+ 'id' => 'ID',
90
+ 'post_id' => 'Title',
91
+ 'vote' => 'Vote',
92
+ 'user_id' => 'User ID',
93
+ 'date' => 'Date'
94
+ );
95
+
96
+ if($this->active_tab === 'logs_multi') {
97
+ //insert multiset and field name
98
+ $columns = array_slice($columns, 0, 3, true) +
99
+ array('set_type' => 'MultiSet', 'field_id' => 'Field Name') +
100
+ array_slice($columns, 3, count($columns) - 1, true) ;
101
+ }
102
+
103
+ if (YASR_ENABLE_IP === 'yes') {
104
+ $columns['ip'] = 'IP';
105
+ }
106
+ return $columns;
107
+ }
108
+
109
+ /**
110
+ * Define which columns are hidden
111
+ *
112
+ * @return Array
113
+ */
114
+ public function get_hidden_columns() {
115
+ return array('id');
116
+ }
117
+
118
+ /**
119
+ * Define the sortable columns
120
+ *
121
+ * @return Array
122
+ */
123
+ public function get_sortable_columns() {
124
+
125
+ $sortable_columns = array(
126
+ 'post_id' => array('post_id', false),
127
+ 'user_id' => array('user_id', false),
128
+ 'vote' => array('vote', false),
129
+ 'date' => array('date', false),
130
+ 'ip' => array('ip', false)
131
+ );
132
+
133
+ if($this->active_tab === 'logs_multi') {
134
+ $sortable_columns['set_type'] = array('set_type', false);
135
+ $sortable_columns['field_id'] = array('field_id', false);
136
+ }
137
+
138
+ return $sortable_columns;
139
+ }
140
+
141
+ /**
142
+ * Define what data to show on each column of the table
143
+ *
144
+ * @param Array $item Data
145
+ * @param String $column_name - Current column name
146
+ *
147
+ * @return Mixed|void
148
+ */
149
+ protected function column_default( $item, $column_name ) {
150
+
151
+ global $wpdb;
152
+
153
+ if (isset($item['set_type'])) {
154
+ $set_id = (int)$item['set_type'];
155
+ }
156
+
157
+ switch ($column_name) {
158
+ case 'post_id':
159
+ $post_id = $item[$column_name];
160
+
161
+ $title_post = wp_strip_all_tags(get_the_title($post_id));
162
+ $link = get_permalink($post_id);
163
+
164
+ return '<a href="' . $link . '">' . $title_post . '</a>';
165
+
166
+ case 'user_id':
167
+ $user_id = $item[$column_name];
168
+
169
+ $user = get_user_by('id', $user_id);
170
+
171
+ //If !user means that the vote are anonymous
172
+ if ($user === false) {
173
+ $user = (object) array( 'user_login' );
174
+ $user->user_login = __('anonymous', 'yet-another-stars-rating');
175
+ }
176
+
177
+ return $user->user_login;
178
+
179
+ case 'set_type':
180
+ $data = $wpdb->get_results(
181
+ $wpdb->prepare(
182
+ "SELECT set_name
183
+ FROM " . YASR_MULTI_SET_NAME_TABLE . "
184
+ WHERE set_id = %d", $set_id),
185
+ ARRAY_A);
186
+
187
+ if(!empty($data)) {
188
+ return $data[0]['set_name'];
189
+ }
190
+
191
+ return __('Multi Set doesn\'t exists', 'yet-another-stars-rating');
192
+
193
+ case 'field_id':
194
+ $field_id = $item[$column_name];
195
+ $data = $wpdb->get_results(
196
+ $wpdb->prepare(
197
+ "SELECT field_name
198
+ FROM " . YASR_MULTI_SET_FIELDS_TABLE . "
199
+ WHERE parent_set_id = %d
200
+ AND field_id = %d",
201
+ $set_id, $field_id),
202
+ ARRAY_A);
203
+
204
+ if(!empty($data)) {
205
+ return $data[0]['field_name'];
206
+ }
207
+
208
+ return __('Field doesn\'t exists', 'yet-another-stars-rating');
209
+
210
+ case 'date':
211
+ $date = $item[$column_name];
212
+ if($item[$column_name] === '0000-00-00 00:00:00') {
213
+ $date = __('Imported Data', 'yet-another-stars-rating');
214
+ }
215
+ return $date;
216
+
217
+ //All other columns must return their content
218
+ case 'vote':
219
+ case 'ip':
220
+ return $item[$column_name];
221
+ }
222
+ return;
223
+ }
224
+
225
+ /**
226
+ * Allows you to sort the data by the variables set in the $_GET
227
+ *
228
+ * @return Mixed
229
+ */
230
+ protected function sort_data( $a, $b ) {
231
+
232
+ // Set defaults (just need to avoid undefined variable at first load,
233
+ // it is already ordered with the query
234
+ $orderby = 'date';
235
+ $order = 'desc';
236
+
237
+ // If orderby is set, use this as the sort column
238
+ if (!empty($_GET['orderby'])) {
239
+ $orderby = $_GET['orderby'];
240
+ }
241
+
242
+ // If order is set use this as the order
243
+ if (!empty($_GET['order'])) {
244
+ $order = $_GET['order'];
245
+ }
246
+
247
+ $result = strcmp($a[ $orderby ], $b[ $orderby ]);
248
+
249
+ if ($order === 'asc') {
250
+ return $result;
251
+ }
252
+
253
+ return - $result;
254
+ }
255
+
256
+
257
+ protected function get_bulk_actions() {
258
+ $actions = array(
259
+ 'delete' => 'Delete'
260
+ );
261
+ return $actions;
262
+ }
263
+
264
+ protected function column_cb($item) {
265
+
266
+ return sprintf(
267
+ "<input type='checkbox' name='yasr_logs_votes_to_delete[]' id='{$item['id']}' value='{$item['id']}' />"
268
+ );
269
+ }
270
+
271
+ //process bulk action
272
+ protected function process_bulk_action() {
273
+ if ($this->current_action() === 'delete') {
274
+ check_admin_referer( 'yasr-delete-stats-logs', 'yasr-nonce-delete-stats-logs' );
275
+
276
+ global $wpdb;
277
+
278
+ $table = YASR_LOG_TABLE;
279
+
280
+ if($this->active_tab === 'logs_multi') {
281
+ $table = YASR_LOG_MULTI_SET;
282
+ }
283
+
284
+ foreach ($_POST['yasr_logs_votes_to_delete'] as $log_id) {
285
+ //force to be an int
286
+ $log_id = (int)$log_id;
287
+
288
+ //If user is deleting an overall rating value, use delete_meta and return
289
+ if($this->active_tab === 'overall') {
290
+ delete_meta($log_id);
291
+ return;
292
+ }
293
+
294
+ //delete the log id
295
+ $wpdb->delete(
296
+ $table,
297
+ array(
298
+ 'id' => $log_id
299
+ ),
300
+ array( '%d' )
301
+ );
302
+
303
+ }
304
+ }
305
+
306
+ }
307
+
308
+ }
admin/settings/yasr-stats-page.php CHANGED
@@ -42,14 +42,6 @@ if (!current_user_can('manage_options')) {
42
 
43
  <h2 class="nav-tab-wrapper yasr-no-underline">
44
 
45
- <?php /*
46
- <a href="?page=yasr_stats_page&tab=logs_overall" class="nav-tab
47
- <?php echo ($active_tab === 'logs_overall') ? 'nav-tab-active' : ''; ?>"
48
- >
49
- <?php _e("Overall Rating", 'yet-another-stars-rating'); ?>
50
- </a>
51
- */ ?>
52
-
53
  <a href="?page=yasr_stats_page&tab=logs" class="nav-tab
54
  <?php echo ($active_tab === 'logs') ? 'nav-tab-active' : ''; ?>"
55
  >
@@ -62,7 +54,16 @@ if (!current_user_can('manage_options')) {
62
  <?php _e("MultiSet", 'yet-another-stars-rating'); ?>
63
  </a>
64
 
65
- <?php do_action('yasr_add_stats_tab', $active_tab); ?>
 
 
 
 
 
 
 
 
 
66
 
67
  <a href="?page=yasr_settings_page-pricing" class="nav-tab">
68
  <?php _e("Upgrade", 'yet-another-stars-rating'); ?>
@@ -79,7 +80,7 @@ if (!current_user_can('manage_options')) {
79
  <form action="#" id="" method="POST">
80
  <?php
81
  wp_nonce_field('yasr-delete-stats-logs', 'yasr-nonce-delete-stats-logs');
82
- $yasr_stats_log_table = new YasrStatsVisitorMulti($active_tab);
83
  $yasr_stats_log_table->prepare_items();
84
  $yasr_stats_log_table->display();
85
  ?>
@@ -104,7 +105,7 @@ if (!current_user_can('manage_options')) {
104
  <form action="#" id="" method="POST">
105
  <?php
106
  wp_nonce_field('yasr-delete-stats-logs', 'yasr-nonce-delete-stats-logs');
107
- $yasr_stats_log_table = new YasrStatsVisitorMulti($active_tab);
108
  $yasr_stats_log_table->prepare_items();
109
  $yasr_stats_log_table->display();
110
  ?>
@@ -122,6 +123,31 @@ if (!current_user_can('manage_options')) {
122
 
123
  } //End if tab 'general_settings'
124
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
125
  do_action('yasr_settings_check_active_tab', $active_tab);
126
  yasr_right_settings_panel('bottom');
127
  ?>
42
 
43
  <h2 class="nav-tab-wrapper yasr-no-underline">
44
 
 
 
 
 
 
 
 
 
45
  <a href="?page=yasr_stats_page&tab=logs" class="nav-tab
46
  <?php echo ($active_tab === 'logs') ? 'nav-tab-active' : ''; ?>"
47
  >
54
  <?php _e("MultiSet", 'yet-another-stars-rating'); ?>
55
  </a>
56
 
57
+ <a href="?page=yasr_stats_page&tab=overall" class="nav-tab
58
+ <?php echo ($active_tab === 'overall') ? 'nav-tab-active' : ''; ?>"
59
+ >
60
+ <?php _e("Overall Rating", 'yet-another-stars-rating'); ?>
61
+ </a>
62
+
63
+ <?php
64
+ //Use this hooks to add tabs in the stats page
65
+ do_action('yasr_add_stats_tab', $active_tab);
66
+ ?>
67
 
68
  <a href="?page=yasr_settings_page-pricing" class="nav-tab">
69
  <?php _e("Upgrade", 'yet-another-stars-rating'); ?>
80
  <form action="#" id="" method="POST">
81
  <?php
82
  wp_nonce_field('yasr-delete-stats-logs', 'yasr-nonce-delete-stats-logs');
83
+ $yasr_stats_log_table = new YasrStats($active_tab);
84
  $yasr_stats_log_table->prepare_items();
85
  $yasr_stats_log_table->display();
86
  ?>
105
  <form action="#" id="" method="POST">
106
  <?php
107
  wp_nonce_field('yasr-delete-stats-logs', 'yasr-nonce-delete-stats-logs');
108
+ $yasr_stats_log_table = new YasrStats($active_tab);
109
  $yasr_stats_log_table->prepare_items();
110
  $yasr_stats_log_table->display();
111
  ?>
123
 
124
  } //End if tab 'general_settings'
125
 
126
+ if ($active_tab === 'overall') {
127
+ ?>
128
+
129
+ <div class="yasr-settingsdiv">
130
+ <form action="#" id="" method="POST">
131
+ <?php
132
+ wp_nonce_field('yasr-delete-stats-logs', 'yasr-nonce-delete-stats-logs');
133
+ $yasr_stats_log_table = new YasrStats($active_tab);
134
+ $yasr_stats_log_table->prepare_items();
135
+ $yasr_stats_log_table->display();
136
+ ?>
137
+ </form>
138
+ </div>
139
+
140
+ <?php
141
+ yasr_right_settings_panel();
142
+ ?>
143
+
144
+ <div class="yasr-space-settings-div">
145
+ </div>
146
+
147
+ <?php
148
+
149
+ } //End if tab 'overall'
150
+
151
  do_action('yasr_settings_check_active_tab', $active_tab);
152
  yasr_right_settings_panel('bottom');
153
  ?>
freemius/assets/css/admin/account.css CHANGED
@@ -1 +1 @@
1
- label.fs-tag,span.fs-tag{background:#ffba00;color:#fff;display:inline-block;border-radius:3px;padding:5px;font-size:11px;line-height:11px;vertical-align:baseline}label.fs-tag.fs-warn,span.fs-tag.fs-warn{background:#ffba00}label.fs-tag.fs-info,span.fs-tag.fs-info{background:#00a0d2}label.fs-tag.fs-success,span.fs-tag.fs-success{background:#46b450}label.fs-tag.fs-error,span.fs-tag.fs-error{background:#dc3232}#fs_account .postbox,#fs_account .widefat{max-width:800px}#fs_account h3{font-size:1.3em;padding:12px 15px;margin:0 0 12px 0;line-height:1.4;border-bottom:1px solid #F1F1F1}#fs_account h3 .dashicons{width:26px;height:26px;font-size:1.3em}#fs_account i.dashicons{font-size:1.2em;height:1.2em;width:1.2em}#fs_account .dashicons{vertical-align:middle}#fs_account .fs-header-actions{position:absolute;top:17px;right:15px;font-size:0.9em}#fs_account .fs-header-actions ul{margin:0}#fs_account .fs-header-actions li{float:left}#fs_account .fs-header-actions li form{display:inline-block}#fs_account .fs-header-actions li a{text-decoration:none}#fs_account_details .button-group{float:right}.rtl #fs_account .fs-header-actions{left:15px;right:auto}.fs-key-value-table{width:100%}.fs-key-value-table form{display:inline-block}.fs-key-value-table tr td:first-child{text-align:right}.fs-key-value-table tr td:first-child nobr{font-weight:bold}.fs-key-value-table tr td:first-child form{display:block}.fs-key-value-table tr td.fs-right{text-align:right}.fs-key-value-table tr.fs-odd{background:#ebebeb}.fs-key-value-table td,.fs-key-value-table th{padding:10px}.fs-key-value-table code{line-height:28px}.fs-key-value-table var,.fs-key-value-table code,.fs-key-value-table input[type="text"]{color:#0073AA;font-size:16px;background:none}.fs-key-value-table input[type="text"]{width:100%;font-weight:bold}.fs-field-beta_program label{margin-left:7px}label.fs-tag{background:#ffba00;color:#fff;display:inline-block;border-radius:3px;padding:5px;font-size:11px;line-height:11px;vertical-align:baseline}label.fs-tag.fs-warn{background:#ffba00}label.fs-tag.fs-success{background:#46b450}label.fs-tag.fs-error{background:#dc3232}#fs_sites .fs-scrollable-table .fs-table-body{max-height:200px;overflow:auto;border:1px solid #e5e5e5}#fs_sites .fs-scrollable-table .fs-table-body>table.widefat{border:none !important}#fs_sites .fs-scrollable-table .fs-main-column{width:100%}#fs_sites .fs-scrollable-table .fs-site-details td:first-of-type{text-align:right;color:grey;width:1px}#fs_sites .fs-scrollable-table .fs-site-details td:last-of-type{text-align:right}#fs_sites .fs-scrollable-table .fs-install-details table tr td{width:1px;white-space:nowrap}#fs_sites .fs-scrollable-table .fs-install-details table tr td:last-of-type{width:auto}#fs_addons h3{border:none;margin-bottom:0;padding:4px 5px}#fs_addons td{vertical-align:middle}#fs_addons thead{white-space:nowrap}#fs_addons td:first-child,#fs_addons th:first-child{text-align:left;font-weight:bold}#fs_addons td:last-child,#fs_addons th:last-child{text-align:right}#fs_addons th{font-weight:bold}#fs_billing_address{width:100%}#fs_billing_address tr td{width:50%;padding:5px}#fs_billing_address tr:first-of-type td{padding-top:0}#fs_billing_address span{font-weight:bold}#fs_billing_address input,#fs_billing_address select{display:block;width:100%;margin-top:5px}#fs_billing_address input::-moz-placeholder,#fs_billing_address select::-moz-placeholder{color:transparent;opacity:1}#fs_billing_address input:-ms-input-placeholder,#fs_billing_address select:-ms-input-placeholder{color:transparent}#fs_billing_address input::-webkit-input-placeholder,#fs_billing_address select::-webkit-input-placeholder{color:transparent}#fs_billing_address input.fs-read-mode,#fs_billing_address select.fs-read-mode{border-color:transparent;color:#777;border-bottom:1px dashed #ccc;padding-left:0;background:none}#fs_billing_address.fs-read-mode td span{display:none}#fs_billing_address.fs-read-mode input,#fs_billing_address.fs-read-mode select{border-color:transparent;color:#777;border-bottom:1px dashed #ccc;padding-left:0;background:none}#fs_billing_address.fs-read-mode input::-moz-placeholder,#fs_billing_address.fs-read-mode select::-moz-placeholder{color:#ccc;opacity:1}#fs_billing_address.fs-read-mode input:-ms-input-placeholder,#fs_billing_address.fs-read-mode select:-ms-input-placeholder{color:#ccc}#fs_billing_address.fs-read-mode input::-webkit-input-placeholder,#fs_billing_address.fs-read-mode select::-webkit-input-placeholder{color:#ccc}#fs_billing_address button{display:block;width:100%}
1
+ label.fs-tag,span.fs-tag{background:#ffba00;color:#fff;display:inline-block;border-radius:3px;padding:5px;font-size:11px;line-height:11px;vertical-align:baseline}label.fs-tag.fs-warn,span.fs-tag.fs-warn{background:#ffba00}label.fs-tag.fs-info,span.fs-tag.fs-info{background:#00a0d2}label.fs-tag.fs-success,span.fs-tag.fs-success{background:#46b450}label.fs-tag.fs-error,span.fs-tag.fs-error{background:#dc3232}.fs-notice[data-id="license_not_whitelabeled"].success,.fs-notice[data-id="license_whitelabeled"].success{color:inherit;border-left-color:#00a0d2}.fs-notice[data-id="license_not_whitelabeled"].success label.fs-plugin-title,.fs-notice[data-id="license_whitelabeled"].success label.fs-plugin-title{display:none}#fs_account .postbox,#fs_account .widefat{max-width:800px}#fs_account h3{font-size:1.3em;padding:12px 15px;margin:0 0 12px 0;line-height:1.4;border-bottom:1px solid #F1F1F1}#fs_account h3 .dashicons{width:26px;height:26px;font-size:1.3em}#fs_account i.dashicons{font-size:1.2em;height:1.2em;width:1.2em}#fs_account .dashicons{vertical-align:middle}#fs_account .fs-header-actions{position:absolute;top:17px;right:15px;font-size:0.9em}#fs_account .fs-header-actions ul{margin:0}#fs_account .fs-header-actions li{float:left}#fs_account .fs-header-actions li form{display:inline-block}#fs_account .fs-header-actions li a{text-decoration:none}#fs_account_details .button-group{float:right}.rtl #fs_account .fs-header-actions{left:15px;right:auto}.fs-key-value-table{width:100%}.fs-key-value-table form{display:inline-block}.fs-key-value-table tr td:first-child{text-align:right}.fs-key-value-table tr td:first-child nobr{font-weight:bold}.fs-key-value-table tr td:first-child form{display:block}.fs-key-value-table tr td.fs-right{text-align:right}.fs-key-value-table tr.fs-odd{background:#ebebeb}.fs-key-value-table td,.fs-key-value-table th{padding:10px}.fs-key-value-table code{line-height:28px}.fs-key-value-table var,.fs-key-value-table code,.fs-key-value-table input[type="text"]{color:#0073AA;font-size:16px;background:none}.fs-key-value-table input[type="text"]{width:100%;font-weight:bold}.fs-field-beta_program label{margin-left:7px}label.fs-tag{background:#ffba00;color:#fff;display:inline-block;border-radius:3px;padding:5px;font-size:11px;line-height:11px;vertical-align:baseline}label.fs-tag.fs-warn{background:#ffba00}label.fs-tag.fs-success{background:#46b450}label.fs-tag.fs-error{background:#dc3232}#fs_sites .fs-scrollable-table .fs-table-body{max-height:200px;overflow:auto;border:1px solid #e5e5e5}#fs_sites .fs-scrollable-table .fs-table-body>table.widefat{border:none !important}#fs_sites .fs-scrollable-table .fs-main-column{width:100%}#fs_sites .fs-scrollable-table .fs-site-details td:first-of-type{text-align:right;color:grey;width:1px}#fs_sites .fs-scrollable-table .fs-site-details td:last-of-type{text-align:right}#fs_sites .fs-scrollable-table .fs-install-details table tr td{width:1px;white-space:nowrap}#fs_sites .fs-scrollable-table .fs-install-details table tr td:last-of-type{width:auto}#fs_addons h3{border:none;margin-bottom:0;padding:4px 5px}#fs_addons td{vertical-align:middle}#fs_addons thead{white-space:nowrap}#fs_addons td:first-child,#fs_addons th:first-child{text-align:left;font-weight:bold}#fs_addons td:last-child,#fs_addons th:last-child{text-align:right}#fs_addons th{font-weight:bold}#fs_billing_address{width:100%}#fs_billing_address tr td{width:50%;padding:5px}#fs_billing_address tr:first-of-type td{padding-top:0}#fs_billing_address span{font-weight:bold}#fs_billing_address input,#fs_billing_address select{display:block;width:100%;margin-top:5px}#fs_billing_address input::-moz-placeholder,#fs_billing_address select::-moz-placeholder{color:transparent;opacity:1}#fs_billing_address input:-ms-input-placeholder,#fs_billing_address select:-ms-input-placeholder{color:transparent}#fs_billing_address input::-webkit-input-placeholder,#fs_billing_address select::-webkit-input-placeholder{color:transparent}#fs_billing_address input.fs-read-mode,#fs_billing_address select.fs-read-mode{border-color:transparent;color:#777;border-bottom:1px dashed #ccc;padding-left:0;background:none}#fs_billing_address.fs-read-mode td span{display:none}#fs_billing_address.fs-read-mode input,#fs_billing_address.fs-read-mode select{border-color:transparent;color:#777;border-bottom:1px dashed #ccc;padding-left:0;background:none}#fs_billing_address.fs-read-mode input::-moz-placeholder,#fs_billing_address.fs-read-mode select::-moz-placeholder{color:#ccc;opacity:1}#fs_billing_address.fs-read-mode input:-ms-input-placeholder,#fs_billing_address.fs-read-mode select:-ms-input-placeholder{color:#ccc}#fs_billing_address.fs-read-mode input::-webkit-input-placeholder,#fs_billing_address.fs-read-mode select::-webkit-input-placeholder{color:#ccc}#fs_billing_address button{display:block;width:100%}
freemius/config.php CHANGED
@@ -385,4 +385,7 @@
385
 
386
  if ( ! defined( 'WP_FS__DEMO_MODE' ) ) {
387
  define( 'WP_FS__DEMO_MODE', false );
388
- }
 
 
 
385
 
386
  if ( ! defined( 'WP_FS__DEMO_MODE' ) ) {
387
  define( 'WP_FS__DEMO_MODE', false );
388
+ }
389
+ if ( ! defined( 'FS_SDK__SSLVERIFY' ) ) {
390
+ define( 'FS_SDK__SSLVERIFY', false );
391
+ }
freemius/includes/class-freemius.php CHANGED
@@ -1645,6 +1645,7 @@
1645
  add_action( 'deactivate_blog', array( $this, '_after_site_deactivated_callback' ) );
1646
  add_action( 'archive_blog', array( $this, '_after_site_deactivated_callback' ) );
1647
  add_action( 'make_spam_blog', array( $this, '_after_site_deactivated_callback' ) );
 
1648
  //call the deprecated version if wp_version < 5.1
1649
  if ( version_compare($GLOBALS['wp_version'],'5.1') === -1) {
1650
  add_action( 'deleted_blog', array( $this, '_after_site_deleted_callback' ), 10, 2);
@@ -1679,6 +1680,7 @@
1679
  $this->add_ajax_action( 'update_billing', array( $this, '_update_billing_ajax_action' ) );
1680
  $this->add_ajax_action( 'start_trial', array( $this, '_start_trial_ajax_action' ) );
1681
  $this->add_ajax_action( 'set_data_debug_mode', array( $this, '_set_data_debug_mode' ) );
 
1682
 
1683
  if ( $this->_is_network_active && fs_is_network_admin() ) {
1684
  $this->add_ajax_action( 'network_activate', array( $this, '_network_activate_ajax_action' ) );
@@ -7741,7 +7743,10 @@
7741
  * @author Leo Fajardo (@leorw)
7742
  * @since 1.2.2
7743
  */
7744
- if ( is_plugin_active( $other_version_basename ) ) {
 
 
 
7745
  deactivate_plugins( $other_version_basename );
7746
  }
7747
  }
@@ -9026,12 +9031,25 @@
9026
  'is_uninstalled' => false,
9027
  );
9028
 
9029
- $plugins_update_data[] = $new_plugin;
9030
  $network_plugins_cache->plugins[ $basename ] = $new_plugin;
9031
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9032
  if ( isset( $site_active_plugins[ $basename ] ) ) {
9033
  $site_active_plugins_cache->plugins[ $basename ] = $new_plugin;
9034
- $site_active_plugins_cache->plugins[ $basename ]['is_active'] = true;
9035
  }
9036
  }
9037
  }
@@ -13135,6 +13153,61 @@
13135
  }
13136
  }
13137
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
13138
  /**
13139
  * @author Leo Fajardo (@leorw)
13140
  * @since 2.3.0
@@ -20715,6 +20788,13 @@
20715
  }
20716
 
20717
  if ( 'none' !== $plan_change ) {
 
 
 
 
 
 
 
20718
  $this->do_action( 'after_license_change', $plan_change, $this->get_plan() );
20719
  }
20720
  }
@@ -22329,6 +22409,26 @@
22329
 
22330
  $this->_handle_account_edits();
22331
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
22332
  $this->do_action( 'account_page_load_before_departure' );
22333
  }
22334
 
@@ -23489,10 +23589,12 @@
23489
  * @since 1.0.3
23490
  */
23491
  function _redirect_on_activation_hook() {
23492
- $url = $this->get_after_plugin_activation_redirect_url();
 
23493
 
23494
- if ( is_string( $url ) ) {
23495
- fs_redirect( $url );
 
23496
  }
23497
  }
23498
 
1645
  add_action( 'deactivate_blog', array( $this, '_after_site_deactivated_callback' ) );
1646
  add_action( 'archive_blog', array( $this, '_after_site_deactivated_callback' ) );
1647
  add_action( 'make_spam_blog', array( $this, '_after_site_deactivated_callback' ) );
1648
+
1649
  //call the deprecated version if wp_version < 5.1
1650
  if ( version_compare($GLOBALS['wp_version'],'5.1') === -1) {
1651
  add_action( 'deleted_blog', array( $this, '_after_site_deleted_callback' ), 10, 2);
1680
  $this->add_ajax_action( 'update_billing', array( $this, '_update_billing_ajax_action' ) );
1681
  $this->add_ajax_action( 'start_trial', array( $this, '_start_trial_ajax_action' ) );
1682
  $this->add_ajax_action( 'set_data_debug_mode', array( $this, '_set_data_debug_mode' ) );
1683
+ $this->add_ajax_action( 'toggle_whitelabel_mode', array( $this, '_toggle_whitelabel_mode_ajax_handler' ) );
1684
 
1685
  if ( $this->_is_network_active && fs_is_network_admin() ) {
1686
  $this->add_ajax_action( 'network_activate', array( $this, '_network_activate_ajax_action' ) );
7743
  * @author Leo Fajardo (@leorw)
7744
  * @since 1.2.2
7745
  */
7746
+ if (
7747
+ is_plugin_active( $other_version_basename ) &&
7748
+ $this->apply_filters( 'deactivate_on_activation', true )
7749
+ ) {
7750
  deactivate_plugins( $other_version_basename );
7751
  }
7752
  }
9031
  'is_uninstalled' => false,
9032
  );
9033
 
 
9034
  $network_plugins_cache->plugins[ $basename ] = $new_plugin;
9035
 
9036
+ $is_site_level_active = (
9037
+ isset( $site_active_plugins[ $basename ] ) &&
9038
+ $site_active_plugins[ $basename ]['is_active']
9039
+ );
9040
+
9041
+ /**
9042
+ * If not network active, set the activity status based on the site-level plugin status.
9043
+ */
9044
+ if ( ! $new_plugin['is_active'] ) {
9045
+ $new_plugin['is_active'] = $is_site_level_active;
9046
+ }
9047
+
9048
+ $plugins_update_data[] = $new_plugin;
9049
+
9050
  if ( isset( $site_active_plugins[ $basename ] ) ) {
9051
  $site_active_plugins_cache->plugins[ $basename ] = $new_plugin;
9052
+ $site_active_plugins_cache->plugins[ $basename ]['is_active'] = $is_site_level_active;
9053
  }
9054
  }
9055
  }
13153
  }
13154
  }
13155
 
13156
+ /**
13157
+ * @author Edgar Melkonyan
13158
+ * @since 2.4.1
13159
+ *
13160
+ * @throws Freemius_Exception
13161
+ */
13162
+ function _toggle_whitelabel_mode_ajax_handler() {
13163
+ $this->_logger->entrance();
13164
+
13165
+ $this->check_ajax_referer( 'toggle_whitelabel_mode' );
13166
+
13167
+ if ( ! $this->is_user_admin() ) {
13168
+ // Only for admins.
13169
+ self::shoot_ajax_failure();
13170
+ }
13171
+
13172
+ $license = $this->get_api_user_scope()->call(
13173
+ "/licenses/{$this->_site->license_id}.json",
13174
+ 'put',
13175
+ array( 'is_whitelabeled' => ! $this->_license->is_whitelabeled )
13176
+ );
13177
+
13178
+ if ( ! $this->is_api_result_entity( $license ) ) {
13179
+ self::shoot_ajax_failure(
13180
+ FS_Api::is_api_error_object( $license ) ?
13181
+ $license->error->message :
13182
+ fs_text_inline( "An unknown error has occurred while trying to toggle the license's white-label mode.", 'unknown-error-occurred', $this->get_slug() )
13183
+ );
13184
+ }
13185
+
13186
+ $this->_license->is_whitelabeled = $license->is_whitelabeled;
13187
+ $this->_store_licenses();
13188
+
13189
+ $this->_sync_license();
13190
+
13191
+ if ( ! $license->is_whitelabeled ) {
13192
+ $this->_admin_notices->remove_sticky( 'license_whitelabeled' );
13193
+ } else {
13194
+ $this->_admin_notices->add_sticky(
13195
+ sprintf(
13196
+ $this->get_text_inline(
13197
+ 'Your %s license was flagged as white-labeled to hide sensitive information from the WP Admin (e.g. your email, license key, prices, billing address & invoices). If you ever wish to revert it back, you can easily do it through your %s. If this was a mistake you can also %s.',
13198
+ 'license_whitelabeled'
13199
+ ),
13200
+ "<strong>{$this->get_plugin_title()}</strong>",
13201
+ sprintf( '<a href="https://users.freemius.com" target="_blank">%s</a>', $this->get_text_inline( 'User Dashboard', 'user-dashboard' ) ),
13202
+ sprintf( '<a href="#" class="fs-toggle-whitelabel-mode">%s</a>', $this->get_text_inline( 'revert it now', 'revert-it-now' ) )
13203
+ ),
13204
+ 'license_whitelabeled'
13205
+ );
13206
+ }
13207
+
13208
+ self::shoot_ajax_response( array( 'success' => true ) );
13209
+ }
13210
+
13211
  /**
13212
  * @author Leo Fajardo (@leorw)
13213
  * @since 2.3.0
20788
  }
20789
 
20790
  if ( 'none' !== $plan_change ) {
20791
+ if (
20792
+ ! is_object( $this->_license ) ||
20793
+ ! $this->_license->is_whitelabeled
20794
+ ) {
20795
+ $this->_admin_notices->remove_sticky( 'license_whitelabeled' );
20796
+ }
20797
+
20798
  $this->do_action( 'after_license_change', $plan_change, $this->get_plan() );
20799
  }
20800
  }
22409
 
22410
  $this->_handle_account_edits();
22411
 
22412
+ if (
22413
+ is_object( $this->_license ) &&
22414
+ $this->_license->user_id == $this->_user->id &&
22415
+ ! $this->is_whitelabeled( true )
22416
+ ) {
22417
+ $this->_admin_notices->add(
22418
+ sprintf(
22419
+ $this->get_text_inline( "Is this your client's site? %s if you wish to hide sensitive info like your email, license key, prices, billing address & invoices from the WP Admin.", 'license_not_whitelabeled' ),
22420
+ sprintf(
22421
+ '<a href="#" class="fs-toggle-whitelabel-mode">%s</a>',
22422
+ $this->get_text_inline( 'Click here', 'click-here' )
22423
+ )
22424
+ ),
22425
+ '',
22426
+ 'success',
22427
+ false,
22428
+ 'license_not_whitelabeled'
22429
+ );
22430
+ }
22431
+
22432
  $this->do_action( 'account_page_load_before_departure' );
22433
  }
22434
 
23589
  * @since 1.0.3
23590
  */
23591
  function _redirect_on_activation_hook() {
23592
+ if ( $this->apply_filters( 'redirect_on_activation', true ) ) {
23593
+ $url = $this->get_after_plugin_activation_redirect_url();
23594
 
23595
+ if ( is_string( $url ) ) {
23596
+ fs_redirect( $url );
23597
+ }
23598
  }
23599
  }
23600
 
freemius/includes/class-fs-plugin-updater.php CHANGED
@@ -542,23 +542,66 @@
542
  }
543
  }
544
 
 
 
 
545
  if ( is_object( $this->_update_details ) ) {
 
 
 
 
546
  if ( ! isset( $transient_data->response ) ) {
547
  $transient_data->response = array();
548
  }
549
 
550
  // Add plugin to transient data.
551
- $transient_data->response[ $this->_fs->premium_plugin_basename() ] = $this->_fs->is_plugin() ?
552
  $this->_update_details :
553
  (array) $this->_update_details;
554
- } else if ( isset( $transient_data->response ) ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
555
  /**
556
- * Ensure that there's no update data for the plugin to prevent upgrading the premium version to the latest free version.
557
  *
558
- * @author Leo Fajardo (@leorw)
559
- * @since 2.3.0
560
  */
561
- unset( $transient_data->response[ $this->_fs->premium_plugin_basename() ] );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
562
  }
563
 
564
  $slug = $this->_fs->get_slug();
542
  }
543
  }
544
 
545
+ // Alias.
546
+ $basename = $this->_fs->premium_plugin_basename();
547
+
548
  if ( is_object( $this->_update_details ) ) {
549
+ if ( isset( $transient_data->no_update ) ) {
550
+ unset( $transient_data->no_update[ $basename ] );
551
+ }
552
+
553
  if ( ! isset( $transient_data->response ) ) {
554
  $transient_data->response = array();
555
  }
556
 
557
  // Add plugin to transient data.
558
+ $transient_data->response[ $basename ] = $this->_fs->is_plugin() ?
559
  $this->_update_details :
560
  (array) $this->_update_details;
561
+ } else {
562
+ if ( isset( $transient_data->response ) ) {
563
+ /**
564
+ * Ensure that there's no update data for the plugin to prevent upgrading the premium version to the latest free version.
565
+ *
566
+ * @author Leo Fajardo (@leorw)
567
+ * @since 2.3.0
568
+ */
569
+ unset( $transient_data->response[ $basename ] );
570
+ }
571
+
572
+ if ( ! isset( $transient_data->no_update ) ) {
573
+ $transient_data->no_update = array();
574
+ }
575
+
576
  /**
577
+ * Add product to no_update transient data to properly integrate with WP 5.5 auto-updates UI.
578
  *
579
+ * @since 2.4.1
580
+ * @link https://make.wordpress.org/core/2020/07/30/recommended-usage-of-the-updates-api-to-support-the-auto-updates-ui-for-plugins-and-themes-in-wordpress-5-5/
581
  */
582
+ $transient_data->no_update[ $basename ] = $this->_fs->is_plugin() ?
583
+ (object) array(
584
+ 'id' => $basename,
585
+ 'slug' => $this->_fs->get_slug(),
586
+ 'plugin' => $basename,
587
+ 'new_version' => $this->_fs->get_plugin_version(),
588
+ 'url' => '',
589
+ 'package' => '',
590
+ 'icons' => array(),
591
+ 'banners' => array(),
592
+ 'banners_rtl' => array(),
593
+ 'tested' => '',
594
+ 'requires_php' => '',
595
+ 'compatibility' => new stdClass(),
596
+ ) :
597
+ array(
598
+ 'theme' => $basename,
599
+ 'new_version' => $this->_fs->get_plugin_version(),
600
+ 'url' => '',
601
+ 'package' => '',
602
+ 'requires' => '',
603
+ 'requires_php' => '',
604
+ );
605
  }
606
 
607
  $slug = $this->_fs->get_slug();
freemius/includes/fs-plugin-info-dialog.php CHANGED
@@ -260,14 +260,20 @@
260
  if ( $has_valid_blog_id ) {
261
  restore_current_blog();
262
  }
 
263
 
264
- if ( is_object( $fs_addon ) ) {
265
- $data->has_purchased_license = $fs_addon->has_active_valid_license();
266
- } else {
267
- $account_addons = $this->_fs->get_account_addons();
268
- if ( ! empty( $account_addons ) && in_array( $selected_addon->id, $account_addons ) ) {
269
- $data->has_purchased_license = true;
270
- }
 
 
 
 
 
271
  }
272
  }
273
 
@@ -577,7 +583,7 @@
577
 
578
  $has_installed_version = ( 'install' !== $this->status['status'] );
579
 
580
- if ( ! $api->has_paid_plan ) {
581
  /**
582
  * Free-only add-on.
583
  *
@@ -1635,4 +1641,4 @@
1635
  iframe_footer();
1636
  exit;
1637
  }
1638
- }
260
  if ( $has_valid_blog_id ) {
261
  restore_current_blog();
262
  }
263
+ }
264
 
265
+ /**
266
+ * Check if there's a purchased license in case the add-on can only be installed/downloaded as part of a purchased bundle.
267
+ *
268
+ * @author Leo Fajardo (@leorw)
269
+ * @since 2.4.1
270
+ */
271
+ if ( is_object( $fs_addon ) ) {
272
+ $data->has_purchased_license = $fs_addon->has_active_valid_license();
273
+ } else {
274
+ $account_addons = $this->_fs->get_account_addons();
275
+ if ( ! empty( $account_addons ) && in_array( $selected_addon->id, $account_addons ) ) {
276
+ $data->has_purchased_license = true;
277
  }
278
  }
279
 
583
 
584
  $has_installed_version = ( 'install' !== $this->status['status'] );
585
 
586
+ if ( ! $api->has_paid_plan && ! $api->has_purchased_license ) {
587
  /**
588
  * Free-only add-on.
589
  *
1641
  iframe_footer();
1642
  exit;
1643
  }
1644
+ }
freemius/includes/i18n.php CHANGED
@@ -98,6 +98,8 @@
98
  'error' => _fs_text( 'Error' ),
99
  'failed-finding-main-path' => _fs_text( 'Freemius SDK couldn\'t find the plugin\'s main file. Please contact sdk@freemius.com with the current error.' ),
100
  'learn-more' => _fs_text( 'Learn more' ),
 
 
101
 
102
  #region Affiliation
103
  'affiliation' => _fs_text( 'Affiliation' ),
98
  'error' => _fs_text( 'Error' ),
99
  'failed-finding-main-path' => _fs_text( 'Freemius SDK couldn\'t find the plugin\'s main file. Please contact sdk@freemius.com with the current error.' ),
100
  'learn-more' => _fs_text( 'Learn more' ),
101
+ 'license_not_whitelabeled' => _fs_text( "Is this your client's site? %s if you wish to hide sensitive info like your billing address and invoices from the WP Admin."),
102
+ 'license_whitelabeled' => _fs_text( 'Your %s license was flagged as white-labeled to hide sensitive information from the WP Admin (e.g. your billing address and invoices). If you ever wish to revert it back, you can easily do it through your %s. If this was a mistake you can also %s.'),
103
 
104
  #region Affiliation
105
  'affiliation' => _fs_text( 'Affiliation' ),
freemius/includes/sdk/FreemiusWordPress.php CHANGED
@@ -59,6 +59,10 @@
59
  }
60
  }
61
 
 
 
 
 
62
  $curl_version = FS_SDK__HAS_CURL ?
63
  curl_version() :
64
  array( 'version' => '7.37' );
@@ -401,7 +405,7 @@
401
  }
402
 
403
  if ( 'https' === substr( strtolower( $request_url ), 0, 5 ) ) {
404
- $pWPRemoteArgs['sslverify'] = false;
405
  }
406
 
407
  if ( false !== $pBeforeExecutionFunction &&
59
  }
60
  }
61
 
62
+ if ( ! defined( 'FS_SDK__SSLVERIFY' ) ) {
63
+ define( 'FS_SDK__SSLVERIFY', false );
64
+ }
65
+
66
  $curl_version = FS_SDK__HAS_CURL ?
67
  curl_version() :
68
  array( 'version' => '7.37' );
405
  }
406
 
407
  if ( 'https' === substr( strtolower( $request_url ), 0, 5 ) ) {
408
+ $pWPRemoteArgs['sslverify'] = FS_SDK__SSLVERIFY;
409
  }
410
 
411
  if ( false !== $pBeforeExecutionFunction &&
freemius/languages/freemius-cs_CZ.mo CHANGED
Binary file
freemius/languages/freemius-da_DK.mo CHANGED
Binary file
freemius/languages/freemius-en.mo CHANGED
Binary file
freemius/languages/freemius-es_ES.mo CHANGED
Binary file
freemius/languages/freemius-fr_FR.mo CHANGED
Binary file
freemius/languages/freemius-he_IL.mo CHANGED
Binary file
freemius/languages/freemius-hu_HU.mo CHANGED
Binary file
freemius/languages/freemius-it_IT.mo CHANGED
Binary file
freemius/languages/freemius-ja.mo CHANGED
Binary file
freemius/languages/freemius-nl_NL.mo CHANGED
Binary file
freemius/languages/freemius-ru_RU.mo CHANGED
Binary file
freemius/languages/freemius-ta.mo CHANGED
Binary file
freemius/languages/freemius-zh_CN.mo CHANGED
Binary file
freemius/languages/freemius.pot CHANGED
@@ -16,771 +16,795 @@ msgstr ""
16
  "X-Poedit-SourceCharset: UTF-8\n"
17
  "Plural-Forms: nplurals=2; plural=(n != 1);\n"
18
 
19
- #: includes/class-freemius.php:1911, templates/account.php:910
20
  msgid "An update to a Beta version will replace your installed version of %s with the latest Beta release - use with caution, and not on production sites. You have been warned."
21
  msgstr ""
22
 
23
- #: includes/class-freemius.php:1918
24
  msgid "Would you like to proceed with the update?"
25
  msgstr ""
26
 
27
- #: includes/class-freemius.php:2130
28
  msgid "Freemius SDK couldn't find the plugin's main file. Please contact sdk@freemius.com with the current error."
29
  msgstr ""
30
 
31
- #: includes/class-freemius.php:2132
32
  msgid "Error"
33
  msgstr ""
34
 
35
- #: includes/class-freemius.php:2532
36
  msgid "I found a better %s"
37
  msgstr ""
38
 
39
- #: includes/class-freemius.php:2534
40
  msgid "What's the %s's name?"
41
  msgstr ""
42
 
43
- #: includes/class-freemius.php:2540
44
  msgid "It's a temporary %s. I'm just debugging an issue."
45
  msgstr ""
46
 
47
- #: includes/class-freemius.php:2542
48
  msgid "Deactivation"
49
  msgstr ""
50
 
51
- #: includes/class-freemius.php:2543
52
  msgid "Theme Switch"
53
  msgstr ""
54
 
55
- #: includes/class-freemius.php:2552, templates/forms/resend-key.php:24, templates/forms/user-change.php:29
56
  msgid "Other"
57
  msgstr ""
58
 
59
- #: includes/class-freemius.php:2560
60
  msgid "I no longer need the %s"
61
  msgstr ""
62
 
63
- #: includes/class-freemius.php:2567
64
  msgid "I only needed the %s for a short period"
65
  msgstr ""
66
 
67
- #: includes/class-freemius.php:2573
68
  msgid "The %s broke my site"
69
  msgstr ""
70
 
71
- #: includes/class-freemius.php:2580
72
  msgid "The %s suddenly stopped working"
73
  msgstr ""
74
 
75
- #: includes/class-freemius.php:2590
76
  msgid "I can't pay for it anymore"
77
  msgstr ""
78
 
79
- #: includes/class-freemius.php:2592
80
  msgid "What price would you feel comfortable paying?"
81
  msgstr ""
82
 
83
- #: includes/class-freemius.php:2598
84
  msgid "I don't like to share my information with you"
85
  msgstr ""
86
 
87
- #: includes/class-freemius.php:2619
88
  msgid "The %s didn't work"
89
  msgstr ""
90
 
91
- #: includes/class-freemius.php:2629
92
  msgid "I couldn't understand how to make it work"
93
  msgstr ""
94
 
95
- #: includes/class-freemius.php:2637
96
  msgid "The %s is great, but I need specific feature that you don't support"
97
  msgstr ""
98
 
99
- #: includes/class-freemius.php:2639
100
  msgid "What feature?"
101
  msgstr ""
102
 
103
- #: includes/class-freemius.php:2643
104
  msgid "The %s is not working"
105
  msgstr ""
106
 
107
- #: includes/class-freemius.php:2645
108
  msgid "Kindly share what didn't work so we can fix it for future users..."
109
  msgstr ""
110
 
111
- #: includes/class-freemius.php:2649
112
  msgid "It's not what I was looking for"
113
  msgstr ""
114
 
115
- #: includes/class-freemius.php:2651
116
  msgid "What you've been looking for?"
117
  msgstr ""
118
 
119
- #: includes/class-freemius.php:2655
120
  msgid "The %s didn't work as expected"
121
  msgstr ""
122
 
123
- #: includes/class-freemius.php:2657
124
  msgid "What did you expect?"
125
  msgstr ""
126
 
127
- #: includes/class-freemius.php:3512, templates/debug.php:20
128
  msgid "Freemius Debug"
129
  msgstr ""
130
 
131
- #: includes/class-freemius.php:4264
132
  msgid "I don't know what is cURL or how to install it, help me!"
133
  msgstr ""
134
 
135
- #: includes/class-freemius.php:4266
136
  msgid "We'll make sure to contact your hosting company and resolve the issue. You will get a follow-up email to %s once we have an update."
137
  msgstr ""
138
 
139
- #: includes/class-freemius.php:4273
140
  msgid "Great, please install cURL and enable it in your php.ini file. In addition, search for the 'disable_functions' directive in your php.ini file and remove any disabled methods starting with 'curl_'. To make sure it was successfully activated, use 'phpinfo()'. Once activated, deactivate the %s and reactivate it back again."
141
  msgstr ""
142
 
143
- #: includes/class-freemius.php:4378
144
  msgid "Yes - do your thing"
145
  msgstr ""
146
 
147
- #: includes/class-freemius.php:4383
148
  msgid "No - just deactivate"
149
  msgstr ""
150
 
151
- #: includes/class-freemius.php:4428, includes/class-freemius.php:4922, includes/class-freemius.php:6178, includes/class-freemius.php:13282, includes/class-freemius.php:14000, includes/class-freemius.php:17451, includes/class-freemius.php:17556, includes/class-freemius.php:17731, includes/class-freemius.php:19965, includes/class-freemius.php:20323, includes/class-freemius.php:20333, includes/class-freemius.php:20997, includes/class-freemius.php:21903, includes/class-freemius.php:22036, includes/class-freemius.php:22192, templates/add-ons.php:57
152
  msgctxt "exclamation"
153
  msgid "Oops"
154
  msgstr ""
155
 
156
- #: includes/class-freemius.php:4497
157
  msgid "Thank for giving us the chance to fix it! A message was just sent to our technical staff. We will get back to you as soon as we have an update to %s. Appreciate your patience."
158
  msgstr ""
159
 
160
- #: includes/class-freemius.php:4919
161
  msgctxt "addonX cannot run without pluginY"
162
  msgid "%s cannot run without %s."
163
  msgstr ""
164
 
165
- #: includes/class-freemius.php:4920
166
  msgctxt "addonX cannot run..."
167
  msgid "%s cannot run without the plugin."
168
  msgstr ""
169
 
170
- #: includes/class-freemius.php:5119, includes/class-freemius.php:5144, includes/class-freemius.php:21068
171
  msgid "Unexpected API error. Please contact the %s's author with the following error."
172
  msgstr ""
173
 
174
- #: includes/class-freemius.php:5844
175
  msgid "Premium %s version was successfully activated."
176
  msgstr ""
177
 
178
- #: includes/class-freemius.php:5856, includes/class-freemius.php:7755
179
  msgctxt "Used to express elation, enthusiasm, or triumph (especially in electronic communication)."
180
  msgid "W00t"
181
  msgstr ""
182
 
183
- #: includes/class-freemius.php:5871
184
  msgid "You have a %s license."
185
  msgstr ""
186
 
187
- #: includes/class-freemius.php:5875, includes/class-freemius.php:16850, includes/class-freemius.php:16861, includes/class-freemius.php:20234, includes/class-freemius.php:20584, includes/class-freemius.php:20653, includes/class-freemius.php:20818
188
  msgctxt "interjection expressing joy or exuberance"
189
  msgid "Yee-haw"
190
  msgstr ""
191
 
192
- #: includes/class-freemius.php:6161
193
  msgid "%s free trial was successfully cancelled. Since the add-on is premium only it was automatically deactivated. If you like to use it in the future, you'll have to purchase a license."
194
  msgstr ""
195
 
196
- #: includes/class-freemius.php:6165
197
  msgid "%s is a premium only add-on. You have to purchase a license first before activating the plugin."
198
  msgstr ""
199
 
200
- #: includes/class-freemius.php:6174, templates/add-ons.php:186, templates/account/partials/addon.php:381
201
  msgid "More information about %s"
202
  msgstr ""
203
 
204
- #: includes/class-freemius.php:6175
205
  msgid "Purchase License"
206
  msgstr ""
207
 
208
- #: includes/class-freemius.php:7114, templates/connect.php:171
209
  msgid "You should receive an activation email for %s to your mailbox at %s. Please make sure you click the activation button in that email to %s."
210
  msgstr ""
211
 
212
- #: includes/class-freemius.php:7118
213
  msgid "start the trial"
214
  msgstr ""
215
 
216
- #: includes/class-freemius.php:7119, templates/connect.php:175
217
  msgid "complete the install"
218
  msgstr ""
219
 
220
- #: includes/class-freemius.php:7237
221
  msgid "You are just one step away - %s"
222
  msgstr ""
223
 
224
- #: includes/class-freemius.php:7240
225
  msgctxt "%s - plugin name. As complete \"PluginX\" activation now"
226
  msgid "Complete \"%s\" Activation Now"
227
  msgstr ""
228
 
229
- #: includes/class-freemius.php:7318
230
  msgid "We made a few tweaks to the %s, %s"
231
  msgstr ""
232
 
233
- #: includes/class-freemius.php:7322
234
  msgid "Opt in to make \"%s\" better!"
235
  msgstr ""
236
 
237
- #: includes/class-freemius.php:7754
238
  msgid "The upgrade of %s was successfully completed."
239
  msgstr ""
240
 
241
- #: includes/class-freemius.php:10223, includes/class-fs-plugin-updater.php:1044, includes/class-fs-plugin-updater.php:1239, includes/class-fs-plugin-updater.php:1246, templates/auto-installation.php:32
242
  msgid "Add-On"
243
  msgstr ""
244
 
245
- #: includes/class-freemius.php:10225, templates/account.php:392, templates/account.php:400, templates/debug.php:358, templates/debug.php:549
246
  msgid "Plugin"
247
  msgstr ""
248
 
249
- #: includes/class-freemius.php:10226, templates/account.php:393, templates/account.php:401, templates/debug.php:358, templates/debug.php:549, templates/forms/deactivation/form.php:71
250
  msgid "Theme"
251
  msgstr ""
252
 
253
- #: includes/class-freemius.php:13180
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
254
  msgid "An unknown error has occurred while trying to set the user's beta mode."
255
  msgstr ""
256
 
257
- #: includes/class-freemius.php:13253
258
  msgid "Invalid new user ID or email address."
259
  msgstr ""
260
 
261
- #: includes/class-freemius.php:13283, includes/class-freemius.php:22147
262
  msgid "Sorry, we could not complete the email update. Another user with the same email is already registered."
263
  msgstr ""
264
 
265
- #: includes/class-freemius.php:13284, includes/class-freemius.php:22148
266
  msgid "If you would like to give up the ownership of the %s's account to %s click the Change Ownership button."
267
  msgstr ""
268
 
269
- #: includes/class-freemius.php:13291, includes/class-freemius.php:22155
270
  msgid "Change Ownership"
271
  msgstr ""
272
 
273
- #: includes/class-freemius.php:13867
274
  msgid "Invalid site details collection."
275
  msgstr ""
276
 
277
- #: includes/class-freemius.php:13987
278
  msgid "We couldn't find your email address in the system, are you sure it's the right address?"
279
  msgstr ""
280
 
281
- #: includes/class-freemius.php:13989
282
  msgid "We can't see any active licenses associated with that email address, are you sure it's the right address?"
283
  msgstr ""
284
 
285
- #: includes/class-freemius.php:14263
286
  msgid "Account is pending activation."
287
  msgstr ""
288
 
289
- #: includes/class-freemius.php:14375, templates/forms/premium-versions-upgrade-handler.php:47
290
  msgid "Buy a license now"
291
  msgstr ""
292
 
293
- #: includes/class-freemius.php:14387, templates/forms/premium-versions-upgrade-handler.php:46
294
  msgid "Renew your license now"
295
  msgstr ""
296
 
297
- #: includes/class-freemius.php:14391
298
  msgid "%s to access version %s security & feature updates, and support."
299
  msgstr ""
300
 
301
- #: includes/class-freemius.php:16832
302
  msgid "%s activation was successfully completed."
303
  msgstr ""
304
 
305
- #: includes/class-freemius.php:16846
306
  msgid "Your account was successfully activated with the %s plan."
307
  msgstr ""
308
 
309
- #: includes/class-freemius.php:16857, includes/class-freemius.php:20649
310
  msgid "Your trial has been successfully started."
311
  msgstr ""
312
 
313
- #: includes/class-freemius.php:17449, includes/class-freemius.php:17554, includes/class-freemius.php:17729
314
  msgid "Couldn't activate %s."
315
  msgstr ""
316
 
317
- #: includes/class-freemius.php:17450, includes/class-freemius.php:17555, includes/class-freemius.php:17730
318
  msgid "Please contact us with the following message:"
319
  msgstr ""
320
 
321
- #: includes/class-freemius.php:17551, templates/forms/data-debug-mode.php:162
322
  msgid "An unknown error has occurred."
323
  msgstr ""
324
 
325
- #: includes/class-freemius.php:18087, includes/class-freemius.php:23208
326
  msgid "Upgrade"
327
  msgstr ""
328
 
329
- #: includes/class-freemius.php:18093
330
  msgid "Start Trial"
331
  msgstr ""
332
 
333
- #: includes/class-freemius.php:18095
334
  msgid "Pricing"
335
  msgstr ""
336
 
337
- #: includes/class-freemius.php:18175, includes/class-freemius.php:18177
338
  msgid "Affiliation"
339
  msgstr ""
340
 
341
- #: includes/class-freemius.php:18205, includes/class-freemius.php:18207, templates/account.php:240, templates/debug.php:324
342
  msgid "Account"
343
  msgstr ""
344
 
345
- #: includes/class-freemius.php:18221, includes/class-freemius.php:18223, includes/customizer/class-fs-customizer-support-section.php:60
346
  msgid "Contact Us"
347
  msgstr ""
348
 
349
- #: includes/class-freemius.php:18234, includes/class-freemius.php:18236, includes/class-freemius.php:23222, templates/account.php:119, templates/account/partials/addon.php:44
350
  msgid "Add-Ons"
351
  msgstr ""
352
 
353
- #: includes/class-freemius.php:18270
354
  msgctxt "ASCII arrow left icon"
355
  msgid "&#x2190;"
356
  msgstr ""
357
 
358
- #: includes/class-freemius.php:18270
359
  msgctxt "ASCII arrow right icon"
360
  msgid "&#x27a4;"
361
  msgstr ""
362
 
363
- #: includes/class-freemius.php:18272, templates/pricing.php:109
364
  msgctxt "noun"
365
  msgid "Pricing"
366
  msgstr ""
367
 
368
- #: includes/class-freemius.php:18485, includes/customizer/class-fs-customizer-support-section.php:67
369
  msgid "Support Forum"
370
  msgstr ""
371
 
372
- #: includes/class-freemius.php:19459
373
  msgid "Your email has been successfully verified - you are AWESOME!"
374
  msgstr ""
375
 
376
- #: includes/class-freemius.php:19460
377
  msgctxt "a positive response"
378
  msgid "Right on"
379
  msgstr ""
380
 
381
- #: includes/class-freemius.php:19966
382
  msgid "seems like the key you entered doesn't match our records."
383
  msgstr ""
384
 
385
- #: includes/class-freemius.php:19990
386
  msgid "Debug mode was successfully enabled and will be automatically disabled in 60 min. You can also disable it earlier by clicking the \"Stop Debug\" link."
387
  msgstr ""
388
 
389
- #: includes/class-freemius.php:20225
390
  msgid "Your %s Add-on plan was successfully upgraded."
391
  msgstr ""
392
 
393
- #: includes/class-freemius.php:20227
394
  msgid "%s Add-on was successfully purchased."
395
  msgstr ""
396
 
397
- #: includes/class-freemius.php:20230
398
  msgid "Download the latest version"
399
  msgstr ""
400
 
401
- #: includes/class-freemius.php:20316
402
  msgid "Your server is blocking the access to Freemius' API, which is crucial for %1$s synchronization. Please contact your host to whitelist %2$s"
403
  msgstr ""
404
 
405
- #: includes/class-freemius.php:20322, includes/class-freemius.php:20332, includes/class-freemius.php:20777, includes/class-freemius.php:20866
406
  msgid "Error received from the server:"
407
  msgstr ""
408
 
409
- #: includes/class-freemius.php:20332
410
  msgid "It seems like one of the authentication parameters is wrong. Update your Public Key, Secret Key & User ID, and try again."
411
  msgstr ""
412
 
413
- #: includes/class-freemius.php:20546, includes/class-freemius.php:20782, includes/class-freemius.php:20837, includes/class-freemius.php:20944
414
  msgctxt "something somebody says when they are thinking about what you have just said."
415
  msgid "Hmm"
416
  msgstr ""
417
 
418
- #: includes/class-freemius.php:20559
419
  msgid "It looks like you are still on the %s plan. If you did upgrade or change your plan, it's probably an issue on our side - sorry."
420
  msgstr ""
421
 
422
- #: includes/class-freemius.php:20560, templates/account.php:121, templates/add-ons.php:250, templates/account/partials/addon.php:46
423
  msgctxt "trial period"
424
  msgid "Trial"
425
  msgstr ""
426
 
427
- #: includes/class-freemius.php:20565
428
  msgid "I have upgraded my account but when I try to Sync the License, the plan remains %s."
429
  msgstr ""
430
 
431
- #: includes/class-freemius.php:20569, includes/class-freemius.php:20628
432
  msgid "Please contact us here"
433
  msgstr ""
434
 
435
- #: includes/class-freemius.php:20580
436
  msgid "Your plan was successfully activated."
437
  msgstr ""
438
 
439
- #: includes/class-freemius.php:20581
440
  msgid "Your plan was successfully upgraded."
441
  msgstr ""
442
 
443
- #: includes/class-freemius.php:20598
444
  msgid "Your plan was successfully changed to %s."
445
  msgstr ""
446
 
447
- #: includes/class-freemius.php:20614
448
  msgid "Your license has expired. You can still continue using the free %s forever."
449
  msgstr ""
450
 
451
- #: includes/class-freemius.php:20616
452
  msgid "Your license has expired. %1$sUpgrade now%2$s to continue using the %3$s without interruptions."
453
  msgstr ""
454
 
455
- #: includes/class-freemius.php:20624
456
  msgid "Your license has been cancelled. If you think it's a mistake, please contact support."
457
  msgstr ""
458
 
459
- #: includes/class-freemius.php:20637
460
  msgid "Your license has expired. You can still continue using all the %s features, but you'll need to renew your license to continue getting updates and support."
461
  msgstr ""
462
 
463
- #: includes/class-freemius.php:20663
464
  msgid "Your free trial has expired. You can still continue using all our free features."
465
  msgstr ""
466
 
467
- #: includes/class-freemius.php:20665
468
  msgid "Your free trial has expired. %1$sUpgrade now%2$s to continue using the %3$s without interruptions."
469
  msgstr ""
470
 
471
- #: includes/class-freemius.php:20773
472
  msgid "It looks like the license could not be activated."
473
  msgstr ""
474
 
475
- #: includes/class-freemius.php:20815
476
  msgid "Your license was successfully activated."
477
  msgstr ""
478
 
479
- #: includes/class-freemius.php:20841
480
  msgid "It looks like your site currently doesn't have an active license."
481
  msgstr ""
482
 
483
- #: includes/class-freemius.php:20865
484
  msgid "It looks like the license deactivation failed."
485
  msgstr ""
486
 
487
- #: includes/class-freemius.php:20894
488
  msgid "Your %s license was successfully deactivated."
489
  msgstr ""
490
 
491
- #: includes/class-freemius.php:20895
492
  msgid "Your license was successfully deactivated, you are back to the %s plan."
493
  msgstr ""
494
 
495
- #: includes/class-freemius.php:20898
496
  msgid "O.K"
497
  msgstr ""
498
 
499
- #: includes/class-freemius.php:20951
500
  msgid "Seems like we are having some temporary issue with your subscription cancellation. Please try again in few minutes."
501
  msgstr ""
502
 
503
- #: includes/class-freemius.php:20960
504
  msgid "Your subscription was successfully cancelled. Your %s plan license will expire in %s."
505
  msgstr ""
506
 
507
- #: includes/class-freemius.php:21002
508
  msgid "You are already running the %s in a trial mode."
509
  msgstr ""
510
 
511
- #: includes/class-freemius.php:21013
512
  msgid "You already utilized a trial before."
513
  msgstr ""
514
 
515
- #: includes/class-freemius.php:21027
516
  msgid "Plan %s do not exist, therefore, can't start a trial."
517
  msgstr ""
518
 
519
- #: includes/class-freemius.php:21038
520
  msgid "Plan %s does not support a trial period."
521
  msgstr ""
522
 
523
- #: includes/class-freemius.php:21049
524
  msgid "None of the %s's plans supports a trial period."
525
  msgstr ""
526
 
527
- #: includes/class-freemius.php:21099
528
  msgid "It looks like you are not in trial mode anymore so there's nothing to cancel :)"
529
  msgstr ""
530
 
531
- #: includes/class-freemius.php:21135
532
  msgid "Seems like we are having some temporary issue with your trial cancellation. Please try again in few minutes."
533
  msgstr ""
534
 
535
- #: includes/class-freemius.php:21154
536
  msgid "Your %s free trial was successfully cancelled."
537
  msgstr ""
538
 
539
- #: includes/class-freemius.php:21470
540
  msgid "Version %s was released."
541
  msgstr ""
542
 
543
- #: includes/class-freemius.php:21470
544
  msgid "Please download %s."
545
  msgstr ""
546
 
547
- #: includes/class-freemius.php:21477
548
  msgid "the latest %s version here"
549
  msgstr ""
550
 
551
- #: includes/class-freemius.php:21482
552
  msgid "New"
553
  msgstr ""
554
 
555
- #: includes/class-freemius.php:21487
556
  msgid "Seems like you got the latest release."
557
  msgstr ""
558
 
559
- #: includes/class-freemius.php:21488
560
  msgid "You are all good!"
561
  msgstr ""
562
 
563
- #: includes/class-freemius.php:21791
564
  msgid "Verification mail was just sent to %s. If you can't find it after 5 min, please check your spam box."
565
  msgstr ""
566
 
567
- #: includes/class-freemius.php:21931
568
  msgid "Site successfully opted in."
569
  msgstr ""
570
 
571
- #: includes/class-freemius.php:21932, includes/class-freemius.php:22918
572
  msgid "Awesome"
573
  msgstr ""
574
 
575
- #: includes/class-freemius.php:21948, templates/forms/optout.php:41
576
  msgid "We appreciate your help in making the %s better by letting us track some usage data."
577
  msgstr ""
578
 
579
- #: includes/class-freemius.php:21949
580
  msgid "Thank you!"
581
  msgstr ""
582
 
583
- #: includes/class-freemius.php:21956
584
  msgid "We will no longer be sending any usage data of %s on %s to %s."
585
  msgstr ""
586
 
587
- #: includes/class-freemius.php:22114
588
  msgid "Please check your mailbox, you should receive an email via %s to confirm the ownership change. From security reasons, you must confirm the change within the next 15 min. If you cannot find the email, please check your spam folder."
589
  msgstr ""
590
 
591
- #: includes/class-freemius.php:22120
592
  msgid "Thanks for confirming the ownership change. An email was just sent to %s for final approval."
593
  msgstr ""
594
 
595
- #: includes/class-freemius.php:22125
596
  msgid "%s is the new owner of the account."
597
  msgstr ""
598
 
599
- #: includes/class-freemius.php:22127
600
  msgctxt "as congratulations"
601
  msgid "Congrats"
602
  msgstr ""
603
 
604
- #: includes/class-freemius.php:22163
605
  msgid "Your email was successfully updated. You should receive an email with confirmation instructions in few moments."
606
  msgstr ""
607
 
608
- #: includes/class-freemius.php:22175
609
  msgid "Please provide your full name."
610
  msgstr ""
611
 
612
- #: includes/class-freemius.php:22180
613
  msgid "Your name was successfully updated."
614
  msgstr ""
615
 
616
- #: includes/class-freemius.php:22241
617
  msgid "You have successfully updated your %s."
618
  msgstr ""
619
 
620
- #: includes/class-freemius.php:22381
 
 
 
 
 
 
 
 
621
  msgid "Just letting you know that the add-ons information of %s is being pulled from an external server."
622
  msgstr ""
623
 
624
- #: includes/class-freemius.php:22382
625
  msgctxt "advance notice of something that will need attention."
626
  msgid "Heads up"
627
  msgstr ""
628
 
629
- #: includes/class-freemius.php:22958
630
  msgctxt "exclamation"
631
  msgid "Hey"
632
  msgstr ""
633
 
634
- #: includes/class-freemius.php:22958
635
  msgid "How do you like %s so far? Test all our %s premium features with a %d-day free trial."
636
  msgstr ""
637
 
638
- #: includes/class-freemius.php:22966
639
  msgid "No commitment for %s days - cancel anytime!"
640
  msgstr ""
641
 
642
- #: includes/class-freemius.php:22967
643
  msgid "No credit card required"
644
  msgstr ""
645
 
646
- #: includes/class-freemius.php:22974, templates/forms/trial-start.php:53
647
  msgctxt "call to action"
648
  msgid "Start free trial"
649
  msgstr ""
650
 
651
- #: includes/class-freemius.php:23051
652
  msgid "Hey there, did you know that %s has an affiliate program? If you like the %s you can become our ambassador and earn some cash!"
653
  msgstr ""
654
 
655
- #: includes/class-freemius.php:23060
656
  msgid "Learn more"
657
  msgstr ""
658
 
659
- #: includes/class-freemius.php:23246, templates/account.php:556, templates/account.php:706, templates/connect.php:179, templates/connect.php:455, templates/forms/license-activation.php:27, templates/account/partials/addon.php:321
660
  msgid "Activate License"
661
  msgstr ""
662
 
663
- #: includes/class-freemius.php:23247, templates/account.php:650, templates/account.php:705, templates/account/partials/addon.php:322, templates/account/partials/site.php:271
664
  msgid "Change License"
665
  msgstr ""
666
 
667
- #: includes/class-freemius.php:23356, templates/account/partials/site.php:169
668
  msgid "Opt Out"
669
  msgstr ""
670
 
671
- #: includes/class-freemius.php:23358, includes/class-freemius.php:23364, templates/account/partials/site.php:49, templates/account/partials/site.php:169
672
  msgid "Opt In"
673
  msgstr ""
674
 
675
- #: includes/class-freemius.php:23592
676
  msgid " The paid version of %1$s is already installed. Please activate it to start benefiting the %2$s features. %3$s"
677
  msgstr ""
678
 
679
- #: includes/class-freemius.php:23600
680
  msgid "Activate %s features"
681
  msgstr ""
682
 
683
- #: includes/class-freemius.php:23613
684
  msgid "Please follow these steps to complete the upgrade"
685
  msgstr ""
686
 
687
- #: includes/class-freemius.php:23617
688
  msgid "Download the latest %s version"
689
  msgstr ""
690
 
691
- #: includes/class-freemius.php:23621
692
  msgid "Upload and activate the downloaded version"
693
  msgstr ""
694
 
695
- #: includes/class-freemius.php:23623
696
  msgid "How to upload and activate?"
697
  msgstr ""
698
 
699
- #: includes/class-freemius.php:23757
700
  msgid "%sClick here%s to choose the sites where you'd like to activate the license on."
701
  msgstr ""
702
 
703
- #: includes/class-freemius.php:23926
704
  msgid "Auto installation only works for opted-in users."
705
  msgstr ""
706
 
707
- #: includes/class-freemius.php:23936, includes/class-freemius.php:23969, includes/class-fs-plugin-updater.php:1218, includes/class-fs-plugin-updater.php:1232
708
  msgid "Invalid module ID."
709
  msgstr ""
710
 
711
- #: includes/class-freemius.php:23945, includes/class-fs-plugin-updater.php:1254
712
  msgid "Premium version already active."
713
  msgstr ""
714
 
715
- #: includes/class-freemius.php:23952
716
  msgid "You do not have a valid license to access the premium version."
717
  msgstr ""
718
 
719
- #: includes/class-freemius.php:23959
720
  msgid "Plugin is a \"Serviceware\" which means it does not have a premium code version."
721
  msgstr ""
722
 
723
- #: includes/class-freemius.php:23977, includes/class-fs-plugin-updater.php:1253
724
  msgid "Premium add-on version already installed."
725
  msgstr ""
726
 
727
- #: includes/class-freemius.php:24327
728
  msgid "View paid features"
729
  msgstr ""
730
 
731
- #: includes/class-freemius.php:24649
732
  msgid "Thank you so much for using %s and its add-ons!"
733
  msgstr ""
734
 
735
- #: includes/class-freemius.php:24650
736
  msgid "Thank you so much for using %s!"
737
  msgstr ""
738
 
739
- #: includes/class-freemius.php:24656
740
  msgid "You've already opted-in to our usage-tracking, which helps us keep improving the %s."
741
  msgstr ""
742
 
743
- #: includes/class-freemius.php:24660
744
  msgid "Thank you so much for using our products!"
745
  msgstr ""
746
 
747
- #: includes/class-freemius.php:24661
748
  msgid "You've already opted-in to our usage-tracking, which helps us keep improving them."
749
  msgstr ""
750
 
751
- #: includes/class-freemius.php:24680
752
  msgid "%s and its add-ons"
753
  msgstr ""
754
 
755
- #: includes/class-freemius.php:24689
756
  msgid "Products"
757
  msgstr ""
758
 
759
- #: includes/class-freemius.php:24696, templates/connect.php:280
760
  msgid "Yes"
761
  msgstr ""
762
 
763
- #: includes/class-freemius.php:24697, templates/connect.php:281
764
  msgid "send me security & feature updates, educational content and offers."
765
  msgstr ""
766
 
767
- #: includes/class-freemius.php:24698, templates/connect.php:286
768
  msgid "No"
769
  msgstr ""
770
 
771
- #: includes/class-freemius.php:24700, templates/connect.php:288
772
  msgid "do %sNOT%s send me security & feature updates, educational content and offers."
773
  msgstr ""
774
 
775
- #: includes/class-freemius.php:24710
776
  msgid "Due to the new %sEU General Data Protection Regulation (GDPR)%s compliance requirements it is required that you provide your explicit consent, again, confirming that you are onboard :-)"
777
  msgstr ""
778
 
779
- #: includes/class-freemius.php:24712, templates/connect.php:295
780
  msgid "Please let us know if you'd like us to contact you for security & feature updates, educational content, and occasional offers:"
781
  msgstr ""
782
 
783
- #: includes/class-freemius.php:24994
784
  msgid "License key is empty."
785
  msgstr ""
786
 
@@ -808,314 +832,314 @@ msgstr ""
808
  msgid "Important Upgrade Notice:"
809
  msgstr ""
810
 
811
- #: includes/class-fs-plugin-updater.php:1283
812
  msgid "Installing plugin: %s"
813
  msgstr ""
814
 
815
- #: includes/class-fs-plugin-updater.php:1324
816
  msgid "Unable to connect to the filesystem. Please confirm your credentials."
817
  msgstr ""
818
 
819
- #: includes/class-fs-plugin-updater.php:1506
820
  msgid "The remote plugin package does not contain a folder with the desired slug and renaming did not work."
821
  msgstr ""
822
 
823
- #: includes/fs-plugin-info-dialog.php:535
824
  msgid "Purchase More"
825
  msgstr ""
826
 
827
- #: includes/fs-plugin-info-dialog.php:536, templates/account/partials/addon.php:385
828
  msgctxt "verb"
829
  msgid "Purchase"
830
  msgstr ""
831
 
832
- #: includes/fs-plugin-info-dialog.php:540
833
  msgid "Start my free %s"
834
  msgstr ""
835
 
836
- #: includes/fs-plugin-info-dialog.php:738
837
  msgid "Install Free Version Update Now"
838
  msgstr ""
839
 
840
- #: includes/fs-plugin-info-dialog.php:739, templates/account.php:639
841
  msgid "Install Update Now"
842
  msgstr ""
843
 
844
- #: includes/fs-plugin-info-dialog.php:748
845
  msgid "Install Free Version Now"
846
  msgstr ""
847
 
848
- #: includes/fs-plugin-info-dialog.php:749, templates/add-ons.php:323, templates/auto-installation.php:111, templates/account/partials/addon.php:365, templates/account/partials/addon.php:418
849
  msgid "Install Now"
850
  msgstr ""
851
 
852
- #: includes/fs-plugin-info-dialog.php:765
853
  msgctxt "as download latest version"
854
  msgid "Download Latest Free Version"
855
  msgstr ""
856
 
857
- #: includes/fs-plugin-info-dialog.php:766, templates/account.php:99, templates/add-ons.php:37, templates/account/partials/addon.php:25
858
  msgctxt "as download latest version"
859
  msgid "Download Latest"
860
  msgstr ""
861
 
862
- #: includes/fs-plugin-info-dialog.php:781, templates/add-ons.php:329, templates/account/partials/addon.php:356, templates/account/partials/addon.php:412
863
  msgid "Activate this add-on"
864
  msgstr ""
865
 
866
- #: includes/fs-plugin-info-dialog.php:783, templates/connect.php:452
867
  msgid "Activate Free Version"
868
  msgstr ""
869
 
870
- #: includes/fs-plugin-info-dialog.php:784, templates/account.php:123, templates/add-ons.php:330, templates/account/partials/addon.php:48
871
  msgid "Activate"
872
  msgstr ""
873
 
874
- #: includes/fs-plugin-info-dialog.php:996
875
  msgctxt "Plugin installer section title"
876
  msgid "Description"
877
  msgstr ""
878
 
879
- #: includes/fs-plugin-info-dialog.php:997
880
  msgctxt "Plugin installer section title"
881
  msgid "Installation"
882
  msgstr ""
883
 
884
- #: includes/fs-plugin-info-dialog.php:998
885
  msgctxt "Plugin installer section title"
886
  msgid "FAQ"
887
  msgstr ""
888
 
889
- #: includes/fs-plugin-info-dialog.php:999, templates/plugin-info/description.php:55
890
  msgid "Screenshots"
891
  msgstr ""
892
 
893
- #: includes/fs-plugin-info-dialog.php:1000
894
  msgctxt "Plugin installer section title"
895
  msgid "Changelog"
896
  msgstr ""
897
 
898
- #: includes/fs-plugin-info-dialog.php:1001
899
  msgctxt "Plugin installer section title"
900
  msgid "Reviews"
901
  msgstr ""
902
 
903
- #: includes/fs-plugin-info-dialog.php:1002
904
  msgctxt "Plugin installer section title"
905
  msgid "Other Notes"
906
  msgstr ""
907
 
908
- #: includes/fs-plugin-info-dialog.php:1017
909
  msgctxt "Plugin installer section title"
910
  msgid "Features & Pricing"
911
  msgstr ""
912
 
913
- #: includes/fs-plugin-info-dialog.php:1027
914
  msgid "Plugin Install"
915
  msgstr ""
916
 
917
- #: includes/fs-plugin-info-dialog.php:1099
918
  msgctxt "e.g. Professional Plan"
919
  msgid "%s Plan"
920
  msgstr ""
921
 
922
- #: includes/fs-plugin-info-dialog.php:1125
923
  msgctxt "e.g. the best product"
924
  msgid "Best"
925
  msgstr ""
926
 
927
- #: includes/fs-plugin-info-dialog.php:1131, includes/fs-plugin-info-dialog.php:1151
928
  msgctxt "as every month"
929
  msgid "Monthly"
930
  msgstr ""
931
 
932
- #: includes/fs-plugin-info-dialog.php:1134
933
  msgctxt "as once a year"
934
  msgid "Annual"
935
  msgstr ""
936
 
937
- #: includes/fs-plugin-info-dialog.php:1137
938
  msgid "Lifetime"
939
  msgstr ""
940
 
941
- #: includes/fs-plugin-info-dialog.php:1151, includes/fs-plugin-info-dialog.php:1153, includes/fs-plugin-info-dialog.php:1155
942
  msgctxt "e.g. billed monthly"
943
  msgid "Billed %s"
944
  msgstr ""
945
 
946
- #: includes/fs-plugin-info-dialog.php:1153
947
  msgctxt "as once a year"
948
  msgid "Annually"
949
  msgstr ""
950
 
951
- #: includes/fs-plugin-info-dialog.php:1155
952
  msgctxt "as once a year"
953
  msgid "Once"
954
  msgstr ""
955
 
956
- #: includes/fs-plugin-info-dialog.php:1161
957
  msgid "Single Site License"
958
  msgstr ""
959
 
960
- #: includes/fs-plugin-info-dialog.php:1163
961
  msgid "Unlimited Licenses"
962
  msgstr ""
963
 
964
- #: includes/fs-plugin-info-dialog.php:1165
965
  msgid "Up to %s Sites"
966
  msgstr ""
967
 
968
- #: includes/fs-plugin-info-dialog.php:1175, templates/plugin-info/features.php:82
969
  msgctxt "as monthly period"
970
  msgid "mo"
971
  msgstr ""
972
 
973
- #: includes/fs-plugin-info-dialog.php:1182, templates/plugin-info/features.php:80
974
  msgctxt "as annual period"
975
  msgid "year"
976
  msgstr ""
977
 
978
- #: includes/fs-plugin-info-dialog.php:1236
979
  msgctxt "noun"
980
  msgid "Price"
981
  msgstr ""
982
 
983
- #: includes/fs-plugin-info-dialog.php:1284
984
  msgid "Save %s"
985
  msgstr ""
986
 
987
- #: includes/fs-plugin-info-dialog.php:1294
988
  msgid "No commitment for %s - cancel anytime"
989
  msgstr ""
990
 
991
- #: includes/fs-plugin-info-dialog.php:1297
992
  msgid "After your free %s, pay as little as %s"
993
  msgstr ""
994
 
995
- #: includes/fs-plugin-info-dialog.php:1308
996
  msgid "Details"
997
  msgstr ""
998
 
999
- #: includes/fs-plugin-info-dialog.php:1312, templates/account.php:110, templates/debug.php:201, templates/debug.php:238, templates/debug.php:455, templates/account/partials/addon.php:36
1000
  msgctxt "product version"
1001
  msgid "Version"
1002
  msgstr ""
1003
 
1004
- #: includes/fs-plugin-info-dialog.php:1319
1005
  msgctxt "as the plugin author"
1006
  msgid "Author"
1007
  msgstr ""
1008
 
1009
- #: includes/fs-plugin-info-dialog.php:1326
1010
  msgid "Last Updated"
1011
  msgstr ""
1012
 
1013
- #: includes/fs-plugin-info-dialog.php:1331, templates/account.php:525
1014
  msgctxt "x-ago"
1015
  msgid "%s ago"
1016
  msgstr ""
1017
 
1018
- #: includes/fs-plugin-info-dialog.php:1340
1019
  msgid "Requires WordPress Version"
1020
  msgstr ""
1021
 
1022
- #: includes/fs-plugin-info-dialog.php:1341
1023
  msgid "%s or higher"
1024
  msgstr ""
1025
 
1026
- #: includes/fs-plugin-info-dialog.php:1348
1027
  msgid "Compatible up to"
1028
  msgstr ""
1029
 
1030
- #: includes/fs-plugin-info-dialog.php:1356
1031
  msgid "Downloaded"
1032
  msgstr ""
1033
 
1034
- #: includes/fs-plugin-info-dialog.php:1360
1035
  msgid "%s time"
1036
  msgstr ""
1037
 
1038
- #: includes/fs-plugin-info-dialog.php:1362
1039
  msgid "%s times"
1040
  msgstr ""
1041
 
1042
- #: includes/fs-plugin-info-dialog.php:1373
1043
  msgid "WordPress.org Plugin Page"
1044
  msgstr ""
1045
 
1046
- #: includes/fs-plugin-info-dialog.php:1382
1047
  msgid "Plugin Homepage"
1048
  msgstr ""
1049
 
1050
- #: includes/fs-plugin-info-dialog.php:1391, includes/fs-plugin-info-dialog.php:1475
1051
  msgid "Donate to this plugin"
1052
  msgstr ""
1053
 
1054
- #: includes/fs-plugin-info-dialog.php:1398
1055
  msgid "Average Rating"
1056
  msgstr ""
1057
 
1058
- #: includes/fs-plugin-info-dialog.php:1405
1059
  msgid "based on %s"
1060
  msgstr ""
1061
 
1062
- #: includes/fs-plugin-info-dialog.php:1409
1063
  msgid "%s rating"
1064
  msgstr ""
1065
 
1066
- #: includes/fs-plugin-info-dialog.php:1411
1067
  msgid "%s ratings"
1068
  msgstr ""
1069
 
1070
- #: includes/fs-plugin-info-dialog.php:1426
1071
  msgid "%s star"
1072
  msgstr ""
1073
 
1074
- #: includes/fs-plugin-info-dialog.php:1428
1075
  msgid "%s stars"
1076
  msgstr ""
1077
 
1078
- #: includes/fs-plugin-info-dialog.php:1440
1079
  msgid "Click to see reviews that provided a rating of %s"
1080
  msgstr ""
1081
 
1082
- #: includes/fs-plugin-info-dialog.php:1453
1083
  msgid "Contributors"
1084
  msgstr ""
1085
 
1086
- #: includes/fs-plugin-info-dialog.php:1483, includes/fs-plugin-info-dialog.php:1485
1087
  msgid "Warning"
1088
  msgstr ""
1089
 
1090
- #: includes/fs-plugin-info-dialog.php:1483
1091
  msgid "This plugin has not been tested with your current version of WordPress."
1092
  msgstr ""
1093
 
1094
- #: includes/fs-plugin-info-dialog.php:1485
1095
  msgid "This plugin has not been marked as compatible with your version of WordPress."
1096
  msgstr ""
1097
 
1098
- #: includes/fs-plugin-info-dialog.php:1504
1099
  msgid "Paid add-on must be deployed to Freemius."
1100
  msgstr ""
1101
 
1102
- #: includes/fs-plugin-info-dialog.php:1505
1103
  msgid "Add-on must be deployed to WordPress.org or Freemius."
1104
  msgstr ""
1105
 
1106
- #: includes/fs-plugin-info-dialog.php:1526
1107
  msgid "Newer Version (%s) Installed"
1108
  msgstr ""
1109
 
1110
- #: includes/fs-plugin-info-dialog.php:1527
1111
  msgid "Newer Free Version (%s) Installed"
1112
  msgstr ""
1113
 
1114
- #: includes/fs-plugin-info-dialog.php:1534
1115
  msgid "Latest Version Installed"
1116
  msgstr ""
1117
 
1118
- #: includes/fs-plugin-info-dialog.php:1535
1119
  msgid "Latest Free Version Installed"
1120
  msgstr ""
1121
 
@@ -1401,6 +1425,14 @@ msgstr ""
1401
  msgid "Deactivating your license will block all premium features, but will enable activating the license on another site. Are you sure you want to proceed?"
1402
  msgstr ""
1403
 
 
 
 
 
 
 
 
 
1404
  #: templates/add-ons.php:38
1405
  msgid "View details"
1406
  msgstr ""
@@ -1530,7 +1562,7 @@ msgstr ""
1530
  msgid "Can't find your license key?"
1531
  msgstr ""
1532
 
1533
- #: templates/connect.php:323, templates/connect.php:694, templates/forms/deactivation/retry-skip.php:20
1534
  msgctxt "verb"
1535
  msgid "Skip"
1536
  msgstr ""
@@ -1587,40 +1619,40 @@ msgstr ""
1587
  msgid "Title, slug, version, and is active"
1588
  msgstr ""
1589
 
1590
- #: templates/connect.php:420, templates/forms/license-activation.php:41
1591
  msgid "The %1$s will be periodically sending data to %2$s to check for security and feature updates, and verify the validity of your license."
1592
  msgstr ""
1593
 
1594
- #: templates/connect.php:425
1595
  msgid "What permissions are being granted?"
1596
  msgstr ""
1597
 
1598
- #: templates/connect.php:451
1599
  msgid "Don't have a license key?"
1600
  msgstr ""
1601
 
1602
- #: templates/connect.php:454
1603
  msgid "Have a license key?"
1604
  msgstr ""
1605
 
1606
- #: templates/connect.php:462
1607
  msgid "Privacy Policy"
1608
  msgstr ""
1609
 
1610
- #: templates/connect.php:464
1611
  msgid "License Agreement"
1612
  msgstr ""
1613
 
1614
- #: templates/connect.php:464
1615
  msgid "Terms of Service"
1616
  msgstr ""
1617
 
1618
- #: templates/connect.php:853
1619
  msgctxt "as in the process of sending an email"
1620
  msgid "Sending email"
1621
  msgstr ""
1622
 
1623
- #: templates/connect.php:854
1624
  msgctxt "as activating plugin"
1625
  msgid "Activating"
1626
  msgstr ""
@@ -2177,11 +2209,11 @@ msgstr ""
2177
  msgid "Please provide details on how you intend to promote %s (please be as specific as possible)."
2178
  msgstr ""
2179
 
2180
- #: templates/forms/affiliation.php:230, templates/forms/resend-key.php:22
2181
  msgid "Cancel"
2182
  msgstr ""
2183
 
2184
- #: templates/forms/affiliation.php:232
2185
  msgid "Become an affiliate"
2186
  msgstr ""
2187
 
16
  "X-Poedit-SourceCharset: UTF-8\n"
17
  "Plural-Forms: nplurals=2; plural=(n != 1);\n"
18
 
19
+ #: includes/class-freemius.php:1912, templates/account.php:910
20
  msgid "An update to a Beta version will replace your installed version of %s with the latest Beta release - use with caution, and not on production sites. You have been warned."
21
  msgstr ""
22
 
23
+ #: includes/class-freemius.php:1919
24
  msgid "Would you like to proceed with the update?"
25
  msgstr ""
26
 
27
+ #: includes/class-freemius.php:2131
28
  msgid "Freemius SDK couldn't find the plugin's main file. Please contact sdk@freemius.com with the current error."
29
  msgstr ""
30
 
31
+ #: includes/class-freemius.php:2133
32
  msgid "Error"
33
  msgstr ""
34
 
35
+ #: includes/class-freemius.php:2533
36
  msgid "I found a better %s"
37
  msgstr ""
38
 
39
+ #: includes/class-freemius.php:2535
40
  msgid "What's the %s's name?"
41
  msgstr ""
42
 
43
+ #: includes/class-freemius.php:2541
44
  msgid "It's a temporary %s. I'm just debugging an issue."
45
  msgstr ""
46
 
47
+ #: includes/class-freemius.php:2543
48
  msgid "Deactivation"
49
  msgstr ""
50
 
51
+ #: includes/class-freemius.php:2544
52
  msgid "Theme Switch"
53
  msgstr ""
54
 
55
+ #: includes/class-freemius.php:2553, templates/forms/resend-key.php:24, templates/forms/user-change.php:29
56
  msgid "Other"
57
  msgstr ""
58
 
59
+ #: includes/class-freemius.php:2561
60
  msgid "I no longer need the %s"
61
  msgstr ""
62
 
63
+ #: includes/class-freemius.php:2568
64
  msgid "I only needed the %s for a short period"
65
  msgstr ""
66
 
67
+ #: includes/class-freemius.php:2574
68
  msgid "The %s broke my site"
69
  msgstr ""
70
 
71
+ #: includes/class-freemius.php:2581
72
  msgid "The %s suddenly stopped working"
73
  msgstr ""
74
 
75
+ #: includes/class-freemius.php:2591
76
  msgid "I can't pay for it anymore"
77
  msgstr ""
78
 
79
+ #: includes/class-freemius.php:2593
80
  msgid "What price would you feel comfortable paying?"
81
  msgstr ""
82
 
83
+ #: includes/class-freemius.php:2599
84
  msgid "I don't like to share my information with you"
85
  msgstr ""
86
 
87
+ #: includes/class-freemius.php:2620
88
  msgid "The %s didn't work"
89
  msgstr ""
90
 
91
+ #: includes/class-freemius.php:2630
92
  msgid "I couldn't understand how to make it work"
93
  msgstr ""
94
 
95
+ #: includes/class-freemius.php:2638
96
  msgid "The %s is great, but I need specific feature that you don't support"
97
  msgstr ""
98
 
99
+ #: includes/class-freemius.php:2640
100
  msgid "What feature?"
101
  msgstr ""
102
 
103
+ #: includes/class-freemius.php:2644
104
  msgid "The %s is not working"
105
  msgstr ""
106
 
107
+ #: includes/class-freemius.php:2646
108
  msgid "Kindly share what didn't work so we can fix it for future users..."
109
  msgstr ""
110
 
111
+ #: includes/class-freemius.php:2650
112
  msgid "It's not what I was looking for"
113
  msgstr ""
114
 
115
+ #: includes/class-freemius.php:2652
116
  msgid "What you've been looking for?"
117
  msgstr ""
118
 
119
+ #: includes/class-freemius.php:2656
120
  msgid "The %s didn't work as expected"
121
  msgstr ""
122
 
123
+ #: includes/class-freemius.php:2658
124
  msgid "What did you expect?"
125
  msgstr ""
126
 
127
+ #: includes/class-freemius.php:3513, templates/debug.php:20
128
  msgid "Freemius Debug"
129
  msgstr ""
130
 
131
+ #: includes/class-freemius.php:4265
132
  msgid "I don't know what is cURL or how to install it, help me!"
133
  msgstr ""
134
 
135
+ #: includes/class-freemius.php:4267
136
  msgid "We'll make sure to contact your hosting company and resolve the issue. You will get a follow-up email to %s once we have an update."
137
  msgstr ""
138
 
139
+ #: includes/class-freemius.php:4274
140
  msgid "Great, please install cURL and enable it in your php.ini file. In addition, search for the 'disable_functions' directive in your php.ini file and remove any disabled methods starting with 'curl_'. To make sure it was successfully activated, use 'phpinfo()'. Once activated, deactivate the %s and reactivate it back again."
141
  msgstr ""
142
 
143
+ #: includes/class-freemius.php:4379
144
  msgid "Yes - do your thing"
145
  msgstr ""
146
 
147
+ #: includes/class-freemius.php:4384
148
  msgid "No - just deactivate"
149
  msgstr ""
150
 
151
+ #: includes/class-freemius.php:4429, includes/class-freemius.php:4923, includes/class-freemius.php:6182, includes/class-freemius.php:13357, includes/class-freemius.php:14075, includes/class-freemius.php:17526, includes/class-freemius.php:17631, includes/class-freemius.php:17806, includes/class-freemius.php:20040, includes/class-freemius.php:20398, includes/class-freemius.php:20408, includes/class-freemius.php:21079, includes/class-freemius.php:21985, includes/class-freemius.php:22118, includes/class-freemius.php:22274, templates/add-ons.php:57
152
  msgctxt "exclamation"
153
  msgid "Oops"
154
  msgstr ""
155
 
156
+ #: includes/class-freemius.php:4498
157
  msgid "Thank for giving us the chance to fix it! A message was just sent to our technical staff. We will get back to you as soon as we have an update to %s. Appreciate your patience."
158
  msgstr ""
159
 
160
+ #: includes/class-freemius.php:4920
161
  msgctxt "addonX cannot run without pluginY"
162
  msgid "%s cannot run without %s."
163
  msgstr ""
164
 
165
+ #: includes/class-freemius.php:4921
166
  msgctxt "addonX cannot run..."
167
  msgid "%s cannot run without the plugin."
168
  msgstr ""
169
 
170
+ #: includes/class-freemius.php:5120, includes/class-freemius.php:5145, includes/class-freemius.php:21150
171
  msgid "Unexpected API error. Please contact the %s's author with the following error."
172
  msgstr ""
173
 
174
+ #: includes/class-freemius.php:5848
175
  msgid "Premium %s version was successfully activated."
176
  msgstr ""
177
 
178
+ #: includes/class-freemius.php:5860, includes/class-freemius.php:7762
179
  msgctxt "Used to express elation, enthusiasm, or triumph (especially in electronic communication)."
180
  msgid "W00t"
181
  msgstr ""
182
 
183
+ #: includes/class-freemius.php:5875
184
  msgid "You have a %s license."
185
  msgstr ""
186
 
187
+ #: includes/class-freemius.php:5879, includes/class-freemius.php:16925, includes/class-freemius.php:16936, includes/class-freemius.php:20309, includes/class-freemius.php:20659, includes/class-freemius.php:20728, includes/class-freemius.php:20900
188
  msgctxt "interjection expressing joy or exuberance"
189
  msgid "Yee-haw"
190
  msgstr ""
191
 
192
+ #: includes/class-freemius.php:6165
193
  msgid "%s free trial was successfully cancelled. Since the add-on is premium only it was automatically deactivated. If you like to use it in the future, you'll have to purchase a license."
194
  msgstr ""
195
 
196
+ #: includes/class-freemius.php:6169
197
  msgid "%s is a premium only add-on. You have to purchase a license first before activating the plugin."
198
  msgstr ""
199
 
200
+ #: includes/class-freemius.php:6178, templates/add-ons.php:186, templates/account/partials/addon.php:381
201
  msgid "More information about %s"
202
  msgstr ""
203
 
204
+ #: includes/class-freemius.php:6179
205
  msgid "Purchase License"
206
  msgstr ""
207
 
208
+ #: includes/class-freemius.php:7118, templates/connect.php:171
209
  msgid "You should receive an activation email for %s to your mailbox at %s. Please make sure you click the activation button in that email to %s."
210
  msgstr ""
211
 
212
+ #: includes/class-freemius.php:7122
213
  msgid "start the trial"
214
  msgstr ""
215
 
216
+ #: includes/class-freemius.php:7123, templates/connect.php:175
217
  msgid "complete the install"
218
  msgstr ""
219
 
220
+ #: includes/class-freemius.php:7241
221
  msgid "You are just one step away - %s"
222
  msgstr ""
223
 
224
+ #: includes/class-freemius.php:7244
225
  msgctxt "%s - plugin name. As complete \"PluginX\" activation now"
226
  msgid "Complete \"%s\" Activation Now"
227
  msgstr ""
228
 
229
+ #: includes/class-freemius.php:7322
230
  msgid "We made a few tweaks to the %s, %s"
231
  msgstr ""
232
 
233
+ #: includes/class-freemius.php:7326
234
  msgid "Opt in to make \"%s\" better!"
235
  msgstr ""
236
 
237
+ #: includes/class-freemius.php:7761
238
  msgid "The upgrade of %s was successfully completed."
239
  msgstr ""
240
 
241
+ #: includes/class-freemius.php:10243, includes/class-fs-plugin-updater.php:1099, includes/class-fs-plugin-updater.php:1294, includes/class-fs-plugin-updater.php:1301, templates/auto-installation.php:32
242
  msgid "Add-On"
243
  msgstr ""
244
 
245
+ #: includes/class-freemius.php:10245, templates/account.php:392, templates/account.php:400, templates/debug.php:358, templates/debug.php:549
246
  msgid "Plugin"
247
  msgstr ""
248
 
249
+ #: includes/class-freemius.php:10246, templates/account.php:393, templates/account.php:401, templates/debug.php:358, templates/debug.php:549, templates/forms/deactivation/form.php:71
250
  msgid "Theme"
251
  msgstr ""
252
 
253
+ #: includes/class-freemius.php:13176
254
+ msgid "An unknown error has occurred while trying to toggle the license's white-label mode."
255
+ msgstr ""
256
+
257
+ #: includes/class-freemius.php:13190
258
+ msgid "Your %s license was flagged as white-labeled to hide sensitive information from the WP Admin (e.g. your email, license key, prices, billing address & invoices). If you ever wish to revert it back, you can easily do it through your %s. If this was a mistake you can also %s."
259
+ msgstr ""
260
+
261
+ #: includes/class-freemius.php:13195
262
+ msgid "User Dashboard"
263
+ msgstr ""
264
+
265
+ #: includes/class-freemius.php:13196
266
+ msgid "revert it now"
267
+ msgstr ""
268
+
269
+ #: includes/class-freemius.php:13255
270
  msgid "An unknown error has occurred while trying to set the user's beta mode."
271
  msgstr ""
272
 
273
+ #: includes/class-freemius.php:13328
274
  msgid "Invalid new user ID or email address."
275
  msgstr ""
276
 
277
+ #: includes/class-freemius.php:13358, includes/class-freemius.php:22229
278
  msgid "Sorry, we could not complete the email update. Another user with the same email is already registered."
279
  msgstr ""
280
 
281
+ #: includes/class-freemius.php:13359, includes/class-freemius.php:22230
282
  msgid "If you would like to give up the ownership of the %s's account to %s click the Change Ownership button."
283
  msgstr ""
284
 
285
+ #: includes/class-freemius.php:13366, includes/class-freemius.php:22237
286
  msgid "Change Ownership"
287
  msgstr ""
288
 
289
+ #: includes/class-freemius.php:13942
290
  msgid "Invalid site details collection."
291
  msgstr ""
292
 
293
+ #: includes/class-freemius.php:14062
294
  msgid "We couldn't find your email address in the system, are you sure it's the right address?"
295
  msgstr ""
296
 
297
+ #: includes/class-freemius.php:14064
298
  msgid "We can't see any active licenses associated with that email address, are you sure it's the right address?"
299
  msgstr ""
300
 
301
+ #: includes/class-freemius.php:14338
302
  msgid "Account is pending activation."
303
  msgstr ""
304
 
305
+ #: includes/class-freemius.php:14450, templates/forms/premium-versions-upgrade-handler.php:47
306
  msgid "Buy a license now"
307
  msgstr ""
308
 
309
+ #: includes/class-freemius.php:14462, templates/forms/premium-versions-upgrade-handler.php:46
310
  msgid "Renew your license now"
311
  msgstr ""
312
 
313
+ #: includes/class-freemius.php:14466
314
  msgid "%s to access version %s security & feature updates, and support."
315
  msgstr ""
316
 
317
+ #: includes/class-freemius.php:16907
318
  msgid "%s activation was successfully completed."
319
  msgstr ""
320
 
321
+ #: includes/class-freemius.php:16921
322
  msgid "Your account was successfully activated with the %s plan."
323
  msgstr ""
324
 
325
+ #: includes/class-freemius.php:16932, includes/class-freemius.php:20724
326
  msgid "Your trial has been successfully started."
327
  msgstr ""
328
 
329
+ #: includes/class-freemius.php:17524, includes/class-freemius.php:17629, includes/class-freemius.php:17804
330
  msgid "Couldn't activate %s."
331
  msgstr ""
332
 
333
+ #: includes/class-freemius.php:17525, includes/class-freemius.php:17630, includes/class-freemius.php:17805
334
  msgid "Please contact us with the following message:"
335
  msgstr ""
336
 
337
+ #: includes/class-freemius.php:17626, templates/forms/data-debug-mode.php:162
338
  msgid "An unknown error has occurred."
339
  msgstr ""
340
 
341
+ #: includes/class-freemius.php:18162, includes/class-freemius.php:23310
342
  msgid "Upgrade"
343
  msgstr ""
344
 
345
+ #: includes/class-freemius.php:18168
346
  msgid "Start Trial"
347
  msgstr ""
348
 
349
+ #: includes/class-freemius.php:18170
350
  msgid "Pricing"
351
  msgstr ""
352
 
353
+ #: includes/class-freemius.php:18250, includes/class-freemius.php:18252
354
  msgid "Affiliation"
355
  msgstr ""
356
 
357
+ #: includes/class-freemius.php:18280, includes/class-freemius.php:18282, templates/account.php:240, templates/debug.php:324
358
  msgid "Account"
359
  msgstr ""
360
 
361
+ #: includes/class-freemius.php:18296, includes/class-freemius.php:18298, includes/customizer/class-fs-customizer-support-section.php:60
362
  msgid "Contact Us"
363
  msgstr ""
364
 
365
+ #: includes/class-freemius.php:18309, includes/class-freemius.php:18311, includes/class-freemius.php:23324, templates/account.php:119, templates/account/partials/addon.php:44
366
  msgid "Add-Ons"
367
  msgstr ""
368
 
369
+ #: includes/class-freemius.php:18345
370
  msgctxt "ASCII arrow left icon"
371
  msgid "&#x2190;"
372
  msgstr ""
373
 
374
+ #: includes/class-freemius.php:18345
375
  msgctxt "ASCII arrow right icon"
376
  msgid "&#x27a4;"
377
  msgstr ""
378
 
379
+ #: includes/class-freemius.php:18347, templates/pricing.php:109
380
  msgctxt "noun"
381
  msgid "Pricing"
382
  msgstr ""
383
 
384
+ #: includes/class-freemius.php:18560, includes/customizer/class-fs-customizer-support-section.php:67
385
  msgid "Support Forum"
386
  msgstr ""
387
 
388
+ #: includes/class-freemius.php:19534
389
  msgid "Your email has been successfully verified - you are AWESOME!"
390
  msgstr ""
391
 
392
+ #: includes/class-freemius.php:19535
393
  msgctxt "a positive response"
394
  msgid "Right on"
395
  msgstr ""
396
 
397
+ #: includes/class-freemius.php:20041
398
  msgid "seems like the key you entered doesn't match our records."
399
  msgstr ""
400
 
401
+ #: includes/class-freemius.php:20065
402
  msgid "Debug mode was successfully enabled and will be automatically disabled in 60 min. You can also disable it earlier by clicking the \"Stop Debug\" link."
403
  msgstr ""
404
 
405
+ #: includes/class-freemius.php:20300
406
  msgid "Your %s Add-on plan was successfully upgraded."
407
  msgstr ""
408
 
409
+ #: includes/class-freemius.php:20302
410
  msgid "%s Add-on was successfully purchased."
411
  msgstr ""
412
 
413
+ #: includes/class-freemius.php:20305
414
  msgid "Download the latest version"
415
  msgstr ""
416
 
417
+ #: includes/class-freemius.php:20391
418
  msgid "Your server is blocking the access to Freemius' API, which is crucial for %1$s synchronization. Please contact your host to whitelist %2$s"
419
  msgstr ""
420
 
421
+ #: includes/class-freemius.php:20397, includes/class-freemius.php:20407, includes/class-freemius.php:20859, includes/class-freemius.php:20948
422
  msgid "Error received from the server:"
423
  msgstr ""
424
 
425
+ #: includes/class-freemius.php:20407
426
  msgid "It seems like one of the authentication parameters is wrong. Update your Public Key, Secret Key & User ID, and try again."
427
  msgstr ""
428
 
429
+ #: includes/class-freemius.php:20621, includes/class-freemius.php:20864, includes/class-freemius.php:20919, includes/class-freemius.php:21026
430
  msgctxt "something somebody says when they are thinking about what you have just said."
431
  msgid "Hmm"
432
  msgstr ""
433
 
434
+ #: includes/class-freemius.php:20634
435
  msgid "It looks like you are still on the %s plan. If you did upgrade or change your plan, it's probably an issue on our side - sorry."
436
  msgstr ""
437
 
438
+ #: includes/class-freemius.php:20635, templates/account.php:121, templates/add-ons.php:250, templates/account/partials/addon.php:46
439
  msgctxt "trial period"
440
  msgid "Trial"
441
  msgstr ""
442
 
443
+ #: includes/class-freemius.php:20640
444
  msgid "I have upgraded my account but when I try to Sync the License, the plan remains %s."
445
  msgstr ""
446
 
447
+ #: includes/class-freemius.php:20644, includes/class-freemius.php:20703
448
  msgid "Please contact us here"
449
  msgstr ""
450
 
451
+ #: includes/class-freemius.php:20655
452
  msgid "Your plan was successfully activated."
453
  msgstr ""
454
 
455
+ #: includes/class-freemius.php:20656
456
  msgid "Your plan was successfully upgraded."
457
  msgstr ""
458
 
459
+ #: includes/class-freemius.php:20673
460
  msgid "Your plan was successfully changed to %s."
461
  msgstr ""
462
 
463
+ #: includes/class-freemius.php:20689
464
  msgid "Your license has expired. You can still continue using the free %s forever."
465
  msgstr ""
466
 
467
+ #: includes/class-freemius.php:20691
468
  msgid "Your license has expired. %1$sUpgrade now%2$s to continue using the %3$s without interruptions."
469
  msgstr ""
470
 
471
+ #: includes/class-freemius.php:20699
472
  msgid "Your license has been cancelled. If you think it's a mistake, please contact support."
473
  msgstr ""
474
 
475
+ #: includes/class-freemius.php:20712
476
  msgid "Your license has expired. You can still continue using all the %s features, but you'll need to renew your license to continue getting updates and support."
477
  msgstr ""
478
 
479
+ #: includes/class-freemius.php:20738
480
  msgid "Your free trial has expired. You can still continue using all our free features."
481
  msgstr ""
482
 
483
+ #: includes/class-freemius.php:20740
484
  msgid "Your free trial has expired. %1$sUpgrade now%2$s to continue using the %3$s without interruptions."
485
  msgstr ""
486
 
487
+ #: includes/class-freemius.php:20855
488
  msgid "It looks like the license could not be activated."
489
  msgstr ""
490
 
491
+ #: includes/class-freemius.php:20897
492
  msgid "Your license was successfully activated."
493
  msgstr ""
494
 
495
+ #: includes/class-freemius.php:20923
496
  msgid "It looks like your site currently doesn't have an active license."
497
  msgstr ""
498
 
499
+ #: includes/class-freemius.php:20947
500
  msgid "It looks like the license deactivation failed."
501
  msgstr ""
502
 
503
+ #: includes/class-freemius.php:20976
504
  msgid "Your %s license was successfully deactivated."
505
  msgstr ""
506
 
507
+ #: includes/class-freemius.php:20977
508
  msgid "Your license was successfully deactivated, you are back to the %s plan."
509
  msgstr ""
510
 
511
+ #: includes/class-freemius.php:20980
512
  msgid "O.K"
513
  msgstr ""
514
 
515
+ #: includes/class-freemius.php:21033
516
  msgid "Seems like we are having some temporary issue with your subscription cancellation. Please try again in few minutes."
517
  msgstr ""
518
 
519
+ #: includes/class-freemius.php:21042
520
  msgid "Your subscription was successfully cancelled. Your %s plan license will expire in %s."
521
  msgstr ""
522
 
523
+ #: includes/class-freemius.php:21084
524
  msgid "You are already running the %s in a trial mode."
525
  msgstr ""
526
 
527
+ #: includes/class-freemius.php:21095
528
  msgid "You already utilized a trial before."
529
  msgstr ""
530
 
531
+ #: includes/class-freemius.php:21109
532
  msgid "Plan %s do not exist, therefore, can't start a trial."
533
  msgstr ""
534
 
535
+ #: includes/class-freemius.php:21120
536
  msgid "Plan %s does not support a trial period."
537
  msgstr ""
538
 
539
+ #: includes/class-freemius.php:21131
540
  msgid "None of the %s's plans supports a trial period."
541
  msgstr ""
542
 
543
+ #: includes/class-freemius.php:21181
544
  msgid "It looks like you are not in trial mode anymore so there's nothing to cancel :)"
545
  msgstr ""
546
 
547
+ #: includes/class-freemius.php:21217
548
  msgid "Seems like we are having some temporary issue with your trial cancellation. Please try again in few minutes."
549
  msgstr ""
550
 
551
+ #: includes/class-freemius.php:21236
552
  msgid "Your %s free trial was successfully cancelled."
553
  msgstr ""
554
 
555
+ #: includes/class-freemius.php:21552
556
  msgid "Version %s was released."
557
  msgstr ""
558
 
559
+ #: includes/class-freemius.php:21552
560
  msgid "Please download %s."
561
  msgstr ""
562
 
563
+ #: includes/class-freemius.php:21559
564
  msgid "the latest %s version here"
565
  msgstr ""
566
 
567
+ #: includes/class-freemius.php:21564
568
  msgid "New"
569
  msgstr ""
570
 
571
+ #: includes/class-freemius.php:21569
572
  msgid "Seems like you got the latest release."
573
  msgstr ""
574
 
575
+ #: includes/class-freemius.php:21570
576
  msgid "You are all good!"
577
  msgstr ""
578
 
579
+ #: includes/class-freemius.php:21873
580
  msgid "Verification mail was just sent to %s. If you can't find it after 5 min, please check your spam box."
581
  msgstr ""
582
 
583
+ #: includes/class-freemius.php:22013
584
  msgid "Site successfully opted in."
585
  msgstr ""
586
 
587
+ #: includes/class-freemius.php:22014, includes/class-freemius.php:23020
588
  msgid "Awesome"
589
  msgstr ""
590
 
591
+ #: includes/class-freemius.php:22030, templates/forms/optout.php:41
592
  msgid "We appreciate your help in making the %s better by letting us track some usage data."
593
  msgstr ""
594
 
595
+ #: includes/class-freemius.php:22031
596
  msgid "Thank you!"
597
  msgstr ""
598
 
599
+ #: includes/class-freemius.php:22038
600
  msgid "We will no longer be sending any usage data of %s on %s to %s."
601
  msgstr ""
602
 
603
+ #: includes/class-freemius.php:22196
604
  msgid "Please check your mailbox, you should receive an email via %s to confirm the ownership change. From security reasons, you must confirm the change within the next 15 min. If you cannot find the email, please check your spam folder."
605
  msgstr ""
606
 
607
+ #: includes/class-freemius.php:22202
608
  msgid "Thanks for confirming the ownership change. An email was just sent to %s for final approval."
609
  msgstr ""
610
 
611
+ #: includes/class-freemius.php:22207
612
  msgid "%s is the new owner of the account."
613
  msgstr ""
614
 
615
+ #: includes/class-freemius.php:22209
616
  msgctxt "as congratulations"
617
  msgid "Congrats"
618
  msgstr ""
619
 
620
+ #: includes/class-freemius.php:22245
621
  msgid "Your email was successfully updated. You should receive an email with confirmation instructions in few moments."
622
  msgstr ""
623
 
624
+ #: includes/class-freemius.php:22257
625
  msgid "Please provide your full name."
626
  msgstr ""
627
 
628
+ #: includes/class-freemius.php:22262
629
  msgid "Your name was successfully updated."
630
  msgstr ""
631
 
632
+ #: includes/class-freemius.php:22323
633
  msgid "You have successfully updated your %s."
634
  msgstr ""
635
 
636
+ #: includes/class-freemius.php:22382
637
+ msgid "Is this your client's site? %s if you wish to hide sensitive info like your email, license key, prices, billing address & invoices from the WP Admin."
638
+ msgstr ""
639
+
640
+ #: includes/class-freemius.php:22385
641
+ msgid "Click here"
642
+ msgstr ""
643
+
644
+ #: includes/class-freemius.php:22483
645
  msgid "Just letting you know that the add-ons information of %s is being pulled from an external server."
646
  msgstr ""
647
 
648
+ #: includes/class-freemius.php:22484
649
  msgctxt "advance notice of something that will need attention."
650
  msgid "Heads up"
651
  msgstr ""
652
 
653
+ #: includes/class-freemius.php:23060
654
  msgctxt "exclamation"
655
  msgid "Hey"
656
  msgstr ""
657
 
658
+ #: includes/class-freemius.php:23060
659
  msgid "How do you like %s so far? Test all our %s premium features with a %d-day free trial."
660
  msgstr ""
661
 
662
+ #: includes/class-freemius.php:23068
663
  msgid "No commitment for %s days - cancel anytime!"
664
  msgstr ""
665
 
666
+ #: includes/class-freemius.php:23069
667
  msgid "No credit card required"
668
  msgstr ""
669
 
670
+ #: includes/class-freemius.php:23076, templates/forms/trial-start.php:53
671
  msgctxt "call to action"
672
  msgid "Start free trial"
673
  msgstr ""
674
 
675
+ #: includes/class-freemius.php:23153
676
  msgid "Hey there, did you know that %s has an affiliate program? If you like the %s you can become our ambassador and earn some cash!"
677
  msgstr ""
678
 
679
+ #: includes/class-freemius.php:23162
680
  msgid "Learn more"
681
  msgstr ""
682
 
683
+ #: includes/class-freemius.php:23348, templates/account.php:556, templates/account.php:706, templates/connect.php:179, templates/connect.php:456, templates/forms/license-activation.php:27, templates/account/partials/addon.php:321
684
  msgid "Activate License"
685
  msgstr ""
686
 
687
+ #: includes/class-freemius.php:23349, templates/account.php:650, templates/account.php:705, templates/account/partials/addon.php:322, templates/account/partials/site.php:271
688
  msgid "Change License"
689
  msgstr ""
690
 
691
+ #: includes/class-freemius.php:23462, templates/account/partials/site.php:169
692
  msgid "Opt Out"
693
  msgstr ""
694
 
695
+ #: includes/class-freemius.php:23464, includes/class-freemius.php:23470, templates/account/partials/site.php:49, templates/account/partials/site.php:169
696
  msgid "Opt In"
697
  msgstr ""
698
 
699
+ #: includes/class-freemius.php:23700
700
  msgid " The paid version of %1$s is already installed. Please activate it to start benefiting the %2$s features. %3$s"
701
  msgstr ""
702
 
703
+ #: includes/class-freemius.php:23708
704
  msgid "Activate %s features"
705
  msgstr ""
706
 
707
+ #: includes/class-freemius.php:23721
708
  msgid "Please follow these steps to complete the upgrade"
709
  msgstr ""
710
 
711
+ #: includes/class-freemius.php:23725
712
  msgid "Download the latest %s version"
713
  msgstr ""
714
 
715
+ #: includes/class-freemius.php:23729
716
  msgid "Upload and activate the downloaded version"
717
  msgstr ""
718
 
719
+ #: includes/class-freemius.php:23731
720
  msgid "How to upload and activate?"
721
  msgstr ""
722
 
723
+ #: includes/class-freemius.php:23865
724
  msgid "%sClick here%s to choose the sites where you'd like to activate the license on."
725
  msgstr ""
726
 
727
+ #: includes/class-freemius.php:24034
728
  msgid "Auto installation only works for opted-in users."
729
  msgstr ""
730
 
731
+ #: includes/class-freemius.php:24044, includes/class-freemius.php:24077, includes/class-fs-plugin-updater.php:1273, includes/class-fs-plugin-updater.php:1287
732
  msgid "Invalid module ID."
733
  msgstr ""
734
 
735
+ #: includes/class-freemius.php:24053, includes/class-fs-plugin-updater.php:1309
736
  msgid "Premium version already active."
737
  msgstr ""
738
 
739
+ #: includes/class-freemius.php:24060
740
  msgid "You do not have a valid license to access the premium version."
741
  msgstr ""
742
 
743
+ #: includes/class-freemius.php:24067
744
  msgid "Plugin is a \"Serviceware\" which means it does not have a premium code version."
745
  msgstr ""
746
 
747
+ #: includes/class-freemius.php:24085, includes/class-fs-plugin-updater.php:1308
748
  msgid "Premium add-on version already installed."
749
  msgstr ""
750
 
751
+ #: includes/class-freemius.php:24435
752
  msgid "View paid features"
753
  msgstr ""
754
 
755
+ #: includes/class-freemius.php:24757
756
  msgid "Thank you so much for using %s and its add-ons!"
757
  msgstr ""
758
 
759
+ #: includes/class-freemius.php:24758
760
  msgid "Thank you so much for using %s!"
761
  msgstr ""
762
 
763
+ #: includes/class-freemius.php:24764
764
  msgid "You've already opted-in to our usage-tracking, which helps us keep improving the %s."
765
  msgstr ""
766
 
767
+ #: includes/class-freemius.php:24768
768
  msgid "Thank you so much for using our products!"
769
  msgstr ""
770
 
771
+ #: includes/class-freemius.php:24769
772
  msgid "You've already opted-in to our usage-tracking, which helps us keep improving them."
773
  msgstr ""
774
 
775
+ #: includes/class-freemius.php:24788
776
  msgid "%s and its add-ons"
777
  msgstr ""
778
 
779
+ #: includes/class-freemius.php:24797
780
  msgid "Products"
781
  msgstr ""
782
 
783
+ #: includes/class-freemius.php:24804, templates/connect.php:280
784
  msgid "Yes"
785
  msgstr ""
786
 
787
+ #: includes/class-freemius.php:24805, templates/connect.php:281
788
  msgid "send me security & feature updates, educational content and offers."
789
  msgstr ""
790
 
791
+ #: includes/class-freemius.php:24806, templates/connect.php:286
792
  msgid "No"
793
  msgstr ""
794
 
795
+ #: includes/class-freemius.php:24808, templates/connect.php:288
796
  msgid "do %sNOT%s send me security & feature updates, educational content and offers."
797
  msgstr ""
798
 
799
+ #: includes/class-freemius.php:24818
800
  msgid "Due to the new %sEU General Data Protection Regulation (GDPR)%s compliance requirements it is required that you provide your explicit consent, again, confirming that you are onboard :-)"
801
  msgstr ""
802
 
803
+ #: includes/class-freemius.php:24820, templates/connect.php:295
804
  msgid "Please let us know if you'd like us to contact you for security & feature updates, educational content, and occasional offers:"
805
  msgstr ""
806
 
807
+ #: includes/class-freemius.php:25102
808
  msgid "License key is empty."
809
  msgstr ""
810
 
832
  msgid "Important Upgrade Notice:"
833
  msgstr ""
834
 
835
+ #: includes/class-fs-plugin-updater.php:1338
836
  msgid "Installing plugin: %s"
837
  msgstr ""
838
 
839
+ #: includes/class-fs-plugin-updater.php:1379
840
  msgid "Unable to connect to the filesystem. Please confirm your credentials."
841
  msgstr ""
842
 
843
+ #: includes/class-fs-plugin-updater.php:1561
844
  msgid "The remote plugin package does not contain a folder with the desired slug and renaming did not work."
845
  msgstr ""
846
 
847
+ #: includes/fs-plugin-info-dialog.php:541
848
  msgid "Purchase More"
849
  msgstr ""
850
 
851
+ #: includes/fs-plugin-info-dialog.php:542, templates/account/partials/addon.php:385
852
  msgctxt "verb"
853
  msgid "Purchase"
854
  msgstr ""
855
 
856
+ #: includes/fs-plugin-info-dialog.php:546
857
  msgid "Start my free %s"
858
  msgstr ""
859
 
860
+ #: includes/fs-plugin-info-dialog.php:744
861
  msgid "Install Free Version Update Now"
862
  msgstr ""
863
 
864
+ #: includes/fs-plugin-info-dialog.php:745, templates/account.php:639
865
  msgid "Install Update Now"
866
  msgstr ""
867
 
868
+ #: includes/fs-plugin-info-dialog.php:754
869
  msgid "Install Free Version Now"
870
  msgstr ""
871
 
872
+ #: includes/fs-plugin-info-dialog.php:755, templates/add-ons.php:323, templates/auto-installation.php:111, templates/account/partials/addon.php:365, templates/account/partials/addon.php:418
873
  msgid "Install Now"
874
  msgstr ""
875
 
876
+ #: includes/fs-plugin-info-dialog.php:771
877
  msgctxt "as download latest version"
878
  msgid "Download Latest Free Version"
879
  msgstr ""
880
 
881
+ #: includes/fs-plugin-info-dialog.php:772, templates/account.php:99, templates/add-ons.php:37, templates/account/partials/addon.php:25
882
  msgctxt "as download latest version"
883
  msgid "Download Latest"
884
  msgstr ""
885
 
886
+ #: includes/fs-plugin-info-dialog.php:787, templates/add-ons.php:329, templates/account/partials/addon.php:356, templates/account/partials/addon.php:412
887
  msgid "Activate this add-on"
888
  msgstr ""
889
 
890
+ #: includes/fs-plugin-info-dialog.php:789, templates/connect.php:453
891
  msgid "Activate Free Version"
892
  msgstr ""
893
 
894
+ #: includes/fs-plugin-info-dialog.php:790, templates/account.php:123, templates/add-ons.php:330, templates/account/partials/addon.php:48
895
  msgid "Activate"
896
  msgstr ""
897
 
898
+ #: includes/fs-plugin-info-dialog.php:1002
899
  msgctxt "Plugin installer section title"
900
  msgid "Description"
901
  msgstr ""
902
 
903
+ #: includes/fs-plugin-info-dialog.php:1003
904
  msgctxt "Plugin installer section title"
905
  msgid "Installation"
906
  msgstr ""
907
 
908
+ #: includes/fs-plugin-info-dialog.php:1004
909
  msgctxt "Plugin installer section title"
910
  msgid "FAQ"
911
  msgstr ""
912
 
913
+ #: includes/fs-plugin-info-dialog.php:1005, templates/plugin-info/description.php:55
914
  msgid "Screenshots"
915
  msgstr ""
916
 
917
+ #: includes/fs-plugin-info-dialog.php:1006
918
  msgctxt "Plugin installer section title"
919
  msgid "Changelog"
920
  msgstr ""
921
 
922
+ #: includes/fs-plugin-info-dialog.php:1007
923
  msgctxt "Plugin installer section title"
924
  msgid "Reviews"
925
  msgstr ""
926
 
927
+ #: includes/fs-plugin-info-dialog.php:1008
928
  msgctxt "Plugin installer section title"
929
  msgid "Other Notes"
930
  msgstr ""
931
 
932
+ #: includes/fs-plugin-info-dialog.php:1023
933
  msgctxt "Plugin installer section title"
934
  msgid "Features & Pricing"
935
  msgstr ""
936
 
937
+ #: includes/fs-plugin-info-dialog.php:1033
938
  msgid "Plugin Install"
939
  msgstr ""
940
 
941
+ #: includes/fs-plugin-info-dialog.php:1105
942
  msgctxt "e.g. Professional Plan"
943
  msgid "%s Plan"
944
  msgstr ""
945
 
946
+ #: includes/fs-plugin-info-dialog.php:1131
947
  msgctxt "e.g. the best product"
948
  msgid "Best"
949
  msgstr ""
950
 
951
+ #: includes/fs-plugin-info-dialog.php:1137, includes/fs-plugin-info-dialog.php:1157
952
  msgctxt "as every month"
953
  msgid "Monthly"
954
  msgstr ""
955
 
956
+ #: includes/fs-plugin-info-dialog.php:1140
957
  msgctxt "as once a year"
958
  msgid "Annual"
959
  msgstr ""
960
 
961
+ #: includes/fs-plugin-info-dialog.php:1143
962
  msgid "Lifetime"
963
  msgstr ""
964
 
965
+ #: includes/fs-plugin-info-dialog.php:1157, includes/fs-plugin-info-dialog.php:1159, includes/fs-plugin-info-dialog.php:1161
966
  msgctxt "e.g. billed monthly"
967
  msgid "Billed %s"
968
  msgstr ""
969
 
970
+ #: includes/fs-plugin-info-dialog.php:1159
971
  msgctxt "as once a year"
972
  msgid "Annually"
973
  msgstr ""
974
 
975
+ #: includes/fs-plugin-info-dialog.php:1161
976
  msgctxt "as once a year"
977
  msgid "Once"
978
  msgstr ""
979
 
980
+ #: includes/fs-plugin-info-dialog.php:1167
981
  msgid "Single Site License"
982
  msgstr ""
983
 
984
+ #: includes/fs-plugin-info-dialog.php:1169
985
  msgid "Unlimited Licenses"
986
  msgstr ""
987
 
988
+ #: includes/fs-plugin-info-dialog.php:1171
989
  msgid "Up to %s Sites"
990
  msgstr ""
991
 
992
+ #: includes/fs-plugin-info-dialog.php:1181, templates/plugin-info/features.php:82
993
  msgctxt "as monthly period"
994
  msgid "mo"
995
  msgstr ""
996
 
997
+ #: includes/fs-plugin-info-dialog.php:1188, templates/plugin-info/features.php:80
998
  msgctxt "as annual period"
999
  msgid "year"
1000
  msgstr ""
1001
 
1002
+ #: includes/fs-plugin-info-dialog.php:1242
1003
  msgctxt "noun"
1004
  msgid "Price"
1005
  msgstr ""
1006
 
1007
+ #: includes/fs-plugin-info-dialog.php:1290
1008
  msgid "Save %s"
1009
  msgstr ""
1010
 
1011
+ #: includes/fs-plugin-info-dialog.php:1300
1012
  msgid "No commitment for %s - cancel anytime"
1013
  msgstr ""
1014
 
1015
+ #: includes/fs-plugin-info-dialog.php:1303
1016
  msgid "After your free %s, pay as little as %s"
1017
  msgstr ""
1018
 
1019
+ #: includes/fs-plugin-info-dialog.php:1314
1020
  msgid "Details"
1021
  msgstr ""
1022
 
1023
+ #: includes/fs-plugin-info-dialog.php:1318, templates/account.php:110, templates/debug.php:201, templates/debug.php:238, templates/debug.php:455, templates/account/partials/addon.php:36
1024
  msgctxt "product version"
1025
  msgid "Version"
1026
  msgstr ""
1027
 
1028
+ #: includes/fs-plugin-info-dialog.php:1325
1029
  msgctxt "as the plugin author"
1030
  msgid "Author"
1031
  msgstr ""
1032
 
1033
+ #: includes/fs-plugin-info-dialog.php:1332
1034
  msgid "Last Updated"
1035
  msgstr ""
1036
 
1037
+ #: includes/fs-plugin-info-dialog.php:1337, templates/account.php:525
1038
  msgctxt "x-ago"
1039
  msgid "%s ago"
1040
  msgstr ""
1041
 
1042
+ #: includes/fs-plugin-info-dialog.php:1346
1043
  msgid "Requires WordPress Version"
1044
  msgstr ""
1045
 
1046
+ #: includes/fs-plugin-info-dialog.php:1347
1047
  msgid "%s or higher"
1048
  msgstr ""
1049
 
1050
+ #: includes/fs-plugin-info-dialog.php:1354
1051
  msgid "Compatible up to"
1052
  msgstr ""
1053
 
1054
+ #: includes/fs-plugin-info-dialog.php:1362
1055
  msgid "Downloaded"
1056
  msgstr ""
1057
 
1058
+ #: includes/fs-plugin-info-dialog.php:1366
1059
  msgid "%s time"
1060
  msgstr ""
1061
 
1062
+ #: includes/fs-plugin-info-dialog.php:1368
1063
  msgid "%s times"
1064
  msgstr ""
1065
 
1066
+ #: includes/fs-plugin-info-dialog.php:1379
1067
  msgid "WordPress.org Plugin Page"
1068
  msgstr ""
1069
 
1070
+ #: includes/fs-plugin-info-dialog.php:1388
1071
  msgid "Plugin Homepage"
1072
  msgstr ""
1073
 
1074
+ #: includes/fs-plugin-info-dialog.php:1397, includes/fs-plugin-info-dialog.php:1481
1075
  msgid "Donate to this plugin"
1076
  msgstr ""
1077
 
1078
+ #: includes/fs-plugin-info-dialog.php:1404
1079
  msgid "Average Rating"
1080
  msgstr ""
1081
 
1082
+ #: includes/fs-plugin-info-dialog.php:1411
1083
  msgid "based on %s"
1084
  msgstr ""
1085
 
1086
+ #: includes/fs-plugin-info-dialog.php:1415
1087
  msgid "%s rating"
1088
  msgstr ""
1089
 
1090
+ #: includes/fs-plugin-info-dialog.php:1417
1091
  msgid "%s ratings"
1092
  msgstr ""
1093
 
1094
+ #: includes/fs-plugin-info-dialog.php:1432
1095
  msgid "%s star"
1096
  msgstr ""
1097
 
1098
+ #: includes/fs-plugin-info-dialog.php:1434
1099
  msgid "%s stars"
1100
  msgstr ""
1101
 
1102
+ #: includes/fs-plugin-info-dialog.php:1446
1103
  msgid "Click to see reviews that provided a rating of %s"
1104
  msgstr ""
1105
 
1106
+ #: includes/fs-plugin-info-dialog.php:1459
1107
  msgid "Contributors"
1108
  msgstr ""
1109
 
1110
+ #: includes/fs-plugin-info-dialog.php:1489, includes/fs-plugin-info-dialog.php:1491
1111
  msgid "Warning"
1112
  msgstr ""
1113
 
1114
+ #: includes/fs-plugin-info-dialog.php:1489
1115
  msgid "This plugin has not been tested with your current version of WordPress."
1116
  msgstr ""
1117
 
1118
+ #: includes/fs-plugin-info-dialog.php:1491
1119
  msgid "This plugin has not been marked as compatible with your version of WordPress."
1120
  msgstr ""
1121
 
1122
+ #: includes/fs-plugin-info-dialog.php:1510
1123
  msgid "Paid add-on must be deployed to Freemius."
1124
  msgstr ""
1125
 
1126
+ #: includes/fs-plugin-info-dialog.php:1511
1127
  msgid "Add-on must be deployed to WordPress.org or Freemius."
1128
  msgstr ""
1129
 
1130
+ #: includes/fs-plugin-info-dialog.php:1532
1131
  msgid "Newer Version (%s) Installed"
1132
  msgstr ""
1133
 
1134
+ #: includes/fs-plugin-info-dialog.php:1533
1135
  msgid "Newer Free Version (%s) Installed"
1136
  msgstr ""
1137
 
1138
+ #: includes/fs-plugin-info-dialog.php:1540
1139
  msgid "Latest Version Installed"
1140
  msgstr ""
1141
 
1142
+ #: includes/fs-plugin-info-dialog.php:1541
1143
  msgid "Latest Free Version Installed"
1144
  msgstr ""
1145
 
1425
  msgid "Deactivating your license will block all premium features, but will enable activating the license on another site. Are you sure you want to proceed?"
1426
  msgstr ""
1427
 
1428
+ #: templates/account.php:1073
1429
+ msgid "Disabling white-label mode"
1430
+ msgstr ""
1431
+
1432
+ #: templates/account.php:1074
1433
+ msgid "Enabling white-label mode"
1434
+ msgstr ""
1435
+
1436
  #: templates/add-ons.php:38
1437
  msgid "View details"
1438
  msgstr ""
1562
  msgid "Can't find your license key?"
1563
  msgstr ""
1564
 
1565
+ #: templates/connect.php:323, templates/connect.php:695, templates/forms/deactivation/retry-skip.php:20
1566
  msgctxt "verb"
1567
  msgid "Skip"
1568
  msgstr ""
1619
  msgid "Title, slug, version, and is active"
1620
  msgstr ""
1621
 
1622
+ #: templates/connect.php:421, templates/forms/license-activation.php:41
1623
  msgid "The %1$s will be periodically sending data to %2$s to check for security and feature updates, and verify the validity of your license."
1624
  msgstr ""
1625
 
1626
+ #: templates/connect.php:426
1627
  msgid "What permissions are being granted?"
1628
  msgstr ""
1629
 
1630
+ #: templates/connect.php:452
1631
  msgid "Don't have a license key?"
1632
  msgstr ""
1633
 
1634
+ #: templates/connect.php:455
1635
  msgid "Have a license key?"
1636
  msgstr ""
1637
 
1638
+ #: templates/connect.php:463
1639
  msgid "Privacy Policy"
1640
  msgstr ""
1641
 
1642
+ #: templates/connect.php:465
1643
  msgid "License Agreement"
1644
  msgstr ""
1645
 
1646
+ #: templates/connect.php:465
1647
  msgid "Terms of Service"
1648
  msgstr ""
1649
 
1650
+ #: templates/connect.php:854
1651
  msgctxt "as in the process of sending an email"
1652
  msgid "Sending email"
1653
  msgstr ""
1654
 
1655
+ #: templates/connect.php:855
1656
  msgctxt "as activating plugin"
1657
  msgid "Activating"
1658
  msgstr ""
2209
  msgid "Please provide details on how you intend to promote %s (please be as specific as possible)."
2210
  msgstr ""
2211
 
2212
+ #: templates/forms/affiliation.php:232, templates/forms/resend-key.php:22
2213
  msgid "Cancel"
2214
  msgstr ""
2215
 
2216
+ #: templates/forms/affiliation.php:234
2217
  msgid "Become an affiliate"
2218
  msgstr ""
2219
 
freemius/start.php CHANGED
@@ -15,7 +15,7 @@
15
  *
16
  * @var string
17
  */
18
- $this_sdk_version = '2.4.0.1';
19
 
20
  #region SDK Selection Logic --------------------------------------------------------------------
21
 
15
  *
16
  * @var string
17
  */
18
+ $this_sdk_version = '2.4.1';
19
 
20
  #region SDK Selection Logic --------------------------------------------------------------------
21
 
freemius/templates/account.php CHANGED
@@ -1056,6 +1056,29 @@
1056
  });
1057
  });
1058
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1059
  })(jQuery);
1060
  </script>
1061
  <?php
1056
  });
1057
  });
1058
 
1059
+ $( '.fs-toggle-whitelabel-mode' ).click( function () {
1060
+ var $toggleLink = $( this );
1061
+
1062
+ $.ajax( {
1063
+ url : ajaxurl,
1064
+ method: 'POST',
1065
+ data : {
1066
+ action : '<?php echo $fs->get_ajax_action( 'toggle_whitelabel_mode' ) ?>',
1067
+ security : '<?php echo $fs->get_ajax_security( 'toggle_whitelabel_mode' ) ?>',
1068
+ module_id: <?php echo $fs->get_id() ?>
1069
+ },
1070
+ beforeSend: function () {
1071
+ $toggleLink.parent().text( '<?php
1072
+ $is_whitelabeled ?
1073
+ fs_esc_html_echo_inline( 'Disabling white-label mode', 'disabling-whitelabel-mode' ) :
1074
+ fs_esc_html_echo_inline( 'Enabling white-label mode', 'enabling-whitelabel-mode' )
1075
+ ?>' + '...' );
1076
+ },
1077
+ complete: function () {
1078
+ location.reload();
1079
+ }
1080
+ } );
1081
+ });
1082
  })(jQuery);
1083
  </script>
1084
  <?php
freemius/templates/forms/affiliation.php CHANGED
@@ -220,10 +220,12 @@
220
  <p class="description"><?php echo esc_html( sprintf( fs_text_inline( 'Please provide details on how you intend to promote %s (please be as specific as possible).', 'promotion-method-desc-field-desc', $slug ), $plugin_title ) ) ?></p>
221
  <?php endif ?>
222
  </div>
 
223
  <div>
224
  <input type="checkbox" id="legal_consent_checkbox">
225
  <label for="legal_consent_checkbox">I agree to the <a href="<?php echo $affiliate_program_terms_url ?>" target="_blank" rel="noopener">Referrer Program</a>'s terms & conditions.</label>
226
  </div>
 
227
  </form>
228
  </div>
229
  <?php if ( ! $is_affiliate ) : ?>
220
  <p class="description"><?php echo esc_html( sprintf( fs_text_inline( 'Please provide details on how you intend to promote %s (please be as specific as possible).', 'promotion-method-desc-field-desc', $slug ), $plugin_title ) ) ?></p>
221
  <?php endif ?>
222
  </div>
223
+ <?php if ( ! $is_affiliate ) : ?>
224
  <div>
225
  <input type="checkbox" id="legal_consent_checkbox">
226
  <label for="legal_consent_checkbox">I agree to the <a href="<?php echo $affiliate_program_terms_url ?>" target="_blank" rel="noopener">Referrer Program</a>'s terms & conditions.</label>
227
  </div>
228
+ <?php endif ?>
229
  </form>
230
  </div>
231
  <?php if ( ! $is_affiliate ) : ?>
includes/classes/YasrDatabaseRatings.php CHANGED
@@ -30,6 +30,8 @@ if (!defined('ABSPATH')) {
30
  class YasrDatabaseRatings {
31
 
32
  /**
 
 
33
  * @param $post_id void|bool|int
34
  *
35
  * @return mixed|null
@@ -52,7 +54,27 @@ class YasrDatabaseRatings {
52
  return $overall_rating;
53
  }
54
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
55
  /**
 
 
56
  * @param bool|integer $post_id
57
  *
58
  * @return array|bool|mixed|object|null
@@ -90,6 +112,23 @@ class YasrDatabaseRatings {
90
  return $array_to_return;
91
  }
92
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
93
  /**
94
  * Check if an user has already rated, and if so, return the rating, or false otherwise
95
  *
30
  class YasrDatabaseRatings {
31
 
32
  /**
33
+ * Returns overall rating for single post or page
34
+ *
35
  * @param $post_id void|bool|int
36
  *
37
  * @return mixed|null
54
  return $overall_rating;
55
  }
56
 
57
+
58
+ public static function getAllOverallRatings() {
59
+ global $wpdb;
60
+
61
+ $query = "SELECT pm.post_id,
62
+ pm.meta_value as vote,
63
+ pm.meta_id as id,
64
+ p.post_author as user_id,
65
+ p.post_modified as date
66
+ FROM $wpdb->postmeta as pm,
67
+ $wpdb->posts as p
68
+ WHERE pm.meta_key = 'yasr_overall_rating'
69
+ AND p.ID = pm.post_id";
70
+
71
+ return $wpdb->get_results($query, ARRAY_A);
72
+
73
+ }
74
+
75
  /**
76
+ * Return Visitor Votes for a single post or page
77
+ *
78
  * @param bool|integer $post_id
79
  *
80
  * @return array|bool|mixed|object|null
112
  return $array_to_return;
113
  }
114
 
115
+ /**
116
+ * Returns *ALL* visitor votes in YASR_LOG_TABLE
117
+ * used in stats page
118
+ *
119
+ * @author Dario Curvino <@dudo>
120
+ * @since 2.5.2
121
+ *
122
+ * @return array|object|null
123
+ */
124
+ public static function getAllVisitorVotes() {
125
+ global $wpdb;
126
+
127
+ $query = 'SELECT * FROM ' .YASR_LOG_TABLE. ' ORDER BY date';
128
+
129
+ return $wpdb->get_results($query, ARRAY_A);
130
+ }
131
+
132
  /**
133
  * Check if an user has already rated, and if so, return the rating, or false otherwise
134
  *
includes/classes/YasrMultiSetData.php CHANGED
@@ -103,9 +103,7 @@ class YasrMultiSetData {
103
  return false;
104
  }
105
 
106
- $multiset_content = YasrMultiSetData::returnArrayFieldsRatings($set_id, $set_fields, $post_id);
107
-
108
- return $multiset_content;
109
  }
110
 
111
  /** This functions returns an array with all the value to print the multiset
@@ -240,4 +238,21 @@ class YasrMultiSetData {
240
  return round( $multiset_vote_sum / $multiset_rows_number, 1);
241
  }
242
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
243
  }
103
  return false;
104
  }
105
 
106
+ return self::returnArrayFieldsRatings($set_id, $set_fields, $post_id);
 
 
107
  }
108
 
109
  /** This functions returns an array with all the value to print the multiset
238
  return round( $multiset_vote_sum / $multiset_rows_number, 1);
239
  }
240
 
241
+ /**
242
+ * Returns *ALL* multiset votes in YASR_LOG_MULTI_SET
243
+ * used in stats page
244
+ *
245
+ * @author Dario Curvino <@dudo>
246
+ * @since 2.5.2
247
+ *
248
+ * @return array|object|null
249
+ */
250
+ public static function returnAllLogMulti() {
251
+ global $wpdb;
252
+
253
+ $query = 'SELECT * FROM ' .YASR_LOG_MULTI_SET. ' ORDER BY date, set_type, post_id DESC';
254
+
255
+ return $wpdb->get_results($query, ARRAY_A);
256
+ }
257
+
258
  }
includes/classes/YasrRankingData.php ADDED
@@ -0,0 +1,124 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+
5
+ Copyright 2014 Dario Curvino (email : d.curvino@tiscali.it)
6
+
7
+ This program is free software: you can redistribute it and/or modify
8
+ it under the terms of the GNU General Public License as published by
9
+ the Free Software Foundation, either version 2 of the License, or
10
+ (at your option) any later version.
11
+
12
+ This program is distributed in the hope that it will be useful,
13
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ GNU General Public License for more details.
16
+
17
+ You should have received a copy of the GNU General Public License
18
+ along with this program. If not, see <http://www.gnu.org/licenses/>
19
+ */
20
+
21
+ if (!defined('ABSPATH')) {
22
+ exit('You\'re not allowed to see this page');
23
+ } // Exit if accessed directly
24
+
25
+ class YasrRankingData {
26
+
27
+ /**
28
+ * Run $wpdb->get_results for overall Rating
29
+ *
30
+ * @author Dario Curvino <@dudo>
31
+ * @since 2.5.2
32
+ *
33
+ * @param bool|array $attributes
34
+ *
35
+ * @return array|false|object|void
36
+ */
37
+ public static function rankingOverallGetResults($attributes = false) {
38
+ global $wpdb;
39
+
40
+ //use this hook to adds query params
41
+ $sql_params = apply_filters('yasr_set_query_attributes', $attributes);
42
+
43
+ //do a custom query here
44
+ //must returns rating and post_id
45
+ $query = apply_filters('yasr_rankings_query_ov', $sql_params);
46
+
47
+ //if query === $sql_params means that filters doesn't exists
48
+ if($query === $sql_params) {
49
+ //default query
50
+ $query = "SELECT pm.meta_value AS rating,
51
+ pm.post_id AS post_id
52
+ FROM $wpdb->postmeta AS pm,
53
+ $wpdb->posts AS p
54
+ WHERE pm.post_id = p.ID
55
+ AND p.post_status = 'publish'
56
+ AND pm.meta_key = 'yasr_overall_rating'
57
+ AND pm.meta_value > 0
58
+ ORDER BY pm.meta_value DESC,
59
+ pm.post_id
60
+ LIMIT 10";
61
+ }
62
+
63
+ $query_result = $wpdb->get_results($query);
64
+
65
+ if ($query_result) {
66
+ return $query_result;
67
+ }
68
+ return false;
69
+ }
70
+
71
+ /**
72
+ * Run $wpdb->get_results for VV
73
+ *
74
+ * @author Dario Curvino <@dudo>
75
+ * @since 2.5.2
76
+ *
77
+ * @param bool|array $attributes
78
+ * @param $ranking
79
+ * @param bool $required_votes
80
+ *
81
+ * @return array|false|object|void
82
+ */
83
+
84
+ public static function rankingVVGetResults($attributes, $ranking, $required_votes=false) {
85
+ global $wpdb;
86
+
87
+ if($required_votes !== false) {
88
+ $attributes['required_votes'] = $required_votes;
89
+ }
90
+
91
+ $sql_params = apply_filters('yasr_set_query_attributes', $attributes);
92
+
93
+ //This filter is used to filter the query
94
+ $query = apply_filters('yasr_rankings_query_vv', $sql_params, $ranking);
95
+
96
+ //if no custom query is hooked
97
+ if($query === $sql_params) {
98
+
99
+ $common_query = "SELECT post_id,
100
+ COUNT(post_id) AS number_of_votes,
101
+ (SUM(vote) / COUNT(post_id)) AS rating
102
+ FROM " . YASR_LOG_TABLE . ",
103
+ $wpdb->posts AS p
104
+ WHERE post_id = p.ID
105
+ AND p.post_status = 'publish'
106
+ GROUP BY post_id
107
+ HAVING number_of_votes > 1
108
+ ";
109
+
110
+ if ($ranking === 'highest') {
111
+ $order_by = ' ORDER BY rating DESC, number_of_votes DESC';
112
+ }
113
+ else {
114
+ $order_by = ' ORDER BY number_of_votes DESC, rating DESC, post_id DESC';
115
+ }
116
+
117
+ $limit = ' LIMIT 10';
118
+ $query = $common_query . $order_by . $limit;
119
+
120
+ }
121
+
122
+ return $wpdb->get_results($query);
123
+ }
124
+ }
includes/rest/classes/YasrCustomEndpoint.php CHANGED
@@ -6,66 +6,84 @@ if (!defined('ABSPATH')) {
6
 
7
  class YasrCustomEndpoint extends WP_REST_Controller {
8
 
 
 
 
9
  /**
10
- * Constructor
11
  */
12
  public function restApiInit() {
13
- add_action('rest_api_init', array( $this, 'customEndpoint'));
14
  }
15
 
16
 
17
  /**
18
- * All the functions that need parameters
19
  */
20
  public function customEndpoint () {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
21
  /*
22
  * Param for this route must be
23
- * YOURSITE/wp-json/yet-another-stars-rating/v1/yasr-multiset/<ID>?post_id=<ID>
24
  * OPTIONAL &visitor=1
25
  *
26
  */
27
- $namespace = 'yet-another-stars-rating/';
28
- $version = 'v1/';
29
  $base = 'yasr-multiset';
30
 
31
- register_rest_route(
32
- $namespace . $version . $base,
33
- '(?P<set_id>\d+)',
34
- array(
35
- 'methods' => WP_REST_Server::READABLE,
36
- 'callback' => array($this, 'authorMultiSet'),
37
- 'args' => array(
38
- 'set_id' => array(
39
- 'required' => true,
40
- 'sanitize_callback' => array($this, 'sanitizeInput')
41
- ),
42
- 'post_id' => array(
43
- 'required' => true,
44
- 'sanitize_callback' => array($this, 'sanitizeInput')
45
- ),
46
- 'visitor' => array(
47
- 'default' => 0,
48
- 'required' => false,
49
- 'sanitize_callback' => array($this, 'sanitizeInput')
50
- ),
51
  ),
52
- 'permission_callback' => static function () {
53
- return true;
54
- }
55
- )
 
 
 
 
 
 
56
  );
57
  }
58
 
59
  /**
60
  *
61
- * Returns Author Multi Set
62
  * must be public
63
  *
64
  * @param WP_REST_Request $request
65
  *
66
  * @return WP_Error|WP_REST_Response
67
  */
68
- public function authorMultiSet ($request) {
69
  /*
70
  * Get cleaned params
71
  */
@@ -106,6 +124,116 @@ class YasrCustomEndpoint extends WP_REST_Controller {
106
  return $response;
107
  }
108
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
109
  /**
110
  * Sanitizie input, must be public
111
  *
@@ -116,9 +244,6 @@ class YasrCustomEndpoint extends WP_REST_Controller {
116
  * @return int|void|WP_Error
117
  */
118
  public function sanitizeInput ($param, $request, $key) {
119
- if($key === 'set_id') {
120
- return (int)$param;
121
- }
122
 
123
  if($key === 'post_id') {
124
  $post_id = (int)$param;
@@ -146,9 +271,30 @@ class YasrCustomEndpoint extends WP_REST_Controller {
146
  return $post_id;
147
  }
148
 
 
 
 
 
149
  if($key === 'visitor') {
150
  return (int)$param;
151
  }
152
- return;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
153
  }
154
  }
6
 
7
  class YasrCustomEndpoint extends WP_REST_Controller {
8
 
9
+ protected $namespace;
10
+ protected $version;
11
+
12
  /**
13
+ * hook into rest_api_init
14
  */
15
  public function restApiInit() {
16
+ add_action('rest_api_init', array($this, 'customEndpoint'));
17
  }
18
 
19
 
20
  /**
21
+ * Load all register_rest_route
22
  */
23
  public function customEndpoint () {
24
+ $this->namespace = 'yet-another-stars-rating/';
25
+ $this->version = 'v1/';
26
+
27
+ $this->multisetEndpoint();
28
+ $this->rankingEndpoint();
29
+ }
30
+
31
+ /**
32
+ * This function will register base yasr-multiset
33
+ *
34
+ * @author Dario Curvino <@dudo>
35
+ * @since 2.5.2
36
+ */
37
+ public function multisetEndpoint () {
38
  /*
39
  * Param for this route must be
40
+ * YOURSITE/wp-json/yet-another-stars-rating/v1/yasr-multiset/?set_id&post_id=<ID>
41
  * OPTIONAL &visitor=1
42
  *
43
  */
44
+
 
45
  $base = 'yasr-multiset';
46
 
47
+ $args = array(
48
+ 'methods' => WP_REST_Server::READABLE,
49
+ 'callback' => array($this, 'multiSet'),
50
+ 'args' => array(
51
+ 'set_id' => array(
52
+ 'required' => true,
53
+ 'sanitize_callback' => array($this, 'sanitizeInput')
54
+ ),
55
+ 'post_id' => array(
56
+ 'required' => true,
57
+ 'sanitize_callback' => array($this, 'sanitizeInput')
58
+ ),
59
+ 'visitor' => array(
60
+ 'default' => 0,
61
+ 'required' => false,
62
+ 'sanitize_callback' => array($this, 'sanitizeInput')
 
 
 
 
63
  ),
64
+ ),
65
+ 'permission_callback' => static function () {
66
+ return true;
67
+ }
68
+ );
69
+
70
+ register_rest_route(
71
+ $this->namespace . $this->version,
72
+ $base,
73
+ $args
74
  );
75
  }
76
 
77
  /**
78
  *
79
+ * Returns Multi Set
80
  * must be public
81
  *
82
  * @param WP_REST_Request $request
83
  *
84
  * @return WP_Error|WP_REST_Response
85
  */
86
+ public function multiSet ($request) {
87
  /*
88
  * Get cleaned params
89
  */
124
  return $response;
125
  }
126
 
127
+ /**
128
+ * This function will register base yasr-multiset
129
+ * @author Dario Curvino <@dudo>
130
+ * @since 2.5.2
131
+ */
132
+ public function rankingEndpoint () {
133
+ /*
134
+ * Param for this route must be
135
+ *
136
+ * source can be:
137
+ * overall_rating
138
+ * visitor_votes
139
+ *
140
+ * YOURSITE/wp-json/yet-another-stars-rating/v1/yasr-rankings/?source
141
+ *
142
+ */
143
+ $base = 'yasr-rankings';
144
+
145
+ $args = array(
146
+ 'source' => array(
147
+ 'required' => true,
148
+ 'sanitize_callback' => array($this, 'sanitizeInput')
149
+ ),
150
+ 'show' => array(
151
+ 'required' => false,
152
+ 'sanitize_callback' => array($this, 'sanitizeInput')
153
+ ),
154
+ );
155
+
156
+ //This hooks will adds params to query
157
+ $args = apply_filters('yasr_rest_rankings_args', $args);
158
+
159
+ $options = array(
160
+ 'methods' => WP_REST_Server::READABLE,
161
+ 'callback' => array($this, 'ranking'),
162
+ 'args' => $args,
163
+ 'permission_callback' => static function () {
164
+ return true;
165
+ }
166
+ );
167
+
168
+ register_rest_route(
169
+ $this->namespace . $this->version,
170
+ $base,
171
+ $options
172
+ );
173
+ }
174
+
175
+ /**
176
+ * @author Dario Curvino <@dudo>
177
+ * @since 2.5.2
178
+ *
179
+ * @param $request
180
+ *
181
+ * @return WP_Error|WP_REST_Response
182
+ */
183
+ public function ranking($request){
184
+ /*
185
+ * Get cleaned params
186
+ */
187
+ $source = $request['source'];
188
+ $sql_params = false;
189
+
190
+ $sql_params = apply_filters('yasr_rest_filter_ranking_request', $sql_params, $request);
191
+
192
+ $data_to_return = array(
193
+ 'source' => $source
194
+ );
195
+
196
+ $no_data = false;
197
+
198
+ if($source === 'overall_rating') {
199
+ $overall_data = YasrRankingData::rankingOverallGetResults($sql_params);
200
+ if($overall_data === false){
201
+ $no_data = true;
202
+ }
203
+ else {
204
+ $data_to_return['data_overall'] = YasrRankings::rankingData($overall_data);
205
+ }
206
+ }
207
+
208
+ if($source === 'visitor_votes') {
209
+ $ranking = ($request['show'] === 'highest') ? $request['show'] : 'most';
210
+ $data_to_return['show'] = $ranking;
211
+
212
+ $vv_data = YasrRankingData::rankingVVGetResults($sql_params, $ranking);
213
+ if($vv_data === false){
214
+ $no_data = true;
215
+ }
216
+ else {
217
+ $data_to_return['data_vv'] = YasrRankings::rankingData($vv_data);
218
+ }
219
+ }
220
+
221
+
222
+ if ($no_data === true) {
223
+ return new WP_Error(
224
+ 'no_overall_data',
225
+ __('No posts with overall ratings found.', 'yet-another-stars-rating'),
226
+ 400
227
+ );
228
+ }
229
+
230
+ $response = new WP_REST_Response($data_to_return);
231
+ $response->set_status(200);
232
+
233
+ return $response;
234
+ }
235
+
236
+
237
  /**
238
  * Sanitizie input, must be public
239
  *
244
  * @return int|void|WP_Error
245
  */
246
  public function sanitizeInput ($param, $request, $key) {
 
 
 
247
 
248
  if($key === 'post_id') {
249
  $post_id = (int)$param;
271
  return $post_id;
272
  }
273
 
274
+ if($key === 'set_id') {
275
+ return (int)$param;
276
+ }
277
+
278
  if($key === 'visitor') {
279
  return (int)$param;
280
  }
281
+
282
+ if($key === 'source') {
283
+ if($param === 'overall_rating' || $param === 'visitor_votes') {
284
+ return trim($param);
285
+ }
286
+ }
287
+
288
+ if($key === 'show') {
289
+ if($param === 'highest') {
290
+ return $param;
291
+ }
292
+ return 'most';
293
+ }
294
+
295
+ $param = apply_filters('yasr_rest_sanitize', $key, $param);
296
+
297
+ return $param;
298
+
299
  }
300
  }
includes/rest/classes/YasrCustomFields.php CHANGED
@@ -127,7 +127,7 @@ class YasrCustomFields extends WP_REST_Controller {
127
  $post_types,
128
  'yasr_all_itemtypes',
129
  array(
130
- 'get_callback' => function() {return json_decode( YASR_SUPPORTED_SCHEMA_TYPES, true ); },
131
  'update_callback' => null,
132
  'schema' => $yasr_itemtype_schema
133
  )
127
  $post_types,
128
  'yasr_all_itemtypes',
129
  array(
130
+ 'get_callback' => static function() {return json_decode(YASR_SUPPORTED_SCHEMA_TYPES, true); },
131
  'update_callback' => null,
132
  'schema' => $yasr_itemtype_schema
133
  )
includes/shortcodes/classes/YasrOverallRating.php CHANGED
@@ -130,7 +130,7 @@ class YasrOverallRating extends YasrShortcode {
130
  *
131
  */
132
  protected function customTextBefore() {
133
- if (YASR_TEXT_BEFORE_STARS === 1 && YASR_TEXT_BEFORE_OVERALL !== '') {
134
  //Get overall Rating
135
  $this->overall_rating = YasrDatabaseRatings::getOverallRating();
136
 
130
  *
131
  */
132
  protected function customTextBefore() {
133
+ if (YASR_STARS_CUSTOM_TEXT === 1 && YASR_TEXT_BEFORE_OVERALL !== '') {
134
  //Get overall Rating
135
  $this->overall_rating = YasrDatabaseRatings::getOverallRating();
136
 
includes/shortcodes/classes/YasrRankings.php CHANGED
@@ -32,56 +32,48 @@ class YasrRankings extends YasrShortcode {
32
  protected $vv_highest_rated_table;
33
  protected $vv_most_rated_table;
34
 
35
- /*
36
- *
37
  * */
38
  public function returnHighestRatedOverall () {
39
  $this->shortcode_html = '<!-- Yasr Most Or Highest Rated Shortcode-->';
40
-
41
- global $wpdb;
42
-
43
- $this->query_highest_rated_overall = $wpdb->get_results("
44
- SELECT pm.meta_value AS overall_rating,
45
- pm.post_id AS post_id
46
- FROM $wpdb->postmeta AS pm,
47
- $wpdb->posts AS p
48
- WHERE pm.post_id = p.ID
49
- AND p.post_status = 'publish'
50
- AND pm.meta_key = 'yasr_overall_rating'
51
- ORDER BY pm.meta_value DESC,
52
- pm.post_id
53
- LIMIT 10"
54
- );
55
-
56
- $this->loopHighestRatedOverall();
57
-
58
  $this->shortcode_html .= '<!--End Yasr Top 10 highest Rated Shortcode-->';
59
- return $this->shortcode_html;
60
 
 
61
  }
62
 
63
- protected function loopHighestRatedOverall($text_position=false, $text=false) {
 
 
 
 
 
 
64
  if ($this->query_highest_rated_overall) {
 
65
  $this->shortcode_html .= "<table class='yasr-table-chart'>";
66
 
67
- foreach ($this->query_highest_rated_overall as $result) {
68
- $post_title = wp_strip_all_tags(get_the_title($result->post_id));
69
- $link = get_permalink($result->post_id); //Get permalink from post id
70
  $yasr_top_ten_html_id = 'yasr-highest_rated-' . str_shuffle(uniqid());
71
 
72
  $this->returnTableRows(
73
- $result->post_id,
74
- $result->overall_rating,
75
  null,
76
- $post_title,
77
- $link, $yasr_top_ten_html_id);
78
-
 
79
 
80
  } //End foreach
81
  $this->shortcode_html .= "</table>";
82
  }
83
  else {
84
- _e("You don't have any votes stored", 'yet-another-stars-rating');
85
  }
86
 
87
  }
@@ -96,40 +88,8 @@ class YasrRankings extends YasrShortcode {
96
  public function vvReturnMostHighestRatedPost() {
97
  $this->shortcode_html = '<!-- Yasr Most Or Highest Rated Shortcode-->';
98
 
99
- global $wpdb;
100
-
101
- $this->query_result_most_rated_visitor = $wpdb->get_results(
102
- "SELECT post_id,
103
- COUNT(post_id) AS number_of_votes,
104
- SUM(vote) AS sum_votes
105
- FROM " . YASR_LOG_TABLE . ",
106
- $wpdb->posts AS p
107
- WHERE post_id = p.ID
108
- AND p.post_status = 'publish'
109
- GROUP BY post_id
110
- HAVING number_of_votes > 1
111
- ORDER BY number_of_votes DESC,
112
- post_id DESC
113
- LIMIT 10"
114
- );
115
-
116
- //count run twice but access data only once: tested with query monitor and asked
117
- //here http://stackoverflow.com/questions/39201235/does-count-run-twice/39201492
118
- $this->query_result_highest_rated_visitor = $wpdb->get_results(
119
- "SELECT post_id,
120
- COUNT(post_id) AS number_of_votes,
121
- (SUM(vote) / COUNT(post_id)) AS result
122
- FROM " . YASR_LOG_TABLE . " ,
123
- $wpdb->posts AS p
124
- WHERE post_id = p.ID
125
- AND p.post_status = 'publish'
126
- GROUP BY post_id
127
- HAVING COUNT(post_id) >= 2
128
- ORDER BY result DESC,
129
- number_of_votes DESC
130
- LIMIT 10"
131
- );
132
-
133
 
134
  $this->vv_most_rated_table = "<table class='yasr-table-chart' id='yasr-most-rated-posts'>
135
  <tr class='yasr-visitor-votes-title'>
@@ -162,8 +122,6 @@ class YasrRankings extends YasrShortcode {
162
  </th>
163
  </tr>";
164
 
165
-
166
-
167
  $this->vvMostRated();
168
  $this->vvHighestRated();
169
 
@@ -178,24 +136,20 @@ class YasrRankings extends YasrShortcode {
178
  */
179
  protected function vvMostRated() {
180
  if ($this->query_result_most_rated_visitor) {
181
-
182
  $this->shortcode_html .= $this->vv_most_rated_table;
 
183
 
184
- foreach ($this->query_result_most_rated_visitor as $result) {
185
- $rating = round($result->sum_votes / $result->number_of_votes, 1);
186
- $post_title = wp_strip_all_tags(get_the_title($result->post_id));
187
- $link = get_permalink($result->post_id); //Get permalink from post id
188
  $yasr_top_ten_html_id = 'yasr-10-most-rated-' . str_shuffle(uniqid());
189
-
190
  //print the rows
191
- $this->returnTableRows($result->post_id,
192
- $rating,
193
- $result->number_of_votes,
194
- $post_title,
195
- $link,
 
196
  $yasr_top_ten_html_id
197
  );
198
-
199
  } //End foreach
200
  $this->shortcode_html .= "</table>" ;
201
 
@@ -211,24 +165,20 @@ class YasrRankings extends YasrShortcode {
211
  */
212
  protected function vvHighestRated () {
213
  if ($this->query_result_highest_rated_visitor) {
214
-
215
  $this->shortcode_html .= $this->vv_highest_rated_table;
 
216
 
217
- foreach ($this->query_result_highest_rated_visitor as $result) {
218
- $rating = round($result->result, 1);
219
- $post_title = wp_strip_all_tags(get_the_title($result->post_id));
220
- $link = get_permalink($result->post_id); //Get permalink from post id
221
  $yasr_top_ten_html_id = 'yasr-10-highest-rater-' . str_shuffle(uniqid());
222
-
223
  //print the rows
224
- $this->returnTableRows($result->post_id,
225
- $rating,
226
- $result->number_of_votes,
227
- $post_title,
228
- $link,
 
229
  $yasr_top_ten_html_id
230
  );
231
-
232
  } //End foreach
233
 
234
  $this->shortcode_html .= "</table>";
@@ -301,4 +251,35 @@ class YasrRankings extends YasrShortcode {
301
  }
302
  } //end function returnTableRows
303
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
304
  }
32
  protected $vv_highest_rated_table;
33
  protected $vv_most_rated_table;
34
 
35
+ /**
36
+ * Returns the shortcode for yasr_top_ten_highest_rated
37
  * */
38
  public function returnHighestRatedOverall () {
39
  $this->shortcode_html = '<!-- Yasr Most Or Highest Rated Shortcode-->';
40
+ $this->query_highest_rated_overall = YasrRankingData::rankingOverallGetResults();
41
+ $this->returnTableOverall();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
42
  $this->shortcode_html .= '<!--End Yasr Top 10 highest Rated Shortcode-->';
 
43
 
44
+ return $this->shortcode_html;
45
  }
46
 
47
+ /**
48
+ * @author Dario Curvino <@dudo>
49
+ *
50
+ * @param false $text_position
51
+ * @param false $text
52
+ */
53
+ protected function returnTableOverall($text_position=false, $text=false) {
54
  if ($this->query_highest_rated_overall) {
55
+
56
  $this->shortcode_html .= "<table class='yasr-table-chart'>";
57
 
58
+ $array_with_title = self::rankingData($this->query_highest_rated_overall);
59
+
60
+ foreach ($array_with_title as $result) {
61
  $yasr_top_ten_html_id = 'yasr-highest_rated-' . str_shuffle(uniqid());
62
 
63
  $this->returnTableRows(
64
+ $result['post_id'],
65
+ $result['rating'],
66
  null,
67
+ $result['post_title'],
68
+ $result['link'],
69
+ $yasr_top_ten_html_id
70
+ );
71
 
72
  } //End foreach
73
  $this->shortcode_html .= "</table>";
74
  }
75
  else {
76
+ _e("No data found", 'yet-another-stars-rating');
77
  }
78
 
79
  }
88
  public function vvReturnMostHighestRatedPost() {
89
  $this->shortcode_html = '<!-- Yasr Most Or Highest Rated Shortcode-->';
90
 
91
+ $this->query_result_most_rated_visitor = YasrRankingData::rankingVVGetResults(false, 'most');
92
+ $this->query_result_highest_rated_visitor = YasrRankingData::rankingVVGetResults(false, 'highest');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
93
 
94
  $this->vv_most_rated_table = "<table class='yasr-table-chart' id='yasr-most-rated-posts'>
95
  <tr class='yasr-visitor-votes-title'>
122
  </th>
123
  </tr>";
124
 
 
 
125
  $this->vvMostRated();
126
  $this->vvHighestRated();
127
 
136
  */
137
  protected function vvMostRated() {
138
  if ($this->query_result_most_rated_visitor) {
 
139
  $this->shortcode_html .= $this->vv_most_rated_table;
140
+ $array_with_title = self::rankingData($this->query_result_most_rated_visitor);
141
 
142
+ foreach ($array_with_title as $result) {
 
 
 
143
  $yasr_top_ten_html_id = 'yasr-10-most-rated-' . str_shuffle(uniqid());
 
144
  //print the rows
145
+ $this->returnTableRows(
146
+ $result['post_id'],
147
+ $result['rating'],
148
+ $result['number_of_votes'],
149
+ $result['post_title'],
150
+ $result['link'],
151
  $yasr_top_ten_html_id
152
  );
 
153
  } //End foreach
154
  $this->shortcode_html .= "</table>" ;
155
 
165
  */
166
  protected function vvHighestRated () {
167
  if ($this->query_result_highest_rated_visitor) {
 
168
  $this->shortcode_html .= $this->vv_highest_rated_table;
169
+ $array_with_title = self::rankingData($this->query_result_highest_rated_visitor);
170
 
171
+ foreach ($array_with_title as $result) {
 
 
 
172
  $yasr_top_ten_html_id = 'yasr-10-highest-rater-' . str_shuffle(uniqid());
 
173
  //print the rows
174
+ $this->returnTableRows(
175
+ $result['post_id'],
176
+ $result['rating'],
177
+ $result['number_of_votes'],
178
+ $result['post_title'],
179
+ $result['link'],
180
  $yasr_top_ten_html_id
181
  );
 
182
  } //End foreach
183
 
184
  $this->shortcode_html .= "</table>";
251
  }
252
  } //end function returnTableRows
253
 
254
+ /**
255
+ * Returns an array with post titles and links
256
+ *
257
+ * @author Dario Curvino <@dudo>
258
+ * @since 2.5.2
259
+ *
260
+ * @param $query_result array to loop; MUST have:
261
+ * post_id
262
+ * rating
263
+ * (optional) number_of_votes
264
+ *
265
+ * @return array
266
+ */
267
+ public static function rankingData($query_result) {
268
+ $data_array = array();
269
+
270
+ $i=0;
271
+ foreach ($query_result as $result) {
272
+ $data_array[$i]['post_id'] = (int)$result->post_id;
273
+ $data_array[$i]['rating'] = round($result->rating,1);
274
+ if(isset($result->number_of_votes)){
275
+ $data_array[$i]['number_of_votes'] = (int)$result->number_of_votes;
276
+ }
277
+ $data_array[$i]['post_title'] = wp_strip_all_tags(get_the_title($result->post_id));
278
+ $data_array[$i]['link'] = get_permalink($result->post_id); //Get permalink from post id
279
+ $i++;
280
+ } //End foreach
281
+
282
+ return $data_array;
283
+ }
284
+
285
  }
includes/shortcodes/classes/YasrVisitorMultiSet.php CHANGED
@@ -104,6 +104,7 @@ class YasrVisitorMultiSet extends YasrMultiSet {
104
  }
105
 
106
  public function checkCookie() {
 
107
  $yasr_cookiename = apply_filters('yasr_mv_cookie', 'yasr_multi_visitor_cookie');
108
 
109
  //Check cookie and if voting is allowed only to logged in users
104
  }
105
 
106
  public function checkCookie() {
107
+ //custommize cookie name for yasr_multi_visitor_cookie
108
  $yasr_cookiename = apply_filters('yasr_mv_cookie', 'yasr_multi_visitor_cookie');
109
 
110
  //Check cookie and if voting is allowed only to logged in users
includes/shortcodes/classes/YasrVisitorVotes.php CHANGED
@@ -106,7 +106,7 @@ class YasrVisitorVotes extends YasrShortcode {
106
  } else {
107
  $this->readonly = 'true';
108
  }
109
-
110
  $this->textBeforeAfterStars($number_of_votes, $average_rating);
111
 
112
  $this->shortcode_html .= "<div id='$htmlid'
@@ -198,7 +198,7 @@ class YasrVisitorVotes extends YasrShortcode {
198
  //If user has already rated
199
  if ($vote_if_user_already_rated) {
200
  $span_bottom_line_content = "<span class='yasr-already-voted-text'>";
201
- if (YASR_TEXT_BEFORE_STARS === 1 && YASR_CUSTOM_TEXT_USER_VOTED !== '') {
202
  $span_bottom_line_content .= YASR_CUSTOM_TEXT_USER_VOTED;
203
  } else {
204
  $span_bottom_line_content .=
@@ -210,7 +210,7 @@ class YasrVisitorVotes extends YasrShortcode {
210
 
211
  elseif ($stars_enabled === 'false_already_voted') {
212
  $span_bottom_line_content = "<span class='yasr-already-voted-text'>";
213
- if (YASR_TEXT_BEFORE_STARS === 1 && YASR_CUSTOM_TEXT_USER_VOTED !== '') {
214
  $span_bottom_line_content .= YASR_CUSTOM_TEXT_USER_VOTED;
215
  } else {
216
  $span_bottom_line_content .=
@@ -232,7 +232,7 @@ class YasrVisitorVotes extends YasrShortcode {
232
  }
233
 
234
  if($span_bottom_line_content !== false) {
235
- $span_bottom_line = "<span class='yasr-small-block-bold'>";
236
  $span_bottom_line .= $span_bottom_line_content;
237
  $span_bottom_line .= '</span>';
238
  }
@@ -269,9 +269,12 @@ class YasrVisitorVotes extends YasrShortcode {
269
  $this->number_of_votes_container = '<span id="yasr-vv-votes-number-container-'. $this->unique_id .'">';
270
  $this->average_rating_container = '<span id="yasr-vv-average-container-'. $this->unique_id .'">';
271
 
272
- $this->textBeforeStars($number_of_votes, $average_rating);
273
- $this->textAfterStars($number_of_votes, $average_rating);
 
 
274
 
 
275
 
276
  $this->span_text_after_stars .= '</span>';
277
 
@@ -289,28 +292,25 @@ class YasrVisitorVotes extends YasrShortcode {
289
  */
290
  protected function textBeforeStars($number_of_votes, $average_rating) {
291
  //default value
292
- $shortcode_html = false;
293
 
294
- if (YASR_TEXT_BEFORE_STARS === 1 && YASR_TEXT_BEFORE_VISITOR_RATING !== '') {
295
- $text_before_star = str_replace(
296
- array(
297
- '%total_count%',
298
- '%average%'
299
- ),
300
- array(
301
- $this->number_of_votes_container . $number_of_votes . '</span>',
302
- $this->average_rating_container . $average_rating . '</span>'
303
- ),
304
- YASR_TEXT_BEFORE_VISITOR_RATING
305
- );
306
 
307
- $class_text_before = 'yasr-custom-text-vv-before yasr-custom-text-vv-before-'.$this->post_id;
308
 
309
- $shortcode_html = '<div class="'.$class_text_before.'">'
310
- . $text_before_star .
311
- '</div>';
312
 
313
- }
314
 
315
  //if filters doesn't exists, put $shortcode_html inside $this->shortcode_html
316
  $this->shortcode_html .= apply_filters('yasr_vv_txt_before', $shortcode_html);
@@ -340,7 +340,7 @@ class YasrVisitorVotes extends YasrShortcode {
340
  . '</span>'
341
  . '/5]';
342
 
343
- if (YASR_TEXT_BEFORE_STARS === 1 && YASR_TEXT_AFTER_VISITOR_RATING !== '') {
344
  $text_after_star = str_replace(
345
  array(
346
  '%total_count%',
@@ -356,6 +356,7 @@ class YasrVisitorVotes extends YasrShortcode {
356
  $span_text_after_stars = $text_after_star;
357
  }
358
 
 
359
  $this->span_text_after_stars .= apply_filters('yasr_vv_txt_after', $span_text_after_stars);
360
  }
361
 
@@ -367,42 +368,38 @@ class YasrVisitorVotes extends YasrShortcode {
367
  *
368
  * @return string
369
  */
370
- protected function visitorStats () {
371
- if (YASR_VISITORS_STATS === 'yes') {
372
- global $yasr_plugin_imported;
373
 
374
- //default
375
- $span_dashicon = "<span class='dashicons dashicons-chart-bar yasr-dashicons-visitor-stats'
376
- data-postid='$this->post_id' id='yasr-total-average-dashicon-$this->post_id'></span>";
377
 
378
- if (is_array($yasr_plugin_imported)) {
379
- $plugin_import_date = null; //avoid undefined
380
- if (array_key_exists('wppr', $yasr_plugin_imported)) {
381
- $plugin_import_date = $yasr_plugin_imported['wppr']['date'];
382
- }
383
 
384
- if (array_key_exists('kksr', $yasr_plugin_imported)) {
385
- $plugin_import_date = $yasr_plugin_imported['kksr']['date'];
386
- }
387
 
388
- if (array_key_exists('mr', $yasr_plugin_imported)) {
389
- $plugin_import_date = $yasr_plugin_imported['mr']['date'];
390
- }
391
 
392
- //remove hour from date
393
- $plugin_import_date=strtok($plugin_import_date,' ');
394
 
395
- $post_date = get_the_date('Y-m-d', $this->post_id);
 
 
 
 
 
 
396
 
397
- //if one of these plugin has been imported and post is older then import, hide stats
398
- if ($post_date < $plugin_import_date) {
399
- $span_dashicon = "";
400
- }
401
- } //End if $yasr_plugin_imported
402
- } else {
403
- //Yasr_visitor_stats are disabled
404
- $span_dashicon = "";
405
- }
406
  return $span_dashicon;
407
  }
408
 
@@ -410,6 +407,8 @@ class YasrVisitorVotes extends YasrShortcode {
410
  * Return Yasr Visitor Votes
411
  *
412
  * @param $cookie_value int|bool
 
 
413
  * @return string
414
  */
415
  protected function returnYasrVisitorVotes ($cookie_value, $post_id) {
@@ -417,7 +416,11 @@ class YasrVisitorVotes extends YasrShortcode {
417
  class='yasr-visitor-votes-after-stars'>";
418
 
419
  $this->shortcode_html .= $span_container_after_stars;
420
- $this->shortcode_html .= $this->visitorStats();
 
 
 
 
421
  $this->shortcode_html .= $this->span_text_after_stars;
422
  if(YASR_ENABLE_AJAX !== 'yes') {
423
  $this->shortcode_html .= self::showTextBelowStars($cookie_value, $post_id);
106
  } else {
107
  $this->readonly = 'true';
108
  }
109
+
110
  $this->textBeforeAfterStars($number_of_votes, $average_rating);
111
 
112
  $this->shortcode_html .= "<div id='$htmlid'
198
  //If user has already rated
199
  if ($vote_if_user_already_rated) {
200
  $span_bottom_line_content = "<span class='yasr-already-voted-text'>";
201
+ if (YASR_STARS_CUSTOM_TEXT === 1 && YASR_CUSTOM_TEXT_USER_VOTED !== '') {
202
  $span_bottom_line_content .= YASR_CUSTOM_TEXT_USER_VOTED;
203
  } else {
204
  $span_bottom_line_content .=
210
 
211
  elseif ($stars_enabled === 'false_already_voted') {
212
  $span_bottom_line_content = "<span class='yasr-already-voted-text'>";
213
+ if (YASR_STARS_CUSTOM_TEXT === 1 && YASR_CUSTOM_TEXT_USER_VOTED !== '') {
214
  $span_bottom_line_content .= YASR_CUSTOM_TEXT_USER_VOTED;
215
  } else {
216
  $span_bottom_line_content .=
232
  }
233
 
234
  if($span_bottom_line_content !== false) {
235
+ $span_bottom_line = "<span class='yasr-small-block-bold'>";
236
  $span_bottom_line .= $span_bottom_line_content;
237
  $span_bottom_line .= '</span>';
238
  }
269
  $this->number_of_votes_container = '<span id="yasr-vv-votes-number-container-'. $this->unique_id .'">';
270
  $this->average_rating_container = '<span id="yasr-vv-average-container-'. $this->unique_id .'">';
271
 
272
+ //this should run only if settings is enabled
273
+ if (YASR_STARS_CUSTOM_TEXT === 1 && YASR_TEXT_BEFORE_VISITOR_RATING !== '') {
274
+ $this->textBeforeStars($number_of_votes, $average_rating);
275
+ }
276
 
277
+ $this->textAfterStars($number_of_votes, $average_rating);
278
 
279
  $this->span_text_after_stars .= '</span>';
280
 
292
  */
293
  protected function textBeforeStars($number_of_votes, $average_rating) {
294
  //default value
 
295
 
296
+ $text_before_star = str_replace(
297
+ array(
298
+ '%total_count%',
299
+ '%average%'
300
+ ),
301
+ array(
302
+ $this->number_of_votes_container . $number_of_votes . '</span>',
303
+ $this->average_rating_container . $average_rating . '</span>'
304
+ ),
305
+ YASR_TEXT_BEFORE_VISITOR_RATING
306
+ );
 
307
 
308
+ $class_text_before = 'yasr-custom-text-vv-before yasr-custom-text-vv-before-'.$this->post_id;
309
 
310
+ $shortcode_html = '<div class="'.$class_text_before.'">'
311
+ . $text_before_star .
312
+ '</div>';
313
 
 
314
 
315
  //if filters doesn't exists, put $shortcode_html inside $this->shortcode_html
316
  $this->shortcode_html .= apply_filters('yasr_vv_txt_before', $shortcode_html);
340
  . '</span>'
341
  . '/5]';
342
 
343
+ if (YASR_STARS_CUSTOM_TEXT === 1 && YASR_TEXT_AFTER_VISITOR_RATING !== '') {
344
  $text_after_star = str_replace(
345
  array(
346
  '%total_count%',
356
  $span_text_after_stars = $text_after_star;
357
  }
358
 
359
+ //use this to costumize text after stars
360
  $this->span_text_after_stars .= apply_filters('yasr_vv_txt_after', $span_text_after_stars);
361
  }
362
 
368
  *
369
  * @return string
370
  */
371
+ public function visitorStats () {
372
+ global $yasr_plugin_imported;
 
373
 
374
+ //default
375
+ $span_dashicon = "<span class='dashicons dashicons-chart-bar yasr-dashicons-visitor-stats'
376
+ data-postid='$this->post_id' id='yasr-total-average-dashicon-$this->post_id'></span>";
377
 
378
+ if (is_array($yasr_plugin_imported)) {
379
+ $plugin_import_date = null; //avoid undefined
380
+ if (array_key_exists('wppr', $yasr_plugin_imported)) {
381
+ $plugin_import_date = $yasr_plugin_imported['wppr']['date'];
382
+ }
383
 
384
+ if (array_key_exists('kksr', $yasr_plugin_imported)) {
385
+ $plugin_import_date = $yasr_plugin_imported['kksr']['date'];
386
+ }
387
 
388
+ if (array_key_exists('mr', $yasr_plugin_imported)) {
389
+ $plugin_import_date = $yasr_plugin_imported['mr']['date'];
390
+ }
391
 
392
+ //remove hour from date
393
+ $plugin_import_date=strtok($plugin_import_date,' ');
394
 
395
+ $post_date = get_the_date('Y-m-d', $this->post_id);
396
+
397
+ //if one of these plugin has been imported and post is older then import, hide stats
398
+ if ($post_date < $plugin_import_date) {
399
+ $span_dashicon = "";
400
+ }
401
+ } //End if $yasr_plugin_imported
402
 
 
 
 
 
 
 
 
 
 
403
  return $span_dashicon;
404
  }
405
 
407
  * Return Yasr Visitor Votes
408
  *
409
  * @param $cookie_value int|bool
410
+ * @param $post_id
411
+ *
412
  * @return string
413
  */
414
  protected function returnYasrVisitorVotes ($cookie_value, $post_id) {
416
  class='yasr-visitor-votes-after-stars'>";
417
 
418
  $this->shortcode_html .= $span_container_after_stars;
419
+
420
+ if (YASR_VISITORS_STATS === 'yes') {
421
+ $this->shortcode_html .= $this->visitorStats();
422
+ }
423
+
424
  $this->shortcode_html .= $this->span_text_after_stars;
425
  if(YASR_ENABLE_AJAX !== 'yes') {
426
  $this->shortcode_html .= self::showTextBelowStars($cookie_value, $post_id);
includes/shortcodes/yasr-shortcode-ajax.php CHANGED
@@ -127,6 +127,7 @@ function yasr_insert_visitor_votes_callback() {
127
  $user_votes_sum = $row_exists['sum_votes'];
128
  $number_of_votes = $row_exists['number_of_votes'];
129
 
 
130
  $cookiename = apply_filters('yasr_vv_cookie', 'yasr_visitor_vote_cookie');
131
 
132
  $data_to_save = array(
@@ -139,7 +140,10 @@ function yasr_insert_visitor_votes_callback() {
139
  $total_rating = ($user_votes_sum / $number_of_votes);
140
  $medium_rating = round($total_rating, 1);
141
 
 
142
  $rating_saved_text = __('Rating Saved', 'yet-another-stars-rating');
 
 
143
  $rating_saved_text = apply_filters('yasr_vv_saved_text', $rating_saved_text);
144
 
145
  $html_to_return = '<span class="yasr-total-average-text"> ['
127
  $user_votes_sum = $row_exists['sum_votes'];
128
  $number_of_votes = $row_exists['number_of_votes'];
129
 
130
+ //customize visitor_votes cookie name
131
  $cookiename = apply_filters('yasr_vv_cookie', 'yasr_visitor_vote_cookie');
132
 
133
  $data_to_save = array(
140
  $total_rating = ($user_votes_sum / $number_of_votes);
141
  $medium_rating = round($total_rating, 1);
142
 
143
+ //Default text when rating is saved
144
  $rating_saved_text = __('Rating Saved', 'yet-another-stars-rating');
145
+
146
+ //Customize it
147
  $rating_saved_text = apply_filters('yasr_vv_saved_text', $rating_saved_text);
148
 
149
  $html_to_return = '<span class="yasr-total-average-text"> ['
includes/yasr-includes-functions.php CHANGED
@@ -196,7 +196,7 @@ function yasr_setcookie($cookiename, $data_to_save) {
196
  $domain = COOKIE_DOMAIN;
197
 
198
  //this is for multisite support
199
- if(defined(DOMAIN_CURRENT_SITE)) {
200
  $domain = DOMAIN_CURRENT_SITE;
201
  }
202
 
196
  $domain = COOKIE_DOMAIN;
197
 
198
  //this is for multisite support
199
+ if(defined('DOMAIN_CURRENT_SITE')) {
200
  $domain = DOMAIN_CURRENT_SITE;
201
  }
202
 
includes/yasr-includes-init.php CHANGED
@@ -116,12 +116,12 @@ if(isset($yasr_stored_options['show_visitor_votes_in_loop'])) {
116
  }
117
 
118
  if(isset($yasr_stored_options['text_before_stars'])) {
119
- define('YASR_TEXT_BEFORE_STARS', (int)$yasr_stored_options['text_before_stars']);
120
  } else {
121
- define('YASR_TEXT_BEFORE_STARS', null);
122
  }
123
 
124
- if (YASR_TEXT_BEFORE_STARS === 1) {
125
  define(
126
  'YASR_TEXT_BEFORE_OVERALL',
127
  htmlspecialchars_decode($yasr_stored_options['text_before_overall'])
116
  }
117
 
118
  if(isset($yasr_stored_options['text_before_stars'])) {
119
+ define('YASR_STARS_CUSTOM_TEXT', (int)$yasr_stored_options['text_before_stars']);
120
  } else {
121
+ define('YASR_STARS_CUSTOM_TEXT', null);
122
  }
123
 
124
+ if (YASR_STARS_CUSTOM_TEXT === 1) {
125
  define(
126
  'YASR_TEXT_BEFORE_OVERALL',
127
  htmlspecialchars_decode($yasr_stored_options['text_before_overall'])
public/classes/YasrPublicFilters.php CHANGED
@@ -12,18 +12,21 @@ if ( ! defined( 'ABSPATH' ) ) {
12
  * Class YasrPublicFilters
13
  */
14
  class YasrPublicFilters {
15
- public static function addFilters() {
 
16
 
17
  // Auto insert overall rating and visitor rating
18
  if (YASR_AUTO_INSERT_ENABLED === 1) {
19
- add_filter('the_content', 'YasrPublicFilters::autoInsert');
20
  }
21
 
22
- add_filter('the_content', 'YasrPublicFilters::addSchema');
23
 
24
  //stars next to the title
25
  if (YASR_STARS_TITLE === 'yes') {
26
- add_filter('the_title', 'YasrPublicFilters::filterTitle');
 
 
27
  }
28
  }
29
 
@@ -50,16 +53,16 @@ class YasrPublicFilters {
50
  $excluded_cpt = apply_filters('yasr_auto_insert_exclude_cpt', $excluded_cpt);
51
 
52
  //Excluded_cpt must be an array
53
- if(is_array($excluded_cpt) && !empty($excluded_cpt)){
54
 
55
  //sanitize
56
- $excluded_cpt = filter_var_array($excluded_cpt,FILTER_SANITIZE_STRING);
57
 
58
  $post_type = get_post_type();
59
 
60
  //if one element in the array is found, return content
61
- foreach($excluded_cpt as $cpt) {
62
- if($cpt === $post_type) {
63
  return $content;
64
  }
65
  }
@@ -73,13 +76,15 @@ class YasrPublicFilters {
73
  $shortcode_align = 'center';
74
  }
75
 
76
- $container_div_overall='<div style="text-align:'.$shortcode_align.'" class="yasr-auto-insert-overall">';
77
- $container_div_visitor='<div style="text-align:'.$shortcode_align.'" class="yasr-auto-insert-visitor">';
78
- $closing_div = '</div>';
79
 
80
  $auto_insert_shortcode = null; //To avoid undefined variable notice outside the loop (if (is_singular) )
81
- $overall_rating_code = $container_div_overall. '[yasr_overall_rating size="' . YASR_AUTO_INSERT_SIZE . '"]' . $closing_div;
82
- $visitor_votes_code = $container_div_visitor. '[yasr_visitor_votes size="' . YASR_AUTO_INSERT_SIZE . '"]' . $closing_div;
 
 
83
 
84
  //avoid undefined
85
  $content_and_stars = false;
@@ -94,7 +99,8 @@ class YasrPublicFilters {
94
  $content_and_stars = $content . $overall_rating_code;
95
  break;
96
  } //End Switch
97
- } elseif (YASR_AUTO_INSERT_WHAT === 'visitor_rating') {
 
98
  switch (YASR_AUTO_INSERT_WHERE) {
99
  case 'top':
100
  $content_and_stars = $visitor_votes_code . $content;
@@ -104,7 +110,8 @@ class YasrPublicFilters {
104
  $content_and_stars = $content . $visitor_votes_code;
105
  break;
106
  } //End Switch
107
- } elseif (YASR_AUTO_INSERT_WHAT === 'both') {
 
108
  switch (YASR_AUTO_INSERT_WHERE) {
109
  case 'top':
110
  $content_and_stars = $overall_rating_code . $visitor_votes_code . $content;
@@ -160,21 +167,22 @@ class YasrPublicFilters {
160
  return $content;
161
  }
162
 
 
163
  $overall_rating = YasrDatabaseRatings::getOverallRating();
164
- $visitor_votes = YasrDatabaseRatings::getVisitorVotes(false);
165
 
166
  if (!$overall_rating && !$visitor_votes['number_of_votes'] && !$visitor_votes['sum_votes']) {
167
  return $content;
168
  }
169
 
170
  //can't be between 0.1 and 1
171
- if($overall_rating > 0 && $overall_rating < 1) {
172
  $overall_rating = 1;
173
  }
174
 
175
- $is_post_a_review = get_post_meta(get_the_ID(), 'yasr_post_is_review', true);
176
 
177
- $script_type = '<script type="application/ld+json">';
178
  $end_script_type = '</script>';
179
 
180
  $review_choosen = yasr_get_itemType();
@@ -197,9 +205,9 @@ class YasrPublicFilters {
197
  $author = get_the_author();
198
 
199
  //use this hook to change the itemType name
200
- $review_name = wp_strip_all_tags(apply_filters('yasr_filter_schema_title', get_the_title()));
201
 
202
- $date = get_the_date('c');
203
  $date_modified = get_the_modified_date('c');
204
 
205
  $post_image_url = ''; //avoid undefined
@@ -213,7 +221,8 @@ class YasrPublicFilters {
213
 
214
  $post_image_size = @getimagesize($logo_image_url_absolute); //the @ should be useless, just to be safe
215
  $logo_image_size = @getimagesize($logo_image_url_absolute); //the @ should be useless, just to be safe
216
- } else {
 
217
  $post_image_size[0] = 0;
218
  $post_image_size[1] = 0;
219
  $logo_image_size[0] = 0;
@@ -222,18 +231,20 @@ class YasrPublicFilters {
222
 
223
  //if exists featuread image get the url and overwrite the variable
224
  if (has_post_thumbnail()) {
225
- $post_image_url = wp_get_attachment_url(get_post_thumbnail_id());
226
  $post_image_url_absolute = $_SERVER['DOCUMENT_ROOT'] . parse_url($post_image_url, PHP_URL_PATH);
227
- $post_image_size = @getimagesize($post_image_url_absolute); //the @ should be useless, just to be safe
 
 
228
  }
229
 
230
  $rich_snippet['@type'] = $review_choosen;
231
  $rich_snippet['name'] = $review_name;
232
- $cleaned_content = wp_strip_all_tags(strip_shortcodes($content));
233
 
234
- $rich_snippet['description'] = wp_trim_words( $cleaned_content, 55, '...' );
235
 
236
- $rich_snippet['image'] = array(
237
  '@type' => 'ImageObject',
238
  'url' => $post_image_url,
239
  'width' => $post_image_size[0],
@@ -241,15 +252,11 @@ class YasrPublicFilters {
241
  );
242
 
243
  $publisher_image_index = 'logo';
244
- if(YASR_PUBLISHER_TYPE === 'Person') {
245
  $publisher_image_index = 'image';
246
  }
247
 
248
- if ($review_choosen === 'Place') {
249
- $rich_snippet['@type'] = 'LocalBusiness';
250
- }
251
-
252
- elseif ($review_choosen === 'Other' || $review_choosen === 'BlogPosting') {
253
  $rich_snippet['datePublished'] = $date;
254
  $rich_snippet['headline'] = $review_name;
255
  $rich_snippet['mainEntityOfPage'] = array(
@@ -262,7 +269,8 @@ class YasrPublicFilters {
262
  );
263
  $rich_snippet['publisher'] = array(
264
  '@type' => 'Organization',
265
- 'name' => wp_strip_all_tags(YASR_PUBLISHER_NAME), //already sanitized in the settings, just to be safe
 
266
  'logo' => array(
267
  '@type' => 'ImageObject',
268
  'url' => $logo_image_url,
@@ -282,8 +290,8 @@ class YasrPublicFilters {
282
 
283
  }
284
 
285
- //Do not add rating if blogposting
286
- if ($review_choosen !== 'Other' && $review_choosen !== 'BlogPosting') {
287
  if ($overall_rating) {
288
  $rich_snippet['Review'] = array(
289
  '@type' => 'Review',
@@ -293,9 +301,9 @@ class YasrPublicFilters {
293
  '@type' => 'Person',
294
  'name' => $author
295
  ),
296
- 'datePublished' => $date,
297
- 'dateModified' => $date_modified,
298
- 'reviewRating' => array(
299
  '@type' => 'Rating',
300
  'ratingValue' => $overall_rating,
301
  'bestRating' => 5,
@@ -306,7 +314,7 @@ class YasrPublicFilters {
306
 
307
  //if both are included, google will index AggregateRating instead of Review.
308
  //So, is post is selected as review, exclude AggregateRating
309
- if($is_post_a_review !== 'yes') {
310
  if ($visitor_votes) {
311
  if ($visitor_votes['sum_votes'] !== 0 && $visitor_votes['number_of_votes'] !== 0) {
312
  $average_rating = $visitor_votes['sum_votes'] / $visitor_votes['number_of_votes'];
@@ -324,10 +332,11 @@ class YasrPublicFilters {
324
  }
325
  }
326
 
327
- if(isset($rich_snippet['Review']) || $review_choosen === 'Other' || $review_choosen === 'BlogPosting') {
328
  $publisher = array(
329
  '@type' => YASR_PUBLISHER_TYPE,
330
- 'name' => wp_strip_all_tags( YASR_PUBLISHER_NAME ),//already sanitized in the settings, just to be safe
 
331
  $publisher_image_index => array(
332
  '@type' => 'ImageObject',
333
  'url' => $logo_image_url,
@@ -337,9 +346,10 @@ class YasrPublicFilters {
337
  );
338
 
339
  /** @noinspection NotOptimalIfConditionsInspection */
340
- if(isset($rich_snippet['Review'])) {
341
  $rich_snippet['Review']['publisher'] = $publisher;
342
- } else {
 
343
  $rich_snippet['publisher'] = $publisher;
344
  }
345
  }
@@ -362,19 +372,18 @@ class YasrPublicFilters {
362
 
363
  /**
364
  * @since 2.4.3
365
- *
366
  * Filter the_title to show stars next it
367
  *
368
  * @param $title
369
  *
370
  * @return string
371
  */
372
- public static function filterTitle ($title) {
373
 
374
- if(in_the_loop()) {
375
  $post_id = get_the_ID();
376
 
377
- if(YASR_STARS_TITLE_EXCLUDE_PAGES === 'yes' && get_post_type($post_id) === 'page') {
378
  return $title;
379
  }
380
 
@@ -385,9 +394,10 @@ class YasrPublicFilters {
385
  $stored_votes = YasrDatabaseRatings::getVisitorVotes();
386
 
387
  $number_of_votes = $stored_votes['number_of_votes'];
388
- if ( $number_of_votes > 0 ) {
389
  $average_rating = $stored_votes['sum_votes'] / $number_of_votes;
390
- } else {
 
391
  $average_rating = 0;
392
  }
393
 
@@ -409,25 +419,27 @@ class YasrPublicFilters {
409
 
410
  $vv_widget .= "<span class='yasr-stars-title-average'>$average_rating ($number_of_votes)</span>";
411
 
412
- //Use this hook to customize widget overall
413
  //if doesn't exists a filter for yasr_title_vv_widget, put $vv_widget into $content_after_title
414
  $content_after_title = apply_filters('yasr_title_vv_widget', $vv_widget, $stored_votes);
415
  }
416
 
417
  if (YASR_STARS_TITLE_WHAT === 'overall_rating') {
418
- $overall_rating = YasrDatabaseRatings::getOverallRating($post_id);
419
 
420
  //first, overall widget contains overall rating
421
  $overall_widget = $overall_rating;
422
 
423
  //only if overall rating > 0
424
- if($overall_rating > 0) {
425
  $overall_rating_obj = new YasrOverallRating(false, false);
426
- $overall_attributes = $overall_rating_obj->returnAttributes(16, $post_id, 'yasr-stars-title', $overall_rating);
 
 
427
 
428
- $overall_widget = "<span class='yasr-stars-title-average'>";
429
- $overall_widget .= $overall_attributes['html_stars'];
430
- $overall_widget .= "</span>";
431
  }
432
 
433
  //Use this hook to customize widget overall
@@ -436,17 +448,17 @@ class YasrPublicFilters {
436
  }
437
 
438
  //if only in archive pages
439
- if ( YASR_STARS_TITLE_WHERE === 'archive' ) {
440
- if ( is_archive() || is_home() ) {
441
  return $title . $content_after_title;
442
  }
443
  } //if only in single posts/pages
444
- elseif ( YASR_STARS_TITLE_WHERE === 'single' ) {
445
- if ( is_singular() ) {
446
  return $title . $content_after_title;
447
  }
448
  } //always return in both
449
- elseif ( YASR_STARS_TITLE_WHERE === 'both' ) {
450
  return $title . $content_after_title;
451
  } //else return just the title (should never happens)
452
  else {
@@ -457,4 +469,23 @@ class YasrPublicFilters {
457
  //if not in the loop
458
  return $title;
459
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
460
  }
12
  * Class YasrPublicFilters
13
  */
14
  class YasrPublicFilters {
15
+
16
+ public function addFilters() {
17
 
18
  // Auto insert overall rating and visitor rating
19
  if (YASR_AUTO_INSERT_ENABLED === 1) {
20
+ add_filter('the_content', array($this, 'autoInsert'));
21
  }
22
 
23
+ add_filter('the_content', array($this, 'addSchema'));
24
 
25
  //stars next to the title
26
  if (YASR_STARS_TITLE === 'yes') {
27
+ add_filter('the_title', array($this, 'filterTitle'));
28
+
29
+ add_filter('yasr_filter_schema_title', array($this, 'removeWidgetFromTitle'));
30
  }
31
  }
32
 
53
  $excluded_cpt = apply_filters('yasr_auto_insert_exclude_cpt', $excluded_cpt);
54
 
55
  //Excluded_cpt must be an array
56
+ if (is_array($excluded_cpt) && !empty($excluded_cpt)) {
57
 
58
  //sanitize
59
+ $excluded_cpt = filter_var_array($excluded_cpt, FILTER_SANITIZE_STRING);
60
 
61
  $post_type = get_post_type();
62
 
63
  //if one element in the array is found, return content
64
+ foreach ($excluded_cpt as $cpt) {
65
+ if ($cpt === $post_type) {
66
  return $content;
67
  }
68
  }
76
  $shortcode_align = 'center';
77
  }
78
 
79
+ $container_div_overall = '<div style="text-align:' . $shortcode_align . '" class="yasr-auto-insert-overall">';
80
+ $container_div_visitor = '<div style="text-align:' . $shortcode_align . '" class="yasr-auto-insert-visitor">';
81
+ $closing_div = '</div>';
82
 
83
  $auto_insert_shortcode = null; //To avoid undefined variable notice outside the loop (if (is_singular) )
84
+ $overall_rating_code = $container_div_overall . '[yasr_overall_rating size="' . YASR_AUTO_INSERT_SIZE . '"]'
85
+ . $closing_div;
86
+ $visitor_votes_code = $container_div_visitor . '[yasr_visitor_votes size="' . YASR_AUTO_INSERT_SIZE . '"]'
87
+ . $closing_div;
88
 
89
  //avoid undefined
90
  $content_and_stars = false;
99
  $content_and_stars = $content . $overall_rating_code;
100
  break;
101
  } //End Switch
102
+ }
103
+ elseif (YASR_AUTO_INSERT_WHAT === 'visitor_rating') {
104
  switch (YASR_AUTO_INSERT_WHERE) {
105
  case 'top':
106
  $content_and_stars = $visitor_votes_code . $content;
110
  $content_and_stars = $content . $visitor_votes_code;
111
  break;
112
  } //End Switch
113
+ }
114
+ elseif (YASR_AUTO_INSERT_WHAT === 'both') {
115
  switch (YASR_AUTO_INSERT_WHERE) {
116
  case 'top':
117
  $content_and_stars = $overall_rating_code . $visitor_votes_code . $content;
167
  return $content;
168
  }
169
 
170
+ $post_id = get_the_ID();
171
  $overall_rating = YasrDatabaseRatings::getOverallRating();
172
+ $visitor_votes = YasrDatabaseRatings::getVisitorVotes(false);
173
 
174
  if (!$overall_rating && !$visitor_votes['number_of_votes'] && !$visitor_votes['sum_votes']) {
175
  return $content;
176
  }
177
 
178
  //can't be between 0.1 and 1
179
+ if ($overall_rating > 0 && $overall_rating < 1) {
180
  $overall_rating = 1;
181
  }
182
 
183
+ $is_post_a_review = get_post_meta($post_id, 'yasr_post_is_review', true);
184
 
185
+ $script_type = '<script type="application/ld+json">';
186
  $end_script_type = '</script>';
187
 
188
  $review_choosen = yasr_get_itemType();
205
  $author = get_the_author();
206
 
207
  //use this hook to change the itemType name
208
+ $review_name = wp_strip_all_tags(apply_filters('yasr_filter_schema_title', $post_id));
209
 
210
+ $date = get_the_date('c');
211
  $date_modified = get_the_modified_date('c');
212
 
213
  $post_image_url = ''; //avoid undefined
221
 
222
  $post_image_size = @getimagesize($logo_image_url_absolute); //the @ should be useless, just to be safe
223
  $logo_image_size = @getimagesize($logo_image_url_absolute); //the @ should be useless, just to be safe
224
+ }
225
+ else {
226
  $post_image_size[0] = 0;
227
  $post_image_size[1] = 0;
228
  $logo_image_size[0] = 0;
231
 
232
  //if exists featuread image get the url and overwrite the variable
233
  if (has_post_thumbnail()) {
234
+ $post_image_url = wp_get_attachment_url(get_post_thumbnail_id());
235
  $post_image_url_absolute = $_SERVER['DOCUMENT_ROOT'] . parse_url($post_image_url, PHP_URL_PATH);
236
+ $post_image_size = @getimagesize(
237
+ $post_image_url_absolute
238
+ ); //the @ should be useless, just to be safe
239
  }
240
 
241
  $rich_snippet['@type'] = $review_choosen;
242
  $rich_snippet['name'] = $review_name;
243
+ $cleaned_content = wp_strip_all_tags(strip_shortcodes($content));
244
 
245
+ $rich_snippet['description'] = wp_trim_words($cleaned_content, 55, '...');
246
 
247
+ $rich_snippet['image'] = array(
248
  '@type' => 'ImageObject',
249
  'url' => $post_image_url,
250
  'width' => $post_image_size[0],
252
  );
253
 
254
  $publisher_image_index = 'logo';
255
+ if (YASR_PUBLISHER_TYPE === 'Person') {
256
  $publisher_image_index = 'image';
257
  }
258
 
259
+ elseif ($review_choosen === 'BlogPosting') {
 
 
 
 
260
  $rich_snippet['datePublished'] = $date;
261
  $rich_snippet['headline'] = $review_name;
262
  $rich_snippet['mainEntityOfPage'] = array(
269
  );
270
  $rich_snippet['publisher'] = array(
271
  '@type' => 'Organization',
272
+ 'name' => wp_strip_all_tags(YASR_PUBLISHER_NAME),
273
+ //already sanitized in the settings, just to be safe
274
  'logo' => array(
275
  '@type' => 'ImageObject',
276
  'url' => $logo_image_url,
290
 
291
  }
292
 
293
+ //Add everywhere except for blogPosting
294
+ if ($review_choosen !== 'BlogPosting') {
295
  if ($overall_rating) {
296
  $rich_snippet['Review'] = array(
297
  '@type' => 'Review',
301
  '@type' => 'Person',
302
  'name' => $author
303
  ),
304
+ 'datePublished' => $date,
305
+ 'dateModified' => $date_modified,
306
+ 'reviewRating' => array(
307
  '@type' => 'Rating',
308
  'ratingValue' => $overall_rating,
309
  'bestRating' => 5,
314
 
315
  //if both are included, google will index AggregateRating instead of Review.
316
  //So, is post is selected as review, exclude AggregateRating
317
+ if ($is_post_a_review !== 'yes') {
318
  if ($visitor_votes) {
319
  if ($visitor_votes['sum_votes'] !== 0 && $visitor_votes['number_of_votes'] !== 0) {
320
  $average_rating = $visitor_votes['sum_votes'] / $visitor_votes['number_of_votes'];
332
  }
333
  }
334
 
335
+ if (isset($rich_snippet['Review']) || $review_choosen === 'BlogPosting') {
336
  $publisher = array(
337
  '@type' => YASR_PUBLISHER_TYPE,
338
+ 'name' => wp_strip_all_tags(YASR_PUBLISHER_NAME),
339
+ //already sanitized in the settings, just to be safe
340
  $publisher_image_index => array(
341
  '@type' => 'ImageObject',
342
  'url' => $logo_image_url,
346
  );
347
 
348
  /** @noinspection NotOptimalIfConditionsInspection */
349
+ if (isset($rich_snippet['Review'])) {
350
  $rich_snippet['Review']['publisher'] = $publisher;
351
+ }
352
+ else {
353
  $rich_snippet['publisher'] = $publisher;
354
  }
355
  }
372
 
373
  /**
374
  * @since 2.4.3
 
375
  * Filter the_title to show stars next it
376
  *
377
  * @param $title
378
  *
379
  * @return string
380
  */
381
+ public function filterTitle($title) {
382
 
383
+ if (in_the_loop()) {
384
  $post_id = get_the_ID();
385
 
386
+ if (YASR_STARS_TITLE_EXCLUDE_PAGES === 'yes' && get_post_type($post_id) === 'page') {
387
  return $title;
388
  }
389
 
394
  $stored_votes = YasrDatabaseRatings::getVisitorVotes();
395
 
396
  $number_of_votes = $stored_votes['number_of_votes'];
397
+ if ($number_of_votes > 0) {
398
  $average_rating = $stored_votes['sum_votes'] / $number_of_votes;
399
+ }
400
+ else {
401
  $average_rating = 0;
402
  }
403
 
419
 
420
  $vv_widget .= "<span class='yasr-stars-title-average'>$average_rating ($number_of_votes)</span>";
421
 
422
+ //Use this hook to customize widget
423
  //if doesn't exists a filter for yasr_title_vv_widget, put $vv_widget into $content_after_title
424
  $content_after_title = apply_filters('yasr_title_vv_widget', $vv_widget, $stored_votes);
425
  }
426
 
427
  if (YASR_STARS_TITLE_WHAT === 'overall_rating') {
428
+ $overall_rating = YasrDatabaseRatings::getOverallRating($post_id);
429
 
430
  //first, overall widget contains overall rating
431
  $overall_widget = $overall_rating;
432
 
433
  //only if overall rating > 0
434
+ if ($overall_rating > 0) {
435
  $overall_rating_obj = new YasrOverallRating(false, false);
436
+ $overall_attributes = $overall_rating_obj->returnAttributes(
437
+ 16, $post_id, 'yasr-stars-title', $overall_rating
438
+ );
439
 
440
+ $overall_widget = "<span class='yasr-stars-title-average'>";
441
+ $overall_widget .= $overall_attributes['html_stars'];
442
+ $overall_widget .= "</span>";
443
  }
444
 
445
  //Use this hook to customize widget overall
448
  }
449
 
450
  //if only in archive pages
451
+ if (YASR_STARS_TITLE_WHERE === 'archive') {
452
+ if (is_archive() || is_home()) {
453
  return $title . $content_after_title;
454
  }
455
  } //if only in single posts/pages
456
+ elseif (YASR_STARS_TITLE_WHERE === 'single') {
457
+ if (is_singular()) {
458
  return $title . $content_after_title;
459
  }
460
  } //always return in both
461
+ elseif (YASR_STARS_TITLE_WHERE === 'both') {
462
  return $title . $content_after_title;
463
  } //else return just the title (should never happens)
464
  else {
469
  //if not in the loop
470
  return $title;
471
  }
472
+
473
+
474
+ /**
475
+ * Hooks to yasr_filter_schema_title only if YASR_STARS_TITLE is enabled,
476
+ * and remove the widget from the title, otherwise it will appear in snippets
477
+ *
478
+ * @author Dario Curvino <@dudo>
479
+ * @since 2.5.2
480
+ *
481
+ * @param $post_id
482
+ *
483
+ * @return string
484
+ */
485
+ public function removeWidgetFromTitle($post_id) {
486
+ remove_filter('the_title', array($this, 'filterTitle'));
487
+
488
+ return get_the_title($post_id);
489
+ }
490
+
491
  }
public/yasr-public-init.php CHANGED
@@ -53,8 +53,9 @@ function yasr_autoload_public_classes($class) {
53
  //AutoLoad Yasr Shortcode Classes, only when a object is created
54
  spl_autoload_register('yasr_autoload_public_classes');
55
 
 
 
 
56
  //filter yasr rich snippet
57
  $yasr_additional_rich_fields = new YasrRichSnippetAdditionalFields;
58
  $yasr_additional_rich_fields->addFilters();
59
-
60
- YasrPublicFilters::addFilters();
53
  //AutoLoad Yasr Shortcode Classes, only when a object is created
54
  spl_autoload_register('yasr_autoload_public_classes');
55
 
56
+ $yasr_public_filters = new YasrPublicFilters();
57
+ $yasr_public_filters->addFilters();
58
+
59
  //filter yasr rich snippet
60
  $yasr_additional_rich_fields = new YasrRichSnippetAdditionalFields;
61
  $yasr_additional_rich_fields->addFilters();
 
 
readme.txt CHANGED
@@ -5,7 +5,7 @@ Requires at least: 4.9.0
5
  Contributors: Dudo
6
  Tested up to: 5.5.2
7
  Requires PHP: 5.3
8
- Stable tag: 2.5.1
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
11
  Boost the way people interact with your site with an easy WordPress stars rating system! With schema.org rich snippets YASR will improve your SEO
@@ -181,6 +181,12 @@ If doesn't, you should work on your seo reputation.
181
 
182
  The full changelog can be found in the plugin's directory. Recent entries:
183
 
 
 
 
 
 
 
184
  = 2.5.1 =
185
  * TWEAKED: added new hooks: yasr_vv_shortcode, yasr_vv_ro_shortcode and yasr_overall_shortcode. These hooks can
186
  be used to customize the shortcodes.
5
  Contributors: Dudo
6
  Tested up to: 5.5.2
7
  Requires PHP: 5.3
8
+ Stable tag: 2.5.2
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
11
  Boost the way people interact with your site with an easy WordPress stars rating system! With schema.org rich snippets YASR will improve your SEO
181
 
182
  The full changelog can be found in the plugin's directory. Recent entries:
183
 
184
+ = 2.5.2 =
185
+ * NEW FEATURE: is now possible delete overall rating data in Yet Another Stars Rating -> Stats -> Overall Rating
186
+ * FIXED: Schema title come with rating string if "Enable stars next to the title?" is enabled
187
+ * TWEAKED: all rankings functions has been rewritten to work with REST API. Documentation will come soon.
188
+ * TWEAKED: a lot of minor changes.
189
+
190
  = 2.5.1 =
191
  * TWEAKED: added new hooks: yasr_vv_shortcode, yasr_vv_ro_shortcode and yasr_overall_shortcode. These hooks can
192
  be used to customize the shortcodes.
yet-another-stars-rating.php CHANGED
@@ -4,7 +4,7 @@
4
  * Plugin Name: Yet Another Stars Rating
5
  * Plugin URI: http://wordpress.org/plugins/yet-another-stars-rating/
6
  * Description: Boost the way people interact with your site with an easy WordPress stars rating system! With schema.org rich snippets YASR will improve your SEO
7
- * Version: 2.5.1
8
  * Author: Dario Curvino
9
  * Author URI: https://dariocurvino.it/
10
  * Text Domain: yet-another-stars-rating
@@ -76,7 +76,7 @@ if ( !function_exists( 'yasr_fs' ) ) {
76
  yasr_fs();
77
  // Signal that SDK was initiated.
78
  do_action( 'yasr_fs_loaded' );
79
- define( 'YASR_VERSION_NUM', '2.5.1' );
80
  //Plugin absolute path
81
  //e.g. /var/www/html/plugin_development/wp-content/plugins/yet-another-stars-rating
82
  define( 'YASR_ABSOLUTE_PATH', __DIR__ );
4
  * Plugin Name: Yet Another Stars Rating
5
  * Plugin URI: http://wordpress.org/plugins/yet-another-stars-rating/
6
  * Description: Boost the way people interact with your site with an easy WordPress stars rating system! With schema.org rich snippets YASR will improve your SEO
7
+ * Version: 2.5.2
8
  * Author: Dario Curvino
9
  * Author URI: https://dariocurvino.it/
10
  * Text Domain: yet-another-stars-rating
76
  yasr_fs();
77
  // Signal that SDK was initiated.
78
  do_action( 'yasr_fs_loaded' );
79
+ define( 'YASR_VERSION_NUM', '2.5.2' );
80
  //Plugin absolute path
81
  //e.g. /var/www/html/plugin_development/wp-content/plugins/yet-another-stars-rating
82
  define( 'YASR_ABSOLUTE_PATH', __DIR__ );