Count per Day - Version 3.5.4

Version Description

  • Bugfix: check for IPv6 compatibility on settings page
Download this release

Release Info

Developer Tom Braider
Plugin Icon 128x128 Count per Day
Version 3.5.4
Comparing to
See all releases

Code changes from version 3.5.3 to 3.5.4

Files changed (6) hide show
  1. counter-core.php +54 -34
  2. counter-options.php +13 -7
  3. counter.php +18 -16
  4. geoip.php +31 -24
  5. map/map.php +6 -2
  6. readme.txt +4 -3
counter-core.php CHANGED
@@ -11,9 +11,9 @@ if (!defined('ABSPATH'))
11
* include GeoIP addon if available
12
*/
13
$cpd_geoip_dir = WP_CONTENT_DIR.'/count-per-day-geoip/';
14
- if ( file_exists($cpd_geoip_dir.'geoip.inc') )
15
include_once('geoip.php');
16
- $cpd_geoip = ( class_exists('GeoIp') && file_exists($cpd_geoip_dir.'GeoIP.dat') ) ? 1 : 0;
17
18
/**
19
* helper functions
@@ -268,8 +268,8 @@ function checkInstalledVersion()
268
*/
269
function anonymize_ip( $ip )
270
{
271
- // not on IPv6
272
- if (strpos($ip,':'))
273
return $ip;
274
275
if ( $this->options['debug'] )
@@ -1574,64 +1574,84 @@ function cpdColumnContent($column_name, $id = 0)
1574
function loadGeoIpAddon()
1575
{
1576
global $cpd_path, $cpd_geoip_dir;
1577
-
1578
- $source = 'https://raw.githubusercontent.com/maxmind/geoip-api-php/master/src/geoip.inc';
1579
- $dest = $cpd_geoip_dir.'geoip.inc';
1580
1581
// create dir
1582
if (!is_dir($cpd_geoip_dir))
1583
- mkdir($cpd_geoip_dir);
1584
1585
// get remote file
1586
$file = file_get_contents($source, 'r');
1587
1588
// write new locale file
1589
- file_put_contents($dest, $file);
1590
1591
if (is_file($dest))
1592
return __('GeoIP Addon installed.', 'cpd');
1593
else
1594
- echo '<div class="error"><p>'.sprintf(__('Sorry, an error occurred. Load the file from %s and copy it to wp-content/count-per-day-geoip/ directory.', 'cpd'), '<a href="'.$source.'">'.$source.'</a>').'</p></div>';
1595
}
1596
1597
/**
1598
* Windows server < PHP 5.3
1599
* PHP without IPv6 support
1600
*/
1601
- function inetPton($ip)
1602
{
1603
- # ipv4
1604
- if (strpos($ip, '.') !== FALSE)
1605
{
1606
- if (strpos($ip, ':') === FALSE)
1607
- $ip = pack('N',ip2long($ip));
1608
- else
1609
- {
1610
- $ip = explode(':',$ip);
1611
- $ip = pack('N',ip2long($ip[count($ip)-1]));
1612
- }
1613
}
1614
- # ipv6
1615
- elseif (strpos($ip, ':') !== FALSE)
1616
{
1617
$ip = explode(':', $ip);
1618
- $parts=8-count($ip);
1619
- $res='';$replaced=0;
1620
- foreach ($ip as $seg)
1621
{
1622
- if ($seg!='')
1623
$res .= str_pad($seg, 4, '0', STR_PAD_LEFT);
1624
- elseif ($replaced==0)
1625
- {
1626
- for ($i=0;$i<=$parts;$i++)
1627
- $res.='0000';
1628
- $replaced=1;
1629
- } elseif ($replaced==1)
1630
- $res.='0000';
1631
}
1632
$ip = pack('H'.strlen($res), $res);
1633
}
1634
return $ip;
1635
}
1636
1637
- } // class
11
* include GeoIP addon if available
12
*/
13
$cpd_geoip_dir = WP_CONTENT_DIR.'/count-per-day-geoip/';
14
+ if ( file_exists($cpd_geoip_dir.'geoip.inc') && filesize($cpd_geoip_dir.'geoip.inc') > 1000 ) // not empty
15
include_once('geoip.php');
16
+ $cpd_geoip = ( class_exists('GeoIp') && file_exists($cpd_geoip_dir.'GeoIP.dat') && filesize($cpd_geoip_dir.'GeoIP.dat') > 1000 ) ? 1 : 0;
17
18
/**
19
* helper functions
268
*/
269
function anonymize_ip( $ip )
270
{
271
+ // only IPv4
272
+ if( !filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) )
273
return $ip;
274
275
if ( $this->options['debug'] )
1574
function loadGeoIpAddon()
1575
{
1576
global $cpd_path, $cpd_geoip_dir;
1577
1578
// create dir
1579
if (!is_dir($cpd_geoip_dir))
1580
+ if (!mkdir($cpd_geoip_dir))
1581
+ {
1582
+ echo '<div class="error"><p>'.sprintf(__('Could not create directory %s!', 'cpd'), '<code>wp-content/count-per-day-geoip</code>').'</p></div>';
1583
+ return false;
1584
+ };
1585
+
1586
+ // function checks
1587
+ if ( !ini_get('allow_url_fopen') )
1588
+ {
1589
+ echo '<div class="error"><p>'.__('Sorry, <code>allow_url_fopen</code> is disabled!', 'cpd').'</p></div>';
1590
+ return false;
1591
+ }
1592
+
1593
+ $source = 'https://raw.githubusercontent.com/maxmind/geoip-api-php/master/src/geoip.inc';
1594
+ $dest = $cpd_geoip_dir.'geoip.inc';
1595
1596
// get remote file
1597
$file = file_get_contents($source, 'r');
1598
1599
// write new locale file
1600
+ if ( is_writable($cpd_geoip_dir) )
1601
+ file_put_contents($dest, $file);
1602
1603
if (is_file($dest))
1604
+ {
1605
+ @chmod($dest, 0755);
1606
return __('GeoIP Addon installed.', 'cpd');
1607
+ }
1608
else
1609
+ echo '<div class="error"><p>'.sprintf(__('Sorry, an error occurred. Load the file from %s and copy it to wp-content/count-per-day-geoip/ directory.', 'cpd'), '<a href="'.$source.'" target="_blank">'.$source.'</a>').'</p></div>';
1610
}
1611
1612
/**
1613
* Windows server < PHP 5.3
1614
* PHP without IPv6 support
1615
*/
1616
+ static function inetPton($ip)
1617
{
1618
+ // convert to IPv6 e.g. '::62.149.142.175' or '62.149.142.175'
1619
+ if ( strpos($ip, '.') !== FALSE )
1620
{
1621
+ $ip = explode(':', $ip);
1622
+ $ip = $ip[count($ip) - 1];
1623
+ $ip = explode('.', $ip);
1624
+ $ip = '::FFFF:'.sprintf("%'.02s", dechex($ip[0])).sprintf("%'.02s", dechex($ip[1])).':'.sprintf("%'.02s", dechex($ip[2])).sprintf("%'.02s", dechex($ip[3]));
1625
}
1626
+
1627
+ // IPv6
1628
+ if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6))
1629
{
1630
$ip = explode(':', $ip);
1631
+ $parts = 8 - count($ip);
1632
+ $res = '';
1633
+ $replaced = 0;
1634
+ foreach ( $ip as $seg )
1635
{
1636
+ if ( $seg != '' )
1637
$res .= str_pad($seg, 4, '0', STR_PAD_LEFT);
1638
+ elseif ( $replaced == 0 )
1639
+ {
1640
+ for ( $i = 0; $i <= $parts; $i++ )
1641
+ $res .= '0000';
1642
+ $replaced = 1;
1643
+ }
1644
+ elseif ( $replaced == 1 )
1645
+ $res .= '0000';
1646
}
1647
$ip = pack('H'.strlen($res), $res);
1648
}
1649
+ else
1650
+ // Dummy IP if no valid IP found
1651
+ $ip = inetPton('127.0.0.1');
1652
+
1653
return $ip;
1654
}
1655
1656
+ } // class
1657
+
counter-options.php CHANGED
@@ -92,7 +92,7 @@ if(!empty($_POST['do']))
92
{
93
$result = CpdGeoIp::updateGeoIpFile();
94
echo '<div class="updated"><p>'.$result.'</p></div>';
95
- if ( file_exists($cpd_path.'geoip/GeoIP.dat') )
96
$cpd_geoip = 1;
97
}
98
break;
@@ -102,16 +102,17 @@ if(!empty($_POST['do']))
102
$result = $count_per_day->loadGeoIpAddon();
103
if ($result)
104
echo '<div class="updated"><p>'.$result.'</p></div>';
105
- if ( file_exists($cpd_path.'geoip.php') && file_exists($cpd_geoip_dir.'geoip.inc') )
106
{
107
include_once($cpd_path.'geoip.php');
108
- if ( !file_exists($cpd_geoip_dir.'GeoIP.dat') )
109
{
110
// download new GeoIP database
111
$result = CpdGeoIp::updateGeoIpFile();
112
- echo '<div class="updated"><p>'.$result.'</p></div>';
113
}
114
- $cpd_geoip = 1;
115
}
116
break;
117
@@ -750,7 +751,12 @@ switch($mode) {
750
<div class="postbox">
751
<h3><span class="cpd_icon cpd_geoip">&nbsp;</span> <?php _e('GeoIP - Countries', 'cpd') ?></h3>
752
<div class="inside">
753
- <?php if ( $cpd_geoip ) { ?>
754
<p>
755
<?php _e('You can get the country data for all entries in database by checking the IP adress against the GeoIP database. This can take a while!', 'cpd') ?>
756
</p>
@@ -774,7 +780,7 @@ switch($mode) {
774
</form>
775
<?php } ?>
776
777
- <?php if ( !file_exists($cpd_geoip_dir.'geoip.inc') ) {
778
// install GeoIP Addon
779
echo '<p style="color:red">'.__('To get country data by checking the IP addresses you need to install the GeoIP Addon.<br>Because it is not under GPL I had to delete this function from WordPress plugin repository.', 'cpd').'</p>';
780
echo '<p>'.sprintf(__('The directory %s will be created.', 'cpd'), '<code>wp-content/count-per-day-geoip</code>').'</p>';
92
{
93
$result = CpdGeoIp::updateGeoIpFile();
94
echo '<div class="updated"><p>'.$result.'</p></div>';
95
+ if ( file_exists($cpd_geoip_dir.'GeoIP.dat') && filesize($cpd_geoip_dir.'GeoIP.dat') > 1000 )
96
$cpd_geoip = 1;
97
}
98
break;
102
$result = $count_per_day->loadGeoIpAddon();
103
if ($result)
104
echo '<div class="updated"><p>'.$result.'</p></div>';
105
+ if ( file_exists($cpd_path.'geoip.php') && file_exists($cpd_geoip_dir.'geoip.inc') && filesize($cpd_geoip_dir.'geoip.inc') > 1000 )
106
{
107
include_once($cpd_path.'geoip.php');
108
+ if ( !file_exists($cpd_geoip_dir.'GeoIP.dat') || filesize($cpd_geoip_dir.'GeoIP.dat') < 1000 )
109
{
110
// download new GeoIP database
111
$result = CpdGeoIp::updateGeoIpFile();
112
+ echo $result;
113
}
114
+ if ( file_exists($cpd_geoip_dir.'GeoIP.dat') && filesize($cpd_geoip_dir.'GeoIP.dat') > 1000 )
115
+ $cpd_geoip = 1;
116
}
117
break;
118
751
<div class="postbox">
752
<h3><span class="cpd_icon cpd_geoip">&nbsp;</span> <?php _e('GeoIP - Countries', 'cpd') ?></h3>
753
<div class="inside">
754
+
755
+ <?php if ( $cpd_geoip ) {
756
+
757
+ if ( (!function_exists('inet_pton') || !@inet_pton('::127.0.0.1') ) && !defined('CPD_GEOIP_PATCH') )
758
+ echo '<p style="color:red">'.sprintf(__("ERROR: NO IPv6 SUPPORT<br/>Please load, unzip and copy this patched %s to %s.", 'cpd'), '<a href="http://www.tomsdimension.de/downloads/geoipincpatch">geoip.inc</a>', "<code>$cpd_geoip_dir</code>").'</p>';
759
+ ?>
760
<p>
761
<?php _e('You can get the country data for all entries in database by checking the IP adress against the GeoIP database. This can take a while!', 'cpd') ?>
762
</p>
780
</form>
781
<?php } ?>
782
783
+ <?php if ( !file_exists($cpd_geoip_dir.'geoip.inc') || filesize($cpd_geoip_dir.'geoip.inc') < 1000 ) {
784
// install GeoIP Addon
785
echo '<p style="color:red">'.__('To get country data by checking the IP addresses you need to install the GeoIP Addon.<br>Because it is not under GPL I had to delete this function from WordPress plugin repository.', 'cpd').'</p>';
786
echo '<p>'.sprintf(__('The directory %s will be created.', 'cpd'), '<code>wp-content/count-per-day-geoip</code>').'</p>';
counter.php CHANGED
@@ -3,7 +3,7 @@
3
Plugin Name: Count Per Day
4
Plugin URI: http://www.tomsdimension.de/wp-plugins/count-per-day
5
Description: Counter, shows reads and visitors per page; today, yesterday, last week, last months ... on dashboard, per shortcode or in widget.
6
- Version: 3.5.3
7
License: Postcardware
8
Author: Tom Braider
9
Author URI: http://www.tomsdimension.de
@@ -13,7 +13,7 @@ if (!defined('ABSPATH'))
13
exit;
14
15
$cpd_dir_name = 'count-per-day';
16
- $cpd_version = '3.5.3';
17
18
if (strpos($_SERVER['SERVER_NAME'], '.test'))
19
$cpd_path = str_replace('/', DIRECTORY_SEPARATOR, ABSPATH.PLUGINDIR.'/'.$cpd_dir_name.'/');
@@ -148,14 +148,13 @@ function count( $x, $page = 'x' )
148
$count = $this->mysqlQuery('var', $wpdb->prepare("SELECT COUNT(*) FROM $wpdb->cpd_counter WHERE ip=$this->aton(%s) AND date=%s AND page=%d", $userip, $date, $page), 'count check '.__LINE__);
149
if ( !$count )
150
{
151
-
152
// IP to IPv4
153
- if ( strpos($userip,'.') !== false && strpos($userip,':') === false)
154
{
155
// IPv4
156
$userip2 = $userip;
157
}
158
- else
159
{
160
// IPv6
161
// store dummy ipv4 until we can handle ipv6
@@ -167,6 +166,12 @@ function count( $x, $page = 'x' )
167
$unpacked = array_slice($unpacked, 12);
168
$userip2 = implode('.', $unpacked);
169
}
170
171
// save count
172
if ($cpd_geoip)
@@ -174,15 +179,11 @@ function count( $x, $page = 'x' )
174
// with GeoIP addon save country
175
$gi = geoip_open($cpd_geoip_dir.'GeoIP.dat', GEOIP_STANDARD);
176
177
- if (!filter_var($userip, FILTER_VALIDATE_IP))
178
- $userip = '127.0.0.1';
179
180
- if ( strpos($userip,'.') !== false && strpos($userip,':') === false)
181
- // IPv4
182
- $country = strtolower(geoip_country_code_by_addr_v6($gi, '::'.$userip));
183
- else
184
- // IPv6
185
- $country = strtolower(geoip_country_code_by_addr_v6($gi, $userip));
186
187
if (empty($country))
188
$country = '-';
@@ -1311,11 +1312,12 @@ function getMap( $what = 'visitors', $width = 500, $height = 430 )
1311
$vo = array();
1312
foreach ($oc as $ip => $x)
1313
{
1314
- if ( strpos($ip,'.') !== false && strpos($ip,':') === false)
1315
// IPv4 -> IPv6
1316
$ip = '::'.$ip;
1317
- $country = strtoupper(geoip_country_code_by_addr_v6($gi, $ip));
1318
- $cpd_data[$country] = (isset($cpd_data[$country])) ? $cpd_data[$country] + 1 : 1;
1319
}
1320
}
1321
else
3
Plugin Name: Count Per Day
4
Plugin URI: http://www.tomsdimension.de/wp-plugins/count-per-day
5
Description: Counter, shows reads and visitors per page; today, yesterday, last week, last months ... on dashboard, per shortcode or in widget.
6
+ Version: 3.5.4
7
License: Postcardware
8
Author: Tom Braider
9
Author URI: http://www.tomsdimension.de
13
exit;
14
15
$cpd_dir_name = 'count-per-day';
16
+ $cpd_version = '3.5.4';
17
18
if (strpos($_SERVER['SERVER_NAME'], '.test'))
19
$cpd_path = str_replace('/', DIRECTORY_SEPARATOR, ABSPATH.PLUGINDIR.'/'.$cpd_dir_name.'/');
148
$count = $this->mysqlQuery('var', $wpdb->prepare("SELECT COUNT(*) FROM $wpdb->cpd_counter WHERE ip=$this->aton(%s) AND date=%s AND page=%d", $userip, $date, $page), 'count check '.__LINE__);
149
if ( !$count )
150
{
151
// IP to IPv4
152
+ if (filter_var($userip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4))
153
{
154
// IPv4
155
$userip2 = $userip;
156
}
157
+ else if (filter_var($userip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6))
158
{
159
// IPv6
160
// store dummy ipv4 until we can handle ipv6
166
$unpacked = array_slice($unpacked, 12);
167
$userip2 = implode('.', $unpacked);
168
}
169
+ else
170
+ {
171
+ // no valid IP address -> dummy
172
+ $userip = '127.0.0.1';
173
+ $userip2 = $userip;
174
+ }
175
176
// save count
177
if ($cpd_geoip)
179
// with GeoIP addon save country
180
$gi = geoip_open($cpd_geoip_dir.'GeoIP.dat', GEOIP_STANDARD);
181
182
+ if (filter_var($userip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4))
183
+ // IPv4 -> IPv6
184
+ $userip = '::'.$userip;
185
186
+ $country = strtolower(geoip_country_code_by_addr_v6($gi, $userip));
187
188
if (empty($country))
189
$country = '-';
1312
$vo = array();
1313
foreach ($oc as $ip => $x)
1314
{
1315
+ // if ( strpos($ip,'.') !== false && strpos($ip,':') === false)
1316
+ if( filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) )
1317
// IPv4 -> IPv6
1318
$ip = '::'.$ip;
1319
+ $country = strtoupper(geoip_country_code_by_addr_v6($gi, $ip));
1320
+ $cpd_data[$country] = (isset($cpd_data[$country])) ? $cpd_data[$country] + 1 : 1;
1321
}
1322
}
1323
else
geoip.php CHANGED
@@ -23,15 +23,16 @@ static function getCountry( $ip )
23
global $cpd_geoip_dir;
24
25
// IPv4 > IPv6
26
- if ( strpos($ip,'.') !== false && strpos($ip,':') === false)
27
$ip = "::$ip";
28
29
- $gi = geoip_open($cpd_geoip_dir.'GeoIP.dat', GEOIP_STANDARD);
30
-
31
- if (filter_var($ip, FILTER_VALIDATE_IP))
32
{
33
$c = strtolower(geoip_country_code_by_addr_v6($gi, $ip));
34
$cname = geoip_country_name_by_addr_v6($gi, $ip);
35
}
36
37
if ( empty($c) )
@@ -39,7 +40,6 @@ static function getCountry( $ip )
39
$c = 'unknown';
40
$cname = '';
41
}
42
- geoip_close($gi);
43
$country = array( $c, '<div class="cpd-flag cpd-flag-'.$c.'" title="'.$cname.'"></div>', $cname );
44
return $country;
45
}
@@ -58,7 +58,7 @@ static function updateDB()
58
foreach ($res as $r)
59
{
60
$c = '';
61
- if ( strpos($r->realip,'.') !== false && strpos($r->realip,':') === false)
62
{
63
// IPv4
64
$ip = explode('.', $r->realip);
@@ -73,7 +73,7 @@ static function updateDB()
73
// get country
74
$c = strtolower(geoip_country_code_by_addr_v6($gi, '::'.$r->realip));
75
}
76
- else
77
{
78
// IPv6
79
if ( strpos($r->realip, '::1') === 0
@@ -106,10 +106,10 @@ static function updateGeoIpFile()
106
107
// function checks
108
if ( !ini_get('allow_url_fopen') )
109
- return 'Sorry, <code>allow_url_fopen</code> is disabled!';
110
111
if ( !function_exists('gzopen') )
112
- return __('Sorry, necessary functions (zlib) not installed or enabled in php.ini.', 'cpd');
113
114
$gzfile = 'http://geolite.maxmind.com/download/geoip/database/GeoIPv6.dat.gz';
115
$file = $cpd_geoip_dir.'GeoIP.dat';
@@ -118,24 +118,31 @@ static function updateGeoIpFile()
118
$h = gzopen($gzfile, 'rb');
119
$content = gzread($h, 2000000);
120
fclose($h);
121
-
122
- // delete local file
123
- if (is_file($file))
124
- unlink($file);
125
126
- // file deleted?
127
- $del = (is_file($file)) ? 0 : 1;
128
-
129
- // write new locale file
130
- $h = fopen($file, 'wb');
131
- fwrite($h, $content);
132
- fclose($h);
133
134
- @chmod($file, 0755);
135
- if (is_file($file) && $del)
136
- return __('New GeoIP database installed.', 'cpd');
137
else
138
- return __('Sorry, an error occurred. Try again or check the access rights of directory "wp-content/count-per-day-geoip".', 'cpd');
139
}
140
141
23
global $cpd_geoip_dir;
24
25
// IPv4 > IPv6
26
+ if( filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) )
27
$ip = "::$ip";
28
29
+ if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6))
30
{
31
+ // IPv6
32
+ $gi = geoip_open($cpd_geoip_dir.'GeoIP.dat', GEOIP_STANDARD);
33
$c = strtolower(geoip_country_code_by_addr_v6($gi, $ip));
34
$cname = geoip_country_name_by_addr_v6($gi, $ip);
35
+ geoip_close($gi);
36
}
37
38
if ( empty($c) )
40
$c = 'unknown';
41
$cname = '';
42
}
43
$country = array( $c, '<div class="cpd-flag cpd-flag-'.$c.'" title="'.$cname.'"></div>', $cname );
44
return $country;
45
}
58
foreach ($res as $r)
59
{
60
$c = '';
61
+ if ( filter_var($r->realip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) )
62
{
63
// IPv4
64
$ip = explode('.', $r->realip);
73
// get country
74
$c = strtolower(geoip_country_code_by_addr_v6($gi, '::'.$r->realip));
75
}
76
+ else if ( filter_var($r->realip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6) )
77
{
78
// IPv6
79
if ( strpos($r->realip, '::1') === 0
106
107
// function checks
108
if ( !ini_get('allow_url_fopen') )
109
+ return '<div class="error"><p>'.__('Sorry, <code>allow_url_fopen</code> is disabled!', 'cpd').'</p></div>';
110
111
if ( !function_exists('gzopen') )
112
+ return '<div class="error"><p>'.__('Sorry, necessary functions (zlib) not installed or enabled in php.ini.', 'cpd').'</p></div>';
113
114
$gzfile = 'http://geolite.maxmind.com/download/geoip/database/GeoIPv6.dat.gz';
115
$file = $cpd_geoip_dir.'GeoIP.dat';
118
$h = gzopen($gzfile, 'rb');
119
$content = gzread($h, 2000000);
120
fclose($h);
121
+
122
+ if ( strlen($content) < 1000000 )
123
+ return '<div class="error"><p>'.__('Sorry, could not read the GeoIP database file.', 'cpd').'</p></div>';
124
+
125
+ if ( is_writable($cpd_geoip_dir) )
126
+ {
127
+ // delete local file
128
+ if (is_file($file))
129
+ unlink($file);
130
+
131
+ // file deleted?
132
+ $del = (is_file($file)) ? 0 : 1;
133
+
134
+ // write new locale file
135
+ $h = fopen($file, 'wb');
136
+ fwrite($h, $content);
137
+ fclose($h);
138
139
+ @chmod($file, 0755);
140
+ }
141
142
+ if ( is_file($file) && $del && filesize($file) > 1000000 )
143
+ return '<div class="updated"><p>'.__('New GeoIP database installed.', 'cpd').'</p></div>';
144
else
145
+ return '<div class="error"><p>'.__('Sorry, an error occurred. Try again or check the access rights of directory "wp-content/count-per-day-geoip".', 'cpd').'</p></div>';
146
}
147
148
map/map.php CHANGED
@@ -18,10 +18,14 @@ if ( $what == 'online' )
18
$vo = array();
19
foreach ($oc as $ip => $x)
20
{
21
- if ( strpos($ip,'.') !== false && strpos($ip,':') === false)
22
// IPv4 -> IPv6
23
$ip = '::'.$ip;
24
- $country = strtoupper(geoip_country_code_by_addr_v6($gi, $ip));
25
$data[$country] = (isset($data[$country])) ? $data[$country] + 1 : 1;
26
}
27
}
18
$vo = array();
19
foreach ($oc as $ip => $x)
20
{
21
+ $country = '-';
22
+ if( filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) )
23
// IPv4 -> IPv6
24
$ip = '::'.$ip;
25
+
26
+ if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6))
27
+ // IPv6
28
+ $country = strtoupper(geoip_country_code_by_addr_v6($gi, $ip));
29
$data[$country] = (isset($data[$country])) ? $data[$country] + 1 : 1;
30
}
31
}
readme.txt CHANGED
@@ -3,14 +3,12 @@ Contributors: Tom Braider
3
Tags: counter, count, posts, visits, reads, dashboard, widget, shortcode
4
Requires at least: 3.0
5
Tested up to: 4.6
6
- Stable tag: 3.5.3
7
License: Postcardware :)
8
Donate link: http://www.tomsdimension.de/postcards
9
10
Visit Counter, shows reads and visitors per page, visitors today, yesterday, last week, last months and other statistics.
11
12
-
13
-
14
== Description ==
15
16
* count reads and visitors
@@ -308,6 +306,9 @@ show( $before, $after, $show, $count, $page )'
308
309
== Changelog ==
310
311
= 3.5.3 =
312
+ Bugfix: undefined function cpd_inet_pton (once again)
313
3
Tags: counter, count, posts, visits, reads, dashboard, widget, shortcode
4
Requires at least: 3.0
5
Tested up to: 4.6
6
+ Stable tag: 3.5.4
7
License: Postcardware :)
8
Donate link: http://www.tomsdimension.de/postcards
9
10
Visit Counter, shows reads and visitors per page, visitors today, yesterday, last week, last months and other statistics.
11
12
== Description ==
13
14
* count reads and visitors
306
307
== Changelog ==
308
309
+ = 3.5.4 =
310
+ + Bugfix: check for IPv6 compatibility on settings page
311
+
312
= 3.5.3 =
313
+ Bugfix: undefined function cpd_inet_pton (once again)
314