AdRotate Banner Manager - Version 4.0

Version Description

  • [new] Re-enable schedules from Maintenance
  • [change] moved tracker data back to it's own system
  • [change] Updated the database installer
  • [change] Don't count impressions for unknown IP addresses

All recent changes are available on the AdRotate website.

=

Download this release

Release Info

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

Code changes from version 3.19 to 4.0

adrotate-output.php CHANGED
@@ -738,6 +738,8 @@ function adrotate_notifications_dashboard() {
738
  echo ' </div>';
739
  echo '</div>';
740
  }
 
 
741
  }
742
 
743
  /*-------------------------------------------------------------
738
  echo ' </div>';
739
  echo '</div>';
740
  }
741
+
742
+ if(isset($_GET['tasks']) AND $_GET['tasks'] == 1) adrotate_check_schedules();
743
  }
744
 
745
  /*-------------------------------------------------------------
adrotate-setup.php CHANGED
@@ -124,7 +124,7 @@ function adrotate_deactivate_setup() {
124
  // Clear out wp_cron
125
  wp_clear_scheduled_hook('adrotate_notification');
126
  wp_clear_scheduled_hook('adrotate_evaluate_ads');
127
- wp_clear_scheduled_hook('adrotate_delete_transients');
128
  }
129
 
130
  /*-------------------------------------------------------------
@@ -155,6 +155,7 @@ function adrotate_uninstall_setup() {
155
  $wpdb->query("DROP TABLE IF EXISTS `{$wpdb->prefix}adrotate_stats_archive`");
156
  $wpdb->query("DROP TABLE IF EXISTS `{$wpdb->prefix}adrotate_schedule`");
157
  $wpdb->query("DROP TABLE IF EXISTS `{$wpdb->prefix}adrotate_transactions`");
 
158
 
159
  // Delete Options
160
  delete_option('adrotate_activate');
@@ -211,8 +212,8 @@ function adrotate_check_schedules() {
211
  wp_schedule_event($firstrun + 900, 'twicedaily', 'adrotate_evaluate_ads');
212
  }
213
 
214
- if(!wp_next_scheduled('adrotate_delete_transients')) { // Clear Tracker Data
215
- wp_schedule_event($firstrun + 1800, 'hourly', 'adrotate_delete_transients');
216
  }
217
  }
218
 
@@ -248,8 +249,6 @@ function adrotate_check_config() {
248
  if(!isset($config['stats']) OR ($config['stats'] < 0 AND $config['stats'] > 2)) $config['stats'] = 1;
249
  if(!isset($config['enable_loggedin_impressions']) OR ($config['enable_loggedin_impressions'] != 'Y' AND $config['enable_loggedin_impressions'] != 'N')) $config['enable_loggedin_impressions'] = 'Y';
250
  if(!isset($config['enable_loggedin_clicks']) OR ($config['enable_loggedin_clicks'] != 'Y' AND $config['enable_loggedin_clicks'] != 'N')) $config['enable_loggedin_clicks'] = 'Y';
251
- if(!isset($config['enable_clean_trackerdata']) OR ($config['enable_clean_trackerdata'] != 'Y' AND $config['enable_clean_trackerdata'] != 'N')) $config['enable_clean_trackerdata'] = 'Y';
252
- if(!wp_next_scheduled('adrotate_delete_transients')) wp_schedule_event(adrotate_now(), 'hourly', 'adrotate_delete_transients'); // Goes together with 'enable_clean_trackerdata' option if Y
253
  if(!isset($config['enable_geo'])) $config['enable_geo'] = 0;
254
  if(!isset($config['geo_email'])) $config['geo_email'] = '';
255
  if(!isset($config['geo_pass'])) $config['geo_pass'] = '';
@@ -535,8 +534,20 @@ function adrotate_database_install() {
535
  KEY `ad` (`ad`)
536
  ) ".$charset_collate.$engine.";");
537
  }
538
- }
539
 
 
 
 
 
 
 
 
 
 
 
 
 
 
540
 
541
  /*-------------------------------------------------------------
542
  Name: adrotate_check_upgrade
@@ -581,6 +592,23 @@ function adrotate_check_upgrade() {
581
  function adrotate_database_upgrade() {
582
  global $wpdb;
583
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
584
  $adrotate_db_version = get_option("adrotate_db_version");
585
 
586
  // Database: 24
@@ -835,22 +863,6 @@ function adrotate_database_upgrade() {
835
  // Database: 57
836
  // AdRotate: 3.15
837
  if($adrotate_db_version['current'] < 57) {
838
- require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
839
-
840
- $charset_collate = $engine = '';
841
- $found_tables = $wpdb->get_col("SHOW TABLES LIKE '{$wpdb->prefix}adrotate%';");
842
- if(!empty($wpdb->charset)) {
843
- $charset_collate .= " DEFAULT CHARACTER SET {$wpdb->charset}";
844
- }
845
- if($wpdb->has_cap('collation') AND !empty($wpdb->collate)) {
846
- $charset_collate .= " COLLATE {$wpdb->collate}";
847
- }
848
-
849
- $found_engine = $wpdb->get_var("SELECT ENGINE FROM `information_schema`.`TABLES` WHERE `TABLE_SCHEMA` = '".DB_NAME."' AND `TABLE_NAME` = '{$wpdb->prefix}posts';");
850
- if(strtolower($found_engine) == 'innodb') {
851
- $engine = ' ENGINE=InnoDB';
852
- }
853
-
854
  if(!in_array("{$wpdb->prefix}adrotate_stats_archive", $found_tables)) {
855
  dbDelta("CREATE TABLE `{$wpdb->prefix}adrotate_stats_archive` (
856
  `id` bigint(9) unsigned NOT NULL auto_increment,
@@ -883,22 +895,6 @@ function adrotate_database_upgrade() {
883
  adrotate_del_column("{$wpdb->prefix}adrotate", 'sortorder');
884
  adrotate_del_column("{$wpdb->prefix}adrotate_groups", 'sortorder');
885
 
886
- require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
887
-
888
- $charset_collate = $engine = '';
889
- $found_tables = $wpdb->get_col("SHOW TABLES LIKE '{$wpdb->prefix}adrotate%';");
890
- if(!empty($wpdb->charset)) {
891
- $charset_collate .= " DEFAULT CHARACTER SET {$wpdb->charset}";
892
- }
893
- if($wpdb->has_cap('collation') AND !empty($wpdb->collate)) {
894
- $charset_collate .= " COLLATE {$wpdb->collate}";
895
- }
896
-
897
- $found_engine = $wpdb->get_var("SELECT ENGINE FROM `information_schema`.`TABLES` WHERE `TABLE_SCHEMA` = '".DB_NAME."' AND `TABLE_NAME` = '{$wpdb->prefix}posts';");
898
- if(strtolower($found_engine) == 'innodb') {
899
- $engine = ' ENGINE=InnoDB';
900
- }
901
-
902
  if(!in_array("{$wpdb->prefix}adrotate_transactions", $found_tables)) {
903
  dbDelta("CREATE TABLE `{$wpdb->prefix}adrotate_transactions` (
904
  `id` mediumint(8) unsigned NOT NULL auto_increment,
@@ -928,6 +924,27 @@ function adrotate_database_upgrade() {
928
  adrotate_del_column("{$wpdb->prefix}adrotate_schedule", 'hourimpressions');
929
  }
930
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
931
  update_option("adrotate_db_version", array('current' => ADROTATE_DB_VERSION, 'previous' => $adrotate_db_version['current']));
932
  }
933
 
@@ -1106,6 +1123,12 @@ function adrotate_core_upgrade() {
1106
  delete_option('adrotate_responsive_required');
1107
  }
1108
 
 
 
 
 
 
 
1109
  update_option("adrotate_version", array('current' => ADROTATE_VERSION, 'previous' => $adrotate_version['current']));
1110
  }
1111
 
@@ -1123,8 +1146,8 @@ function adrotate_optimize_database() {
1123
  $now = adrotate_now();
1124
 
1125
  if($adrotate_db_timer < ($now - 86400)) {
1126
- dbDelta("OPTIMIZE TABLE `{$wpdb->prefix}adrotate`, `{$wpdb->prefix}adrotate_groups`, `{$wpdb->prefix}adrotate_linkmeta`, `{$wpdb->prefix}adrotate_stats`, `{$wpdb->prefix}adrotate_stats_archive`, `{$wpdb->prefix}adrotate_schedule`, `{$wpdb->prefix}adrotate_transactions`;");
1127
- dbDelta("REPAIR TABLE `{$wpdb->prefix}adrotate`, `{$wpdb->prefix}adrotate_groups`, `{$wpdb->prefix}adrotate_linkmeta`, `{$wpdb->prefix}adrotate_stats`, `{$wpdb->prefix}adrotate_stats_archive`, `{$wpdb->prefix}adrotate_schedule`, `{$wpdb->prefix}adrotate_transactions`;");
1128
  update_option('adrotate_db_timer', $now);
1129
  adrotate_return('adrotate-settings', 403, array('tab' => 'maintenance'));
1130
  } else {
@@ -1153,10 +1176,9 @@ function adrotate_cleanup_database() {
1153
  $wpdb->query("DELETE FROM `{$wpdb->prefix}adrotate_stats` WHERE `thetime` < $lastyear;");
1154
  }
1155
 
1156
- // Delete old tracker data
1157
- if(isset($_POST['adrotate_db_cleanup_trackerdata'])) {
1158
- adrotate_delete_transients();
1159
- }
1160
 
1161
  // Delete empty ads, groups and schedules
1162
  $wpdb->query("DELETE FROM `{$wpdb->prefix}adrotate` WHERE `type` = 'empty' OR `type` = 'a_empty';");
@@ -1190,17 +1212,18 @@ function adrotate_cleanup_database() {
1190
  }
1191
 
1192
  /*-------------------------------------------------------------
1193
- Name: adrotate_delete_transients
1194
- Purpose: Delete expired transients periodically
1195
- Since: 3.18
1196
  -------------------------------------------------------------*/
