AdRotate Banner Manager - Version 4.1

Version Description

  • Note: Graphs may show cluttered for previously collected stats.
  • [change] Stats now stored in daily increments again
  • [fix] Stats graphs now show more accurate dates/numbers for days
  • [fix] Close link for 'upgrade to AdRotate Pro' banner
  • [fix] Tracker data cleanup should now work

All recent changes are available on the AdRotate website.

=

Download this release

Release Info

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

Code changes from version 4.0 to 4.1

adrotate-output.php CHANGED
@@ -687,7 +687,7 @@ function adrotate_notifications_dashboard() {
687
echo ' <div class="ajdg_notification">';
688
echo ' <div class="button_div"><a class="button" target="_blank" href="https://ajdg.solutions/products/adrotate-for-wordpress/?add-to-cart=1126&utm_campaign=adrotate-page&utm_medium=upgrade-banner-button&utm_source=adrotate-free">'.__('Buy now', 'adrotate').'</a></div>';
689
echo ' <div class="text">'.__("You've been using <strong>AdRotate</strong> for a while now. Why not upgrade to the <strong>PRO</strong> version", 'adrotate').'?<br /><span>'.__('Use discount code <b>getadrotatepro</b> for 10% off on any AdRotate license!', 'adrotate' ).' '.__('Thank you for your purchase!', 'adrotate' ).'</span></div>';
690
- echo ' <a class="close_notification" href="admin.php?page=adrotate-pro&hide=1"><img title="Close" src="'.plugins_url('/images/icon-close.png', __FILE__).'" alt=""/></a>';
691
echo ' <div class="icon"><img title="" src="'.plugins_url('/images/logo-60x60.png', __FILE__).'" alt=""/></div>';
692
echo ' </div>';
693
echo '</div>';
687
echo ' <div class="ajdg_notification">';
688
echo ' <div class="button_div"><a class="button" target="_blank" href="https://ajdg.solutions/products/adrotate-for-wordpress/?add-to-cart=1126&utm_campaign=adrotate-page&utm_medium=upgrade-banner-button&utm_source=adrotate-free">'.__('Buy now', 'adrotate').'</a></div>';
689
echo ' <div class="text">'.__("You've been using <strong>AdRotate</strong> for a while now. Why not upgrade to the <strong>PRO</strong> version", 'adrotate').'?<br /><span>'.__('Use discount code <b>getadrotatepro</b> for 10% off on any AdRotate license!', 'adrotate' ).' '.__('Thank you for your purchase!', 'adrotate' ).'</span></div>';
690
+ echo ' <a class="close_notification" href="admin.php?page=adrotate&hide=1"><img title="Close" src="'.plugins_url('/images/icon-close.png', __FILE__).'" alt=""/></a>';
691
echo ' <div class="icon"><img title="" src="'.plugins_url('/images/logo-60x60.png', __FILE__).'" alt=""/></div>';
692
echo ' </div>';
693
echo '</div>';
adrotate-setup.php CHANGED
@@ -418,6 +418,7 @@ function adrotate_database_install() {
418
`responsive` char(1) NOT NULL default 'N',
419
`type` varchar(10) NOT NULL default '0',
420
`weight` int(3) NOT NULL default '6',
421
`budget` double NOT NULL default '0',
422
`crate` double NOT NULL default '0',
423
`irate` double NOT NULL default '0',
@@ -486,6 +487,7 @@ function adrotate_database_install() {
486
`day_fri` char(1) NOT NULL default 'Y',
487
`day_sat` char(1) NOT NULL default 'Y',
488
`day_sun` char(1) NOT NULL default 'Y',
489
PRIMARY KEY (`id`),
490
KEY `starttime` (`starttime`)
491
) ".$charset_collate.$engine.";");
@@ -945,6 +947,13 @@ function adrotate_database_upgrade() {
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
@@ -1129,6 +1138,11 @@ function adrotate_core_upgrade() {
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
@@ -1223,7 +1237,9 @@ function adrotate_empty_trackerdata() {
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
/*-------------------------------------------------------------
418
`responsive` char(1) NOT NULL default 'N',
419
`type` varchar(10) NOT NULL default '0',
420
`weight` int(3) NOT NULL default '6',
421
+ `autodelete` char(1) NOT NULL default 'N',
422
`budget` double NOT NULL default '0',
423
`crate` double NOT NULL default '0',
424
`irate` double NOT NULL default '0',
487
`day_fri` char(1) NOT NULL default 'Y',
488
`day_sat` char(1) NOT NULL default 'Y',
489
`day_sun` char(1) NOT NULL default 'Y',
490
+ `autodelete` char(1) NOT NULL default 'N',
491
PRIMARY KEY (`id`),
492
KEY `starttime` (`starttime`)
493
) ".$charset_collate.$engine.";");
947
$wpdb->query("DELETE FROM `{$wpdb->prefix}options` WHERE `option_name` LIKE '\_transient\_timeout\_adrotate\_%'");
948
}
949
950
+ // Database: 63
951
+ // AdRotate: 4.1
952
+ if($adrotate_db_version['current'] < 63) {
953
+ adrotate_add_column("{$wpdb->prefix}adrotate", 'autodelete', 'char(1) NOT NULL default \'N\' AFTER `weight`');
954
+ adrotate_add_column("{$wpdb->prefix}adrotate_schedule", 'autodelete', 'char(1) NOT NULL default \'N\' AFTER `day_sun`');
955
+ }
956
+
957
update_option("adrotate_db_version", array('current' => ADROTATE_DB_VERSION, 'previous' => $adrotate_db_version['current']));
958
}
959
1138
if(!wp_next_scheduled('adrotate_empty_trackerdata')) wp_schedule_event($firstrun, 'hourly', 'adrotate_empty_trackerdata');
1139
}
1140
1141
+ // 4.1
1142
+ if($adrotate_version['current'] < 389) {
1143
+ adrotate_check_schedules();
1144
+ }
1145
+
1146
update_option("adrotate_version", array('current' => ADROTATE_VERSION, 'previous' => $adrotate_version['current']));
1147
}
1148
1237
$clicks = $now - 86400;
1238
$impressions = $now - 3600;
1239
1240
+ $wpdb->query("DELETE FROM `{$wpdb->prefix}adrotate_tracker` WHERE `timer` < {$impressions} AND `stat` = 'i';");
1241
+ $wpdb->query("DELETE FROM `{$wpdb->prefix}adrotate_tracker` WHERE `timer` < {$clicks} AND `stat` = 'c';");
1242
+ $wpdb->query("DELETE FROM `{$wpdb->prefix}adrotate_tracker` WHERE `ipaddress` = 'unknown' OR `ipaddress` = '';");
1243
}
1244
1245
/*-------------------------------------------------------------
adrotate-statistics.php CHANGED
@@ -173,6 +173,20 @@ function adrotate_stats_graph($type, $id, $chartid, $start, $end) {
173
}
174
175
if($stats) {
176
$dates = $clicks = $impressions = ''; // To store the final graph data
177
$day_start = $start; // Midnight of the day (start)
178
$day_end = $day_start + 86399; // 1 second before midnight of the next day
@@ -186,17 +200,17 @@ function adrotate_stats_graph($type, $id, $chartid, $start, $end) {
186
if(empty($graph[$i]['clicks'])) $graph[$i]['clicks'] = '0';
187
if(empty($graph[$i]['impressions'])) $graph[$i]['impressions'] = '0';
188
189
- $count_clicks = $graph[$i]['clicks'] + $result['clicks'];
190
- $count_impressions = $graph[$i]['impressions'] + $result['impressions'];
191
} else {
192
- $day_start += 86400;
193
- $day_end += 86400;
194
- $count_clicks = $result['clicks'];
195
- $count_impressions = $result['impressions'];
196
$i++;
197
}
198
- $graph[$i] = array('thetime' => $day_start, 'clicks' => $count_clicks, 'impressions' => $count_impressions);
199
- unset($count_clicks, $count_impressions);
200
}
201
202
foreach($graph as $result) {
@@ -204,6 +218,7 @@ function adrotate_stats_graph($type, $id, $chartid, $start, $end) {
204
$clicks .= ','.$result['clicks'];
205
$impressions .= ','.$result['impressions'];
206
}
207
208
$dates = trim($dates, ",");
209
$clicks = trim($clicks, ",");
@@ -212,7 +227,7 @@ function adrotate_stats_graph($type, $id, $chartid, $start, $end) {
212
$output = '';
213
$output .= '<div id="chart-1" style="height:300px; width:100%;"></div>';
214
$output .= adrotate_draw_graph($chartid, $dates, $clicks, $impressions);
215
- unset($stats, $dates, $clicks, $impressions);
216
} else {
217
$output = __('No data to show!', 'adrotate');
218
}
173
}
174
175
if($stats) {
176
+ /* -- Add in 4.7 or so -- //
177
+ $dates = $clicks = $impressions = '';
178
+
179
+ foreach($stats as $result) {
180
+ if(empty($result['clicks'])) $result['clicks'] = '0';
181
+ if(empty($result['impressions'])) $result['impressions'] = '0';
182
+
183
+ $dates .= ',"'.date_i18n("d M", $result['thetime']).'"';
184
+ $clicks .= ','.$result['clicks'];
185
+ $impressions .= ','.$result['impressions'];
186
+ }
187
+ // -- End Add -- */
188
+
189
+ // -- Remove in 4.7 or so -- //
190
$dates = $clicks = $impressions = ''; // To store the final graph data
191
$day_start = $start; // Midnight of the day (start)
192
$day_end = $day_start + 86399; // 1 second before midnight of the next day
200
if(empty($graph[$i]['clicks'])) $graph[$i]['clicks'] = '0';
201
if(empty($graph[$i]['impressions'])) $graph[$i]['impressions'] = '0';
202
203
+ $sum_clicks = $graph[$i]['clicks'] + $result['clicks'];
204
+ $sum_impressions = $graph[$i]['impressions'] + $result['impressions'];
205
} else {
206
+ $day_start = $result['thetime'];
207
+ $day_end = $day_start + 86399;
208
+ $sum_clicks = $result['clicks'];
209
+ $sum_impressions = $result['impressions'];
210
$i++;
211
}
212
+ $graph[$i] = array('thetime' => $day_start, 'clicks' => $sum_clicks, 'impressions' => $sum_impressions);
213
+ unset($sum_clicks, $sum_impressions);
214
}
215
216
foreach($graph as $result) {
218
$clicks .= ','.$result['clicks'];
219
$impressions .= ','.$result['impressions'];
220
}
221
+ // -- End Remove -- //
222
223
$dates = trim($dates, ",");
224
$clicks = trim($clicks, ",");
227
$output = '';
228
$output .= '<div id="chart-1" style="height:300px; width:100%;"></div>';
229
$output .= adrotate_draw_graph($chartid, $dates, $clicks, $impressions);
230
+ unset($stats, $graph, $dates, $clicks, $impressions);
231
} else {
232
$output = __('No data to show!', 'adrotate');
233
}
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: 4.0
11
License: GPLv3
12
*/
13
@@ -22,9 +22,9 @@ License: GPLv3
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 --------------------------------------------*/
@@ -51,6 +51,7 @@ register_activation_hook(__FILE__, 'adrotate_activate');
51
register_deactivation_hook(__FILE__, 'adrotate_deactivate');
52
register_uninstall_hook(__FILE__, 'adrotate_uninstall');
53
add_action('adrotate_evaluate_ads', 'adrotate_evaluate_ads');
54
add_action('widgets_init', create_function('', 'return register_widget("adrotate_widgets");'));
55
/*-----------------------------------------------------------*/
56
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.1
11
License: GPLv3
12
*/
13
22
------------------------------------------------------------------------------------ */
23
24
/*--- AdRotate values ---------------------------------------*/
25
+ define("ADROTATE_DISPLAY", '4.1');
26
+ define("ADROTATE_VERSION", 389);
27
+ define("ADROTATE_DB_VERSION", 63);
28
/*-----------------------------------------------------------*/
29
30
/*--- Load Files --------------------------------------------*/
51
register_deactivation_hook(__FILE__, 'adrotate_deactivate');
52
register_uninstall_hook(__FILE__, 'adrotate_uninstall');
53
add_action('adrotate_evaluate_ads', 'adrotate_evaluate_ads');
54
+ add_action('adrotate_empty_trackerdata', 'adrotate_empty_trackerdata');
55
add_action('widgets_init', create_function('', 'return register_widget("adrotate_widgets");'));
56
/*-----------------------------------------------------------*/
57
dashboard/info.php CHANGED
@@ -49,7 +49,7 @@ $data = get_option("adrotate_advert_status");
49
<a href="http://www.arnan.me/?pk_campaign=adrotate-free&pk_kwd=infopage" title="arnan.me - Nomadic in the Philippines"><img src="<?php echo plugins_url('/images/arnan-credits.jpg', dirname(__FILE__)); ?>" alt="Arnan de Gans" align="center" class="ajdg-photo" width="100%" /></a></p>
50
51
<p><strong><?php _e('Get paid as a publisher', 'adrotate'); ?></strong></p>
52
- <p><a href='http://bit.ly/2leh9sW'><img alt="Media.net" height="125" src="<?php echo plugins_url('/images/medianet.jpg', dirname(__FILE__)); ?>" /></a>&nbsp;&nbsp;<a href="http://signup.clicksor.com/advertise_here.php?nid=1&srid=&ref=381832" target="_blank"><img alt="Clicksor" height="125"src="<?php echo plugins_url('/images/clicksor.png', dirname(__FILE__)); ?>"></a>&nbsp;&nbsp;<a href="https://www.viglink.com/?vgref=2984797&amp;vgtag=banner"><img alt="VigLink" height="125" src="<?php echo plugins_url('/images/viglink.png', dirname(__FILE__)); ?>" /></a></p>
53
</td>
54
</tr>
55
</tbody>
49
<a href="http://www.arnan.me/?pk_campaign=adrotate-free&pk_kwd=infopage" title="arnan.me - Nomadic in the Philippines"><img src="<?php echo plugins_url('/images/arnan-credits.jpg', dirname(__FILE__)); ?>" alt="Arnan de Gans" align="center" class="ajdg-photo" width="100%" /></a></p>
50
51
<p><strong><?php _e('Get paid as a publisher', 'adrotate'); ?></strong></p>
52
+ <p><a href='http://ajdg.link/medianet'><img alt="Media.net" height="125" src="<?php echo plugins_url('/images/medianet.jpg', dirname(__FILE__)); ?>" /></a>&nbsp;&nbsp;<a href="http://ajdg.link/clicksor" target="_blank"><img alt="Clicksor" height="125"src="<?php echo plugins_url('/images/clicksor.png', dirname(__FILE__)); ?>"></a>&nbsp;&nbsp;<a href="http://ajdg.link/viglink"><img alt="VigLink" height="125" src="<?php echo plugins_url('/images/viglink.png', dirname(__FILE__)); ?>" /></a></p>
53
</td>
54
</tr>
55
</tbody>
dashboard/publisher/adverts-edit.php CHANGED
@@ -12,10 +12,10 @@
12
if(!$ad_edit_id) {
13
$edit_id = $wpdb->get_var("SELECT `id` FROM `{$wpdb->prefix}adrotate` WHERE `type` = 'empty' ORDER BY `id` DESC LIMIT 1;");
14
if($edit_id == 0) {
15
- $wpdb->insert($wpdb->prefix."adrotate", array('title' => '', 'bannercode' => '', 'thetime' => $now, 'updated' => $now, 'author' => $userdata->user_login, 'imagetype' => 'dropdown', 'image' => '', 'paid' => 'U', 'tracker' => 'N', 'desktop' => 'Y', 'mobile' => 'Y', 'tablet' => 'Y', 'os_ios' => 'Y', 'os_android' => 'Y', 'os_other' => 'Y', 'responsive' => 'N', 'type' => 'empty', 'weight' => 6, 'budget' => 0, 'crate' => 0, 'irate' => 0, 'cities' => serialize(array()), 'countries' => serialize(array())));
16
$edit_id = $wpdb->insert_id;
17
18
- $wpdb->insert($wpdb->prefix.'adrotate_schedule', array('name' => 'Schedule for ad '.$edit_id, 'starttime' => $now, 'stoptime' => $in84days, 'maxclicks' => 0, 'maximpressions' => 0, 'spread' => 'N', 'daystarttime' => '0000', 'daystoptime' => '0000', 'day_mon' => 'Y', 'day_tue' => 'Y', 'day_wed' => 'Y', 'day_thu' => 'Y', 'day_fri' => 'Y', 'day_sat' => 'Y', 'day_sun' => 'Y'));
19
$schedule_id = $wpdb->insert_id;
20
$wpdb->insert($wpdb->prefix.'adrotate_linkmeta', array('ad' => $edit_id, 'group' => 0, 'user' => 0, 'schedule' => $schedule_id));
21
}
@@ -41,17 +41,17 @@ foreach($linkmeta as $meta) {
41
// Affiliate Partners
42
$partners = array(
43
"medianet" => array(
44
- "url" => "http://bit.ly/2leh9sW",
45
"alt" => "Media.net",
46
"image" => "medianet.jpg"
47
),
48
"clicksor" => array(
49
- "url" => "http://signup.clicksor.com/advertise_here.php?nid=1&srid=&ref=381832",
50
"alt" => "Clicksor",
51
"image" => "clicksor.png"
52
),
53
"viglink" => array(
54
- "url" => "https://www.viglink.com/?vgref=2984797&amp;vgtag=banner",
55
"alt" => "VigLink",
56
"image" => "viglink.png"
57
),
12
if(!$ad_edit_id) {
13
$edit_id = $wpdb->get_var("SELECT `id` FROM `{$wpdb->prefix}adrotate` WHERE `type` = 'empty' ORDER BY `id` DESC LIMIT 1;");
14
if($edit_id == 0) {
15
+ $wpdb->insert($wpdb->prefix."adrotate", array('title' => '', 'bannercode' => '', 'thetime' => $now, 'updated' => $now, 'author' => $userdata->user_login, 'imagetype' => 'dropdown', 'image' => '', 'paid' => 'U', 'tracker' => 'N', 'desktop' => 'Y', 'mobile' => 'Y', 'tablet' => 'Y', 'os_ios' => 'Y', 'os_android' => 'Y', 'os_other' => 'Y', 'responsive' => 'N', 'type' => 'empty', 'weight' => 6, 'autodelete' => 'N', 'budget' => 0, 'crate' => 0, 'irate' => 0, 'cities' => serialize(array()), 'countries' => serialize(array())));
16
$edit_id = $wpdb->insert_id;
17
18
+ $wpdb->insert($wpdb->prefix.'adrotate_schedule', array('name' => 'Schedule for ad '.$edit_id, 'starttime' => $now, 'stoptime' => $in84days, 'maxclicks' => 0, 'maximpressions' => 0, 'spread' => 'N', 'daystarttime' => '0000', 'daystoptime' => '0000', 'day_mon' => 'Y', 'day_tue' => 'Y', 'day_wed' => 'Y', 'day_thu' => 'Y', 'day_fri' => 'Y', 'day_sat' => 'Y', 'day_sun' => 'Y', 'autodelete' => 'N'));
19
$schedule_id = $wpdb->insert_id;
20
$wpdb->insert($wpdb->prefix.'adrotate_linkmeta', array('ad' => $edit_id, 'group' => 0, 'user' => 0, 'schedule' => $schedule_id));
21
}
41
// Affiliate Partners
42
$partners = array(
43
"medianet" => array(
44
+ "url" => "http://ajdg.link/medianet",
45
"alt" => "Media.net",
46
"image" => "medianet.jpg"
47
),
48
"clicksor" => array(
49
+ "url" => "http://ajdg.link/clicksor",
50
"alt" => "Clicksor",
51
"image" => "clicksor.png"
52
),
53
"viglink" => array(
54
+ "url" => "http://ajdg.link/viglink",
55
"alt" => "VigLink",
56
"image" => "viglink.png"
57
),
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, 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,19 +97,26 @@ 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
- = 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,11 +124,12 @@ NOTE: Unsolicited offers, parnterships, job offers, promotional emails or produc
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
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, advertising, adsense, geotargeting, banner manager, advert manager, statistics, html5
5
Requires at least: 3.8
6
Tested up to: 4.7.3
7
+ Stable tag: 4.1
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.1 FREE =
101
+ * Note: Graphs may show cluttered for previously collected stats.
102
+ * [change] Stats now stored in daily increments again
103
+ * [fix] Stats graphs now show more accurate dates/numbers for days
104
+ * [fix] Close link for 'upgrade to AdRotate Pro' banner
105
+ * [fix] Tracker data cleanup should now work
106
+
107
+ = 4.5 PRO =
108
+ * Note: Graphs may show cluttered for previously collected stats.
109
+ * Note: Exports may be hard to read for previously collected stats.
110
+ * [new] Option to automatically delete expired adverts
111
+ * [new] Option to automatically delete expired schedules
112
+ * [change] Stats now stored in daily increments again
113
+ * [fix] Stats graphs now show more accurate dates/numbers for days
114
+ * [fix] Improved PHP7 compatibility
115
+ * [fix] Close link for 'rate AdRotate Pro' banner
116
+ * [fix] Impression spread indicator when selecting schedules
117
+ * [fix] Tracker data cleanup should now work
118
+ * [fix] Network widget showing correct settings after saving
119
+ * [fix] Network widget showing correct advert for single adverts
120
121
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).
122
124
125
== Upgrade Notice ==
126
127
+ = 4.1 =
128
+ * Note: Graphs may show cluttered for previously collected stats.
129
+ * [change] Stats now stored in daily increments again
130
+ * [fix] Stats graphs now show more accurate dates/numbers for days
131
+ * [fix] Close link for 'upgrade to AdRotate Pro' banner
132
+ * [fix] Tracker data cleanup should now work
133
134
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).
135