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