1197
- function adrotate_delete_transients() {
1198
  global $wpdb;
1199
 
1200
- $onedayonehour = adrotate_now() - 90000;
1201
-
1202
- $wpdb->query("DELETE FROM `{$wpdb->prefix}options` WHERE (`option_name` LIKE '\_transient\_timeout\_adrotate\_%' OR `option_name` LIKE '\_transient\_adrotate\_%') AND `option_value` < '$onedayonehour'");
1203
 
 
1204
  }
1205
 
1206
  /*-------------------------------------------------------------
124
  // Clear out wp_cron
125
  wp_clear_scheduled_hook('adrotate_notification');
126
  wp_clear_scheduled_hook('adrotate_evaluate_ads');
127
+ wp_clear_scheduled_hook('adrotate_empty_trackerdata');
128
  }
129
 
130
  /*-------------------------------------------------------------
155
  $wpdb->query("DROP TABLE IF EXISTS `{$wpdb->prefix}adrotate_stats_archive`");
156
  $wpdb->query("DROP TABLE IF EXISTS `{$wpdb->prefix}adrotate_schedule`");
157
  $wpdb->query("DROP TABLE IF EXISTS `{$wpdb->prefix}adrotate_transactions`");
158
+ $wpdb->query("DROP TABLE IF EXISTS `{$wpdb->prefix}adrotate_tracker`");
159
 
160
  // Delete Options
161
  delete_option('adrotate_activate');
212
  wp_schedule_event($firstrun + 900, 'twicedaily', 'adrotate_evaluate_ads');
213
  }
214
 
215
+ if(!wp_next_scheduled('adrotate_empty_trackerdata')) { // Periodically clean trackerdata
216
+ wp_schedule_event($firstrun + 1800, 'twicedaily', 'adrotate_empty_trackerdata');
217
  }
218
  }
219
 
249
  if(!isset($config['stats']) OR ($config['stats'] < 0 AND $config['stats'] > 2)) $config['stats'] = 1;
250
  if(!isset($config['enable_loggedin_impressions']) OR ($config['enable_loggedin_impressions'] != 'Y' AND $config['enable_loggedin_impressions'] != 'N')) $config['enable_loggedin_impressions'] = 'Y';
251
  if(!isset($config['enable_loggedin_clicks']) OR ($config['enable_loggedin_clicks'] != 'Y' AND $config['enable_loggedin_clicks'] != 'N')) $config['enable_loggedin_clicks'] = 'Y';
 
 
252
  if(!isset($config['enable_geo'])) $config['enable_geo'] = 0;
253
  if(!isset($config['geo_email'])) $config['geo_email'] = '';
254
  if(!isset($config['geo_pass'])) $config['geo_pass'] = '';
534
  KEY `ad` (`ad`)
535
  ) ".$charset_collate.$engine.";");
536
  }
 
537
 
538
+ if(!in_array("{$wpdb->prefix}adrotate_tracker", $found_tables)) {
539
+ dbDelta("CREATE TABLE `{$wpdb->prefix}adrotate_tracker` (
540
+ `id` bigint(9) unsigned NOT NULL auto_increment,
541
+ `ipaddress` varchar(15) NOT NULL default '0',
542
+ `timer` int(15) unsigned NOT NULL default '0',
543
+ `bannerid` int(15) unsigned NOT NULL default '0',
544
+ `stat` char(1) NOT NULL default 'c',
545
+ PRIMARY KEY (`id`),
546
+ KEY `ipaddress` (`ipaddress`),
547
+ KEY `timer` (`timer`)
548
+ ) ".$charset_collate.$engine.";");
549
+ }
550
+ }
551
 
552
  /*-------------------------------------------------------------
553
  Name: adrotate_check_upgrade
592
  function adrotate_database_upgrade() {
593
  global $wpdb;
594
 
595
+ require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
596
+
597
+ // Database type and specs
598
+ $charset_collate = $engine = '';
599
+ $found_tables = $wpdb->get_col("SHOW TABLES LIKE '{$wpdb->prefix}adrotate%';");
600
+ if(!empty($wpdb->charset)) {
601
+ $charset_collate .= " DEFAULT CHARACTER SET {$wpdb->charset}";
602
+ }
603
+ if($wpdb->has_cap('collation') AND !empty($wpdb->collate)) {
604
+ $charset_collate .= " COLLATE {$wpdb->collate}";
605
+ }
606
+
607
+ $found_engine = $wpdb->get_var("SELECT ENGINE FROM `information_schema`.`TABLES` WHERE `TABLE_SCHEMA` = '".DB_NAME."' AND `TABLE_NAME` = '{$wpdb->prefix}posts';");
608
+ if(strtolower($found_engine) == 'innodb') {
609
+ $engine = ' ENGINE=InnoDB';
610
+ }
611
+
612
  $adrotate_db_version = get_option("adrotate_db_version");
613
 
614
  // Database: 24
863
  // Database: 57
864
  // AdRotate: 3.15
865
  if($adrotate_db_version['current'] < 57) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
866
  if(!in_array("{$wpdb->prefix}adrotate_stats_archive", $found_tables)) {
867
  dbDelta("CREATE TABLE `{$wpdb->prefix}adrotate_stats_archive` (
868
  `id` bigint(9) unsigned NOT NULL auto_increment,
895
  adrotate_del_column("{$wpdb->prefix}adrotate", 'sortorder');
896
  adrotate_del_column("{$wpdb->prefix}adrotate_groups", 'sortorder');
897
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
898
  if(!in_array("{$wpdb->prefix}adrotate_transactions", $found_tables)) {
899
  dbDelta("CREATE TABLE `{$wpdb->prefix}adrotate_transactions` (
900
  `id` mediumint(8) unsigned NOT NULL auto_increment,
924
  adrotate_del_column("{$wpdb->prefix}adrotate_schedule", 'hourimpressions');
925
  }
926
 
927
+ // Database: 62
928
+ // AdRotate: 4.0
929
+ if($adrotate_db_version['current'] < 62) {
930
+ // Make sure the table really is gone before creating a new one!
931
+ $wpdb->query("DROP TABLE IF EXISTS `{$wpdb->prefix}adrotate_tracker`");
932
+
933
+ dbDelta("CREATE TABLE `{$wpdb->prefix}adrotate_tracker` (
934
+ `id` bigint(9) unsigned NOT NULL auto_increment,
935
+ `ipaddress` varchar(15) NOT NULL default '0',
936
+ `timer` int(15) unsigned NOT NULL default '0',
937
+ `bannerid` int(15) unsigned NOT NULL default '0',
938
+ `stat` char(1) NOT NULL default 'c',
939
+ PRIMARY KEY (`id`),
940
+ KEY `ipaddress` (`ipaddress`),
941
+ KEY `timer` (`timer`)
942
+ ) ".$charset_collate.$engine.";");
943
+
944
+ $wpdb->query("DELETE FROM `{$wpdb->prefix}options` WHERE `option_name` LIKE '\_transient\_adrotate\_%'");
945
+ $wpdb->query("DELETE FROM `{$wpdb->prefix}options` WHERE `option_name` LIKE '\_transient\_timeout\_adrotate\_%'");
946
+ }
947
+
948
  update_option("adrotate_db_version", array('current' => ADROTATE_DB_VERSION, 'previous' => $adrotate_db_version['current']));
949
  }
950
 
1123
  delete_option('adrotate_responsive_required');
1124
  }
1125
 
1126
+ // 4.0
1127
+ if($adrotate_version['current'] < 388) {
1128
+ wp_clear_scheduled_hook('adrotate_delete_transients');
1129
+ if(!wp_next_scheduled('adrotate_empty_trackerdata')) wp_schedule_event($firstrun, 'hourly', 'adrotate_empty_trackerdata');
1130
+ }
1131
+
1132
  update_option("adrotate_version", array('current' => ADROTATE_VERSION, 'previous' => $adrotate_version['current']));
1133
  }
1134
 
1146
  $now = adrotate_now();
1147
 
1148
  if($adrotate_db_timer < ($now - 86400)) {
1149
+ dbDelta("OPTIMIZE TABLE `{$wpdb->prefix}adrotate`, `{$wpdb->prefix}adrotate_groups`, `{$wpdb->prefix}adrotate_linkmeta`, `{$wpdb->prefix}adrotate_stats`, `{$wpdb->prefix}adrotate_stats_archive`, `{$wpdb->prefix}adrotate_tracker`, `{$wpdb->prefix}adrotate_schedule`, `{$wpdb->prefix}adrotate_transactions`;");
1150
+ dbDelta("REPAIR TABLE `{$wpdb->prefix}adrotate`, `{$wpdb->prefix}adrotate_groups`, `{$wpdb->prefix}adrotate_linkmeta`, `{$wpdb->prefix}adrotate_stats`, `{$wpdb->prefix}adrotate_stats_archive`, `{$wpdb->prefix}adrotate_tracker`, `{$wpdb->prefix}adrotate_schedule`, `{$wpdb->prefix}adrotate_transactions`;");
1151
  update_option('adrotate_db_timer', $now);
1152
  adrotate_return('adrotate-settings', 403, array('tab' => 'maintenance'));
1153
  } else {
1176
  $wpdb->query("DELETE FROM `{$wpdb->prefix}adrotate_stats` WHERE `thetime` < $lastyear;");
1177
  }
1178
 
1179
+ // Clean up Tracker data
1180
+ $yesterday = $now - 86400;
1181
+ $wpdb->query("DELETE FROM `{$wpdb->prefix}adrotate_tracker` WHERE `timer` < $yesterday;");
 
1182
 
1183
  // Delete empty ads, groups and schedules
1184
  $wpdb->query("DELETE FROM `{$wpdb->prefix}adrotate` WHERE `type` = 'empty' OR `type` = 'a_empty';");
1212
  }
1213
 
1214
  /*-------------------------------------------------------------
1215
+ Name: adrotate_empty_trackerdata
1216
+ Purpose: Removes old statistics
1217
+ Since: 4.0
1218
  -------------------------------------------------------------*/
