AdRotate Banner Manager - Version 3.14.2

Version Description

FREE = * [change] Better W3 Total Cache support * [fix] Post injection not always showing with multiple groups * [fix] Removed obsolete useragent column from database

Download this release

Release Info

Developer adegans
Plugin Icon 128x128 AdRotate Banner Manager
Version 3.14.2
Comparing to
See all releases

Code changes from version 3.14.1 to 3.14.2

adrotate-functions.php CHANGED
@@ -28,19 +28,28 @@ function adrotate_shortcode($atts, $content = null) {
28
  if(!empty($atts['site'])) $site = 0; // Not supported in free version
29
 
30
  $output = '';
31
-
32
- if($adrotate_config['w3caching'] == "Y") $output .= '<!-- mfunc '.W3TC_DYNAMIC_SECURITY.' -->';
33
-
34
- if($banner_id > 0 AND $group_ids == 0) { // Show one Ad
35
- $output .= adrotate_ad($banner_id, true, 0, 0);
36
- }
37
-
38
- if($banner_id == 0 AND $group_ids > 0) { // Show group
39
- $output .= adrotate_group($group_ids, 0, 0, 0);
 
 
 
 
 
 
 
 
 
 
 
40
  }
41
 
42
- if($adrotate_config['w3caching'] == "Y") $output .= '<!-- /mfunc -->';
43
-
44
  return $output;
45
  }
46
 
@@ -168,7 +177,7 @@ function adrotate_count_impression($ad, $group = 0, $blog_id = 0, $impression_ti
168
  $wpdb->insert($wpdb->prefix.'adrotate_stats', array('ad' => $ad, 'group' => $group, 'thetime' => $today, 'clicks' => 0, 'impressions' => 1));
169
  }
170
 
171
- $wpdb->insert($wpdb->prefix."adrotate_tracker", array('ipaddress' => $remote_ip, 'timer' => $now, 'bannerid' => $ad, 'stat' => 'i', 'useragent' => '', 'country' => '', 'city' => ''));
172
  }
173
  }
174
  }
@@ -248,7 +257,7 @@ function adrotate_click_callback() {
248
  $wpdb->insert($wpdb->prefix.'adrotate_stats', array('ad' => $ad, 'group' => $group, 'thetime' => $today, 'clicks' => 1, 'impressions' => 1));
249
  }
250
 
251
- $wpdb->insert($wpdb->prefix.'adrotate_tracker', array('ipaddress' => $remote_ip, 'timer' => $now, 'bannerid' => $ad, 'stat' => 'c', 'useragent' => $useragent, 'country' => '', 'city' => ''));
252
  }
253
  }
254
  }
28
  if(!empty($atts['site'])) $site = 0; // Not supported in free version
29
 
30
  $output = '';
31
+ if($adrotate_config['w3caching'] == "Y") {
32
+ $output .= '<!-- mfunc '.W3TC_DYNAMIC_SECURITY.' -->';
33
+
34
+ if($banner_id > 0 AND ($group_ids == 0 OR $group_ids > 0)) { // Show one Ad
35
+ $output .= 'echo adrotate_ad('.$banner_id.', true, 0, 0);';
36
+ }
37
+
38
+ if($banner_id == 0 AND $group_ids > 0) { // Show group
39
+ $output .= 'echo adrotate_group('.$group_ids.', 0, 0, 0);';
40
+ }
41
+
42
+ $output .= '<!-- /mfunc '.W3TC_DYNAMIC_SECURITY.' -->';
43
+ } else {
44
+ if($banner_id > 0 AND ($group_ids == 0 OR $group_ids > 0)) { // Show one Ad
45
+ $output .= adrotate_ad($banner_id, true, 0, 0);
46
+ }
47
+
48
+ if($banner_id == 0 AND $group_ids > 0) { // Show group
49
+ $output .= adrotate_group($group_ids, 0, 0, 0);
50
+ }
51
  }
52
 
 
 
53
  return $output;
54
  }
55
 
177
  $wpdb->insert($wpdb->prefix.'adrotate_stats', array('ad' => $ad, 'group' => $group, 'thetime' => $today, 'clicks' => 0, 'impressions' => 1));
178
  }
179
 
180
+ $wpdb->insert($wpdb->prefix."adrotate_tracker", array('ipaddress' => $remote_ip, 'timer' => $now, 'bannerid' => $ad, 'stat' => 'i', 'country' => '', 'city' => ''));
181
  }
182
  }
183
  }
257
  $wpdb->insert($wpdb->prefix.'adrotate_stats', array('ad' => $ad, 'group' => $group, 'thetime' => $today, 'clicks' => 1, 'impressions' => 1));
258
  }
259
 
260
+ $wpdb->insert($wpdb->prefix.'adrotate_tracker', array('ipaddress' => $remote_ip, 'timer' => $now, 'bannerid' => $ad, 'stat' => 'c', 'country' => '', 'city' => ''));
261
  }
262
  }
263
  }
