Slimstat Analytics - Version 4.8.4.1

Version Description

  • [Note] As anticipated a few weeks ago, this update drops the information about your visitors' browser plugins, which had been deprecated as not useful and oftentimes unreliable. Please make sure to backup your Slimstat tables if you need to preserve this information for some reason.
  • [Update] We received quite a few messages complaining about our decision to change the default position of the Slimstat menu from the sidebar to the admin bar. We are rolling back this change, and we apologize for any confusion this might have caused.
  • [Update] Added visitor's language to the Activity Log report.
  • [Update] Introduced code optimizations to improve performance when localizing strings related to operating systems, languages, countries, etc.
  • [Fix] Page URLs were not being displayed correctly if the option to display page titles was turned off.
  • [Fix] Not storing empty values in the database: leave as NULL. This will squeeze a few more bytes out of each row stored in the database.
Download this release

Release Info

Developer coolmann
Plugin Icon 128x128 Slimstat Analytics
Version 4.8.4.1
Comparing to
See all releases

Code changes from version 4.8.4 to 4.8.4.1

CHANGELOG.md ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ## Changelog ##
2
+ ### 4.8.4.1 ###
3
+ * [Note] As anticipated a few weeks ago, this update drops the information about your visitors' browser plugins, which had been deprecated as not useful and oftentimes unreliable. Please make sure to backup your Slimstat tables if you need to preserve this information for some reason.
4
+ * [Update] We received quite a few messages complaining about our decision to change the default position of the Slimstat menu from the sidebar to the admin bar. We are rolling back this change, and we apologize for any confusion this might have caused.
5
+ * [Update] Added visitor's language to the Activity Log report.
6
+ * [Update] Introduced code optimizations to improve performance when localizing strings related to operating systems, languages, countries, etc.
7
+ * [Fix] Page URLs were not being displayed correctly if the option to display page titles was turned off.
8
+ * [Fix] Not storing empty values in the database: leave as NULL. This will squeeze a few more bytes out of each row stored in the database.
9
+
10
+ ### 4.8.4 ###
11
+ * [Note] If you're using any of our premium add-ons, please make sure to update them to the latest version available (see Slimstat > Add-ons) as we've updated some references in our code.
12
+ * [Note] We recently received an email from one of our users suggesting that we replace the line charts currently used to display reports over a timeline with **bar charts**, because 'the number of pageviews and IPs are discrete numbers, hence they should also be presented as discrete numbers', according to him. What do you think? Please let us know by [sending us a message](https://support.wp-slimstat.com/) on our support platform. Thank you.
13
+ * [Update] Renamed a few files in the admin. If you're including Slimstat libraries in your custom code, please make sure to check that your references are up-to-date. Also, make sure to clear your cache if you page layout doesn't look right.
14
+ * [Update] [AmCharts](https://www.amcharts.com/javascript-charts/), the library used to render all of our charts, has been updated to version 4.5.3.
15
+ * [Update] When functioning in Client mode, the tracker will now not ignore bots, spiders and the like automatically. Please use the appropriate option under Settings > Exclusions if you would like to ignore bots. This solves an incompatibility issue with some caching plugins which "prefetch" the website, presenting themselves as bots.
16
+ * [Update] Removed tracker notice field under Settings > Maintenance as it was confusing many people and generating extra work for our customer service team.
17
+ * [Update] Removed option to not track "client properties" like screen resolution, etc. Also, removed option to not honor DNT headers, as we received complaints from privacy activists on this matter.
18
+ * [Update] Removed option to change date/time formats and numeric separators: Slimstat will now use the WordPress settings to adjust its behavior.
19
+ * [Update] Removed 'About Slimstat' report, given that some of the information in it has been moved to the Settings.
20
+ * [Update] Removed unused strings, improved contextual descriptions and applied consistent naming conventions across our codebase (first pass).
21
+ * [Update] The Slimstat admin menu is now added to the Admin Bar by default. Please go to Settings > Basic > WordPress Integration and change the corresponding option, if you prefer to use the side menu instead.
22
+ * [Update] Enabled code editor in Settings.
23
+ * [Update] Implemented a new optimized function to retrieve the post count on the Edit Posts/Pages/CPTs screens. Thank you, Lance.
24
+ * [Update] Improved browser detection feature, which will now fallback to the heuristic function if the Browscap data file doesn't contain an exact match for a given browser. This usually happens whenever a new browser version is released, which is not yet included in the data file.
25
+ * [Update] Option to track same-domain referrers is now deactivated by default on new installations.
26
+ * [Update] Enabled wildcards on the exclusion rule by capability.
27
+ * [Update] Improved the overall source code readability score. Now you don't have any other excuses to not contribute to this project!
28
+ * [Update] Table indexes are now enabled by default in the database.
29
+ * [Update] Added new WordPress filter to the Browscap Library, so that third-party tools can manipulate the data before it's returned to the tracker.
30
+ * [Update] Added [nonce](https://wordpress.org/support/article/glossary/#nonce) to Settings page for improved security.
31
+
32
+ ### 4.8.3 ###
33
+ * [Note] Thank you for all the great feedback you provided to our unofficial survey about retiring the 'browser plugins' feature. The vast majority of those who replied confirmed what we already thought. Please consider backing up your database if you would like to preserve this information for future analysis. With this update, we removed the portion of code that tracks that information, but kept the existing data untouched. In a couple of releases, code will be added to actually drop this column from the database.
34
+ * [New] If English is not your primary languge, Slimstat will now display a notice asking for your help to [translate our plugin](https://translate.wordpress.org/projects/wp-plugins/wp-slimstat/) in your language. Please consider volunteering for this great opportunity to help our community!
35
+ * [Update] We are working with the GlotPress community to improve the way Slimstat speaks your language. We had to change the way certain strings are defined in our source code. Please let us know if you notice any unexpected behavior when analyzing languages, countries and operating systems.
36
+ * [Update] Removed Facebook rankings metrics, as the API has been deprecated and the new one is not accessible without a private token.
37
+ * [Update] MozRank has been deprecated, we have replaced it with the Domain Authority metric.
38
+ * [Update] Spring cleaning in the 'admin notices' department: removed some obsolete CSS code, replaced by built-in WP classes and definitions.
39
+ * [Fix] Changed the default minimum capability to access the reports from 'activate_plugins' to 'manage_options', so that regular administrators (a.k.a. non-super admins) in a multisite environment can still see their own reports (thank you, [homepageware](https://wordpress.org/support/topic/slimstat-and-multisite/)). This update does not affect existing installations: if you want regular admins to see their own stats, please go to Slimstat > Settings > Access Control and change the values in the corresponding fields.
40
+ * [Fix] The autorefresh feature for the Access Log was not working as expected. Thank you to all the users who patiently worked with us to identify the issue.
41
+ * [Fix] A conflict between the Async loader and AmCharts 4 was causing the Screen Options tab to not work as expected (thank you, [softfully](https://wordpress.org/support/topic/screen-options-doesnt-open/)).
42
+ * [Fix] Removed unused setting 'Expand Reports'
43
+
44
+ ### 4.8.2 ###
45
+ * [Note] Our team has been contemplating the idea of deprecating the information collected about your visitors' *browser plugins* (Java, PDF reader, RealView player, Silverlight, etc). In this day and age, where browsers use either built-in functionality to provide those features, or extensions that cannot be tracked for privacy purposes, it feels anachronistic to continue collecting this outdated information. By getting rid of this specific feature, we can streamline our code, improve performance, and reduce the database size. However, we wanted to hear from our users before anything is actually implemented. Please do not hesitate [to let us know](https://support.wp-slimstat.com) if you are using the 'browser plugins' field for your reporting needs.
46
+ * [New] Many CRM integration plugins rely mostly on the user emails, not usernames. For this reason, a new email field has been added to the database (thank you, [sandrodz](https://github.com/sandrodz)).
47
+ * [Update] Changed the preset intervals in the date filter dropdown so that you can get a day over day comparison (Monday over Monday, etc) for improved accuracy.
48
+ * [Update] [AmCharts](https://www.amcharts.com/javascript-charts/), the library used to render all of our charts, has been updated to version 4.4.9.
49
+ * [Fix] The countdown timer on the Access Log was not working as expected (thank you, [anniest](https://wordpress.org/support/topic/no-refresh-2/)).
50
+ * [Fix] The countdown timer was causing an warning message to appear on other screens.
51
+ * [Fix] Minor aesthetic improvements.
52
+
53
+ ### 4.8.1 ###
54
+ * [Update] Async mode will now serialize concurrent requests to the backend to optimize performance and reduce server load.
55
+ * [Fix] Addressed a remote XSS vulnerability disclosed by Sucuri/GoDaddy.
56
+ * [Fix] Charts were displaying the wrong label for certain values (thank you, Alex).
57
+
58
+ ### 4.8 ###
59
+ * [Note] Now that we have a cleaner foundation to build on, it's time to start introducing new reports and new ways to segment your audience and the traffic they generate. While our users test the latest changes and updates (to confirm that the foundation is indeed solid and bug-free), we are hard at work implementing the first batch of new reports. Some of them will be made available in the free version, while others will be added to our premium add-on, [User Overview](https://www.wp-slimstat.com/downloads/user-overview/). And we need your help! If you think that a specific report should be added to Slimstat, please do not hesitate to let us know!
60
+ * [Note] Worried about the recent [news regarding jQuery vulnerabilities](https://www.zdnet.com/article/popular-jquery-javascript-library-impacted-by-prototype-pollution-flaw/)? Slimstat doesn't use jQuery as a dependency, so you can sleep tight knowing that your website will not be affected.
61
+ * [Update] [AmCharts](https://www.amcharts.com/javascript-charts/), the library used to render all of our charts, has been updated to version 4. This new release is not backward compatible, so the code to integrate it with Slimstat had to be completely rewritten. Please let us know if you notice any issues.
62
+ * [Update] [Plugin Update Checker](https://github.com/YahnisElsts/plugin-update-checker), the library we use to check if a new version of our premium add-ons is available for download, has been update to version 4.6.
63
+ * [Update] If you're using our partner's CDN functionality (JsDelivr) to load the tracker, their link is now always loaded over HTTPS for added security.
64
+ * [Update] Switched the Add-on Update checker URL to HTTPS, for added security (thank you, Peter).
65
+ * [Update] Changed the protocol of all the URLs used within Slimstat, including references to our documentation, to HTTPS.
66
+ * [Update] Added icon to geolocate Originating IP addresses, when detected.
67
+ * [Fix] The optout cookie path was not being set correctly (thank you, [ralfkerkhoff](https://wordpress.org/support/topic/opt-out-cookie-per-page/)).
68
+ * [Fix] Google seems to be using a new User Agent string for its "mobile" crawler, which was causing Slimstat from incorrectly identifying visits as coming from mobile devices, instead of bots (thank you, Ron).
69
+ * [Fix] An error was being returned if SVG elements were using the A tag on a page (thank you, [snaphappyme](https://wordpress.org/support/topic/uncaught-typeerror-all_linksn-href-indexof/)).
70
+ * [Fix] A bug was causing Slimstat to incorrectly geolocate visits to websites behind a Cloudflare load balancer. Please update the IP Address Fix add-on as well.
71
+ * [Fix] Tweaked the formula to determine your website bounce rate, and updated the associated description to better reflect the underlying calculations.
README.md CHANGED
@@ -1,20 +1,10 @@
1
- # Slimstat Analytics
2
- **Contributors:** coolmann
3
- **Donate link:** https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=BNJR5EZNY3W38
4
- **Tags:** analytics, statistics, counter, tracking, reports, wassup, geolocation, online users, spider, tracker, pageviews, stats, maxmind, statistics, statpress, power stats, hit
5
- **Requires at least:** 3.8
6
- **Tested up to:** 5.2
7
- **Stable tag:** 4.8.4
8
-
9
-
10
- ## Description
11
  The leading web analytics plugin for WordPress. Track returning customers and registered users, monitor Javascript events, detect intrusions, analyze email campaigns. Thousands of WordPress sites are already using it.
12
 
13
-
14
- ### Main features
15
- * **Real-time access log**: measure server latency, track page events, keep an eye on your bounce rate and much more.
16
  * **Shortcodes**: display reports in widgets or directly in posts and pages.
17
- * **GDPR guidelines**: fully compliant with the European law. You can test your website at [cookiebot.com](https://www.cookiebot.com/en/).
18
  * **Filters**: exclude users from statistics collection based on various criteria, including user roles, common robots, IP subnets, admin pages, country, etc.
19
  * **Export to Excel**: download your reports as CSV files, generate user heatmaps or get daily emails right in your mailbox (via premium add-ons).
20
  * **Cache**: compatible with W3 Total Cache, WP SuperCache, CloudFlare and most caching plugins.
@@ -22,110 +12,33 @@ The leading web analytics plugin for WordPress. Track returning customers and re
22
  * **Geolocation**: identify your visitors by city and country, browser type and operating system (courtesy of [MaxMind](https://www.maxmind.com/) and [Browscap](https://browscap.org)).
23
  * **World Map**: see where your visitors are coming from, even on your mobile device (courtesy of [amMap](https://www.ammap.com/)).
24
 
25
-
26
- ### Premium Add-ons
27
  Visit [our website](https://www.wp-slimstat.com/addons/) for a list of available extensions.
28
 
29
-
30
- ### Contribute
31
- Slimstat Analytics is an open source project, dependent in large part on community support. You can fork our [Github repository](https://github.com/slimstat/wp-slimstat) and submit code enhancements, bugfixes or provide localization files to let our plugin speak even more languages. [This page](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=BNJR5EZNY3W38)
32
  is for those who would like to donate money - be it once, be it regularly, be it a small or a big amount. Everything is set up for an easy donation process.
33
  Try it out, you'll be amazed how good it feels! If you're on a tight budget, and coding is not your thing, please consider writing [a review](https://wordpress.org/support/plugin/wp-slimstat/reviews/#new-post) for Slimstat as a token of appreciation for our hard work!
34
 
35
-
36
- ### Requirements
37
  * WordPress 3.8+
38
  * PHP 5.2+ (or 7.1+ if you use the Browscap data file)
39
  * MySQL 5.0.3+
40
  * At least 40 MB of free web space
41
  * At least 5 MB of free DB space
42
  * At least 32 Mb of free PHP memory for the tracker (peak memory usage)
43
- * IE9+ or any browser supporting HTML5, to access the reports
44
-
45
 
46
- ## Installation
47
  1. In your WordPress admin, go to Plugins > Add New
48
- 2. Search for WP Slimstat Analytics
49
- 3. Click on **Install Now** under WP Slimstat Analytics and then activate the plugin
50
  4. Make sure your template calls `wp_footer()` or the equivalent hook somewhere (possibly just before the `</body>` tag)
51
- 5. Go to Slimstat > Settings > Maintenance tab > MaxMind IP to Country section and click on "Install GeoLite DB" to detect your visitors' countries based on their IP addresses
52
- 6. If your `wp-admin` folder is not publicly accessible, make sure to check our [knowledge base](https://docs.wp-slimstat.com/) to see if there's anything else you need to do
53
-
54
 
55
- ## Please note
56
  * If you decide to uninstall Slimstat Analytics, all the stats will be **PERMANENTLY** deleted from your database. Make sure to setup a database backup (wp_slim_*) to avoid losing your data.
57
  * If you are upgrading from a version prior to 4.0, please [install version 4.0](https://downloads.wordpress.org/plugin/wp-slimstat.4.0.zip) first to upgrade the database structure and download the new Geolocation data.
58
 
59
-
60
- ## Frequently Asked Questions
61
  Our knowledge base is available on our [support center](https://docs.wp-slimstat.com/) website.
62
 
63
-
64
- ## Changelog
65
-
66
- ### 4.8.4
67
- * [Note] If you're using any of our premium add-ons, please make sure to update them to the latest version available (see Slimstat > Add-ons) as we've updated some references in our code.
68
- * [Note] We recently received an email from one of our users suggesting that we replace the line charts currently used to display reports over a timeline with **bar charts**, because 'the number of pageviews and IPs are discrete numbers, hence they should also be presented as discrete numbers', according to him. What do you think? Please let us know by [sending us a message](https://support.wp-slimstat.com/) on our support platform. Thank you.
69
- * [Update] Renamed a few files in the admin. If you're including Slimstat libraries in your custom code, please make sure to check that your references are up-to-date. Also, make sure to clear your cache if you page layout doesn't look right.
70
- * [Update] [AmCharts](https://www.amcharts.com/javascript-charts/), the library used to render all of our charts, has been updated to version 4.5.3.
71
- * [Update] When functioning in Client mode, the tracker will now not ignore bots, spiders and the like automatically. Please use the appropriate option under Settings > Exclusions if you would like to ignore bots. This solves an incompatibility issue with some caching plugins which "prefetch" the website, presenting themselves as bots.
72
- * [Update] Removed tracker notice field under Settings > Maintenance as it was confusing many people and generating extra work for our customer service team.
73
- * [Update] Removed option to not track "client properties" like screen resolution, etc. Also, removed option to not honor DNT headers, as we received complaints from privacy activists on this matter.
74
- * [Update] Removed option to change date/time formats and numeric separators: Slimstat will now use the WordPress settings to adjust its behavior.
75
- * [Update] Removed 'About Slimstat' report, given that some of the information in it has been moved to the Settings.
76
- * [Update] Removed unused strings, improved contextual descriptions and applied consistent naming conventions across our codebase (first pass).
77
- * [Update] The Slimstat admin menu is now added to the Admin Bar by default. Please go to Settings > Basic > WordPress Integration and change the corresponding option, if you prefer to use the side menu instead.
78
- * [Update] Enabled code editor in Settings.
79
- * [Update] Implemented a new optimized function to retrieve the post count on the Edit Posts/Pages/CPTs screens. Thank you, Lance.
80
- * [Update] Improved browser detection feature, which will now fallback to the heuristic function if the Browscap data file doesn't contain an exact match for a given browser. This usually happens whenever a new browser version is released, which is not yet included in the data file.
81
- * [Update] Option to track same-domain referrers is now deactivated by default on new installations.
82
- * [Update] Enabled wildcards on the exclusion rule by capability.
83
- * [Update] Improved the overall source code readability score. Now you don't have any other excuses to not contribute to this project!
84
- * [Update] Table indexes are now enabled by default in the database.
85
- * [Update] Added new WordPress filter to the Browscap Library, so that third-party tools can manipulate the data before it's returned to the tracker.
86
- * [Update] Added [nonce](https://wordpress.org/support/article/glossary/#nonce) to Settings page for improved security.
87
-
88
-
89
- ### 4.8.3
90
- * [Note] Thank you for all the great feedback you provided to our unofficial survey about retiring the 'browser plugins' feature. The vast majority of those who replied confirmed what we already thought. Please consider backing up your database if you would like to preserve this information for future analysis. With this update, we removed the portion of code that tracks that information, but kept the existing data untouched. In a couple of releases, code will be added to actually drop this column from the database.
91
- * [New] If English is not your primary languge, Slimstat will now display a notice asking for your help to [translate our plugin](https://translate.wordpress.org/projects/wp-plugins/wp-slimstat/) in your language. Please consider volunteering for this great opportunity to help our community!
92
- * [Update] We are working with the GlotPress community to improve the way Slimstat speaks your language. We had to change the way certain strings are defined in our source code. Please let us know if you notice any unexpected behavior when analyzing languages, countries and operating systems.
93
- * [Update] Removed Facebook rankings metrics, as the API has been deprecated and the new one is not accessible without a private token.
94
- * [Update] MozRank has been deprecated, we have replaced it with the Domain Authority metric.
95
- * [Update] Spring cleaning in the 'admin notices' department: removed some obsolete CSS code, replaced by built-in WP classes and definitions.
96
- * [Fix] Changed the default minimum capability to access the reports from 'activate_plugins' to 'manage_options', so that regular administrators (a.k.a. non-super admins) in a multisite environment can still see their own reports (thank you, [homepageware](https://wordpress.org/support/topic/slimstat-and-multisite/)). This update does not affect existing installations: if you want regular admins to see their own stats, please go to Slimstat > Settings > Access Control and change the values in the corresponding fields.
97
- * [Fix] The autorefresh feature for the Access Log was not working as expected. Thank you to all the users who patiently worked with us to identify the issue.
98
- * [Fix] A conflict between the Async loader and AmCharts 4 was causing the Screen Options tab to not work as expected (thank you, [softfully](https://wordpress.org/support/topic/screen-options-doesnt-open/)).
99
- * [Fix] Removed unused setting 'Expand Reports'
100
-
101
-
102
- ### 4.8.2
103
- * [Note] Our team has been contemplating the idea of deprecating the information collected about your visitors' *browser plugins* (Java, PDF reader, RealView player, Silverlight, etc). In this day and age, where browsers use either built-in functionality to provide those features, or extensions that cannot be tracked for privacy purposes, it feels anachronistic to continue collecting this outdated information. By getting rid of this specific feature, we can streamline our code, improve performance, and reduce the database size. However, we wanted to hear from our users before anything is actually implemented. Please do not hesitate [to let us know](https://support.wp-slimstat.com) if you are using the 'browser plugins' field for your reporting needs.
104
- * [New] Many CRM integration plugins rely mostly on the user emails, not usernames. For this reason, a new email field has been added to the database (thank you, [sandrodz](https://github.com/sandrodz)).
105
- * [Update] Changed the preset intervals in the date filter dropdown so that you can get a day over day comparison (Monday over Monday, etc) for improved accuracy.
106
- * [Update] [AmCharts](https://www.amcharts.com/javascript-charts/), the library used to render all of our charts, has been updated to version 4.4.9.
107
- * [Fix] The countdown timer on the Access Log was not working as expected (thank you, [anniest](https://wordpress.org/support/topic/no-refresh-2/)).
108
- * [Fix] The countdown timer was causing an warning message to appear on other screens.
109
- * [Fix] Minor aesthetic improvements.
110
-
111
-
112
- ### 4.8.1
113
- * [Update] Async mode will now serialize concurrent requests to the backend to optimize performance and reduce server load.
114
- * [Fix] Addressed a remote XSS vulnerability disclosed by Sucuri/GoDaddy.
115
- * [Fix] Charts were displaying the wrong label for certain values (thank you, Alex).
116
-
117
-
118
- ### 4.8
119
- * [Note] Now that we have a cleaner foundation to build on, it's time to start introducing new reports and new ways to segment your audience and the traffic they generate. While our users test the latest changes and updates (to confirm that the foundation is indeed solid and bug-free), we are hard at work implementing the first batch of new reports. Some of them will be made available in the free version, while others will be added to our premium add-on, [User Overview](https://www.wp-slimstat.com/downloads/user-overview/). And we need your help! If you think that a specific report should be added to Slimstat, please do not hesitate to let us know!
120
- * [Note] Worried about the recent [news regarding jQuery vulnerabilities](https://www.zdnet.com/article/popular-jquery-javascript-library-impacted-by-prototype-pollution-flaw/)? Slimstat doesn't use jQuery as a dependency, so you can sleep tight knowing that your website will not be affected.
121
- * [Update] [AmCharts](https://www.amcharts.com/javascript-charts/), the library used to render all of our charts, has been updated to version 4. This new release is not backward compatible, so the code to integrate it with Slimstat had to be completely rewritten. Please let us know if you notice any issues.
122
- * [Update] [Plugin Update Checker](https://github.com/YahnisElsts/plugin-update-checker), the library we use to check if a new version of our premium add-ons is available for download, has been update to version 4.6.
123
- * [Update] If you're using our partner's CDN functionality (JsDelivr) to load the tracker, their link is now always loaded over HTTPS for added security.
124
- * [Update] Switched the Add-on Update checker URL to HTTPS, for added security (thank you, Peter).
125
- * [Update] Changed the protocol of all the URLs used within Slimstat, including references to our documentation, to HTTPS.
126
- * [Update] Added icon to geolocate Originating IP addresses, when detected.
127
- * [Fix] The optout cookie path was not being set correctly (thank you, [ralfkerkhoff](https://wordpress.org/support/topic/opt-out-cookie-per-page/)).
128
- * [Fix] Google seems to be using a new User Agent string for its "mobile" crawler, which was causing Slimstat from incorrectly identifying visits as coming from mobile devices, instead of bots (thank you, Ron).
129
- * [Fix] An error was being returned if SVG elements were using the A tag on a page (thank you, [snaphappyme](https://wordpress.org/support/topic/uncaught-typeerror-all_linksn-href-indexof/)).
130
- * [Fix] A bug was causing Slimstat to incorrectly geolocate visits to websites behind a Cloudflare load balancer. Please update the IP Address Fix add-on as well.
131
- * [Fix] Tweaked the formula to determine your website bounce rate, and updated the associated description to better reflect the underlying calculations.
1
+ # Slimstat Analytics #
 
 
 
 
 
 
 
 
 
2
  The leading web analytics plugin for WordPress. Track returning customers and registered users, monitor Javascript events, detect intrusions, analyze email campaigns. Thousands of WordPress sites are already using it.
3
 
4
+ ### Main features ###
5
+ * **Real-Time Access Log**: measure server latency, track page events, keep an eye on your bounce rate and much more.
 
6
  * **Shortcodes**: display reports in widgets or directly in posts and pages.
7
+ * **GDPR**: fully compliant with the GDPR European law. You can test your website at [cookiebot.com](https://www.cookiebot.com/en/).
8
  * **Filters**: exclude users from statistics collection based on various criteria, including user roles, common robots, IP subnets, admin pages, country, etc.
9
  * **Export to Excel**: download your reports as CSV files, generate user heatmaps or get daily emails right in your mailbox (via premium add-ons).
10
  * **Cache**: compatible with W3 Total Cache, WP SuperCache, CloudFlare and most caching plugins.
12
  * **Geolocation**: identify your visitors by city and country, browser type and operating system (courtesy of [MaxMind](https://www.maxmind.com/) and [Browscap](https://browscap.org)).
13
  * **World Map**: see where your visitors are coming from, even on your mobile device (courtesy of [amMap](https://www.ammap.com/)).
14
 
15
+ ### Premium Add-ons ###
 
16
  Visit [our website](https://www.wp-slimstat.com/addons/) for a list of available extensions.
17
 
18
+ ### Contribute ###
19
+ Slimstat Analytics is an open source project, dependent in large part on community support. You can fork our [Github repository](https://github.com/slimstat/wp-slimstat) and submit code enhancements, bugfixes or provide localization files to let our plugin speak even more languages. [This page](https://www.paypal.com/cgi-bin/webscr?cmd###_s-xclick&hosted_button_id###BNJR5EZNY3W38)
 
20
  is for those who would like to donate money - be it once, be it regularly, be it a small or a big amount. Everything is set up for an easy donation process.
21
  Try it out, you'll be amazed how good it feels! If you're on a tight budget, and coding is not your thing, please consider writing [a review](https://wordpress.org/support/plugin/wp-slimstat/reviews/#new-post) for Slimstat as a token of appreciation for our hard work!
22
 
23
+ ### Requirements ###
 
24
  * WordPress 3.8+
25
  * PHP 5.2+ (or 7.1+ if you use the Browscap data file)
26
  * MySQL 5.0.3+
27
  * At least 40 MB of free web space
28
  * At least 5 MB of free DB space
29
  * At least 32 Mb of free PHP memory for the tracker (peak memory usage)
 
 
30
 
31
+ ## Installation ##
32
  1. In your WordPress admin, go to Plugins > Add New
33
+ 2. Search for limstat Analytics
34
+ 3. Click on **Install Now** next to Slimstat Analytics and then activate the plugin
35
  4. Make sure your template calls `wp_footer()` or the equivalent hook somewhere (possibly just before the `</body>` tag)
36
+ 5. If your `wp-admin` folder is not publicly accessible, make sure to check our [knowledge base](https://docs.wp-slimstat.com/) to see if there's anything else you need to do
 
 
37
 
38
+ ## Please note ##
39
  * If you decide to uninstall Slimstat Analytics, all the stats will be **PERMANENTLY** deleted from your database. Make sure to setup a database backup (wp_slim_*) to avoid losing your data.
40
  * If you are upgrading from a version prior to 4.0, please [install version 4.0](https://downloads.wordpress.org/plugin/wp-slimstat.4.0.zip) first to upgrade the database structure and download the new Geolocation data.
41
 
42
+ ## Frequently Asked Questions ##
 
43
  Our knowledge base is available on our [support center](https://docs.wp-slimstat.com/) website.
44
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
admin/assets/images/platforms/unknown.png DELETED
Binary file
admin/index.php CHANGED
@@ -16,12 +16,11 @@ class wp_slimstat_admin {
16
  * Init -- Sets things up.
17
  */
18
  public static function init() {
19
- self::$admin_notice = "Hey, where did Slimstat go? Relax, there's no need to panic. Our team is just reorganizing and removing unused settings, options, contextual descriptions. One of the most visible changes is that the Slimstat menu is now <strong>added to the Admin Bar by default</strong>. Please go to Settings > General > WordPress Integration and change the corresponding option, if you prefer to use the side menu instead.";
20
- // self::$admin_notice = "We recently received an email from one of our users suggesting that we replace the line charts currently used to display reports over a timeline with <strong>bar charts</strong>, because 'the number of pageviews and IPs are discrete numbers, hence they should also be presented as discrete numbers', according to him. What do you think? Please let us know by <a href='https://support.wp-slimstat.com/' target='_blank'>sending us a message</a> on our support platform. Thank you.";
21
- // self::$admin_notice = "In this day and age where every single social media platform knows our individual whereabouts on the Interwebs, we have been doing some research to implement what techies out there call <a href='https://amiunique.org/fp' target='_blank'>browser fingerprinting</a>. With this technique, it is not necessary to install any form of cookie on the user browser to collect a fingerprint. This means that the act of fingerprinting a specific browser is stateless and transparent, and thus much more accurate on average than relying on cookies. We are already wearing our lab coats and are hard at work to identify ways to leverage these tools in Slimstat. Stay tuned!";
22
 
23
  // Load language files
24
- load_plugin_textdomain( 'wp-slimstat', WP_PLUGIN_DIR .'/wp-slimstat/languages', '/wp-slimstat/languages' );
25
 
26
  // Define the default screens
27
  $has_network_reports = get_user_option( "meta-box-order_slimstat_page_slimlayout-network", 1 );
@@ -82,7 +81,7 @@ class wp_slimstat_admin {
82
 
83
  // WPMU - New blog created
84
  $active_sitewide_plugins = get_site_option( 'active_sitewide_plugins' );
85
- if ( !empty( $active_sitewide_plugins[ 'wp-slimstat/wp-slimstat.php' ] ) ) {
86
  add_action( 'wpmu_new_blog', array( __CLASS__, 'new_blog' ) );
87
  }
88
 
@@ -182,7 +181,7 @@ class wp_slimstat_admin {
182
  add_action( 'wp_ajax_slimstat_delete_pageview', array( __CLASS__, 'delete_pageview' ) );
183
  }
184
 
185
- // Hide plugins
186
  if ( wp_slimstat::$settings[ 'hide_addons' ] == 'on' ) {
187
  add_filter( 'all_plugins', array( __CLASS__, 'hide_addons' ) );
188
  }
@@ -208,7 +207,6 @@ class wp_slimstat_admin {
208
  switch_to_blog( $_blog_id );
209
  self::init_environment();
210
  restore_current_blog();
211
- // wp_slimstat::$settings = get_option( 'slimstat_options', array() );
212
  }
213
  // END: new_blog
214
 
@@ -255,17 +253,16 @@ class wp_slimstat_admin {
255
  id INT UNSIGNED NOT NULL auto_increment,
256
  ip VARCHAR(39) DEFAULT NULL,
257
  other_ip VARCHAR(39) DEFAULT NULL,
258
- username VARCHAR(255) DEFAULT NULL,
259
- email VARCHAR(255) DEFAULT NULL,
260
 
261
  country VARCHAR(16) DEFAULT NULL,
262
  location VARCHAR(36) DEFAULT NULL,
263
- city VARCHAR(255) DEFAULT NULL,
264
 
265
  referer VARCHAR(2048) DEFAULT NULL,
266
  resource VARCHAR(2048) DEFAULT NULL,
267
  searchterms VARCHAR(2048) DEFAULT NULL,
268
- plugins VARCHAR(255) DEFAULT NULL,
269
  notes VARCHAR(2048) DEFAULT NULL,
270
  visit_id INT UNSIGNED NOT NULL DEFAULT 0,
271
  server_latency INT(10) UNSIGNED DEFAULT 0,
@@ -276,6 +273,7 @@ class wp_slimstat_admin {
276
  browser_type TINYINT UNSIGNED DEFAULT 0,
277
  platform VARCHAR(15) DEFAULT NULL,
278
  language VARCHAR(5) DEFAULT NULL,
 
279
  user_agent VARCHAR(2048) DEFAULT NULL,
280
 
281
  resolution VARCHAR(12) DEFAULT NULL,
@@ -289,6 +287,7 @@ class wp_slimstat_admin {
289
 
290
  outbound_resource VARCHAR(2048) DEFAULT NULL,
291
 
 
292
  dt_out INT(10) UNSIGNED DEFAULT 0,
293
  dt INT(10) UNSIGNED DEFAULT 0,
294
 
@@ -424,6 +423,19 @@ class wp_slimstat_admin {
424
  }
425
  // --- END: Updates for version 4.8.4 ---
426
 
 
 
 
 
 
 
 
 
 
 
 
 
 
427
  // Now we can update the version stored in the database
428
  wp_slimstat::$settings[ 'version' ] = wp_slimstat::$version;
429
  wp_slimstat::$settings[ 'notice_latest_news' ] = 'on';
@@ -581,7 +593,7 @@ class wp_slimstat_admin {
581
  // END: add_view_menu
582
 
583
  /**
584
- * Adds a new entry to the WordPress Toolbar
585
  */
586
  public static function add_menu_to_adminbar() {
587
  // If this user is whitelisted, we use the minimum capability
@@ -658,7 +670,7 @@ class wp_slimstat_admin {
658
  // END: add_menu_to_adminbar
659
 
660
  /**
661
- * Adds a new entry in the admin menu, to manage Slimstat options
662
  */
663
  public static function add_customize_menu( $_s ) {
664
  wp_slimstat::$settings[ 'capability_can_customize' ] = empty( wp_slimstat::$settings[ 'capability_can_customize' ] ) ? 'manage_options' : wp_slimstat::$settings[ 'capability_can_customize' ];
16
  * Init -- Sets things up.
17
  */
18
  public static function init() {
19
+ self::$admin_notice = "We recently received an email from one of our users suggesting that we replace the line charts currently used to display reports over a timeline with <strong>bar charts</strong>, because 'the number of pageviews and IPs are discrete numbers, hence they should also be presented as discrete numbers', according to him. What do you think? Please let us know by <a href='https://support.wp-slimstat.com/' target='_blank'>sending us a message</a> on our support platform. Thank you.";
20
+ // self::$admin_notice = "In this day and age where every single social media platform knows our individual whereabouts on the Interwebs, we have been doing some research to implement what techies out there call <a href='https://amiunique.org/fp' target='_blank'>browser fingerprinting</a>. With this technique, it is not necessary to install any form of cookie on the user browser to collect a fingerprint. This means that the act of fingerprinting a specific browser is stateless and transparent, and thus much more accurate on average than relying on cookies. We are already wearing our lab coats and are hard at work to identify ways to leverage <a href='https://github.com/Valve/fingerprintjs2' target='_blank'>tools like Fingerprint2</a> in Slimstat. This will also allow the tracker to record things like the user's timezone: wouldn't it be nice to know what time it was for the user who was visiting your website? Of course, if you have Privacy Mode enabled, this feature will not be used, in compliance with GDPR and other international privacy laws. Stay tuned!";
 
21
 
22
  // Load language files
23
+ load_plugin_textdomain( 'wp-slimstat', false, '/wp-slimstat/languages' );
24
 
25
  // Define the default screens
26
  $has_network_reports = get_user_option( "meta-box-order_slimstat_page_slimlayout-network", 1 );
81
 
82
  // WPMU - New blog created
83
  $active_sitewide_plugins = get_site_option( 'active_sitewide_plugins' );
84
+ if ( !empty( $active_sitewide_plugins[ 'wp-slimstat/wp-slimstat.php' ] ) ) {
85
  add_action( 'wpmu_new_blog', array( __CLASS__, 'new_blog' ) );
86
  }
87
 
181
  add_action( 'wp_ajax_slimstat_delete_pageview', array( __CLASS__, 'delete_pageview' ) );
182
  }
183
 
184
+ // Hide add-ons
185
  if ( wp_slimstat::$settings[ 'hide_addons' ] == 'on' ) {
186
  add_filter( 'all_plugins', array( __CLASS__, 'hide_addons' ) );
187
  }
207
  switch_to_blog( $_blog_id );
208
  self::init_environment();
209
  restore_current_blog();
 
210
  }
211
  // END: new_blog
212
 
253
  id INT UNSIGNED NOT NULL auto_increment,
254
  ip VARCHAR(39) DEFAULT NULL,
255
  other_ip VARCHAR(39) DEFAULT NULL,
256
+ username VARCHAR(256) DEFAULT NULL,
257
+ email VARCHAR(256) DEFAULT NULL,
258
 
259
  country VARCHAR(16) DEFAULT NULL,
260
  location VARCHAR(36) DEFAULT NULL,
261
+ city VARCHAR(256) DEFAULT NULL,
262
 
263
  referer VARCHAR(2048) DEFAULT NULL,
264
  resource VARCHAR(2048) DEFAULT NULL,
265
  searchterms VARCHAR(2048) DEFAULT NULL,
 
266
  notes VARCHAR(2048) DEFAULT NULL,
267
  visit_id INT UNSIGNED NOT NULL DEFAULT 0,
268
  server_latency INT(10) UNSIGNED DEFAULT 0,
273
  browser_type TINYINT UNSIGNED DEFAULT 0,
274
  platform VARCHAR(15) DEFAULT NULL,
275
  language VARCHAR(5) DEFAULT NULL,
276
+ fingerprint VARCHAR(256) DEFAULT NULL,
277
  user_agent VARCHAR(2048) DEFAULT NULL,
278
 
279
  resolution VARCHAR(12) DEFAULT NULL,
287
 
288
  outbound_resource VARCHAR(2048) DEFAULT NULL,
289
 
290
+ tz_offset SMALLINT DEFAULT 0,
291
  dt_out INT(10) UNSIGNED DEFAULT 0,
292
  dt INT(10) UNSIGNED DEFAULT 0,
293
 
423
  }
424
  // --- END: Updates for version 4.8.4 ---
425
 
426
+ // --- Updates for version 4.8.4.1 ---
427
+ if ( version_compare( wp_slimstat::$settings[ 'version' ], '4.8.4.1', '<' ) ) {
428
+ // Goodbye, browser plugins
429
+ wp_slimstat::$wpdb->query( "ALTER TABLE {$GLOBALS[ 'wpdb' ]->prefix}slim_stats DROP COLUMN plugins" );
430
+
431
+ // Hello there, fingerprint and timezone offset
432
+ $my_wpdb->query( "ALTER TABLE {$GLOBALS['wpdb']->prefix}slim_stats ADD COLUMN fingerprint VARCHAR(256) DEFAULT NULL AFTER language" );
433
+ $my_wpdb->query( "ALTER TABLE {$GLOBALS['wpdb']->prefix}slim_stats_archive ADD COLUMN fingerprint VARCHAR(255) DEFAULT NULL AFTER language" );
434
+ $my_wpdb->query( "ALTER TABLE {$GLOBALS['wpdb']->prefix}slim_stats ADD COLUMN tz_offset SMALLINT DEFAULT 0 AFTER outbound_resource" );
435
+ $my_wpdb->query( "ALTER TABLE {$GLOBALS['wpdb']->prefix}slim_stats_archive ADD COLUMN tz_offset SMALLINT DEFAULT 0 AFTER outbound_resource" );
436
+ }
437
+ // --- END: Updates for version 4.8.4.1 ---
438
+
439
  // Now we can update the version stored in the database
440
  wp_slimstat::$settings[ 'version' ] = wp_slimstat::$version;
441
  wp_slimstat::$settings[ 'notice_latest_news' ] = 'on';
593
  // END: add_view_menu
594
 
595
  /**
596
+ * Adds a new entry in the WordPress Admin Bar
597
  */
598
  public static function add_menu_to_adminbar() {
599
  // If this user is whitelisted, we use the minimum capability
670
  // END: add_menu_to_adminbar
671
 
672
  /**
673
+ * Adds a new entry in the admin menu, to customize the reports layout
674
  */
675
  public static function add_customize_menu( $_s ) {
676
  wp_slimstat::$settings[ 'capability_can_customize' ] = empty( wp_slimstat::$settings[ 'capability_can_customize' ] ) ? 'manage_options' : wp_slimstat::$settings[ 'capability_can_customize' ];
admin/view/index.php CHANGED
@@ -111,7 +111,7 @@
111
  </fieldset><!-- .slimstat-date-filters -->
112
 
113
  <?php foreach( wp_slimstat_db::$filters_normalized[ 'columns' ] as $a_key => $a_details ): ?>
114
- <input type="hidden" name="fs[<?php echo $a_key ?>]" class="slimstat-post-filter" value="<?php echo htmlspecialchars($a_details[0].' '.$a_details[1]) ?>"/>
115
  <?php endforeach ?>
116
 
117
  <?php foreach ( wp_slimstat_db::$filters_normalized[ 'date' ] as $a_key => $a_value ) : if ( !empty( $a_value ) ): ?>
111
  </fieldset><!-- .slimstat-date-filters -->
112
 
113
  <?php foreach( wp_slimstat_db::$filters_normalized[ 'columns' ] as $a_key => $a_details ): ?>
114
+ <input type="hidden" name="fs[<?php echo $a_key ?>]" class="slimstat-post-filter" value="<?php echo htmlspecialchars( $a_details[ 0 ] . ' ' . $a_details[ 1 ] ) ?>"/>
115
  <?php endforeach ?>
116
 
117
  <?php foreach ( wp_slimstat_db::$filters_normalized[ 'date' ] as $a_key => $a_value ) : if ( !empty( $a_value ) ): ?>
admin/view/right-now.php CHANGED
@@ -8,14 +8,11 @@ $is_dashboard = empty( $_REQUEST[ 'page' ] ) || $_REQUEST[ 'page' ] != 'slimview
8
 
9
  // Available icons
10
  $supported_browser_icons = array( 'Android', 'Anonymouse', 'Baiduspider', 'BlackBerry', 'BingBot', 'CFNetwork', 'Chrome', 'Chromium', 'Default Browser', 'Edge', 'Exabot/BiggerBetter', 'FacebookExternalHit', 'FeedBurner', 'Feedfetcher-Google', 'Firefox', 'Internet Archive', 'Googlebot', 'Google Bot', 'Google Feedfetcher', 'Google Web Preview', 'IE', 'IEMobile', 'iPad', 'iPhone', 'iPod Touch', 'Maxthon', 'Mediapartners-Google', 'Microsoft-WebDAV', 'msnbot', 'Mozilla', 'NewsGatorOnline', 'Netscape', 'Nokia', 'Opera', 'Opera Mini', 'Opera Mobi', 'Pingdom', 'Python', 'PycURL', 'Safari', 'W3C_Validator', 'WordPress', 'Yahoo! Slurp', 'YandexBot' );
11
- $supported_os_icons = array( 'android',' blackberry os', 'cellos', 'chromeos', 'ios', 'iphone osx', 'java', 'linux', 'macos', 'macosx', 'rim os', 'symbianos', 'win7', 'win8', 'win8.1', 'win10', 'winphone7', 'winphone7.5', 'winphone8', 'winphone8.1', 'winvista', 'winxp', 'unknown' );
12
  $supported_browser_types = array( __( 'Human', 'wp-slimstat' ), __( 'Bot/Crawler', 'wp-slimstat' ), __( 'Mobile Device', 'wp-slimstat' ), __( 'Syndication Reader', 'wp-slimstat' ) );
13
 
14
  $plugin_url = plugins_url( '', dirname( __FILE__ ) );
15
 
16
- // Load localization strings
17
- include_once( plugin_dir_path( __FILE__ ) . '../../languages/dynamic_strings.php' );
18
-
19
  // Get the data
20
  wp_slimstat_db::$debug_message = '';
21
  $all_results = wp_slimstat_db::get_recent( wp_slimstat_reports::$reports_info[ 'slim_p7_02' ][ 'callback_args' ] );
@@ -117,39 +114,48 @@ for ( $i=0; $i < $count_page_results; $i++ ) {
117
  $highlight_row = !empty( $results[ $i ][ 'searchterms' ] ) ? ' is-search-engine' : ( ( $results[ $i ][ 'browser_type' ] != 1 ) ? ' is-direct' : '' );
118
 
119
  // Country
120
- $country_filtered = '';
121
  if ( !empty( $results[ $i ][ 'country' ] ) && $results[ $i ][ 'country' ] != 'xx' ) {
122
- $country_filtered = "<a class='slimstat-filter-link inline-icon' href='" . wp_slimstat_reports::fs_url( 'country equals ' . $results[ $i ][ 'country' ] ) . "'><img class='slimstat-tooltip-trigger' src='$plugin_url/assets/images/flags/{$results[ $i ][ 'country' ]}.png' width='16' height='16' title='" . slim_i18n::get_string( 'c-' . $results[ $i ][ 'country' ] ) . "'></a>";
 
 
 
123
  }
124
 
125
  // City, if tracked
126
- $city_filtered = '';
127
  if ( !empty( $results[ $i ][ 'city' ] ) ) {
128
- $city_filtered = "<a class='slimstat-filter-link' href='" . wp_slimstat_reports::fs_url( 'city equals ' . $results[ $i ][ 'city' ] ) . "'>{$results[ $i ][ 'city' ]}</a>";
129
  }
130
 
131
  // Browser
132
  if ( empty( $results[ $i ][ 'browser_version' ] ) ) {
133
- $results[$i]['browser_version'] = '';
134
  }
135
  $browser_title = ( wp_slimstat::$settings[ 'show_complete_user_agent_tooltip' ] != 'on' ) ? "{$results[ $i ][ 'browser' ]} {$results[ $i ][ 'browser_version' ]}" : $results[ $i ][ 'user_agent' ];
136
  $browser_icon = $plugin_url . '/assets/images/browsers/other-browsers-and-os.png';
137
  if ( in_array( $results[ $i ][ 'browser' ], $supported_browser_icons ) ) {
138
  $browser_icon = $plugin_url . '/assets/images/browsers/' . sanitize_title( $results[ $i ][ 'browser' ] ) . '.png';
139
  }
140
- $browser_filtered = "<a class='slimstat-filter-link inline-icon' href='" . wp_slimstat_reports::fs_url( 'browser equals ' . $results[ $i ][ 'browser' ] ) . "'><img class='slimstat-tooltip-trigger' src='$browser_icon' width='16' height='16' title='{$browser_title}'></a>";
141
 
142
- // Platform
143
- $platform_icon = $plugin_url . '/assets/images/browsers/other-browsers-and-os.png';
144
- if ( in_array( strtolower( $results[ $i ][ 'platform' ] ), $supported_os_icons ) ) {
145
- $platform_icon = $plugin_url . '/assets/images/platforms/' . sanitize_title( $results[ $i ][ 'platform' ] ) . '.png';
 
 
146
  }
147
- $platform_filtered = "<a class='slimstat-filter-link inline-icon' href='" . wp_slimstat_reports::fs_url( 'platform equals ' . $results[ $i ][ 'platform' ] ) . "'><img class='slimstat-tooltip-trigger' src='$platform_icon' width='16' height='16' title='" . slim_i18n::get_string( $results[ $i ][ 'platform' ] ) . "'></a>";
 
 
 
 
 
148
 
149
  // Browser Type
150
- $browser_type_filtered = '';
151
  if ( $results[ $i ][ 'browser_type' ] != 0 ) {
152
- $browser_type_filtered = "<a class='slimstat-filter-link inline-icon' href='" . wp_slimstat_reports::fs_url( 'browser_type equals ' . $results[ $i ][ 'browser_type' ] ) . "'><img class='slimstat-tooltip-trigger' src='$plugin_url/assets/images/browsers/type{$results[ $i ][ 'browser_type' ]}.png' width='16' height='16' title='{$supported_browser_types[ $results[ $i ][ 'browser_type' ] ]}'></a>";
153
  }
154
 
155
  // IP Address and user
@@ -175,13 +181,10 @@ for ( $i=0; $i < $count_page_results; $i++ ) {
175
  }
176
 
177
  // Originating IP Address
178
- $other_ip_address = intval( $results[ $i ][ 'other_ip' ] );
179
- if ( !empty( $other_ip_address ) ) {
180
  $other_ip_address = "(<a class='slimstat-font-location-1 whois' href='" . wp_slimstat::$settings[ 'ip_lookup_service' ] . "{$results[ $i ][ 'other_ip' ]}' target='_blank' title='WHOIS: {$results[ $i ][ 'other_ip' ]}'></a> <a class='slimstat-filter-link' href='" . wp_slimstat_reports::fs_url( 'other_ip equals '. $results[ $i ][ 'other_ip' ] ) . "'>" . __( 'Originating IP', 'wp-slimstat' ) . ": {$results[$i]['other_ip']})</a>";
181
  }
182
- else {
183
- $other_ip_address = '';
184
- }
185
 
186
  // Screen Resolution
187
  $screen_resolution = '';
@@ -189,7 +192,7 @@ for ( $i=0; $i < $count_page_results; $i++ ) {
189
  $screen_resolution = "<span class='pageview-screenres'>{$results[ $i ][ 'screen_width' ]}x{$results[ $i ][ 'screen_height' ]}</span>";
190
  }
191
 
192
- $row_output = "<p class='header$highlight_row'>$browser_filtered $platform_filtered $browser_type_filtered $country_filtered $whois_pin $city_filtered $ip_address $other_ip_address $screen_resolution</p>";
193
 
194
  // Strip all the filter links, if this information is shown on the frontend
195
  if ( !is_admin() ) {
8
 
9
  // Available icons
10
  $supported_browser_icons = array( 'Android', 'Anonymouse', 'Baiduspider', 'BlackBerry', 'BingBot', 'CFNetwork', 'Chrome', 'Chromium', 'Default Browser', 'Edge', 'Exabot/BiggerBetter', 'FacebookExternalHit', 'FeedBurner', 'Feedfetcher-Google', 'Firefox', 'Internet Archive', 'Googlebot', 'Google Bot', 'Google Feedfetcher', 'Google Web Preview', 'IE', 'IEMobile', 'iPad', 'iPhone', 'iPod Touch', 'Maxthon', 'Mediapartners-Google', 'Microsoft-WebDAV', 'msnbot', 'Mozilla', 'NewsGatorOnline', 'Netscape', 'Nokia', 'Opera', 'Opera Mini', 'Opera Mobi', 'Pingdom', 'Python', 'PycURL', 'Safari', 'W3C_Validator', 'WordPress', 'Yahoo! Slurp', 'YandexBot' );
11
+ $supported_os_icons = array( 'android',' blackberry os', 'cellos', 'chromeos', 'ios', 'iphone osx', 'java', 'linux', 'macos', 'macosx', 'rim os', 'symbianos', 'win7', 'win8', 'win8.1', 'win10', 'winphone7', 'winphone7.5', 'winphone8', 'winphone8.1', 'winvista', 'winxp' );
12
  $supported_browser_types = array( __( 'Human', 'wp-slimstat' ), __( 'Bot/Crawler', 'wp-slimstat' ), __( 'Mobile Device', 'wp-slimstat' ), __( 'Syndication Reader', 'wp-slimstat' ) );
13
 
14
  $plugin_url = plugins_url( '', dirname( __FILE__ ) );
15
 
 
 
 
16
  // Get the data
17
  wp_slimstat_db::$debug_message = '';
18
  $all_results = wp_slimstat_db::get_recent( wp_slimstat_reports::$reports_info[ 'slim_p7_02' ][ 'callback_args' ] );
114
  $highlight_row = !empty( $results[ $i ][ 'searchterms' ] ) ? ' is-search-engine' : ( ( $results[ $i ][ 'browser_type' ] != 1 ) ? ' is-direct' : '' );
115
 
116
  // Country
 
117
  if ( !empty( $results[ $i ][ 'country' ] ) && $results[ $i ][ 'country' ] != 'xx' ) {
118
+ $country_filter = "<a class='slimstat-filter-link inline-icon' href='" . wp_slimstat_reports::fs_url( 'country equals ' . $results[ $i ][ 'country' ] ) . "'><img class='slimstat-tooltip-trigger' src='$plugin_url/assets/images/flags/{$results[ $i ][ 'country' ]}.png' width='16' height='16' title='" . slim_i18n::get_string( 'c-' . $results[ $i ][ 'country' ] ) . "'></a>";
119
+ }
120
+ else {
121
+ $country_filter = "<a class='slimstat-filter-link inline-icon' href='" . wp_slimstat_reports::fs_url( 'country is_empty #' ) . "'><img class='slimstat-tooltip-trigger' src='$plugin_url/assets/images/flags/xx.png' width='16' height='16' title='" . slim_i18n::get_string( 'c-' ) . "'></a>";
122
  }
123
 
124
  // City, if tracked
125
+ $city_filter = '';
126
  if ( !empty( $results[ $i ][ 'city' ] ) ) {
127
+ $city_filter = "<a class='slimstat-filter-link' href='" . wp_slimstat_reports::fs_url( 'city equals ' . $results[ $i ][ 'city' ] ) . "'>{$results[ $i ][ 'city' ]}</a>";
128
  }
129
 
130
  // Browser
131
  if ( empty( $results[ $i ][ 'browser_version' ] ) ) {
132
+ $results[ $i ][ 'browser_version' ] = '';
133
  }
134
  $browser_title = ( wp_slimstat::$settings[ 'show_complete_user_agent_tooltip' ] != 'on' ) ? "{$results[ $i ][ 'browser' ]} {$results[ $i ][ 'browser_version' ]}" : $results[ $i ][ 'user_agent' ];
135
  $browser_icon = $plugin_url . '/assets/images/browsers/other-browsers-and-os.png';
136
  if ( in_array( $results[ $i ][ 'browser' ], $supported_browser_icons ) ) {
137
  $browser_icon = $plugin_url . '/assets/images/browsers/' . sanitize_title( $results[ $i ][ 'browser' ] ) . '.png';
138
  }
139
+ $browser_filter = "<a class='slimstat-filter-link inline-icon' href='" . wp_slimstat_reports::fs_url( 'browser equals ' . $results[ $i ][ 'browser' ] ) . "'><img class='slimstat-tooltip-trigger' src='$browser_icon' width='16' height='16' title='{$browser_title}'></a>";
140
 
141
+ // Operating System
142
+ if ( !empty( $results[ $i ][ 'platform' ] ) && $results[ $i ][ 'platform' ] != 'unknown' ) {
143
+ $platform_filter = "<a class='slimstat-filter-link inline-icon' href='" . wp_slimstat_reports::fs_url( 'platform equals ' . $results[ $i ][ 'platform' ] ) . "'><img class='slimstat-tooltip-trigger' src='$plugin_url/assets/images/platforms/{$results[ $i ][ 'platform' ]}.png' width='16' height='16' title='" . slim_i18n::get_string( $results[ $i ][ 'platform' ] ) . "'></a>";
144
+ }
145
+ else {
146
+ $platform_filter = "<a class='slimstat-filter-link inline-icon' href='" . wp_slimstat_reports::fs_url( 'platform is_empty #' ) . "'><img class='slimstat-tooltip-trigger' src='$plugin_url/assets/images/browsers/other-browsers-and-os.png' width='16' height='16' title='" . slim_i18n::get_string( 'unknown' ) . "'></a>";
147
  }
148
+
149
+ // Language
150
+ $language_filter = '';
151
+ // if ( !empty( $results[ $i ][ 'language' ] ) && $results[ $i ][ 'language' ] != 'xx' ) {
152
+ // $language_filter = '<span class="pageview-language"><a class="slimstat-filter-link" href="' . wp_slimstat_reports::fs_url( 'language equals ' . $results[ $i ][ 'language' ] ) . '">' . slim_i18n::get_string( 'l-' . $results[ $i ][ 'language' ] ) . '</a>';
153
+ // }
154
 
155
  // Browser Type
156
+ $browser_type_filter = '';
157
  if ( $results[ $i ][ 'browser_type' ] != 0 ) {
158
+ $browser_type_filter = "<a class='slimstat-filter-link inline-icon' href='" . wp_slimstat_reports::fs_url( 'browser_type equals ' . $results[ $i ][ 'browser_type' ] ) . "'><img class='slimstat-tooltip-trigger' src='$plugin_url/assets/images/browsers/type{$results[ $i ][ 'browser_type' ]}.png' width='16' height='16' title='{$supported_browser_types[ $results[ $i ][ 'browser_type' ] ]}'></a>";
159
  }
160
 
161
  // IP Address and user
181
  }
182
 
183
  // Originating IP Address
184
+ $other_ip_address = '';
185
+ if ( !empty( $results[ $i ][ 'other_ip' ] ) ) {
186
  $other_ip_address = "(<a class='slimstat-font-location-1 whois' href='" . wp_slimstat::$settings[ 'ip_lookup_service' ] . "{$results[ $i ][ 'other_ip' ]}' target='_blank' title='WHOIS: {$results[ $i ][ 'other_ip' ]}'></a> <a class='slimstat-filter-link' href='" . wp_slimstat_reports::fs_url( 'other_ip equals '. $results[ $i ][ 'other_ip' ] ) . "'>" . __( 'Originating IP', 'wp-slimstat' ) . ": {$results[$i]['other_ip']})</a>";
187
  }
 
 
 
188
 
189
  // Screen Resolution
190
  $screen_resolution = '';
192
  $screen_resolution = "<span class='pageview-screenres'>{$results[ $i ][ 'screen_width' ]}x{$results[ $i ][ 'screen_height' ]}</span>";
193
  }
194
 
195
+ $row_output = "<p class='header$highlight_row'>$browser_filter $platform_filter $browser_type_filter $country_filter $whois_pin $city_filter $ip_address $other_ip_address $screen_resolution $language_filter</p>";
196
 
197
  // Strip all the filter links, if this information is shown on the frontend
198
  if ( !is_admin() ) {
admin/view/wp-slimstat-db.php CHANGED
@@ -23,19 +23,20 @@ class wp_slimstat_db {
23
  * Sets the filters and other structures needed to store the data retrieved from the DB
24
  */
25
  public static function init( $_filters = '' ) {
26
- // List of supported filters and their friendly names
27
  self::$columns_names = array(
28
  'browser' => array( __( 'Browser', 'wp-slimstat' ), 'varchar' ),
29
  'country' => array( __( 'Country Code', 'wp-slimstat' ), 'varchar' ),
30
  'ip' => array( __( 'IP Address', 'wp-slimstat' ), 'varchar' ),
31
  'searchterms' => array( __( 'Search Terms', 'wp-slimstat' ), 'varchar' ),
32
- 'language' => array( __( 'Language Code', 'wp-slimstat' ), 'varchar' ),
33
  'platform' => array( __( 'Operating System', 'wp-slimstat' ), 'varchar' ),
34
  'resource' => array( __( 'Permalink', 'wp-slimstat' ), 'varchar' ),
35
  'referer' => array( __( 'Referer', 'wp-slimstat' ), 'varchar' ),
36
  'username' => array( __( 'Visitor\'s Username', 'wp-slimstat' ), 'varchar' ),
37
  'email' => array( __( 'Visitor\'s Email', 'wp-slimstat' ), 'varchar' ),
38
  'outbound_resource' => array( __( 'Outbound Link', 'wp-slimstat' ), 'varchar' ),
 
39
  'page_performance' => array( __( 'Page Speed', 'wp-slimstat' ), 'int' ),
40
  'no_filter_selected_2' => array( '', 'none' ),
41
  'no_filter_selected_3' => array( __( '-- Advanced filters --', 'wp-slimstat' ), 'none' ),
@@ -83,7 +84,6 @@ class wp_slimstat_db {
83
 
84
  // The following filters will not be displayed in the dropdown
85
  self::$all_columns_names = array_merge( array(
86
-
87
  // Date and Time
88
  'minute' => array( __( 'Minute', 'wp-slimstat' ), 'int' ),
89
  'hour' => array( __( 'Hour', 'wp-slimstat' ), 'int' ),
@@ -874,7 +874,7 @@ class wp_slimstat_db {
874
  $dimensions .= ', ip, dt';
875
  }
876
  else {
877
- $dimensions = 'id, ip, other_ip, username, email, country, city, location, referer, resource, searchterms, plugins, notes, visit_id, server_latency, page_performance, browser, browser_version, browser_type, platform, language, user_agent, resolution, screen_width, screen_height, content_type, category, author, content_id, outbound_resource, dt_out, dt';
878
  }
879
 
880
  if ( !empty( $_more_dimensions ) ) {
23
  * Sets the filters and other structures needed to store the data retrieved from the DB
24
  */
25
  public static function init( $_filters = '' ) {
26
+ // List of supported filters and their user-friendly names
27
  self::$columns_names = array(
28
  'browser' => array( __( 'Browser', 'wp-slimstat' ), 'varchar' ),
29
  'country' => array( __( 'Country Code', 'wp-slimstat' ), 'varchar' ),
30
  'ip' => array( __( 'IP Address', 'wp-slimstat' ), 'varchar' ),
31
  'searchterms' => array( __( 'Search Terms', 'wp-slimstat' ), 'varchar' ),
32
+ 'language' => array( __( 'Language', 'wp-slimstat' ), 'varchar' ),
33
  'platform' => array( __( 'Operating System', 'wp-slimstat' ), 'varchar' ),
34
  'resource' => array( __( 'Permalink', 'wp-slimstat' ), 'varchar' ),
35
  'referer' => array( __( 'Referer', 'wp-slimstat' ), 'varchar' ),
36
  'username' => array( __( 'Visitor\'s Username', 'wp-slimstat' ), 'varchar' ),
37
  'email' => array( __( 'Visitor\'s Email', 'wp-slimstat' ), 'varchar' ),
38
  'outbound_resource' => array( __( 'Outbound Link', 'wp-slimstat' ), 'varchar' ),
39
+ 'tz_offset' => array( __( 'Timezone Offset', 'wp-slimstat' ), 'int' ),
40
  'page_performance' => array( __( 'Page Speed', 'wp-slimstat' ), 'int' ),
41
  'no_filter_selected_2' => array( '', 'none' ),
42
  'no_filter_selected_3' => array( __( '-- Advanced filters --', 'wp-slimstat' ), 'none' ),
84
 
85
  // The following filters will not be displayed in the dropdown
86
  self::$all_columns_names = array_merge( array(
 
87
  // Date and Time
88
  'minute' => array( __( 'Minute', 'wp-slimstat' ), 'int' ),
89
  'hour' => array( __( 'Hour', 'wp-slimstat' ), 'int' ),
874
  $dimensions .= ', ip, dt';
875
  }
876
  else {
877
+ $dimensions = 'id, ip, other_ip, username, email, country, city, location, referer, resource, searchterms, notes, visit_id, server_latency, page_performance, browser, browser_version, browser_type, platform, language, fingerprint, user_agent, resolution, screen_width, screen_height, content_type, category, author, content_id, outbound_resource, tz_offset, dt_out, dt';
878
  }
879
 
880
  if ( !empty( $_more_dimensions ) ) {
admin/view/wp-slimstat-reports.php CHANGED
@@ -39,7 +39,7 @@ class wp_slimstat_reports {
39
  ),
40
  'classes' => array( 'full-width', 'tall' ),
41
  'screens' => array( 'slimview1', 'dashboard' ),
42
- 'tooltip' => __( 'Color Codes', 'wp-slimstat' ).'</strong><p><span class="little-color-box is-search-engine"></span> '.__( 'From search result page', 'wp-slimstat' ).'</p><p><span class="little-color-box is-known-visitor"></span> '.__( 'Has Left Comments', 'wp-slimstat' ).'</p><p><span class="little-color-box is-known-user"></span> '.__( 'WP User', 'wp-slimstat' ).'</p><p><span class="little-color-box is-direct"></span> '.__( 'Other Human', 'wp-slimstat' ).'</p><p><span class="little-color-box"></span> '.__( 'Bot or Crawler', 'wp-slimstat' ).'</p>'
43
  ),
44
 
45
  'slim_p1_01' => array(
@@ -1053,9 +1053,6 @@ class wp_slimstat_reports {
1053
  $permalinks_enabled = get_option( 'permalink_structure' );
1054
  $column_not_calculated = str_replace( '_calculated', '', $_args[ 'columns' ] );
1055
 
1056
- // Load localization strings
1057
- include_once( plugin_dir_path( __FILE__ ) . '../../languages/dynamic_strings.php' );
1058
-
1059
  for ( $i=0; $i<$count_page_results; $i++ ) {
1060
  $row_details = $percentage = '';
1061
  $element_pre_value = '';
@@ -1063,7 +1060,6 @@ class wp_slimstat_reports {
1063
 
1064
  // Some columns require a special pre-treatment
1065
  switch ( $column_not_calculated ){
1066
-
1067
  case 'browser':
1068
  if ( !empty( $results[ $i ][ 'user_agent' ] ) && wp_slimstat::$settings[ 'show_complete_user_agent_tooltip' ] == 'on' ) {
1069
  $element_pre_value = self::inline_help( $results[ $i ][ 'user_agent' ], false );
@@ -1568,30 +1564,24 @@ class wp_slimstat_reports {
1568
  }
1569
  }
1570
 
1571
- // Load localization strings
1572
- include_once( plugin_dir_path( __FILE__ ) . '../../languages/dynamic_strings.php' );
1573
-
1574
- //$data_areas = array(,'af'=>'{id:"AF",balloonText:"'.__('c-af','wp-slimstat').': 0",value:0,color:"#ededed"}','ax'=>'{id:"AX",balloonText:"'.__('c-ax','wp-slimstat').': 0",value:0,color:"#ededed"}','al'=>'{id:"AL",balloonText:"'.__('c-al','wp-slimstat').': 0",value:0,color:"#ededed"}','dz'=>'{id:"DZ",balloonText:"'.__('c-dz','wp-slimstat').': 0",value:0,color:"#ededed"}','ad'=>'{id:"AD",balloonText:"'.__('c-ad','wp-slimstat').': 0",value:0,color:"#ededed"}','ao'=>'{id:"AO",balloonText:"'.__('c-ao','wp-slimstat').': 0",value:0,color:"#ededed"}','ai'=>'{id:"AI",balloonText:"'.__('c-ai','wp-slimstat').': 0",value:0,color:"#ededed"}','ag'=>'{id:"AG",balloonText:"'.__('c-ag','wp-slimstat').': 0",value:0,color:"#ededed"}','ar'=>'{id:"AR",balloonText:"'.__('c-ar','wp-slimstat').': 0",value:0,color:"#ededed"}','am'=>'{id:"AM",balloonText:"'.__('c-am','wp-slimstat').': 0",value:0,color:"#ededed"}','aw'=>'{id:"AW",balloonText:"'.__('c-aw','wp-slimstat').': 0",value:0,color:"#ededed"}','au'=>'{id:"AU",balloonText:"'.__('c-au','wp-slimstat').': 0",value:0,color:"#ededed"}','at'=>'{id:"AT",balloonText:"'.__('c-at','wp-slimstat').': 0",value:0,color:"#ededed"}','az'=>'{id:"AZ",balloonText:"'.__('c-az','wp-slimstat').': 0",value:0,color:"#ededed"}','bs'=>'{id:"BS",balloonText:"'.__('c-bs','wp-slimstat').': 0",value:0,color:"#ededed"}','bh'=>'{id:"BH",balloonText:"'.__('c-bh','wp-slimstat').': 0",value:0,color:"#ededed"}','bd'=>'{id:"BD",balloonText:"'.__('c-bd','wp-slimstat').': 0",value:0,color:"#ededed"}','bb'=>'{id:"BB",balloonText:"'.__('c-bb','wp-slimstat').': 0",value:0,color:"#ededed"}','by'=>'{id:"BY",balloonText:"'.__('c-by','wp-slimstat').': 0",value:0,color:"#ededed"}','be'=>'{id:"BE",balloonText:"'.__('c-be','wp-slimstat').': 0",value:0,color:"#ededed"}','bz'=>'{id:"BZ",balloonText:"'.__('c-bz','wp-slimstat').': 0",value:0,color:"#ededed"}','bj'=>'{id:"BJ",balloonText:"'.__('c-bj','wp-slimstat').': 0",value:0,color:"#ededed"}','bm'=>'{id:"BM",balloonText:"'.__('c-bm','wp-slimstat').': 0",value:0,color:"#ededed"}','bt'=>'{id:"BT",balloonText:"'.__('c-bt','wp-slimstat').': 0",value:0,color:"#ededed"}','bo'=>'{id:"BO",balloonText:"'.__('c-bo','wp-slimstat').': 0",value:0,color:"#ededed"}','ba'=>'{id:"BA",balloonText:"'.__('c-ba','wp-slimstat').': 0",value:0,color:"#ededed"}','bw'=>'{id:"BW",balloonText:"'.__('c-bw','wp-slimstat').': 0",value:0,color:"#ededed"}','br'=>'{id:"BR",balloonText:"'.__('c-br','wp-slimstat').': 0",value:0,color:"#ededed"}','bn'=>'{id:"BN",balloonText:"'.__('c-bn','wp-slimstat').': 0",value:0,color:"#ededed"}','bg'=>'{id:"BG",balloonText:"'.__('c-bg','wp-slimstat').': 0",value:0,color:"#ededed"}','bf'=>'{id:"BF",balloonText:"'.__('c-bf','wp-slimstat').': 0",value:0,color:"#ededed"}','bi'=>'{id:"BI",balloonText:"'.__('c-bi','wp-slimstat').': 0",value:0,color:"#ededed"}','kh'=>'{id:"KH",balloonText:"'.__('c-kh','wp-slimstat').': 0",value:0,color:"#ededed"}','cm'=>'{id:"CM",balloonText:"'.__('c-cm','wp-slimstat').': 0",value:0,color:"#ededed"}','ca'=>'{id:"CA",balloonText:"'.__('c-ca','wp-slimstat').': 0",value:0,color:"#ededed"}','cv'=>'{id:"CV",balloonText:"'.__('c-cv','wp-slimstat').': 0",value:0,color:"#ededed"}','ky'=>'{id:"KY",balloonText:"'.__('c-ky','wp-slimstat').': 0",value:0,color:"#ededed"}','cf'=>'{id:"CF",balloonText:"'.__('c-cf','wp-slimstat').': 0",value:0,color:"#ededed"}','td'=>'{id:"TD",balloonText:"'.__('c-td','wp-slimstat').': 0",value:0,color:"#ededed"}','cl'=>'{id:"CL",balloonText:"'.__('c-cl','wp-slimstat').': 0",value:0,color:"#ededed"}','cn'=>'{id:"CN",balloonText:"'.__('c-cn','wp-slimstat').': 0",value:0,color:"#ededed"}','co'=>'{id:"CO",balloonText:"'.__('c-co','wp-slimstat').': 0",value:0,color:"#ededed"}','km'=>'{id:"KM",balloonText:"'.__('c-km','wp-slimstat').': 0",value:0,color:"#ededed"}','cg'=>'{id:"CG",balloonText:"'.__('c-cg','wp-slimstat').': 0",value:0,color:"#ededed"}','cd'=>'{id:"CD",balloonText:"'.__('c-cd','wp-slimstat').': 0",value:0,color:"#ededed"}','cr'=>'{id:"CR",balloonText:"'.__('c-cr','wp-slimstat').': 0",value:0,color:"#ededed"}','ci'=>'{id:"CI",balloonText:"'.__('c-ci','wp-slimstat').': 0",value:0,color:"#ededed"}','hr'=>'{id:"HR",balloonText:"'.__('c-hr','wp-slimstat').': 0",value:0,color:"#ededed"}','cu'=>'{id:"CU",balloonText:"'.__('c-cu','wp-slimstat').': 0",value:0,color:"#ededed"}','cy'=>'{id:"CY",balloonText:"'.__('c-cy','wp-slimstat').': 0",value:0,color:"#ededed"}','cz'=>'{id:"CZ",balloonText:"'.__('c-cz','wp-slimstat').': 0",value:0,color:"#ededed"}','dk'=>'{id:"DK",balloonText:"'.__('c-dk','wp-slimstat').': 0",value:0,color:"#ededed"}','dj'=>'{id:"DJ",balloonText:"'.__('c-dj','wp-slimstat').': 0",value:0,color:"#ededed"}','dm'=>'{id:"DM",balloonText:"'.__('c-dm','wp-slimstat').': 0",value:0,color:"#ededed"}','do'=>'{id:"DO",balloonText:"'.__('c-do','wp-slimstat').': 0",value:0,color:"#ededed"}','ec'=>'{id:"EC",balloonText:"'.__('c-ec','wp-slimstat').': 0",value:0,color:"#ededed"}','eg'=>'{id:"EG",balloonText:"'.__('c-eg','wp-slimstat').': 0",value:0,color:"#ededed"}','sv'=>'{id:"SV",balloonText:"'.__('c-sv','wp-slimstat').': 0",value:0,color:"#ededed"}','gq'=>'{id:"GQ",balloonText:"'.__('c-gq','wp-slimstat').': 0",value:0,color:"#ededed"}','er'=>'{id:"ER",balloonText:"'.__('c-er','wp-slimstat').': 0",value:0,color:"#ededed"}','ee'=>'{id:"EE",balloonText:"'.__('c-ee','wp-slimstat').': 0",value:0,color:"#ededed"}','et'=>'{id:"ET",balloonText:"'.__('c-et','wp-slimstat').': 0",value:0,color:"#ededed"}','fo'=>'{id:"FO",balloonText:"'.__('c-fo','wp-slimstat').': 0",value:0,color:"#ededed"}','fk'=>'{id:"FK",balloonText:"'.__('c-fk','wp-slimstat').': 0",value:0,color:"#ededed"}','fj'=>'{id:"FJ",balloonText:"'.__('c-fj','wp-slimstat').': 0",value:0,color:"#ededed"}','fi'=>'{id:"FI",balloonText:"'.__('c-fi','wp-slimstat').': 0",value:0,color:"#ededed"}','fr'=>'{id:"FR",balloonText:"'.__('c-fr','wp-slimstat').': 0",value:0,color:"#ededed"}','gf'=>'{id:"GF",balloonText:"'.__('c-gf','wp-slimstat').': 0",value:0,color:"#ededed"}','ga'=>'{id:"GA",balloonText:"'.__('c-ga','wp-slimstat').': 0",value:0,color:"#ededed"}','gm'=>'{id:"GM",balloonText:"'.__('c-gm','wp-slimstat').': 0",value:0,color:"#ededed"}','ge'=>'{id:"GE",balloonText:"'.__('c-ge','wp-slimstat').': 0",value:0,color:"#ededed"}','de'=>'{id:"DE",balloonText:"'.__('c-de','wp-slimstat').': 0",value:0,color:"#ededed"}','gh'=>'{id:"GH",balloonText:"'.__('c-gh','wp-slimstat').': 0",value:0,color:"#ededed"}','gr'=>'{id:"GR",balloonText:"'.__('c-gr','wp-slimstat').': 0",value:0,color:"#ededed"}','gl'=>'{id:"GL",balloonText:"'.__('c-gl','wp-slimstat').': 0",value:0,color:"#ededed"}','gd'=>'{id:"GD",balloonText:"'.__('c-gd','wp-slimstat').': 0",value:0,color:"#ededed"}','gp'=>'{id:"GP",balloonText:"'.__('c-gp','wp-slimstat').': 0",value:0,color:"#ededed"}','gt'=>'{id:"GT",balloonText:"'.__('c-gt','wp-slimstat').': 0",value:0,color:"#ededed"}','gn'=>'{id:"GN",balloonText:"'.__('c-gn','wp-slimstat').': 0",value:0,color:"#ededed"}','gw'=>'{id:"GW",balloonText:"'.__('c-gw','wp-slimstat').': 0",value:0,color:"#ededed"}','gy'=>'{id:"GY",balloonText:"'.__('c-gy','wp-slimstat').': 0",value:0,color:"#ededed"}','ht'=>'{id:"HT",balloonText:"'.__('c-ht','wp-slimstat').': 0",value:0,color:"#ededed"}','hn'=>'{id:"HN",balloonText:"'.__('c-hn','wp-slimstat').': 0",value:0,color:"#ededed"}','hk'=>'{id:"HK",balloonText:"'.__('c-hk','wp-slimstat').': 0",value:0,color:"#ededed"}','hu'=>'{id:"HU",balloonText:"'.__('c-hu','wp-slimstat').': 0",value:0,color:"#ededed"}','is'=>'{id:"IS",balloonText:"'.__('c-is','wp-slimstat').': 0",value:0,color:"#ededed"}','in'=>'{id:"IN",balloonText:"'.__('c-in','wp-slimstat').': 0",value:0,color:"#ededed"}','id'=>'{id:"ID",balloonText:"'.__('c-id','wp-slimstat').': 0",value:0,color:"#ededed"}','ir'=>'{id:"IR",balloonText:"'.__('c-ir','wp-slimstat').': 0",value:0,color:"#ededed"}','iq'=>'{id:"IQ",balloonText:"'.__('c-iq','wp-slimstat').': 0",value:0,color:"#ededed"}','ie'=>'{id:"IE",balloonText:"'.__('c-ie','wp-slimstat').': 0",value:0,color:"#ededed"}','il'=>'{id:"IL",balloonText:"'.__('c-il','wp-slimstat').': 0",value:0,color:"#ededed"}','it'=>'{id:"IT",balloonText:"'.__('c-it','wp-slimstat').': 0",value:0,color:"#ededed"}','jm'=>'{id:"JM",balloonText:"'.__('c-jm','wp-slimstat').': 0",value:0,color:"#ededed"}','jp'=>'{id:"JP",balloonText:"'.__('c-jp','wp-slimstat').': 0",value:0,color:"#ededed"}','jo'=>'{id:"JO",balloonText:"'.__('c-jo','wp-slimstat').': 0",value:0,color:"#ededed"}','kz'=>'{id:"KZ",balloonText:"'.__('c-kz','wp-slimstat').': 0",value:0,color:"#ededed"}','ke'=>'{id:"KE",balloonText:"'.__('c-ke','wp-slimstat').': 0",value:0,color:"#ededed"}','nr'=>'{id:"NR",balloonText:"'.__('c-nr','wp-slimstat').': 0",value:0,color:"#ededed"}','kp'=>'{id:"KP",balloonText:"'.__('c-kp','wp-slimstat').': 0",value:0,color:"#ededed"}','kr'=>'{id:"KR",balloonText:"'.__('c-kr','wp-slimstat').': 0",value:0,color:"#ededed"}','kv'=>'{id:"KV",balloonText:"'.__('c-kv','wp-slimstat').': 0",value:0,color:"#ededed"}','kw'=>'{id:"KW",balloonText:"'.__('c-kw','wp-slimstat').': 0",value:0,color:"#ededed"}','kg'=>'{id:"KG",balloonText:"'.__('c-kg','wp-slimstat').': 0",value:0,color:"#ededed"}','la'=>'{id:"LA",balloonText:"'.__('c-la','wp-slimstat').': 0",value:0,color:"#ededed"}','lv'=>'{id:"LV",balloonText:"'.__('c-lv','wp-slimstat').': 0",value:0,color:"#ededed"}','lb'=>'{id:"LB",balloonText:"'.__('c-lb','wp-slimstat').': 0",value:0,color:"#ededed"}','ls'=>'{id:"LS",balloonText:"'.__('c-ls','wp-slimstat').': 0",value:0,color:"#ededed"}','lr'=>'{id:"LR",balloonText:"'.__('c-lr','wp-slimstat').': 0",value:0,color:"#ededed"}','ly'=>'{id:"LY",balloonText:"'.__('c-ly','wp-slimstat').': 0",value:0,color:"#ededed"}','li'=>'{id:"LI",balloonText:"'.__('c-li','wp-slimstat').': 0",value:0,color:"#ededed"}','lt'=>'{id:"LT",balloonText:"'.__('c-lt','wp-slimstat').': 0",value:0,color:"#ededed"}','lu'=>'{id:"LU",balloonText:"'.__('c-lu','wp-slimstat').': 0",value:0,color:"#ededed"}','mk'=>'{id:"MK",balloonText:"'.__('c-mk','wp-slimstat').': 0",value:0,color:"#ededed"}','mg'=>'{id:"MG",balloonText:"'.__('c-mg','wp-slimstat').': 0",value:0,color:"#ededed"}','mw'=>'{id:"MW",balloonText:"'.__('c-mw','wp-slimstat').': 0",value:0,color:"#ededed"}','my'=>'{id:"MY",balloonText:"'.__('c-my','wp-slimstat').': 0",value:0,color:"#ededed"}','ml'=>'{id:"ML",balloonText:"'.__('c-ml','wp-slimstat').': 0",value:0,color:"#ededed"}','mt'=>'{id:"MT",balloonText:"'.__('c-mt','wp-slimstat').': 0",value:0,color:"#ededed"}','mq'=>'{id:"MQ",balloonText:"'.__('c-mq','wp-slimstat').': 0",value:0,color:"#ededed"}','mr'=>'{id:"MR",balloonText:"'.__('c-mr','wp-slimstat').': 0",value:0,color:"#ededed"}','mu'=>'{id:"MU",balloonText:"'.__('c-mu','wp-slimstat').': 0",value:0,color:"#ededed"}','mx'=>'{id:"MX",balloonText:"'.__('c-mx','wp-slimstat').': 0",value:0,color:"#ededed"}','md'=>'{id:"MD",balloonText:"'.__('c-md','wp-slimstat').': 0",value:0,color:"#ededed"}','mn'=>'{id:"MN",balloonText:"'.__('c-mn','wp-slimstat').': 0",value:0,color:"#ededed"}','me'=>'{id:"ME",balloonText:"'.__('c-me','wp-slimstat').': 0",value:0,color:"#ededed"}','ms'=>'{id:"MS",balloonText:"'.__('c-ms','wp-slimstat').': 0",value:0,color:"#ededed"}','ma'=>'{id:"MA",balloonText:"'.__('c-ma','wp-slimstat').': 0",value:0,color:"#ededed"}','mz'=>'{id:"MZ",balloonText:"'.__('c-mz','wp-slimstat').': 0",value:0,color:"#ededed"}','mm'=>'{id:"MM",balloonText:"'.__('c-mm','wp-slimstat').': 0",value:0,color:"#ededed"}','na'=>'{id:"NA",balloonText:"'.__('c-na','wp-slimstat').': 0",value:0,color:"#ededed"}','np'=>'{id:"NP",balloonText:"'.__('c-np','wp-slimstat').': 0",value:0,color:"#ededed"}','nl'=>'{id:"NL",balloonText:"'.__('c-nl','wp-slimstat').': 0",value:0,color:"#ededed"}','nc'=>'{id:"NC",balloonText:"'.__('c-nc','wp-slimstat').': 0",value:0,color:"#ededed"}','nz'=>'{id:"NZ",balloonText:"'.__('c-nz','wp-slimstat').': 0",value:0,color:"#ededed"}','ni'=>'{id:"NI",balloonText:"'.__('c-ni','wp-slimstat').': 0",value:0,color:"#ededed"}','ne'=>'{id:"NE",balloonText:"'.__('c-ne','wp-slimstat').': 0",value:0,color:"#ededed"}','ng'=>'{id:"NG",balloonText:"'.__('c-ng','wp-slimstat').': 0",value:0,color:"#ededed"}','no'=>'{id:"NO",balloonText:"'.__('c-no','wp-slimstat').': 0",value:0,color:"#ededed"}','om'=>'{id:"OM",balloonText:"'.__('c-om','wp-slimstat').': 0",value:0,color:"#ededed"}','pk'=>'{id:"PK",balloonText:"'.__('c-pk','wp-slimstat').': 0",value:0,color:"#ededed"}','pw'=>'{id:"PW",balloonText:"'.__('c-pw','wp-slimstat').': 0",value:0,color:"#ededed"}','ps'=>'{id:"PS",balloonText:"'.__('c-ps','wp-slimstat').': 0",value:0,color:"#ededed"}','pa'=>'{id:"PA",balloonText:"'.__('c-pa','wp-slimstat').': 0",value:0,color:"#ededed"}','pg'=>'{id:"PG",balloonText:"'.__('c-pg','wp-slimstat').': 0",value:0,color:"#ededed"}','py'=>'{id:"PY",balloonText:"'.__('c-py','wp-slimstat').': 0",value:0,color:"#ededed"}','pe'=>'{id:"PE",balloonText:"'.__('c-pe','wp-slimstat').': 0",value:0,color:"#ededed"}','ph'=>'{id:"PH",balloonText:"'.__('c-ph','wp-slimstat').': 0",value:0,color:"#ededed"}','pl'=>'{id:"PL",balloonText:"'.__('c-pl','wp-slimstat').': 0",value:0,color:"#ededed"}','pt'=>'{id:"PT",balloonText:"'.__('c-pt','wp-slimstat').': 0",value:0,color:"#ededed"}','pr'=>'{id:"PR",balloonText:"'.__('c-pr','wp-slimstat').': 0",value:0,color:"#ededed"}','qa'=>'{id:"QA",balloonText:"'.__('c-qa','wp-slimstat').': 0",value:0,color:"#ededed"}','re'=>'{id:"RE",balloonText:"'.__('c-re','wp-slimstat').': 0",value:0,color:"#ededed"}','ro'=>'{id:"RO",balloonText:"'.__('c-ro','wp-slimstat').': 0",value:0,color:"#ededed"}','ru'=>'{id:"RU",balloonText:"'.__('c-ru','wp-slimstat').': 0",value:0,color:"#ededed"}','rw'=>'{id:"RW",balloonText:"'.__('c-rw','wp-slimstat').': 0",value:0,color:"#ededed"}','kn'=>'{id:"KN",balloonText:"'.__('c-kn','wp-slimstat').': 0",value:0,color:"#ededed"}','lc'=>'{id:"LC",balloonText:"'.__('c-lc','wp-slimstat').': 0",value:0,color:"#ededed"}','mf'=>'{id:"MF",balloonText:"'.__('c-mf','wp-slimstat').': 0",value:0,color:"#ededed"}','vc'=>'{id:"VC",balloonText:"'.__('c-vc','wp-slimstat').': 0",value:0,color:"#ededed"}','ws'=>'{id:"WS",balloonText:"'.__('c-ws','wp-slimstat').': 0",value:0,color:"#ededed"}','st'=>'{id:"ST",balloonText:"'.__('c-st','wp-slimstat').': 0",value:0,color:"#ededed"}','sa'=>'{id:"SA",balloonText:"'.__('c-sa','wp-slimstat').': 0",value:0,color:"#ededed"}','sn'=>'{id:"SN",balloonText:"'.__('c-sn','wp-slimstat').': 0",value:0,color:"#ededed"}','rs'=>'{id:"RS",balloonText:"'.__('c-rs','wp-slimstat').': 0",value:0,color:"#ededed"}','sl'=>'{id:"SL",balloonText:"'.__('c-sl','wp-slimstat').': 0",value:0,color:"#ededed"}','sg'=>'{id:"SG",balloonText:"'.__('c-sg','wp-slimstat').': 0",value:0,color:"#ededed"}','sk'=>'{id:"SK",balloonText:"'.__('c-sk','wp-slimstat').': 0",value:0,color:"#ededed"}','si'=>'{id:"SI",balloonText:"'.__('c-si','wp-slimstat').': 0",value:0,color:"#ededed"}','sb'=>'{id:"SB",balloonText:"'.__('c-sb','wp-slimstat').': 0",value:0,color:"#ededed"}','so'=>'{id:"SO",balloonText:"'.__('c-so','wp-slimstat').': 0",value:0,color:"#ededed"}','za'=>'{id:"ZA",balloonText:"'.__('c-za','wp-slimstat').': 0",value:0,color:"#ededed"}','gs'=>'{id:"GS",balloonText:"'.__('c-gs','wp-slimstat').': 0",value:0,color:"#ededed"}','es'=>'{id:"ES",balloonText:"'.__('c-es','wp-slimstat').': 0",value:0,color:"#ededed"}','lk'=>'{id:"LK",balloonText:"'.__('c-lk','wp-slimstat').': 0",value:0,color:"#ededed"}','sc'=>'{id:"SC",balloonText:"'.__('c-sc','wp-slimstat').': 0",value:0,color:"#ededed"}','sd'=>'{id:"SD",balloonText:"'.__('c-sd','wp-slimstat').': 0",value:0,color:"#ededed"}','ss'=>'{id:"SS",balloonText:"'.__('c-ss','wp-slimstat').': 0",value:0,color:"#ededed"}','sr'=>'{id:"SR",balloonText:"'.__('c-sr','wp-slimstat').': 0",value:0,color:"#ededed"}','sj'=>'{id:"SJ",balloonText:"'.__('c-sj','wp-slimstat').': 0",value:0,color:"#ededed"}','sz'=>'{id:"SZ",balloonText:"'.__('c-sz','wp-slimstat').': 0",value:0,color:"#ededed"}','se'=>'{id:"SE",balloonText:"'.__('c-se','wp-slimstat').': 0",value:0,color:"#ededed"}','ch'=>'{id:"CH",balloonText:"'.__('c-ch','wp-slimstat').': 0",value:0,color:"#ededed"}','sy'=>'{id:"SY",balloonText:"'.__('c-sy','wp-slimstat').': 0",value:0,color:"#ededed"}','tw'=>'{id:"TW",balloonText:"'.__('c-tw','wp-slimstat').': 0",value:0,color:"#ededed"}','tj'=>'{id:"TJ",balloonText:"'.__('c-tj','wp-slimstat').': 0",value:0,color:"#ededed"}','tz'=>'{id:"TZ",balloonText:"'.__('c-tz','wp-slimstat').': 0",value:0,color:"#ededed"}','th'=>'{id:"TH",balloonText:"'.__('c-th','wp-slimstat').': 0",value:0,color:"#ededed"}','tl'=>'{id:"TL",balloonText:"'.__('c-tl','wp-slimstat').': 0",value:0,color:"#ededed"}','tg'=>'{id:"TG",balloonText:"'.__('c-tg','wp-slimstat').': 0",value:0,color:"#ededed"}','to'=>'{id:"TO",balloonText:"'.__('c-to','wp-slimstat').': 0",value:0,color:"#ededed"}','tt'=>'{id:"TT",balloonText:"'.__('c-tt','wp-slimstat').': 0",value:0,color:"#ededed"}','tn'=>'{id:"TN",balloonText:"'.__('c-tn','wp-slimstat').': 0",value:0,color:"#ededed"}','tr'=>'{id:"TR",balloonText:"'.__('c-tr','wp-slimstat').': 0",value:0,color:"#ededed"}','tm'=>'{id:"TM",balloonText:"'.__('c-tm','wp-slimstat').': 0",value:0,color:"#ededed"}','tc'=>'{id:"TC",balloonText:"'.__('c-tc','wp-slimstat').': 0",value:0,color:"#ededed"}','ug'=>'{id:"UG",balloonText:"'.__('c-ug','wp-slimstat').': 0",value:0,color:"#ededed"}','ua'=>'{id:"UA",balloonText:"'.__('c-ua','wp-slimstat').': 0",value:0,color:"#ededed"}','ae'=>'{id:"AE",balloonText:"'.__('c-ae','wp-slimstat').': 0",value:0,color:"#ededed"}','gb'=>'{id:"GB",balloonText:"'.__('c-gb','wp-slimstat').': 0",value:0,color:"#ededed"}','us'=>'{id:"US",balloonText:"'.__('c-us','wp-slimstat').': 0",value:0,color:"#ededed"}','uy'=>'{id:"UY",balloonText:"'.__('c-uy','wp-slimstat').': 0",value:0,color:"#ededed"}','uz'=>'{id:"UZ",balloonText:"'.__('c-uz','wp-slimstat').': 0",value:0,color:"#ededed"}','vu'=>'{id:"VU",balloonText:"'.__('c-vu','wp-slimstat').': 0",value:0,color:"#ededed"}','ve'=>'{id:"VE",balloonText:"'.__('c-ve','wp-slimstat').': 0",value:0,color:"#ededed"}','vn'=>'{id:"VN",balloonText:"'.__('c-vn','wp-slimstat').': 0",value:0,color:"#ededed"}','vg'=>'{id:"VG",balloonText:"'.__('c-vg','wp-slimstat').': 0",value:0,color:"#ededed"}','vi'=>'{id:"VI",balloonText:"'.__('c-vi','wp-slimstat').': 0",value:0,color:"#ededed"}','eh'=>'{id:"EH",balloonText:"'.__('c-eh','wp-slimstat').': 0",value:0,color:"#ededed"}','ye'=>'{id:"YE",balloonText:"'.__('c-ye','wp-slimstat').': 0",value:0,color:"#ededed"}','zm'=>'{id:"ZM",balloonText:"'.__('c-zm','wp-slimstat').': 0",value:0,color:"#ededed"}','zw'=>'{id:"ZW",balloonText:"'.__('c-zw','wp-slimstat').': 0",value:0,color:"#ededed"}','gg'=>'{id:"GG",balloonText:"'.__('c-gg','wp-slimstat').': 0",value:0,color:"#ededed"}','je'=>'{id:"JE",balloonText:"'.__('c-je','wp-slimstat').': 0",value:0,color:"#ededed"}','im'=>'{id:"IM",balloonText:"'.__('c-im','wp-slimstat').': 0",value:0,color:"#ededed"}','mv'=>'{id:"MV",balloonText:"'.__('c-mv','wp-slimstat').': 0",value:0,color:"#ededed"}');
1575
  $data_areas = array();
1576
- $dynamic_strings = slim_i18n::get_dynamic_strings();
1577
- foreach ( array_keys( $dynamic_strings ) as $a_code ) {
1578
- if ( substr( $a_code, 0, 2 ) == 'c-' ) {
1579
- $clean_code = str_replace( 'c-', '', $a_code );
1580
- $data_areas[ $clean_code ] = '{id:"' . $clean_code . '",balloonText:"' . slim_i18n::get_string( $a_code ) . ': 0",value:0,color:"#ededed"}';
1581
- }
1582
  }
1583
 
1584
  $max = 0;
1585
 
1586
  foreach ( $countries as $a_country ) {
1587
- if ( !array_key_exists( $a_country[ 'country' ], $data_areas ) ) {
 
1588
  continue;
1589
  }
1590
 
1591
  $percentage = ( wp_slimstat_db::$pageviews > 0 ) ? sprintf( "%01.2f", ( 100 * $a_country[ 'counthits' ] / wp_slimstat_db::$pageviews ) ) : 0;
1592
  $percentage_format = number_format_i18n( $percentage, 2 );
1593
  $balloon_text = slim_i18n::get_string( 'c-' . $a_country[ 'country' ], 'wp-slimstat' ) . ': ' . $percentage_format . '% (' . number_format_i18n( $a_country[ 'counthits' ] ) . ')';
1594
- $data_areas[ $a_country[ 'country' ] ] = '{id:"' . strtoupper( $a_country[ 'country' ] ) . '",balloonText:"' . $balloon_text . '",value:' . $percentage . '}';
1595
 
1596
  if ( $percentage > $max ) {
1597
  $max = $percentage;
@@ -1612,7 +1602,7 @@ class wp_slimstat_reports {
1612
 
1613
  var dataProvider = {
1614
  map: "worldLow",
1615
- getAreasFromMap: true,
1616
  areas:[ <?php echo implode( ',', $data_areas ) ?> ],
1617
  images: [ <?php if ( !empty( $data_points ) ) echo implode( ',', $data_points ) ?> ]
1618
  };
@@ -1720,7 +1710,7 @@ class wp_slimstat_reports {
1720
  continue;
1721
  }
1722
 
1723
- $a_filter_value_no_slashes = htmlentities( str_replace( '\\','', $a_filter_details[ 1 ] ), ENT_QUOTES, 'UTF-8' );
1724
  $filters_html .= '<li>' . strtolower( wp_slimstat_db::$columns_names[ $a_filter_label ][ 0 ] ) . ' ' . __( str_replace( '_', ' ', $a_filter_details[ 0 ] ), 'wp-slimstat' ) . " $a_filter_value_no_slashes <a class='slimstat-filter-link slimstat-font-cancel' title='" . htmlentities( __( 'Remove filter for', 'wp-slimstat' ), ENT_QUOTES, 'UTF-8' ) . ' ' . wp_slimstat_db::$columns_names[ $a_filter_label ][ 0 ] . "' href='" . self::fs_url( "$a_filter_label equals " ) . "'></a></li>";
1725
  }
1726
  }
@@ -1797,7 +1787,7 @@ class wp_slimstat_reports {
1797
  */
1798
  public static function get_resource_title( $_resource = '' ) {
1799
  if ( wp_slimstat::$settings[ 'convert_resource_urls_to_titles' ] != 'on' ) {
1800
- return htmlentities( urldecode( $resource_title ), ENT_QUOTES, 'UTF-8' );
1801
  }
1802
 
1803
  // Do we already have this value in our transient cache?
39
  ),
40
  'classes' => array( 'full-width', 'tall' ),
41
  'screens' => array( 'slimview1', 'dashboard' ),
42
+ 'tooltip' => __( 'Color Codes', 'wp-slimstat' ) . '</strong><p><span class="little-color-box is-search-engine"></span> ' . __( 'From search result page', 'wp-slimstat' ) . '</p><p><span class="little-color-box is-known-visitor"></span> ' . __( 'Has Left Comments', 'wp-slimstat' ) . '</p><p><span class="little-color-box is-known-user"></span> ' . __( 'WP User', 'wp-slimstat' ) . '</p><p><span class="little-color-box is-direct"></span> ' . __( 'Other Human', 'wp-slimstat' ) . '</p><p><span class="little-color-box"></span> ' . __( 'Bot or Crawler', 'wp-slimstat' ) . '</p>'
43
  ),
44
 
45
  'slim_p1_01' => array(
1053
  $permalinks_enabled = get_option( 'permalink_structure' );
1054
  $column_not_calculated = str_replace( '_calculated', '', $_args[ 'columns' ] );
1055
 
 
 
 
1056
  for ( $i=0; $i<$count_page_results; $i++ ) {
1057
  $row_details = $percentage = '';
1058
  $element_pre_value = '';
1060
 
1061
  // Some columns require a special pre-treatment
1062
  switch ( $column_not_calculated ){
 
1063
  case 'browser':
1064
  if ( !empty( $results[ $i ][ 'user_agent' ] ) && wp_slimstat::$settings[ 'show_complete_user_agent_tooltip' ] == 'on' ) {
1065
  $element_pre_value = self::inline_help( $results[ $i ][ 'user_agent' ], false );
1564
  }
1565
  }
1566
 
 
 
 
 
1567
  $data_areas = array();
1568
+
1569
+ foreach ( slim_i18n::get_country_codes() as $a_code => $a_string ) {
1570
+ $data_areas[ $a_code ] = '{id:"' . $a_code . '",balloonText:"' . $a_string . ': 0",value:0,color:"#ededed"}';
 
 
 
1571
  }
1572
 
1573
  $max = 0;
1574
 
1575
  foreach ( $countries as $a_country ) {
1576
+ $current_country_code = strtolower( $a_country[ 'country' ] );
1577
+ if ( !array_key_exists( $current_country_code, $data_areas ) ) {
1578
  continue;
1579
  }
1580
 
1581
  $percentage = ( wp_slimstat_db::$pageviews > 0 ) ? sprintf( "%01.2f", ( 100 * $a_country[ 'counthits' ] / wp_slimstat_db::$pageviews ) ) : 0;
1582
  $percentage_format = number_format_i18n( $percentage, 2 );
1583
  $balloon_text = slim_i18n::get_string( 'c-' . $a_country[ 'country' ], 'wp-slimstat' ) . ': ' . $percentage_format . '% (' . number_format_i18n( $a_country[ 'counthits' ] ) . ')';
1584
+ $data_areas[ $current_country_code ] = '{id:"' . strtoupper( $a_country[ 'country' ] ) . '",balloonText:"' . $balloon_text . '",value:' . $percentage . '}';
1585
 
1586
  if ( $percentage > $max ) {
1587
  $max = $percentage;
1602
 
1603
  var dataProvider = {
1604
  map: "worldLow",
1605
+ getAreasFromMap: false,
1606
  areas:[ <?php echo implode( ',', $data_areas ) ?> ],
1607
  images: [ <?php if ( !empty( $data_points ) ) echo implode( ',', $data_points ) ?> ]
1608
  };
1710
  continue;
1711
  }
1712
 
1713
+ $a_filter_value_no_slashes = ( $a_filter_details[ 0 ] == 'is_empty' || $a_filter_details[ 0 ] == 'is_not_empty' ) ? '' : htmlentities( str_replace( '\\','', $a_filter_details[ 1 ] ), ENT_QUOTES, 'UTF-8' );
1714
  $filters_html .= '<li>' . strtolower( wp_slimstat_db::$columns_names[ $a_filter_label ][ 0 ] ) . ' ' . __( str_replace( '_', ' ', $a_filter_details[ 0 ] ), 'wp-slimstat' ) . " $a_filter_value_no_slashes <a class='slimstat-filter-link slimstat-font-cancel' title='" . htmlentities( __( 'Remove filter for', 'wp-slimstat' ), ENT_QUOTES, 'UTF-8' ) . ' ' . wp_slimstat_db::$columns_names[ $a_filter_label ][ 0 ] . "' href='" . self::fs_url( "$a_filter_label equals " ) . "'></a></li>";
1715
  }
1716
  }
1787
  */
1788
  public static function get_resource_title( $_resource = '' ) {
1789
  if ( wp_slimstat::$settings[ 'convert_resource_urls_to_titles' ] != 'on' ) {
1790
+ return htmlentities( urldecode( $_resource ), ENT_QUOTES, 'UTF-8' );
1791
  }
1792
 
1793
  // Do we already have this value in our transient cache?
languages/dynamic_strings.php DELETED
@@ -1,571 +0,0 @@
1
- <?php
2
- class slim_i18n {
3
- public static function get_dynamic_strings() {
4
- return array(
5
- 'xx' => __( 'Unknown', 'wp-slimstat' ),
6
-
7
- // Countries
8
- 'c-xx' => __( 'Unknown', 'wp-slimstat' ),
9
- 'c-xy' => __( 'Local IP Address', 'wp-slimstat' ),
10
-
11
- 'c-af' => __( 'Afghanistan', 'wp-slimstat' ),
12
- 'c-ax' => __( 'Aland Islands', 'wp-slimstat' ),
13
- 'c-al' => __( 'Albania', 'wp-slimstat' ),
14
- 'c-dz' => __( 'Algeria', 'wp-slimstat' ),
15
- 'c-ad' => __( 'Andorra', 'wp-slimstat' ),
16
- 'c-ao' => __( 'Angola', 'wp-slimstat' ),
17
- 'c-ai' => __( 'Anguilla', 'wp-slimstat' ),
18
- 'c-ag' => __( 'Antigua and Barbuda', 'wp-slimstat' ),
19
- 'c-ar' => __( 'Argentina', 'wp-slimstat' ),
20
- 'c-am' => __( 'Armenia', 'wp-slimstat' ),
21
- 'c-aw' => __( 'Aruba', 'wp-slimstat' ),
22
- 'c-au' => __( 'Australia', 'wp-slimstat' ),
23
- 'c-at' => __( 'Austria', 'wp-slimstat' ),
24
- 'c-az' => __( 'Azerbaijan', 'wp-slimstat' ),
25
- 'c-bs' => __( 'Bahamas', 'wp-slimstat' ),
26
- 'c-bh' => __( 'Bahrain', 'wp-slimstat' ),
27
- 'c-bd' => __( 'Bangladesh', 'wp-slimstat' ),
28
- 'c-bb' => __( 'Barbados', 'wp-slimstat' ),
29
- 'c-by' => __( 'Belarus', 'wp-slimstat' ),
30
- 'c-be' => __( 'Belgium', 'wp-slimstat' ),
31
- 'c-bz' => __( 'Belize', 'wp-slimstat' ),
32
- 'c-bj' => __( 'Benin', 'wp-slimstat' ),
33
- 'c-bm' => __( 'Bermuda', 'wp-slimstat' ),
34
- 'c-bt' => __( 'Bhutan', 'wp-slimstat' ),
35
- 'c-bo' => __( 'Bolivia', 'wp-slimstat' ),
36
- 'c-ba' => __( 'Bosnia and Herzegovina', 'wp-slimstat' ),
37
- 'c-bw' => __( 'Botswana', 'wp-slimstat' ),
38
- 'c-br' => __( 'Brazil', 'wp-slimstat' ),
39
- 'c-bn' => __( 'Brunei Darussalam', 'wp-slimstat' ),
40
- 'c-bg' => __( 'Bulgaria', 'wp-slimstat' ),
41
- 'c-bf' => __( 'Burkina Faso', 'wp-slimstat' ),
42
- 'c-bi' => __( 'Burundi', 'wp-slimstat' ),
43
- 'c-kh' => __( 'Cambodia', 'wp-slimstat' ),
44
- 'c-cm' => __( 'Cameroon', 'wp-slimstat' ),
45
- 'c-ca' => __( 'Canada', 'wp-slimstat' ),
46
- 'c-cv' => __( 'Cape Verde', 'wp-slimstat' ),
47
- 'c-ky' => __( 'Cayman Islands', 'wp-slimstat' ),
48
- 'c-cf' => __( 'Central African Republic', 'wp-slimstat' ),
49
- 'c-td' => __( 'Chad', 'wp-slimstat' ),
50
- 'c-cl' => __( 'Chile', 'wp-slimstat' ),
51
- 'c-cn' => __( 'China', 'wp-slimstat' ),
52
- 'c-co' => __( 'Colombia', 'wp-slimstat' ),
53
- 'c-km' => __( 'Comoros', 'wp-slimstat' ),
54
- 'c-cg' => __( 'Congo', 'wp-slimstat' ),
55
- 'c-cd' => __( 'The Democratic Republic of the Congo', 'wp-slimstat' ),
56
- 'c-cr' => __( 'Costa Rica', 'wp-slimstat' ),
57
- 'c-ci' => __( 'Côte d\'Ivoire', 'wp-slimstat' ),
58
- 'c-hr' => __( 'Croatia', 'wp-slimstat' ),
59
- 'c-cu' => __( 'Cuba', 'wp-slimstat' ),
60
- 'c-cy' => __( 'Cyprus', 'wp-slimstat' ),
61
- 'c-cz' => __( 'Czech Republic', 'wp-slimstat' ),
62
- 'c-dk' => __( 'Denmark', 'wp-slimstat' ),
63
- 'c-dj' => __( 'Djibouti', 'wp-slimstat' ),
64
- 'c-dm' => __( 'Dominica', 'wp-slimstat' ),
65
- 'c-do' => __( 'Dominican Republic', 'wp-slimstat' ),
66
- 'c-ec' => __( 'Ecuador', 'wp-slimstat' ),
67
- 'c-eg' => __( 'Egypt', 'wp-slimstat' ),
68
- 'c-sv' => __( 'El Salvador', 'wp-slimstat' ),
69
- 'c-gq' => __( 'Equatorial Guinea', 'wp-slimstat' ),
70
- 'c-er' => __( 'Eritrea', 'wp-slimstat' ),
71
- 'c-ee' => __( 'Estonia', 'wp-slimstat' ),
72
- 'c-et' => __( 'Ethiopia', 'wp-slimstat' ),
73
- 'c-fo' => __( 'Faroe Islands', 'wp-slimstat' ),
74
- 'c-fk' => __( 'Falkland Islands (Malvinas)', 'wp-slimstat' ),
75
- 'c-fj' => __( 'Fiji', 'wp-slimstat' ),
76
- 'c-fi' => __( 'Finland', 'wp-slimstat' ),
77
- 'c-fr' => __( 'France', 'wp-slimstat' ),
78
- 'c-gf' => __( 'French Guiana', 'wp-slimstat' ),
79
- 'c-ga' => __( 'Gabon', 'wp-slimstat' ),
80
- 'c-gm' => __( 'Gambia', 'wp-slimstat' ),
81
- 'c-ge' => __( 'Georgia', 'wp-slimstat' ),
82
- 'c-de' => __( 'Germany', 'wp-slimstat' ),
83
- 'c-gh' => __( 'Ghana', 'wp-slimstat' ),
84
- 'c-gr' => __( 'Greece', 'wp-slimstat' ),
85
- 'c-gl' => __( 'Greenland', 'wp-slimstat' ),
86
- 'c-gd' => __( 'Grenada', 'wp-slimstat' ),
87
- 'c-gp' => __( 'Guadeloupe', 'wp-slimstat' ),
88
- 'c-gt' => __( 'Guatemala', 'wp-slimstat' ),
89
- 'c-gn' => __( 'Guinea', 'wp-slimstat' ),
90
- 'c-gw' => __( 'Guinea-Bissau', 'wp-slimstat' ),
91
- 'c-gy' => __( 'Guyana', 'wp-slimstat' ),
92
- 'c-ht' => __( 'Haiti', 'wp-slimstat' ),
93
- 'c-hn' => __( 'Honduras', 'wp-slimstat' ),
94
- 'c-hk' => __( 'Hong Kong', 'wp-slimstat' ),
95
- 'c-hu' => __( 'Hungary', 'wp-slimstat' ),
96
- 'c-is' => __( 'Iceland', 'wp-slimstat' ),
97
- 'c-in' => __( 'India', 'wp-slimstat' ),
98
- 'c-id' => __( 'Indonesia', 'wp-slimstat' ),
99
- 'c-ir' => __( 'Islamic Republic of Iran', 'wp-slimstat' ),
100
- 'c-iq' => __( 'Iraq', 'wp-slimstat' ),
101
- 'c-ie' => __( 'Ireland', 'wp-slimstat' ),
102
- 'c-il' => __( 'Israel', 'wp-slimstat' ),
103
- 'c-it' => __( 'Italy', 'wp-slimstat' ),
104
- 'c-jm' => __( 'Jamaica', 'wp-slimstat' ),
105
- 'c-jp' => __( 'Japan', 'wp-slimstat' ),
106
- 'c-jo' => __( 'Jordan', 'wp-slimstat' ),
107
- 'c-kz' => __( 'Kazakhstan', 'wp-slimstat' ),
108
- 'c-ke' => __( 'Kenya', 'wp-slimstat' ),
109
- 'c-nr' => __( 'Nauru', 'wp-slimstat' ),
110
- 'c-kp' => __( 'Democratic People\'s Republic of Korea', 'wp-slimstat' ),
111
- 'c-kr' => __( 'Republic of Korea', 'wp-slimstat' ),
112
- 'c-kv' => __( 'Kosovo', 'wp-slimstat' ),
113
- 'c-kw' => __( 'Kuwait', 'wp-slimstat' ),
114
- 'c-kg' => __( 'Kyrgyzstan', 'wp-slimstat' ),
115
- 'c-la' => __( 'Lao People\'s Democratic Republic', 'wp-slimstat' ),
116
- 'c-lv' => __( 'Latvia', 'wp-slimstat' ),
117
- 'c-lb' => __( 'Lebanon', 'wp-slimstat' ),
118
- 'c-ls' => __( 'Lesotho', 'wp-slimstat' ),
119
- 'c-lr' => __( 'Liberia', 'wp-slimstat' ),
120
- 'c-ly' => __( 'Libyan Arab Jamahiriya', 'wp-slimstat' ),
121
- 'c-li' => __( 'Liechtenstein', 'wp-slimstat' ),
122
- 'c-lt' => __( 'Lithuania', 'wp-slimstat' ),
123
- 'c-lu' => __( 'Luxembourg', 'wp-slimstat' ),
124
- 'c-mk' => __( 'The Former Yugoslav Republic of Macedonia', 'wp-slimstat' ),
125
- 'c-mg' => __( 'Madagascar', 'wp-slimstat' ),
126
- 'c-mw' => __( 'Malawi', 'wp-slimstat' ),
127
- 'c-my' => __( 'Malaysia', 'wp-slimstat' ),
128
- 'c-ml' => __( 'Mali', 'wp-slimstat' ),
129
- 'c-mt' => __( 'Malta', 'wp-slimstat' ),
130
- 'c-mq' => __( 'Martinique', 'wp-slimstat' ),
131
- 'c-mr' => __( 'Mauritania', 'wp-slimstat' ),
132
- 'c-mu' => __( 'Mauritius', 'wp-slimstat' ),
133
- 'c-mx' => __( 'Mexico', 'wp-slimstat' ),
134
- 'c-md' => __( 'Moldova', 'wp-slimstat' ),
135
- 'c-mn' => __( 'Mongolia', 'wp-slimstat' ),
136
- 'c-me' => __( 'Montenegro', 'wp-slimstat' ),
137
- 'c-ms' => __( 'Montserrat', 'wp-slimstat' ),
138
- 'c-ma' => __( 'Morocco', 'wp-slimstat' ),
139
- 'c-mz' => __( 'Mozambique', 'wp-slimstat' ),
140
- 'c-mm' => __( 'Myanmar', 'wp-slimstat' ),
141
- 'c-na' => __( 'Namibia', 'wp-slimstat' ),
142
- 'c-np' => __( 'Nepal', 'wp-slimstat' ),
143
- 'c-nl' => __( 'Netherlands', 'wp-slimstat' ),
144
- 'c-nc' => __( 'New Caledonia', 'wp-slimstat' ),
145
- 'c-nz' => __( 'New Zealand', 'wp-slimstat' ),
146
- 'c-ni' => __( 'Nicaragua', 'wp-slimstat' ),
147
- 'c-ne' => __( 'Niger', 'wp-slimstat' ),
148
- 'c-ng' => __( 'Nigeria', 'wp-slimstat' ),
149
- 'c-no' => __( 'Norway', 'wp-slimstat' ),
150
- 'c-om' => __( 'Oman', 'wp-slimstat' ),
151
- 'c-pk' => __( 'Pakistan', 'wp-slimstat' ),
152
- 'c-pw' => __( 'Palau', 'wp-slimstat' ),
153
- 'c-ps' => __( 'Occupied Palestinian Territory', 'wp-slimstat' ),
154
- 'c-pa' => __( 'Panama', 'wp-slimstat' ),
155
- 'c-pg' => __( 'Papua New Guinea', 'wp-slimstat' ),
156
- 'c-py' => __( 'Paraguay', 'wp-slimstat' ),
157
- 'c-pe' => __( 'Peru', 'wp-slimstat' ),
158
- 'c-ph' => __( 'Philippines', 'wp-slimstat' ),
159
- 'c-pl' => __( 'Poland', 'wp-slimstat' ),
160
- 'c-pt' => __( 'Portugal', 'wp-slimstat' ),
161
- 'c-pr' => __( 'Puerto Rico', 'wp-slimstat' ),
162
- 'c-qa' => __( 'Qatar', 'wp-slimstat' ),
163
- 'c-re' => __( 'Réunion', 'wp-slimstat' ),
164
- 'c-ro' => __( 'Romania', 'wp-slimstat' ),
165
- 'c-ru' => __( 'Russian Federation', 'wp-slimstat' ),
166
- 'c-rw' => __( 'Rwanda', 'wp-slimstat' ),
167
- 'c-kn' => __( 'Saint Kitts and Nevis', 'wp-slimstat' ),
168
- 'c-lc' => __( 'Saint Lucia', 'wp-slimstat' ),
169
- 'c-mf' => __( 'Saint Martin', 'wp-slimstat' ),
170
- 'c-vc' => __( 'Saint Vincent and the Grenadines', 'wp-slimstat' ),
171
- 'c-ws' => __( 'Samoa', 'wp-slimstat' ),
172
- 'c-st' => __( 'Sao Tome and Principe', 'wp-slimstat' ),
173
- 'c-sa' => __( 'Saudi Arabia', 'wp-slimstat' ),
174
- 'c-sn' => __( 'Senegal', 'wp-slimstat' ),
175
- 'c-rs' => __( 'Serbia', 'wp-slimstat' ),
176
- 'c-sl' => __( 'Sierra Leone', 'wp-slimstat' ),
177
- 'c-sg' => __( 'Singapore', 'wp-slimstat' ),
178
- 'c-sk' => __( 'Slovakia', 'wp-slimstat' ),
179
- 'c-si' => __( 'Slovenia', 'wp-slimstat' ),
180
- 'c-sb' => __( 'Solomon Islands', 'wp-slimstat' ),
181
- 'c-so' => __( 'Somalia', 'wp-slimstat' ),
182
- 'c-za' => __( 'South Africa', 'wp-slimstat' ),
183
- 'c-gs' => __( 'South Georgia and the South Sandwich Islands', 'wp-slimstat' ),
184
- 'c-es' => __( 'Spain', 'wp-slimstat' ),
185
- 'c-lk' => __( 'Sri Lanka', 'wp-slimstat' ),
186
- 'c-sc' => __( 'Seychelles', 'wp-slimstat' ),
187
- 'c-sd' => __( 'Sudan', 'wp-slimstat' ),
188
- 'c-ss' => __( 'South Sudan', 'wp-slimstat' ),
189
- 'c-sr' => __( 'Suriname', 'wp-slimstat' ),
190
- 'c-sj' => __( 'Svalbard and Jan Mayen', 'wp-slimstat' ),
191
- 'c-sz' => __( 'Swaziland', 'wp-slimstat' ),
192
- 'c-se' => __( 'Sweden', 'wp-slimstat' ),
193
- 'c-ch' => __( 'Switzerland', 'wp-slimstat' ),
194
- 'c-sy' => __( 'Syrian Arab Republic', 'wp-slimstat' ),
195
- 'c-tw' => __( 'Taiwan', 'wp-slimstat' ),
196
- 'c-tj' => __( 'Tajikistan', 'wp-slimstat' ),
197
- 'c-tz' => __( 'United Republic of Tanzania', 'wp-slimstat' ),
198
- 'c-th' => __( 'Thailand', 'wp-slimstat' ),
199
- 'c-tl' => __( 'Timor-Leste', 'wp-slimstat' ),
200
- 'c-tg' => __( 'Togo', 'wp-slimstat' ),
201
- 'c-to' => __( 'Tonga', 'wp-slimstat' ),
202
- 'c-tt' => __( 'Trinidad and Tobago', 'wp-slimstat' ),
203
- 'c-tn' => __( 'Tunisia', 'wp-slimstat' ),
204
- 'c-tr' => __( 'Turkey', 'wp-slimstat' ),
205
- 'c-tm' => __( 'Turkmenistan', 'wp-slimstat' ),
206
- 'c-tc' => __( 'Turks and Caicos Islands', 'wp-slimstat' ),
207
- 'c-ug' => __( 'Uganda', 'wp-slimstat' ),
208
- 'c-ua' => __( 'Ukraine', 'wp-slimstat' ),
209
- 'c-ae' => __( 'United Arab Emirates', 'wp-slimstat' ),
210
- 'c-gb' => __( 'United Kingdom', 'wp-slimstat' ),
211
- 'c-us' => __( 'United States', 'wp-slimstat' ),
212
- 'c-uy' => __( 'Uruguay', 'wp-slimstat' ),
213
- 'c-uz' => __( 'Uzbekistan', 'wp-slimstat' ),
214
- 'c-vu' => __( 'Vanuatu', 'wp-slimstat' ),
215
- 'c-ve' => __( 'Venezuela', 'wp-slimstat' ),
216
- 'c-vn' => __( 'Viet Nam', 'wp-slimstat' ),
217
- 'c-vg' => __( 'British Virgin Islands', 'wp-slimstat' ),
218
- 'c-vi' => __( 'U.S. Virgin Islands', 'wp-slimstat' ),
219
- 'c-eh' => __( 'Western Sahara', 'wp-slimstat' ),
220
- 'c-ye' => __( 'Yemen', 'wp-slimstat' ),
221
- 'c-zm' => __( 'Zambia', 'wp-slimstat' ),
222
- 'c-zw' => __( 'Zimbabwe', 'wp-slimstat' ),
223
- 'c-gg' => __( 'Guernsey', 'wp-slimstat' ),
224
- 'c-je' => __( 'Jersey', 'wp-slimstat' ),
225
- 'c-im' => __( 'Isle of Man', 'wp-slimstat' ),
226
- 'c-mv' => __( 'Maldives', 'wp-slimstat' ),
227
- 'c-eu' => __( 'Europe', 'wp-slimstat' ),
228
-
229
- // Languages
230
- 'l-af' => __( 'Afrikaans', 'wp-slimstat' ),
231
- 'l-af-za' => __( 'Afrikaans (South Africa)', 'wp-slimstat' ),
232
- 'l-ar' => __( 'Arabic', 'wp-slimstat' ),
233
- 'l-ar-ae' => __( 'Arabic (U.A.E.)', 'wp-slimstat' ),
234
- 'l-ar-bh' => __( 'Arabic (Bahrain)', 'wp-slimstat' ),
235
- 'l-ar-dz' => __( 'Arabic (Algeria)', 'wp-slimstat' ),
236
- 'l-ar-eg' => __( 'Arabic (Egypt)', 'wp-slimstat' ),
237
- 'l-ar-iq' => __( 'Arabic (Iraq)', 'wp-slimstat' ),
238
- 'l-ar-jo' => __( 'Arabic (Jordan)', 'wp-slimstat' ),
239
- 'l-ar-kw' => __( 'Arabic (Kuwait)', 'wp-slimstat' ),
240
- 'l-ar-lb' => __( 'Arabic (Lebanon)', 'wp-slimstat' ),
241
- 'l-ar-ly' => __( 'Arabic (Libya)', 'wp-slimstat' ),
242
- 'l-ar-ma' => __( 'Arabic (Morocco)', 'wp-slimstat' ),
243
- 'l-ar-om' => __( 'Arabic (Oman)', 'wp-slimstat' ),
244
- 'l-ar-qa' => __( 'Arabic (Qatar)', 'wp-slimstat' ),
245
- 'l-ar-sa' => __( 'Arabic (Saudi Arabia)', 'wp-slimstat' ),
246
- 'l-ar-sy' => __( 'Arabic (Syria)', 'wp-slimstat' ),
247
- 'l-ar-tn' => __( 'Arabic (Tunisia)', 'wp-slimstat' ),
248
- 'l-ar-ye' => __( 'Arabic (Yemen)', 'wp-slimstat' ),
249
- 'l-az' => __( 'Azeri (Latin)', 'wp-slimstat' ),
250
- 'l-az-az' => __( 'Azeri (Latin) (Azerbaijan)', 'wp-slimstat' ),
251
- 'l-be' => __( 'Belarusian', 'wp-slimstat' ),
252
- 'l-be-by' => __( 'Belarusian (Belarus)', 'wp-slimstat' ),
253
- 'l-bg' => __( 'Bulgarian', 'wp-slimstat' ),
254
- 'l-bg-bg' => __( 'Bulgarian (Bulgaria)', 'wp-slimstat' ),
255
- 'l-bs-ba' => __( 'Bosnian (Bosnia and Herzegovina)', 'wp-slimstat' ),
256
- 'l-ca' => __( 'Catalan', 'wp-slimstat' ),
257
- 'l-ca-es' => __( 'Catalan (Spain)', 'wp-slimstat' ),
258
- 'l-cs' => __( 'Czech', 'wp-slimstat' ),
259
- 'l-cs-cz' => __( 'Czech (Czech Republic)', 'wp-slimstat' ),
260
- 'l-cy' => __( 'Welsh', 'wp-slimstat' ),
261
- 'l-cy-gb' => __( 'Welsh (United Kingdom)', 'wp-slimstat' ),
262
- 'l-da' => __( 'Danish', 'wp-slimstat' ),
263
- 'l-da-dk' => __( 'Danish (Denmark)', 'wp-slimstat' ),
264
- 'l-de' => __( 'German', 'wp-slimstat' ),
265
- 'l-de-at' => __( 'German (Austria)', 'wp-slimstat' ),
266
- 'l-de-ch' => __( 'German (Switzerland)', 'wp-slimstat' ),
267
- 'l-de-de' => __( 'German (Germany)', 'wp-slimstat' ),
268
- 'l-de-li' => __( 'German (Liechtenstein)', 'wp-slimstat' ),
269
- 'l-de-lu' => __( 'German (Luxembourg)', 'wp-slimstat' ),
270
- 'l-dv' => __( 'Divehi', 'wp-slimstat' ),
271
- 'l-dv-mv' => __( 'Divehi (Maldives)', 'wp-slimstat' ),
272
- 'l-el' => __( 'Greek', 'wp-slimstat' ),
273
- 'l-el-gr' => __( 'Greek (Greece)', 'wp-slimstat' ),
274
- 'l-en' => __( 'English', 'wp-slimstat' ),
275
- 'l-en-au' => __( 'English (Australia)', 'wp-slimstat' ),
276
- 'l-en-bz' => __( 'English (Belize)', 'wp-slimstat' ),
277
- 'l-en-ca' => __( 'English (Canada)', 'wp-slimstat' ),
278
- 'l-en-cb' => __( 'English (Caribbean)', 'wp-slimstat' ),
279
- 'l-en-gb' => __( 'English (United Kingdom)', 'wp-slimstat' ),
280
- 'l-en-ie' => __( 'English (Ireland)', 'wp-slimstat' ),
281
- 'l-en-jm' => __( 'English (Jamaica)', 'wp-slimstat' ),
282
- 'l-en-nz' => __( 'English (New Zealand)', 'wp-slimstat' ),
283
- 'l-en-ph' => __( 'English (Republic of the Philippines)', 'wp-slimstat' ),
284
- 'l-en-tt' => __( 'English (Trinidad and Tobago)', 'wp-slimstat' ),
285
- 'l-en-us' => __( 'English (United States)', 'wp-slimstat' ),
286
- 'l-en-za' => __( 'English (South Africa)', 'wp-slimstat' ),
287
- 'l-en-zw' => __( 'English (Zimbabwe)', 'wp-slimstat' ),
288
- 'l-eo' => __( 'Esperanto', 'wp-slimstat' ),
289
- 'l-es' => __( 'Spanish', 'wp-slimstat' ),
290
- 'l-es-ar' => __( 'Spanish (Argentina)', 'wp-slimstat' ),
291
- 'l-es-bo' => __( 'Spanish (Bolivia)', 'wp-slimstat' ),
292
- 'l-es-cl' => __( 'Spanish (Chile)', 'wp-slimstat' ),
293
- 'l-es-co' => __( 'Spanish (Colombia)', 'wp-slimstat' ),
294
- 'l-es-cr' => __( 'Spanish (Costa Rica)', 'wp-slimstat' ),
295
- 'l-es-do' => __( 'Spanish (Dominican Republic)', 'wp-slimstat' ),
296
- 'l-es-ec' => __( 'Spanish (Ecuador)', 'wp-slimstat' ),
297
- 'l-es-es' => __( 'Spanish (Spain)', 'wp-slimstat' ),
298
- 'l-es-gt' => __( 'Spanish (Guatemala)', 'wp-slimstat' ),
299
- 'l-es-hn' => __( 'Spanish (Honduras)', 'wp-slimstat' ),
300
- 'l-es-mx' => __( 'Spanish (Mexico)', 'wp-slimstat' ),
301
- 'l-es-ni' => __( 'Spanish (Nicaragua)', 'wp-slimstat' ),
302
- 'l-es-pa' => __( 'Spanish (Panama)', 'wp-slimstat' ),
303
- 'l-es-pe' => __( 'Spanish (Peru)', 'wp-slimstat' ),
304
- 'l-es-pr' => __( 'Spanish (Puerto Rico)', 'wp-slimstat' ),
305
- 'l-es-py' => __( 'Spanish (Paraguay)', 'wp-slimstat' ),
306
- 'l-es-sv' => __( 'Spanish (El Salvador)', 'wp-slimstat' ),
307
- 'l-es-uy' => __( 'Spanish (Uruguay)', 'wp-slimstat' ),
308
- 'l-es-ve' => __( 'Spanish (Venezuela)', 'wp-slimstat' ),
309
- 'l-et' => __( 'Estonian', 'wp-slimstat' ),
310
- 'l-et-ee' => __( 'Estonian (Estonia)', 'wp-slimstat' ),
311
- 'l-eu' => __( 'Basque', 'wp-slimstat' ),
312
- 'l-eu-es' => __( 'Basque (Spain)', 'wp-slimstat' ),
313
- 'l-fa' => __( 'Farsi', 'wp-slimstat' ),
314
- 'l-fa-ir' => __( 'Farsi (Iran)', 'wp-slimstat' ),
315
- 'l-fi' => __( 'Finnish', 'wp-slimstat' ),
316
- 'l-fi-fi' => __( 'Finnish (Finland)', 'wp-slimstat' ),
317
- 'l-fo' => __( 'Faroese', 'wp-slimstat' ),
318
- 'l-fo-fo' => __( 'Faroese (Faroe Islands)', 'wp-slimstat' ),
319
- 'l-fr' => __( 'French', 'wp-slimstat' ),
320
- 'l-fr-be' => __( 'French (Belgium)', 'wp-slimstat' ),
321
- 'l-fr-ca' => __( 'French (Canada)', 'wp-slimstat' ),
322
- 'l-fr-ch' => __( 'French (Switzerland)', 'wp-slimstat' ),
323
- 'l-fr-fr' => __( 'French (France)', 'wp-slimstat' ),
324
- 'l-fr-lu' => __( 'French (Luxembourg)', 'wp-slimstat' ),
325
- 'l-fr-mc' => __( 'French (Principality of Monaco)', 'wp-slimstat' ),
326
- 'l-gl' => __( 'Galician', 'wp-slimstat' ),
327
- 'l-gl-es' => __( 'Galician (Spain)', 'wp-slimstat' ),
328
- 'l-gu' => __( 'Gujarati', 'wp-slimstat' ),
329
- 'l-gu-in' => __( 'Gujarati (India)', 'wp-slimstat' ),
330
- 'l-he' => __( 'Hebrew', 'wp-slimstat' ),
331
- 'l-he-il' => __( 'Hebrew (Israel)', 'wp-slimstat' ),
332
- 'l-hi' => __( 'Hindi', 'wp-slimstat' ),
333
- 'l-hi-in' => __( 'Hindi (India)', 'wp-slimstat' ),
334
- 'l-hr' => __( 'Croatian', 'wp-slimstat' ),
335
- 'l-hr-ba' => __( 'Croatian (Bosnia and Herzegovina)', 'wp-slimstat' ),
336
- 'l-hr-hr' => __( 'Croatian (Croatia)', 'wp-slimstat' ),
337
- 'l-hu' => __( 'Hungarian', 'wp-slimstat' ),
338
- 'l-hu-hu' => __( 'Hungarian (Hungary)', 'wp-slimstat' ),
339
- 'l-hy' => __( 'Armenian', 'wp-slimstat' ),
340
- 'l-hy-am' => __( 'Armenian (Armenia)', 'wp-slimstat' ),
341
- 'l-id' => __( 'Indonesian', 'wp-slimstat' ),
342
- 'l-id-id' => __( 'Indonesian (Indonesia)', 'wp-slimstat' ),
343
- 'l-is' => __( 'Icelandic', 'wp-slimstat' ),
344
- 'l-is-is' => __( 'Icelandic (Iceland)', 'wp-slimstat' ),
345
- 'l-it' => __( 'Italian', 'wp-slimstat' ),
346
- 'l-it-ch' => __( 'Italian (Switzerland)', 'wp-slimstat' ),
347
- 'l-it-it' => __( 'Italian (Italy)', 'wp-slimstat' ),
348
- 'l-ja' => __( 'Japanese', 'wp-slimstat' ),
349
- 'l-ja-jp' => __( 'Japanese (Japan)', 'wp-slimstat' ),
350
- 'l-ka' => __( 'Georgian', 'wp-slimstat' ),
351
- 'l-ka-ge' => __( 'Georgian (Georgia)', 'wp-slimstat' ),
352
- 'l-kk' => __( 'Kazakh', 'wp-slimstat' ),
353
- 'l-kk-kz' => __( 'Kazakh (Kazakhstan)', 'wp-slimstat' ),
354
- 'l-kn' => __( 'Kannada', 'wp-slimstat' ),
355
- 'l-kn-in' => __( 'Kannada (India)', 'wp-slimstat' ),
356
- 'l-ko' => __( 'Korean', 'wp-slimstat' ),
357
- 'l-ko-kr' => __( 'Korean (Korea)', 'wp-slimstat' ),
358
- 'l-kok' => __( 'Konkani', 'wp-slimstat' ),
359
- 'l-kok-in' => __( 'Konkani (India)', 'wp-slimstat' ),
360
- 'l-ky' => __( 'Kyrgyz', 'wp-slimstat' ),
361
- 'l-ky-kg' => __( 'Kyrgyz (Kyrgyzstan)', 'wp-slimstat' ),
362
- 'l-lt' => __( 'Lithuanian', 'wp-slimstat' ),
363
- 'l-lt-lt' => __( 'Lithuanian (Lithuania)', 'wp-slimstat' ),
364
- 'l-lv' => __( 'Latvian', 'wp-slimstat' ),
365
- 'l-lv-lv' => __( 'Latvian (Latvia)', 'wp-slimstat' ),
366
- 'l-mi' => __( 'Maori', 'wp-slimstat' ),
367
- 'l-mi-nz' => __( 'Maori (New Zealand)', 'wp-slimstat' ),
368
- 'l-mk' => __( 'FYRO Macedonian', 'wp-slimstat' ),
369
- 'l-mk-ml' => __( 'FYRO Macedonian (Former Yugoslav Republic of Macedonia)', 'wp-slimstat' ),
370
- 'l-mn' => __( 'Mongolian', 'wp-slimstat' ),
371
- 'l-mn-mn' => __( 'Mongolian (Mongolia)', 'wp-slimstat' ),
372
- 'l-mr' => __( 'Marathi', 'wp-slimstat' ),
373
- 'l-mr-in' => __( 'Marathi (India)', 'wp-slimstat' ),
374
- 'l-ms' => __( 'Malay', 'wp-slimstat' ),
375
- 'l-ms-bn' => __( 'Malay (Brunei Darussalam)', 'wp-slimstat' ),
376
- 'l-ms-my' => __( 'Malay (Malaysia)', 'wp-slimstat' ),
377
- 'l-mt' => __( 'Maltese', 'wp-slimstat' ),
378
- 'l-mt-mt' => __( 'Maltese (Malta)', 'wp-slimstat' ),
379
- 'l-nb' => __( 'Norwegian (Bokmål)', 'wp-slimstat' ),
380
- 'l-nb-no' => __( 'Norwegian (Bokmål) (Norway)', 'wp-slimstat' ),
381
- 'l-nl' => __( 'Dutch', 'wp-slimstat' ),
382
- 'l-nl-be' => __( 'Dutch (Belgium)', 'wp-slimstat' ),
383
- 'l-nl-nl' => __( 'Dutch (Netherlands)', 'wp-slimstat' ),
384
- 'l-nn-no' => __( 'Norwegian (Nynorsk) (Norway)', 'wp-slimstat' ),
385
- 'l-ns' => __( 'Northern Sotho', 'wp-slimstat' ),
386
- 'l-ns-za' => __( 'Northern Sotho (South Africa)', 'wp-slimstat' ),
387
- 'l-pa' => __( 'Punjabi', 'wp-slimstat' ),
388
- 'l-pa-in' => __( 'Punjabi (India)', 'wp-slimstat' ),
389
- 'l-pl' => __( 'Polish', 'wp-slimstat' ),
390
- 'l-pl-pl' => __( 'Polish (Poland)', 'wp-slimstat' ),
391
- 'l-ps' => __( 'Pashto', 'wp-slimstat' ),
392
- 'l-ps-ar' => __( 'Pashto (Afghanistan)', 'wp-slimstat' ),
393
- 'l-pt' => __( 'Portuguese', 'wp-slimstat' ),
394
- 'l-pt-br' => __( 'Portuguese (Brazil)', 'wp-slimstat' ),
395
- 'l-pt-pt' => __( 'Portuguese (Portugal)', 'wp-slimstat' ),
396
- 'l-qu' => __( 'Quechua', 'wp-slimstat' ),
397
- 'l-qu-bo' => __( 'Quechua (Bolivia)', 'wp-slimstat' ),
398
- 'l-qu-ec' => __( 'Quechua (Ecuador)', 'wp-slimstat' ),
399
- 'l-qu-pe' => __( 'Quechua (Peru)', 'wp-slimstat' ),
400
- 'l-ro' => __( 'Romanian', 'wp-slimstat' ),
401
- 'l-ro-ro' => __( 'Romanian (Romania)', 'wp-slimstat' ),
402
- 'l-ru' => __( 'Russian', 'wp-slimstat' ),
403
- 'l-ru-ru' => __( 'Russian (Russia)', 'wp-slimstat' ),
404
- 'l-sa' => __( 'Sanskrit', 'wp-slimstat' ),
405
- 'l-sa-in' => __( 'Sanskrit (India)', 'wp-slimstat' ),
406
- 'l-se' => __( 'Sami (Northern)', 'wp-slimstat' ),
407
- 'l-se-fi' => __( 'Sami (Northern) (Finland)', 'wp-slimstat' ),
408
- 'l-se-no' => __( 'Sami (Northern) (Norway)', 'wp-slimstat' ),
409
- 'l-se-se' => __( 'Sami (Northern) (Sweden)', 'wp-slimstat' ),
410
- 'l-sk' => __( 'Slovak', 'wp-slimstat' ),
411
- 'l-sk-sk' => __( 'Slovak (Slovakia)', 'wp-slimstat' ),
412
- 'l-sl' => __( 'Slovenian', 'wp-slimstat' ),
413
- 'l-sl-si' => __( 'Slovenian (Slovenia)', 'wp-slimstat' ),
414
- 'l-sq' => __( 'Albanian', 'wp-slimstat' ),
415
- 'l-sq-al' => __( 'Albanian (Albania)', 'wp-slimstat' ),
416
- 'l-sr-ba' => __( 'Serbian (Latin) (Bosnia and Herzegovina)', 'wp-slimstat' ),
417
- 'l-sr-rs' => __( 'Serbian (Serbia and Montenegro)', 'wp-slimstat' ),
418
- 'l-sr-sp' => __( 'Serbian (Latin) (Serbia and Montenegro)', 'wp-slimstat' ),
419
- 'l-sv' => __( 'Swedish', 'wp-slimstat' ),
420
- 'l-sv-fi' => __( 'Swedish (Finland)', 'wp-slimstat' ),
421
- 'l-sv-se' => __( 'Swedish (Sweden)', 'wp-slimstat' ),
422
- 'l-sw' => __( 'Swahili', 'wp-slimstat' ),
423
- 'l-sw-ke' => __( 'Swahili (Kenya)', 'wp-slimstat' ),
424
- 'l-ta' => __( 'Tamil', 'wp-slimstat' ),
425
- 'l-ta-in' => __( 'Tamil (India)', 'wp-slimstat' ),
426
- 'l-te' => __( 'Telugu', 'wp-slimstat' ),
427
- 'l-te-in' => __( 'Telugu (India)', 'wp-slimstat' ),
428
- 'l-th' => __( 'Thai', 'wp-slimstat' ),
429
- 'l-th-th' => __( 'Thai (Thailand)', 'wp-slimstat' ),
430
- 'l-tl' => __( 'Tagalog', 'wp-slimstat' ),
431
- 'l-tl-ph' => __( 'Tagalog (Philippines)', 'wp-slimstat' ),
432
- 'l-tn' => __( 'Tswana', 'wp-slimstat' ),
433
- 'l-tn-za' => __( 'Tswana (South Africa)', 'wp-slimstat' ),
434
- 'l-tr' => __( 'Turkish', 'wp-slimstat' ),
435
- 'l-tr-tr' => __( 'Turkish (Turkey)', 'wp-slimstat' ),
436
- 'l-tt' => __( 'Tatar', 'wp-slimstat' ),
437
- 'l-tt-ru' => __( 'Tatar (Russia)', 'wp-slimstat' ),
438
- 'l-ts' => __( 'Tsonga', 'wp-slimstat' ),
439
- 'l-uk' => __( 'Ukrainian', 'wp-slimstat' ),
440
- 'l-uk-ua' => __( 'Ukrainian (Ukraine)', 'wp-slimstat' ),
441
- 'l-ur' => __( 'Urdu', 'wp-slimstat' ),
442
- 'l-ur-pk' => __( 'Urdu (Islamic Republic of Pakistan)', 'wp-slimstat' ),
443
- 'l-uz' => __( 'Uzbek (Latin)', 'wp-slimstat' ),
444
- 'l-uz-uz' => __( 'Uzbek (Cyrillic) (Uzbekistan)', 'wp-slimstat' ),
445
- 'l-vi' => __( 'Vietnamese', 'wp-slimstat' ),
446
- 'l-vi-vn' => __( 'Vietnamese (Viet Nam)', 'wp-slimstat' ),
447
- 'l-xh' => __( 'Xhosa', 'wp-slimstat' ),
448
- 'l-xh-za' => __( 'Xhosa (South Africa)', 'wp-slimstat' ),
449
- 'l-zh' => __( 'Chinese', 'wp-slimstat' ),
450
- 'l-zh-cn' => __( 'Chinese (S)', 'wp-slimstat' ),
451
- 'l-zh-hk' => __( 'Chinese (Hong Kong)', 'wp-slimstat' ),
452
- 'l-zh-mo' => __( 'Chinese (Macau)', 'wp-slimstat' ),
453
- 'l-zh-sg' => __( 'Chinese (Singapore)', 'wp-slimstat' ),
454
- 'l-zh-tw' => __( 'Chinese (T)', 'wp-slimstat' ),
455
- 'l-zu' => __( 'Zulu', 'wp-slimstat' ),
456
- 'l-zu-za' => __( 'Zulu (South Africa)', 'wp-slimstat' ),
457
- 'l-' => __( 'Unknown', 'wp-slimstat' ),
458
- 'l-empty' => __( 'Unknown', 'wp-slimstat' ),
459
- 'l-xx' => __( 'Unknown', 'wp-slimstat' ),
460
-
461
- // Operating Systems
462
- 'aix' => __( 'IBM AIX', 'wp-slimstat' ),
463
- 'amiga' => __( 'Amiga', 'wp-slimstat' ),
464
- 'android' => __( 'Android', 'wp-slimstat' ),
465
- 'beos' => __( 'BeOS', 'wp-slimstat' ),
466
- 'blackberry os' => __( 'BlackBerry OS', 'wp-slimstat' ),
467
- 'centos' => __( 'CentOS', 'wp-slimstat' ),
468
- 'chromeos' => __( 'ChromeOS', 'wp-slimstat' ),
469
- 'commodore64' => __( 'Commodore 64', 'wp-slimstat' ),
470
- 'cygwin' => __( 'Cygwin', 'wp-slimstat' ),
471
- 'debian' => __( 'Debian', 'wp-slimstat' ),
472
- 'digital unix' => __( 'Digital Unix', 'wp-slimstat' ),
473
- 'fedora' => __( 'Fedora', 'wp-slimstat' ),
474
- 'firefoxos' => __( 'Firefox OS', 'wp-slimstat' ),
475
- 'freebsd' => __( 'FreeBSD', 'wp-slimstat' ),
476
- 'gentoo' => __( 'Gentoo', 'wp-slimstat' ),
477
- 'hp-ux' => __( 'HP-UX', 'wp-slimstat' ),
478
- 'ios' => __( 'iPhone OS', 'wp-slimstat' ),
479
- 'iphone os' => __( 'iPhone OS', 'wp-slimstat' ),
480
- 'iphone osx' => __( 'iPhone OS X', 'wp-slimstat' ),
481
- 'irix' => __( 'SGI / IRIX', 'wp-slimstat' ),
482
- 'java' => __( 'Java', 'wp-slimstat' ),
483
- 'kanotix' => __( 'Kanotix Linux', 'wp-slimstat' ),
484
- 'knoppix' => __( 'Knoppix Linux', 'wp-slimstat' ),
485
- 'linux' => __( 'Linux Generic', 'wp-slimstat' ),
486
- 'mac' => __( 'Mac', 'wp-slimstat' ),
487
- 'mac68k' => __( 'Mac 68k', 'wp-slimstat' ),
488
- 'macos' => __( 'Mac OS X', 'wp-slimstat' ),
489
- 'macosx' => __( 'Mac OS X', 'wp-slimstat' ),
490
- 'macppc' => __( 'Mac PowerPC', 'wp-slimstat' ),
491
- 'mandrake' => __( 'Mandrake Linux', 'wp-slimstat' ),
492
- 'mandriva' => __( 'MS-DOS', 'wp-slimstat' ),
493
- 'mepis' => __( 'MEPIS Linux', 'wp-slimstat' ),
494
- 'ms-dos' => __( 'MS-DOS', 'wp-slimstat' ),
495
- 'netbsd' => __( 'NetBSD', 'wp-slimstat' ),
496
- 'nintendo' => __( 'Nintendo', 'wp-slimstat' ),
497
- 'openbsd' => __( 'OpenBSD', 'wp-slimstat' ),
498
- 'openvms' => __( 'OpenVMS', 'wp-slimstat' ),
499
- 'os/2' => __( 'IBM OS/2', 'wp-slimstat' ),
500
- 'palm' => __( 'Palm OS', 'wp-slimstat' ),
501
- 'palmos' => __( 'Palm OS', 'wp-slimstat' ),
502
- 'pclinuxos' => __( 'PCLinux OS', 'wp-slimstat' ),
503
- 'playstation' => __( 'Playstation', 'wp-slimstat' ),
504
- 'powertv' => __( 'PowerTV', 'wp-slimstat' ),
505
- 'redhat' => __( 'RedHat Linux', 'wp-slimstat' ),
506
- 'rim os' => __( 'Blackberry', 'wp-slimstat' ),
507
- 'risc os' => __( 'Risc OS', 'wp-slimstat' ),
508
- 'slackware' => __( 'Slackware Linux', 'wp-slimstat' ),
509
- 'solaris' => __( 'Solaris', 'wp-slimstat' ),
510
- 'sunos' => __( 'Sun OS', 'wp-slimstat' ),
511
- 'suse' => __( 'SuSE Linux', 'wp-slimstat' ),
512
- 'symbianos' => __( 'Symbian OS', 'wp-slimstat' ),
513
- 'ubuntu' => __( 'Java', 'wp-slimstat' ),
514
- 'unix' => __( 'Unix', 'wp-slimstat' ),
515
- 'unknown' => __( 'Unknown', 'wp-slimstat' ),
516
- 'xandros' => __( 'Xandros Linux', 'wp-slimstat' ),
517
- 'wap' => __( 'WAP', 'wp-slimstat' ),
518
- 'webos' => __( 'WebOS', 'wp-slimstat' ),
519
- 'win10' => __( 'Windows 10', 'wp-slimstat' ),
520
- 'win16' => __( 'Windows 16-bit', 'wp-slimstat' ),
521
- 'win2000' => __( 'Windows 2000', 'wp-slimstat' ),
522
- 'win2003' => __( 'Windows 2003', 'wp-slimstat' ),
523
- 'win31' => __( 'Windows 3.1', 'wp-slimstat' ),
524
- 'win32' => __( 'Windows 32-bit', 'wp-slimstat' ),
525
- 'win7' => __( 'Windows 7', 'wp-slimstat' ),
526
- 'win7' => __( 'Windows 7', 'wp-slimstat' ),
527
- 'win8' => __( 'Windows 8', 'wp-slimstat' ),
528
- 'win8.1' => __( 'Windows 8.1', 'wp-slimstat' ),
529
- 'win95' => __( 'Windows 95', 'wp-slimstat' ),
530
- 'win98' => __( 'Windows 98', 'wp-slimstat' ),
531
- 'wince' => __( 'Windows CE', 'wp-slimstat' ),
532
- 'winme' => __( 'Windows ME', 'wp-slimstat' ),
533
- 'winnt' => __( 'Windows NT', 'wp-slimstat' ),
534
- 'winphone7' => __( 'Windows Phone', 'wp-slimstat' ),
535
- 'winphone7.5' => __( 'Windows Phone', 'wp-slimstat' ),
536
- 'winphone8' => __( 'Windows Phone', 'wp-slimstat' ),
537
- 'winphone8.1' => __( 'Windows RT / Runtime', 'wp-slimstat' ),
538
- 'winrt' => __( 'Windows Phone', 'wp-slimstat' ),
539
- 'winvista' => __( 'Windows Vista', 'wp-slimstat' ),
540
- 'winxp' => __( 'Windows XP', 'wp-slimstat' ),
541
- 'wyderos' => __( 'WyderOS', 'wp-slimstat' ),
542
- 'zaurus' => __( 'Zaurus WAP', 'wp-slimstat' ),
543
-
544
- // Operating System Families
545
- 'p-and' => __( 'Android', 'wp-slimstat' ),
546
- 'p-bla' => __( 'BlackBerry', 'wp-slimstat' ),
547
- 'p-chr' => __( 'Chrome OS', 'wp-slimstat' ),
548
- 'p-fir' => __( 'Fire OS', 'wp-slimstat' ),
549
- 'p-fre' => __( 'Linux FreeBSD', 'wp-slimstat' ),
550
- 'p-ios' => __( 'Apple iOS', 'wp-slimstat' ),
551
- 'p-jav' => __( 'Java-based OS', 'wp-slimstat' ),
552
- 'p-lin' => __( 'Linux', 'wp-slimstat' ),
553
- 'p-mac' => __( 'Apple', 'wp-slimstat' ),
554
- 'p-rim' => __( 'Blackberry', 'wp-slimstat' ),
555
- 'p-sym' => __( 'Symbian OS', 'wp-slimstat' ),
556
- 'p-ubu' => __( 'Linux', 'wp-slimstat' ),
557
- 'p-unk' => __( 'Unknown', 'wp-slimstat' ),
558
- 'p-win' => __( 'Microsoft', 'wp-slimstat' )
559
- );
560
- }
561
-
562
- public static function get_string( $_code = '' ) {
563
- $dynamic_strings = slim_i18n::get_dynamic_strings();
564
-
565
- if ( !isset( $dynamic_strings[ $_code ] ) ) {
566
- return $_code;
567
- }
568
-
569
- return $dynamic_strings[ $_code ];
570
- }
571
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
readme.txt CHANGED
@@ -6,18 +6,16 @@ Text Domain: wp-slimstat
6
  Requires at least: 3.8
7
  Requires PHP: 5.2
8
  Tested up to: 5.2
9
- Stable tag: 4.8.4
10
 
11
  == Description ==
12
- The leading web analytics plugin for WordPress. Track returning customers and registered users, monitor Javascript events, detect intrusions, analyze email campaigns. Thousands of WordPress sites are already using it.
13
-
14
- = Feature Spotlight =
15
  [youtube https://www.youtube.com/watch?v=zEKP9yC8x6g]
 
16
 
17
  = Main features =
18
- * **Real-time access log**: measure server latency, track page events, keep an eye on your bounce rate and much more.
19
  * **Shortcodes**: display reports in widgets or directly in posts and pages.
20
- * **GDPR guidelines**: fully compliant with the European law. You can test your website at [cookiebot.com](https://www.cookiebot.com/en/).
21
  * **Filters**: exclude users from statistics collection based on various criteria, including user roles, common robots, IP subnets, admin pages, country, etc.
22
  * **Export to Excel**: download your reports as CSV files, generate user heatmaps or get daily emails right in your mailbox (via premium add-ons).
23
  * **Cache**: compatible with W3 Total Cache, WP SuperCache, CloudFlare and most caching plugins.
@@ -40,15 +38,13 @@ Try it out, you'll be amazed how good it feels! If you're on a tight budget, and
40
  * At least 40 MB of free web space
41
  * At least 5 MB of free DB space
42
  * At least 32 Mb of free PHP memory for the tracker (peak memory usage)
43
- * IE9+ or any browser supporting HTML5, to access the reports
44
 
45
  == Installation ==
46
  1. In your WordPress admin, go to Plugins > Add New
47
- 2. Search for WP Slimstat Analytics
48
- 3. Click on **Install Now** under WP Slimstat Analytics and then activate the plugin
49
  4. Make sure your template calls `wp_footer()` or the equivalent hook somewhere (possibly just before the `</body>` tag)
50
- 5. Go to Slimstat > Settings > Maintenance tab > MaxMind IP to Country section and click on "Install GeoLite DB" to detect your visitors' countries based on their IP addresses
51
- 6. If your `wp-admin` folder is not publicly accessible, make sure to check our [knowledge base](https://docs.wp-slimstat.com/) to see if there's anything else you need to do
52
 
53
  == Please note ==
54
  * If you decide to uninstall Slimstat Analytics, all the stats will be **PERMANENTLY** deleted from your database. Make sure to setup a database backup (wp_slim_*) to avoid losing your data.
@@ -65,6 +61,14 @@ Our knowledge base is available on our [support center](https://docs.wp-slimstat
65
  5. **Responsive layout** - Keep an eye on your reports on the go
66
 
67
  == Changelog ==
 
 
 
 
 
 
 
 
68
  = 4.8.4 =
69
  * [Note] If you're using any of our premium add-ons, please make sure to update them to the latest version available (see Slimstat > Add-ons) as we've updated some references in our code.
70
  * [Note] We recently received an email from one of our users suggesting that we replace the line charts currently used to display reports over a timeline with **bar charts**, because 'the number of pageviews and IPs are discrete numbers, hence they should also be presented as discrete numbers', according to him. What do you think? Please let us know by [sending us a message](https://support.wp-slimstat.com/) on our support platform. Thank you.
6
  Requires at least: 3.8
7
  Requires PHP: 5.2
8
  Tested up to: 5.2
9
+ Stable tag: 4.8.4.1
10
 
11
  == Description ==
 
 
 
12
  [youtube https://www.youtube.com/watch?v=zEKP9yC8x6g]
13
+ The leading web analytics plugin for WordPress. Track returning customers and registered users, monitor Javascript events, detect intrusions, analyze email campaigns. Thousands of WordPress sites are already using it.
14
 
15
  = Main features =
16
+ * **Real-Time Access Log**: measure server latency, track page events, keep an eye on your bounce rate and much more.
17
  * **Shortcodes**: display reports in widgets or directly in posts and pages.
18
+ * **GDPR**: fully compliant with the GDPR European law. You can test your website at [cookiebot.com](https://www.cookiebot.com/en/).
19
  * **Filters**: exclude users from statistics collection based on various criteria, including user roles, common robots, IP subnets, admin pages, country, etc.
20
  * **Export to Excel**: download your reports as CSV files, generate user heatmaps or get daily emails right in your mailbox (via premium add-ons).
21
  * **Cache**: compatible with W3 Total Cache, WP SuperCache, CloudFlare and most caching plugins.
38
  * At least 40 MB of free web space
39
  * At least 5 MB of free DB space
40
  * At least 32 Mb of free PHP memory for the tracker (peak memory usage)
 
41
 
42
  == Installation ==
43
  1. In your WordPress admin, go to Plugins > Add New
44
+ 2. Search for limstat Analytics
45
+ 3. Click on **Install Now** next to Slimstat Analytics and then activate the plugin
46
  4. Make sure your template calls `wp_footer()` or the equivalent hook somewhere (possibly just before the `</body>` tag)
47
+ 5. If your `wp-admin` folder is not publicly accessible, make sure to check our [knowledge base](https://docs.wp-slimstat.com/) to see if there's anything else you need to do
 
48
 
49
  == Please note ==
50
  * If you decide to uninstall Slimstat Analytics, all the stats will be **PERMANENTLY** deleted from your database. Make sure to setup a database backup (wp_slim_*) to avoid losing your data.
61
  5. **Responsive layout** - Keep an eye on your reports on the go
62
 
63
  == Changelog ==
64
+ = 4.8.4.1 =
65
+ * [Note] As anticipated a few weeks ago, this update drops the information about your visitors' browser plugins, which had been deprecated as not useful and oftentimes unreliable. Please make sure to backup your Slimstat tables if you need to preserve this information for some reason.
66
+ * [Update] We received quite a few messages complaining about our decision to change the default position of the Slimstat menu from the sidebar to the admin bar. We are rolling back this change, and we apologize for any confusion this might have caused.
67
+ * [Update] Added visitor's language to the Activity Log report.
68
+ * [Update] Introduced code optimizations to improve performance when localizing strings related to operating systems, languages, countries, etc.
69
+ * [Fix] Page URLs were not being displayed correctly if the option to display page titles was turned off.
70
+ * [Fix] Not storing empty values in the database: leave as NULL. This will squeeze a few more bytes out of each row stored in the database.
71
+
72
  = 4.8.4 =
73
  * [Note] If you're using any of our premium add-ons, please make sure to update them to the latest version available (see Slimstat > Add-ons) as we've updated some references in our code.
74
  * [Note] We recently received an email from one of our users suggesting that we replace the line charts currently used to display reports over a timeline with **bar charts**, because 'the number of pageviews and IPs are discrete numbers, hence they should also be presented as discrete numbers', according to him. What do you think? Please let us know by [sending us a message](https://support.wp-slimstat.com/) on our support platform. Thank you.
vendor/maxmind.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  class maxmind_geolite2_connector {
4
  public static function get_geolocation_info( $_ip_address = '' ) {
5
- $geo_output = array( 'country' => array( 'iso_code' => 'xx' ) );
6
 
7
  // Is this a RFC1918 (local) IP?
8
  if ( wp_slimstat::is_local_ip_address( $_ip_address ) ) {
2
 
3
  class maxmind_geolite2_connector {
4
  public static function get_geolocation_info( $_ip_address = '' ) {
5
+ $geo_output = array( 'country' => array( 'iso_code' => '' ) );
6
 
7
  // Is this a RFC1918 (local) IP?
8
  if ( wp_slimstat::is_local_ip_address( $_ip_address ) ) {
wp-slimstat.php CHANGED
@@ -3,7 +3,7 @@
3
  Plugin Name: Slimstat Analytics
4
  Plugin URI: https://wordpress.org/plugins/wp-slimstat/
5
  Description: The leading web analytics plugin for WordPress
6
- Version: 4.8.4
7
  Author: Jason Crouse
8
  Author URI: https://www.wp-slimstat.com/
9
  Text Domain: wp-slimstat
@@ -15,7 +15,7 @@ if ( !empty( wp_slimstat::$settings ) ) {
15
  }
16
 
17
  class wp_slimstat {
18
- public static $version = '4.8.4';
19
  public static $settings = array();
20
 
21
  public static $wpdb = '';
@@ -442,11 +442,6 @@ class wp_slimstat {
442
  }
443
  }
444
 
445
- // Don't store empty values in the database
446
- if ( empty( self::$stat[ 'searchterms' ] ) ) {
447
- unset( self::$stat[ 'searchterms' ] );
448
- }
449
-
450
  // Do not track report pages in the admin
451
  if ( ( !empty( self::$stat[ 'resource' ] ) && strpos( self::$stat[ 'resource' ], 'wp-admin/admin-ajax.php' ) !== false ) || ( !empty( $_GET[ 'page' ] ) && strpos( $_GET[ 'page' ], 'slimview' ) !== false ) ) {
452
  self::$stat = array();
@@ -649,9 +644,9 @@ class wp_slimstat {
649
  if ( !empty( self::$stat[ 'notes' ] ) ) {
650
  self::$stat[ 'notes' ] = implode( ';', self::$stat[ 'notes' ] );
651
  }
652
- else {
653
- unset( self::$stat[ 'notes' ] );
654
- }
655
 
656
  // Now let's save this information in the database
657
  self::$stat[ 'id' ] = self::insert_row( self::$stat, $GLOBALS[ 'wpdb' ]->prefix . 'slim_stats' );
@@ -804,7 +799,7 @@ class wp_slimstat {
804
  // Fix some codes, the correct syntax is with minus (-) not underscore (_)
805
  return str_replace( '_', '-', strtolower( $array_languages[ 0 ] ) );
806
  }
807
- return 'xx'; // Indeterminable language
808
  }
809
  // end _get_language
810
 
@@ -886,7 +881,7 @@ class wp_slimstat {
886
  * Returns details about the resource being accessed
887
  */
888
  protected static function _get_content_info(){
889
- $content_info = array( 'content_type' => 'unknown' );
890
 
891
  // Mark 404 pages
892
  if ( is_404() ) {
@@ -1293,7 +1288,7 @@ class wp_slimstat {
1293
  $s = "<span class='slimstat-item-separator'>$s</span>";
1294
 
1295
  // Load the localization files (for languages, operating systems, etc)
1296
- load_plugin_textdomain( 'wp-slimstat', WP_PLUGIN_DIR .'/wp-slimstat/languages', '/wp-slimstat/languages' );
1297
 
1298
  // Look for required fields
1299
  if ( empty( $f ) || empty( $w ) ) {
@@ -1381,9 +1376,6 @@ class wp_slimstat {
1381
  // Format results
1382
  $output = array();
1383
 
1384
- // Load localization strings
1385
- include_once( plugin_dir_path( __FILE__ ) . 'languages/dynamic_strings.php' );
1386
-
1387
  foreach( $results as $result_idx => $a_result ) {
1388
  foreach( $w as $a_column ) {
1389
  $output[ $result_idx ][ $a_column ] = "<span class='col-$a_column'>";
@@ -1534,7 +1526,7 @@ class wp_slimstat {
1534
  'dimension' => array(
1535
  'description' => __( 'This parameter indicates what dimension to return: * (all data), ip, resource, browser, operating system, etc. You can only specify one dimension at a time.', 'wp-slimstat' ),
1536
  'type' => 'string',
1537
- 'enum' => array( '*', 'id', 'ip', 'username', 'email', 'country', 'referer', 'resource', 'searchterms', 'browser', 'platform', 'language', 'resolution', 'content_type', 'content_id', 'outbound_resource' )
1538
  ),
1539
  'filters' => array(
1540
  'description' => __( 'This parameter is used to filter a given dimension (resources, browsers, operating systems, etc) so that it satisfies certain conditions (i.e.: browser contains Chrome). Please make sure to urlencode this value, and to use the usual filter format: browser contains Chrome&&&referer contains slim (encoded: browser%20contains%20Chrome%26%26%26referer%20contains%20slim)', 'wp-slimstat' ),
@@ -1594,7 +1586,7 @@ class wp_slimstat {
1594
 
1595
  // General - WordPress Integration
1596
  'add_dashboard_widgets' => 'on',
1597
- 'use_separate_menu' => 'on',
1598
  'add_posts_column' => 'no',
1599
  'posts_column_pageviews' => 'on',
1600
  'hide_addons' => 'no',
@@ -1835,8 +1827,8 @@ class wp_slimstat {
1835
  // Copy entries to the archive table, if needed
1836
  if ( self::$settings[ 'auto_purge_delete' ] != 'no' ) {
1837
  $is_copy_done = self::$wpdb->query("
1838
- INSERT INTO {$GLOBALS['wpdb']->prefix}slim_stats_archive (id, ip, other_ip, username, email, country, location, city, referer, resource, searchterms, plugins, notes, visit_id, server_latency, page_performance, browser, browser_version, browser_type, platform, language, user_agent, resolution, screen_width, screen_height, content_type, category, author, content_id, outbound_resource, dt_out, dt)
1839
- SELECT id, ip, other_ip, username, email, country, location, city, referer, resource, searchterms, plugins, notes, visit_id, server_latency, page_performance, browser, browser_version, browser_type, platform, language, user_agent, resolution, screen_width, screen_height, content_type, category, author, content_id, outbound_resource, dt_out, dt
1840
  FROM {$GLOBALS[ 'wpdb' ]->prefix}slim_stats
1841
  WHERE dt < $days_ago");
1842
 
@@ -2008,6 +2000,604 @@ class slimstat_widget extends WP_Widget {
2008
  }
2009
  }
2010
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2011
  // Ok, let's go, Sparky!
2012
  if ( function_exists( 'add_action' ) ) {
2013
  // Since we use sendBeacon, this function sends raw POST data, which does not populate the $_POST variable automatically
3
  Plugin Name: Slimstat Analytics
4
  Plugin URI: https://wordpress.org/plugins/wp-slimstat/
5
  Description: The leading web analytics plugin for WordPress
6
+ Version: 4.8.4.1
7
  Author: Jason Crouse
8
  Author URI: https://www.wp-slimstat.com/
9
  Text Domain: wp-slimstat
15
  }
16
 
17
  class wp_slimstat {
18
+ public static $version = '4.8.4.1';
19
  public static $settings = array();
20
 
21
  public static $wpdb = '';
442
  }
443
  }
444
 
 
 
 
 
 
445
  // Do not track report pages in the admin
446
  if ( ( !empty( self::$stat[ 'resource' ] ) && strpos( self::$stat[ 'resource' ], 'wp-admin/admin-ajax.php' ) !== false ) || ( !empty( $_GET[ 'page' ] ) && strpos( $_GET[ 'page' ], 'slimview' ) !== false ) ) {
447
  self::$stat = array();
644
  if ( !empty( self::$stat[ 'notes' ] ) ) {
645
  self::$stat[ 'notes' ] = implode( ';', self::$stat[ 'notes' ] );
646
  }
647
+
648
+ // Remove empty values
649
+ self::$stat = array_filter( self::$stat );
650
 
651
  // Now let's save this information in the database
652
  self::$stat[ 'id' ] = self::insert_row( self::$stat, $GLOBALS[ 'wpdb' ]->prefix . 'slim_stats' );
799
  // Fix some codes, the correct syntax is with minus (-) not underscore (_)
800
  return str_replace( '_', '-', strtolower( $array_languages[ 0 ] ) );
801
  }
802
+ return ''; // Indeterminable language
803
  }
804
  // end _get_language
805
 
881
  * Returns details about the resource being accessed
882
  */
883
  protected static function _get_content_info(){
884
+ $content_info = array( 'content_type' => '' );
885
 
886
  // Mark 404 pages
887
  if ( is_404() ) {
1288
  $s = "<span class='slimstat-item-separator'>$s</span>";
1289
 
1290
  // Load the localization files (for languages, operating systems, etc)
1291
+ load_plugin_textdomain( 'wp-slimstat', false, '/wp-slimstat/languages' );
1292
 
1293
  // Look for required fields
1294
  if ( empty( $f ) || empty( $w ) ) {
1376
  // Format results
1377
  $output = array();
1378
 
 
 
 
1379
  foreach( $results as $result_idx => $a_result ) {
1380
  foreach( $w as $a_column ) {
1381
  $output[ $result_idx ][ $a_column ] = "<span class='col-$a_column'>";
1526
  'dimension' => array(
1527
  'description' => __( 'This parameter indicates what dimension to return: * (all data), ip, resource, browser, operating system, etc. You can only specify one dimension at a time.', 'wp-slimstat' ),
1528
  'type' => 'string',
1529
+ 'enum' => array( '*', 'id', 'ip', 'username', 'email', 'country', 'referer', 'resource', 'searchterms', 'browser', 'platform', 'language', 'resolution', 'content_type', 'content_id', 'tz_offset', 'outbound_resource' )
1530
  ),
1531
  'filters' => array(
1532
  'description' => __( 'This parameter is used to filter a given dimension (resources, browsers, operating systems, etc) so that it satisfies certain conditions (i.e.: browser contains Chrome). Please make sure to urlencode this value, and to use the usual filter format: browser contains Chrome&&&referer contains slim (encoded: browser%20contains%20Chrome%26%26%26referer%20contains%20slim)', 'wp-slimstat' ),
1586
 
1587
  // General - WordPress Integration
1588
  'add_dashboard_widgets' => 'on',
1589
+ 'use_separate_menu' => 'no',
1590
  'add_posts_column' => 'no',
1591
  'posts_column_pageviews' => 'on',
1592
  'hide_addons' => 'no',
1827
  // Copy entries to the archive table, if needed
1828
  if ( self::$settings[ 'auto_purge_delete' ] != 'no' ) {
1829
  $is_copy_done = self::$wpdb->query("
1830
+ INSERT INTO {$GLOBALS['wpdb']->prefix}slim_stats_archive (id, ip, other_ip, username, email, country, location, city, referer, resource, searchterms, notes, visit_id, server_latency, page_performance, browser, browser_version, browser_type, platform, language, fingerprint, user_agent, resolution, screen_width, screen_height, content_type, category, author, content_id, tz_offset, outbound_resource, dt_out, dt)
1831
+ SELECT id, ip, other_ip, username, email, country, location, city, referer, resource, searchterms, notes, visit_id, server_latency, page_performance, browser, browser_version, browser_type, platform, language, fingerprint, user_agent, resolution, screen_width, screen_height, content_type, category, author, content_id, tz_offset, outbound_resource, dt_out, dt
1832
  FROM {$GLOBALS[ 'wpdb' ]->prefix}slim_stats
1833
  WHERE dt < $days_ago");
1834
 
2000
  }
2001
  }
2002
 
2003
+ class slim_i18n {
2004
+ public static $dynamic_strings = array();
2005
+
2006
+ public static function init_dynamic_strings() {
2007
+ if ( false === ( self::$dynamic_strings = get_transient( 'slimstat_dynamic_strings' ) ) ) {
2008
+ self::$dynamic_strings = array(
2009
+ 'xx' => __( 'Unknown', 'wp-slimstat' ),
2010
+
2011
+ // Countries
2012
+ 'c-' => __( 'Unknown', 'wp-slimstat' ),
2013
+ 'c-xx' => __( 'Unknown', 'wp-slimstat' ),
2014
+ 'c-xy' => __( 'Local IP Address', 'wp-slimstat' ),
2015
+
2016
+ 'c-af' => __( 'Afghanistan', 'wp-slimstat' ),
2017
+ 'c-ax' => __( 'Aland Islands', 'wp-slimstat' ),
2018
+ 'c-al' => __( 'Albania', 'wp-slimstat' ),
2019
+ 'c-dz' => __( 'Algeria', 'wp-slimstat' ),
2020
+ 'c-ad' => __( 'Andorra', 'wp-slimstat' ),
2021
+ 'c-ao' => __( 'Angola', 'wp-slimstat' ),
2022
+ 'c-ai' => __( 'Anguilla', 'wp-slimstat' ),
2023
+ 'c-ag' => __( 'Antigua and Barbuda', 'wp-slimstat' ),
2024
+ 'c-ar' => __( 'Argentina', 'wp-slimstat' ),
2025
+ 'c-am' => __( 'Armenia', 'wp-slimstat' ),
2026
+ 'c-aw' => __( 'Aruba', 'wp-slimstat' ),
2027
+ 'c-au' => __( 'Australia', 'wp-slimstat' ),
2028
+ 'c-at' => __( 'Austria', 'wp-slimstat' ),
2029
+ 'c-az' => __( 'Azerbaijan', 'wp-slimstat' ),
2030
+ 'c-bs' => __( 'Bahamas', 'wp-slimstat' ),
2031
+ 'c-bh' => __( 'Bahrain', 'wp-slimstat' ),
2032
+ 'c-bd' => __( 'Bangladesh', 'wp-slimstat' ),
2033
+ 'c-bb' => __( 'Barbados', 'wp-slimstat' ),
2034
+ 'c-by' => __( 'Belarus', 'wp-slimstat' ),
2035
+ 'c-be' => __( 'Belgium', 'wp-slimstat' ),
2036
+ 'c-bz' => __( 'Belize', 'wp-slimstat' ),
2037
+ 'c-bj' => __( 'Benin', 'wp-slimstat' ),
2038
+ 'c-bm' => __( 'Bermuda', 'wp-slimstat' ),
2039
+ 'c-bt' => __( 'Bhutan', 'wp-slimstat' ),
2040
+ 'c-bo' => __( 'Bolivia', 'wp-slimstat' ),
2041
+ 'c-ba' => __( 'Bosnia and Herzegovina', 'wp-slimstat' ),
2042
+ 'c-bw' => __( 'Botswana', 'wp-slimstat' ),
2043
+ 'c-br' => __( 'Brazil', 'wp-slimstat' ),
2044
+ 'c-bn' => __( 'Brunei Darussalam', 'wp-slimstat' ),
2045
+ 'c-bg' => __( 'Bulgaria', 'wp-slimstat' ),
2046
+ 'c-bf' => __( 'Burkina Faso', 'wp-slimstat' ),
2047
+ 'c-bi' => __( 'Burundi', 'wp-slimstat' ),
2048
+ 'c-kh' => __( 'Cambodia', 'wp-slimstat' ),
2049
+ 'c-cm' => __( 'Cameroon', 'wp-slimstat' ),
2050
+ 'c-ca' => __( 'Canada', 'wp-slimstat' ),
2051
+ 'c-cv' => __( 'Cape Verde', 'wp-slimstat' ),
2052
+ 'c-ky' => __( 'Cayman Islands', 'wp-slimstat' ),
2053
+ 'c-cf' => __( 'Central African Republic', 'wp-slimstat' ),
2054
+ 'c-td' => __( 'Chad', 'wp-slimstat' ),
2055
+ 'c-cl' => __( 'Chile', 'wp-slimstat' ),
2056
+ 'c-cn' => __( 'China', 'wp-slimstat' ),
2057
+ 'c-co' => __( 'Colombia', 'wp-slimstat' ),
2058
+ 'c-km' => __( 'Comoros', 'wp-slimstat' ),
2059
+ 'c-cg' => __( 'Congo', 'wp-slimstat' ),
2060
+ 'c-cd' => __( 'The Democratic Republic of the Congo', 'wp-slimstat' ),
2061
+ 'c-cr' => __( 'Costa Rica', 'wp-slimstat' ),
2062
+ 'c-ci' => __( 'Côte d\'Ivoire', 'wp-slimstat' ),
2063
+ 'c-hr' => __( 'Croatia', 'wp-slimstat' ),
2064
+ 'c-cu' => __( 'Cuba', 'wp-slimstat' ),
2065
+ 'c-cy' => __( 'Cyprus', 'wp-slimstat' ),
2066
+ 'c-cz' => __( 'Czech Republic', 'wp-slimstat' ),
2067
+ 'c-dk' => __( 'Denmark', 'wp-slimstat' ),
2068
+ 'c-dj' => __( 'Djibouti', 'wp-slimstat' ),
2069
+ 'c-dm' => __( 'Dominica', 'wp-slimstat' ),
2070
+ 'c-do' => __( 'Dominican Republic', 'wp-slimstat' ),
2071
+ 'c-ec' => __( 'Ecuador', 'wp-slimstat' ),
2072
+ 'c-eg' => __( 'Egypt', 'wp-slimstat' ),
2073
+ 'c-sv' => __( 'El Salvador', 'wp-slimstat' ),
2074
+ 'c-gq' => __( 'Equatorial Guinea', 'wp-slimstat' ),
2075
+ 'c-er' => __( 'Eritrea', 'wp-slimstat' ),
2076
+ 'c-ee' => __( 'Estonia', 'wp-slimstat' ),
2077
+ 'c-et' => __( 'Ethiopia', 'wp-slimstat' ),
2078
+ 'c-fo' => __( 'Faroe Islands', 'wp-slimstat' ),
2079
+ 'c-fk' => __( 'Falkland Islands (Malvinas)', 'wp-slimstat' ),
2080
+ 'c-fj' => __( 'Fiji', 'wp-slimstat' ),
2081
+ 'c-fi' => __( 'Finland', 'wp-slimstat' ),
2082
+ 'c-fr' => __( 'France', 'wp-slimstat' ),
2083
+ 'c-gf' => __( 'French Guiana', 'wp-slimstat' ),
2084
+ 'c-ga' => __( 'Gabon', 'wp-slimstat' ),
2085
+ 'c-gm' => __( 'Gambia', 'wp-slimstat' ),
2086
+ 'c-ge' => __( 'Georgia', 'wp-slimstat' ),
2087
+ 'c-de' => __( 'Germany', 'wp-slimstat' ),
2088
+ 'c-gh' => __( 'Ghana', 'wp-slimstat' ),
2089
+ 'c-gr' => __( 'Greece', 'wp-slimstat' ),
2090
+ 'c-gl' => __( 'Greenland', 'wp-slimstat' ),
2091
+ 'c-gd' => __( 'Grenada', 'wp-slimstat' ),
2092
+ 'c-gp' => __( 'Guadeloupe', 'wp-slimstat' ),
2093
+ 'c-gt' => __( 'Guatemala', 'wp-slimstat' ),
2094
+ 'c-gn' => __( 'Guinea', 'wp-slimstat' ),
2095
+ 'c-gw' => __( 'Guinea-Bissau', 'wp-slimstat' ),
2096
+ 'c-gy' => __( 'Guyana', 'wp-slimstat' ),
2097
+ 'c-ht' => __( 'Haiti', 'wp-slimstat' ),
2098
+ 'c-hn' => __( 'Honduras', 'wp-slimstat' ),
2099
+ 'c-hk' => __( 'Hong Kong', 'wp-slimstat' ),
2100
+ 'c-hu' => __( 'Hungary', 'wp-slimstat' ),
2101
+ 'c-is' => __( 'Iceland', 'wp-slimstat' ),
2102
+ 'c-in' => __( 'India', 'wp-slimstat' ),
2103
+ 'c-id' => __( 'Indonesia', 'wp-slimstat' ),
2104
+ 'c-ir' => __( 'Islamic Republic of Iran', 'wp-slimstat' ),
2105
+ 'c-iq' => __( 'Iraq', 'wp-slimstat' ),
2106
+ 'c-ie' => __( 'Ireland', 'wp-slimstat' ),
2107
+ 'c-il' => __( 'Israel', 'wp-slimstat' ),
2108
+ 'c-it' => __( 'Italy', 'wp-slimstat' ),
2109
+ 'c-jm' => __( 'Jamaica', 'wp-slimstat' ),
2110
+ 'c-jp' => __( 'Japan', 'wp-slimstat' ),
2111
+ 'c-jo' => __( 'Jordan', 'wp-slimstat' ),
2112
+ 'c-kz' => __( 'Kazakhstan', 'wp-slimstat' ),
2113
+ 'c-ke' => __( 'Kenya', 'wp-slimstat' ),
2114
+ 'c-nr' => __( 'Nauru', 'wp-slimstat' ),
2115
+ 'c-kp' => __( 'Democratic People\'s Republic of Korea', 'wp-slimstat' ),
2116
+ 'c-kr' => __( 'Republic of Korea', 'wp-slimstat' ),
2117
+ 'c-kv' => __( 'Kosovo', 'wp-slimstat' ),
2118
+ 'c-kw' => __( 'Kuwait', 'wp-slimstat' ),
2119
+ 'c-kg' => __( 'Kyrgyzstan', 'wp-slimstat' ),
2120
+ 'c-la' => __( 'Lao People\'s Democratic Republic', 'wp-slimstat' ),
2121
+ 'c-lv' => __( 'Latvia', 'wp-slimstat' ),
2122
+ 'c-lb' => __( 'Lebanon', 'wp-slimstat' ),
2123
+ 'c-ls' => __( 'Lesotho', 'wp-slimstat' ),
2124
+ 'c-lr' => __( 'Liberia', 'wp-slimstat' ),
2125
+ 'c-ly' => __( 'Libyan Arab Jamahiriya', 'wp-slimstat' ),
2126
+ 'c-li' => __( 'Liechtenstein', 'wp-slimstat' ),
2127
+ 'c-lt' => __( 'Lithuania', 'wp-slimstat' ),
2128
+ 'c-lu' => __( 'Luxembourg', 'wp-slimstat' ),
2129
+ 'c-mk' => __( 'The Former Yugoslav Republic of Macedonia', 'wp-slimstat' ),
2130
+ 'c-mg' => __( 'Madagascar', 'wp-slimstat' ),
2131
+ 'c-mw' => __( 'Malawi', 'wp-slimstat' ),
2132
+ 'c-my' => __( 'Malaysia', 'wp-slimstat' ),
2133
+ 'c-ml' => __( 'Mali', 'wp-slimstat' ),
2134
+ 'c-mt' => __( 'Malta', 'wp-slimstat' ),
2135
+ 'c-mq' => __( 'Martinique', 'wp-slimstat' ),
2136
+ 'c-mr' => __( 'Mauritania', 'wp-slimstat' ),
2137
+ 'c-mu' => __( 'Mauritius', 'wp-slimstat' ),
2138
+ 'c-mx' => __( 'Mexico', 'wp-slimstat' ),
2139
+ 'c-md' => __( 'Moldova', 'wp-slimstat' ),
2140
+ 'c-mn' => __( 'Mongolia', 'wp-slimstat' ),
2141
+ 'c-me' => __( 'Montenegro', 'wp-slimstat' ),
2142
+ 'c-ms' => __( 'Montserrat', 'wp-slimstat' ),
2143
+ 'c-ma' => __( 'Morocco', 'wp-slimstat' ),
2144
+ 'c-mz' => __( 'Mozambique', 'wp-slimstat' ),
2145
+ 'c-mm' => __( 'Myanmar', 'wp-slimstat' ),
2146
+ 'c-na' => __( 'Namibia', 'wp-slimstat' ),
2147
+ 'c-np' => __( 'Nepal', 'wp-slimstat' ),
2148
+ 'c-nl' => __( 'Netherlands', 'wp-slimstat' ),
2149
+ 'c-nc' => __( 'New Caledonia', 'wp-slimstat' ),
2150
+ 'c-nz' => __( 'New Zealand', 'wp-slimstat' ),
2151
+ 'c-ni' => __( 'Nicaragua', 'wp-slimstat' ),
2152
+ 'c-ne' => __( 'Niger', 'wp-slimstat' ),
2153
+ 'c-ng' => __( 'Nigeria', 'wp-slimstat' ),
2154
+ 'c-no' => __( 'Norway', 'wp-slimstat' ),
2155
+ 'c-om' => __( 'Oman', 'wp-slimstat' ),
2156
+ 'c-pk' => __( 'Pakistan', 'wp-slimstat' ),
2157
+ 'c-pw' => __( 'Palau', 'wp-slimstat' ),
2158
+ 'c-ps' => __( 'Occupied Palestinian Territory', 'wp-slimstat' ),
2159
+ 'c-pa' => __( 'Panama', 'wp-slimstat' ),
2160
+ 'c-pg' => __( 'Papua New Guinea', 'wp-slimstat' ),
2161
+ 'c-py' => __( 'Paraguay', 'wp-slimstat' ),
2162
+ 'c-pe' => __( 'Peru', 'wp-slimstat' ),
2163
+ 'c-ph' => __( 'Philippines', 'wp-slimstat' ),
2164
+ 'c-pl' => __( 'Poland', 'wp-slimstat' ),
2165
+ 'c-pt' => __( 'Portugal', 'wp-slimstat' ),
2166
+ 'c-pr' => __( 'Puerto Rico', 'wp-slimstat' ),
2167
+ 'c-qa' => __( 'Qatar', 'wp-slimstat' ),
2168
+ 'c-re' => __( 'Réunion', 'wp-slimstat' ),
2169
+ 'c-ro' => __( 'Romania', 'wp-slimstat' ),
2170
+ 'c-ru' => __( 'Russian Federation', 'wp-slimstat' ),
2171
+ 'c-rw' => __( 'Rwanda', 'wp-slimstat' ),
2172
+ 'c-kn' => __( 'Saint Kitts and Nevis', 'wp-slimstat' ),
2173
+ 'c-lc' => __( 'Saint Lucia', 'wp-slimstat' ),
2174
+ 'c-mf' => __( 'Saint Martin', 'wp-slimstat' ),
2175
+ 'c-vc' => __( 'Saint Vincent and the Grenadines', 'wp-slimstat' ),
2176
+ 'c-ws' => __( 'Samoa', 'wp-slimstat' ),
2177
+ 'c-st' => __( 'Sao Tome and Principe', 'wp-slimstat' ),
2178
+ 'c-sa' => __( 'Saudi Arabia', 'wp-slimstat' ),
2179
+ 'c-sn' => __( 'Senegal', 'wp-slimstat' ),
2180
+ 'c-rs' => __( 'Serbia', 'wp-slimstat' ),
2181
+ 'c-sl' => __( 'Sierra Leone', 'wp-slimstat' ),
2182
+ 'c-sg' => __( 'Singapore', 'wp-slimstat' ),
2183
+ 'c-sk' => __( 'Slovakia', 'wp-slimstat' ),
2184
+ 'c-si' => __( 'Slovenia', 'wp-slimstat' ),
2185
+ 'c-sb' => __( 'Solomon Islands', 'wp-slimstat' ),
2186
+ 'c-so' => __( 'Somalia', 'wp-slimstat' ),
2187
+ 'c-za' => __( 'South Africa', 'wp-slimstat' ),
2188
+ 'c-gs' => __( 'South Georgia and the South Sandwich Islands', 'wp-slimstat' ),
2189
+ 'c-es' => __( 'Spain', 'wp-slimstat' ),
2190
+ 'c-lk' => __( 'Sri Lanka', 'wp-slimstat' ),
2191
+ 'c-sc' => __( 'Seychelles', 'wp-slimstat' ),
2192
+ 'c-sd' => __( 'Sudan', 'wp-slimstat' ),
2193
+ 'c-ss' => __( 'South Sudan', 'wp-slimstat' ),
2194
+ 'c-sr' => __( 'Suriname', 'wp-slimstat' ),
2195
+ 'c-sj' => __( 'Svalbard and Jan Mayen', 'wp-slimstat' ),
2196
+ 'c-sz' => __( 'Swaziland', 'wp-slimstat' ),
2197
+ 'c-se' => __( 'Sweden', 'wp-slimstat' ),
2198
+ 'c-ch' => __( 'Switzerland', 'wp-slimstat' ),
2199
+ 'c-sy' => __( 'Syrian Arab Republic', 'wp-slimstat' ),
2200
+ 'c-tw' => __( 'Taiwan', 'wp-slimstat' ),
2201
+ 'c-tj' => __( 'Tajikistan', 'wp-slimstat' ),
2202
+ 'c-tz' => __( 'United Republic of Tanzania', 'wp-slimstat' ),
2203
+ 'c-th' => __( 'Thailand', 'wp-slimstat' ),
2204
+ 'c-tl' => __( 'Timor-Leste', 'wp-slimstat' ),
2205
+ 'c-tg' => __( 'Togo', 'wp-slimstat' ),
2206
+ 'c-to' => __( 'Tonga', 'wp-slimstat' ),
2207
+ 'c-tt' => __( 'Trinidad and Tobago', 'wp-slimstat' ),
2208
+ 'c-tn' => __( 'Tunisia', 'wp-slimstat' ),
2209
+ 'c-tr' => __( 'Turkey', 'wp-slimstat' ),
2210
+ 'c-tm' => __( 'Turkmenistan', 'wp-slimstat' ),
2211
+ 'c-tc' => __( 'Turks and Caicos Islands', 'wp-slimstat' ),
2212
+ 'c-ug' => __( 'Uganda', 'wp-slimstat' ),
2213
+ 'c-ua' => __( 'Ukraine', 'wp-slimstat' ),
2214
+ 'c-ae' => __( 'United Arab Emirates', 'wp-slimstat' ),
2215
+ 'c-gb' => __( 'United Kingdom', 'wp-slimstat' ),
2216
+ 'c-us' => __( 'United States', 'wp-slimstat' ),
2217
+ 'c-uy' => __( 'Uruguay', 'wp-slimstat' ),
2218
+ 'c-uz' => __( 'Uzbekistan', 'wp-slimstat' ),
2219
+ 'c-vu' => __( 'Vanuatu', 'wp-slimstat' ),
2220
+ 'c-ve' => __( 'Venezuela', 'wp-slimstat' ),
2221
+ 'c-vn' => __( 'Viet Nam', 'wp-slimstat' ),
2222
+ 'c-vg' => __( 'British Virgin Islands', 'wp-slimstat' ),
2223
+ 'c-vi' => __( 'U.S. Virgin Islands', 'wp-slimstat' ),
2224
+ 'c-eh' => __( 'Western Sahara', 'wp-slimstat' ),
2225
+ 'c-ye' => __( 'Yemen', 'wp-slimstat' ),
2226
+ 'c-zm' => __( 'Zambia', 'wp-slimstat' ),
2227
+ 'c-zw' => __( 'Zimbabwe', 'wp-slimstat' ),
2228
+ 'c-gg' => __( 'Guernsey', 'wp-slimstat' ),
2229
+ 'c-je' => __( 'Jersey', 'wp-slimstat' ),
2230
+ 'c-im' => __( 'Isle of Man', 'wp-slimstat' ),
2231
+ 'c-mv' => __( 'Maldives', 'wp-slimstat' ),
2232
+ 'c-eu' => __( 'Europe', 'wp-slimstat' ),
2233
+
2234
+ // Languages
2235
+ 'l-' => __( 'Unknown', 'wp-slimstat' ),
2236
+ 'l-empty' => __( 'Unknown', 'wp-slimstat' ),
2237
+ 'l-xx' => __( 'Unknown', 'wp-slimstat' ),
2238
+
2239
+ 'l-af' => __( 'Afrikaans', 'wp-slimstat' ),
2240
+ 'l-af-za' => __( 'Afrikaans (South Africa)', 'wp-slimstat' ),
2241
+ 'l-ar' => __( 'Arabic', 'wp-slimstat' ),
2242
+ 'l-ar-ae' => __( 'Arabic (U.A.E.)', 'wp-slimstat' ),
2243
+ 'l-ar-bh' => __( 'Arabic (Bahrain)', 'wp-slimstat' ),
2244
+ 'l-ar-dz' => __( 'Arabic (Algeria)', 'wp-slimstat' ),
2245
+ 'l-ar-eg' => __( 'Arabic (Egypt)', 'wp-slimstat' ),
2246
+ 'l-ar-iq' => __( 'Arabic (Iraq)', 'wp-slimstat' ),
2247
+ 'l-ar-jo' => __( 'Arabic (Jordan)', 'wp-slimstat' ),
2248
+ 'l-ar-kw' => __( 'Arabic (Kuwait)', 'wp-slimstat' ),
2249
+ 'l-ar-lb' => __( 'Arabic (Lebanon)', 'wp-slimstat' ),
2250
+ 'l-ar-ly' => __( 'Arabic (Libya)', 'wp-slimstat' ),
2251
+ 'l-ar-ma' => __( 'Arabic (Morocco)', 'wp-slimstat' ),
2252
+ 'l-ar-om' => __( 'Arabic (Oman)', 'wp-slimstat' ),
2253
+ 'l-ar-qa' => __( 'Arabic (Qatar)', 'wp-slimstat' ),
2254
+ 'l-ar-sa' => __( 'Arabic (Saudi Arabia)', 'wp-slimstat' ),
2255
+ 'l-ar-sy' => __( 'Arabic (Syria)', 'wp-slimstat' ),
2256
+ 'l-ar-tn' => __( 'Arabic (Tunisia)', 'wp-slimstat' ),
2257
+ 'l-ar-ye' => __( 'Arabic (Yemen)', 'wp-slimstat' ),
2258
+ 'l-az' => __( 'Azeri (Latin)', 'wp-slimstat' ),
2259
+ 'l-az-az' => __( 'Azeri (Latin) (Azerbaijan)', 'wp-slimstat' ),
2260
+ 'l-be' => __( 'Belarusian', 'wp-slimstat' ),
2261
+ 'l-be-by' => __( 'Belarusian (Belarus)', 'wp-slimstat' ),
2262
+ 'l-bg' => __( 'Bulgarian', 'wp-slimstat' ),
2263
+ 'l-bg-bg' => __( 'Bulgarian (Bulgaria)', 'wp-slimstat' ),
2264
+ 'l-bs-ba' => __( 'Bosnian (Bosnia and Herzegovina)', 'wp-slimstat' ),
2265
+ 'l-ca' => __( 'Catalan', 'wp-slimstat' ),
2266
+ 'l-ca-es' => __( 'Catalan (Spain)', 'wp-slimstat' ),
2267
+ 'l-cs' => __( 'Czech', 'wp-slimstat' ),
2268
+ 'l-cs-cz' => __( 'Czech (Czech Republic)', 'wp-slimstat' ),
2269
+ 'l-cy' => __( 'Welsh', 'wp-slimstat' ),
2270
+ 'l-cy-gb' => __( 'Welsh (United Kingdom)', 'wp-slimstat' ),
2271
+ 'l-da' => __( 'Danish', 'wp-slimstat' ),
2272
+ 'l-da-dk' => __( 'Danish (Denmark)', 'wp-slimstat' ),
2273
+ 'l-de' => __( 'German', 'wp-slimstat' ),
2274
+ 'l-de-at' => __( 'German (Austria)', 'wp-slimstat' ),
2275
+ 'l-de-ch' => __( 'German (Switzerland)', 'wp-slimstat' ),
2276
+ 'l-de-de' => __( 'German (Germany)', 'wp-slimstat' ),
2277
+ 'l-de-li' => __( 'German (Liechtenstein)', 'wp-slimstat' ),
2278
+ 'l-de-lu' => __( 'German (Luxembourg)', 'wp-slimstat' ),
2279
+ 'l-dv' => __( 'Divehi', 'wp-slimstat' ),
2280
+ 'l-dv-mv' => __( 'Divehi (Maldives)', 'wp-slimstat' ),
2281
+ 'l-el' => __( 'Greek', 'wp-slimstat' ),
2282
+ 'l-el-gr' => __( 'Greek (Greece)', 'wp-slimstat' ),
2283
+ 'l-en' => __( 'English', 'wp-slimstat' ),
2284
+ 'l-en-au' => __( 'English (Australia)', 'wp-slimstat' ),
2285
+ 'l-en-bz' => __( 'English (Belize)', 'wp-slimstat' ),
2286
+ 'l-en-ca' => __( 'English (Canada)', 'wp-slimstat' ),
2287
+ 'l-en-cb' => __( 'English (Caribbean)', 'wp-slimstat' ),
2288
+ 'l-en-gb' => __( 'English (United Kingdom)', 'wp-slimstat' ),
2289
+ 'l-en-ie' => __( 'English (Ireland)', 'wp-slimstat' ),
2290
+ 'l-en-jm' => __( 'English (Jamaica)', 'wp-slimstat' ),
2291
+ 'l-en-nz' => __( 'English (New Zealand)', 'wp-slimstat' ),
2292
+ 'l-en-ph' => __( 'English (Republic of the Philippines)', 'wp-slimstat' ),
2293
+ 'l-en-tt' => __( 'English (Trinidad and Tobago)', 'wp-slimstat' ),
2294
+ 'l-en-us' => __( 'English (United States)', 'wp-slimstat' ),
2295
+ 'l-en-za' => __( 'English (South Africa)', 'wp-slimstat' ),
2296
+ 'l-en-zw' => __( 'English (Zimbabwe)', 'wp-slimstat' ),
2297
+ 'l-eo' => __( 'Esperanto', 'wp-slimstat' ),
2298
+ 'l-es' => __( 'Spanish', 'wp-slimstat' ),
2299
+ 'l-es-ar' => __( 'Spanish (Argentina)', 'wp-slimstat' ),
2300
+ 'l-es-bo' => __( 'Spanish (Bolivia)', 'wp-slimstat' ),
2301
+ 'l-es-cl' => __( 'Spanish (Chile)', 'wp-slimstat' ),
2302
+ 'l-es-co' => __( 'Spanish (Colombia)', 'wp-slimstat' ),
2303
+ 'l-es-cr' => __( 'Spanish (Costa Rica)', 'wp-slimstat' ),
2304
+ 'l-es-do' => __( 'Spanish (Dominican Republic)', 'wp-slimstat' ),
2305
+ 'l-es-ec' => __( 'Spanish (Ecuador)', 'wp-slimstat' ),
2306
+ 'l-es-es' => __( 'Spanish (Spain)', 'wp-slimstat' ),
2307
+ 'l-es-gt' => __( 'Spanish (Guatemala)', 'wp-slimstat' ),
2308
+ 'l-es-hn' => __( 'Spanish (Honduras)', 'wp-slimstat' ),
2309
+ 'l-es-mx' => __( 'Spanish (Mexico)', 'wp-slimstat' ),
2310
+ 'l-es-ni' => __( 'Spanish (Nicaragua)', 'wp-slimstat' ),
2311
+ 'l-es-pa' => __( 'Spanish (Panama)', 'wp-slimstat' ),
2312
+ 'l-es-pe' => __( 'Spanish (Peru)', 'wp-slimstat' ),
2313
+ 'l-es-pr' => __( 'Spanish (Puerto Rico)', 'wp-slimstat' ),
2314
+ 'l-es-py' => __( 'Spanish (Paraguay)', 'wp-slimstat' ),
2315
+ 'l-es-sv' => __( 'Spanish (El Salvador)', 'wp-slimstat' ),
2316
+ 'l-es-uy' => __( 'Spanish (Uruguay)', 'wp-slimstat' ),
2317
+ 'l-es-ve' => __( 'Spanish (Venezuela)', 'wp-slimstat' ),
2318
+ 'l-et' => __( 'Estonian', 'wp-slimstat' ),
2319
+ 'l-et-ee' => __( 'Estonian (Estonia)', 'wp-slimstat' ),
2320
+ 'l-eu' => __( 'Basque', 'wp-slimstat' ),
2321
+ 'l-eu-es' => __( 'Basque (Spain)', 'wp-slimstat' ),
2322
+ 'l-fa' => __( 'Farsi', 'wp-slimstat' ),
2323
+ 'l-fa-ir' => __( 'Farsi (Iran)', 'wp-slimstat' ),
2324
+ 'l-fi' => __( 'Finnish', 'wp-slimstat' ),
2325
+ 'l-fi-fi' => __( 'Finnish (Finland)', 'wp-slimstat' ),
2326
+ 'l-fo' => __( 'Faroese', 'wp-slimstat' ),
2327
+ 'l-fo-fo' => __( 'Faroese (Faroe Islands)', 'wp-slimstat' ),
2328
+ 'l-fr' => __( 'French', 'wp-slimstat' ),
2329
+ 'l-fr-be' => __( 'French (Belgium)', 'wp-slimstat' ),
2330
+ 'l-fr-ca' => __( 'French (Canada)', 'wp-slimstat' ),
2331
+ 'l-fr-ch' => __( 'French (Switzerland)', 'wp-slimstat' ),
2332
+ 'l-fr-fr' => __( 'French (France)', 'wp-slimstat' ),
2333
+ 'l-fr-lu' => __( 'French (Luxembourg)', 'wp-slimstat' ),
2334
+ 'l-fr-mc' => __( 'French (Principality of Monaco)', 'wp-slimstat' ),
2335
+ 'l-gl' => __( 'Galician', 'wp-slimstat' ),
2336
+ 'l-gl-es' => __( 'Galician (Spain)', 'wp-slimstat' ),
2337
+ 'l-gu' => __( 'Gujarati', 'wp-slimstat' ),
2338
+ 'l-gu-in' => __( 'Gujarati (India)', 'wp-slimstat' ),
2339
+ 'l-he' => __( 'Hebrew', 'wp-slimstat' ),
2340
+ 'l-he-il' => __( 'Hebrew (Israel)', 'wp-slimstat' ),
2341
+ 'l-hi' => __( 'Hindi', 'wp-slimstat' ),
2342
+ 'l-hi-in' => __( 'Hindi (India)', 'wp-slimstat' ),
2343
+ 'l-hr' => __( 'Croatian', 'wp-slimstat' ),
2344
+ 'l-hr-ba' => __( 'Croatian (Bosnia and Herzegovina)', 'wp-slimstat' ),
2345
+ 'l-hr-hr' => __( 'Croatian (Croatia)', 'wp-slimstat' ),
2346
+ 'l-hu' => __( 'Hungarian', 'wp-slimstat' ),
2347
+ 'l-hu-hu' => __( 'Hungarian (Hungary)', 'wp-slimstat' ),
2348
+ 'l-hy' => __( 'Armenian', 'wp-slimstat' ),
2349
+ 'l-hy-am' => __( 'Armenian (Armenia)', 'wp-slimstat' ),
2350
+ 'l-id' => __( 'Indonesian', 'wp-slimstat' ),
2351
+ 'l-id-id' => __( 'Indonesian (Indonesia)', 'wp-slimstat' ),
2352
+ 'l-is' => __( 'Icelandic', 'wp-slimstat' ),
2353
+ 'l-is-is' => __( 'Icelandic (Iceland)', 'wp-slimstat' ),
2354
+ 'l-it' => __( 'Italian', 'wp-slimstat' ),
2355
+ 'l-it-ch' => __( 'Italian (Switzerland)', 'wp-slimstat' ),
2356
+ 'l-it-it' => __( 'Italian (Italy)', 'wp-slimstat' ),
2357
+ 'l-ja' => __( 'Japanese', 'wp-slimstat' ),
2358
+ 'l-ja-jp' => __( 'Japanese (Japan)', 'wp-slimstat' ),
2359
+ 'l-ka' => __( 'Georgian', 'wp-slimstat' ),
2360
+ 'l-ka-ge' => __( 'Georgian (Georgia)', 'wp-slimstat' ),
2361
+ 'l-kk' => __( 'Kazakh', 'wp-slimstat' ),
2362
+ 'l-kk-kz' => __( 'Kazakh (Kazakhstan)', 'wp-slimstat' ),
2363
+ 'l-kn' => __( 'Kannada', 'wp-slimstat' ),
2364
+ 'l-kn-in' => __( 'Kannada (India)', 'wp-slimstat' ),
2365
+ 'l-ko' => __( 'Korean', 'wp-slimstat' ),
2366
+ 'l-ko-kr' => __( 'Korean (Korea)', 'wp-slimstat' ),
2367
+ 'l-kok' => __( 'Konkani', 'wp-slimstat' ),
2368
+ 'l-kok-in' => __( 'Konkani (India)', 'wp-slimstat' ),
2369
+ 'l-ky' => __( 'Kyrgyz', 'wp-slimstat' ),
2370
+ 'l-ky-kg' => __( 'Kyrgyz (Kyrgyzstan)', 'wp-slimstat' ),
2371
+ 'l-lt' => __( 'Lithuanian', 'wp-slimstat' ),
2372
+ 'l-lt-lt' => __( 'Lithuanian (Lithuania)', 'wp-slimstat' ),
2373
+ 'l-lv' => __( 'Latvian', 'wp-slimstat' ),
2374
+ 'l-lv-lv' => __( 'Latvian (Latvia)', 'wp-slimstat' ),
2375
+ 'l-mi' => __( 'Maori', 'wp-slimstat' ),
2376
+ 'l-mi-nz' => __( 'Maori (New Zealand)', 'wp-slimstat' ),
2377
+ 'l-mk' => __( 'FYRO Macedonian', 'wp-slimstat' ),
2378
+ 'l-mk-ml' => __( 'FYRO Macedonian (Former Yugoslav Republic of Macedonia)', 'wp-slimstat' ),
2379
+ 'l-mn' => __( 'Mongolian', 'wp-slimstat' ),
2380
+ 'l-mn-mn' => __( 'Mongolian (Mongolia)', 'wp-slimstat' ),
2381
+ 'l-mr' => __( 'Marathi', 'wp-slimstat' ),
2382
+ 'l-mr-in' => __( 'Marathi (India)', 'wp-slimstat' ),
2383
+ 'l-ms' => __( 'Malay', 'wp-slimstat' ),
2384
+ 'l-ms-bn' => __( 'Malay (Brunei Darussalam)', 'wp-slimstat' ),
2385
+ 'l-ms-my' => __( 'Malay (Malaysia)', 'wp-slimstat' ),
2386
+ 'l-mt' => __( 'Maltese', 'wp-slimstat' ),
2387
+ 'l-mt-mt' => __( 'Maltese (Malta)', 'wp-slimstat' ),
2388
+ 'l-nb' => __( 'Norwegian (Bokmål)', 'wp-slimstat' ),
2389
+ 'l-nb-no' => __( 'Norwegian (Bokmål) (Norway)', 'wp-slimstat' ),
2390
+ 'l-nl' => __( 'Dutch', 'wp-slimstat' ),
2391
+ 'l-nl-be' => __( 'Dutch (Belgium)', 'wp-slimstat' ),
2392
+ 'l-nl-nl' => __( 'Dutch (Netherlands)', 'wp-slimstat' ),
2393
+ 'l-nn-no' => __( 'Norwegian (Nynorsk) (Norway)', 'wp-slimstat' ),
2394
+ 'l-ns' => __( 'Northern Sotho', 'wp-slimstat' ),
2395
+ 'l-ns-za' => __( 'Northern Sotho (South Africa)', 'wp-slimstat' ),
2396
+ 'l-pa' => __( 'Punjabi', 'wp-slimstat' ),
2397
+ 'l-pa-in' => __( 'Punjabi (India)', 'wp-slimstat' ),
2398
+ 'l-pl' => __( 'Polish', 'wp-slimstat' ),
2399
+ 'l-pl-pl' => __( 'Polish (Poland)', 'wp-slimstat' ),
2400
+ 'l-ps' => __( 'Pashto', 'wp-slimstat' ),
2401
+ 'l-ps-ar' => __( 'Pashto (Afghanistan)', 'wp-slimstat' ),
2402
+ 'l-pt' => __( 'Portuguese', 'wp-slimstat' ),
2403
+ 'l-pt-br' => __( 'Portuguese (Brazil)', 'wp-slimstat' ),
2404
+ 'l-pt-pt' => __( 'Portuguese (Portugal)', 'wp-slimstat' ),
2405
+ 'l-qu' => __( 'Quechua', 'wp-slimstat' ),
2406
+ 'l-qu-bo' => __( 'Quechua (Bolivia)', 'wp-slimstat' ),
2407
+ 'l-qu-ec' => __( 'Quechua (Ecuador)', 'wp-slimstat' ),
2408
+ 'l-qu-pe' => __( 'Quechua (Peru)', 'wp-slimstat' ),
2409
+ 'l-ro' => __( 'Romanian', 'wp-slimstat' ),
2410
+ 'l-ro-ro' => __( 'Romanian (Romania)', 'wp-slimstat' ),
2411
+ 'l-ru' => __( 'Russian', 'wp-slimstat' ),
2412
+ 'l-ru-ru' => __( 'Russian (Russia)', 'wp-slimstat' ),
2413
+ 'l-sa' => __( 'Sanskrit', 'wp-slimstat' ),
2414
+ 'l-sa-in' => __( 'Sanskrit (India)', 'wp-slimstat' ),
2415
+ 'l-se' => __( 'Sami (Northern)', 'wp-slimstat' ),
2416
+ 'l-se-fi' => __( 'Sami (Northern) (Finland)', 'wp-slimstat' ),
2417
+ 'l-se-no' => __( 'Sami (Northern) (Norway)', 'wp-slimstat' ),
2418
+ 'l-se-se' => __( 'Sami (Northern) (Sweden)', 'wp-slimstat' ),
2419
+ 'l-sk' => __( 'Slovak', 'wp-slimstat' ),
2420
+ 'l-sk-sk' => __( 'Slovak (Slovakia)', 'wp-slimstat' ),
2421
+ 'l-sl' => __( 'Slovenian', 'wp-slimstat' ),
2422
+ 'l-sl-si' => __( 'Slovenian (Slovenia)', 'wp-slimstat' ),
2423
+ 'l-sq' => __( 'Albanian', 'wp-slimstat' ),
2424
+ 'l-sq-al' => __( 'Albanian (Albania)', 'wp-slimstat' ),
2425
+ 'l-sr-ba' => __( 'Serbian (Latin) (Bosnia and Herzegovina)', 'wp-slimstat' ),
2426
+ 'l-sr-rs' => __( 'Serbian (Serbia and Montenegro)', 'wp-slimstat' ),
2427
+ 'l-sr-sp' => __( 'Serbian (Latin) (Serbia and Montenegro)', 'wp-slimstat' ),
2428
+ 'l-sv' => __( 'Swedish', 'wp-slimstat' ),
2429
+ 'l-sv-fi' => __( 'Swedish (Finland)', 'wp-slimstat' ),
2430
+ 'l-sv-se' => __( 'Swedish (Sweden)', 'wp-slimstat' ),
2431
+ 'l-sw' => __( 'Swahili', 'wp-slimstat' ),
2432
+ 'l-sw-ke' => __( 'Swahili (Kenya)', 'wp-slimstat' ),
2433
+ 'l-ta' => __( 'Tamil', 'wp-slimstat' ),
2434
+ 'l-ta-in' => __( 'Tamil (India)', 'wp-slimstat' ),
2435
+ 'l-te' => __( 'Telugu', 'wp-slimstat' ),
2436
+ 'l-te-in' => __( 'Telugu (India)', 'wp-slimstat' ),
2437
+ 'l-th' => __( 'Thai', 'wp-slimstat' ),
2438
+ 'l-th-th' => __( 'Thai (Thailand)', 'wp-slimstat' ),
2439
+ 'l-tl' => __( 'Tagalog', 'wp-slimstat' ),
2440
+ 'l-tl-ph' => __( 'Tagalog (Philippines)', 'wp-slimstat' ),
2441
+ 'l-tn' => __( 'Tswana', 'wp-slimstat' ),
2442
+ 'l-tn-za' => __( 'Tswana (South Africa)', 'wp-slimstat' ),
2443
+ 'l-tr' => __( 'Turkish', 'wp-slimstat' ),
2444
+ 'l-tr-tr' => __( 'Turkish (Turkey)', 'wp-slimstat' ),
2445
+ 'l-tt' => __( 'Tatar', 'wp-slimstat' ),
2446
+ 'l-tt-ru' => __( 'Tatar (Russia)', 'wp-slimstat' ),
2447
+ 'l-ts' => __( 'Tsonga', 'wp-slimstat' ),
2448
+ 'l-uk' => __( 'Ukrainian', 'wp-slimstat' ),
2449
+ 'l-uk-ua' => __( 'Ukrainian (Ukraine)', 'wp-slimstat' ),
2450
+ 'l-ur' => __( 'Urdu', 'wp-slimstat' ),
2451
+ 'l-ur-pk' => __( 'Urdu (Islamic Republic of Pakistan)', 'wp-slimstat' ),
2452
+ 'l-uz' => __( 'Uzbek (Latin)', 'wp-slimstat' ),
2453
+ 'l-uz-uz' => __( 'Uzbek (Cyrillic) (Uzbekistan)', 'wp-slimstat' ),
2454
+ 'l-vi' => __( 'Vietnamese', 'wp-slimstat' ),
2455
+ 'l-vi-vn' => __( 'Vietnamese (Viet Nam)', 'wp-slimstat' ),
2456
+ 'l-xh' => __( 'Xhosa', 'wp-slimstat' ),
2457
+ 'l-xh-za' => __( 'Xhosa (South Africa)', 'wp-slimstat' ),
2458
+ 'l-zh' => __( 'Chinese', 'wp-slimstat' ),
2459
+ 'l-zh-cn' => __( 'Chinese (S)', 'wp-slimstat' ),
2460
+ 'l-zh-hk' => __( 'Chinese (Hong Kong)', 'wp-slimstat' ),
2461
+ 'l-zh-mo' => __( 'Chinese (Macau)', 'wp-slimstat' ),
2462
+ 'l-zh-sg' => __( 'Chinese (Singapore)', 'wp-slimstat' ),
2463
+ 'l-zh-tw' => __( 'Chinese (T)', 'wp-slimstat' ),
2464
+ 'l-zu' => __( 'Zulu', 'wp-slimstat' ),
2465
+ 'l-zu-za' => __( 'Zulu (South Africa)', 'wp-slimstat' ),
2466
+
2467
+ // Operating Systems
2468
+ 'aix' => __( 'IBM AIX', 'wp-slimstat' ),
2469
+ 'amiga' => __( 'Amiga', 'wp-slimstat' ),
2470
+ 'android' => __( 'Android', 'wp-slimstat' ),
2471
+ 'beos' => __( 'BeOS', 'wp-slimstat' ),
2472
+ 'blackberry os' => __( 'BlackBerry OS', 'wp-slimstat' ),
2473
+ 'centos' => __( 'CentOS', 'wp-slimstat' ),
2474
+ 'chromeos' => __( 'ChromeOS', 'wp-slimstat' ),
2475
+ 'commodore64' => __( 'Commodore 64', 'wp-slimstat' ),
2476
+ 'cygwin' => __( 'Cygwin', 'wp-slimstat' ),
2477
+ 'debian' => __( 'Debian', 'wp-slimstat' ),
2478
+ 'digital unix' => __( 'Digital Unix', 'wp-slimstat' ),
2479
+ 'fedora' => __( 'Fedora', 'wp-slimstat' ),
2480
+ 'firefoxos' => __( 'Firefox OS', 'wp-slimstat' ),
2481
+ 'freebsd' => __( 'FreeBSD', 'wp-slimstat' ),
2482
+ 'gentoo' => __( 'Gentoo', 'wp-slimstat' ),
2483
+ 'hp-ux' => __( 'HP-UX', 'wp-slimstat' ),
2484
+ 'ios' => __( 'iPhone OS', 'wp-slimstat' ),
2485
+ 'iphone os' => __( 'iPhone OS', 'wp-slimstat' ),
2486
+ 'iphone osx' => __( 'iPhone OS X', 'wp-slimstat' ),
2487
+ 'irix' => __( 'SGI / IRIX', 'wp-slimstat' ),
2488
+ 'java' => __( 'Java', 'wp-slimstat' ),
2489
+ 'kanotix' => __( 'Kanotix Linux', 'wp-slimstat' ),
2490
+ 'knoppix' => __( 'Knoppix Linux', 'wp-slimstat' ),
2491
+ 'linux' => __( 'Linux Generic', 'wp-slimstat' ),
2492
+ 'mac' => __( 'Mac', 'wp-slimstat' ),
2493
+ 'mac68k' => __( 'Mac 68k', 'wp-slimstat' ),
2494
+ 'macos' => __( 'Mac OS X', 'wp-slimstat' ),
2495
+ 'macosx' => __( 'Mac OS X', 'wp-slimstat' ),
2496
+ 'macppc' => __( 'Mac PowerPC', 'wp-slimstat' ),
2497
+ 'mandrake' => __( 'Mandrake Linux', 'wp-slimstat' ),
2498
+ 'mandriva' => __( 'MS-DOS', 'wp-slimstat' ),
2499
+ 'mepis' => __( 'MEPIS Linux', 'wp-slimstat' ),
2500
+ 'ms-dos' => __( 'MS-DOS', 'wp-slimstat' ),
2501
+ 'netbsd' => __( 'NetBSD', 'wp-slimstat' ),
2502
+ 'nintendo' => __( 'Nintendo', 'wp-slimstat' ),
2503
+ 'openbsd' => __( 'OpenBSD', 'wp-slimstat' ),
2504
+ 'openvms' => __( 'OpenVMS', 'wp-slimstat' ),
2505
+ 'os/2' => __( 'IBM OS/2', 'wp-slimstat' ),
2506
+ 'palm' => __( 'Palm OS', 'wp-slimstat' ),
2507
+ 'palmos' => __( 'Palm OS', 'wp-slimstat' ),
2508
+ 'pclinuxos' => __( 'PCLinux OS', 'wp-slimstat' ),
2509
+ 'playstation' => __( 'Playstation', 'wp-slimstat' ),
2510
+ 'powertv' => __( 'PowerTV', 'wp-slimstat' ),
2511
+ 'redhat' => __( 'RedHat Linux', 'wp-slimstat' ),
2512
+ 'rim os' => __( 'Blackberry', 'wp-slimstat' ),
2513
+ 'risc os' => __( 'Risc OS', 'wp-slimstat' ),
2514
+ 'slackware' => __( 'Slackware Linux', 'wp-slimstat' ),
2515
+ 'solaris' => __( 'Solaris', 'wp-slimstat' ),
2516
+ 'sunos' => __( 'Sun OS', 'wp-slimstat' ),
2517
+ 'suse' => __( 'SuSE Linux', 'wp-slimstat' ),
2518
+ 'symbianos' => __( 'Symbian OS', 'wp-slimstat' ),
2519
+ 'ubuntu' => __( 'Java', 'wp-slimstat' ),
2520
+ 'unix' => __( 'Unix', 'wp-slimstat' ),
2521
+ 'unknown' => __( 'Unknown', 'wp-slimstat' ),
2522
+ 'xandros' => __( 'Xandros Linux', 'wp-slimstat' ),
2523
+ 'wap' => __( 'WAP', 'wp-slimstat' ),
2524
+ 'webos' => __( 'WebOS', 'wp-slimstat' ),
2525
+ 'win10' => __( 'Windows 10', 'wp-slimstat' ),
2526
+ 'win16' => __( 'Windows 16-bit', 'wp-slimstat' ),
2527
+ 'win2000' => __( 'Windows 2000', 'wp-slimstat' ),
2528
+ 'win2003' => __( 'Windows 2003', 'wp-slimstat' ),
2529
+ 'win31' => __( 'Windows 3.1', 'wp-slimstat' ),
2530
+ 'win32' => __( 'Windows 32-bit', 'wp-slimstat' ),
2531
+ 'win7' => __( 'Windows 7', 'wp-slimstat' ),
2532
+ 'win7' => __( 'Windows 7', 'wp-slimstat' ),
2533
+ 'win8' => __( 'Windows 8', 'wp-slimstat' ),
2534
+ 'win8.1' => __( 'Windows 8.1', 'wp-slimstat' ),
2535
+ 'win95' => __( 'Windows 95', 'wp-slimstat' ),
2536
+ 'win98' => __( 'Windows 98', 'wp-slimstat' ),
2537
+ 'wince' => __( 'Windows CE', 'wp-slimstat' ),
2538
+ 'winme' => __( 'Windows ME', 'wp-slimstat' ),
2539
+ 'winnt' => __( 'Windows NT', 'wp-slimstat' ),
2540
+ 'winphone7' => __( 'Windows Phone', 'wp-slimstat' ),
2541
+ 'winphone7.5' => __( 'Windows Phone', 'wp-slimstat' ),
2542
+ 'winphone8' => __( 'Windows Phone', 'wp-slimstat' ),
2543
+ 'winphone8.1' => __( 'Windows RT / Runtime', 'wp-slimstat' ),
2544
+ 'winrt' => __( 'Windows Phone', 'wp-slimstat' ),
2545
+ 'winvista' => __( 'Windows Vista', 'wp-slimstat' ),
2546
+ 'winxp' => __( 'Windows XP', 'wp-slimstat' ),
2547
+ 'wyderos' => __( 'WyderOS', 'wp-slimstat' ),
2548
+ 'zaurus' => __( 'Zaurus WAP', 'wp-slimstat' ),
2549
+
2550
+ // Operating System Families
2551
+ 'p-unk' => __( 'Unknown', 'wp-slimstat' ),
2552
+ 'p-' => __( 'Unknown', 'wp-slimstat' ),
2553
+
2554
+ 'p-and' => __( 'Android', 'wp-slimstat' ),
2555
+ 'p-bla' => __( 'BlackBerry', 'wp-slimstat' ),
2556
+ 'p-chr' => __( 'Chrome OS', 'wp-slimstat' ),
2557
+ 'p-fir' => __( 'Fire OS', 'wp-slimstat' ),
2558
+ 'p-fre' => __( 'Linux FreeBSD', 'wp-slimstat' ),
2559
+ 'p-ios' => __( 'Apple iOS', 'wp-slimstat' ),
2560
+ 'p-jav' => __( 'Java-based OS', 'wp-slimstat' ),
2561
+ 'p-lin' => __( 'Linux', 'wp-slimstat' ),
2562
+ 'p-mac' => __( 'Apple', 'wp-slimstat' ),
2563
+ 'p-rim' => __( 'Blackberry', 'wp-slimstat' ),
2564
+ 'p-sym' => __( 'Symbian OS', 'wp-slimstat' ),
2565
+ 'p-ubu' => __( 'Linux', 'wp-slimstat' ),
2566
+ 'p-win' => __( 'Microsoft', 'wp-slimstat' )
2567
+ );
2568
+
2569
+ // set_transient( 'slimstat_dynamic_strings', self::$dynamic_strings, 86400 );
2570
+ }
2571
+ }
2572
+
2573
+ public static function get_country_codes() {
2574
+ if ( empty( self::$dynamic_strings ) ) {
2575
+ self::init_dynamic_strings();
2576
+ }
2577
+
2578
+ $country_codes = array();
2579
+ foreach ( array_keys( self::$dynamic_strings ) as $a_code ) {
2580
+ if ( strpos( $a_code, 'c-', 0 ) !== false && strlen( $a_code ) > 2 && $a_code != 'c-xx' && $a_code != 'c-xy' ) {
2581
+ $country_codes[ strtolower( str_replace( 'c-', '', $a_code ) ) ] = self::$dynamic_strings[ $a_code ];
2582
+ }
2583
+ }
2584
+
2585
+ return $country_codes;
2586
+ }
2587
+
2588
+ public static function get_string( $_code = '' ) {
2589
+ if ( empty( self::$dynamic_strings ) ) {
2590
+ self::init_dynamic_strings();
2591
+ }
2592
+
2593
+ if ( !isset( self::$dynamic_strings[ $_code ] ) ) {
2594
+ return $_code;
2595
+ }
2596
+
2597
+ return self::$dynamic_strings[ $_code ];
2598
+ }
2599
+ }
2600
+
2601
  // Ok, let's go, Sparky!
2602
  if ( function_exists( 'add_action' ) ) {
2603
  // Since we use sendBeacon, this function sends raw POST data, which does not populate the $_POST variable automatically