1219
+ function adrotate_empty_trackerdata() {
1220
  global $wpdb;
1221
 
1222
+ $now = adrotate_now();
1223
+ $clicks = $now - 86400;
1224
+ $impressions = $now - 3600;
1225
 
1226
+ $wpdb->query("DELETE FROM `{$wpdb->prefix}adrotate_tracker` WHERE (`timer` < {$clicks} AND `stat` = 'c') OR (`timer` < {$impressions} AND `stat` = 'i') OR `ipaddress` = 'unknown' OR `ipaddress` = '';");
1227
  }
1228
 
1229
  /*-------------------------------------------------------------
adrotate-statistics.php CHANGED
@@ -11,10 +11,7 @@
11
 
12
  /*-------------------------------------------------------------
13
  Name: adrotate_draw_graph
14
-
15
  Purpose: Draw graph using ElyCharts
16
- Receive: $id, $labels, $clicks, $impressions
17
- Return: -None-
18
  Since: 3.8
19
  -------------------------------------------------------------*/
20
  function adrotate_draw_graph($id = 0, $labels = 0, $clicks = 0, $impressions = 0) {
@@ -84,10 +81,7 @@ function adrotate_draw_graph($id = 0, $labels = 0, $clicks = 0, $impressions = 0
84
 
85
  /*-------------------------------------------------------------
86
  Name: adrotate_stats
87
-
88
  Purpose: Generate latest number of clicks and impressions
89
- Receive: $ad, $when
90
- Return: $stats
91
  Since: 3.8
92
  -------------------------------------------------------------*/
93
  function adrotate_stats($ad, $when = 0, $until = 0) {
@@ -124,10 +118,7 @@ function adrotate_stats($ad, $when = 0, $until = 0) {
124
 
125
  /*-------------------------------------------------------------
126
  Name: adrotate_stats_nav
127
-
128
  Purpose: Create browsable links for graph
129
- Receive: $type, $id, $month, $year
130
- Return: $nav
131
  Since: 3.8
132
  -------------------------------------------------------------*/
133
  function adrotate_stats_nav($type, $id, $month, $year) {
@@ -159,10 +150,7 @@ function adrotate_stats_nav($type, $id, $month, $year) {
159
 
160
  /*-------------------------------------------------------------
161
  Name: adrotate_stats_graph
162
-
163
  Purpose: Generate graph
164
- Receive: $type, $id, $chartid, $start, $end
165
- Return: $output
166
  Since: 3.8
167
  -------------------------------------------------------------*/
168
  function adrotate_stats_graph($type, $id, $chartid, $start, $end) {
@@ -234,10 +222,7 @@ function adrotate_stats_graph($type, $id, $chartid, $start, $end) {
234
 
235
  /*-------------------------------------------------------------
236
  Name: adrotate_ctr
237
-
238
  Purpose: Calculate Click-Through-Rate
239
- Receive: $clicks, $impressions, $round
240
- Return: $ctr
241
  Since: 3.7
242
  -------------------------------------------------------------*/
243
  function adrotate_ctr($clicks = 0, $impressions = 0, $round = 2) {
@@ -253,10 +238,7 @@ function adrotate_ctr($clicks = 0, $impressions = 0, $round = 2) {
253
 
254
  /*-------------------------------------------------------------
255
  Name: adrotate_date_start
256
-
257
  Purpose: Get and return the localized UNIX time for the current hour, day and start of the week
258
- Receive: $what
259
- Return: int
260
  Since: 3.8.5.1
261
  -------------------------------------------------------------*/
262
  function adrotate_date_start($what) {
@@ -298,10 +280,7 @@ function adrotate_date_start($what) {
298
 
299
  /*-------------------------------------------------------------
300
  Name: adrotate_now
301
-
302
  Purpose: Get and return the localized UNIX time for "now"
303
- Receive: -None-
304
- Return: int
305
  Since: 3.8.6.2
306
  -------------------------------------------------------------*/
307
  function adrotate_now() {
@@ -310,10 +289,7 @@ function adrotate_now() {
310
 
311
  /*-------------------------------------------------------------
312
  Name: adrotate_count_impression
313
-
314
  Purpose: Count Impressions where needed
315
- Receive: $ad, $group
316
- Return: -None-
317
  Since: 3.10.12
318
  -------------------------------------------------------------*/
319
  function adrotate_count_impression($ad, $group = 0, $blog_id = 0) {
@@ -330,31 +306,25 @@ function adrotate_count_impression($ad, $group = 0, $blog_id = 0) {
330
  $impression_timer = $now - $adrotate_config['impression_timer'];
331
  }
332
 
333
- $transientkey = "adrotate_impression_".md5($ad.$remote_ip);
334
- $saved_timer = get_transient($transientkey);
335
- if(false === $saved_timer) {
336
- $saved_timer = 0;
337
- }
338
-
339
- if($saved_timer < $impression_timer AND adrotate_is_human()) {
340
- $stats = $wpdb->get_var($wpdb->prepare("SELECT `id` FROM `{$wpdb->prefix}adrotate_stats` WHERE `ad` = %d AND `group` = %d AND `thetime` = {$hour};", $ad, $group));
341
- if($stats > 0) {
342
- $wpdb->query("UPDATE `{$wpdb->prefix}adrotate_stats` SET `impressions` = `impressions` + 1 WHERE `id` = {$stats};");
343
- } else {
344
- $wpdb->insert($wpdb->prefix.'adrotate_stats', array('ad' => $ad, 'group' => $group, 'thetime' => $hour, 'clicks' => 0, 'impressions' => 1));
345
  }
346
-
347
- set_transient($transientkey, $now, $adrotate_config['impression_timer']);
348
  }
349
  }
350
  }
351
 
352
  /*-------------------------------------------------------------
353
  Name: adrotate_impression_callback
354
-
355
  Purpose: Register a impression for dynamic groups
356
- Receive: $_POST
357
- Return: -None-
358
  Since: 3.10.14
359
  -------------------------------------------------------------*/
360
  function adrotate_impression_callback() {
@@ -380,10 +350,7 @@ function adrotate_impression_callback() {
380
 
381
  /*-------------------------------------------------------------
382
  Name: adrotate_click_callback
383
-
384
  Purpose: Register clicks for clicktracking
385
- Receive: $_POST
386
- Return: -None-
387
  Since: 3.10.14
388
  -------------------------------------------------------------*/
389
  function adrotate_click_callback() {
@@ -417,12 +384,7 @@ function adrotate_click_callback() {
417
  $click_timer = $now - $adrotate_config['click_timer'];
418
  }
419
 
420
- $transientkey = "adrotate_click_".md5($ad.$remote_ip);
421
- $saved_timer = get_transient($transientkey);
422
- if(false === $saved_timer) {
423
- $saved_timer = 0;
424
- }
425
-
426
  if($saved_timer < $click_timer) {
427
  $stats = $wpdb->get_var($wpdb->prepare("SELECT `id` FROM `{$wpdb->prefix}adrotate_stats` WHERE `ad` = %d AND `group` = %d AND `thetime` = {$hour};", $ad, $group));
428
  if($stats > 0) {
@@ -431,7 +393,7 @@ function adrotate_click_callback() {
431
  $wpdb->insert($wpdb->prefix.'adrotate_stats', array('ad' => $ad, 'group' => $group, 'thetime' => $hour, 'clicks' => 1, 'impressions' => 1));
432
  }
433
 
434
- set_transient($transientkey, $now, $adrotate_config['click_timer']);
435
  }
436
  }
437
  }
11
 
12
  /*-------------------------------------------------------------
13
  Name: adrotate_draw_graph
 
14
  Purpose: Draw graph using ElyCharts
 
 
15
  Since: 3.8
16
  -------------------------------------------------------------*/
17
  function adrotate_draw_graph($id = 0, $labels = 0, $clicks = 0, $impressions = 0) {
81
 
82
  /*-------------------------------------------------------------
83
  Name: adrotate_stats
 
84
  Purpose: Generate latest number of clicks and impressions
 
 
85
  Since: 3.8
86
  -------------------------------------------------------------*/
87
  function adrotate_stats($ad, $when = 0, $until = 0) {
118
 
119
  /*-------------------------------------------------------------
120
  Name: adrotate_stats_nav
 
121
  Purpose: Create browsable links for graph
 
 
122
  Since: 3.8
123
  -------------------------------------------------------------*/
124
  function adrotate_stats_nav($type, $id, $month, $year) {
150
 
151
  /*-------------------------------------------------------------
152
  Name: adrotate_stats_graph
 
153
  Purpose: Generate graph
 
 
154
  Since: 3.8
155
  -------------------------------------------------------------*/
156
  function adrotate_stats_graph($type, $id, $chartid, $start, $end) {
222
 
223
  /*-------------------------------------------------------------
224
  Name: adrotate_ctr
 
225
  Purpose: Calculate Click-Through-Rate
 
 
226
  Since: 3.7
227
  -------------------------------------------------------------*/
228
  function adrotate_ctr($clicks = 0, $impressions = 0, $round = 2) {
238
 
239
  /*-------------------------------------------------------------
240
  Name: adrotate_date_start
 
241
  Purpose: Get and return the localized UNIX time for the current hour, day and start of the week
 
 
242
  Since: 3.8.5.1
243
  -------------------------------------------------------------*/
244
  function adrotate_date_start($what) {
280
 
281
  /*-------------------------------------------------------------
282
  Name: adrotate_now
 
283
  Purpose: Get and return the localized UNIX time for "now"
 
 
284
  Since: 3.8.6.2
285
  -------------------------------------------------------------*/
286
  function adrotate_now() {
289
 
290
  /*-------------------------------------------------------------
291
  Name: adrotate_count_impression
 
292
  Purpose: Count Impressions where needed
 
 
293
  Since: 3.10.12
294
  -------------------------------------------------------------*/
295
  function adrotate_count_impression($ad, $group = 0, $blog_id = 0) {
306
  $impression_timer = $now - $adrotate_config['impression_timer'];
307
  }
308
 
309
+ if($remote_ip != "unknown" AND !empty($remote_ip)) {
310
+ $saved_timer = $wpdb->get_var($wpdb->prepare("SELECT `timer` FROM `".$wpdb->prefix."adrotate_tracker` WHERE `ipaddress` = '%s' AND `stat` = 'i' AND `bannerid` = %d ORDER BY `timer` DESC LIMIT 1;", $remote_ip, $ad));
311
+ if($saved_timer < $impression_timer AND adrotate_is_human()) {
312
+ $stats = $wpdb->get_var($wpdb->prepare("SELECT `id` FROM `{$wpdb->prefix}adrotate_stats` WHERE `ad` = %d AND `group` = %d AND `thetime` = {$hour};", $ad, $group));
313
+ if($stats > 0) {
314
+ $wpdb->query("UPDATE `{$wpdb->prefix}adrotate_stats` SET `impressions` = `impressions` + 1 WHERE `id` = {$stats};");
315
+ } else {
316
+ $wpdb->insert($wpdb->prefix.'adrotate_stats', array('ad' => $ad, 'group' => $group, 'thetime' => $hour, 'clicks' => 0, 'impressions' => 1));
317
+ }
318
+
319
+ $wpdb->insert($wpdb->prefix."adrotate_tracker", array('ipaddress' => $remote_ip, 'timer' => $now, 'bannerid' => $ad, 'stat' => 'i'));
 
320
  }
 
 
321
  }
322
  }
323
  }
324
 
325
  /*-------------------------------------------------------------
326
  Name: adrotate_impression_callback
 
327
  Purpose: Register a impression for dynamic groups
 
 
328
  Since: 3.10.14
329
  -------------------------------------------------------------*/
330
  function adrotate_impression_callback() {
350
 
351
  /*-------------------------------------------------------------
352
  Name: adrotate_click_callback
 
353
  Purpose: Register clicks for clicktracking
 
 
354
  Since: 3.10.14
355
  -------------------------------------------------------------*/
356
  function adrotate_click_callback() {
384
  $click_timer = $now - $adrotate_config['click_timer'];
385
  }
386
 
387
+ $saved_timer = $wpdb->get_var($wpdb->prepare("SELECT `timer` FROM `".$wpdb->prefix."adrotate_tracker` WHERE `ipaddress` = '%s' AND `stat` = 'c' AND `bannerid` = %d ORDER BY `timer` DESC LIMIT 1;", $remote_ip, $ad));
 
 
 
 
 
388
  if($saved_timer < $click_timer) {
389
  $stats = $wpdb->get_var($wpdb->prepare("SELECT `id` FROM `{$wpdb->prefix}adrotate_stats` WHERE `ad` = %d AND `group` = %d AND `thetime` = {$hour};", $ad, $group));
390
  if($stats > 0) {
393
  $wpdb->insert($wpdb->prefix.'adrotate_stats', array('ad' => $ad, 'group' => $group, 'thetime' => $hour, 'clicks' => 1, 'impressions' => 1));
394
  }
395
 
396
+ $wpdb->insert($wpdb->prefix.'adrotate_tracker', array('ipaddress' => $remote_ip, 'timer' => $now, 'bannerid' => $ad, 'stat' => 'c'));
397
  }
398
  }
399
  }
adrotate.php CHANGED
@@ -7,7 +7,7 @@ Author URI: http://ajdg.solutions/?utm_campaign=homepage&utm_medium=plugin-info&
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.19
11
  License: GPLv3
12
  */
13
 
@@ -22,9 +22,9 @@ License: GPLv3
22
  ------------------------------------------------------------------------------------ */
23
 
24
  /*--- AdRotate values ---------------------------------------*/
25
- define("ADROTATE_DISPLAY", '3.19');
26
- define("ADROTATE_VERSION", 387);
27
- define("ADROTATE_DB_VERSION", 61);
28
  /*-----------------------------------------------------------*/
29
 
30
  /*--- Load Files --------------------------------------------*/
@@ -399,7 +399,7 @@ function adrotate_options() {
399
 
400
  $adevaluate = wp_next_scheduled('adrotate_evaluate_ads');
401
  $adschedule = wp_next_scheduled('adrotate_notification');
402
- $transients = wp_next_scheduled('adrotate_delete_transients');
403
 
404
  include("dashboard/settings/maintenance.php");
405
  } elseif($active_tab == 'license') {
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: 4.0
11
  License: GPLv3
12
  */
13
 
22
  ------------------------------------------------------------------------------------ */
23
 
24
  /*--- AdRotate values ---------------------------------------*/
25
+ define("ADROTATE_DISPLAY", '4.0');
26
+ define("ADROTATE_VERSION", 388);
27
+ define("ADROTATE_DB_VERSION", 62);
28
  /*-----------------------------------------------------------*/
29
 
30
  /*--- Load Files --------------------------------------------*/
399
 
400
  $adevaluate = wp_next_scheduled('adrotate_evaluate_ads');
401
  $adschedule = wp_next_scheduled('adrotate_notification');
402
+ $tracker = wp_next_scheduled('adrotate_empty_trackerdata');
403
 
404
  include("dashboard/settings/maintenance.php");
405
  } elseif($active_tab == 'license') {
dashboard/publisher/adverts-disabled.php CHANGED
@@ -44,6 +44,7 @@
44
  </thead>
45
  <tbody>
46
  <?php
 
47
  foreach($disabled as $banner) {
48
  $stats = adrotate_stats($banner['id']);
49
  $grouplist = adrotate_ad_is_in_groups($banner['id']);
44
  </thead>
45
  <tbody>
46
  <?php
47
+ $class = '';
48
  foreach($disabled as $banner) {
49
  $stats = adrotate_stats($banner['id']);
50
  $grouplist = adrotate_ad_is_in_groups($banner['id']);
dashboard/publisher/adverts-error.php CHANGED
@@ -52,12 +52,12 @@
52
  echo "</pre></td></tr>";
53
  }
54
 
55
- $errorclass = '';
56
- if($banner['type'] == 'error') $errorclass = ' row_yellow';
57
- if($banner['type'] == 'expired') $errorclass = ' row_red';
58
- if($banner['type'] == '2days') $errorclass = ' row_orange';
59
  ?>
60
- <tr id='adrotateindex' class='<?php echo $errorclass; ?>'>
61
  <th class="check-column"><input type="checkbox" name="errorbannercheck[]" value="<?php echo $banner['id']; ?>" /></th>
62
  <td><center><?php echo $banner['id'];?></center></td>
63
  <td><strong><a class="row-title" href="<?php echo admin_url("/admin.php?page=adrotate-ads&view=edit&ad=".$banner['id']);?>" title="<?php _e('Edit', 'adrotate'); ?>"><?php echo stripslashes(html_entity_decode($banner['title']));?></a></strong> <?php if($adrotate_config['stats'] == 1 AND $banner['type'] != 'error') { ?>- <a href="<?php echo admin_url('/admin.php?page=adrotate-ads&view=report&ad='.$banner['id']);?>" title="<?php _e('Stats', 'adrotate'); ?>"><?php _e('Stats', 'adrotate'); ?></a><?php } ?><span style="color:#999;"><?php if(strlen($grouplist) > 0) echo '<br /><span style="font-weight:bold;">'.__('Groups:', 'adrotate').'</span> '.$grouplist; ?></span></td>
52
  echo "</pre></td></tr>";
53
  }
54
 
55
+ $class = '';
56
+ if($banner['type'] == 'error') $class = ' row_yellow';
57
+ if($banner['type'] == 'expired') $class = ' row_red';
58
+ if($banner['type'] == '2days') $class = ' row_orange';
59
  ?>
60
+ <tr id='adrotateindex' class='<?php echo $class; ?>'>
61
  <th class="check-column"><input type="checkbox" name="errorbannercheck[]" value="<?php echo $banner['id']; ?>" /></th>
62
  <td><center><?php echo $banner['id'];?></center></td>
63
  <td><strong><a class="row-title" href="<?php echo admin_url("/admin.php?page=adrotate-ads&view=edit&ad=".$banner['id']);?>" title="<?php _e('Edit', 'adrotate'); ?>"><?php echo stripslashes(html_entity_decode($banner['title']));?></a></strong> <?php if($adrotate_config['stats'] == 1 AND $banner['type'] != 'error') { ?>- <a href="<?php echo admin_url('/admin.php?page=adrotate-ads&view=report&ad='.$banner['id']);?>" title="<?php _e('Stats', 'adrotate'); ?>"><?php _e('Stats', 'adrotate'); ?></a><?php } ?><span style="color:#999;"><?php if(strlen($grouplist) > 0) echo '<br /><span style="font-weight:bold;">'.__('Groups:', 'adrotate').'</span> '.$grouplist; ?></span></td>
dashboard/settings/maintenance.php CHANGED
@@ -29,7 +29,6 @@
29
  <td>
30
  <input type="submit" id="post-role-submit" name="adrotate_db_cleanup_submit" value="<?php _e('Clean-up Database', 'adrotate'); ?>" class="button-secondary" onclick="return confirm('<?php _e('You are about to clean up your database. This may delete expired schedules and older statistics.', 'adrotate'); ?>\n\n<?php _e('Are you sure you want to continue?', 'adrotate'); ?>\n\n<?php _e('This might take a while and may slow down your site during this action!', 'adrotate'); ?>\n\n<?php _e('OK to continue, CANCEL to stop.', 'adrotate'); ?>')" /><br />
31
  <label for="adrotate_db_cleanup_statistics"><input type="checkbox" name="adrotate_db_cleanup_statistics" value="1" /> <?php _e('Delete stats older than 356 days (Optional).', 'adrotate'); ?></label><br />
32
- <label for="adrotate_db_cleanup_trackerdata"><input type="checkbox" name="adrotate_db_cleanup_trackerdata" value="1" /> <?php _e('Delete old tracker data. (Does nothing if you use a memcached plugin)', 'adrotate-pro'); ?></label><br />
33
  <span class="description"><?php _e('For when you create an advert, group or schedule and it does not save or keep changes you make.', 'adrotate-pro'); ?><br /><?php _e('Additionally you can clean up old schedules, tracker data and/or statistics. This will improve the speed of your site.', 'adrotate-pro'); ?></span>
34
  </td>
35
  </tr>
@@ -51,7 +50,7 @@
51
  <td>
52
  <input type="checkbox" name="adrotate_debug" <?php if($adrotate_debug['general'] == true) { ?>checked="checked" <?php } ?> /> General - <span class="description"><?php _e('Troubleshoot ads and how they are selected. Visible on the front-end.', 'adrotate'); ?></span><br />
53
  <input type="checkbox" name="adrotate_debug_publisher" <?php if($adrotate_debug['publisher'] == true) { ?>checked="checked" <?php } ?> /> Publisher - <span class="description"><?php _e('View advert specs and (some) stats in the dashboard.', 'adrotate'); ?></span><br />
54
- <input type="checkbox" name="adrotate_debug_timers" <?php if($adrotate_debug['timers'] == true) { ?>checked="checked" <?php } ?> /> Clicktracking - <span class="description"><?php _e('Disable timers for clicks and impressions and enable a alert window for clicktracking.', 'adrotate'); ?></span><br />
55
  <input type="checkbox" name="adrotate_debug_track" <?php if($adrotate_debug['track'] == true) { ?>checked="checked" <?php } ?> /> Tracking Encryption - <span class="description"><?php _e('Temporarily disable encryption on the redirect url.', 'adrotate'); ?></span><br />
56
  </td>
57
  </tr>
@@ -76,8 +75,14 @@
76
  <tr>
77
  <th width="15%"><?php _e('Advert evaluation', 'adrotate'); ?></th>
78
  <td><?php if(!$adevaluate) '<span style="color:#CC2900;">'._e('Not scheduled! Re-activate the plugin from the plugins page.', 'adrotate-pro').'</span>'; else echo '<span style="color:#009900;">'.date_i18n(get_option('date_format')." H:i", $adevaluate).'</span>'; ?></td>
79
- <th width="15%"><?php _e('Clean Transients', 'adrotate'); ?></th>
80
- <td><?php if(!$transients) '<span style="color:#CC2900;">'._e('Not scheduled! Re-activate the plugin from the plugins page.', 'adrotate').'</span>'; else echo '<span style="color:#009900;">'.date_i18n(get_option('date_format')." H:i", $transients).'</span>'; ?></td>
 
 
 
 
 
 
81
  </tr>
82
  </table>
83
 
@@ -91,10 +96,9 @@
91
  <td><?php _e('Current:', 'adrotate'); ?> <?php echo '<span style="color:#009900;">'.$adrotate_db_version['current'].'</span>'; ?> <?php if($adrotate_db_version['current'] != ADROTATE_DB_VERSION) { echo '<span style="color:#CC2900;">'; _e('Should be:', 'adrotate'); echo ' '.ADROTATE_DB_VERSION; echo '</span>'; } ?><br /><?php _e('Previous:', 'adrotate'); ?> <?php echo $adrotate_db_version['previous']; ?></td>
92
  </tr>
93
  <tr>
94
- <th valign="top">Manual upgrade</th>
95
  <td colspan="3">
96
- <a class="button" href="admin.php?page=adrotate&upgrade=1" onclick="return confirm('<?php _e('YOU ARE ABOUT TO DO A MANUAL UPDATE FOR ADROTATE.', 'adrotate'); ?>\n<?php _e('Make sure you have a database backup!', 'adrotate'); ?>\n\n<?php _e('This might take a while and may slow down your site during this action!', 'adrotate'); ?>\n\n<?php _e('OK to continue, CANCEL to stop.', 'adrotate'); ?>')">Run Updater</a><br />
97
- <span class="description"><?php _e('Attempt to update the database and migrate settings where required or relevant. Normally you should not need or use this option.', 'adrotate'); ?></span>
98
  </td>
99
  </tr>
100
  </table>
29
  <td>
30
  <input type="submit" id="post-role-submit" name="adrotate_db_cleanup_submit" value="<?php _e('Clean-up Database', 'adrotate'); ?>" class="button-secondary" onclick="return confirm('<?php _e('You are about to clean up your database. This may delete expired schedules and older statistics.', 'adrotate'); ?>\n\n<?php _e('Are you sure you want to continue?', 'adrotate'); ?>\n\n<?php _e('This might take a while and may slow down your site during this action!', 'adrotate'); ?>\n\n<?php _e('OK to continue, CANCEL to stop.', 'adrotate'); ?>')" /><br />
31
  <label for="adrotate_db_cleanup_statistics"><input type="checkbox" name="adrotate_db_cleanup_statistics" value="1" /> <?php _e('Delete stats older than 356 days (Optional).', 'adrotate'); ?></label><br />
 
32
  <span class="description"><?php _e('For when you create an advert, group or schedule and it does not save or keep changes you make.', 'adrotate-pro'); ?><br /><?php _e('Additionally you can clean up old schedules, tracker data and/or statistics. This will improve the speed of your site.', 'adrotate-pro'); ?></span>
33
  </td>
34
  </tr>
50
  <td>
51
  <input type="checkbox" name="adrotate_debug" <?php if($adrotate_debug['general'] == true) { ?>checked="checked" <?php } ?> /> General - <span class="description"><?php _e('Troubleshoot ads and how they are selected. Visible on the front-end.', 'adrotate'); ?></span><br />
52
  <input type="checkbox" name="adrotate_debug_publisher" <?php if($adrotate_debug['publisher'] == true) { ?>checked="checked" <?php } ?> /> Publisher - <span class="description"><?php _e('View advert specs and (some) stats in the dashboard.', 'adrotate'); ?></span><br />
53
+ <input type="checkbox" name="adrotate_debug_timers" <?php if($adrotate_debug['timers'] == true) { ?>checked="checked" <?php } ?> /> Clicktracking - <span class="description"><?php _e('Disable timers for clicks and impressions.', 'adrotate'); ?></span><br />
54
  <input type="checkbox" name="adrotate_debug_track" <?php if($adrotate_debug['track'] == true) { ?>checked="checked" <?php } ?> /> Tracking Encryption - <span class="description"><?php _e('Temporarily disable encryption on the redirect url.', 'adrotate'); ?></span><br />
55
  </td>
56
  </tr>
75
  <tr>
76
  <th width="15%"><?php _e('Advert evaluation', 'adrotate'); ?></th>
77
  <td><?php if(!$adevaluate) '<span style="color:#CC2900;">'._e('Not scheduled! Re-activate the plugin from the plugins page.', 'adrotate-pro').'</span>'; else echo '<span style="color:#009900;">'.date_i18n(get_option('date_format')." H:i", $adevaluate).'</span>'; ?></td>
78
+ <th width="15%"><?php _e('Clean Trackerdata', 'adrotate-pro'); ?></th>
79
+ <td><?php if(!$tracker) '<span style="color:#CC2900;">'._e('Not scheduled!', 'adrotate-pro').'</span>'; else echo '<span style="color:#009900;">'.date_i18n(get_option('date_format')." H:i", $tracker).'</span>'; ?></td>
80
+ </tr>
81
+ <tr>
82
+ <th valign="top"><?php _e('Background tasks', 'adrotate-pro'); ?></th>
83
+ <td colspan="3">
84
+ <a class="button" href="admin.php?page=adrotate&tasks=1"><?php _e('Reset background tasks', 'adrotate'); ?></a>
85
+ </td>
86
  </tr>
87
  </table>
88
 
96
  <td><?php _e('Current:', 'adrotate'); ?> <?php echo '<span style="color:#009900;">'.$adrotate_db_version['current'].'</span>'; ?> <?php if($adrotate_db_version['current'] != ADROTATE_DB_VERSION) { echo '<span style="color:#CC2900;">'; _e('Should be:', 'adrotate'); echo ' '.ADROTATE_DB_VERSION; echo '</span>'; } ?><br /><?php _e('Previous:', 'adrotate'); ?> <?php echo $adrotate_db_version['previous']; ?></td>
97
  </tr>
98
  <tr>
99
+ <th valign="top"><?php _e('Manual upgrade', 'adrotate-pro'); ?></th>
100
  <td colspan="3">
101
+ <a class="button" href="admin.php?page=adrotate&upgrade=1" onclick="return confirm('<?php _e('YOU ARE ABOUT TO DO A MANUAL UPDATE FOR ADROTATE.', 'adrotate'); ?>\n<?php _e('Make sure you have a database backup!', 'adrotate'); ?>\n\n<?php _e('This might take a while and may slow down your site during this action!', 'adrotate'); ?>\n\n<?php _e('OK to continue, CANCEL to stop.', 'adrotate'); ?>')"><?php _e('Run updater', 'adrotate'); ?></a>
 
102
  </td>
103
  </tr>
104
  </table>
dashboard/settings/statistics.php CHANGED
@@ -67,12 +67,6 @@
67
  <span class="description"><?php _e('Default: 86400.', 'adrotate'); ?> <?php _e('This number may not be empty, be lower than 60 or exceed 86400 (24 hours).', 'adrotate'); ?></span>
68
  </td>
69
  </tr>
70
- <tr>
71
- <th valign="top"><?php _e('Clean up temporary data', 'adrotate'); ?></th>
72
- <td>
73
- <input type="checkbox" name="adrotate_enable_clean_trackerdata" <?php if($adrotate_config['enable_clean_trackerdata'] == 'Y') { ?>checked="checked" <?php } ?> /> <?php _e('Periodically delete old tracker data. If you are using a memcached plugin you should disable this option!', 'adrotate'); ?>
74
- </td>
75
- </tr>
76
  </table>
77
 
78
  <p class="submit">
67
  <span class="description"><?php _e('Default: 86400.', 'adrotate'); ?> <?php _e('This number may not be empty, be lower than 60 or exceed 86400 (24 hours).', 'adrotate'); ?></span>
68
  </td>
69
  </tr>
 
 
 
 
 
 
70
  </table>
71
 
72
  <p class="submit">
readme.txt CHANGED
@@ -1,10 +1,10 @@
1
  === AdRotate ===
2
  Contributors: adegans
3
  Donate link: http://www.arnan.me/donate/?utm_campaign=donations&utm_medium=readme&utm_source=adrotate-free
4
- Tags: ads, advert, adverts, banner, monetize, admin, advertise, adrotator, rotator, ad, advertising, advertisement, advertiser, publisher, adsense, chitika, clickbank, geo, geolocation, geotarget, banner manager, advert manager, campaign manager, maxmind, statistics, stats, report, geoselect, geolite, schedules, schedule, monetize, header, widget, html5 advert, javascript advert, tracking, clicks, impressions
5
  Requires at least: 3.8
6
- Tested up to: 4.7.1
7
- Stable tag: 3.19
8
  License: GPLv3
9
 
10
  The popular choice for monetizing your website with adverts while keeping things simple. Start making money today!
@@ -97,22 +97,19 @@ You can also post your questions on the [forum](https://ajdg.solutions/forums/?u
97
 
98
  Be a Pro and go Pro. With [AdRotate Pro](https://ajdg.solutions/products/adrotate-for-wordpress/?utm_campaign=adrotate-page&utm_medium=readme&utm_source=adrotate-free)!
99
 
100
- = 3.19 FREE =
101
- * [fix] More clear color coding for adverts with errors
102
- * [fix] Database prefix for transient cleanup wrong
103
- * [fix] Improved PHP7 compatibility
104
- * [change] Dashboard updates
105
- * [change] Responsive feature no longer available
106
- * [change] Using Responsive feature now causes an error
107
-
108
- = 4.3 PRO =
109
- * [fix] Advert renewal works again
110
- * [fix] Fairer impression spread for adverts
111
- * [fix] Schedules no longer editable for advertisers in some setups
112
- * [fix] Improved PHP7 compatibility
113
- * [change] Dashboard updates
114
- * [change] Responsive feature no longer available
115
- * [change] Using Responsive feature now causes an error
116
 
117
  All recent changes are available on the [AdRotate website](https://ajdg.solutions/products/adrotate-for-wordpress/development/?utm_campaign=development&utm_medium=readme&utm_source=adrotate-free).
118
 
@@ -120,13 +117,11 @@ NOTE: Unsolicited offers, parnterships, job offers, promotional emails or produc
120
 
121
  == Upgrade Notice ==
122
 
123
- = 3.19 =
124
- * [fix] More clear color coding for adverts with errors
125
- * [fix] Database prefix for transient cleanup wrong
126
- * [fix] Improved PHP7 compatibility
127
- * [change] Dashboard updates
128
- * [change] Responsive feature no longer available
129
- * [change] Using Responsive feature now causes an error
130
 
131
  All recent changes are available on the [AdRotate website](https://ajdg.solutions/products/adrotate-for-wordpress/development/?utm_campaign=development&utm_medium=readme&utm_source=adrotate-free).
132
 
1
  === AdRotate ===
2
  Contributors: adegans
3
  Donate link: http://www.arnan.me/donate/?utm_campaign=donations&utm_medium=readme&utm_source=adrotate-free
4
+ Tags: ads, advert, banner, advertise, adrotator, rotator, advertising, advertisement, advertiser, publisher, adsense, chitika, clickbank, geotargeting, banner manager, advert manager, campaign manager, statistics, stats, html5, javascript advert, tracking, clicks, impressions
5
  Requires at least: 3.8
6
+ Tested up to: 4.7.3
7
+ Stable tag: 4.0
8
  License: GPLv3
9
 
10
  The popular choice for monetizing your website with adverts while keeping things simple. Start making money today!
97
 
98
  Be a Pro and go Pro. With [AdRotate Pro](https://ajdg.solutions/products/adrotate-for-wordpress/?utm_campaign=adrotate-page&utm_medium=readme&utm_source=adrotate-free)!
99
 
100
+ = 4.0 FREE =
101
+ * [new] Re-enable schedules from Maintenance
102
+ * [change] moved tracker data back to it's own system
103
+ * [change] Updated the database installer
104
+ * [change] Don't count impressions for unknown IP addresses
105
+
106
+ = 4.4 PRO =
107
+ * [new] Re-enable schedules from Maintenance
108
+ * [fix] invalid AdRotate Geo Url
109
+ * [fix] Correct date range for advertiser stats on summary
110
+ * [change] moved tracker data back to it's own system
111
+ * [change] Updated the database installer
112
+ * [change] Don't count impressions for unknown IP addresses
 
 
 
113
 
114
  All recent changes are available on the [AdRotate website](https://ajdg.solutions/products/adrotate-for-wordpress/development/?utm_campaign=development&utm_medium=readme&utm_source=adrotate-free).
115
 
117
 
118
  == Upgrade Notice ==
119
 
120
+ = 4.0 =
121
+ * [new] Re-enable schedules from Maintenance
122
+ * [change] moved tracker data back to it's own system
123
+ * [change] Updated the database installer
124
+ * [change] Don't count impressions for unknown IP addresses
 
 
125
 
126
  All recent changes are available on the [AdRotate website](https://ajdg.solutions/products/adrotate-for-wordpress/development/?utm_campaign=development&utm_medium=readme&utm_source=adrotate-free).
127