adrotate-manage-publisher.php CHANGED
@@ -138,7 +138,7 @@ function adrotate_insert_input() {
138
 
139
  // Save schedule for new ads or update the existing one
140
  if($type != 'empty') {
141
- $wpdb->query($wpdb->prepare("DELETE FROM `".$wpdb->prefix."adrotate_schedule` WHERE `id` IN (SELECT `schedule` FROM `".$wpdb->prefix."adrotate_linkmeta` WHERE `schedule` != %d AND `schedule` > 0 AND `ad` = %d AND `group` = 0 AND `user` = 0);", $schedule_id, $id));
142
  }
143
  $wpdb->update($wpdb->prefix.'adrotate_schedule', array('starttime' => $startdate, 'stoptime' => $enddate, 'maxclicks' => $maxclicks, 'maximpressions' => $maxshown), array('id' => $schedule_id));
144
 
@@ -146,11 +146,11 @@ function adrotate_insert_input() {
146
  $wpdb->update($wpdb->prefix.'adrotate', array('title' => $title, 'bannercode' => $bannercode, 'updated' => $thetime, 'author' => $author, 'imagetype' => $imagetype, 'image' => $image, 'tracker' => $tracker, 'responsive' => $responsive, 'type' => $active, 'sortorder' => $sortorder), array('id' => $id));
147
 
148
  // Determine Responsive requirement
149
- $responsive_count = $wpdb->get_var("SELECT COUNT(*) as `total` FROM `".$wpdb->prefix."adrotate` WHERE `responsive` = 'Y';");
150
  update_option('adrotate_responsive_required', $responsive_count);
151
 
152
  // Fetch group records for the ad
153
- $groupmeta = $wpdb->get_results($wpdb->prepare("SELECT `group` FROM `".$wpdb->prefix."adrotate_linkmeta` WHERE `ad` = %d AND `user` = 0 AND `schedule` = 0;", $id));
154
  foreach($groupmeta as $meta) {
155
  $group_array[] = $meta->group;
156
  }
@@ -168,7 +168,7 @@ function adrotate_insert_input() {
168
  // Remove groups from this ad
169
  $delete = array_diff($group_array, $groups);
170
  foreach($delete as &$value) {
171
- $wpdb->query($wpdb->prepare("DELETE FROM `".$wpdb->prefix."adrotate_linkmeta` WHERE `ad` = %d AND `group` = %d AND `user` = 0 AND `schedule` = 0;", $id, $value));
172
  }
173
  unset($value);
174
 
@@ -279,7 +279,7 @@ function adrotate_insert_group() {
279
  if($page_loc != 4) $page_par = 0;
280
 
281
  // Fetch records for the group
282
- $linkmeta = $wpdb->get_results($wpdb->prepare("SELECT `ad` FROM `".$wpdb->prefix."adrotate_linkmeta` WHERE `group` = %d AND `user` = 0;", $id));
283
  foreach($linkmeta as $meta) {
284
  $meta_array[] = $meta->ad;
285
  }
@@ -297,7 +297,7 @@ function adrotate_insert_group() {
297
  // Remove ads from this group
298
  $delete = array_diff($meta_array,$ads);
299
  foreach($delete as &$value) {
300
- $wpdb->query($wpdb->prepare("DELETE FROM `".$wpdb->prefix."adrotate_linkmeta` WHERE `ad` = %d AND `group` = %d AND `user` = 0;", $value, $id));
301
  }
302
  unset($value);
303
 
@@ -305,7 +305,7 @@ function adrotate_insert_group() {
305
  $wpdb->update($wpdb->prefix.'adrotate_groups', array('name' => $name, 'modus' => $modus, 'fallback' => 0, 'sortorder' => $sortorder, 'cat' => $category, 'cat_loc' => $category_loc, 'cat_par' => $category_par, 'page' => $page, 'page_loc' => $page_loc, 'page_par' => $page_par, 'wrapper_before' => $wrapper_before, 'wrapper_after' => $wrapper_after, 'align' => $align, 'gridrows' => $rows, 'gridcolumns' => $columns, 'admargin' => $admargin, 'adwidth' => $adwidth, 'adheight' => $adheight, 'adspeed' => $adspeed), array('id' => $id));
306
 
307
  // Determine Dynamic Library requirement
308
- $dynamic_count = $wpdb->get_var("SELECT COUNT(*) as `total` FROM `".$wpdb->prefix."adrotate_groups` WHERE `name` != '' AND `modus` = 1;");
309
  update_option('adrotate_dynamic_required', $dynamic_count);
310
 
311
  adrotate_return('adrotate-groups', 201);
@@ -463,24 +463,24 @@ function adrotate_delete($id, $what) {
463
 
464
  if($id > 0) {
465
  if($what == 'banner') {
466
- $wpdb->query($wpdb->prepare("DELETE FROM `".$wpdb->prefix."adrotate` WHERE `id` = %d;", $id));
467
- $wpdb->query($wpdb->prepare("DELETE FROM `".$wpdb->prefix."adrotate_linkmeta` WHERE `ad` = %d;", $id));
468
- $wpdb->query($wpdb->prepare("DELETE FROM `".$wpdb->prefix."adrotate_stats` WHERE `ad` = %d;", $id));
469
  adrotate_prepare_evaluate_ads(false);
470
  } else if ($what == 'group') {
471
- $wpdb->query($wpdb->prepare("DELETE FROM `".$wpdb->prefix."adrotate_groups` WHERE `id` = %d;", $id));
472
- $wpdb->query($wpdb->prepare("DELETE FROM `".$wpdb->prefix."adrotate_linkmeta` WHERE `group` = %d;", $id));
473
  adrotate_prepare_evaluate_ads(false);
474
  } else if ($what == 'bannergroup') {
475
- $linkmeta = $wpdb->get_results($wpdb->prepare("SELECT `ad` FROM `".$wpdb->prefix."adrotate_linkmeta` WHERE `group` = %d;", $id));
476
  foreach($linkmeta as $meta) {
477
- $wpdb->query("DELETE FROM `".$wpdb->prefix."adrotate` WHERE `id` = ".$meta->ad.";");
478
- $wpdb->query("DELETE FROM `".$wpdb->prefix."adrotate_stats` WHERE `ad` = ".$meta->ad.";");
479
- $wpdb->query("DELETE FROM `".$wpdb->prefix."adrotate_linkmeta` WHERE `ad` = ".$meta->ad.";");
480
  }
481
- $wpdb->query($wpdb->prepare("DELETE FROM `".$wpdb->prefix."adrotate_groups` WHERE `id` = %d;", $id));
482
- $wpdb->query($wpdb->prepare("DELETE FROM `".$wpdb->prefix."adrotate_linkmeta` WHERE `group` = %d;", $id));
483
- $wpdb->query($wpdb->prepare("DELETE FROM `".$wpdb->prefix."adrotate_stats` WHERE `group` = %d;", $id)); // Perhaps unnessesary
484
  adrotate_prepare_evaluate_ads(false);
485
  }
486
  }
@@ -523,8 +523,8 @@ function adrotate_reset($id) {
523
  global $wpdb;
524
 
525
  if($id > 0) {
526
- $wpdb->query($wpdb->prepare("DELETE FROM `".$wpdb->prefix."adrotate_stats` WHERE `ad` = %d", $id));
527
- $wpdb->query($wpdb->prepare("DELETE FROM `".$wpdb->prefix."adrotate_tracker` WHERE `bannerid` = %d", $id));
528
  }
529
  }
530
 
@@ -540,9 +540,9 @@ function adrotate_renew($id, $howlong = 2592000) {
540
  global $wpdb;
541
 
542
  if($id > 0) {
543
- $schedule_id = $wpdb->get_var($wpdb->prepare("SELECT `schedule` FROM `".$wpdb->prefix."adrotate_linkmeta` WHERE `ad` = %d AND `group` = 0 AND `user` = 0 ORDER BY `id` DESC LIMIT 1;", $id));
544
  if($schedule_id > 0) {
545
- $wpdb->query("UPDATE `".$wpdb->prefix."adrotate_schedule` SET `stoptime` = `stoptime` + $howlong WHERE `id` = $schedule_id;");
546
  } else {
547
  $now = adrotate_now();
548
  $stoptime = $now + $howlong;
138
 
139
  // Save schedule for new ads or update the existing one
140
  if($type != 'empty') {
141
+ $wpdb->query($wpdb->prepare("DELETE FROM `{$wpdb->prefix}adrotate_schedule` WHERE `id` IN (SELECT `schedule` FROM `{$wpdb->prefix}adrotate_linkmeta` WHERE `schedule` != %d AND `schedule` > 0 AND `ad` = %d AND `group` = 0 AND `user` = 0);", $schedule_id, $id));
142
  }
143
  $wpdb->update($wpdb->prefix.'adrotate_schedule', array('starttime' => $startdate, 'stoptime' => $enddate, 'maxclicks' => $maxclicks, 'maximpressions' => $maxshown), array('id' => $schedule_id));
144
 
146
  $wpdb->update($wpdb->prefix.'adrotate', array('title' => $title, 'bannercode' => $bannercode, 'updated' => $thetime, 'author' => $author, 'imagetype' => $imagetype, 'image' => $image, 'tracker' => $tracker, 'responsive' => $responsive, 'type' => $active, 'sortorder' => $sortorder), array('id' => $id));
147
 
148
  // Determine Responsive requirement
149
+ $responsive_count = $wpdb->get_var("SELECT COUNT(*) as `total` FROM `{$wpdb->prefix}adrotate` WHERE `responsive` = 'Y';");
150
  update_option('adrotate_responsive_required', $responsive_count);
151
 
152
  // Fetch group records for the ad
153
+ $groupmeta = $wpdb->get_results($wpdb->prepare("SELECT `group` FROM `{$wpdb->prefix}adrotate_linkmeta` WHERE `ad` = %d AND `user` = 0 AND `schedule` = 0;", $id));
154
  foreach($groupmeta as $meta) {
155
  $group_array[] = $meta->group;
156
  }
168
  // Remove groups from this ad
169
  $delete = array_diff($group_array, $groups);
170
  foreach($delete as &$value) {
171
+ $wpdb->query($wpdb->prepare("DELETE FROM `{$wpdb->prefix}adrotate_linkmeta` WHERE `ad` = %d AND `group` = %d AND `user` = 0 AND `schedule` = 0;", $id, $value));
172
  }
173
  unset($value);
174
 
279
  if($page_loc != 4) $page_par = 0;
280
 
281
  // Fetch records for the group
282
+ $linkmeta = $wpdb->get_results($wpdb->prepare("SELECT `ad` FROM `{$wpdb->prefix}adrotate_linkmeta` WHERE `group` = %d AND `user` = 0;", $id));
283
  foreach($linkmeta as $meta) {
284
  $meta_array[] = $meta->ad;
285
  }
297
  // Remove ads from this group
298
  $delete = array_diff($meta_array,$ads);
299
  foreach($delete as &$value) {
300
+ $wpdb->query($wpdb->prepare("DELETE FROM `{$wpdb->prefix}adrotate_linkmeta` WHERE `ad` = %d AND `group` = %d AND `user` = 0;", $value, $id));
301
  }
302
  unset($value);
303
 
305
  $wpdb->update($wpdb->prefix.'adrotate_groups', array('name' => $name, 'modus' => $modus, 'fallback' => 0, 'sortorder' => $sortorder, 'cat' => $category, 'cat_loc' => $category_loc, 'cat_par' => $category_par, 'page' => $page, 'page_loc' => $page_loc, 'page_par' => $page_par, 'wrapper_before' => $wrapper_before, 'wrapper_after' => $wrapper_after, 'align' => $align, 'gridrows' => $rows, 'gridcolumns' => $columns, 'admargin' => $admargin, 'adwidth' => $adwidth, 'adheight' => $adheight, 'adspeed' => $adspeed), array('id' => $id));
306
 
307
  // Determine Dynamic Library requirement
308
+ $dynamic_count = $wpdb->get_var("SELECT COUNT(*) as `total` FROM `{$wpdb->prefix}adrotate_groups` WHERE `name` != '' AND `modus` = 1;");
309
  update_option('adrotate_dynamic_required', $dynamic_count);
310
 
311
  adrotate_return('adrotate-groups', 201);
463
 
464
  if($id > 0) {
465
  if($what == 'banner') {
466
+ $wpdb->query($wpdb->prepare("DELETE FROM `{$wpdb->prefix}adrotate` WHERE `id` = %d;", $id));
467
+ $wpdb->query($wpdb->prepare("DELETE FROM `{$wpdb->prefix}adrotate_linkmeta` WHERE `ad` = %d;", $id));
468
+ $wpdb->query($wpdb->prepare("DELETE FROM `{$wpdb->prefix}adrotate_stats` WHERE `ad` = %d;", $id));
469
  adrotate_prepare_evaluate_ads(false);
470
  } else if ($what == 'group') {
471
+ $wpdb->query($wpdb->prepare("DELETE FROM `{$wpdb->prefix}adrotate_groups` WHERE `id` = %d;", $id));
472
+ $wpdb->query($wpdb->prepare("DELETE FROM `{$wpdb->prefix}adrotate_linkmeta` WHERE `group` = %d;", $id));
473
  adrotate_prepare_evaluate_ads(false);
474
  } else if ($what == 'bannergroup') {
475
+ $linkmeta = $wpdb->get_results($wpdb->prepare("SELECT `ad` FROM `{$wpdb->prefix}adrotate_linkmeta` WHERE `group` = %d;", $id));
476
  foreach($linkmeta as $meta) {
477
+ $wpdb->query("DELETE FROM `{$wpdb->prefix}adrotate` WHERE `id` = ".$meta->ad.";");
478
+ $wpdb->query("DELETE FROM `{$wpdb->prefix}adrotate_stats` WHERE `ad` = ".$meta->ad.";");
479
+ $wpdb->query("DELETE FROM `{$wpdb->prefix}adrotate_linkmeta` WHERE `ad` = ".$meta->ad.";");
480
  }
481
+ $wpdb->query($wpdb->prepare("DELETE FROM `{$wpdb->prefix}adrotate_groups` WHERE `id` = %d;", $id));
482
+ $wpdb->query($wpdb->prepare("DELETE FROM `{$wpdb->prefix}adrotate_linkmeta` WHERE `group` = %d;", $id));
483
+ $wpdb->query($wpdb->prepare("DELETE FROM `{$wpdb->prefix}adrotate_stats` WHERE `group` = %d;", $id)); // Perhaps unnessesary
484
  adrotate_prepare_evaluate_ads(false);
485
  }
486
  }
523
  global $wpdb;
524
 
525
  if($id > 0) {
526
+ $wpdb->query($wpdb->prepare("DELETE FROM `{$wpdb->prefix}adrotate_stats` WHERE `ad` = %d", $id));
527
+ $wpdb->query($wpdb->prepare("DELETE FROM `{$wpdb->prefix}adrotate_tracker` WHERE `bannerid` = %d", $id));
528
  }
529
  }
530
 
540
  global $wpdb;
541
 
542
  if($id > 0) {
543
+ $schedule_id = $wpdb->get_var($wpdb->prepare("SELECT `schedule` FROM `{$wpdb->prefix}adrotate_linkmeta` WHERE `ad` = %d AND `group` = 0 AND `user` = 0 ORDER BY `id` DESC LIMIT 1;", $id));
544
  if($schedule_id > 0) {
545
+ $wpdb->query("UPDATE `{$wpdb->prefix}adrotate_schedule` SET `stoptime` = `stoptime` + $howlong WHERE `id` = $schedule_id;");
546
  } else {
547
  $now = adrotate_now();
548
  $stoptime = $now + $howlong;
adrotate-output.php CHANGED
@@ -232,27 +232,26 @@ function adrotate_group($group_ids, $fallback = 0, $weight = 0, $site = 0) {
232
  -------------------------------------------------------------*/
233
  function adrotate_inject_posts($post_content) {
234
  global $wpdb, $post, $adrotate_debug;
235
-
236
  $group_array = array();
237
-
238
  if(is_page()) {
239
  // Inject ads into page
240
- $ids = $wpdb->get_results("SELECT `id`, `page`, `page_loc`, `page_par` FROM `{$wpdb->prefix}adrotate_groups` WHERE `page_loc` > 0;");
241
 
242
  foreach($ids as $id) {
243
  $pages = explode(",", $id->page);
244
  if(!is_array($pages)) $pages = array();
245
 
246
  if(in_array($post->ID, $pages)) {
247
- $group_array[$id->id] = array('location' => $id->page_loc, 'paragraph' => $id->page_par, 'pages' => $pages, 'categories' => array());
248
  }
249
  }
250
  unset($ids, $pages);
251
  }
252
-
253
  if(is_single()) {
254
  // Inject ads into posts in specified category
255
- $ids = $wpdb->get_results("SELECT `id`, `cat`, `cat_loc`, `cat_par` FROM `{$wpdb->prefix}adrotate_groups` WHERE `cat_loc` > 0;");
256
  $wp_categories = get_terms('category', array('fields' => 'ids'));
257
 
258
  foreach($ids as $id) {
@@ -261,88 +260,66 @@ function adrotate_inject_posts($post_content) {
261
 
262
  foreach($wp_categories as &$value) {
263
  if(in_array($value, $categories)) {
264
- $group_array[$id->id] = array('location' => $id->cat_loc, 'paragraph' => $id->cat_par, 'pages' => array(), 'categories' => $categories);
265
  }
266
  }
267
  }
268
  unset($ids, $wp_categories, $categories);
269
  }
270
 
 
 
 
271
  if($adrotate_debug['general'] == true) {
272
  echo "<p><strong>[DEBUG][adrotate_inject_posts()] group_array</strong><pre>";
 
273
  print_r($group_array);
274
  echo "</pre></p>";
275
  }
276
 
277
- $group_count = count($group_array);
278
  if($group_count > 0) {
279
- if($group_count > 1) {
280
- // Try to prevent the same ad from showing when there are multiple ads to show
281
- $paragraph_count = substr_count($post_content, '<p>');
282
- if($paragraph_count == 0 OR $group_count < $paragraph_count) {
283
- $paragraph_count = $group_count;
284
- }
285
- $group_choice = array_rand($group_array, $paragraph_count);
286
- if(!is_array($group_choice)) $group_choice = array($group_choice);
287
-
288
- shuffle($group_choice);
289
- } else {
290
- $group_choice = array_rand($group_array, 1);
291
- $group_choice = array($group_choice,$group_choice);
292
- }
293
-
294
- if($adrotate_debug['general'] == true) {
295
- echo "<p><strong>[DEBUG][adrotate_inject_posts()] group_choice</strong><pre>";
296
- print_r($group_choice);
297
- echo "</pre></p>";
298
- }
299
-
300
  $before = $after = $inside = 0;
301
- foreach($group_choice as $key => $group_id) {
302
- if(is_page($group_array[$group_id]['pages']) OR in_category($group_array[$group_id]['categories'])) {
303
  // Advert in front of content
304
- if(($group_array[$group_id]['location'] == 1 OR $group_array[$group_id]['location'] == 3) AND $before == 0) {
305
  $post_content = adrotate_group($group_id).$post_content;
 
306
  $before = 1;
307
  }
308
-
309
- // Advert behind content
310
- if(($group_array[$group_id]['location'] == 2 OR $group_array[$group_id]['location'] == 3) AND $after == 0) {
311
- $post_content = $post_content.adrotate_group($group_id);
312
- $after = 1;
 
313
  }
314
 
315
  // Adverts inside the content
316
- if($group_array[$group_id]['location'] == 4) {
317
- $paragraphs = explode("</p>", $post_content);
318
  $paragraph_count = count($paragraphs);
319
- $par = 1;
320
- $post_content = '';
321
-
322
- // Backward compatibility
323
- if($group_array[$group_id]['paragraph'] == 20) $group_array[$group_id]['paragraph'] == 2;
324
- if($group_array[$group_id]['paragraph'] == 30) $group_array[$group_id]['paragraph'] == 3;
325
- if($group_array[$group_id]['paragraph'] == 40) $group_array[$group_id]['paragraph'] == 4;
326
-
327
- // Advanced setting
328
- $middle = ($group_array[$group_id]['paragraph'] == 99) ? ceil($paragraph_count / 2) : 1;
329
-
330
- foreach($paragraphs as &$paragraph) {
331
- if(($par == $group_array[$group_id]['paragraph'] OR ($par == $middle AND $group_array[$group_id]['paragraph'] == 99)) AND $inside == 0) {
332
- $paragraph .= adrotate_group($group_id);
333
- $inside = 1;
334
- }
335
- $post_content .= $paragraph."</p>";
336
- $par++;
337
-
338
- unset($paragraph);
339
- }
340
  }
341
  }
342
  }
343
- unset($group_choice, $group_count, $group_array, $paragraph, $paragraph_count, $before, $after, $inside);
344
  }
345
-
346
  return $post_content;
347
  }
348
 
@@ -741,7 +718,7 @@ function adrotate_notifications_dashboard() {
741
  echo ' <div class="button_div"><a class="button" target="_blank" href="https://ajdg.solutions/products/adrotate-for-wordpress/?add-to-cart=1126?pk_campaign=adrotatefree-upgradebanner">'.__('Buy now', 'adrotate').'</a></div>';
742
  echo ' <div class="text">'.__("You've been using <strong>AdRotate</strong> for a while now. Why not upgrade to the <strong>PRO</strong> version", 'adrotate').'?<br /><span>'.__('Use discount code <b>getadrotatepro</b> for 10% off on any AdRotate license!', 'adrotate' ).' '.__('Thank you for your purchase!', 'adrotate' ).'</span></div>';
743
  echo ' <a class="close_banner" href="admin.php?page=adrotate-pro&hide=1"><img title="Close" src="'.plugins_url('images/icon-close.png', __FILE__).'" alt=""/></a>';
744
- echo ' <div class="icon"><img title="" src="'.plugins_url('images/adrotate-logo-60x60.png', __FILE__).'" alt=""/></div>';
745
  echo ' </div>';
746
  echo '</div>';
747
  }
@@ -753,7 +730,7 @@ function adrotate_notifications_dashboard() {
753
  echo ' <div class="button_div"><a class="button" target="_blank" href="https://wordpress.org/support/view/plugin-reviews/adrotate?rate=5#postform">Rate AdRotate</a></div>';
754
  echo ' <div class="text">If you like <strong>AdRotate</strong> please let the world know that you do. Thanks for your support!<br /><span>If you have questions, suggestions or something else that doesn\'t belong in a review, please <a href="https://ajdg.solutions/forums/forum/adrotate-for-wordpress/?pk_campaign=adrotatefree-reviewbanner" target="_blank">get in touch</a>!</span></div>';
755
  echo ' <a class="close_banner" href="admin.php?page=adrotate&hide=2"><img title="Close" src="'.plugins_url('images/icon-close.png', __FILE__).'" alt=""/></a>';
756
- echo ' <div class="icon"><img title="" src="'.plugins_url('images/adrotate-logo-60x60.png', __FILE__).'" alt=""/></div>';
757
  echo ' </div>';
758
  echo '</div>';
759
  }
@@ -767,7 +744,7 @@ function adrotate_notifications_dashboard() {
767
  echo ' <div class="adrotate_banner">';
768
  echo ' <div class="button_div"><a class="button" href="admin.php?page=adrotate&upgrade=1">Update Now</a></div>';
769
  echo ' <div class="text">You have almost finished upgrading <strong>AdRotate</strong> to version <strong>'.ADROTATE_DISPLAY.'</strong>!<br /><span>To complete the update click the button on the left. This may take a few seconds to complete!</span></div>';
770
- echo ' <div class="icon"><img title="" src="'.plugins_url('images/adrotate-logo-60x60.png', __FILE__).'" alt=""/></div>';
771
  echo ' </div>';
772
  echo '</div>';
773
  }
@@ -849,16 +826,23 @@ function adrotate_credits() {
849
  echo '<thead>';
850
  echo '<tr valign="top">';
851
  echo ' <th colspan="2">'.__('Help AdRotate Grow', 'adrotate').'</th>';
852
- echo ' <th colspan="2" width="20%"><center>'.__('Brought to you by', 'adrotate').'</center></th>';
853
  echo '</tr>';
854
  echo '</thead>';
855
 
856
  echo '<tbody>';
857
  echo '<tr>';
858
- echo '<td><center><a href="https://ajdg.solutions/products/adrotate-for-wordpress/?pk_campaign=adrotatefree-credits&pk_kwd=adrotate_logo" title="AdRotate plugin for WordPress"><img src="'.plugins_url('/images/adrotate-logo-60x60.png', __FILE__).'" alt="adrotate-logo-60x60" width="60" height="60" /></a></center></td>';
859
  echo '<td>'.__("A lot of users only think to review AdRotate when something goes wrong while thousands of people use AdRotate satisfactory. Don't let this go unnoticed.", 'adrotate').' <strong>'. __("If you find AdRotate useful please leave your honest", 'adrotate').' <a href="https://wordpress.org/support/view/plugin-reviews/adrotate?rate=5#postform" target="_blank">'.__('rating','adrotate').'</a> '.__('and','adrotate').' <a href="https://wordpress.org/support/view/plugin-reviews/adrotate" target="_blank">'.__('review','adrotate').'</a> '.__('on WordPress.org to help AdRotate grow in a positive way', 'adrotate').'!</strong></td>';
860
 
861
- echo '<td><center><a href="https://ajdg.solutions/?pk_campaign=adrotatefree-credits" title="Arnan de Gans"><img src="'.plugins_url('/images/arnan-jungle.jpg', __FILE__).'" alt="Arnan de Gans" width="60" height="60" align="left" class="adrotate-photo" /></a><a href="http://meandmymac.net?pk_campaign=adrotatefree-credits" target="_blank">Arnan de Gans</a><br />from<br /><a href="https://ajdg.solutions?pk_campaign=adrotatefree-credits" target="_blank">AJdG Solutions</a></center></td></td>';
 
 
 
 
 
 
 
862
  echo '</tr>';
863
  echo '</tbody>';
864
 
232
  -------------------------------------------------------------*/
233
  function adrotate_inject_posts($post_content) {
234
  global $wpdb, $post, $adrotate_debug;
235
+
236
  $group_array = array();
 
237
  if(is_page()) {
238
  // Inject ads into page
239
+ $ids = $wpdb->get_results("SELECT `id`, `page`, `page_loc`, `page_par` FROM `{$wpdb->prefix}adrotate_groups` WHERE `page_loc` > 0 AND `page_loc` < 5;");
240
 
241
  foreach($ids as $id) {
242
  $pages = explode(",", $id->page);
243
  if(!is_array($pages)) $pages = array();
244
 
245
  if(in_array($post->ID, $pages)) {
246
+ $group_array[$id->id] = array('location' => $id->page_loc, 'paragraph' => $id->page_par, 'ids' => $pages);
247
  }
248
  }
249
  unset($ids, $pages);
250
  }
251
+
252
  if(is_single()) {
253
  // Inject ads into posts in specified category
254
+ $ids = $wpdb->get_results("SELECT `id`, `cat`, `cat_loc`, `cat_par` FROM `{$wpdb->prefix}adrotate_groups` WHERE `cat_loc` > 0 AND `cat_loc` < 5;");
255
  $wp_categories = get_terms('category', array('fields' => 'ids'));
256
 
257
  foreach($ids as $id) {
260
 
261
  foreach($wp_categories as &$value) {
262
  if(in_array($value, $categories)) {
263
+ $group_array[$id->id] = array('location' => $id->cat_loc, 'paragraph' => $id->cat_par, 'ids' => $categories);
264
  }
265
  }
266
  }
267
  unset($ids, $wp_categories, $categories);
268
  }
269
 
270
+ $group_array = adrotate_shuffle($group_array);
271
+ $group_count = count($group_array);
272
+
273
  if($adrotate_debug['general'] == true) {
274
  echo "<p><strong>[DEBUG][adrotate_inject_posts()] group_array</strong><pre>";
275
+ echo "Group count: ".$group_count."</br>";
276
  print_r($group_array);
277
  echo "</pre></p>";
278
  }
279
 
 
280
  if($group_count > 0) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
281
  $before = $after = $inside = 0;
282
+ foreach($group_array as $group_id => $group) {
283
+ if(is_page($group['ids']) OR is_category($group['ids']) OR in_category($group['ids'])) {
284
  // Advert in front of content
285
+ if(($group['location'] == 1 OR $group['location'] == 3) AND $before == 0) {
286
  $post_content = adrotate_group($group_id).$post_content;
287
+ unset($group_array[$group_id]);
288
  $before = 1;
289
  }
290
+
291
+ // Advert behind the content
292
+ if(($group['location'] == 2 OR $group['location'] == 3) AND $after == 0) {
293
+ $post_content = $post_content.adrotate_group($group_id);
294
+ unset($group_array[$group_id]);
295
+ $after = 1;
296
  }
297
 
298
  // Adverts inside the content
299
+ if($group['location'] == 4) {
300
+ $paragraphs = explode('</p>', $post_content);
301
  $paragraph_count = count($paragraphs);
302
+ $count_p = ($group['paragraph'] == 99) ? ceil($paragraph_count / 2) : $group['paragraph'];
303
+
304
+ foreach($paragraphs as $index => $paragraph) {
305
+ if(trim($paragraph)) {
306
+ $paragraphs[$index] .= '</p>';
307
+ }
308
+
309
+ if($count_p == $index + 1 AND $inside == 0) {
310
+ $paragraphs[$index] .= adrotate_group($group_id);
311
+ unset($group_array[$group_id]);
312
+ $inside = 1;
313
+ }
314
+ }
315
+ $inside = 0; // Reset for the next paragraph
316
+ $post_content = implode('', $paragraphs);
317
+ unset($paragraphs, $paragraph_count);
 
 
 
 
 
318
  }
319
  }
320
  }
321
+ unset($group_array, $before, $after, $inside);
322
  }
 
323
  return $post_content;
324
  }
325
 
718
  echo ' <div class="button_div"><a class="button" target="_blank" href="https://ajdg.solutions/products/adrotate-for-wordpress/?add-to-cart=1126?pk_campaign=adrotatefree-upgradebanner">'.__('Buy now', 'adrotate').'</a></div>';
719
  echo ' <div class="text">'.__("You've been using <strong>AdRotate</strong> for a while now. Why not upgrade to the <strong>PRO</strong> version", 'adrotate').'?<br /><span>'.__('Use discount code <b>getadrotatepro</b> for 10% off on any AdRotate license!', 'adrotate' ).' '.__('Thank you for your purchase!', 'adrotate' ).'</span></div>';
720
  echo ' <a class="close_banner" href="admin.php?page=adrotate-pro&hide=1"><img title="Close" src="'.plugins_url('images/icon-close.png', __FILE__).'" alt=""/></a>';
721
+ echo ' <div class="icon"><img title="" src="'.plugins_url('images/logo-60x60.png', __FILE__).'" alt=""/></div>';
722
  echo ' </div>';
723
  echo '</div>';
724
  }
730
  echo ' <div class="button_div"><a class="button" target="_blank" href="https://wordpress.org/support/view/plugin-reviews/adrotate?rate=5#postform">Rate AdRotate</a></div>';
731
  echo ' <div class="text">If you like <strong>AdRotate</strong> please let the world know that you do. Thanks for your support!<br /><span>If you have questions, suggestions or something else that doesn\'t belong in a review, please <a href="https://ajdg.solutions/forums/forum/adrotate-for-wordpress/?pk_campaign=adrotatefree-reviewbanner" target="_blank">get in touch</a>!</span></div>';
732
  echo ' <a class="close_banner" href="admin.php?page=adrotate&hide=2"><img title="Close" src="'.plugins_url('images/icon-close.png', __FILE__).'" alt=""/></a>';
733
+ echo ' <div class="icon"><img title="" src="'.plugins_url('images/logo-60x60.png', __FILE__).'" alt=""/></div>';
734
  echo ' </div>';
735
  echo '</div>';
736
  }
744
  echo ' <div class="adrotate_banner">';
745
  echo ' <div class="button_div"><a class="button" href="admin.php?page=adrotate&upgrade=1">Update Now</a></div>';
746
  echo ' <div class="text">You have almost finished upgrading <strong>AdRotate</strong> to version <strong>'.ADROTATE_DISPLAY.'</strong>!<br /><span>To complete the update click the button on the left. This may take a few seconds to complete!</span></div>';
747
+ echo ' <div class="icon"><img title="" src="'.plugins_url('images/logo-60x60.png', __FILE__).'" alt=""/></div>';
748
  echo ' </div>';
749
  echo '</div>';
750
  }
826
  echo '<thead>';
827
  echo '<tr valign="top">';
828
  echo ' <th colspan="2">'.__('Help AdRotate Grow', 'adrotate').'</th>';
829
+ echo ' <th style="text-align:center;">'.__('Follow Arnan on Facebook', 'wpevents').'</th>';
830
  echo '</tr>';
831
  echo '</thead>';
832
 
833
  echo '<tbody>';
834
  echo '<tr>';
835
+ echo '<td><center><a href="https://ajdg.solutions/products/adrotate-for-wordpress/?pk_campaign=adrotatefree-credits&pk_kwd=adrotate_logo" title="AdRotate plugin for WordPress"><img src="'.plugins_url('/images/logo-60x60.png', __FILE__).'" alt="AdRotate logo" width="60" height="60" /></a></center></td>';
836
  echo '<td>'.__("A lot of users only think to review AdRotate when something goes wrong while thousands of people use AdRotate satisfactory. Don't let this go unnoticed.", 'adrotate').' <strong>'. __("If you find AdRotate useful please leave your honest", 'adrotate').' <a href="https://wordpress.org/support/view/plugin-reviews/adrotate?rate=5#postform" target="_blank">'.__('rating','adrotate').'</a> '.__('and','adrotate').' <a href="https://wordpress.org/support/view/plugin-reviews/adrotate" target="_blank">'.__('review','adrotate').'</a> '.__('on WordPress.org to help AdRotate grow in a positive way', 'adrotate').'!</strong></td>';
837
 
838
+ echo '<td width="25%"><script>(function(d, s, id) {';
839
+ echo 'var js, fjs = d.getElementsByTagName(s)[0];';
840
+ echo 'if (d.getElementById(id)) return;';
841
+ echo 'js = d.createElement(s); js.id = id;';
842
+ echo 'js.src = "https://connect.facebook.net/en_US/sdk.js#xfbml=1&version=v2.5";';
843
+ echo 'fjs.parentNode.insertBefore(js, fjs);';
844
+ echo '}(document, \'script\', \'facebook-jssdk\'));</script>';
845
+ echo '<center><div class="fb-page" data-href="https://www.facebook.com/Arnandegans" data-width="315" data-adapt-container-width="true" data-small-header="true" data-hide-cover="false" data-show-facepile="false"></div></center></td>';
846
  echo '</tr>';
847
  echo '</tbody>';
848
 
adrotate-setup.php CHANGED
@@ -507,7 +507,6 @@ function adrotate_database_install() {
507
  `timer` int(15) unsigned NOT NULL default '0',
508
  `bannerid` int(15) unsigned NOT NULL default '0',
509
  `stat` char(1) NOT NULL default 'c',
510
- `useragent` mediumtext NOT NULL,
511
  `country` text NOT NULL,
512
  `city` text NOT NULL,
513
  PRIMARY KEY (`id`),
@@ -806,6 +805,12 @@ function adrotate_database_upgrade() {
806
  adrotate_del_column("{$wpdb->prefix}adrotate", 'link');
807
  }
808
 
 
 
 
 
 
 
809
  update_option("adrotate_db_version", array('current' => ADROTATE_DB_VERSION, 'previous' => $adrotate_db_version['current']));
810
  }
811
 
507
  `timer` int(15) unsigned NOT NULL default '0',
508
  `bannerid` int(15) unsigned NOT NULL default '0',
509
  `stat` char(1) NOT NULL default 'c',
 
510
  `country` text NOT NULL,
511
  `city` text NOT NULL,
512
  PRIMARY KEY (`id`),
805
  adrotate_del_column("{$wpdb->prefix}adrotate", 'link');
806
  }
807
 
808
+ // Database: 56
809
+ // AdRotate: 3.14.2
810
+ if($adrotate_db_version['current'] < 56) {
811
+ adrotate_del_column("{$wpdb->prefix}adrotate_tracker", 'useragent');
812
+ }
813
+
814
  update_option("adrotate_db_version", array('current' => ADROTATE_DB_VERSION, 'previous' => $adrotate_db_version['current']));
815
  }
816
 
adrotate-widget.php CHANGED
@@ -24,7 +24,7 @@ class adrotate_widgets extends WP_Widget {
24
  -------------------------------------------------------------*/
25
  function adrotate_widgets() {
26
 
27
- parent::__construct(false, 'AdRotate', array('description' => "Show unlimited ads in the sidebar."));
28
 
29
  }
30
 
@@ -47,17 +47,27 @@ class adrotate_widgets extends WP_Widget {
47
  }
48
 
49
  if($adrotate_config['widgetalign'] == 'Y') echo '<ul><li>';
50
- if($adrotate_config['w3caching'] == 'Y') echo '<!-- mfunc '.W3TC_DYNAMIC_SECURITY.' -->';
51
-
52
- if($instance['type'] == "single") {
53
- echo adrotate_ad($instance['adid'], true, 0, 0, 0);
54
- }
55
 
56
- if($instance['type'] == "group") {
57
- echo adrotate_group($instance['adid'], 0, 0, 0);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
58
  }
59
-
60
- if($adrotate_config['w3caching'] == 'Y') echo '<!-- /mfunc -->';
61
  if($adrotate_config['widgetalign'] == 'Y') echo '</li></ul>';
62
 
63
  echo $after_widget;
@@ -100,13 +110,7 @@ class adrotate_widgets extends WP_Widget {
100
  $title = esc_attr( $title );
101
  $description = esc_attr( $description );
102
  $type = esc_attr( $type );
103
-
104
- //Try and preserve pre-fix widget IDs
105
- if(isset($id) and $adid < 1) {
106
- $adid = esc_attr( $id );
107
- } else {
108
- $adid = esc_attr( $adid );
109
- }
110
  ?>
111
  <p>
112
  <label for="<?php echo $this->get_field_id('title'); ?>"><?php _e( 'Title (optional):', 'adrotate' ); ?></label>
@@ -123,8 +127,8 @@ class adrotate_widgets extends WP_Widget {
123
  <p>
124
  <label for="<?php echo $this->get_field_id('type'); ?>"><?php _e( 'Type:', 'adrotate' ); ?></label>
125
  <select class="widefat" id="<?php echo $this->get_field_id('type'); ?>" name="<?php echo $this->get_field_name('type'); ?>" class="postform">
126
- <option value="single" <?php if($type == "single") { echo 'selected'; } ?>><?php _e( 'Single Ad - Use Ad ID', 'adrotate' ); ?></option>
127
- <option value="group" <?php if($type == "group") { echo 'selected'; } ?>><?php _e( 'Group of Ads - Use group ID', 'adrotate' ); ?></option>
128
  </select>
129
  <br />
130
  <small><?php _e( 'Choose what you want to use this widget for', 'adrotate' ); ?></small>
24
  -------------------------------------------------------------*/
25
  function adrotate_widgets() {
26
 
27
+ parent::__construct(false, 'AdRotate', array('description' => "Show a group of adverts or a single advert in any widget area."));
28
 
29
  }
30
 
47
  }
48
 
49
  if($adrotate_config['widgetalign'] == 'Y') echo '<ul><li>';
 
 
 
 
 
50
 
51
+ if($adrotate_config['w3caching'] == 'Y') {
52
+ echo '<!-- mfunc '.W3TC_DYNAMIC_SECURITY.' -->';
53
+ if($instance['type'] == "single") {
54
+ echo 'echo adrotate_ad('.$instance['adid'].', true, 0, 0, 0);';
55
+ }
56
+
57
+ if($instance['type'] == "group") {
58
+ echo 'echo adrotate_group('.$instance['adid'].', 0, 0, 0);';
59
+ }
60
+ echo '<!-- /mfunc '.W3TC_DYNAMIC_SECURITY.' -->';
61
+ } else {
62
+ if($instance['type'] == "single") {
63
+ echo adrotate_ad($instance['adid'], true, 0, 0, 0);
64
+ }
65
+
66
+ if($instance['type'] == "group") {
67
+ echo adrotate_group($instance['adid'], 0, 0, 0);
68
+ }
69
  }
70
+
 
71
  if($adrotate_config['widgetalign'] == 'Y') echo '</li></ul>';
72
 
73
  echo $after_widget;
110
  $title = esc_attr( $title );
111
  $description = esc_attr( $description );
112
  $type = esc_attr( $type );
113
+ $adid = esc_attr( $adid );
 
 
 
 
 
 
114
  ?>
115
  <p>
116
  <label for="<?php echo $this->get_field_id('title'); ?>"><?php _e( 'Title (optional):', 'adrotate' ); ?></label>
127
  <p>
128
  <label for="<?php echo $this->get_field_id('type'); ?>"><?php _e( 'Type:', 'adrotate' ); ?></label>
129
  <select class="widefat" id="<?php echo $this->get_field_id('type'); ?>" name="<?php echo $this->get_field_name('type'); ?>" class="postform">
130
+ <option value="single" <?php if($type == "single") { echo 'selected'; } ?>><?php _e( 'Advert - Use Advert ID', 'adrotate' ); ?></option>
131
+ <option value="group" <?php if($type == "group") { echo 'selected'; } ?>><?php _e( 'Group - Use group ID', 'adrotate' ); ?></option>
132
  </select>
133
  <br />
134
  <small><?php _e( 'Choose what you want to use this widget for', 'adrotate' ); ?></small>
adrotate.php CHANGED
@@ -7,7 +7,7 @@ Author URI: http://ajdg.solutions/?pk_campaign=adrotatefree-pluginpage
7
  Description: The popular choice for monetizing your website with adverts while keeping things simple. Start making money today!
8
  Text Domain: adrotate
9
  Domain Path: /languages/
10
- Version: 3.14.1
11
  License: GPLv3
12
  */
13
 
@@ -22,9 +22,9 @@ License: GPLv3
22
  ------------------------------------------------------------------------------------ */
23
 
24
  /*--- AdRotate values ---------------------------------------*/
25
- define("ADROTATE_DISPLAY", '3.14.1');
26
  define("ADROTATE_VERSION", 380);
27
- define("ADROTATE_DB_VERSION", 55);
28
  /*-----------------------------------------------------------*/
29
 
30
  /*--- Load Files --------------------------------------------*/
7
  Description: The popular choice for monetizing your website with adverts while keeping things simple. Start making money today!
8
  Text Domain: adrotate
9
  Domain Path: /languages/
10
+ Version: 3.14.2
11
  License: GPLv3
12
  */
13
 
22
  ------------------------------------------------------------------------------------ */
23
 
24
  /*--- AdRotate values ---------------------------------------*/
25
+ define("ADROTATE_DISPLAY", '3.14.2');
26
  define("ADROTATE_VERSION", 380);
27
+ define("ADROTATE_DB_VERSION", 56);
28
  /*-----------------------------------------------------------*/
29
 
30
  /*--- Load Files --------------------------------------------*/
dashboard/adrotatepro.php CHANGED
@@ -48,27 +48,20 @@
48
  <h3><?php _e('AdRotate is brought to you by', 'adrotate'); ?></h3>
49
  <div class="postbox-adrotate">
50
  <div class="inside">
51
- <p><img src="<?php echo WP_CONTENT_URL; ?>/plugins/adrotate/images/arnan-jungle.jpg" alt="Arnan de Gans" width="100" height="100" align="left" class="adrotate-photo" style="margin: 0 10px 0 0;" />
52
- <a href="http://meandmymac.net/?pk_campaign=adrotatefree-propage" title="Arnan de Gans">Arnan de Gans</a> (<a href="https://ajdg.solutions/?pk_campaign=adrotatefree-propage" title="Arnan de Gans">AJdG Solutions</a>) - <?php _e('Premium plugins, support and services for WordPress and WooCommerce! I am a digital nomad in the Philippines. Click on my name to find out more about me and what I am doing. Thanks for your support and for using my plugins!', 'adrotate'); ?></p>
53
- <table width="100%">
54
- <tr class="first">
55
- <td class="first b">
56
- <div id="fb-root"></div>
57
- <script>(function(d, s, id) {
58
- var js, fjs = d.getElementsByTagName(s)[0];
59
- if (d.getElementById(id)) return;
60
- js = d.createElement(s); js.id = id;
61
- js.src = "//connect.facebook.net/en_US/sdk.js#xfbml=1&version=v2.5";
62
- fjs.parentNode.insertBefore(js, fjs);
63
- }(document, 'script', 'facebook-jssdk'));</script><center><div class="fb-like" data-href="https://www.facebook.com/Arnandegans/" data-width="250" data-layout="standard" data-action="like" data-show-faces="true" data-share="true"></div></center>
64
- </td>
65
-
66
- <td class="b">
67
- <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script><center><a href="https://twitter.com/arnandegans" class="twitter-follow-button" data-show-count="false" data-size="large" data-dnt="true"></a></center>
68
- </td>
69
- </tr>
70
- </tbody>
71
- </table>
72
  </div>
73
  </div>
74
 
48
  <h3><?php _e('AdRotate is brought to you by', 'adrotate'); ?></h3>
49
  <div class="postbox-adrotate">
50
  <div class="inside">
51
+ <script>(function(d, s, id) {
52
+ var js, fjs = d.getElementsByTagName(s)[0];
53
+ if (d.getElementById(id)) return;
54
+ js = d.createElement(s); js.id = id;
55
+ js.src = "https://connect.facebook.net/en_US/sdk.js#xfbml=1&version=v2.5";
56
+ fjs.parentNode.insertBefore(js, fjs);
57
+ }(document, 'script', 'facebook-jssdk'));</script>
58
+ <p><center><div class="fb-page"
59
+ data-href="https://www.facebook.com/Arnandegans"
60
+ data-width="490"
61
+ data-adapt-container-width="true"
62
+ data-hide-cover="false"
63
+ data-show-facepile="false">
64
+ </div></center></p>
 
 
 
 
 
 
 
65
  </div>
66
  </div>
67
 
dashboard/info.php CHANGED
@@ -52,25 +52,22 @@ $data = get_option("adrotate_advert_status");
52
  <tbody>
53
  <tr class="first">
54
  <td colspan="2">
55
- <center><?php _e('Your donation helps to improve AdRotate. Consider writing a review if you like AdRotate. Also follow my Facebook page and twitter. Thank you!', 'adrotate-pro'); ?><br /><br />
56
  <center><a class="button-primary" href="https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=paypal%40ajdg%2enet&item_name=AdRotate%20Donation&no_shipping=0&no_note=0&tax=0&currency_code=EUR&bn=PP%2dDonationsBF&charset=UTF%2d8&amount=10" target="_blank">Donate &euro; 10 via Paypal</a> <a class="button" target="_blank" href="https://wordpress.org/support/view/plugin-reviews/adrotate?rate=5#postform">Write review on WordPress.org</a></center><br />
57
- </td>
58
- </tr>
59
-
60
- <tr class="first">
61
- <td class="first b">
62
- <div id="fb-root"></div>
63
  <script>(function(d, s, id) {
64
  var js, fjs = d.getElementsByTagName(s)[0];
65
  if (d.getElementById(id)) return;
66
  js = d.createElement(s); js.id = id;
67
- js.src = "//connect.facebook.net/en_US/sdk.js#xfbml=1&version=v2.5";
68
  fjs.parentNode.insertBefore(js, fjs);
69
- }(document, 'script', 'facebook-jssdk'));</script><center><div class="fb-like" data-href="https://www.facebook.com/Arnandegans/" data-width="250" data-layout="standard" data-action="like" data-show-faces="true" data-share="true"></div></center>
70
- </td>
71
-
72
- <td class="b">
73
- <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script><center><a href="https://twitter.com/arnandegans" class="twitter-follow-button" data-show-count="false" data-size="large" data-dnt="true"></a></center>
 
 
 
74
  </td>
75
  </tr>
76
  </tbody>
@@ -78,35 +75,6 @@ $data = get_option("adrotate_advert_status");
78
  </div>
79
  </div>
80
 
81
- <h3><?php _e('AdRotate News and Developer Blog', 'adrotate'); ?></h3>
82
- <div class="postbox-adrotate">
83
- <div class="inside">
84
- <?php
85
- wp_widget_rss_output(array(
86
- 'url' => array('http://meandmymac.net/feed/', 'http://ajdg.solutions/feed/'),
87
- 'title' => 'News',
88
- 'items' => 4,
89
- 'show_summary' => 1,
90
- 'show_author' => 0,
91
- 'show_date' => 1)
92
- );
93
- ?>
94
- </div>
95
- </div>
96
-
97
- </div>
98
- </div>
99
-
100
- <div id="postbox-container-3" class="postbox-container" style="width:50%;">
101
- <div id="side-sortables" class="meta-box-sortables ui-sortable">
102
-
103
- <h3><?php _e('Get more features with AdRotate Pro', 'adrotate'); ?></h3>
104
- <div class="postbox-adrotate">
105
- <div class="inside">
106
- <p><img src="<?php echo WP_CONTENT_URL; ?>/plugins/adrotate/images/adrotate-logo-60x60.png" alt="adrotate-logo-60x60" width="60" height="60" align="left" style="padding: 0 10px 10px 0;" /><?php _e('Benefit from extra features to reinforce your income with advertising campaigns. Make the most of your website with the powerful tools AdRotate Pro offers on top of the trusted features included in the free version.', 'adrotate'); ?> <?php _e('Want to know more about', 'adrotate'); ?> <a href="admin.php?page=adrotate-pro">AdRotate Pro</a>? <?php _e('Visit the', 'adrotate'); ?> <a href="https://ajdg.solutions/products/adrotate-for-wordpress/?pk_campaign=adrotatefree-infopage" target="_blank">AdRotate <?php _e('website', 'adrotate'); ?></a>.</p>
107
- </div>
108
- </div>
109
-
110
  <h3><?php _e('Buy AdRotate Professional', 'adrotate'); ?></h3>
111
  <div class="postbox-adrotate">
112
  <div class="inside">
@@ -116,12 +84,7 @@ $data = get_option("adrotate_advert_status");
116
  <p><h4><?php _e('Multi License', 'adrotate'); ?> (&euro; 99.00)</h4><?php _e(' For up to five WordPress installations.', 'adrotate'); ?> <a href="https://ajdg.solutions/cart/?add-to-cart=1128&pk_campaign=adrotatefree-infopage&pk_kwd=buy_multi" target="_blank"><?php _e('Buy now', 'adrotate'); ?> &raquo;</a></p>
117
  <p><h4><?php _e('Developer License', 'adrotate'); ?> (&euro; 299.00)</h4><?php _e('Unlimited WordPress installations and/or networks.', 'adrotate'); ?> <a href="https://ajdg.solutions/cart/?add-to-cart=1130&pk_campaign=adrotatefree-infopage&pk_kwd=buy_developer" target="_blank"><?php _e('Buy now', 'adrotate'); ?> &raquo;</a></p>
118
  <p><h4><?php _e('Compare licenses', 'adrotate'); ?></h4> <?php _e("Not sure which license is for you? Compare them...", 'adrotate'); ?> <a href="https://ajdg.solutions/products/adrotate-for-wordpress/?pk_campaign=adrotatefree-infopage&pk_kwd=compare_license" target="_blank"><?php _e('All Licenses', 'adrotate'); ?> &raquo;</a></p>
119
- </div>
120
- </div>
121
  <!--
122
- <h3><?php _e('Buy AdRotate Professional', 'adrotate'); ?></h3>
123
- <div class="postbox-adrotate">
124
- <div class="inside">
125
  <img src="<?php echo WP_CONTENT_URL; ?>/plugins/adrotate/images/adrotate-product.png" alt="adrotate-product" width="150" height="150" align="right" style="padding: 0 0 10px 10px;" />
126
  <p><h4><?php _e('Lifetime License', 'adrotate'); ?> (&euro; 59.00)</h4><?php _e('Single installation.', 'adrotate'); ?> <a href="https://ajdg.solutions/cart/?add-to-cart=1124&pk_campaign=adrotatefree-infopage&pk_kwd=buy_single" target="_blank"><?php _e('Buy now', 'adrotate'); ?> &raquo;</a></p>
127
  <p><h4><?php _e('Duo License', 'adrotate'); ?> (&euro; 29.00 p/year)</h4><?php _e('Up to 2 installations.', 'adrotate'); ?> <a href="https://ajdg.solutions/cart/?add-to-cart=1126&pk_campaign=adrotatefree-infopage&pk_kwd=buy_duo" target="_blank"><?php _e('Buy now', 'adrotate'); ?> &raquo;</a></p>
@@ -129,9 +92,9 @@ $data = get_option("adrotate_advert_status");
129
  <p><h4><?php _e('Developer License', 'adrotate'); ?> (&euro; 199.00 p/year)</h4><?php _e('Up to 25 installations or multisite networks.', 'adrotate'); ?> <a href="https://ajdg.solutions/cart/?add-to-cart=1130&pk_campaign=adrotatefree-infopage&pk_kwd=buy_developer" target="_blank"><?php _e('Buy now', 'adrotate'); ?> &raquo;</a></p>
130
  <p><em><?php _e('Subscriptions get 1 year access to updates, email support & AdRotate Geo.', 'adrotate'); ?></em></p>
131
  <p><h4><?php _e('Compare licenses', 'adrotate'); ?></h4> <?php _e("Not sure which license is for you?", 'adrotate'); ?> <a href="https://ajdg.solutions/products/adrotate-for-wordpress/?pk_campaign=adrotatefree-infopage&pk_kwd=compare_license" target="_blank"><?php _e('Compare Licenses', 'adrotate'); ?> &raquo;</a></p>
 
132
  </div>
133
  </div>
134
- -->
135
 
136
  <h3><?php _e('AdRotate is brought to you by', 'adrotate'); ?></h3>
137
  <div class="postbox-adrotate">
@@ -141,6 +104,35 @@ $data = get_option("adrotate_advert_status");
141
  </div>
142
  </div>
143
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
144
  </div>
145
  </div>
146
 
52
  <tbody>
53
  <tr class="first">
54
  <td colspan="2">
55
+ <center><?php _e('Consider writing a review if you like AdRotate. Also follow my Facebook page for updates about me and my plugins. Thank you!', 'adrotate-pro'); ?><br /><br />
56
  <center><a class="button-primary" href="https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=paypal%40ajdg%2enet&item_name=AdRotate%20Donation&no_shipping=0&no_note=0&tax=0&currency_code=EUR&bn=PP%2dDonationsBF&charset=UTF%2d8&amount=10" target="_blank">Donate &euro; 10 via Paypal</a> <a class="button" target="_blank" href="https://wordpress.org/support/view/plugin-reviews/adrotate?rate=5#postform">Write review on WordPress.org</a></center><br />
 
 
 
 
 
 
57
  <script>(function(d, s, id) {
58
  var js, fjs = d.getElementsByTagName(s)[0];
59
  if (d.getElementById(id)) return;
60
  js = d.createElement(s); js.id = id;
61
+ js.src = "https://connect.facebook.net/en_US/sdk.js#xfbml=1&version=v2.5";
62
  fjs.parentNode.insertBefore(js, fjs);
63
+ }(document, 'script', 'facebook-jssdk'));</script>
64
+ <p><center><div class="fb-page"
65
+ data-href="https://www.facebook.com/Arnandegans"
66
+ data-width="490"
67
+ data-adapt-container-width="true"
68
+ data-hide-cover="false"
69
+ data-show-facepile="false">
70
+ </div></center></p>
71
  </td>
72
  </tr>
73
  </tbody>
75
  </div>
76
  </div>
77
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
78
  <h3><?php _e('Buy AdRotate Professional', 'adrotate'); ?></h3>
79
  <div class="postbox-adrotate">
80
  <div class="inside">
84
  <p><h4><?php _e('Multi License', 'adrotate'); ?> (&euro; 99.00)</h4><?php _e(' For up to five WordPress installations.', 'adrotate'); ?> <a href="https://ajdg.solutions/cart/?add-to-cart=1128&pk_campaign=adrotatefree-infopage&pk_kwd=buy_multi" target="_blank"><?php _e('Buy now', 'adrotate'); ?> &raquo;</a></p>
85
  <p><h4><?php _e('Developer License', 'adrotate'); ?> (&euro; 299.00)</h4><?php _e('Unlimited WordPress installations and/or networks.', 'adrotate'); ?> <a href="https://ajdg.solutions/cart/?add-to-cart=1130&pk_campaign=adrotatefree-infopage&pk_kwd=buy_developer" target="_blank"><?php _e('Buy now', 'adrotate'); ?> &raquo;</a></p>
86
  <p><h4><?php _e('Compare licenses', 'adrotate'); ?></h4> <?php _e("Not sure which license is for you? Compare them...", 'adrotate'); ?> <a href="https://ajdg.solutions/products/adrotate-for-wordpress/?pk_campaign=adrotatefree-infopage&pk_kwd=compare_license" target="_blank"><?php _e('All Licenses', 'adrotate'); ?> &raquo;</a></p>
 
 
87
  <!--
 
 
 
88
  <img src="<?php echo WP_CONTENT_URL; ?>/plugins/adrotate/images/adrotate-product.png" alt="adrotate-product" width="150" height="150" align="right" style="padding: 0 0 10px 10px;" />
89
  <p><h4><?php _e('Lifetime License', 'adrotate'); ?> (&euro; 59.00)</h4><?php _e('Single installation.', 'adrotate'); ?> <a href="https://ajdg.solutions/cart/?add-to-cart=1124&pk_campaign=adrotatefree-infopage&pk_kwd=buy_single" target="_blank"><?php _e('Buy now', 'adrotate'); ?> &raquo;</a></p>
90
  <p><h4><?php _e('Duo License', 'adrotate'); ?> (&euro; 29.00 p/year)</h4><?php _e('Up to 2 installations.', 'adrotate'); ?> <a href="https://ajdg.solutions/cart/?add-to-cart=1126&pk_campaign=adrotatefree-infopage&pk_kwd=buy_duo" target="_blank"><?php _e('Buy now', 'adrotate'); ?> &raquo;</a></p>
92
  <p><h4><?php _e('Developer License', 'adrotate'); ?> (&euro; 199.00 p/year)</h4><?php _e('Up to 25 installations or multisite networks.', 'adrotate'); ?> <a href="https://ajdg.solutions/cart/?add-to-cart=1130&pk_campaign=adrotatefree-infopage&pk_kwd=buy_developer" target="_blank"><?php _e('Buy now', 'adrotate'); ?> &raquo;</a></p>
93
  <p><em><?php _e('Subscriptions get 1 year access to updates, email support & AdRotate Geo.', 'adrotate'); ?></em></p>
94
  <p><h4><?php _e('Compare licenses', 'adrotate'); ?></h4> <?php _e("Not sure which license is for you?", 'adrotate'); ?> <a href="https://ajdg.solutions/products/adrotate-for-wordpress/?pk_campaign=adrotatefree-infopage&pk_kwd=compare_license" target="_blank"><?php _e('Compare Licenses', 'adrotate'); ?> &raquo;</a></p>
95
+ -->
96
  </div>
97
  </div>
 
98
 
99
  <h3><?php _e('AdRotate is brought to you by', 'adrotate'); ?></h3>
100
  <div class="postbox-adrotate">
104
  </div>
105
  </div>
106
 
107
+ </div>
108
+ </div>
109
+
110
+ <div id="postbox-container-3" class="postbox-container" style="width:50%;">
111
+ <div id="side-sortables" class="meta-box-sortables ui-sortable">
112
+
113
+ <h3><?php _e('Get more features with AdRotate Pro', 'adrotate'); ?></h3>
114
+ <div class="postbox-adrotate">
115
+ <div class="inside">
116
+ <p><img src="<?php echo WP_CONTENT_URL; ?>/plugins/adrotate/images/logo-60x60.png" alt="AdRotate logo" width="60" height="60" align="left" style="padding: 0 10px 10px 0;" /><?php _e('Benefit from extra features to reinforce your income with advertising campaigns. Make the most of your website with the powerful tools AdRotate Pro offers on top of the trusted features included in the free version.', 'adrotate'); ?> <?php _e('Want to know more about', 'adrotate'); ?> <a href="admin.php?page=adrotate-pro">AdRotate Pro</a>? <?php _e('Visit the', 'adrotate'); ?> <a href="https://ajdg.solutions/products/adrotate-for-wordpress/?pk_campaign=adrotatefree-infopage" target="_blank">AdRotate <?php _e('website', 'adrotate'); ?></a>.</p>
117
+ </div>
118
+ </div>
119
+
120
+ <h3><?php _e('AdRotate News and Developer Blog', 'adrotate'); ?></h3>
121
+ <div class="postbox-adrotate">
122
+ <div class="inside">
123
+ <?php
124
+ wp_widget_rss_output(array(
125
+ 'url' => array('http://meandmymac.net/feed/', 'http://ajdg.solutions/feed/'),
126
+ 'title' => 'News',
127
+ 'items' => 6,
128
+ 'show_summary' => 1,
129
+ 'show_author' => 0,
130
+ 'show_date' => 1)
131
+ );
132
+ ?>
133
+ </div>
134
+ </div>
135
+
136
  </div>
137
  </div>
138
 
dashboard/settings/maintenance.php CHANGED
@@ -66,6 +66,12 @@
66
  <td valign="top"><?php _e('Current status of adverts', 'adrotate'); ?></td>
67
  <td><?php _e('Normal', 'adrotate'); ?>: <?php echo $adrotate_advert_status['normal']; ?>, <?php _e('Error', 'adrotate'); ?>: <?php echo $adrotate_advert_status['error']; ?>, <?php _e('Expired', 'adrotate'); ?>: <?php echo $adrotate_advert_status['expired']; ?>, <?php _e('Expires Soon', 'adrotate'); ?>: <?php echo $adrotate_advert_status['expiressoon']; ?>, <?php _e('Unknown', 'adrotate'); ?>: <?php echo $adrotate_advert_status['unknown']; ?>.</td>
68
  </tr>
 
 
 
 
 
 
69
  <tr>
70
  <td><?php _e('Ad evaluation next run:', 'adrotate'); ?></td>
71
  <td><?php if(!$adevaluate) _e('Not scheduled!', 'adrotate'); else echo date_i18n(get_option('date_format')." H:i", $adevaluate); ?></td>
66
  <td valign="top"><?php _e('Current status of adverts', 'adrotate'); ?></td>
67
  <td><?php _e('Normal', 'adrotate'); ?>: <?php echo $adrotate_advert_status['normal']; ?>, <?php _e('Error', 'adrotate'); ?>: <?php echo $adrotate_advert_status['error']; ?>, <?php _e('Expired', 'adrotate'); ?>: <?php echo $adrotate_advert_status['expired']; ?>, <?php _e('Expires Soon', 'adrotate'); ?>: <?php echo $adrotate_advert_status['expiressoon']; ?>, <?php _e('Unknown', 'adrotate'); ?>: <?php echo $adrotate_advert_status['unknown']; ?>.</td>
68
  </tr>
69
+ <tr>
70
+ <td><?php _e('Banners/assets Folder', 'adrotate-pro'); ?></td>
71
+ <td>
72
+ <?php echo (is_writable(ABSPATH.'wp-content/banners/')) ? '<span style="color:#009900;">'.__('Exists and appears writable', 'adrotate-pro').'</span>' : '<span style="color:#CC2900;">'.__('Not writable or does not exist', 'adrotate-pro').'</span>'; ?>
73
+ </td>
74
+ </tr>
75
  <tr>
76
  <td><?php _e('Ad evaluation next run:', 'adrotate'); ?></td>
77
  <td><?php if(!$adevaluate) _e('Not scheduled!', 'adrotate'); else echo date_i18n(get_option('date_format')." H:i", $adevaluate); ?></td>
images/{adrotate-logo-60x60.png → logo-60x60.png} RENAMED
File without changes
readme.txt CHANGED
@@ -3,8 +3,8 @@ Contributors: adegans
3
  Donate link: http://meandmymac.net/donate/?pk_campaign=adrotatefree-readme
4
  Tags: ads, banner, commercial, admin, advertise, adrotator, plugin, random, rotator, ad, advertising, advertisement, block, blocks, advertiser, publisher, adsense, geo, geolocation, geotarget, chitika, clickbank, broadstreet, banner manager,advert manager, campaign manager, export, import, telize, maxmind, referrer, email, menu, statistics, stats, report, advert, adverts, popular, best, great, 2014, geoselect, geobytes, schedules, schedule, monetize, header, widget, javascript, jquery, tracking, clicks, impressions, rotate, zone, zones, sidebar, footer, content, posts, pages, 2015
5
  Requires at least: 3.8
6
- Tested up to: 4.4
7
- Stable tag: 3.14.1
8
  License: GPLv3
9
 
10
  The popular choice for monetizing your website with adverts while keeping things simple. Start making money today!
@@ -91,16 +91,26 @@ You can also post your questions on the [forum](https://ajdg.solutions/forums/?p
91
 
92
  Be a Pro and go Pro. With [AdRotate Pro](https://ajdg.solutions/products/adrotate-for-wordpress/?pk_campaign=adrotatefree-readme)!
93
 
94
- = 3.14.1 FREE =
95
- * [change] Few dashboard updates, better wording and such
96
- * [change] Removed obsolete 'link' column from database
97
- * [i18n] Updated translation strings
98
-
99
- = 3.18.2 PRO =
100
- * [change] Tweaks to Geo Targeting settings
 
 
 
 
101
  * [change] Dashboard tweaks
102
- * [fix] Telize/GeoBytes not redirecting to AdRotate Geo properly
103
- * [i18n] Updated translation strings
 
 
 
 
 
 
104
 
105
  All recent changes are available on the [AdRotate website](https://ajdg.solutions/products/adrotate-for-wordpress/development/?pk_campaign=adrotatefree-readme).
106
 
@@ -108,10 +118,10 @@ NOTE: Unsolicited offers, parnterships, job offers, promotional emails or produc
108
 
109
  == Upgrade Notice ==
110
 
111
- = 3.14.1 FREE =
112
- * [change] Few dashboard updates, better wording and such
113
- * [change] Removed obsolete 'link' column from database
114
- * [i18n] Updated translation strings
115
 
116
  All recent changes are available on the [AdRotate website](https://ajdg.solutions/products/adrotate-for-wordpress/development/?pk_campaign=adrotatefree-readme).
117
 
3
  Donate link: http://meandmymac.net/donate/?pk_campaign=adrotatefree-readme
4
  Tags: ads, banner, commercial, admin, advertise, adrotator, plugin, random, rotator, ad, advertising, advertisement, block, blocks, advertiser, publisher, adsense, geo, geolocation, geotarget, chitika, clickbank, broadstreet, banner manager,advert manager, campaign manager, export, import, telize, maxmind, referrer, email, menu, statistics, stats, report, advert, adverts, popular, best, great, 2014, geoselect, geobytes, schedules, schedule, monetize, header, widget, javascript, jquery, tracking, clicks, impressions, rotate, zone, zones, sidebar, footer, content, posts, pages, 2015
5
  Requires at least: 3.8
6
+ Tested up to: 4.4.1
7
+ Stable tag: 3.14.2
8
  License: GPLv3
9
 
10
  The popular choice for monetizing your website with adverts while keeping things simple. Start making money today!
91
 
92
  Be a Pro and go Pro. With [AdRotate Pro](https://ajdg.solutions/products/adrotate-for-wordpress/?pk_campaign=adrotatefree-readme)!
93
 
94
+ = 3.14.2 FREE =
95
+ * [change] Better W3 Total Cache support
96
+ * [fix] Post injection not always showing with multiple groups
97
+ * [fix] Removed obsolete useragent column from database
98
+
99
+ = 3.19 PRO =
100
+ * [new] Post Injection extends to widgets
101
+ * [new] Page Injection extends to widgets
102
+ * [new] All new widgets for easier control and setup
103
+ * [new] AdRotate Geo API v3
104
+ * [new] AdRotate Update API v4
105
  * [change] Dashboard tweaks
106
+ * [change] Better W3 Total Cache support
107
+ * [fix] Post injection not always showing with multiple groups
108
+ * [fix] Better day recognition for schedules
109
+ * [fix] Correct schedule creation for renewing adverts
110
+ * [fix] Correct device icons for adverts in groups and schedules
111
+ * [fix] Removed obsolete useragent column from database
112
+ * [fix] Better use of WP_Error for Geo Targeting
113
+ * [fix] Better error reporting for Geo Targeting
114
 
115
  All recent changes are available on the [AdRotate website](https://ajdg.solutions/products/adrotate-for-wordpress/development/?pk_campaign=adrotatefree-readme).
116
 
118
 
119
  == Upgrade Notice ==
120
 
121
+ = 3.14.2 FREE =
122
+ * [change] Better W3 Total Cache support
123
+ * [fix] Post injection not always showing with multiple groups
124
+ * [fix] Removed obsolete useragent column from database
125
 
126
  All recent changes are available on the [AdRotate website](https://ajdg.solutions/products/adrotate-for-wordpress/development/?pk_campaign=adrotatefree-readme).
127