Version Description
- [New] Implemented new FingerPrintJs2 library in the tracker. Your visitors are now associated with a unique identifier that does not rely on cookies, IP address or other unreliable information. This will allow Slimstat to produce more accurate results in terms of session lenghts, user patterns and much more.
- [New] Added event handler for 'beforeunload', which will allow the tracker to better meausure the time spent by your visitors on each page. This will make our upcoming new charts even more accurate.
- [Update] Improved algorithm that scans referrer URLs for search terms, and introduced a new list of search engines. Please help us improve this list by submitting your missing search engine entries.
- [Update] Added title field to Slimstat widgets (thank you, jaroslawistok).
- [Update] Reverted a change to the Top Web Pages report that was now combining URLs with a trailing slash and ones without one into one result. As James pointed out, this is a less accurate measure and hides the fact that people might be accessing the website in different ways.
- [Update] The event tracker now annotates each event with information about the mouse button that was clicked and other useful data.
- [Fix] The Country shortcode was not working as expected because of a change in how we handle localization files.
- [Fix] Renamed slim_i18n class to avoid conflict with external libraries.
Download this release
Release Info
Developer | coolmann |
Plugin | Slimstat Analytics |
Version | 4.8.8 |
Comparing to | |
See all releases |
Code changes from version 4.8.7.3 to 4.8.8
- CHANGELOG.md +10 -0
- admin/assets/css/admin.css +1 -1
- admin/config/index.php +11 -5
- admin/index.php +15 -630
- admin/view/index.php +1 -1
- admin/view/right-now.php +32 -12
- admin/view/wp-slimstat-db.php +3 -2
- admin/view/wp-slimstat-reports.php +16 -12
- languages/index.php +608 -1
- readme.txt +12 -2
- vendor/matomo-searchengine.json +1 -0
- vendor/maxmind.php +115 -5
- wp-slimstat.js +149 -78
- wp-slimstat.min.js +1 -1
- wp-slimstat.php +373 -337
CHANGELOG.md
CHANGED
@@ -1,4 +1,14 @@
|
|
1 |
## Changelog ##
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
### 4.8.7.3 ###
|
3 |
* [New] Implemented a simple query cache to minimize the number of requests needed to crunch and display the data in the reports.
|
4 |
* [Update] Extended tracker to also record the 'fragment' portion of the URL, if available (this feature is only available in Client Mode).
|
1 |
## Changelog ##
|
2 |
+
### 4.8.8 ###
|
3 |
+
* [New] Implemented new [FingerPrintJs2](https://github.com/Valve/fingerprintjs2) library in the tracker. Your visitors are now associated with a unique identifier that does not rely on cookies, IP address or other unreliable information. This will allow Slimstat to produce more accurate results in terms of session lenghts, user patterns and much more.
|
4 |
+
* [New] Added event handler for 'beforeunload', which will allow the tracker to better meausure the time spent by your visitors on each page. This will make our upcoming new charts even more accurate.
|
5 |
+
* [Update] Improved algorithm that scans referrer URLs for search terms, and introduced a new list of search engines. Please help us improve this list by submitting your missing search engine entries.
|
6 |
+
* [Update] Added title field to Slimstat widgets (thank you, [jaroslawistok](https://wordpress.org/support/topic/broken-layout-from-3rd-widget-in-footer/)).
|
7 |
+
* [Update] Reverted a change to the Top Web Pages report that was now combining URLs with a trailing slash and ones without one into one result. As James pointed out, this is a less accurate measure and hides the fact that people might be accessing the website in different ways.
|
8 |
+
* [Update] The event tracker now annotates each event with information about the mouse button that was clicked and other useful data.
|
9 |
+
* [Fix] The Country shortcode was not working as expected because of a change in how we handle localization files.
|
10 |
+
* [Fix] Renamed slim_i18n class to avoid conflict with external libraries.
|
11 |
+
|
12 |
### 4.8.7.3 ###
|
13 |
* [New] Implemented a simple query cache to minimize the number of requests needed to crunch and display the data in the reports.
|
14 |
* [Update] Extended tracker to also record the 'fragment' portion of the URL, if available (this feature is only available in Client Mode).
|
admin/assets/css/admin.css
CHANGED
@@ -239,7 +239,7 @@
|
|
239 |
float: right;
|
240 |
}
|
241 |
[id^=slim_] p span.pageview-screenres{
|
242 |
-
margin-
|
243 |
}
|
244 |
[id^=slim_] a:hover{
|
245 |
text-shadow: 0 0 2px #bbb;
|
239 |
float: right;
|
240 |
}
|
241 |
[id^=slim_] p span.pageview-screenres{
|
242 |
+
margin-left: 10px;
|
243 |
}
|
244 |
[id^=slim_] a:hover{
|
245 |
text-shadow: 0 0 2px #bbb;
|
admin/config/index.php
CHANGED
@@ -513,7 +513,7 @@ var SlimStatParams = { ajaxurl: "' . admin_url( 'admin-ajax.php' ) . '" };
|
|
513 |
'last_tracker_error' => array(
|
514 |
'title' => __( 'Tracker Error', 'wp-slimstat' ),
|
515 |
'type'=> 'plain-text',
|
516 |
-
'after_input_field' => !empty( $last_tracker_error ) ? '<strong>[' . date_i18n( get_option( 'date_format' ), $last_tracker_error[ 1 ], true ) . ' ' . date_i18n( get_option( 'time_format' ), $last_tracker_error[ 1 ], true ) . '] ' . $last_tracker_error[ 0 ] . ' ' .
|
517 |
'description'=> __( 'The information here above is useful to troubleshoot issues with the tracker. <strong>Errors</strong> are returned when the tracker could not record a page view for some reason, and are indicative of some kind of malfunction. Please include the message here above when sending a <a href="https://support.wp-slimstat.com" target="_blank">support request</a>.', 'wp-slimstat' )
|
518 |
),
|
519 |
'show_sql_debug' => array(
|
@@ -577,6 +577,9 @@ if ( version_compare( PHP_VERSION, '7.1', '>=' ) ) {
|
|
577 |
// Allow third-party tools to add their own settings
|
578 |
$settings = apply_filters( 'slimstat_options_on_page', $settings );
|
579 |
|
|
|
|
|
|
|
580 |
// Save options
|
581 |
$save_messages = array();
|
582 |
if ( !empty( $settings ) && !empty( $_REQUEST[ 'slimstat_update_settings' ] ) && wp_verify_nonce( $_REQUEST[ 'slimstat_update_settings' ], 'slimstat_update_settings' ) ) {
|
@@ -613,6 +616,7 @@ if ( !empty( $settings ) && !empty( $_REQUEST[ 'slimstat_update_settings' ] ) &&
|
|
613 |
wp_slimstat::$wpdb->query( "ALTER TABLE {$GLOBALS[ 'wpdb' ]->prefix}slim_stats ADD INDEX {$GLOBALS[ 'wpdb' ]->prefix}stats_resource_idx( resource( 20 ) )" );
|
614 |
wp_slimstat::$wpdb->query( "ALTER TABLE {$GLOBALS[ 'wpdb' ]->prefix}slim_stats ADD INDEX {$GLOBALS[ 'wpdb' ]->prefix}stats_browser_idx( browser( 10 ) )" );
|
615 |
wp_slimstat::$wpdb->query( "ALTER TABLE {$GLOBALS[ 'wpdb' ]->prefix}slim_stats ADD INDEX {$GLOBALS[ 'wpdb' ]->prefix}stats_searchterms_idx( searchterms( 15 ) )" );
|
|
|
616 |
$save_messages[] = __( 'Congratulations! Slimstat Analytics is now optimized for <a href="https://www.youtube.com/watch?v=ygE01sOhzz0" target="_blank">ludicrous speed</a>.', 'wp-slimstat' );
|
617 |
wp_slimstat::$settings[ 'db_indexes' ] = 'on';
|
618 |
}
|
@@ -621,6 +625,7 @@ if ( !empty( $settings ) && !empty( $_REQUEST[ 'slimstat_update_settings' ] ) &&
|
|
621 |
wp_slimstat::$wpdb->query( "ALTER TABLE {$GLOBALS[ 'wpdb' ]->prefix}slim_stats DROP INDEX {$GLOBALS[ 'wpdb' ]->prefix}stats_resource_idx" );
|
622 |
wp_slimstat::$wpdb->query( "ALTER TABLE {$GLOBALS[ 'wpdb' ]->prefix}slim_stats DROP INDEX {$GLOBALS[ 'wpdb' ]->prefix}stats_browser_idx");
|
623 |
wp_slimstat::$wpdb->query( "ALTER TABLE {$GLOBALS[ 'wpdb' ]->prefix}slim_stats DROP INDEX {$GLOBALS[ 'wpdb' ]->prefix}stats_searchterms_idx");
|
|
|
624 |
$save_messages[] = __( 'Table indexes have been disabled. Enjoy the extra database space!', 'wp-slimstat' );
|
625 |
wp_slimstat::$settings[ 'db_indexes' ] = 'no';
|
626 |
}
|
@@ -629,7 +634,8 @@ if ( !empty( $settings ) && !empty( $_REQUEST[ 'slimstat_update_settings' ] ) &&
|
|
629 |
// MaxMind Data File
|
630 |
if ( !empty( $_POST[ 'options' ][ 'enable_maxmind' ] ) ) {
|
631 |
if ( $_POST[ 'options' ][ 'enable_maxmind' ] == 'on' && wp_slimstat::$settings[ 'enable_maxmind' ] == 'no' ) {
|
632 |
-
|
|
|
633 |
|
634 |
if ( empty( $error ) ) {
|
635 |
$save_messages[] = __( 'The geolocation database has been installed on your server.', 'wp-slimstat' );
|
@@ -640,7 +646,7 @@ if ( !empty( $settings ) && !empty( $_REQUEST[ 'slimstat_update_settings' ] ) &&
|
|
640 |
}
|
641 |
}
|
642 |
else if ( $_POST[ 'options' ][ 'enable_maxmind' ] == 'no' && wp_slimstat::$settings[ 'enable_maxmind' ] == 'on' ) {
|
643 |
-
$is_deleted = @unlink(
|
644 |
|
645 |
if ( $is_deleted ) {
|
646 |
$save_messages[] = __( 'The geolocation database has been uninstalled from your server.', 'wp-slimstat' );
|
@@ -648,7 +654,7 @@ if ( !empty( $settings ) && !empty( $_REQUEST[ 'slimstat_update_settings' ] ) &&
|
|
648 |
}
|
649 |
else {
|
650 |
// Some users have reported that a directory is created, instead of a file
|
651 |
-
$is_deleted = @rmdir(
|
652 |
|
653 |
if ( $is_deleted ) {
|
654 |
$save_messages[] = __( 'The geolocation database has been uninstalled from your server.', 'wp-slimstat' );
|
@@ -728,7 +734,7 @@ if ( !empty( $settings ) && !empty( $_REQUEST[ 'slimstat_update_settings' ] ) &&
|
|
728 |
}
|
729 |
|
730 |
$maxmind_last_modified = '';
|
731 |
-
if ( file_exists(
|
732 |
$maxmind_last_modified = date_i18n( get_option( 'date_format' ), $file_stat[ 'mtime' ] );
|
733 |
}
|
734 |
|
513 |
'last_tracker_error' => array(
|
514 |
'title' => __( 'Tracker Error', 'wp-slimstat' ),
|
515 |
'type'=> 'plain-text',
|
516 |
+
'after_input_field' => !empty( $last_tracker_error ) ? '<strong>[' . date_i18n( get_option( 'date_format' ), $last_tracker_error[ 1 ], true ) . ' ' . date_i18n( get_option( 'time_format' ), $last_tracker_error[ 1 ], true ) . '] ' . $last_tracker_error[ 0 ] . ' ' . wp_slimstat_i18n::get_string( 'e-' . $last_tracker_error[ 0 ] ) . '</strong><a class="slimstat-font-cancel" title="' . htmlentities( __( 'Reset this error', 'wp-slimstat' ), ENT_QUOTES, 'UTF-8' ) . '" href="' . wp_slimstat_admin::$config_url . $current_tab . '&action=reset-tracker-error&slimstat_update_settings=' . wp_create_nonce( 'slimstat_update_settings' ) . '"></a>' : __( 'So far so good.', 'wp-slimstat' ),
|
517 |
'description'=> __( 'The information here above is useful to troubleshoot issues with the tracker. <strong>Errors</strong> are returned when the tracker could not record a page view for some reason, and are indicative of some kind of malfunction. Please include the message here above when sending a <a href="https://support.wp-slimstat.com" target="_blank">support request</a>.', 'wp-slimstat' )
|
518 |
),
|
519 |
'show_sql_debug' => array(
|
577 |
// Allow third-party tools to add their own settings
|
578 |
$settings = apply_filters( 'slimstat_options_on_page', $settings );
|
579 |
|
580 |
+
// Maxmind Data File
|
581 |
+
$maxmind_path = wp_slimstat::$upload_dir . '/maxmind.mmdb';
|
582 |
+
|
583 |
// Save options
|
584 |
$save_messages = array();
|
585 |
if ( !empty( $settings ) && !empty( $_REQUEST[ 'slimstat_update_settings' ] ) && wp_verify_nonce( $_REQUEST[ 'slimstat_update_settings' ], 'slimstat_update_settings' ) ) {
|
616 |
wp_slimstat::$wpdb->query( "ALTER TABLE {$GLOBALS[ 'wpdb' ]->prefix}slim_stats ADD INDEX {$GLOBALS[ 'wpdb' ]->prefix}stats_resource_idx( resource( 20 ) )" );
|
617 |
wp_slimstat::$wpdb->query( "ALTER TABLE {$GLOBALS[ 'wpdb' ]->prefix}slim_stats ADD INDEX {$GLOBALS[ 'wpdb' ]->prefix}stats_browser_idx( browser( 10 ) )" );
|
618 |
wp_slimstat::$wpdb->query( "ALTER TABLE {$GLOBALS[ 'wpdb' ]->prefix}slim_stats ADD INDEX {$GLOBALS[ 'wpdb' ]->prefix}stats_searchterms_idx( searchterms( 15 ) )" );
|
619 |
+
wp_slimstat::$wpdb->query( "ALTER TABLE {$GLOBALS[ 'wpdb' ]->prefix}slim_stats ADD INDEX {$GLOBALS[ 'wpdb' ]->prefix}stats_fingerprint_idx( fingerprint( 20 ) )" );
|
620 |
$save_messages[] = __( 'Congratulations! Slimstat Analytics is now optimized for <a href="https://www.youtube.com/watch?v=ygE01sOhzz0" target="_blank">ludicrous speed</a>.', 'wp-slimstat' );
|
621 |
wp_slimstat::$settings[ 'db_indexes' ] = 'on';
|
622 |
}
|
625 |
wp_slimstat::$wpdb->query( "ALTER TABLE {$GLOBALS[ 'wpdb' ]->prefix}slim_stats DROP INDEX {$GLOBALS[ 'wpdb' ]->prefix}stats_resource_idx" );
|
626 |
wp_slimstat::$wpdb->query( "ALTER TABLE {$GLOBALS[ 'wpdb' ]->prefix}slim_stats DROP INDEX {$GLOBALS[ 'wpdb' ]->prefix}stats_browser_idx");
|
627 |
wp_slimstat::$wpdb->query( "ALTER TABLE {$GLOBALS[ 'wpdb' ]->prefix}slim_stats DROP INDEX {$GLOBALS[ 'wpdb' ]->prefix}stats_searchterms_idx");
|
628 |
+
wp_slimstat::$wpdb->query( "ALTER TABLE {$GLOBALS[ 'wpdb' ]->prefix}slim_stats DROP INDEX {$GLOBALS[ 'wpdb' ]->prefix}stats_fingerprint_idx");
|
629 |
$save_messages[] = __( 'Table indexes have been disabled. Enjoy the extra database space!', 'wp-slimstat' );
|
630 |
wp_slimstat::$settings[ 'db_indexes' ] = 'no';
|
631 |
}
|
634 |
// MaxMind Data File
|
635 |
if ( !empty( $_POST[ 'options' ][ 'enable_maxmind' ] ) ) {
|
636 |
if ( $_POST[ 'options' ][ 'enable_maxmind' ] == 'on' && wp_slimstat::$settings[ 'enable_maxmind' ] == 'no' ) {
|
637 |
+
include_once( plugin_dir_path( dirname( dirname( __FILE__ ) ) ) . 'vendor/maxmind.php' );
|
638 |
+
$error = maxmind_geolite2_connector::download_maxmind_database();
|
639 |
|
640 |
if ( empty( $error ) ) {
|
641 |
$save_messages[] = __( 'The geolocation database has been installed on your server.', 'wp-slimstat' );
|
646 |
}
|
647 |
}
|
648 |
else if ( $_POST[ 'options' ][ 'enable_maxmind' ] == 'no' && wp_slimstat::$settings[ 'enable_maxmind' ] == 'on' ) {
|
649 |
+
$is_deleted = @unlink( $maxmind_path );
|
650 |
|
651 |
if ( $is_deleted ) {
|
652 |
$save_messages[] = __( 'The geolocation database has been uninstalled from your server.', 'wp-slimstat' );
|
654 |
}
|
655 |
else {
|
656 |
// Some users have reported that a directory is created, instead of a file
|
657 |
+
$is_deleted = @rmdir( $maxmind_path );
|
658 |
|
659 |
if ( $is_deleted ) {
|
660 |
$save_messages[] = __( 'The geolocation database has been uninstalled from your server.', 'wp-slimstat' );
|
734 |
}
|
735 |
|
736 |
$maxmind_last_modified = '';
|
737 |
+
if ( file_exists( $maxmind_path ) && false !== ( $file_stat = @stat( $maxmind_path ) ) ) {
|
738 |
$maxmind_last_modified = date_i18n( get_option( 'date_format' ), $file_stat[ 'mtime' ] );
|
739 |
}
|
740 |
|
admin/index.php
CHANGED
@@ -18,9 +18,8 @@ class wp_slimstat_admin {
|
|
18 |
* Init -- Sets things up.
|
19 |
*/
|
20 |
public static function init() {
|
21 |
-
self::$admin_notice = "We recently introduced a new simplified tracker that gets rid of a few layers of convoluted functions and algorithms accumulated over the years. Even though we have tested our new code using a variety of scenarios, you can understand how it would be impossible to cover all the environments available out there. <strong>Make sure to clear your caches</strong> (local, Cloudflare, WP plugins, etc), to allow Slimstat to append the new tracking script to your pages. Also, if you are using Slimstat to track <strong>external</strong> pages (outside of your WP install), please make sure to update the code you're using on those pages with the new one you can find in Slimstat > Settings > Tracker > External Pages. As always, do not hesitate to contact <a href='https://support.wp-slimstat.com/' target='_blank'>our support team</a> if you notice any issues.";
|
22 |
// self::$admin_notice = "Just a quick reminder that, in our quest for improved performance, we are deprecating the two columns <em>type</em> and <em>event_description</em> in the events table, and consolidating that information in the <em>notes</em> field. Code will be added to Slimstat in a few released to actually drop these columns from the database. If you are using those two columns in your custom code, please feel free to contact our support team to discuss your options and how to update your code using the information collected by the new tracker.";
|
23 |
-
|
24 |
|
25 |
// Load language files
|
26 |
load_plugin_textdomain( 'wp-slimstat', false, '/wp-slimstat/languages' );
|
@@ -348,7 +347,8 @@ class wp_slimstat_admin {
|
|
348 |
INDEX {$GLOBALS[ 'wpdb' ]->prefix}slim_stats_dt_idx (dt),
|
349 |
INDEX {$GLOBALS[ 'wpdb' ]->prefix}stats_resource_idx( resource( 20 ) ),
|
350 |
INDEX {$GLOBALS[ 'wpdb' ]->prefix}stats_browser_idx( browser( 10 ) ),
|
351 |
-
INDEX {$GLOBALS[ 'wpdb' ]->prefix}stats_searchterms_idx( searchterms( 15 ) )
|
|
|
352 |
) COLLATE utf8_general_ci $use_innodb";
|
353 |
|
354 |
// This table will track outbound links (clicks on links to external sites)
|
@@ -404,23 +404,6 @@ class wp_slimstat_admin {
|
|
404 |
public static function update_tables_and_options() {
|
405 |
$my_wpdb = apply_filters( 'slimstat_custom_wpdb', $GLOBALS[ 'wpdb' ] );
|
406 |
|
407 |
-
// --- Updates for version 4.7.8.2 ---
|
408 |
-
if ( version_compare( wp_slimstat::$settings[ 'version' ], '4.7.8.2', '<' ) ) {
|
409 |
-
wp_slimstat::$settings[ 'opt_out_message' ] = '<p style="display:block;position:fixed;left:0;bottom:0;margin:0;padding:1em 2em;background-color:#eee;width:100%;z-index:99999;">This website stores cookies on your computer. These cookies are used to provide a more personalized experience and to track your whereabouts around our website in compliance with the European General Data Protection Regulation. If you decide to to opt-out of any future tracking, a cookie will be setup in your browser to remember this choice for one year.<br><br><a href="#" onclick="javascript:SlimStat.optout(event, false);">Accept</a> or <a href="#" onclick="javascript:SlimStat.optout(event, true);">Deny</a></p>';
|
410 |
-
}
|
411 |
-
// --- END: Updates for version 4.7.8.2 ---
|
412 |
-
|
413 |
-
// --- Updates for version 4.7.9 ---
|
414 |
-
if ( version_compare( wp_slimstat::$settings[ 'version' ], '4.7.9', '<' ) ) {
|
415 |
-
// Delete the old Browscap Library and install the new one
|
416 |
-
if ( file_exists( wp_slimstat::$upload_dir . '/browscap-db/autoload.php' ) ) {
|
417 |
-
WP_Filesystem();
|
418 |
-
$GLOBALS[ 'wp_filesystem' ]->rmdir( wp_slimstat::$upload_dir . '/browscap-db/', true );
|
419 |
-
slim_browser::update_browscap_database( true );
|
420 |
-
}
|
421 |
-
}
|
422 |
-
// --- END: Updates for version 4.7.9 ---
|
423 |
-
|
424 |
// --- Updates for version 4.8.2 ---
|
425 |
if ( version_compare( wp_slimstat::$settings[ 'version' ], '4.8.2', '<' ) ) {
|
426 |
// Add new email column to database
|
@@ -470,9 +453,20 @@ class wp_slimstat_admin {
|
|
470 |
}
|
471 |
// --- END: Updates for version 4.8.4.1 ---
|
472 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
473 |
// Now we can update the version stored in the database
|
474 |
wp_slimstat::$settings[ 'version' ] = wp_slimstat::$version;
|
475 |
wp_slimstat::$settings[ 'notice_latest_news' ] = 'on';
|
|
|
476 |
|
477 |
return true;
|
478 |
}
|
@@ -1051,613 +1045,4 @@ class wp_slimstat_admin {
|
|
1051 |
}
|
1052 |
// END: _create_table
|
1053 |
}
|
1054 |
-
// END: class declaration
|
1055 |
-
|
1056 |
-
class slim_i18n {
|
1057 |
-
public static $dynamic_strings = array();
|
1058 |
-
|
1059 |
-
public static function init_dynamic_strings() {
|
1060 |
-
if ( false === ( self::$dynamic_strings = get_transient( 'slimstat_dynamic_strings' ) ) ) {
|
1061 |
-
self::$dynamic_strings = array(
|
1062 |
-
'xx' => __( 'Unknown', 'wp-slimstat' ),
|
1063 |
-
|
1064 |
-
// Countries
|
1065 |
-
'c-' => __( 'Unknown', 'wp-slimstat' ),
|
1066 |
-
'c-xx' => __( 'Unknown', 'wp-slimstat' ),
|
1067 |
-
'c-xy' => __( 'Local IP Address', 'wp-slimstat' ),
|
1068 |
-
|
1069 |
-
'c-af' => __( 'Afghanistan', 'wp-slimstat' ),
|
1070 |
-
'c-ax' => __( 'Aland Islands', 'wp-slimstat' ),
|
1071 |
-
'c-al' => __( 'Albania', 'wp-slimstat' ),
|
1072 |
-
'c-dz' => __( 'Algeria', 'wp-slimstat' ),
|
1073 |
-
'c-ad' => __( 'Andorra', 'wp-slimstat' ),
|
1074 |
-
'c-ao' => __( 'Angola', 'wp-slimstat' ),
|
1075 |
-
'c-ai' => __( 'Anguilla', 'wp-slimstat' ),
|
1076 |
-
'c-ag' => __( 'Antigua and Barbuda', 'wp-slimstat' ),
|
1077 |
-
'c-ar' => __( 'Argentina', 'wp-slimstat' ),
|
1078 |
-
'c-am' => __( 'Armenia', 'wp-slimstat' ),
|
1079 |
-
'c-aw' => __( 'Aruba', 'wp-slimstat' ),
|
1080 |
-
'c-au' => __( 'Australia', 'wp-slimstat' ),
|
1081 |
-
'c-at' => __( 'Austria', 'wp-slimstat' ),
|
1082 |
-
'c-az' => __( 'Azerbaijan', 'wp-slimstat' ),
|
1083 |
-
'c-bs' => __( 'Bahamas', 'wp-slimstat' ),
|
1084 |
-
'c-bh' => __( 'Bahrain', 'wp-slimstat' ),
|
1085 |
-
'c-bd' => __( 'Bangladesh', 'wp-slimstat' ),
|
1086 |
-
'c-bb' => __( 'Barbados', 'wp-slimstat' ),
|
1087 |
-
'c-by' => __( 'Belarus', 'wp-slimstat' ),
|
1088 |
-
'c-be' => __( 'Belgium', 'wp-slimstat' ),
|
1089 |
-
'c-bz' => __( 'Belize', 'wp-slimstat' ),
|
1090 |
-
'c-bj' => __( 'Benin', 'wp-slimstat' ),
|
1091 |
-
'c-bm' => __( 'Bermuda', 'wp-slimstat' ),
|
1092 |
-
'c-bt' => __( 'Bhutan', 'wp-slimstat' ),
|
1093 |
-
'c-bo' => __( 'Bolivia', 'wp-slimstat' ),
|
1094 |
-
'c-ba' => __( 'Bosnia and Herzegovina', 'wp-slimstat' ),
|
1095 |
-
'c-bw' => __( 'Botswana', 'wp-slimstat' ),
|
1096 |
-
'c-br' => __( 'Brazil', 'wp-slimstat' ),
|
1097 |
-
'c-bn' => __( 'Brunei Darussalam', 'wp-slimstat' ),
|
1098 |
-
'c-bg' => __( 'Bulgaria', 'wp-slimstat' ),
|
1099 |
-
'c-bf' => __( 'Burkina Faso', 'wp-slimstat' ),
|
1100 |
-
'c-bi' => __( 'Burundi', 'wp-slimstat' ),
|
1101 |
-
'c-kh' => __( 'Cambodia', 'wp-slimstat' ),
|
1102 |
-
'c-cm' => __( 'Cameroon', 'wp-slimstat' ),
|
1103 |
-
'c-ca' => __( 'Canada', 'wp-slimstat' ),
|
1104 |
-
'c-cv' => __( 'Cape Verde', 'wp-slimstat' ),
|
1105 |
-
'c-ky' => __( 'Cayman Islands', 'wp-slimstat' ),
|
1106 |
-
'c-cf' => __( 'Central African Republic', 'wp-slimstat' ),
|
1107 |
-
'c-td' => __( 'Chad', 'wp-slimstat' ),
|
1108 |
-
'c-cl' => __( 'Chile', 'wp-slimstat' ),
|
1109 |
-
'c-cn' => __( 'China', 'wp-slimstat' ),
|
1110 |
-
'c-co' => __( 'Colombia', 'wp-slimstat' ),
|
1111 |
-
'c-km' => __( 'Comoros', 'wp-slimstat' ),
|
1112 |
-
'c-cg' => __( 'Congo', 'wp-slimstat' ),
|
1113 |
-
'c-cd' => __( 'The Democratic Republic of the Congo', 'wp-slimstat' ),
|
1114 |
-
'c-cr' => __( 'Costa Rica', 'wp-slimstat' ),
|
1115 |
-
'c-ci' => __( 'Côte d\'Ivoire', 'wp-slimstat' ),
|
1116 |
-
'c-hr' => __( 'Croatia', 'wp-slimstat' ),
|
1117 |
-
'c-cu' => __( 'Cuba', 'wp-slimstat' ),
|
1118 |
-
'c-cy' => __( 'Cyprus', 'wp-slimstat' ),
|
1119 |
-
'c-cz' => __( 'Czech Republic', 'wp-slimstat' ),
|
1120 |
-
'c-dk' => __( 'Denmark', 'wp-slimstat' ),
|
1121 |
-
'c-dj' => __( 'Djibouti', 'wp-slimstat' ),
|
1122 |
-
'c-dm' => __( 'Dominica', 'wp-slimstat' ),
|
1123 |
-
'c-do' => __( 'Dominican Republic', 'wp-slimstat' ),
|
1124 |
-
'c-ec' => __( 'Ecuador', 'wp-slimstat' ),
|
1125 |
-
'c-eg' => __( 'Egypt', 'wp-slimstat' ),
|
1126 |
-
'c-sv' => __( 'El Salvador', 'wp-slimstat' ),
|
1127 |
-
'c-gq' => __( 'Equatorial Guinea', 'wp-slimstat' ),
|
1128 |
-
'c-er' => __( 'Eritrea', 'wp-slimstat' ),
|
1129 |
-
'c-ee' => __( 'Estonia', 'wp-slimstat' ),
|
1130 |
-
'c-et' => __( 'Ethiopia', 'wp-slimstat' ),
|
1131 |
-
'c-fo' => __( 'Faroe Islands', 'wp-slimstat' ),
|
1132 |
-
'c-fk' => __( 'Falkland Islands (Malvinas)', 'wp-slimstat' ),
|
1133 |
-
'c-fj' => __( 'Fiji', 'wp-slimstat' ),
|
1134 |
-
'c-fi' => __( 'Finland', 'wp-slimstat' ),
|
1135 |
-
'c-fr' => __( 'France', 'wp-slimstat' ),
|
1136 |
-
'c-gf' => __( 'French Guiana', 'wp-slimstat' ),
|
1137 |
-
'c-ga' => __( 'Gabon', 'wp-slimstat' ),
|
1138 |
-
'c-gm' => __( 'Gambia', 'wp-slimstat' ),
|
1139 |
-
'c-ge' => __( 'Georgia', 'wp-slimstat' ),
|
1140 |
-
'c-de' => __( 'Germany', 'wp-slimstat' ),
|
1141 |
-
'c-gh' => __( 'Ghana', 'wp-slimstat' ),
|
1142 |
-
'c-gr' => __( 'Greece', 'wp-slimstat' ),
|
1143 |
-
'c-gl' => __( 'Greenland', 'wp-slimstat' ),
|
1144 |
-
'c-gd' => __( 'Grenada', 'wp-slimstat' ),
|
1145 |
-
'c-gp' => __( 'Guadeloupe', 'wp-slimstat' ),
|
1146 |
-
'c-gt' => __( 'Guatemala', 'wp-slimstat' ),
|
1147 |
-
'c-gn' => __( 'Guinea', 'wp-slimstat' ),
|
1148 |
-
'c-gw' => __( 'Guinea-Bissau', 'wp-slimstat' ),
|
1149 |
-
'c-gy' => __( 'Guyana', 'wp-slimstat' ),
|
1150 |
-
'c-ht' => __( 'Haiti', 'wp-slimstat' ),
|
1151 |
-
'c-hn' => __( 'Honduras', 'wp-slimstat' ),
|
1152 |
-
'c-hk' => __( 'Hong Kong', 'wp-slimstat' ),
|
1153 |
-
'c-hu' => __( 'Hungary', 'wp-slimstat' ),
|
1154 |
-
'c-is' => __( 'Iceland', 'wp-slimstat' ),
|
1155 |
-
'c-in' => __( 'India', 'wp-slimstat' ),
|
1156 |
-
'c-id' => __( 'Indonesia', 'wp-slimstat' ),
|
1157 |
-
'c-ir' => __( 'Islamic Republic of Iran', 'wp-slimstat' ),
|
1158 |
-
'c-iq' => __( 'Iraq', 'wp-slimstat' ),
|
1159 |
-
'c-ie' => __( 'Ireland', 'wp-slimstat' ),
|
1160 |
-
'c-il' => __( 'Israel', 'wp-slimstat' ),
|
1161 |
-
'c-it' => __( 'Italy', 'wp-slimstat' ),
|
1162 |
-
'c-jm' => __( 'Jamaica', 'wp-slimstat' ),
|
1163 |
-
'c-jp' => __( 'Japan', 'wp-slimstat' ),
|
1164 |
-
'c-jo' => __( 'Jordan', 'wp-slimstat' ),
|
1165 |
-
'c-kz' => __( 'Kazakhstan', 'wp-slimstat' ),
|
1166 |
-
'c-ke' => __( 'Kenya', 'wp-slimstat' ),
|
1167 |
-
'c-nr' => __( 'Nauru', 'wp-slimstat' ),
|
1168 |
-
'c-kp' => __( 'Democratic People\'s Republic of Korea', 'wp-slimstat' ),
|
1169 |
-
'c-kr' => __( 'Republic of Korea', 'wp-slimstat' ),
|
1170 |
-
'c-kv' => __( 'Kosovo', 'wp-slimstat' ),
|
1171 |
-
'c-kw' => __( 'Kuwait', 'wp-slimstat' ),
|
1172 |
-
'c-kg' => __( 'Kyrgyzstan', 'wp-slimstat' ),
|
1173 |
-
'c-la' => __( 'Lao People\'s Democratic Republic', 'wp-slimstat' ),
|
1174 |
-
'c-lv' => __( 'Latvia', 'wp-slimstat' ),
|
1175 |
-
'c-lb' => __( 'Lebanon', 'wp-slimstat' ),
|
1176 |
-
'c-ls' => __( 'Lesotho', 'wp-slimstat' ),
|
1177 |
-
'c-lr' => __( 'Liberia', 'wp-slimstat' ),
|
1178 |
-
'c-ly' => __( 'Libyan Arab Jamahiriya', 'wp-slimstat' ),
|
1179 |
-
'c-li' => __( 'Liechtenstein', 'wp-slimstat' ),
|
1180 |
-
'c-lt' => __( 'Lithuania', 'wp-slimstat' ),
|
1181 |
-
'c-lu' => __( 'Luxembourg', 'wp-slimstat' ),
|
1182 |
-
'c-mk' => __( 'The Former Yugoslav Republic of Macedonia', 'wp-slimstat' ),
|
1183 |
-
'c-mg' => __( 'Madagascar', 'wp-slimstat' ),
|
1184 |
-
'c-mw' => __( 'Malawi', 'wp-slimstat' ),
|
1185 |
-
'c-my' => __( 'Malaysia', 'wp-slimstat' ),
|
1186 |
-
'c-ml' => __( 'Mali', 'wp-slimstat' ),
|
1187 |
-
'c-mt' => __( 'Malta', 'wp-slimstat' ),
|
1188 |
-
'c-mq' => __( 'Martinique', 'wp-slimstat' ),
|
1189 |
-
'c-mr' => __( 'Mauritania', 'wp-slimstat' ),
|
1190 |
-
'c-mu' => __( 'Mauritius', 'wp-slimstat' ),
|
1191 |
-
'c-mx' => __( 'Mexico', 'wp-slimstat' ),
|
1192 |
-
'c-md' => __( 'Moldova', 'wp-slimstat' ),
|
1193 |
-
'c-mn' => __( 'Mongolia', 'wp-slimstat' ),
|
1194 |
-
'c-me' => __( 'Montenegro', 'wp-slimstat' ),
|
1195 |
-
'c-ms' => __( 'Montserrat', 'wp-slimstat' ),
|
1196 |
-
'c-ma' => __( 'Morocco', 'wp-slimstat' ),
|
1197 |
-
'c-mz' => __( 'Mozambique', 'wp-slimstat' ),
|
1198 |
-
'c-mm' => __( 'Myanmar', 'wp-slimstat' ),
|
1199 |
-
'c-na' => __( 'Namibia', 'wp-slimstat' ),
|
1200 |
-
'c-np' => __( 'Nepal', 'wp-slimstat' ),
|
1201 |
-
'c-nl' => __( 'Netherlands', 'wp-slimstat' ),
|
1202 |
-
'c-nc' => __( 'New Caledonia', 'wp-slimstat' ),
|
1203 |
-
'c-nz' => __( 'New Zealand', 'wp-slimstat' ),
|
1204 |
-
'c-ni' => __( 'Nicaragua', 'wp-slimstat' ),
|
1205 |
-
'c-ne' => __( 'Niger', 'wp-slimstat' ),
|
1206 |
-
'c-ng' => __( 'Nigeria', 'wp-slimstat' ),
|
1207 |
-
'c-no' => __( 'Norway', 'wp-slimstat' ),
|
1208 |
-
'c-om' => __( 'Oman', 'wp-slimstat' ),
|
1209 |
-
'c-pk' => __( 'Pakistan', 'wp-slimstat' ),
|
1210 |
-
'c-pw' => __( 'Palau', 'wp-slimstat' ),
|
1211 |
-
'c-ps' => __( 'Occupied Palestinian Territory', 'wp-slimstat' ),
|
1212 |
-
'c-pa' => __( 'Panama', 'wp-slimstat' ),
|
1213 |
-
'c-pg' => __( 'Papua New Guinea', 'wp-slimstat' ),
|
1214 |
-
'c-py' => __( 'Paraguay', 'wp-slimstat' ),
|
1215 |
-
'c-pe' => __( 'Peru', 'wp-slimstat' ),
|
1216 |
-
'c-ph' => __( 'Philippines', 'wp-slimstat' ),
|
1217 |
-
'c-pl' => __( 'Poland', 'wp-slimstat' ),
|
1218 |
-
'c-pt' => __( 'Portugal', 'wp-slimstat' ),
|
1219 |
-
'c-pr' => __( 'Puerto Rico', 'wp-slimstat' ),
|
1220 |
-
'c-qa' => __( 'Qatar', 'wp-slimstat' ),
|
1221 |
-
'c-re' => __( 'Réunion', 'wp-slimstat' ),
|
1222 |
-
'c-ro' => __( 'Romania', 'wp-slimstat' ),
|
1223 |
-
'c-ru' => __( 'Russian Federation', 'wp-slimstat' ),
|
1224 |
-
'c-rw' => __( 'Rwanda', 'wp-slimstat' ),
|
1225 |
-
'c-kn' => __( 'Saint Kitts and Nevis', 'wp-slimstat' ),
|
1226 |
-
'c-lc' => __( 'Saint Lucia', 'wp-slimstat' ),
|
1227 |
-
'c-mf' => __( 'Saint Martin', 'wp-slimstat' ),
|
1228 |
-
'c-vc' => __( 'Saint Vincent and the Grenadines', 'wp-slimstat' ),
|
1229 |
-
'c-ws' => __( 'Samoa', 'wp-slimstat' ),
|
1230 |
-
'c-st' => __( 'Sao Tome and Principe', 'wp-slimstat' ),
|
1231 |
-
'c-sa' => __( 'Saudi Arabia', 'wp-slimstat' ),
|
1232 |
-
'c-sn' => __( 'Senegal', 'wp-slimstat' ),
|
1233 |
-
'c-rs' => __( 'Serbia', 'wp-slimstat' ),
|
1234 |
-
'c-sl' => __( 'Sierra Leone', 'wp-slimstat' ),
|
1235 |
-
'c-sg' => __( 'Singapore', 'wp-slimstat' ),
|
1236 |
-
'c-sk' => __( 'Slovakia', 'wp-slimstat' ),
|
1237 |
-
'c-si' => __( 'Slovenia', 'wp-slimstat' ),
|
1238 |
-
'c-sb' => __( 'Solomon Islands', 'wp-slimstat' ),
|
1239 |
-
'c-so' => __( 'Somalia', 'wp-slimstat' ),
|
1240 |
-
'c-za' => __( 'South Africa', 'wp-slimstat' ),
|
1241 |
-
'c-gs' => __( 'South Georgia and the South Sandwich Islands', 'wp-slimstat' ),
|
1242 |
-
'c-es' => __( 'Spain', 'wp-slimstat' ),
|
1243 |
-
'c-lk' => __( 'Sri Lanka', 'wp-slimstat' ),
|
1244 |
-
'c-sc' => __( 'Seychelles', 'wp-slimstat' ),
|
1245 |
-
'c-sd' => __( 'Sudan', 'wp-slimstat' ),
|
1246 |
-
'c-ss' => __( 'South Sudan', 'wp-slimstat' ),
|
1247 |
-
'c-sr' => __( 'Suriname', 'wp-slimstat' ),
|
1248 |
-
'c-sj' => __( 'Svalbard and Jan Mayen', 'wp-slimstat' ),
|
1249 |
-
'c-sz' => __( 'Swaziland', 'wp-slimstat' ),
|
1250 |
-
'c-se' => __( 'Sweden', 'wp-slimstat' ),
|
1251 |
-
'c-ch' => __( 'Switzerland', 'wp-slimstat' ),
|
1252 |
-
'c-sy' => __( 'Syrian Arab Republic', 'wp-slimstat' ),
|
1253 |
-
'c-tw' => __( 'Taiwan', 'wp-slimstat' ),
|
1254 |
-
'c-tj' => __( 'Tajikistan', 'wp-slimstat' ),
|
1255 |
-
'c-tz' => __( 'United Republic of Tanzania', 'wp-slimstat' ),
|
1256 |
-
'c-th' => __( 'Thailand', 'wp-slimstat' ),
|
1257 |
-
'c-tl' => __( 'Timor-Leste', 'wp-slimstat' ),
|
1258 |
-
'c-tg' => __( 'Togo', 'wp-slimstat' ),
|
1259 |
-
'c-to' => __( 'Tonga', 'wp-slimstat' ),
|
1260 |
-
'c-tt' => __( 'Trinidad and Tobago', 'wp-slimstat' ),
|
1261 |
-
'c-tn' => __( 'Tunisia', 'wp-slimstat' ),
|
1262 |
-
'c-tr' => __( 'Turkey', 'wp-slimstat' ),
|
1263 |
-
'c-tm' => __( 'Turkmenistan', 'wp-slimstat' ),
|
1264 |
-
'c-tc' => __( 'Turks and Caicos Islands', 'wp-slimstat' ),
|
1265 |
-
'c-ug' => __( 'Uganda', 'wp-slimstat' ),
|
1266 |
-
'c-ua' => __( 'Ukraine', 'wp-slimstat' ),
|
1267 |
-
'c-ae' => __( 'United Arab Emirates', 'wp-slimstat' ),
|
1268 |
-
'c-gb' => __( 'United Kingdom', 'wp-slimstat' ),
|
1269 |
-
'c-us' => __( 'United States', 'wp-slimstat' ),
|
1270 |
-
'c-uy' => __( 'Uruguay', 'wp-slimstat' ),
|
1271 |
-
'c-uz' => __( 'Uzbekistan', 'wp-slimstat' ),
|
1272 |
-
'c-vu' => __( 'Vanuatu', 'wp-slimstat' ),
|
1273 |
-
'c-ve' => __( 'Venezuela', 'wp-slimstat' ),
|
1274 |
-
'c-vn' => __( 'Viet Nam', 'wp-slimstat' ),
|
1275 |
-
'c-vg' => __( 'British Virgin Islands', 'wp-slimstat' ),
|
1276 |
-
'c-vi' => __( 'U.S. Virgin Islands', 'wp-slimstat' ),
|
1277 |
-
'c-eh' => __( 'Western Sahara', 'wp-slimstat' ),
|
1278 |
-
'c-ye' => __( 'Yemen', 'wp-slimstat' ),
|
1279 |
-
'c-zm' => __( 'Zambia', 'wp-slimstat' ),
|
1280 |
-
'c-zw' => __( 'Zimbabwe', 'wp-slimstat' ),
|
1281 |
-
'c-gg' => __( 'Guernsey', 'wp-slimstat' ),
|
1282 |
-
'c-je' => __( 'Jersey', 'wp-slimstat' ),
|
1283 |
-
'c-im' => __( 'Isle of Man', 'wp-slimstat' ),
|
1284 |
-
'c-mv' => __( 'Maldives', 'wp-slimstat' ),
|
1285 |
-
'c-eu' => __( 'Europe', 'wp-slimstat' ),
|
1286 |
-
|
1287 |
-
// Languages
|
1288 |
-
'l-' => __( 'Unknown', 'wp-slimstat' ),
|
1289 |
-
'l-empty' => __( 'Unknown', 'wp-slimstat' ),
|
1290 |
-
'l-xx' => __( 'Unknown', 'wp-slimstat' ),
|
1291 |
-
|
1292 |
-
'l-af' => __( 'Afrikaans', 'wp-slimstat' ),
|
1293 |
-
'l-af-za' => __( 'Afrikaans (South Africa)', 'wp-slimstat' ),
|
1294 |
-
'l-ar' => __( 'Arabic', 'wp-slimstat' ),
|
1295 |
-
'l-ar-ae' => __( 'Arabic (U.A.E.)', 'wp-slimstat' ),
|
1296 |
-
'l-ar-bh' => __( 'Arabic (Bahrain)', 'wp-slimstat' ),
|
1297 |
-
'l-ar-dz' => __( 'Arabic (Algeria)', 'wp-slimstat' ),
|
1298 |
-
'l-ar-eg' => __( 'Arabic (Egypt)', 'wp-slimstat' ),
|
1299 |
-
'l-ar-iq' => __( 'Arabic (Iraq)', 'wp-slimstat' ),
|
1300 |
-
'l-ar-jo' => __( 'Arabic (Jordan)', 'wp-slimstat' ),
|
1301 |
-
'l-ar-kw' => __( 'Arabic (Kuwait)', 'wp-slimstat' ),
|
1302 |
-
'l-ar-lb' => __( 'Arabic (Lebanon)', 'wp-slimstat' ),
|
1303 |
-
'l-ar-ly' => __( 'Arabic (Libya)', 'wp-slimstat' ),
|
1304 |
-
'l-ar-ma' => __( 'Arabic (Morocco)', 'wp-slimstat' ),
|
1305 |
-
'l-ar-om' => __( 'Arabic (Oman)', 'wp-slimstat' ),
|
1306 |
-
'l-ar-qa' => __( 'Arabic (Qatar)', 'wp-slimstat' ),
|
1307 |
-
'l-ar-sa' => __( 'Arabic (Saudi Arabia)', 'wp-slimstat' ),
|
1308 |
-
'l-ar-sy' => __( 'Arabic (Syria)', 'wp-slimstat' ),
|
1309 |
-
'l-ar-tn' => __( 'Arabic (Tunisia)', 'wp-slimstat' ),
|
1310 |
-
'l-ar-ye' => __( 'Arabic (Yemen)', 'wp-slimstat' ),
|
1311 |
-
'l-az' => __( 'Azeri (Latin)', 'wp-slimstat' ),
|
1312 |
-
'l-az-az' => __( 'Azeri (Latin) (Azerbaijan)', 'wp-slimstat' ),
|
1313 |
-
'l-be' => __( 'Belarusian', 'wp-slimstat' ),
|
1314 |
-
'l-be-by' => __( 'Belarusian (Belarus)', 'wp-slimstat' ),
|
1315 |
-
'l-bg' => __( 'Bulgarian', 'wp-slimstat' ),
|
1316 |
-
'l-bg-bg' => __( 'Bulgarian (Bulgaria)', 'wp-slimstat' ),
|
1317 |
-
'l-bs-ba' => __( 'Bosnian (Bosnia and Herzegovina)', 'wp-slimstat' ),
|
1318 |
-
'l-ca' => __( 'Catalan', 'wp-slimstat' ),
|
1319 |
-
'l-ca-es' => __( 'Catalan (Spain)', 'wp-slimstat' ),
|
1320 |
-
'l-cs' => __( 'Czech', 'wp-slimstat' ),
|
1321 |
-
'l-cs-cz' => __( 'Czech (Czech Republic)', 'wp-slimstat' ),
|
1322 |
-
'l-cy' => __( 'Welsh', 'wp-slimstat' ),
|
1323 |
-
'l-cy-gb' => __( 'Welsh (United Kingdom)', 'wp-slimstat' ),
|
1324 |
-
'l-da' => __( 'Danish', 'wp-slimstat' ),
|
1325 |
-
'l-da-dk' => __( 'Danish (Denmark)', 'wp-slimstat' ),
|
1326 |
-
'l-de' => __( 'German', 'wp-slimstat' ),
|
1327 |
-
'l-de-at' => __( 'German (Austria)', 'wp-slimstat' ),
|
1328 |
-
'l-de-ch' => __( 'German (Switzerland)', 'wp-slimstat' ),
|
1329 |
-
'l-de-de' => __( 'German (Germany)', 'wp-slimstat' ),
|
1330 |
-
'l-de-li' => __( 'German (Liechtenstein)', 'wp-slimstat' ),
|
1331 |
-
'l-de-lu' => __( 'German (Luxembourg)', 'wp-slimstat' ),
|
1332 |
-
'l-dv' => __( 'Divehi', 'wp-slimstat' ),
|
1333 |
-
'l-dv-mv' => __( 'Divehi (Maldives)', 'wp-slimstat' ),
|
1334 |
-
'l-el' => __( 'Greek', 'wp-slimstat' ),
|
1335 |
-
'l-el-gr' => __( 'Greek (Greece)', 'wp-slimstat' ),
|
1336 |
-
'l-en' => __( 'English', 'wp-slimstat' ),
|
1337 |
-
'l-en-au' => __( 'English (Australia)', 'wp-slimstat' ),
|
1338 |
-
'l-en-bz' => __( 'English (Belize)', 'wp-slimstat' ),
|
1339 |
-
'l-en-ca' => __( 'English (Canada)', 'wp-slimstat' ),
|
1340 |
-
'l-en-cb' => __( 'English (Caribbean)', 'wp-slimstat' ),
|
1341 |
-
'l-en-gb' => __( 'English (United Kingdom)', 'wp-slimstat' ),
|
1342 |
-
'l-en-ie' => __( 'English (Ireland)', 'wp-slimstat' ),
|
1343 |
-
'l-en-jm' => __( 'English (Jamaica)', 'wp-slimstat' ),
|
1344 |
-
'l-en-nz' => __( 'English (New Zealand)', 'wp-slimstat' ),
|
1345 |
-
'l-en-ph' => __( 'English (Republic of the Philippines)', 'wp-slimstat' ),
|
1346 |
-
'l-en-tt' => __( 'English (Trinidad and Tobago)', 'wp-slimstat' ),
|
1347 |
-
'l-en-us' => __( 'English (United States)', 'wp-slimstat' ),
|
1348 |
-
'l-en-za' => __( 'English (South Africa)', 'wp-slimstat' ),
|
1349 |
-
'l-en-zw' => __( 'English (Zimbabwe)', 'wp-slimstat' ),
|
1350 |
-
'l-eo' => __( 'Esperanto', 'wp-slimstat' ),
|
1351 |
-
'l-es' => __( 'Spanish', 'wp-slimstat' ),
|
1352 |
-
'l-es-ar' => __( 'Spanish (Argentina)', 'wp-slimstat' ),
|
1353 |
-
'l-es-bo' => __( 'Spanish (Bolivia)', 'wp-slimstat' ),
|
1354 |
-
'l-es-cl' => __( 'Spanish (Chile)', 'wp-slimstat' ),
|
1355 |
-
'l-es-co' => __( 'Spanish (Colombia)', 'wp-slimstat' ),
|
1356 |
-
'l-es-cr' => __( 'Spanish (Costa Rica)', 'wp-slimstat' ),
|
1357 |
-
'l-es-do' => __( 'Spanish (Dominican Republic)', 'wp-slimstat' ),
|
1358 |
-
'l-es-ec' => __( 'Spanish (Ecuador)', 'wp-slimstat' ),
|
1359 |
-
'l-es-es' => __( 'Spanish (Spain)', 'wp-slimstat' ),
|
1360 |
-
'l-es-gt' => __( 'Spanish (Guatemala)', 'wp-slimstat' ),
|
1361 |
-
'l-es-hn' => __( 'Spanish (Honduras)', 'wp-slimstat' ),
|
1362 |
-
'l-es-mx' => __( 'Spanish (Mexico)', 'wp-slimstat' ),
|
1363 |
-
'l-es-ni' => __( 'Spanish (Nicaragua)', 'wp-slimstat' ),
|
1364 |
-
'l-es-pa' => __( 'Spanish (Panama)', 'wp-slimstat' ),
|
1365 |
-
'l-es-pe' => __( 'Spanish (Peru)', 'wp-slimstat' ),
|
1366 |
-
'l-es-pr' => __( 'Spanish (Puerto Rico)', 'wp-slimstat' ),
|
1367 |
-
'l-es-py' => __( 'Spanish (Paraguay)', 'wp-slimstat' ),
|
1368 |
-
'l-es-sv' => __( 'Spanish (El Salvador)', 'wp-slimstat' ),
|
1369 |
-
'l-es-uy' => __( 'Spanish (Uruguay)', 'wp-slimstat' ),
|
1370 |
-
'l-es-ve' => __( 'Spanish (Venezuela)', 'wp-slimstat' ),
|
1371 |
-
'l-et' => __( 'Estonian', 'wp-slimstat' ),
|
1372 |
-
'l-et-ee' => __( 'Estonian (Estonia)', 'wp-slimstat' ),
|
1373 |
-
'l-eu' => __( 'Basque', 'wp-slimstat' ),
|
1374 |
-
'l-eu-es' => __( 'Basque (Spain)', 'wp-slimstat' ),
|
1375 |
-
'l-fa' => __( 'Farsi', 'wp-slimstat' ),
|
1376 |
-
'l-fa-ir' => __( 'Farsi (Iran)', 'wp-slimstat' ),
|
1377 |
-
'l-fi' => __( 'Finnish', 'wp-slimstat' ),
|
1378 |
-
'l-fi-fi' => __( 'Finnish (Finland)', 'wp-slimstat' ),
|
1379 |
-
'l-fo' => __( 'Faroese', 'wp-slimstat' ),
|
1380 |
-
'l-fo-fo' => __( 'Faroese (Faroe Islands)', 'wp-slimstat' ),
|
1381 |
-
'l-fr' => __( 'French', 'wp-slimstat' ),
|
1382 |
-
'l-fr-be' => __( 'French (Belgium)', 'wp-slimstat' ),
|
1383 |
-
'l-fr-ca' => __( 'French (Canada)', 'wp-slimstat' ),
|
1384 |
-
'l-fr-ch' => __( 'French (Switzerland)', 'wp-slimstat' ),
|
1385 |
-
'l-fr-fr' => __( 'French (France)', 'wp-slimstat' ),
|
1386 |
-
'l-fr-lu' => __( 'French (Luxembourg)', 'wp-slimstat' ),
|
1387 |
-
'l-fr-mc' => __( 'French (Principality of Monaco)', 'wp-slimstat' ),
|
1388 |
-
'l-gl' => __( 'Galician', 'wp-slimstat' ),
|
1389 |
-
'l-gl-es' => __( 'Galician (Spain)', 'wp-slimstat' ),
|
1390 |
-
'l-gu' => __( 'Gujarati', 'wp-slimstat' ),
|
1391 |
-
'l-gu-in' => __( 'Gujarati (India)', 'wp-slimstat' ),
|
1392 |
-
'l-he' => __( 'Hebrew', 'wp-slimstat' ),
|
1393 |
-
'l-he-il' => __( 'Hebrew (Israel)', 'wp-slimstat' ),
|
1394 |
-
'l-hi' => __( 'Hindi', 'wp-slimstat' ),
|
1395 |
-
'l-hi-in' => __( 'Hindi (India)', 'wp-slimstat' ),
|
1396 |
-
'l-hr' => __( 'Croatian', 'wp-slimstat' ),
|
1397 |
-
'l-hr-ba' => __( 'Croatian (Bosnia and Herzegovina)', 'wp-slimstat' ),
|
1398 |
-
'l-hr-hr' => __( 'Croatian (Croatia)', 'wp-slimstat' ),
|
1399 |
-
'l-hu' => __( 'Hungarian', 'wp-slimstat' ),
|
1400 |
-
'l-hu-hu' => __( 'Hungarian (Hungary)', 'wp-slimstat' ),
|
1401 |
-
'l-hy' => __( 'Armenian', 'wp-slimstat' ),
|
1402 |
-
'l-hy-am' => __( 'Armenian (Armenia)', 'wp-slimstat' ),
|
1403 |
-
'l-id' => __( 'Indonesian', 'wp-slimstat' ),
|
1404 |
-
'l-id-id' => __( 'Indonesian (Indonesia)', 'wp-slimstat' ),
|
1405 |
-
'l-is' => __( 'Icelandic', 'wp-slimstat' ),
|
1406 |
-
'l-is-is' => __( 'Icelandic (Iceland)', 'wp-slimstat' ),
|
1407 |
-
'l-it' => __( 'Italian', 'wp-slimstat' ),
|
1408 |
-
'l-it-ch' => __( 'Italian (Switzerland)', 'wp-slimstat' ),
|
1409 |
-
'l-it-it' => __( 'Italian (Italy)', 'wp-slimstat' ),
|
1410 |
-
'l-ja' => __( 'Japanese', 'wp-slimstat' ),
|
1411 |
-
'l-ja-jp' => __( 'Japanese (Japan)', 'wp-slimstat' ),
|
1412 |
-
'l-ka' => __( 'Georgian', 'wp-slimstat' ),
|
1413 |
-
'l-ka-ge' => __( 'Georgian (Georgia)', 'wp-slimstat' ),
|
1414 |
-
'l-kk' => __( 'Kazakh', 'wp-slimstat' ),
|
1415 |
-
'l-kk-kz' => __( 'Kazakh (Kazakhstan)', 'wp-slimstat' ),
|
1416 |
-
'l-kn' => __( 'Kannada', 'wp-slimstat' ),
|
1417 |
-
'l-kn-in' => __( 'Kannada (India)', 'wp-slimstat' ),
|
1418 |
-
'l-ko' => __( 'Korean', 'wp-slimstat' ),
|
1419 |
-
'l-ko-kr' => __( 'Korean (Korea)', 'wp-slimstat' ),
|
1420 |
-
'l-kok' => __( 'Konkani', 'wp-slimstat' ),
|
1421 |
-
'l-kok-in' => __( 'Konkani (India)', 'wp-slimstat' ),
|
1422 |
-
'l-ky' => __( 'Kyrgyz', 'wp-slimstat' ),
|
1423 |
-
'l-ky-kg' => __( 'Kyrgyz (Kyrgyzstan)', 'wp-slimstat' ),
|
1424 |
-
'l-lt' => __( 'Lithuanian', 'wp-slimstat' ),
|
1425 |
-
'l-lt-lt' => __( 'Lithuanian (Lithuania)', 'wp-slimstat' ),
|
1426 |
-
'l-lv' => __( 'Latvian', 'wp-slimstat' ),
|
1427 |
-
'l-lv-lv' => __( 'Latvian (Latvia)', 'wp-slimstat' ),
|
1428 |
-
'l-mi' => __( 'Maori', 'wp-slimstat' ),
|
1429 |
-
'l-mi-nz' => __( 'Maori (New Zealand)', 'wp-slimstat' ),
|
1430 |
-
'l-mk' => __( 'FYRO Macedonian', 'wp-slimstat' ),
|
1431 |
-
'l-mk-ml' => __( 'FYRO Macedonian (Former Yugoslav Republic of Macedonia)', 'wp-slimstat' ),
|
1432 |
-
'l-mn' => __( 'Mongolian', 'wp-slimstat' ),
|
1433 |
-
'l-mn-mn' => __( 'Mongolian (Mongolia)', 'wp-slimstat' ),
|
1434 |
-
'l-mr' => __( 'Marathi', 'wp-slimstat' ),
|
1435 |
-
'l-mr-in' => __( 'Marathi (India)', 'wp-slimstat' ),
|
1436 |
-
'l-ms' => __( 'Malay', 'wp-slimstat' ),
|
1437 |
-
'l-ms-bn' => __( 'Malay (Brunei Darussalam)', 'wp-slimstat' ),
|
1438 |
-
'l-ms-my' => __( 'Malay (Malaysia)', 'wp-slimstat' ),
|
1439 |
-
'l-mt' => __( 'Maltese', 'wp-slimstat' ),
|
1440 |
-
'l-mt-mt' => __( 'Maltese (Malta)', 'wp-slimstat' ),
|
1441 |
-
'l-nb' => __( 'Norwegian (Bokmål)', 'wp-slimstat' ),
|
1442 |
-
'l-nb-no' => __( 'Norwegian (Bokmål) (Norway)', 'wp-slimstat' ),
|
1443 |
-
'l-nl' => __( 'Dutch', 'wp-slimstat' ),
|
1444 |
-
'l-nl-be' => __( 'Dutch (Belgium)', 'wp-slimstat' ),
|
1445 |
-
'l-nl-nl' => __( 'Dutch (Netherlands)', 'wp-slimstat' ),
|
1446 |
-
'l-nn-no' => __( 'Norwegian (Nynorsk) (Norway)', 'wp-slimstat' ),
|
1447 |
-
'l-ns' => __( 'Northern Sotho', 'wp-slimstat' ),
|
1448 |
-
'l-ns-za' => __( 'Northern Sotho (South Africa)', 'wp-slimstat' ),
|
1449 |
-
'l-pa' => __( 'Punjabi', 'wp-slimstat' ),
|
1450 |
-
'l-pa-in' => __( 'Punjabi (India)', 'wp-slimstat' ),
|
1451 |
-
'l-pl' => __( 'Polish', 'wp-slimstat' ),
|
1452 |
-
'l-pl-pl' => __( 'Polish (Poland)', 'wp-slimstat' ),
|
1453 |
-
'l-ps' => __( 'Pashto', 'wp-slimstat' ),
|
1454 |
-
'l-ps-ar' => __( 'Pashto (Afghanistan)', 'wp-slimstat' ),
|
1455 |
-
'l-pt' => __( 'Portuguese', 'wp-slimstat' ),
|
1456 |
-
'l-pt-br' => __( 'Portuguese (Brazil)', 'wp-slimstat' ),
|
1457 |
-
'l-pt-pt' => __( 'Portuguese (Portugal)', 'wp-slimstat' ),
|
1458 |
-
'l-qu' => __( 'Quechua', 'wp-slimstat' ),
|
1459 |
-
'l-qu-bo' => __( 'Quechua (Bolivia)', 'wp-slimstat' ),
|
1460 |
-
'l-qu-ec' => __( 'Quechua (Ecuador)', 'wp-slimstat' ),
|
1461 |
-
'l-qu-pe' => __( 'Quechua (Peru)', 'wp-slimstat' ),
|
1462 |
-
'l-ro' => __( 'Romanian', 'wp-slimstat' ),
|
1463 |
-
'l-ro-ro' => __( 'Romanian (Romania)', 'wp-slimstat' ),
|
1464 |
-
'l-ru' => __( 'Russian', 'wp-slimstat' ),
|
1465 |
-
'l-ru-ru' => __( 'Russian (Russia)', 'wp-slimstat' ),
|
1466 |
-
'l-sa' => __( 'Sanskrit', 'wp-slimstat' ),
|
1467 |
-
'l-sa-in' => __( 'Sanskrit (India)', 'wp-slimstat' ),
|
1468 |
-
'l-se' => __( 'Sami (Northern)', 'wp-slimstat' ),
|
1469 |
-
'l-se-fi' => __( 'Sami (Northern) (Finland)', 'wp-slimstat' ),
|
1470 |
-
'l-se-no' => __( 'Sami (Northern) (Norway)', 'wp-slimstat' ),
|
1471 |
-
'l-se-se' => __( 'Sami (Northern) (Sweden)', 'wp-slimstat' ),
|
1472 |
-
'l-sk' => __( 'Slovak', 'wp-slimstat' ),
|
1473 |
-
'l-sk-sk' => __( 'Slovak (Slovakia)', 'wp-slimstat' ),
|
1474 |
-
'l-sl' => __( 'Slovenian', 'wp-slimstat' ),
|
1475 |
-
'l-sl-si' => __( 'Slovenian (Slovenia)', 'wp-slimstat' ),
|
1476 |
-
'l-sq' => __( 'Albanian', 'wp-slimstat' ),
|
1477 |
-
'l-sq-al' => __( 'Albanian (Albania)', 'wp-slimstat' ),
|
1478 |
-
'l-sr-ba' => __( 'Serbian (Latin) (Bosnia and Herzegovina)', 'wp-slimstat' ),
|
1479 |
-
'l-sr-rs' => __( 'Serbian (Serbia and Montenegro)', 'wp-slimstat' ),
|
1480 |
-
'l-sr-sp' => __( 'Serbian (Latin) (Serbia and Montenegro)', 'wp-slimstat' ),
|
1481 |
-
'l-sv' => __( 'Swedish', 'wp-slimstat' ),
|
1482 |
-
'l-sv-fi' => __( 'Swedish (Finland)', 'wp-slimstat' ),
|
1483 |
-
'l-sv-se' => __( 'Swedish (Sweden)', 'wp-slimstat' ),
|
1484 |
-
'l-sw' => __( 'Swahili', 'wp-slimstat' ),
|
1485 |
-
'l-sw-ke' => __( 'Swahili (Kenya)', 'wp-slimstat' ),
|
1486 |
-
'l-ta' => __( 'Tamil', 'wp-slimstat' ),
|
1487 |
-
'l-ta-in' => __( 'Tamil (India)', 'wp-slimstat' ),
|
1488 |
-
'l-te' => __( 'Telugu', 'wp-slimstat' ),
|
1489 |
-
'l-te-in' => __( 'Telugu (India)', 'wp-slimstat' ),
|
1490 |
-
'l-th' => __( 'Thai', 'wp-slimstat' ),
|
1491 |
-
'l-th-th' => __( 'Thai (Thailand)', 'wp-slimstat' ),
|
1492 |
-
'l-tl' => __( 'Tagalog', 'wp-slimstat' ),
|
1493 |
-
'l-tl-ph' => __( 'Tagalog (Philippines)', 'wp-slimstat' ),
|
1494 |
-
'l-tn' => __( 'Tswana', 'wp-slimstat' ),
|
1495 |
-
'l-tn-za' => __( 'Tswana (South Africa)', 'wp-slimstat' ),
|
1496 |
-
'l-tr' => __( 'Turkish', 'wp-slimstat' ),
|
1497 |
-
'l-tr-tr' => __( 'Turkish (Turkey)', 'wp-slimstat' ),
|
1498 |
-
'l-tt' => __( 'Tatar', 'wp-slimstat' ),
|
1499 |
-
'l-tt-ru' => __( 'Tatar (Russia)', 'wp-slimstat' ),
|
1500 |
-
'l-ts' => __( 'Tsonga', 'wp-slimstat' ),
|
1501 |
-
'l-uk' => __( 'Ukrainian', 'wp-slimstat' ),
|
1502 |
-
'l-uk-ua' => __( 'Ukrainian (Ukraine)', 'wp-slimstat' ),
|
1503 |
-
'l-ur' => __( 'Urdu', 'wp-slimstat' ),
|
1504 |
-
'l-ur-pk' => __( 'Urdu (Islamic Republic of Pakistan)', 'wp-slimstat' ),
|
1505 |
-
'l-uz' => __( 'Uzbek (Latin)', 'wp-slimstat' ),
|
1506 |
-
'l-uz-uz' => __( 'Uzbek (Cyrillic) (Uzbekistan)', 'wp-slimstat' ),
|
1507 |
-
'l-vi' => __( 'Vietnamese', 'wp-slimstat' ),
|
1508 |
-
'l-vi-vn' => __( 'Vietnamese (Viet Nam)', 'wp-slimstat' ),
|
1509 |
-
'l-xh' => __( 'Xhosa', 'wp-slimstat' ),
|
1510 |
-
'l-xh-za' => __( 'Xhosa (South Africa)', 'wp-slimstat' ),
|
1511 |
-
'l-zh' => __( 'Chinese', 'wp-slimstat' ),
|
1512 |
-
'l-zh-cn' => __( 'Chinese (S)', 'wp-slimstat' ),
|
1513 |
-
'l-zh-hk' => __( 'Chinese (Hong Kong)', 'wp-slimstat' ),
|
1514 |
-
'l-zh-mo' => __( 'Chinese (Macau)', 'wp-slimstat' ),
|
1515 |
-
'l-zh-sg' => __( 'Chinese (Singapore)', 'wp-slimstat' ),
|
1516 |
-
'l-zh-tw' => __( 'Chinese (T)', 'wp-slimstat' ),
|
1517 |
-
'l-zu' => __( 'Zulu', 'wp-slimstat' ),
|
1518 |
-
'l-zu-za' => __( 'Zulu (South Africa)', 'wp-slimstat' ),
|
1519 |
-
|
1520 |
-
// Operating Systems
|
1521 |
-
'aix' => __( 'IBM AIX', 'wp-slimstat' ),
|
1522 |
-
'amiga' => __( 'Amiga', 'wp-slimstat' ),
|
1523 |
-
'android' => __( 'Android', 'wp-slimstat' ),
|
1524 |
-
'beos' => __( 'BeOS', 'wp-slimstat' ),
|
1525 |
-
'blackberry os' => __( 'BlackBerry OS', 'wp-slimstat' ),
|
1526 |
-
'centos' => __( 'CentOS', 'wp-slimstat' ),
|
1527 |
-
'chromeos' => __( 'ChromeOS', 'wp-slimstat' ),
|
1528 |
-
'commodore64' => __( 'Commodore 64', 'wp-slimstat' ),
|
1529 |
-
'cygwin' => __( 'Cygwin', 'wp-slimstat' ),
|
1530 |
-
'debian' => __( 'Debian', 'wp-slimstat' ),
|
1531 |
-
'digital unix' => __( 'Digital Unix', 'wp-slimstat' ),
|
1532 |
-
'fedora' => __( 'Fedora', 'wp-slimstat' ),
|
1533 |
-
'firefoxos' => __( 'Firefox OS', 'wp-slimstat' ),
|
1534 |
-
'freebsd' => __( 'FreeBSD', 'wp-slimstat' ),
|
1535 |
-
'gentoo' => __( 'Gentoo', 'wp-slimstat' ),
|
1536 |
-
'hp-ux' => __( 'HP-UX', 'wp-slimstat' ),
|
1537 |
-
'ios' => __( 'iPhone OS', 'wp-slimstat' ),
|
1538 |
-
'iphone os' => __( 'iPhone OS', 'wp-slimstat' ),
|
1539 |
-
'iphone osx' => __( 'iPhone OS X', 'wp-slimstat' ),
|
1540 |
-
'irix' => __( 'SGI / IRIX', 'wp-slimstat' ),
|
1541 |
-
'java' => __( 'Java', 'wp-slimstat' ),
|
1542 |
-
'kanotix' => __( 'Kanotix Linux', 'wp-slimstat' ),
|
1543 |
-
'knoppix' => __( 'Knoppix Linux', 'wp-slimstat' ),
|
1544 |
-
'linux' => __( 'Linux Generic', 'wp-slimstat' ),
|
1545 |
-
'mac' => __( 'Mac', 'wp-slimstat' ),
|
1546 |
-
'mac68k' => __( 'Mac 68k', 'wp-slimstat' ),
|
1547 |
-
'macos' => __( 'Mac OS X', 'wp-slimstat' ),
|
1548 |
-
'macosx' => __( 'Mac OS X', 'wp-slimstat' ),
|
1549 |
-
'macppc' => __( 'Mac PowerPC', 'wp-slimstat' ),
|
1550 |
-
'mandrake' => __( 'Mandrake Linux', 'wp-slimstat' ),
|
1551 |
-
'mandriva' => __( 'MS-DOS', 'wp-slimstat' ),
|
1552 |
-
'mepis' => __( 'MEPIS Linux', 'wp-slimstat' ),
|
1553 |
-
'ms-dos' => __( 'MS-DOS', 'wp-slimstat' ),
|
1554 |
-
'netbsd' => __( 'NetBSD', 'wp-slimstat' ),
|
1555 |
-
'nintendo' => __( 'Nintendo', 'wp-slimstat' ),
|
1556 |
-
'openbsd' => __( 'OpenBSD', 'wp-slimstat' ),
|
1557 |
-
'openvms' => __( 'OpenVMS', 'wp-slimstat' ),
|
1558 |
-
'os/2' => __( 'IBM OS/2', 'wp-slimstat' ),
|
1559 |
-
'palm' => __( 'Palm OS', 'wp-slimstat' ),
|
1560 |
-
'palmos' => __( 'Palm OS', 'wp-slimstat' ),
|
1561 |
-
'pclinuxos' => __( 'PCLinux OS', 'wp-slimstat' ),
|
1562 |
-
'playstation' => __( 'Playstation', 'wp-slimstat' ),
|
1563 |
-
'powertv' => __( 'PowerTV', 'wp-slimstat' ),
|
1564 |
-
'redhat' => __( 'RedHat Linux', 'wp-slimstat' ),
|
1565 |
-
'rim os' => __( 'Blackberry', 'wp-slimstat' ),
|
1566 |
-
'risc os' => __( 'Risc OS', 'wp-slimstat' ),
|
1567 |
-
'slackware' => __( 'Slackware Linux', 'wp-slimstat' ),
|
1568 |
-
'solaris' => __( 'Solaris', 'wp-slimstat' ),
|
1569 |
-
'sunos' => __( 'Sun OS', 'wp-slimstat' ),
|
1570 |
-
'suse' => __( 'SuSE Linux', 'wp-slimstat' ),
|
1571 |
-
'symbianos' => __( 'Symbian OS', 'wp-slimstat' ),
|
1572 |
-
'ubuntu' => __( 'Ubuntu', 'wp-slimstat' ),
|
1573 |
-
'unix' => __( 'Unix', 'wp-slimstat' ),
|
1574 |
-
'unknown' => __( 'Unknown', 'wp-slimstat' ),
|
1575 |
-
'xandros' => __( 'Xandros Linux', 'wp-slimstat' ),
|
1576 |
-
'wap' => __( 'WAP', 'wp-slimstat' ),
|
1577 |
-
'webos' => __( 'WebOS', 'wp-slimstat' ),
|
1578 |
-
'win10' => __( 'Windows 10', 'wp-slimstat' ),
|
1579 |
-
'win16' => __( 'Windows 16-bit', 'wp-slimstat' ),
|
1580 |
-
'win2000' => __( 'Windows 2000', 'wp-slimstat' ),
|
1581 |
-
'win2003' => __( 'Windows 2003', 'wp-slimstat' ),
|
1582 |
-
'win31' => __( 'Windows 3.1', 'wp-slimstat' ),
|
1583 |
-
'win32' => __( 'Windows 32-bit', 'wp-slimstat' ),
|
1584 |
-
'win7' => __( 'Windows 7', 'wp-slimstat' ),
|
1585 |
-
'win7' => __( 'Windows 7', 'wp-slimstat' ),
|
1586 |
-
'win8' => __( 'Windows 8', 'wp-slimstat' ),
|
1587 |
-
'win8.1' => __( 'Windows 8.1', 'wp-slimstat' ),
|
1588 |
-
'win95' => __( 'Windows 95', 'wp-slimstat' ),
|
1589 |
-
'win98' => __( 'Windows 98', 'wp-slimstat' ),
|
1590 |
-
'wince' => __( 'Windows CE', 'wp-slimstat' ),
|
1591 |
-
'winme' => __( 'Windows ME', 'wp-slimstat' ),
|
1592 |
-
'winnt' => __( 'Windows NT', 'wp-slimstat' ),
|
1593 |
-
'winphone7' => __( 'Windows Phone', 'wp-slimstat' ),
|
1594 |
-
'winphone7.5' => __( 'Windows Phone', 'wp-slimstat' ),
|
1595 |
-
'winphone8' => __( 'Windows Phone', 'wp-slimstat' ),
|
1596 |
-
'winphone8.1' => __( 'Windows RT / Runtime', 'wp-slimstat' ),
|
1597 |
-
'winrt' => __( 'Windows Phone', 'wp-slimstat' ),
|
1598 |
-
'winvista' => __( 'Windows Vista', 'wp-slimstat' ),
|
1599 |
-
'winxp' => __( 'Windows XP', 'wp-slimstat' ),
|
1600 |
-
'wyderos' => __( 'WyderOS', 'wp-slimstat' ),
|
1601 |
-
'zaurus' => __( 'Zaurus WAP', 'wp-slimstat' ),
|
1602 |
-
|
1603 |
-
// Operating System Families
|
1604 |
-
'p-unk' => __( 'Unknown', 'wp-slimstat' ),
|
1605 |
-
'p-' => __( 'Unknown', 'wp-slimstat' ),
|
1606 |
-
|
1607 |
-
'p-and' => __( 'Android', 'wp-slimstat' ),
|
1608 |
-
'p-bla' => __( 'BlackBerry', 'wp-slimstat' ),
|
1609 |
-
'p-chr' => __( 'Chrome OS', 'wp-slimstat' ),
|
1610 |
-
'p-fir' => __( 'Fire OS', 'wp-slimstat' ),
|
1611 |
-
'p-fre' => __( 'Linux FreeBSD', 'wp-slimstat' ),
|
1612 |
-
'p-ios' => __( 'Apple iOS', 'wp-slimstat' ),
|
1613 |
-
'p-jav' => __( 'Java-based OS', 'wp-slimstat' ),
|
1614 |
-
'p-lin' => __( 'Linux', 'wp-slimstat' ),
|
1615 |
-
'p-mac' => __( 'Apple', 'wp-slimstat' ),
|
1616 |
-
'p-rim' => __( 'Blackberry', 'wp-slimstat' ),
|
1617 |
-
'p-sym' => __( 'Symbian OS', 'wp-slimstat' ),
|
1618 |
-
'p-ubu' => __( 'Linux', 'wp-slimstat' ),
|
1619 |
-
'p-win' => __( 'Microsoft', 'wp-slimstat' ),
|
1620 |
-
|
1621 |
-
// Tracker Errors
|
1622 |
-
'e-101' => __( 'Invalid data signature. Try clearing your WordPress cache.', 'wp-slimstat' ),
|
1623 |
-
'e-102' => __( 'Invalid content type signature. Try clearing your WordPress cache.', 'wp-slimstat' ),
|
1624 |
-
'e-103' => __( 'Invalid content type format. Try clearing your WordPress cache.', 'wp-slimstat' ),
|
1625 |
-
'e-200' => __( 'Unspecified error while attempting to add a new record to the table', 'wp-slimstat' ),
|
1626 |
-
'e-201' => __( 'Malformed referrer URL', 'wp-slimstat' ),
|
1627 |
-
'e-202' => __( 'Pageview not tracked because the IP address format was invalid.', 'wp-slimstat' ),
|
1628 |
-
'e-203' => __( 'Malformed resource URL', 'wp-slimstat' ),
|
1629 |
-
'e-204' => __( 'Tracking is turned off, but it looks like the client-side code is still attached to your pages. Do you have a caching tool enabled?', 'wp-slimstat' ),
|
1630 |
-
'e-205' => __( 'Invalid MaxMind data file. Please <a target="_blank" href="https://slimstat.freshdesk.com/support/solutions/articles/12000039798-how-to-manually-install-the-maxmind-geolocation-data-file-">follow these steps</a> to download it manually.', 'wp-slimstat' ),
|
1631 |
-
);
|
1632 |
-
|
1633 |
-
// set_transient( 'slimstat_dynamic_strings', self::$dynamic_strings, 86400 );
|
1634 |
-
}
|
1635 |
-
}
|
1636 |
-
|
1637 |
-
public static function get_country_codes() {
|
1638 |
-
if ( empty( self::$dynamic_strings ) ) {
|
1639 |
-
self::init_dynamic_strings();
|
1640 |
-
}
|
1641 |
-
|
1642 |
-
$country_codes = array();
|
1643 |
-
foreach ( array_keys( self::$dynamic_strings ) as $a_code ) {
|
1644 |
-
if ( strpos( $a_code, 'c-', 0 ) !== false && strlen( $a_code ) > 2 && $a_code != 'c-xx' && $a_code != 'c-xy' ) {
|
1645 |
-
$country_codes[ strtolower( str_replace( 'c-', '', $a_code ) ) ] = self::$dynamic_strings[ $a_code ];
|
1646 |
-
}
|
1647 |
-
}
|
1648 |
-
|
1649 |
-
return $country_codes;
|
1650 |
-
}
|
1651 |
-
|
1652 |
-
public static function get_string( $_code = '' ) {
|
1653 |
-
if ( empty( self::$dynamic_strings ) ) {
|
1654 |
-
self::init_dynamic_strings();
|
1655 |
-
}
|
1656 |
-
|
1657 |
-
if ( !isset( self::$dynamic_strings[ $_code ] ) ) {
|
1658 |
-
return $_code;
|
1659 |
-
}
|
1660 |
-
|
1661 |
-
return self::$dynamic_strings[ $_code ];
|
1662 |
-
}
|
1663 |
-
}
|
18 |
* Init -- Sets things up.
|
19 |
*/
|
20 |
public static function init() {
|
|
|
21 |
// self::$admin_notice = "Just a quick reminder that, in our quest for improved performance, we are deprecating the two columns <em>type</em> and <em>event_description</em> in the events table, and consolidating that information in the <em>notes</em> field. Code will be added to Slimstat in a few released to actually drop these columns from the database. If you are using those two columns in your custom code, please feel free to contact our support team to discuss your options and how to update your code using the information collected by the new tracker.";
|
22 |
+
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 on what <em>the techies</em> out there call <a href='https://amiunique.org/fp' target='_blank'>browser fingerprinting</a>. With this technique, it is not necessary to rely on cookies to identify a specific user. This version of Slimstat implements <a href='https://github.com/Valve/fingerprintjs2' target='_blank'>FingerprintJS2</a>, a library that enables our tracker to record your users' unique fingerprint and local timezone (isn't it nice to know what time it was for the user when s/he 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. Your visitors' fingerprints are now available in the Access Log and in the Filter dropdown. In the next few months, we plan to introduce new reports and to leverage this new information to increase the plugin's overall accuracy.";
|
23 |
|
24 |
// Load language files
|
25 |
load_plugin_textdomain( 'wp-slimstat', false, '/wp-slimstat/languages' );
|
347 |
INDEX {$GLOBALS[ 'wpdb' ]->prefix}slim_stats_dt_idx (dt),
|
348 |
INDEX {$GLOBALS[ 'wpdb' ]->prefix}stats_resource_idx( resource( 20 ) ),
|
349 |
INDEX {$GLOBALS[ 'wpdb' ]->prefix}stats_browser_idx( browser( 10 ) ),
|
350 |
+
INDEX {$GLOBALS[ 'wpdb' ]->prefix}stats_searchterms_idx( searchterms( 15 ) ),
|
351 |
+
INDEX {$GLOBALS[ 'wpdb' ]->prefix}stats_fingerprint_idx( fingerprint( 20 ) )
|
352 |
) COLLATE utf8_general_ci $use_innodb";
|
353 |
|
354 |
// This table will track outbound links (clicks on links to external sites)
|
404 |
public static function update_tables_and_options() {
|
405 |
$my_wpdb = apply_filters( 'slimstat_custom_wpdb', $GLOBALS[ 'wpdb' ] );
|
406 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
407 |
// --- Updates for version 4.8.2 ---
|
408 |
if ( version_compare( wp_slimstat::$settings[ 'version' ], '4.8.2', '<' ) ) {
|
409 |
// Add new email column to database
|
453 |
}
|
454 |
// --- END: Updates for version 4.8.4.1 ---
|
455 |
|
456 |
+
// --- Updates for version 4.8.8 ---
|
457 |
+
if ( version_compare( wp_slimstat::$settings[ 'version' ], '4.8.8', '<' ) ) {
|
458 |
+
// Adding new index on the 'fingerprint' column for improved performance
|
459 |
+
if ( wp_slimstat::$settings[ 'db_indexes' ] == 'on' ) {
|
460 |
+
$my_wpdb->query( "ALTER TABLE {$GLOBALS[ 'wpdb' ]->prefix}slim_stats ADD INDEX {$GLOBALS[ 'wpdb' ]->prefix}stats_fingerprint_idx( fingerprint( 20 ) )" );
|
461 |
+
}
|
462 |
+
|
463 |
+
$my_wpdb->query( "UPDATE {$GLOBALS[ 'wpdb' ]->prefix}slim_stats SET notes = CONCAT( '[', REPLACE( notes, ';', '][' ), ']' ) WHERE notes NOT LIKE '[%'" );
|
464 |
+
}
|
465 |
+
|
466 |
// Now we can update the version stored in the database
|
467 |
wp_slimstat::$settings[ 'version' ] = wp_slimstat::$version;
|
468 |
wp_slimstat::$settings[ 'notice_latest_news' ] = 'on';
|
469 |
+
wp_slimstat::update_option( 'slimstat_options', wp_slimstat::$settings );
|
470 |
|
471 |
return true;
|
472 |
}
|
1045 |
}
|
1046 |
// END: _create_table
|
1047 |
}
|
1048 |
+
// END: class declaration
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
admin/view/index.php
CHANGED
@@ -124,7 +124,7 @@
|
|
124 |
</form>
|
125 |
|
126 |
<?php
|
127 |
-
if ( !file_exists( wp_slimstat::$
|
128 |
wp_slimstat_admin::show_message( sprintf( __( "<a href='%s' class='noslimstat'>Install MaxMind's GeoLite DB</a> to identify your visitors' country of origin.", 'wp-slimstat' ), self::$config_url . '6#wp-slimstat-third-party-libraries' ), 'warning', 'geolite' );
|
129 |
}
|
130 |
|
124 |
</form>
|
125 |
|
126 |
<?php
|
127 |
+
if ( !file_exists( wp_slimstat::$upload_dir . '/maxmind.mmdb' ) && wp_slimstat::$settings[ 'notice_geolite' ] == 'on' ) {
|
128 |
wp_slimstat_admin::show_message( sprintf( __( "<a href='%s' class='noslimstat'>Install MaxMind's GeoLite DB</a> to identify your visitors' country of origin.", 'wp-slimstat' ), self::$config_url . '6#wp-slimstat-third-party-libraries' ), 'warning', 'geolite' );
|
129 |
}
|
130 |
|
admin/view/right-now.php
CHANGED
@@ -6,6 +6,17 @@ if ( !function_exists( 'add_action' ) ) {
|
|
6 |
|
7 |
$is_dashboard = empty( $_REQUEST[ 'page' ] ) || $_REQUEST[ 'page' ] != 'slimview1';
|
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', 'ubuntu', 'win7', 'win8', 'win8.1', 'win10', 'winphone7', 'winphone7.5', 'winphone8', 'winphone8.1', 'winvista', 'winxp' );
|
@@ -111,14 +122,15 @@ for ( $i=0; $i < $count_page_results; $i++ ) {
|
|
111 |
if ( $i == 0 || $results[ $i - 1 ][ 'visit_id' ] != $results[ $i ][ 'visit_id' ] || $results[ $i - 1 ][ 'ip' ] != $results[ $i ][ 'ip' ] || $results[ $i - 1 ][ 'browser' ] != $results[ $i ][ 'browser' ] || $results[ $i - 1 ][ 'platform' ] != $results[ $i ][ 'platform' ] || $results[ $i - 1 ][ 'username' ] != $results[ $i ][ 'username' ] ) {
|
112 |
|
113 |
// Color-coded headers
|
114 |
-
$
|
|
|
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='" .
|
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='" .
|
122 |
}
|
123 |
|
124 |
// City, if tracked
|
@@ -143,12 +155,12 @@ for ( $i=0; $i < $count_page_results; $i++ ) {
|
|
143 |
if ( !empty( $results[ $i ][ 'platform' ] ) && in_array( $results[ $i ][ 'platform' ], $supported_os_icons ) ) {
|
144 |
$platform_filter = esc_attr( $results[ $i ][ 'platform' ] );
|
145 |
}
|
146 |
-
$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/{$platform_filter}.png' width='16' height='16' title='" .
|
147 |
|
148 |
// Language
|
149 |
$language_filter = '';
|
150 |
// if ( !empty( $results[ $i ][ 'language' ] ) && $results[ $i ][ 'language' ] != 'xx' ) {
|
151 |
-
// $language_filter = '<span class="pageview-language"><a class="slimstat-filter-link" href="' . wp_slimstat_reports::fs_url( 'language equals ' . $results[ $i ][ 'language' ] ) . '">' .
|
152 |
// }
|
153 |
|
154 |
// Browser Type
|
@@ -191,7 +203,13 @@ for ( $i=0; $i < $count_page_results; $i++ ) {
|
|
191 |
$screen_resolution = "<span class='pageview-screenres'>{$results[ $i ][ 'screen_width' ]}x{$results[ $i ][ 'screen_height' ]}</span>";
|
192 |
}
|
193 |
|
194 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
195 |
|
196 |
// Strip all the filter links, if this information is shown on the frontend
|
197 |
if ( !is_admin() ) {
|
@@ -215,7 +233,8 @@ for ( $i=0; $i < $count_page_results; $i++ ) {
|
|
215 |
}
|
216 |
else {
|
217 |
if ( !empty( $results[$i][ 'notes' ] ) ) {
|
218 |
-
$exploded_notes = explode( '
|
|
|
219 |
foreach ( $exploded_notes as $a_note ) {
|
220 |
if ( strpos( $a_note, 'results:') !== false ) {
|
221 |
$search_terms_info = $results[ $i ][ 'searchterms' ] . ' (' . $a_note . ')';
|
@@ -257,7 +276,7 @@ for ( $i=0; $i < $count_page_results; $i++ ) {
|
|
257 |
// Pageview Notes
|
258 |
$notes = '';
|
259 |
if ( is_admin() && !empty( $results[ $i ][ 'notes' ] ) ) {
|
260 |
-
$notes = str_replace(array('
|
261 |
$notes = "<i class='slimstat-font-edit slimstat-tooltip-trigger'><b class='slimstat-tooltip-content'>{$notes}</b></i>";
|
262 |
}
|
263 |
|
@@ -273,10 +292,11 @@ for ( $i=0; $i < $count_page_results; $i++ ) {
|
|
273 |
|
274 |
// The Outbound Links field might contain more than one link
|
275 |
if ( !empty( $results[ $i ][ 'outbound_resource' ] ) ) {
|
276 |
-
|
277 |
-
|
278 |
-
|
279 |
-
|
|
|
280 |
}
|
281 |
}
|
282 |
else {
|
6 |
|
7 |
$is_dashboard = empty( $_REQUEST[ 'page' ] ) || $_REQUEST[ 'page' ] != 'slimview1';
|
8 |
|
9 |
+
// Load the search engines list to mark pageviews accordingly
|
10 |
+
// Each entry contains the following attributes
|
11 |
+
// - params: which query string params is associated to the search keyword
|
12 |
+
// - backlink: format of the URL point to the search engine result page
|
13 |
+
// - charsets: list of charset used to encode the keywords
|
14 |
+
//
|
15 |
+
$search_engines = file_get_contents( plugin_dir_path( dirname( dirname( __FILE__ ) ) ) . 'vendor/matomo-searchengine.json' );
|
16 |
+
$search_engines = json_decode( $search_engines, TRUE );
|
17 |
+
// COMPLETE THIS FEATURE!!
|
18 |
+
|
19 |
+
|
20 |
// Available icons
|
21 |
$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' );
|
22 |
$supported_os_icons = array( 'android',' blackberry os', 'cellos', 'chromeos', 'ios', 'iphone osx', 'java', 'linux', 'macos', 'macosx', 'rim os', 'symbianos', 'ubuntu', 'win7', 'win8', 'win8.1', 'win10', 'winphone7', 'winphone7.5', 'winphone8', 'winphone8.1', 'winvista', 'winxp' );
|
122 |
if ( $i == 0 || $results[ $i - 1 ][ 'visit_id' ] != $results[ $i ][ 'visit_id' ] || $results[ $i - 1 ][ 'ip' ] != $results[ $i ][ 'ip' ] || $results[ $i - 1 ][ 'browser' ] != $results[ $i ][ 'browser' ] || $results[ $i - 1 ][ 'platform' ] != $results[ $i ][ 'platform' ] || $results[ $i - 1 ][ 'username' ] != $results[ $i ][ 'username' ] ) {
|
123 |
|
124 |
// Color-coded headers
|
125 |
+
$sek = wp_slimstat::get_lossy_url( parse_url( $results[ $i ][ 'referer' ], PHP_URL_HOST ) );
|
126 |
+
$highlight_row = !empty( $search_engines[ $sek ] ) ? ' is-search-engine' : ( ( $results[ $i ][ 'browser_type' ] != 1 ) ? ' is-direct' : '' );
|
127 |
|
128 |
// Country
|
129 |
if ( !empty( $results[ $i ][ 'country' ] ) && $results[ $i ][ 'country' ] != 'xx' ) {
|
130 |
+
$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='" . wp_slimstat_i18n::get_string( 'c-' . $results[ $i ][ 'country' ] ) . "'></a>";
|
131 |
}
|
132 |
else {
|
133 |
+
$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='" . wp_slimstat_i18n::get_string( 'c-' ) . "'></a>";
|
134 |
}
|
135 |
|
136 |
// City, if tracked
|
155 |
if ( !empty( $results[ $i ][ 'platform' ] ) && in_array( $results[ $i ][ 'platform' ], $supported_os_icons ) ) {
|
156 |
$platform_filter = esc_attr( $results[ $i ][ 'platform' ] );
|
157 |
}
|
158 |
+
$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/{$platform_filter}.png' width='16' height='16' title='" . wp_slimstat_i18n::get_string( $results[ $i ][ 'platform' ] ) . "'></a>";
|
159 |
|
160 |
// Language
|
161 |
$language_filter = '';
|
162 |
// if ( !empty( $results[ $i ][ 'language' ] ) && $results[ $i ][ 'language' ] != 'xx' ) {
|
163 |
+
// $language_filter = '<span class="pageview-language"><a class="slimstat-filter-link" href="' . wp_slimstat_reports::fs_url( 'language equals ' . $results[ $i ][ 'language' ] ) . '">' . wp_slimstat_i18n::get_string( 'l-' . $results[ $i ][ 'language' ] ) . '</a>';
|
164 |
// }
|
165 |
|
166 |
// Browser Type
|
203 |
$screen_resolution = "<span class='pageview-screenres'>{$results[ $i ][ 'screen_width' ]}x{$results[ $i ][ 'screen_height' ]}</span>";
|
204 |
}
|
205 |
|
206 |
+
// Fingerprint
|
207 |
+
$fingerprint = '';
|
208 |
+
if ( !empty( $results[ $i ][ 'fingerprint' ] ) ) {
|
209 |
+
$fingerprint = "<span class='pageview-screenres'><code><a class='slimstat-filter-link slimstat-tooltip-trigger' href='" . wp_slimstat_reports::fs_url( 'fingerprint equals ' . $results[ $i ][ 'fingerprint' ] ) . "' title='" . $results[ $i ][ 'fingerprint' ] . "'>" . substr( $results[ $i ][ 'fingerprint' ], 0, 8 ) . "</a></code></span>";
|
210 |
+
}
|
211 |
+
|
212 |
+
$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 $fingerprint $screen_resolution $language_filter</p>";
|
213 |
|
214 |
// Strip all the filter links, if this information is shown on the frontend
|
215 |
if ( !is_admin() ) {
|
233 |
}
|
234 |
else {
|
235 |
if ( !empty( $results[$i][ 'notes' ] ) ) {
|
236 |
+
$exploded_notes = explode( '][', substr( $results[ $i ][ 'notes' ], 1, -1 ) );
|
237 |
+
|
238 |
foreach ( $exploded_notes as $a_note ) {
|
239 |
if ( strpos( $a_note, 'results:') !== false ) {
|
240 |
$search_terms_info = $results[ $i ][ 'searchterms' ] . ' (' . $a_note . ')';
|
276 |
// Pageview Notes
|
277 |
$notes = '';
|
278 |
if ( is_admin() && !empty( $results[ $i ][ 'notes' ] ) ) {
|
279 |
+
$notes = str_replace( array( '][', ':', '[', ']' ), array( '<br/>', ': ', '', '' ), $results[ $i ][ 'notes' ] );
|
280 |
$notes = "<i class='slimstat-font-edit slimstat-tooltip-trigger'><b class='slimstat-tooltip-content'>{$notes}</b></i>";
|
281 |
}
|
282 |
|
292 |
|
293 |
// The Outbound Links field might contain more than one link
|
294 |
if ( !empty( $results[ $i ][ 'outbound_resource' ] ) ) {
|
295 |
+
if ( substr( $results[ $i ][ 'outbound_resource' ], 0, 1 ) != '#' ) {
|
296 |
+
$results[ $i ][ 'outbound_resource' ] = "<a class='inline-icon spaced slimstat-font-logout slimstat-tooltip-trigger' target='_blank' title='" . htmlentities( __( 'Open this outbound link in a new window', 'wp-slimstat' ), ENT_QUOTES, 'UTF-8' ) . "' href='{$results[ $i ][ 'outbound_resource' ]}'></a> {$results[ $i ][ 'outbound_resource' ]}";
|
297 |
+
}
|
298 |
+
else {
|
299 |
+
$results[ $i ][ 'outbound_resource' ] = "<i class='inline-icon spaced slimstat-font-logout'></i> {$results[ $i ][ 'outbound_resource' ]}";
|
300 |
}
|
301 |
}
|
302 |
else {
|
admin/view/wp-slimstat-db.php
CHANGED
@@ -37,6 +37,7 @@ class wp_slimstat_db {
|
|
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' ),
|
@@ -916,7 +917,7 @@ class wp_slimstat_db {
|
|
916 |
return self::get_results( "
|
917 |
SELECT te.*, t1.resource
|
918 |
FROM {$GLOBALS[ 'wpdb' ]->prefix}slim_events te INNER JOIN {$GLOBALS[ 'wpdb' ]->prefix}slim_stats t1 ON te.id = t1.id
|
919 |
-
WHERE " . wp_slimstat_db::get_combined_where( 'te.notes NOT LIKE "
|
920 |
ORDER BY te.dt DESC",
|
921 |
'te.*, t1.resource',
|
922 |
'dt DESC'
|
@@ -1016,7 +1017,7 @@ class wp_slimstat_db {
|
|
1016 |
}
|
1017 |
else {
|
1018 |
$from = "{$GLOBALS['wpdb']->prefix}slim_events te INNER JOIN {$GLOBALS['wpdb']->prefix}slim_stats t1 ON te.id = t1.id";
|
1019 |
-
$where = wp_slimstat_db::get_combined_where( 'notes NOT LIKE "
|
1020 |
}
|
1021 |
|
1022 |
return self::get_results( "
|
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 |
+
'fingerprint' => array( __( 'Fingerprint', 'wp-slimstat' ), 'varchar' ),
|
41 |
'page_performance' => array( __( 'Page Speed', 'wp-slimstat' ), 'int' ),
|
42 |
'no_filter_selected_2' => array( '', 'none' ),
|
43 |
'no_filter_selected_3' => array( __( '-- Advanced filters --', 'wp-slimstat' ), 'none' ),
|
917 |
return self::get_results( "
|
918 |
SELECT te.*, t1.resource
|
919 |
FROM {$GLOBALS[ 'wpdb' ]->prefix}slim_events te INNER JOIN {$GLOBALS[ 'wpdb' ]->prefix}slim_stats t1 ON te.id = t1.id
|
920 |
+
WHERE " . wp_slimstat_db::get_combined_where( 'te.notes NOT LIKE "_ype:click%"', 'te.notes', true, 't1' ) . "
|
921 |
ORDER BY te.dt DESC",
|
922 |
'te.*, t1.resource',
|
923 |
'dt DESC'
|
1017 |
}
|
1018 |
else {
|
1019 |
$from = "{$GLOBALS['wpdb']->prefix}slim_events te INNER JOIN {$GLOBALS['wpdb']->prefix}slim_stats t1 ON te.id = t1.id";
|
1020 |
+
$where = wp_slimstat_db::get_combined_where( 'notes NOT LIKE "_ype:click%"', 'notes', true, 't1' );
|
1021 |
}
|
1022 |
|
1023 |
return self::get_results( "
|
admin/view/wp-slimstat-reports.php
CHANGED
@@ -26,6 +26,9 @@ class wp_slimstat_reports {
|
|
26 |
include_once( 'wp-slimstat-db.php' );
|
27 |
wp_slimstat_db::init();
|
28 |
|
|
|
|
|
|
|
29 |
// Define all the reports
|
30 |
//
|
31 |
// Parameters
|
@@ -111,9 +114,7 @@ class wp_slimstat_reports {
|
|
111 |
'callback' => array( __CLASS__, 'raw_results_to_html' ),
|
112 |
'callback_args' => array(
|
113 |
'type' => 'top',
|
114 |
-
'columns' => '
|
115 |
-
'as_column' => 'resource',
|
116 |
-
'filter_op' => 'contains',
|
117 |
'raw' => array( 'wp_slimstat_db', 'get_top' )
|
118 |
),
|
119 |
'classes' => array( 'normal' ),
|
@@ -636,7 +637,7 @@ class wp_slimstat_reports {
|
|
636 |
'tooltip' => __( 'You can configure Slimstat to track specific file extensions as downloads.', 'wp-slimstat' )
|
637 |
),
|
638 |
'slim_p4_10' => array(
|
639 |
-
'title' => __( 'Recent Events', 'wp-slimstat' ),
|
640 |
'callback' => array( __CLASS__, 'show_events' ),
|
641 |
'callback_args' => array(
|
642 |
'type' => 'recent',
|
@@ -660,7 +661,7 @@ class wp_slimstat_reports {
|
|
660 |
'locations' => array( 'slimview4' )
|
661 |
),
|
662 |
'slim_p4_12' => array(
|
663 |
-
'title' => __( 'Top Events', 'wp-slimstat' ),
|
664 |
'callback' => array( __CLASS__, 'show_events' ),
|
665 |
'callback_args' => array(
|
666 |
'type' => 'top',
|
@@ -904,6 +905,7 @@ class wp_slimstat_reports {
|
|
904 |
$header_classes = !empty( self::$reports[ $_report_id ][ 'classes' ] ) ? implode( ' ', self::$reports[ $_report_id ][ 'classes' ] ) : '';
|
905 |
$header_buttons = '';
|
906 |
$header_tooltip = '';
|
|
|
907 |
|
908 |
// Don't show the header buttons on the frontend
|
909 |
if ( is_admin() ) {
|
@@ -916,9 +918,10 @@ class wp_slimstat_reports {
|
|
916 |
$header_buttons = apply_filters( 'slimstat_report_header_buttons', $header_buttons, $_report_id );
|
917 |
$header_buttons = '<div class="slimstat-header-buttons">' . $header_buttons . '</div>';
|
918 |
$header_tooltip = !empty( self::$reports[ $_report_id ][ 'tooltip' ] ) ? '<i class="slimstat-tooltip-trigger corner"><span class="slimstat-tooltip-content">' . self::$reports[ $_report_id ][ 'tooltip' ] . '</span></i>' : '';
|
|
|
919 |
}
|
920 |
|
921 |
-
echo "<div class='postbox $header_classes' id='$_report_id'>{$header_buttons}
|
922 |
}
|
923 |
|
924 |
public static function report_footer(){
|
@@ -1062,7 +1065,7 @@ class wp_slimstat_reports {
|
|
1062 |
|
1063 |
case 'country':
|
1064 |
$row_details .= __( 'Code', 'wp-slimstat' ) . ": {$results[ $i ][ 'country' ]}";
|
1065 |
-
$element_value =
|
1066 |
break;
|
1067 |
|
1068 |
case 'id':
|
@@ -1077,17 +1080,18 @@ class wp_slimstat_reports {
|
|
1077 |
|
1078 |
case 'language':
|
1079 |
$row_details = __( 'Code', 'wp-slimstat' ) . ": {$results[ $i ][ $_args[ 'columns' ] ]}";
|
1080 |
-
$element_value =
|
1081 |
break;
|
1082 |
|
1083 |
case 'platform':
|
1084 |
$row_details = __( 'Code', 'wp-slimstat' ).": {$results[ $i ][ $_args[ 'columns' ] ]}";
|
1085 |
-
$element_value =
|
1086 |
$results[ $i ][ $_args[ 'columns' ] ] = str_replace( 'p-', '', $results[ $i ][ $_args[ 'columns' ] ] );
|
1087 |
break;
|
1088 |
|
1089 |
case 'referer':
|
1090 |
$element_value = str_replace( array( '<', '>' ), array( '<', '>' ), urldecode( $results[ $i ][ $_args[ 'columns' ] ] ) );
|
|
|
1091 |
break;
|
1092 |
|
1093 |
case 'resource':
|
@@ -1163,7 +1167,7 @@ class wp_slimstat_reports {
|
|
1163 |
}
|
1164 |
|
1165 |
// Some columns require a special post-treatment
|
1166 |
-
if ( $_args[ 'columns' ] == 'resource' && strpos( $_args['where'], '404' ) === false ) {
|
1167 |
$base_url = '';
|
1168 |
if (isset($results[$i]['blog_id'])){
|
1169 |
$base_url = parse_url(get_site_url($results[$i]['blog_id']));
|
@@ -1556,7 +1560,7 @@ class wp_slimstat_reports {
|
|
1556 |
|
1557 |
$data_areas = array();
|
1558 |
|
1559 |
-
foreach (
|
1560 |
$data_areas[ $a_code ] = '{id:"' . $a_code . '",balloonText:"' . $a_string . ': 0",value:0,color:"#ededed"}';
|
1561 |
}
|
1562 |
|
@@ -1570,7 +1574,7 @@ class wp_slimstat_reports {
|
|
1570 |
|
1571 |
$percentage = ( wp_slimstat_db::$pageviews > 0 ) ? sprintf( "%01.2f", ( 100 * $a_country[ 'counthits' ] / wp_slimstat_db::$pageviews ) ) : 0;
|
1572 |
$percentage_format = number_format_i18n( $percentage, 2 );
|
1573 |
-
$balloon_text =
|
1574 |
$data_areas[ $current_country_code ] = '{id:"' . strtoupper( $a_country[ 'country' ] ) . '",balloonText:"' . $balloon_text . '",value:' . $percentage . '}';
|
1575 |
|
1576 |
if ( $percentage > $max ) {
|
26 |
include_once( 'wp-slimstat-db.php' );
|
27 |
wp_slimstat_db::init();
|
28 |
|
29 |
+
// Include the localization library
|
30 |
+
include_once( plugin_dir_path( dirname( dirname( __FILE__ ) ) ) . 'languages/index.php' );
|
31 |
+
|
32 |
// Define all the reports
|
33 |
//
|
34 |
// Parameters
|
114 |
'callback' => array( __CLASS__, 'raw_results_to_html' ),
|
115 |
'callback_args' => array(
|
116 |
'type' => 'top',
|
117 |
+
'columns' => 'resource',
|
|
|
|
|
118 |
'raw' => array( 'wp_slimstat_db', 'get_top' )
|
119 |
),
|
120 |
'classes' => array( 'normal' ),
|
637 |
'tooltip' => __( 'You can configure Slimstat to track specific file extensions as downloads.', 'wp-slimstat' )
|
638 |
),
|
639 |
'slim_p4_10' => array(
|
640 |
+
'title' => __( 'Recent Custom Events', 'wp-slimstat' ),
|
641 |
'callback' => array( __CLASS__, 'show_events' ),
|
642 |
'callback_args' => array(
|
643 |
'type' => 'recent',
|
661 |
'locations' => array( 'slimview4' )
|
662 |
),
|
663 |
'slim_p4_12' => array(
|
664 |
+
'title' => __( 'Top Custom Events', 'wp-slimstat' ),
|
665 |
'callback' => array( __CLASS__, 'show_events' ),
|
666 |
'callback_args' => array(
|
667 |
'type' => 'top',
|
905 |
$header_classes = !empty( self::$reports[ $_report_id ][ 'classes' ] ) ? implode( ' ', self::$reports[ $_report_id ][ 'classes' ] ) : '';
|
906 |
$header_buttons = '';
|
907 |
$header_tooltip = '';
|
908 |
+
$widget_title = '';
|
909 |
|
910 |
// Don't show the header buttons on the frontend
|
911 |
if ( is_admin() ) {
|
918 |
$header_buttons = apply_filters( 'slimstat_report_header_buttons', $header_buttons, $_report_id );
|
919 |
$header_buttons = '<div class="slimstat-header-buttons">' . $header_buttons . '</div>';
|
920 |
$header_tooltip = !empty( self::$reports[ $_report_id ][ 'tooltip' ] ) ? '<i class="slimstat-tooltip-trigger corner"><span class="slimstat-tooltip-content">' . self::$reports[ $_report_id ][ 'tooltip' ] . '</span></i>' : '';
|
921 |
+
$widget_title = "<h3 data-report-id='{$_report_id}'>" . self::$reports[ $_report_id ][ 'title' ] . "{$header_tooltip}</h3>";
|
922 |
}
|
923 |
|
924 |
+
echo "<div class='postbox $header_classes' id='$_report_id'>{$header_buttons} $widget_title <div class='inside'>";
|
925 |
}
|
926 |
|
927 |
public static function report_footer(){
|
1065 |
|
1066 |
case 'country':
|
1067 |
$row_details .= __( 'Code', 'wp-slimstat' ) . ": {$results[ $i ][ 'country' ]}";
|
1068 |
+
$element_value = wp_slimstat_i18n::get_string( 'c-' . $results[ $i ][ 'country' ] );
|
1069 |
break;
|
1070 |
|
1071 |
case 'id':
|
1080 |
|
1081 |
case 'language':
|
1082 |
$row_details = __( 'Code', 'wp-slimstat' ) . ": {$results[ $i ][ $_args[ 'columns' ] ]}";
|
1083 |
+
$element_value = wp_slimstat_i18n::get_string( 'l-' . $results[ $i ][ $_args[ 'columns' ] ] );
|
1084 |
break;
|
1085 |
|
1086 |
case 'platform':
|
1087 |
$row_details = __( 'Code', 'wp-slimstat' ).": {$results[ $i ][ $_args[ 'columns' ] ]}";
|
1088 |
+
$element_value = wp_slimstat_i18n::get_string( $results[ $i ][ $_args[ 'columns' ] ] );
|
1089 |
$results[ $i ][ $_args[ 'columns' ] ] = str_replace( 'p-', '', $results[ $i ][ $_args[ 'columns' ] ] );
|
1090 |
break;
|
1091 |
|
1092 |
case 'referer':
|
1093 |
$element_value = str_replace( array( '<', '>' ), array( '<', '>' ), urldecode( $results[ $i ][ $_args[ 'columns' ] ] ) );
|
1094 |
+
$results[ $i ][ $_args[ 'columns' ] ] = 'https://' . $results[ $i ][ $_args[ 'columns' ] ];
|
1095 |
break;
|
1096 |
|
1097 |
case 'resource':
|
1167 |
}
|
1168 |
|
1169 |
// Some columns require a special post-treatment
|
1170 |
+
if ( $_args[ 'columns' ] == 'resource' && !empty( $_args[ 'where' ] ) && strpos( $_args[ 'where' ], '404' ) === false ) {
|
1171 |
$base_url = '';
|
1172 |
if (isset($results[$i]['blog_id'])){
|
1173 |
$base_url = parse_url(get_site_url($results[$i]['blog_id']));
|
1560 |
|
1561 |
$data_areas = array();
|
1562 |
|
1563 |
+
foreach ( wp_slimstat_i18n::get_country_codes() as $a_code => $a_string ) {
|
1564 |
$data_areas[ $a_code ] = '{id:"' . $a_code . '",balloonText:"' . $a_string . ': 0",value:0,color:"#ededed"}';
|
1565 |
}
|
1566 |
|
1574 |
|
1575 |
$percentage = ( wp_slimstat_db::$pageviews > 0 ) ? sprintf( "%01.2f", ( 100 * $a_country[ 'counthits' ] / wp_slimstat_db::$pageviews ) ) : 0;
|
1576 |
$percentage_format = number_format_i18n( $percentage, 2 );
|
1577 |
+
$balloon_text = wp_slimstat_i18n::get_string( 'c-' . $a_country[ 'country' ], 'wp-slimstat' ) . ': ' . $percentage_format . '% (' . number_format_i18n( $a_country[ 'counthits' ] ) . ')';
|
1578 |
$data_areas[ $current_country_code ] = '{id:"' . strtoupper( $a_country[ 'country' ] ) . '",balloonText:"' . $balloon_text . '",value:' . $percentage . '}';
|
1579 |
|
1580 |
if ( $percentage > $max ) {
|
languages/index.php
CHANGED
@@ -1,2 +1,609 @@
|
|
1 |
<?php
|
2 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
<?php
|
2 |
+
class wp_slimstat_i18n {
|
3 |
+
public static $dynamic_strings = array();
|
4 |
+
|
5 |
+
public static function init_dynamic_strings() {
|
6 |
+
if ( false === ( self::$dynamic_strings = get_transient( 'slimstat_dynamic_strings' ) ) ) {
|
7 |
+
self::$dynamic_strings = array(
|
8 |
+
'xx' => __( 'Unknown', 'wp-slimstat' ),
|
9 |
+
|
10 |
+
// Countries
|
11 |
+
'c-' => __( 'Unknown', 'wp-slimstat' ),
|
12 |
+
'c-xx' => __( 'Unknown', 'wp-slimstat' ),
|
13 |
+
'c-xy' => __( 'Local IP Address', 'wp-slimstat' ),
|
14 |
+
|
15 |
+
'c-af' => __( 'Afghanistan', 'wp-slimstat' ),
|
16 |
+
'c-ax' => __( 'Aland Islands', 'wp-slimstat' ),
|
17 |
+
'c-al' => __( 'Albania', 'wp-slimstat' ),
|
18 |
+
'c-dz' => __( 'Algeria', 'wp-slimstat' ),
|
19 |
+
'c-ad' => __( 'Andorra', 'wp-slimstat' ),
|
20 |
+
'c-ao' => __( 'Angola', 'wp-slimstat' ),
|
21 |
+
'c-ai' => __( 'Anguilla', 'wp-slimstat' ),
|
22 |
+
'c-ag' => __( 'Antigua and Barbuda', 'wp-slimstat' ),
|
23 |
+
'c-ar' => __( 'Argentina', 'wp-slimstat' ),
|
24 |
+
'c-am' => __( 'Armenia', 'wp-slimstat' ),
|
25 |
+
'c-aw' => __( 'Aruba', 'wp-slimstat' ),
|
26 |
+
'c-au' => __( 'Australia', 'wp-slimstat' ),
|
27 |
+
'c-at' => __( 'Austria', 'wp-slimstat' ),
|
28 |
+
'c-az' => __( 'Azerbaijan', 'wp-slimstat' ),
|
29 |
+
'c-bs' => __( 'Bahamas', 'wp-slimstat' ),
|
30 |
+
'c-bh' => __( 'Bahrain', 'wp-slimstat' ),
|
31 |
+
'c-bd' => __( 'Bangladesh', 'wp-slimstat' ),
|
32 |
+
'c-bb' => __( 'Barbados', 'wp-slimstat' ),
|
33 |
+
'c-by' => __( 'Belarus', 'wp-slimstat' ),
|
34 |
+
'c-be' => __( 'Belgium', 'wp-slimstat' ),
|
35 |
+
'c-bz' => __( 'Belize', 'wp-slimstat' ),
|
36 |
+
'c-bj' => __( 'Benin', 'wp-slimstat' ),
|
37 |
+
'c-bm' => __( 'Bermuda', 'wp-slimstat' ),
|
38 |
+
'c-bt' => __( 'Bhutan', 'wp-slimstat' ),
|
39 |
+
'c-bo' => __( 'Bolivia', 'wp-slimstat' ),
|
40 |
+
'c-ba' => __( 'Bosnia and Herzegovina', 'wp-slimstat' ),
|
41 |
+
'c-bw' => __( 'Botswana', 'wp-slimstat' ),
|
42 |
+
'c-br' => __( 'Brazil', 'wp-slimstat' ),
|
43 |
+
'c-bn' => __( 'Brunei Darussalam', 'wp-slimstat' ),
|
44 |
+
'c-bg' => __( 'Bulgaria', 'wp-slimstat' ),
|
45 |
+
'c-bf' => __( 'Burkina Faso', 'wp-slimstat' ),
|
46 |
+
'c-bi' => __( 'Burundi', 'wp-slimstat' ),
|
47 |
+
'c-kh' => __( 'Cambodia', 'wp-slimstat' ),
|
48 |
+
'c-cm' => __( 'Cameroon', 'wp-slimstat' ),
|
49 |
+
'c-ca' => __( 'Canada', 'wp-slimstat' ),
|
50 |
+
'c-cv' => __( 'Cape Verde', 'wp-slimstat' ),
|
51 |
+
'c-ky' => __( 'Cayman Islands', 'wp-slimstat' ),
|
52 |
+
'c-cf' => __( 'Central African Republic', 'wp-slimstat' ),
|
53 |
+
'c-td' => __( 'Chad', 'wp-slimstat' ),
|
54 |
+
'c-cl' => __( 'Chile', 'wp-slimstat' ),
|
55 |
+
'c-cn' => __( 'China', 'wp-slimstat' ),
|
56 |
+
'c-co' => __( 'Colombia', 'wp-slimstat' ),
|
57 |
+
'c-km' => __( 'Comoros', 'wp-slimstat' ),
|
58 |
+
'c-cg' => __( 'Congo', 'wp-slimstat' ),
|
59 |
+
'c-cd' => __( 'The Democratic Republic of the Congo', 'wp-slimstat' ),
|
60 |
+
'c-cr' => __( 'Costa Rica', 'wp-slimstat' ),
|
61 |
+
'c-ci' => __( 'Côte d\'Ivoire', 'wp-slimstat' ),
|
62 |
+
'c-hr' => __( 'Croatia', 'wp-slimstat' ),
|
63 |
+
'c-cu' => __( 'Cuba', 'wp-slimstat' ),
|
64 |
+
'c-cy' => __( 'Cyprus', 'wp-slimstat' ),
|
65 |
+
'c-cz' => __( 'Czech Republic', 'wp-slimstat' ),
|
66 |
+
'c-dk' => __( 'Denmark', 'wp-slimstat' ),
|
67 |
+
'c-dj' => __( 'Djibouti', 'wp-slimstat' ),
|
68 |
+
'c-dm' => __( 'Dominica', 'wp-slimstat' ),
|
69 |
+
'c-do' => __( 'Dominican Republic', 'wp-slimstat' ),
|
70 |
+
'c-ec' => __( 'Ecuador', 'wp-slimstat' ),
|
71 |
+
'c-eg' => __( 'Egypt', 'wp-slimstat' ),
|
72 |
+
'c-sv' => __( 'El Salvador', 'wp-slimstat' ),
|
73 |
+
'c-gq' => __( 'Equatorial Guinea', 'wp-slimstat' ),
|
74 |
+
'c-er' => __( 'Eritrea', 'wp-slimstat' ),
|
75 |
+
'c-ee' => __( 'Estonia', 'wp-slimstat' ),
|
76 |
+
'c-et' => __( 'Ethiopia', 'wp-slimstat' ),
|
77 |
+
'c-fo' => __( 'Faroe Islands', 'wp-slimstat' ),
|
78 |
+
'c-fk' => __( 'Falkland Islands (Malvinas)', 'wp-slimstat' ),
|
79 |
+
'c-fj' => __( 'Fiji', 'wp-slimstat' ),
|
80 |
+
'c-fi' => __( 'Finland', 'wp-slimstat' ),
|
81 |
+
'c-fr' => __( 'France', 'wp-slimstat' ),
|
82 |
+
'c-gf' => __( 'French Guiana', 'wp-slimstat' ),
|
83 |
+
'c-ga' => __( 'Gabon', 'wp-slimstat' ),
|
84 |
+
'c-gm' => __( 'Gambia', 'wp-slimstat' ),
|
85 |
+
'c-ge' => __( 'Georgia', 'wp-slimstat' ),
|
86 |
+
'c-de' => __( 'Germany', 'wp-slimstat' ),
|
87 |
+
'c-gh' => __( 'Ghana', 'wp-slimstat' ),
|
88 |
+
'c-gr' => __( 'Greece', 'wp-slimstat' ),
|
89 |
+
'c-gl' => __( 'Greenland', 'wp-slimstat' ),
|
90 |
+
'c-gd' => __( 'Grenada', 'wp-slimstat' ),
|
91 |
+
'c-gp' => __( 'Guadeloupe', 'wp-slimstat' ),
|
92 |
+
'c-gt' => __( 'Guatemala', 'wp-slimstat' ),
|
93 |
+
'c-gn' => __( 'Guinea', 'wp-slimstat' ),
|
94 |
+
'c-gw' => __( 'Guinea-Bissau', 'wp-slimstat' ),
|
95 |
+
'c-gy' => __( 'Guyana', 'wp-slimstat' ),
|
96 |
+
'c-ht' => __( 'Haiti', 'wp-slimstat' ),
|
97 |
+
'c-hn' => __( 'Honduras', 'wp-slimstat' ),
|
98 |
+
'c-hk' => __( 'Hong Kong', 'wp-slimstat' ),
|
99 |
+
'c-hu' => __( 'Hungary', 'wp-slimstat' ),
|
100 |
+
'c-is' => __( 'Iceland', 'wp-slimstat' ),
|
101 |
+
'c-in' => __( 'India', 'wp-slimstat' ),
|
102 |
+
'c-id' => __( 'Indonesia', 'wp-slimstat' ),
|
103 |
+
'c-ir' => __( 'Islamic Republic of Iran', 'wp-slimstat' ),
|
104 |
+
'c-iq' => __( 'Iraq', 'wp-slimstat' ),
|
105 |
+
'c-ie' => __( 'Ireland', 'wp-slimstat' ),
|
106 |
+
'c-il' => __( 'Israel', 'wp-slimstat' ),
|
107 |
+
'c-it' => __( 'Italy', 'wp-slimstat' ),
|
108 |
+
'c-jm' => __( 'Jamaica', 'wp-slimstat' ),
|
109 |
+
'c-jp' => __( 'Japan', 'wp-slimstat' ),
|
110 |
+
'c-jo' => __( 'Jordan', 'wp-slimstat' ),
|
111 |
+
'c-kz' => __( 'Kazakhstan', 'wp-slimstat' ),
|
112 |
+
'c-ke' => __( 'Kenya', 'wp-slimstat' ),
|
113 |
+
'c-nr' => __( 'Nauru', 'wp-slimstat' ),
|
114 |
+
'c-kp' => __( 'Democratic People\'s Republic of Korea', 'wp-slimstat' ),
|
115 |
+
'c-kr' => __( 'Republic of Korea', 'wp-slimstat' ),
|
116 |
+
'c-kv' => __( 'Kosovo', 'wp-slimstat' ),
|
117 |
+
'c-kw' => __( 'Kuwait', 'wp-slimstat' ),
|
118 |
+
'c-kg' => __( 'Kyrgyzstan', 'wp-slimstat' ),
|
119 |
+
'c-la' => __( 'Lao People\'s Democratic Republic', 'wp-slimstat' ),
|
120 |
+
'c-lv' => __( 'Latvia', 'wp-slimstat' ),
|
121 |
+
'c-lb' => __( 'Lebanon', 'wp-slimstat' ),
|
122 |
+
'c-ls' => __( 'Lesotho', 'wp-slimstat' ),
|
123 |
+
'c-lr' => __( 'Liberia', 'wp-slimstat' ),
|
124 |
+
'c-ly' => __( 'Libyan Arab Jamahiriya', 'wp-slimstat' ),
|
125 |
+
'c-li' => __( 'Liechtenstein', 'wp-slimstat' ),
|
126 |
+
'c-lt' => __( 'Lithuania', 'wp-slimstat' ),
|
127 |
+
'c-lu' => __( 'Luxembourg', 'wp-slimstat' ),
|
128 |
+
'c-mk' => __( 'The Former Yugoslav Republic of Macedonia', 'wp-slimstat' ),
|
129 |
+
'c-mg' => __( 'Madagascar', 'wp-slimstat' ),
|
130 |
+
'c-mw' => __( 'Malawi', 'wp-slimstat' ),
|
131 |
+
'c-my' => __( 'Malaysia', 'wp-slimstat' ),
|
132 |
+
'c-ml' => __( 'Mali', 'wp-slimstat' ),
|
133 |
+
'c-mt' => __( 'Malta', 'wp-slimstat' ),
|
134 |
+
'c-mq' => __( 'Martinique', 'wp-slimstat' ),
|
135 |
+
'c-mr' => __( 'Mauritania', 'wp-slimstat' ),
|
136 |
+
'c-mu' => __( 'Mauritius', 'wp-slimstat' ),
|
137 |
+
'c-mx' => __( 'Mexico', 'wp-slimstat' ),
|
138 |
+
'c-md' => __( 'Moldova', 'wp-slimstat' ),
|
139 |
+
'c-mn' => __( 'Mongolia', 'wp-slimstat' ),
|
140 |
+
'c-me' => __( 'Montenegro', 'wp-slimstat' ),
|
141 |
+
'c-ms' => __( 'Montserrat', 'wp-slimstat' ),
|
142 |
+
'c-ma' => __( 'Morocco', 'wp-slimstat' ),
|
143 |
+
'c-mz' => __( 'Mozambique', 'wp-slimstat' ),
|
144 |
+
'c-mm' => __( 'Myanmar', 'wp-slimstat' ),
|
145 |
+
'c-na' => __( 'Namibia', 'wp-slimstat' ),
|
146 |
+
'c-np' => __( 'Nepal', 'wp-slimstat' ),
|
147 |
+
'c-nl' => __( 'Netherlands', 'wp-slimstat' ),
|
148 |
+
'c-nc' => __( 'New Caledonia', 'wp-slimstat' ),
|
149 |
+
'c-nz' => __( 'New Zealand', 'wp-slimstat' ),
|
150 |
+
'c-ni' => __( 'Nicaragua', 'wp-slimstat' ),
|
151 |
+
'c-ne' => __( 'Niger', 'wp-slimstat' ),
|
152 |
+
'c-ng' => __( 'Nigeria', 'wp-slimstat' ),
|
153 |
+
'c-no' => __( 'Norway', 'wp-slimstat' ),
|
154 |
+
'c-om' => __( 'Oman', 'wp-slimstat' ),
|
155 |
+
'c-pk' => __( 'Pakistan', 'wp-slimstat' ),
|
156 |
+
'c-pw' => __( 'Palau', 'wp-slimstat' ),
|
157 |
+
'c-ps' => __( 'Occupied Palestinian Territory', 'wp-slimstat' ),
|
158 |
+
'c-pa' => __( 'Panama', 'wp-slimstat' ),
|
159 |
+
'c-pg' => __( 'Papua New Guinea', 'wp-slimstat' ),
|
160 |
+
'c-py' => __( 'Paraguay', 'wp-slimstat' ),
|
161 |
+
'c-pe' => __( 'Peru', 'wp-slimstat' ),
|
162 |
+
'c-ph' => __( 'Philippines', 'wp-slimstat' ),
|
163 |
+
'c-pl' => __( 'Poland', 'wp-slimstat' ),
|
164 |
+
'c-pt' => __( 'Portugal', 'wp-slimstat' ),
|
165 |
+
'c-pr' => __( 'Puerto Rico', 'wp-slimstat' ),
|
166 |
+
'c-qa' => __( 'Qatar', 'wp-slimstat' ),
|
167 |
+
'c-re' => __( 'Réunion', 'wp-slimstat' ),
|
168 |
+
'c-ro' => __( 'Romania', 'wp-slimstat' ),
|
169 |
+
'c-ru' => __( 'Russian Federation', 'wp-slimstat' ),
|
170 |
+
'c-rw' => __( 'Rwanda', 'wp-slimstat' ),
|
171 |
+
'c-kn' => __( 'Saint Kitts and Nevis', 'wp-slimstat' ),
|
172 |
+
'c-lc' => __( 'Saint Lucia', 'wp-slimstat' ),
|
173 |
+
'c-mf' => __( 'Saint Martin', 'wp-slimstat' ),
|
174 |
+
'c-vc' => __( 'Saint Vincent and the Grenadines', 'wp-slimstat' ),
|
175 |
+
'c-ws' => __( 'Samoa', 'wp-slimstat' ),
|
176 |
+
'c-st' => __( 'Sao Tome and Principe', 'wp-slimstat' ),
|
177 |
+
'c-sa' => __( 'Saudi Arabia', 'wp-slimstat' ),
|
178 |
+
'c-sn' => __( 'Senegal', 'wp-slimstat' ),
|
179 |
+
'c-rs' => __( 'Serbia', 'wp-slimstat' ),
|
180 |
+
'c-sl' => __( 'Sierra Leone', 'wp-slimstat' ),
|
181 |
+
'c-sg' => __( 'Singapore', 'wp-slimstat' ),
|
182 |
+
'c-sk' => __( 'Slovakia', 'wp-slimstat' ),
|
183 |
+
'c-si' => __( 'Slovenia', 'wp-slimstat' ),
|
184 |
+
'c-sb' => __( 'Solomon Islands', 'wp-slimstat' ),
|
185 |
+
'c-so' => __( 'Somalia', 'wp-slimstat' ),
|
186 |
+
'c-za' => __( 'South Africa', 'wp-slimstat' ),
|
187 |
+
'c-gs' => __( 'South Georgia and the South Sandwich Islands', 'wp-slimstat' ),
|
188 |
+
'c-es' => __( 'Spain', 'wp-slimstat' ),
|
189 |
+
'c-lk' => __( 'Sri Lanka', 'wp-slimstat' ),
|
190 |
+
'c-sc' => __( 'Seychelles', 'wp-slimstat' ),
|
191 |
+
'c-sd' => __( 'Sudan', 'wp-slimstat' ),
|
192 |
+
'c-ss' => __( 'South Sudan', 'wp-slimstat' ),
|
193 |
+
'c-sr' => __( 'Suriname', 'wp-slimstat' ),
|
194 |
+
'c-sj' => __( 'Svalbard and Jan Mayen', 'wp-slimstat' ),
|
195 |
+
'c-sz' => __( 'Swaziland', 'wp-slimstat' ),
|
196 |
+
'c-se' => __( 'Sweden', 'wp-slimstat' ),
|
197 |
+
'c-ch' => __( 'Switzerland', 'wp-slimstat' ),
|
198 |
+
'c-sy' => __( 'Syrian Arab Republic', 'wp-slimstat' ),
|
199 |
+
'c-tw' => __( 'Taiwan', 'wp-slimstat' ),
|
200 |
+
'c-tj' => __( 'Tajikistan', 'wp-slimstat' ),
|
201 |
+
'c-tz' => __( 'United Republic of Tanzania', 'wp-slimstat' ),
|
202 |
+
'c-th' => __( 'Thailand', 'wp-slimstat' ),
|
203 |
+
'c-tl' => __( 'Timor-Leste', 'wp-slimstat' ),
|
204 |
+
'c-tg' => __( 'Togo', 'wp-slimstat' ),
|
205 |
+
'c-to' => __( 'Tonga', 'wp-slimstat' ),
|
206 |
+
'c-tt' => __( 'Trinidad and Tobago', 'wp-slimstat' ),
|
207 |
+
'c-tn' => __( 'Tunisia', 'wp-slimstat' ),
|
208 |
+
'c-tr' => __( 'Turkey', 'wp-slimstat' ),
|
209 |
+
'c-tm' => __( 'Turkmenistan', 'wp-slimstat' ),
|
210 |
+
'c-tc' => __( 'Turks and Caicos Islands', 'wp-slimstat' ),
|
211 |
+
'c-ug' => __( 'Uganda', 'wp-slimstat' ),
|
212 |
+
'c-ua' => __( 'Ukraine', 'wp-slimstat' ),
|
213 |
+
'c-ae' => __( 'United Arab Emirates', 'wp-slimstat' ),
|
214 |
+
'c-gb' => __( 'United Kingdom', 'wp-slimstat' ),
|
215 |
+
'c-us' => __( 'United States', 'wp-slimstat' ),
|
216 |
+
'c-uy' => __( 'Uruguay', 'wp-slimstat' ),
|
217 |
+
'c-uz' => __( 'Uzbekistan', 'wp-slimstat' ),
|
218 |
+
'c-vu' => __( 'Vanuatu', 'wp-slimstat' ),
|
219 |
+
'c-ve' => __( 'Venezuela', 'wp-slimstat' ),
|
220 |
+
'c-vn' => __( 'Viet Nam', 'wp-slimstat' ),
|
221 |
+
'c-vg' => __( 'British Virgin Islands', 'wp-slimstat' ),
|
222 |
+
'c-vi' => __( 'U.S. Virgin Islands', 'wp-slimstat' ),
|
223 |
+
'c-eh' => __( 'Western Sahara', 'wp-slimstat' ),
|
224 |
+
'c-ye' => __( 'Yemen', 'wp-slimstat' ),
|
225 |
+
'c-zm' => __( 'Zambia', 'wp-slimstat' ),
|
226 |
+
'c-zw' => __( 'Zimbabwe', 'wp-slimstat' ),
|
227 |
+
'c-gg' => __( 'Guernsey', 'wp-slimstat' ),
|
228 |
+
'c-je' => __( 'Jersey', 'wp-slimstat' ),
|
229 |
+
'c-im' => __( 'Isle of Man', 'wp-slimstat' ),
|
230 |
+
'c-mv' => __( 'Maldives', 'wp-slimstat' ),
|
231 |
+
'c-eu' => __( 'Europe', 'wp-slimstat' ),
|
232 |
+
|
233 |
+
// Languages
|
234 |
+
'l-' => __( 'Unknown', 'wp-slimstat' ),
|
235 |
+
'l-empty' => __( 'Unknown', 'wp-slimstat' ),
|
236 |
+
'l-xx' => __( 'Unknown', 'wp-slimstat' ),
|
237 |
+
|
238 |
+
'l-af' => __( 'Afrikaans', 'wp-slimstat' ),
|
239 |
+
'l-af-za' => __( 'Afrikaans (South Africa)', 'wp-slimstat' ),
|
240 |
+
'l-ar' => __( 'Arabic', 'wp-slimstat' ),
|
241 |
+
'l-ar-ae' => __( 'Arabic (U.A.E.)', 'wp-slimstat' ),
|
242 |
+
'l-ar-bh' => __( 'Arabic (Bahrain)', 'wp-slimstat' ),
|
243 |
+
'l-ar-dz' => __( 'Arabic (Algeria)', 'wp-slimstat' ),
|
244 |
+
'l-ar-eg' => __( 'Arabic (Egypt)', 'wp-slimstat' ),
|
245 |
+
'l-ar-iq' => __( 'Arabic (Iraq)', 'wp-slimstat' ),
|
246 |
+
'l-ar-jo' => __( 'Arabic (Jordan)', 'wp-slimstat' ),
|
247 |
+
'l-ar-kw' => __( 'Arabic (Kuwait)', 'wp-slimstat' ),
|
248 |
+
'l-ar-lb' => __( 'Arabic (Lebanon)', 'wp-slimstat' ),
|
249 |
+
'l-ar-ly' => __( 'Arabic (Libya)', 'wp-slimstat' ),
|
250 |
+
'l-ar-ma' => __( 'Arabic (Morocco)', 'wp-slimstat' ),
|
251 |
+
'l-ar-om' => __( 'Arabic (Oman)', 'wp-slimstat' ),
|
252 |
+
'l-ar-qa' => __( 'Arabic (Qatar)', 'wp-slimstat' ),
|
253 |
+
'l-ar-sa' => __( 'Arabic (Saudi Arabia)', 'wp-slimstat' ),
|
254 |
+
'l-ar-sy' => __( 'Arabic (Syria)', 'wp-slimstat' ),
|
255 |
+
'l-ar-tn' => __( 'Arabic (Tunisia)', 'wp-slimstat' ),
|
256 |
+
'l-ar-ye' => __( 'Arabic (Yemen)', 'wp-slimstat' ),
|
257 |
+
'l-az' => __( 'Azeri (Latin)', 'wp-slimstat' ),
|
258 |
+
'l-az-az' => __( 'Azeri (Latin) (Azerbaijan)', 'wp-slimstat' ),
|
259 |
+
'l-be' => __( 'Belarusian', 'wp-slimstat' ),
|
260 |
+
'l-be-by' => __( 'Belarusian (Belarus)', 'wp-slimstat' ),
|
261 |
+
'l-bg' => __( 'Bulgarian', 'wp-slimstat' ),
|
262 |
+
'l-bg-bg' => __( 'Bulgarian (Bulgaria)', 'wp-slimstat' ),
|
263 |
+
'l-bs-ba' => __( 'Bosnian (Bosnia and Herzegovina)', 'wp-slimstat' ),
|
264 |
+
'l-ca' => __( 'Catalan', 'wp-slimstat' ),
|
265 |
+
'l-ca-es' => __( 'Catalan (Spain)', 'wp-slimstat' ),
|
266 |
+
'l-cs' => __( 'Czech', 'wp-slimstat' ),
|
267 |
+
'l-cs-cz' => __( 'Czech (Czech Republic)', 'wp-slimstat' ),
|
268 |
+
'l-cy' => __( 'Welsh', 'wp-slimstat' ),
|
269 |
+
'l-cy-gb' => __( 'Welsh (United Kingdom)', 'wp-slimstat' ),
|
270 |
+
'l-da' => __( 'Danish', 'wp-slimstat' ),
|
271 |
+
'l-da-dk' => __( 'Danish (Denmark)', 'wp-slimstat' ),
|
272 |
+
'l-de' => __( 'German', 'wp-slimstat' ),
|
273 |
+
'l-de-at' => __( 'German (Austria)', 'wp-slimstat' ),
|
274 |
+
'l-de-ch' => __( 'German (Switzerland)', 'wp-slimstat' ),
|
275 |
+
'l-de-de' => __( 'German (Germany)', 'wp-slimstat' ),
|
276 |
+
'l-de-li' => __( 'German (Liechtenstein)', 'wp-slimstat' ),
|
277 |
+
'l-de-lu' => __( 'German (Luxembourg)', 'wp-slimstat' ),
|
278 |
+
'l-dv' => __( 'Divehi', 'wp-slimstat' ),
|
279 |
+
'l-dv-mv' => __( 'Divehi (Maldives)', 'wp-slimstat' ),
|
280 |
+
'l-el' => __( 'Greek', 'wp-slimstat' ),
|
281 |
+
'l-el-gr' => __( 'Greek (Greece)', 'wp-slimstat' ),
|
282 |
+
'l-en' => __( 'English', 'wp-slimstat' ),
|
283 |
+
'l-en-au' => __( 'English (Australia)', 'wp-slimstat' ),
|
284 |
+
'l-en-bz' => __( 'English (Belize)', 'wp-slimstat' ),
|
285 |
+
'l-en-ca' => __( 'English (Canada)', 'wp-slimstat' ),
|
286 |
+
'l-en-cb' => __( 'English (Caribbean)', 'wp-slimstat' ),
|
287 |
+
'l-en-gb' => __( 'English (United Kingdom)', 'wp-slimstat' ),
|
288 |
+
'l-en-ie' => __( 'English (Ireland)', 'wp-slimstat' ),
|
289 |
+
'l-en-jm' => __( 'English (Jamaica)', 'wp-slimstat' ),
|
290 |
+
'l-en-nz' => __( 'English (New Zealand)', 'wp-slimstat' ),
|
291 |
+
'l-en-ph' => __( 'English (Republic of the Philippines)', 'wp-slimstat' ),
|
292 |
+
'l-en-tt' => __( 'English (Trinidad and Tobago)', 'wp-slimstat' ),
|
293 |
+
'l-en-us' => __( 'English (United States)', 'wp-slimstat' ),
|
294 |
+
'l-en-za' => __( 'English (South Africa)', 'wp-slimstat' ),
|
295 |
+
'l-en-zw' => __( 'English (Zimbabwe)', 'wp-slimstat' ),
|
296 |
+
'l-eo' => __( 'Esperanto', 'wp-slimstat' ),
|
297 |
+
'l-es' => __( 'Spanish', 'wp-slimstat' ),
|
298 |
+
'l-es-ar' => __( 'Spanish (Argentina)', 'wp-slimstat' ),
|
299 |
+
'l-es-bo' => __( 'Spanish (Bolivia)', 'wp-slimstat' ),
|
300 |
+
'l-es-cl' => __( 'Spanish (Chile)', 'wp-slimstat' ),
|
301 |
+
'l-es-co' => __( 'Spanish (Colombia)', 'wp-slimstat' ),
|
302 |
+
'l-es-cr' => __( 'Spanish (Costa Rica)', 'wp-slimstat' ),
|
303 |
+
'l-es-do' => __( 'Spanish (Dominican Republic)', 'wp-slimstat' ),
|
304 |
+
'l-es-ec' => __( 'Spanish (Ecuador)', 'wp-slimstat' ),
|
305 |
+
'l-es-es' => __( 'Spanish (Spain)', 'wp-slimstat' ),
|
306 |
+
'l-es-gt' => __( 'Spanish (Guatemala)', 'wp-slimstat' ),
|
307 |
+
'l-es-hn' => __( 'Spanish (Honduras)', 'wp-slimstat' ),
|
308 |
+
'l-es-mx' => __( 'Spanish (Mexico)', 'wp-slimstat' ),
|
309 |
+
'l-es-ni' => __( 'Spanish (Nicaragua)', 'wp-slimstat' ),
|
310 |
+
'l-es-pa' => __( 'Spanish (Panama)', 'wp-slimstat' ),
|
311 |
+
'l-es-pe' => __( 'Spanish (Peru)', 'wp-slimstat' ),
|
312 |
+
'l-es-pr' => __( 'Spanish (Puerto Rico)', 'wp-slimstat' ),
|
313 |
+
'l-es-py' => __( 'Spanish (Paraguay)', 'wp-slimstat' ),
|
314 |
+
'l-es-sv' => __( 'Spanish (El Salvador)', 'wp-slimstat' ),
|
315 |
+
'l-es-uy' => __( 'Spanish (Uruguay)', 'wp-slimstat' ),
|
316 |
+
'l-es-ve' => __( 'Spanish (Venezuela)', 'wp-slimstat' ),
|
317 |
+
'l-et' => __( 'Estonian', 'wp-slimstat' ),
|
318 |
+
'l-et-ee' => __( 'Estonian (Estonia)', 'wp-slimstat' ),
|
319 |
+
'l-eu' => __( 'Basque', 'wp-slimstat' ),
|
320 |
+
'l-eu-es' => __( 'Basque (Spain)', 'wp-slimstat' ),
|
321 |
+
'l-fa' => __( 'Farsi', 'wp-slimstat' ),
|
322 |
+
'l-fa-ir' => __( 'Farsi (Iran)', 'wp-slimstat' ),
|
323 |
+
'l-fi' => __( 'Finnish', 'wp-slimstat' ),
|
324 |
+
'l-fi-fi' => __( 'Finnish (Finland)', 'wp-slimstat' ),
|
325 |
+
'l-fo' => __( 'Faroese', 'wp-slimstat' ),
|
326 |
+
'l-fo-fo' => __( 'Faroese (Faroe Islands)', 'wp-slimstat' ),
|
327 |
+
'l-fr' => __( 'French', 'wp-slimstat' ),
|
328 |
+
'l-fr-be' => __( 'French (Belgium)', 'wp-slimstat' ),
|
329 |
+
'l-fr-ca' => __( 'French (Canada)', 'wp-slimstat' ),
|
330 |
+
'l-fr-ch' => __( 'French (Switzerland)', 'wp-slimstat' ),
|
331 |
+
'l-fr-fr' => __( 'French (France)', 'wp-slimstat' ),
|
332 |
+
'l-fr-lu' => __( 'French (Luxembourg)', 'wp-slimstat' ),
|
333 |
+
'l-fr-mc' => __( 'French (Principality of Monaco)', 'wp-slimstat' ),
|
334 |
+
'l-gl' => __( 'Galician', 'wp-slimstat' ),
|
335 |
+
'l-gl-es' => __( 'Galician (Spain)', 'wp-slimstat' ),
|
336 |
+
'l-gu' => __( 'Gujarati', 'wp-slimstat' ),
|
337 |
+
'l-gu-in' => __( 'Gujarati (India)', 'wp-slimstat' ),
|
338 |
+
'l-he' => __( 'Hebrew', 'wp-slimstat' ),
|
339 |
+
'l-he-il' => __( 'Hebrew (Israel)', 'wp-slimstat' ),
|
340 |
+
'l-hi' => __( 'Hindi', 'wp-slimstat' ),
|
341 |
+
'l-hi-in' => __( 'Hindi (India)', 'wp-slimstat' ),
|
342 |
+
'l-hr' => __( 'Croatian', 'wp-slimstat' ),
|
343 |
+
'l-hr-ba' => __( 'Croatian (Bosnia and Herzegovina)', 'wp-slimstat' ),
|
344 |
+
'l-hr-hr' => __( 'Croatian (Croatia)', 'wp-slimstat' ),
|
345 |
+
'l-hu' => __( 'Hungarian', 'wp-slimstat' ),
|
346 |
+
'l-hu-hu' => __( 'Hungarian (Hungary)', 'wp-slimstat' ),
|
347 |
+
'l-hy' => __( 'Armenian', 'wp-slimstat' ),
|
348 |
+
'l-hy-am' => __( 'Armenian (Armenia)', 'wp-slimstat' ),
|
349 |
+
'l-id' => __( 'Indonesian', 'wp-slimstat' ),
|
350 |
+
'l-id-id' => __( 'Indonesian (Indonesia)', 'wp-slimstat' ),
|
351 |
+
'l-is' => __( 'Icelandic', 'wp-slimstat' ),
|
352 |
+
'l-is-is' => __( 'Icelandic (Iceland)', 'wp-slimstat' ),
|
353 |
+
'l-it' => __( 'Italian', 'wp-slimstat' ),
|
354 |
+
'l-it-ch' => __( 'Italian (Switzerland)', 'wp-slimstat' ),
|
355 |
+
'l-it-it' => __( 'Italian (Italy)', 'wp-slimstat' ),
|
356 |
+
'l-ja' => __( 'Japanese', 'wp-slimstat' ),
|
357 |
+
'l-ja-jp' => __( 'Japanese (Japan)', 'wp-slimstat' ),
|
358 |
+
'l-ka' => __( 'Georgian', 'wp-slimstat' ),
|
359 |
+
'l-ka-ge' => __( 'Georgian (Georgia)', 'wp-slimstat' ),
|
360 |
+
'l-kk' => __( 'Kazakh', 'wp-slimstat' ),
|
361 |
+
'l-kk-kz' => __( 'Kazakh (Kazakhstan)', 'wp-slimstat' ),
|
362 |
+
'l-kn' => __( 'Kannada', 'wp-slimstat' ),
|
363 |
+
'l-kn-in' => __( 'Kannada (India)', 'wp-slimstat' ),
|
364 |
+
'l-ko' => __( 'Korean', 'wp-slimstat' ),
|
365 |
+
'l-ko-kr' => __( 'Korean (Korea)', 'wp-slimstat' ),
|
366 |
+
'l-kok' => __( 'Konkani', 'wp-slimstat' ),
|
367 |
+
'l-kok-in' => __( 'Konkani (India)', 'wp-slimstat' ),
|
368 |
+
'l-ky' => __( 'Kyrgyz', 'wp-slimstat' ),
|
369 |
+
'l-ky-kg' => __( 'Kyrgyz (Kyrgyzstan)', 'wp-slimstat' ),
|
370 |
+
'l-lt' => __( 'Lithuanian', 'wp-slimstat' ),
|
371 |
+
'l-lt-lt' => __( 'Lithuanian (Lithuania)', 'wp-slimstat' ),
|
372 |
+
'l-lv' => __( 'Latvian', 'wp-slimstat' ),
|
373 |
+
'l-lv-lv' => __( 'Latvian (Latvia)', 'wp-slimstat' ),
|
374 |
+
'l-mi' => __( 'Maori', 'wp-slimstat' ),
|
375 |
+
'l-mi-nz' => __( 'Maori (New Zealand)', 'wp-slimstat' ),
|
376 |
+
'l-mk' => __( 'FYRO Macedonian', 'wp-slimstat' ),
|
377 |
+
'l-mk-ml' => __( 'FYRO Macedonian (Former Yugoslav Republic of Macedonia)', 'wp-slimstat' ),
|
378 |
+
'l-mn' => __( 'Mongolian', 'wp-slimstat' ),
|
379 |
+
'l-mn-mn' => __( 'Mongolian (Mongolia)', 'wp-slimstat' ),
|
380 |
+
'l-mr' => __( 'Marathi', 'wp-slimstat' ),
|
381 |
+
'l-mr-in' => __( 'Marathi (India)', 'wp-slimstat' ),
|
382 |
+
'l-ms' => __( 'Malay', 'wp-slimstat' ),
|
383 |
+
'l-ms-bn' => __( 'Malay (Brunei Darussalam)', 'wp-slimstat' ),
|
384 |
+
'l-ms-my' => __( 'Malay (Malaysia)', 'wp-slimstat' ),
|
385 |
+
'l-mt' => __( 'Maltese', 'wp-slimstat' ),
|
386 |
+
'l-mt-mt' => __( 'Maltese (Malta)', 'wp-slimstat' ),
|
387 |
+
'l-nb' => __( 'Norwegian (Bokmål)', 'wp-slimstat' ),
|
388 |
+
'l-nb-no' => __( 'Norwegian (Bokmål) (Norway)', 'wp-slimstat' ),
|
389 |
+
'l-nl' => __( 'Dutch', 'wp-slimstat' ),
|
390 |
+
'l-nl-be' => __( 'Dutch (Belgium)', 'wp-slimstat' ),
|
391 |
+
'l-nl-nl' => __( 'Dutch (Netherlands)', 'wp-slimstat' ),
|
392 |
+
'l-nn-no' => __( 'Norwegian (Nynorsk) (Norway)', 'wp-slimstat' ),
|
393 |
+
'l-ns' => __( 'Northern Sotho', 'wp-slimstat' ),
|
394 |
+
'l-ns-za' => __( 'Northern Sotho (South Africa)', 'wp-slimstat' ),
|
395 |
+
'l-pa' => __( 'Punjabi', 'wp-slimstat' ),
|
396 |
+
'l-pa-in' => __( 'Punjabi (India)', 'wp-slimstat' ),
|
397 |
+
'l-pl' => __( 'Polish', 'wp-slimstat' ),
|
398 |
+
'l-pl-pl' => __( 'Polish (Poland)', 'wp-slimstat' ),
|
399 |
+
'l-ps' => __( 'Pashto', 'wp-slimstat' ),
|
400 |
+
'l-ps-ar' => __( 'Pashto (Afghanistan)', 'wp-slimstat' ),
|
401 |
+
'l-pt' => __( 'Portuguese', 'wp-slimstat' ),
|
402 |
+
'l-pt-br' => __( 'Portuguese (Brazil)', 'wp-slimstat' ),
|
403 |
+
'l-pt-pt' => __( 'Portuguese (Portugal)', 'wp-slimstat' ),
|
404 |
+
'l-qu' => __( 'Quechua', 'wp-slimstat' ),
|
405 |
+
'l-qu-bo' => __( 'Quechua (Bolivia)', 'wp-slimstat' ),
|
406 |
+
'l-qu-ec' => __( 'Quechua (Ecuador)', 'wp-slimstat' ),
|
407 |
+
'l-qu-pe' => __( 'Quechua (Peru)', 'wp-slimstat' ),
|
408 |
+
'l-ro' => __( 'Romanian', 'wp-slimstat' ),
|
409 |
+
'l-ro-ro' => __( 'Romanian (Romania)', 'wp-slimstat' ),
|
410 |
+
'l-ru' => __( 'Russian', 'wp-slimstat' ),
|
411 |
+
'l-ru-ru' => __( 'Russian (Russia)', 'wp-slimstat' ),
|
412 |
+
'l-sa' => __( 'Sanskrit', 'wp-slimstat' ),
|
413 |
+
'l-sa-in' => __( 'Sanskrit (India)', 'wp-slimstat' ),
|
414 |
+
'l-se' => __( 'Sami (Northern)', 'wp-slimstat' ),
|
415 |
+
'l-se-fi' => __( 'Sami (Northern) (Finland)', 'wp-slimstat' ),
|
416 |
+
'l-se-no' => __( 'Sami (Northern) (Norway)', 'wp-slimstat' ),
|
417 |
+
'l-se-se' => __( 'Sami (Northern) (Sweden)', 'wp-slimstat' ),
|
418 |
+
'l-sk' => __( 'Slovak', 'wp-slimstat' ),
|
419 |
+
'l-sk-sk' => __( 'Slovak (Slovakia)', 'wp-slimstat' ),
|
420 |
+
'l-sl' => __( 'Slovenian', 'wp-slimstat' ),
|
421 |
+
'l-sl-si' => __( 'Slovenian (Slovenia)', 'wp-slimstat' ),
|
422 |
+
'l-sq' => __( 'Albanian', 'wp-slimstat' ),
|
423 |
+
'l-sq-al' => __( 'Albanian (Albania)', 'wp-slimstat' ),
|
424 |
+
'l-sr-ba' => __( 'Serbian (Latin) (Bosnia and Herzegovina)', 'wp-slimstat' ),
|
425 |
+
'l-sr-rs' => __( 'Serbian (Serbia and Montenegro)', 'wp-slimstat' ),
|
426 |
+
'l-sr-sp' => __( 'Serbian (Latin) (Serbia and Montenegro)', 'wp-slimstat' ),
|
427 |
+
'l-sv' => __( 'Swedish', 'wp-slimstat' ),
|
428 |
+
'l-sv-fi' => __( 'Swedish (Finland)', 'wp-slimstat' ),
|
429 |
+
'l-sv-se' => __( 'Swedish (Sweden)', 'wp-slimstat' ),
|
430 |
+
'l-sw' => __( 'Swahili', 'wp-slimstat' ),
|
431 |
+
'l-sw-ke' => __( 'Swahili (Kenya)', 'wp-slimstat' ),
|
432 |
+
'l-ta' => __( 'Tamil', 'wp-slimstat' ),
|
433 |
+
'l-ta-in' => __( 'Tamil (India)', 'wp-slimstat' ),
|
434 |
+
'l-te' => __( 'Telugu', 'wp-slimstat' ),
|
435 |
+
'l-te-in' => __( 'Telugu (India)', 'wp-slimstat' ),
|
436 |
+
'l-th' => __( 'Thai', 'wp-slimstat' ),
|
437 |
+
'l-th-th' => __( 'Thai (Thailand)', 'wp-slimstat' ),
|
438 |
+
'l-tl' => __( 'Tagalog', 'wp-slimstat' ),
|
439 |
+
'l-tl-ph' => __( 'Tagalog (Philippines)', 'wp-slimstat' ),
|
440 |
+
'l-tn' => __( 'Tswana', 'wp-slimstat' ),
|
441 |
+
'l-tn-za' => __( 'Tswana (South Africa)', 'wp-slimstat' ),
|
442 |
+
'l-tr' => __( 'Turkish', 'wp-slimstat' ),
|
443 |
+
'l-tr-tr' => __( 'Turkish (Turkey)', 'wp-slimstat' ),
|
444 |
+
'l-tt' => __( 'Tatar', 'wp-slimstat' ),
|
445 |
+
'l-tt-ru' => __( 'Tatar (Russia)', 'wp-slimstat' ),
|
446 |
+
'l-ts' => __( 'Tsonga', 'wp-slimstat' ),
|
447 |
+
'l-uk' => __( 'Ukrainian', 'wp-slimstat' ),
|
448 |
+
'l-uk-ua' => __( 'Ukrainian (Ukraine)', 'wp-slimstat' ),
|
449 |
+
'l-ur' => __( 'Urdu', 'wp-slimstat' ),
|
450 |
+
'l-ur-pk' => __( 'Urdu (Islamic Republic of Pakistan)', 'wp-slimstat' ),
|
451 |
+
'l-uz' => __( 'Uzbek (Latin)', 'wp-slimstat' ),
|
452 |
+
'l-uz-uz' => __( 'Uzbek (Cyrillic) (Uzbekistan)', 'wp-slimstat' ),
|
453 |
+
'l-vi' => __( 'Vietnamese', 'wp-slimstat' ),
|
454 |
+
'l-vi-vn' => __( 'Vietnamese (Viet Nam)', 'wp-slimstat' ),
|
455 |
+
'l-xh' => __( 'Xhosa', 'wp-slimstat' ),
|
456 |
+
'l-xh-za' => __( 'Xhosa (South Africa)', 'wp-slimstat' ),
|
457 |
+
'l-zh' => __( 'Chinese', 'wp-slimstat' ),
|
458 |
+
'l-zh-cn' => __( 'Chinese (S)', 'wp-slimstat' ),
|
459 |
+
'l-zh-hk' => __( 'Chinese (Hong Kong)', 'wp-slimstat' ),
|
460 |
+
'l-zh-mo' => __( 'Chinese (Macau)', 'wp-slimstat' ),
|
461 |
+
'l-zh-sg' => __( 'Chinese (Singapore)', 'wp-slimstat' ),
|
462 |
+
'l-zh-tw' => __( 'Chinese (T)', 'wp-slimstat' ),
|
463 |
+
'l-zu' => __( 'Zulu', 'wp-slimstat' ),
|
464 |
+
'l-zu-za' => __( 'Zulu (South Africa)', 'wp-slimstat' ),
|
465 |
+
|
466 |
+
// Operating Systems
|
467 |
+
'aix' => __( 'IBM AIX', 'wp-slimstat' ),
|
468 |
+
'amiga' => __( 'Amiga', 'wp-slimstat' ),
|
469 |
+
'android' => __( 'Android', 'wp-slimstat' ),
|
470 |
+
'beos' => __( 'BeOS', 'wp-slimstat' ),
|
471 |
+
'blackberry os' => __( 'BlackBerry OS', 'wp-slimstat' ),
|
472 |
+
'centos' => __( 'CentOS', 'wp-slimstat' ),
|
473 |
+
'chromeos' => __( 'ChromeOS', 'wp-slimstat' ),
|
474 |
+
'commodore64' => __( 'Commodore 64', 'wp-slimstat' ),
|
475 |
+
'cygwin' => __( 'Cygwin', 'wp-slimstat' ),
|
476 |
+
'debian' => __( 'Debian', 'wp-slimstat' ),
|
477 |
+
'digital unix' => __( 'Digital Unix', 'wp-slimstat' ),
|
478 |
+
'fedora' => __( 'Fedora', 'wp-slimstat' ),
|
479 |
+
'firefoxos' => __( 'Firefox OS', 'wp-slimstat' ),
|
480 |
+
'freebsd' => __( 'FreeBSD', 'wp-slimstat' ),
|
481 |
+
'gentoo' => __( 'Gentoo', 'wp-slimstat' ),
|
482 |
+
'hp-ux' => __( 'HP-UX', 'wp-slimstat' ),
|
483 |
+
'ios' => __( 'iPhone OS', 'wp-slimstat' ),
|
484 |
+
'iphone os' => __( 'iPhone OS', 'wp-slimstat' ),
|
485 |
+
'iphone osx' => __( 'iPhone OS X', 'wp-slimstat' ),
|
486 |
+
'irix' => __( 'SGI / IRIX', 'wp-slimstat' ),
|
487 |
+
'java' => __( 'Java', 'wp-slimstat' ),
|
488 |
+
'kanotix' => __( 'Kanotix Linux', 'wp-slimstat' ),
|
489 |
+
'knoppix' => __( 'Knoppix Linux', 'wp-slimstat' ),
|
490 |
+
'linux' => __( 'Linux Generic', 'wp-slimstat' ),
|
491 |
+
'mac' => __( 'Mac', 'wp-slimstat' ),
|
492 |
+
'mac68k' => __( 'Mac 68k', 'wp-slimstat' ),
|
493 |
+
'macos' => __( 'Mac OS X', 'wp-slimstat' ),
|
494 |
+
'macosx' => __( 'Mac OS X', 'wp-slimstat' ),
|
495 |
+
'macppc' => __( 'Mac PowerPC', 'wp-slimstat' ),
|
496 |
+
'mandrake' => __( 'Mandrake Linux', 'wp-slimstat' ),
|
497 |
+
'mandriva' => __( 'MS-DOS', 'wp-slimstat' ),
|
498 |
+
'mepis' => __( 'MEPIS Linux', 'wp-slimstat' ),
|
499 |
+
'ms-dos' => __( 'MS-DOS', 'wp-slimstat' ),
|
500 |
+
'netbsd' => __( 'NetBSD', 'wp-slimstat' ),
|
501 |
+
'nintendo' => __( 'Nintendo', 'wp-slimstat' ),
|
502 |
+
'openbsd' => __( 'OpenBSD', 'wp-slimstat' ),
|
503 |
+
'openvms' => __( 'OpenVMS', 'wp-slimstat' ),
|
504 |
+
'os/2' => __( 'IBM OS/2', 'wp-slimstat' ),
|
505 |
+
'palm' => __( 'Palm OS', 'wp-slimstat' ),
|
506 |
+
'palmos' => __( 'Palm OS', 'wp-slimstat' ),
|
507 |
+
'pclinuxos' => __( 'PCLinux OS', 'wp-slimstat' ),
|
508 |
+
'playstation' => __( 'Playstation', 'wp-slimstat' ),
|
509 |
+
'powertv' => __( 'PowerTV', 'wp-slimstat' ),
|
510 |
+
'redhat' => __( 'RedHat Linux', 'wp-slimstat' ),
|
511 |
+
'rim os' => __( 'Blackberry', 'wp-slimstat' ),
|
512 |
+
'risc os' => __( 'Risc OS', 'wp-slimstat' ),
|
513 |
+
'slackware' => __( 'Slackware Linux', 'wp-slimstat' ),
|
514 |
+
'solaris' => __( 'Solaris', 'wp-slimstat' ),
|
515 |
+
'sunos' => __( 'Sun OS', 'wp-slimstat' ),
|
516 |
+
'suse' => __( 'SuSE Linux', 'wp-slimstat' ),
|
517 |
+
'symbianos' => __( 'Symbian OS', 'wp-slimstat' ),
|
518 |
+
'ubuntu' => __( 'Ubuntu', 'wp-slimstat' ),
|
519 |
+
'unix' => __( 'Unix', 'wp-slimstat' ),
|
520 |
+
'unknown' => __( 'Unknown', 'wp-slimstat' ),
|
521 |
+
'xandros' => __( 'Xandros Linux', 'wp-slimstat' ),
|
522 |
+
'wap' => __( 'WAP', 'wp-slimstat' ),
|
523 |
+
'webos' => __( 'WebOS', 'wp-slimstat' ),
|
524 |
+
'win10' => __( 'Windows 10', 'wp-slimstat' ),
|
525 |
+
'win16' => __( 'Windows 16-bit', 'wp-slimstat' ),
|
526 |
+
'win2000' => __( 'Windows 2000', 'wp-slimstat' ),
|
527 |
+
'win2003' => __( 'Windows 2003', 'wp-slimstat' ),
|
528 |
+
'win31' => __( 'Windows 3.1', 'wp-slimstat' ),
|
529 |
+
'win32' => __( 'Windows 32-bit', 'wp-slimstat' ),
|
530 |
+
'win7' => __( 'Windows 7', 'wp-slimstat' ),
|
531 |
+
'win7' => __( 'Windows 7', 'wp-slimstat' ),
|
532 |
+
'win8' => __( 'Windows 8', 'wp-slimstat' ),
|
533 |
+
'win8.1' => __( 'Windows 8.1', 'wp-slimstat' ),
|
534 |
+
'win95' => __( 'Windows 95', 'wp-slimstat' ),
|
535 |
+
'win98' => __( 'Windows 98', 'wp-slimstat' ),
|
536 |
+
'wince' => __( 'Windows CE', 'wp-slimstat' ),
|
537 |
+
'winme' => __( 'Windows ME', 'wp-slimstat' ),
|
538 |
+
'winnt' => __( 'Windows NT', 'wp-slimstat' ),
|
539 |
+
'winphone7' => __( 'Windows Phone', 'wp-slimstat' ),
|
540 |
+
'winphone7.5' => __( 'Windows Phone', 'wp-slimstat' ),
|
541 |
+
'winphone8' => __( 'Windows Phone', 'wp-slimstat' ),
|
542 |
+
'winphone8.1' => __( 'Windows RT / Runtime', 'wp-slimstat' ),
|
543 |
+
'winrt' => __( 'Windows Phone', 'wp-slimstat' ),
|
544 |
+
'winvista' => __( 'Windows Vista', 'wp-slimstat' ),
|
545 |
+
'winxp' => __( 'Windows XP', 'wp-slimstat' ),
|
546 |
+
'wyderos' => __( 'WyderOS', 'wp-slimstat' ),
|
547 |
+
'zaurus' => __( 'Zaurus WAP', 'wp-slimstat' ),
|
548 |
+
|
549 |
+
// Operating System Families
|
550 |
+
'p-unk' => __( 'Unknown', 'wp-slimstat' ),
|
551 |
+
'p-' => __( 'Unknown', 'wp-slimstat' ),
|
552 |
+
|
553 |
+
'p-and' => __( 'Android', 'wp-slimstat' ),
|
554 |
+
'p-bla' => __( 'BlackBerry', 'wp-slimstat' ),
|
555 |
+
'p-chr' => __( 'Chrome OS', 'wp-slimstat' ),
|
556 |
+
'p-fir' => __( 'Fire OS', 'wp-slimstat' ),
|
557 |
+
'p-fre' => __( 'Linux FreeBSD', 'wp-slimstat' ),
|
558 |
+
'p-ios' => __( 'Apple iOS', 'wp-slimstat' ),
|
559 |
+
'p-jav' => __( 'Java-based OS', 'wp-slimstat' ),
|
560 |
+
'p-lin' => __( 'Linux', 'wp-slimstat' ),
|
561 |
+
'p-mac' => __( 'Apple', 'wp-slimstat' ),
|
562 |
+
'p-rim' => __( 'Blackberry', 'wp-slimstat' ),
|
563 |
+
'p-sym' => __( 'Symbian OS', 'wp-slimstat' ),
|
564 |
+
'p-ubu' => __( 'Linux', 'wp-slimstat' ),
|
565 |
+
'p-win' => __( 'Microsoft', 'wp-slimstat' ),
|
566 |
+
|
567 |
+
// Tracker Errors
|
568 |
+
'e-101' => __( 'Invalid data signature. Try clearing your WordPress cache.', 'wp-slimstat' ),
|
569 |
+
'e-102' => __( 'Invalid content type signature. Try clearing your WordPress cache.', 'wp-slimstat' ),
|
570 |
+
'e-103' => __( 'Invalid content type format. Try clearing your WordPress cache.', 'wp-slimstat' ),
|
571 |
+
'e-200' => __( 'Unspecified error while attempting to add a new record to the table', 'wp-slimstat' ),
|
572 |
+
'e-201' => __( 'Malformed referrer URL', 'wp-slimstat' ),
|
573 |
+
'e-202' => __( 'Pageview not tracked because the IP address format was invalid.', 'wp-slimstat' ),
|
574 |
+
'e-203' => __( 'Malformed resource URL', 'wp-slimstat' ),
|
575 |
+
'e-204' => __( 'Tracking is turned off, but it looks like the client-side code is still attached to your pages. Do you have a caching tool enabled?', 'wp-slimstat' ),
|
576 |
+
'e-205' => __( 'Invalid MaxMind data file. Please <a target="_blank" href="https://slimstat.freshdesk.com/support/solutions/articles/12000039798-how-to-manually-install-the-maxmind-geolocation-data-file-">follow these steps</a> to download it manually.', 'wp-slimstat' ),
|
577 |
+
);
|
578 |
+
|
579 |
+
// set_transient( 'slimstat_dynamic_strings', self::$dynamic_strings, 86400 );
|
580 |
+
}
|
581 |
+
}
|
582 |
+
|
583 |
+
public static function get_country_codes() {
|
584 |
+
if ( empty( self::$dynamic_strings ) ) {
|
585 |
+
self::init_dynamic_strings();
|
586 |
+
}
|
587 |
+
|
588 |
+
$country_codes = array();
|
589 |
+
foreach ( array_keys( self::$dynamic_strings ) as $a_code ) {
|
590 |
+
if ( strpos( $a_code, 'c-', 0 ) !== false && strlen( $a_code ) > 2 && $a_code != 'c-xx' && $a_code != 'c-xy' ) {
|
591 |
+
$country_codes[ strtolower( str_replace( 'c-', '', $a_code ) ) ] = self::$dynamic_strings[ $a_code ];
|
592 |
+
}
|
593 |
+
}
|
594 |
+
|
595 |
+
return $country_codes;
|
596 |
+
}
|
597 |
+
|
598 |
+
public static function get_string( $_code = '' ) {
|
599 |
+
if ( empty( self::$dynamic_strings ) ) {
|
600 |
+
self::init_dynamic_strings();
|
601 |
+
}
|
602 |
+
|
603 |
+
if ( !isset( self::$dynamic_strings[ $_code ] ) ) {
|
604 |
+
return $_code;
|
605 |
+
}
|
606 |
+
|
607 |
+
return self::$dynamic_strings[ $_code ];
|
608 |
+
}
|
609 |
+
}
|
readme.txt
CHANGED
@@ -5,8 +5,8 @@ Tags: analytics, statistics, counter, tracking, reports, wassup, geolocation, on
|
|
5 |
Text Domain: wp-slimstat
|
6 |
Requires at least: 4.9
|
7 |
Requires PHP: 5.2
|
8 |
-
Tested up to: 5.
|
9 |
-
Stable tag: 4.8.
|
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.
|
@@ -60,6 +60,16 @@ Our knowledge base is available on our [support center](https://docs.wp-slimstat
|
|
60 |
5. **Responsive layout** - Keep an eye on your reports on the go
|
61 |
|
62 |
== Changelog ==
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
63 |
= 4.8.7.3 =
|
64 |
* [New] Implemented a simple query cache to minimize the number of requests needed to crunch and display the data in the reports.
|
65 |
* [Update] Extended tracker to also record the 'fragment' portion of the URL, if available (this feature is only available in Client Mode).
|
5 |
Text Domain: wp-slimstat
|
6 |
Requires at least: 4.9
|
7 |
Requires PHP: 5.2
|
8 |
+
Tested up to: 5.3
|
9 |
+
Stable tag: 4.8.8
|
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.
|
60 |
5. **Responsive layout** - Keep an eye on your reports on the go
|
61 |
|
62 |
== Changelog ==
|
63 |
+
= 4.8.8 =
|
64 |
+
* [New] Implemented new [FingerPrintJs2](https://github.com/Valve/fingerprintjs2) library in the tracker. Your visitors are now associated with a unique identifier that does not rely on cookies, IP address or other unreliable information. This will allow Slimstat to produce more accurate results in terms of session lenghts, user patterns and much more.
|
65 |
+
* [New] Added event handler for 'beforeunload', which will allow the tracker to better meausure the time spent by your visitors on each page. This will make our upcoming new charts even more accurate.
|
66 |
+
* [Update] Improved algorithm that scans referrer URLs for search terms, and introduced a new list of search engines. Please help us improve this list by submitting your missing search engine entries.
|
67 |
+
* [Update] Added title field to Slimstat widgets (thank you, [jaroslawistok](https://wordpress.org/support/topic/broken-layout-from-3rd-widget-in-footer/)).
|
68 |
+
* [Update] Reverted a change to the Top Web Pages report that was now combining URLs with a trailing slash and ones without one into one result. As James pointed out, this is a less accurate measure and hides the fact that people might be accessing the website in different ways.
|
69 |
+
* [Update] The event tracker now annotates each event with information about the mouse button that was clicked and other useful data.
|
70 |
+
* [Fix] The Country shortcode was not working as expected because of a change in how we handle localization files.
|
71 |
+
* [Fix] Renamed slim_i18n class to avoid conflict with external libraries.
|
72 |
+
|
73 |
= 4.8.7.3 =
|
74 |
* [New] Implemented a simple query cache to minimize the number of requests needed to crunch and display the data in the reports.
|
75 |
* [Update] Extended tracker to also record the 'fragment' portion of the URL, if available (this feature is only available in Client Mode).
|
vendor/matomo-searchengine.json
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
{"1.cz":{"backlink":"s\/{k}","charsets":["iso-8859-2"]},"www.118700.se":{"backlink":"sok.aspx?q={k}"},"foretag.118700.se":{"backlink":"sok.aspx?q={k}"},"webben.118700.se":{"backlink":"sok.aspx?q={k}"},"www.123people.com":{"params":{"1":"search_term"},"backlink":"s\/{k}"},"123people.{}":{"params":{"1":"search_term"},"backlink":"s\/{k}"},"so.360.cn":{"backlink":"s?q={k}","charsets":["UTF-8","gb2312"]},"www.so.com":{"backlink":"s?q={k}","charsets":["UTF-8","gb2312"]},"m.so.com":{"backlink":"s?q={k}","charsets":["UTF-8","gb2312"]},"www.abacho.de":{"backlink":"suche?q={k}"},"www.abacho.com":{"backlink":"suche?q={k}"},"www.abacho.co.uk":{"backlink":"suche?q={k}"},"www.se.abacho.com":{"backlink":"suche?q={k}"},"www.tr.abacho.com":{"backlink":"suche?q={k}"},"www.abacho.at":{"backlink":"suche?q={k}"},"www.abacho.fr":{"backlink":"suche?q={k}"},"www.abacho.es":{"backlink":"suche?q={k}"},"www.abacho.ch":{"backlink":"suche?q={k}"},"www.abacho.it":{"backlink":"suche?q={k}"},"abcsok.no":{"backlink":"?q={k}"},"verden.abcsok.no":{"backlink":"?q={k}"},"www.acoon.de":{"params":["begriff"],"backlink":"cgi-bin\/search.exe?begriff={k}"},"chercherfr.aguea.com":{"backlink":"s.py?q={k}"},"www.allaverksamheter.se":{"params":["What"],"backlink":"SearchResult.aspx?What={k}"},"alexa.com":{"backlink":"search?q={k}"},"search.toolbars.alexa.com":{"backlink":"search?q={k}"},"rechercher.aliceadsl.fr":{"params":["qs"],"backlink":"google.pl?qs={k}"},"all.by":{"params":["query"],"backlink":"cgi-bin\/search.cgi?mode=by&query={k}"},"www.allesklar.de":{"params":["words"],"backlink":"?words={k}"},"www.allesklar.at":{"params":["words"],"backlink":"?words={k}"},"www.allesklar.ch":{"params":["words"],"backlink":"?words={k}"},"www.alltheweb.com":{"backlink":"search?q={k}"},"www.altavista.com":{"backlink":"web\/results?q={k}"},"search.altavista.com":{"backlink":"web\/results?q={k}"},"listings.altavista.com":{"backlink":"web\/results?q={k}"},"altavista.de":{"backlink":"web\/results?q={k}"},"altavista.fr":{"backlink":"web\/results?q={k}"},"{}.altavista.com":{"backlink":"web\/results?q={k}"},"be-nl.altavista.com":{"backlink":"web\/results?q={k}"},"be-fr.altavista.com":{"backlink":"web\/results?q={k}"},"aol.com":{"params":["query"],"backlink":"aol\/search?q={k}"},"search.aol.it":{"params":["query"],"backlink":"aol\/search?q={k}"},"aolsearch.aol.com":{"params":["query"],"backlink":"aol\/search?q={k}"},"www.aolrecherche.aol.fr":{"params":["query"],"backlink":"aol\/search?q={k}"},"www.aolrecherches.aol.fr":{"params":["query"],"backlink":"aol\/search?q={k}"},"www.aolimages.aol.fr":{"params":["query"],"backlink":"aol\/search?q={k}"},"aim.search.aol.com":{"params":["query"],"backlink":"aol\/search?q={k}"},"www.recherche.aol.fr":{"params":["query"],"backlink":"aol\/search?q={k}"},"recherche.aol.fr":{"params":["query"],"backlink":"aol\/search?q={k}"},"find.web.aol.com":{"params":["query"],"backlink":"aol\/search?q={k}"},"recherche.aol.ca":{"params":["query"],"backlink":"aol\/search?q={k}"},"aolsearch.aol.co.uk":{"params":["query"],"backlink":"aol\/search?q={k}"},"search.aol.co.uk":{"params":["query"],"backlink":"aol\/search?q={k}"},"aolrecherche.aol.fr":{"params":["query"],"backlink":"aol\/search?q={k}"},"sucheaol.aol.de":{"params":["query"],"backlink":"aol\/search?q={k}"},"suche.aol.de":{"params":["query"],"backlink":"aol\/search?q={k}"},"o2suche.aol.de":{"params":["query"],"backlink":"aol\/search?q={k}"},"suche.aolsvc.de":{"params":["query"],"backlink":"aol\/search?q={k}"},"aolbusqueda.aol.com.mx":{"params":["query"],"backlink":"aol\/search?q={k}"},"alicesuche.aol.de":{"params":["query"],"backlink":"aol\/search?q={k}"},"alicesuchet.aol.de":{"params":["query"],"backlink":"aol\/search?q={k}"},"suchet2.aol.de":{"params":["query"],"backlink":"aol\/search?q={k}"},"search.hp.my.aol.com.au":{"params":["query"],"backlink":"aol\/search?q={k}"},"search.hp.my.aol.de":{"params":["query"],"backlink":"aol\/search?q={k}"},"search.hp.my.aol.it":{"params":["query"],"backlink":"aol\/search?q={k}"},"search-intl.netscape.com":{"params":["query"],"backlink":"aol\/search?q={k}"},"de.aolsearch.com":{"backlink":"search?q={k}"},"apollo.lv\/portal\/search\/":{"backlink":"?cof=FORID%3A11&q={k}&search_where=www"},"apollo7.de":{"params":["query"],"backlink":"a7db\/index.php?query={k}&de_sharelook=true&de_bing=true&de_witch=true&de_google=true&de_yahoo=true&de_lycos=true"},"sm.aport.ru":{"params":["r"],"backlink":"search?r={k}"},"arama.com":{"backlink":"search.php3?q={k}"},"www.arcor.de":{"params":["Keywords"],"backlink":"content\/searchresult.jsp?Keywords={k}"},"arianna.libero.it":{"params":["query"],"backlink":"search\/abin\/integrata.cgi?query={k}"},"www.arianna.com":{"params":["query"],"backlink":"search\/abin\/integrata.cgi?query={k}"},"ask.com":{"params":{"0":"ask","2":"searchfor"},"backlink":"web?q={k}"},"web.ask.com":{"params":{"0":"ask","2":"searchfor"},"backlink":"web?q={k}"},"int.ask.com":{"params":{"0":"ask","2":"searchfor"},"backlink":"web?q={k}"},"mws.ask.com":{"params":{"0":"ask","2":"searchfor"},"backlink":"web?q={k}"},"images.ask.com":{"params":{"0":"ask","2":"searchfor"},"backlink":"web?q={k}"},"images.{}.ask.com":{"params":{"0":"ask","2":"searchfor"},"backlink":"web?q={k}"},"ask.reference.com":{"params":{"0":"ask","2":"searchfor"},"backlink":"web?q={k}"},"www.askkids.com":{"params":{"0":"ask","2":"searchfor"},"backlink":"web?q={k}"},"iwon.ask.com":{"params":{"0":"ask","2":"searchfor"},"backlink":"web?q={k}"},"www.ask.co.uk":{"params":{"0":"ask","2":"searchfor"},"backlink":"web?q={k}"},"{}.ask.com":{"params":{"0":"ask","2":"searchfor"},"backlink":"web?q={k}"},"www.qbyrd.com":{"params":{"0":"ask","2":"searchfor"},"backlink":"web?q={k}"},"{}.qbyrd.com":{"params":{"0":"ask","2":"searchfor"},"backlink":"web?q={k}"},"www.search-results.com":{"params":{"0":"ask","2":"searchfor"},"backlink":"web?q={k}"},"www1.search-results.com":{"params":{"0":"ask","2":"searchfor"},"backlink":"web?q={k}"},"int.search-results.com":{"params":{"0":"ask","2":"searchfor"},"backlink":"web?q={k}"},"{}.search-results.com":{"params":{"0":"ask","2":"searchfor"},"backlink":"web?q={k}"},"search.ask.com":{"params":{"0":"ask","2":"searchfor"},"backlink":"web?q={k}"},"{}.search.ask.com":{"params":{"0":"ask","2":"searchfor"},"backlink":"web?q={k}"},"avira-int.ask.com":{"params":{"0":"ask","2":"searchfor"},"backlink":"web?q={k}"},"searchqu.com":{"params":{"0":"ask","2":"searchfor"},"backlink":"web?q={k}"},"search.tb.ask.com":{"params":{"0":"ask","2":"searchfor"},"backlink":"web?q={k}"},"nortonsafe.search.ask.com":{"params":{"0":"ask","2":"searchfor"},"backlink":"web?q={k}"},"avira.search.ask.com":{"params":{"0":"ask","2":"searchfor"},"backlink":"web?q={k}"},"int.search.tb.ask.com":{"params":{"0":"ask","2":"searchfor"},"backlink":"web?q={k}"},"search.avira.com":{"params":{"0":"ask","2":"searchfor"},"backlink":"#\/web\/result?q={k}"},"search.avira.net":{"params":{"0":"ask","2":"searchfor"},"backlink":"#\/web\/result?q={k}"},"safesearch.avira.com":{"params":{"0":"ask","2":"searchfor"},"backlink":"#\/web\/result?q={k}"},"searchatlas.centrum.cz":{"backlink":"?q={k}"},"search.auone.jp":{"backlink":"?q={k}","charsets":["utf-8","euc-jp","ms932"]},"sp-search.auone.jp":{"backlink":"?q={k}","charsets":["utf-8","euc-jp","ms932"]},"sp-image.search.auone.jp":{"backlink":"?q={k}","charsets":["utf-8","euc-jp","ms932"]},"search.babylon.com":{"backlink":"?q={k}"},"searchassist.babylon.com":{"backlink":"?q={k}"},"www.baidu.com":{"params":["wd","word","kw"],"backlink":"s?wd={k}","charsets":["UTF-8","gb2312"]},"www1.baidu.com":{"params":["wd","word","kw"],"backlink":"s?wd={k}","charsets":["UTF-8","gb2312"]},"m.baidu.com":{"params":["wd","word","kw"],"backlink":"s?wd={k}","charsets":["UTF-8","gb2312"]},"www.baidu.co.th":{"params":["wd","word","kw"],"backlink":"s?wd={k}","charsets":["UTF-8","gb2312"]},"zhidao.baidu.com":{"params":["wd","word","kw"],"backlink":"s?wd={k}","charsets":["UTF-8","gb2312"]},"tieba.baidu.com":{"params":["wd","word","kw"],"backlink":"s?wd={k}","charsets":["UTF-8","gb2312"]},"news.baidu.com":{"params":["wd","word","kw"],"backlink":"s?wd={k}","charsets":["UTF-8","gb2312"]},"web.gougou.com":{"params":["search"],"backlink":"search?search={k}"},"cgi.search.biglobe.ne.jp":{"backlink":"cgi-bin\/search-st?q={k}","charsets":["utf-8","euc-jp","ms932"]},"images.search.biglobe.ne.jp":{"backlink":"cgi-bin\/search-st?q={k}"},"bing.com":{"params":{"1":"Q"},"backlink":"search?q={k}"},"{}.bing.com":{"params":{"1":"Q"},"backlink":"search?q={k}"},"global.bing.com":{"params":{"1":"Q"},"backlink":"search?q={k}"},"msnbc.msn.com":{"params":{"1":"Q"},"backlink":"search?q={k}"},"dizionario.it.msn.com":{"params":{"1":"Q"},"backlink":"search?q={k}"},"enciclopedia.it.msn.com":{"params":{"1":"Q"},"backlink":"search?q={k}"},"cc.bingj.com":{"params":{"1":"Q"},"backlink":"search?q={k}"},"bing.com\/images\/search":{"params":{"1":"Q"},"backlink":"?q={k}"},"{}.bing.com\/images\/search":{"params":{"1":"Q"},"backlink":"?q={k}"},"blekko.com":{"backlink":"ws\/{k}"},"www.blogpulse.com":{"params":["query"],"backlink":"search?query={k}"},"search.bluewin.ch":{"params":["searchTerm"],"backlink":"v2\/index.php?q={k}"},"web.canoe.ca":{"backlink":"search?q={k}"},"search.centrum.cz":{"backlink":"?q={k}"},"morfeo.centrum.cz":{"backlink":"?q={k}"},"www.charter.net":{"backlink":"search\/index.php?q={k}"},"claro-search.com":{"backlink":"?q={k}"},"pesquisa.clix.pt":{"params":["question"],"backlink":"resultado.html?in=Mundial&question={k}"},"coccoc.com":{"params":["query"],"backlink":"search#query={k}"},"search.comcast.net":{"backlink":"?q={k}"},"websearch.cs.com":{"params":["query"],"backlink":"cs\/search?query={k}"},"search.conduit.com":{"backlink":"Results.aspx?q={k}"},"images.search.conduit.com":{"backlink":"Results.aspx?q={k}"},"www.crawler.com":{"backlink":"search\/results1.aspx?q={k}"},"www.cuil.com":{"backlink":"search?q={k}"},"daemon-search.com":{"backlink":"explore\/web?q={k}"},"my.daemon-search.com":{"backlink":"explore\/web?q={k}"},"www.dasoertliche.de":{"params":["kw"]},"www2.dasoertliche.de":{"params":["ph","kw"]},"www1.dastelefonbuch.de":{"params":["kw"]},"search.daum.net":{"backlink":"search?q={k}"},"otsing.delfi.ee":{"backlink":"find?q={k}"},"smart.delfi.lv":{"backlink":"find?q={k}"},"digg.com":{"params":["s"],"backlink":"search?s={k}"},"fr.dir.com":{"params":["req"]},"dmoz.org":{"params":["search"]},"editors.dmoz.org":{"params":["search"]},"duckduckgo.com":{"backlink":"?q={k}"},"r.duckduckgo.com":{"backlink":"?q={k}"},"search.earthlink.net":{"backlink":"search?q={k}"},"ecosia.org":{"backlink":"search?q={k}"},"www.ecosia.org":{"backlink":"search?q={k}"},"www.eniro.se":{"params":{"1":"search_word"},"backlink":"query?q={k}"},"eo.st":{"params":["x_query"],"backlink":"cgi-bin\/eolost.cgi?x_query={k}"},"www.eurip.com":{"backlink":"search\/?q={k}"},"www.euroseek.com":{"params":["string"],"backlink":"system\/search.cgi?string={k}"},"www.everyclick.com":{"params":["keyword"]},"www.exalead.fr":{"backlink":"search\/results?q={k}"},"www.exalead.com":{"backlink":"search\/results?q={k}"},"search.excite.it":{"backlink":"web\/?q={k}"},"search.excite.fr":{"backlink":"web\/?q={k}"},"search.excite.de":{"backlink":"web\/?q={k}"},"search.excite.co.uk":{"backlink":"web\/?q={k}"},"search.excite.es":{"backlink":"web\/?q={k}"},"search.excite.nl":{"backlink":"web\/?q={k}"},"www.excite.co.jp":{"params":["search"],"backlink":"search.gw?search={k}","charsets":["SHIFT_JIS"]},"www.facebook.com":{"backlink":"search\/?q={k}"},"www.fastbrowsersearch.com":{"backlink":"results\/results.aspx?q={k}"},"www.findhurtig.dk":{"backlink":"web?q={k}"},"www.fireball.de":{"backlink":"ajax.asp?q={k}"},"www.firstsfind.com":{"params":["qry"]},"www.flix.de":{"params":["keyword"]},"search.fooooo.com":{"backlink":"web\/?q={k}"},"forestle.org":{"backlink":"search.php?q={k}"},"{}.forestle.org":{"backlink":"search.php?q={k}"},"recherche.francite.com":{"params":["name"]},"search.free.fr":{"params":{"1":"qs"}},"search1-2.free.fr":{"params":{"1":"qs"}},"search1-1.free.fr":{"params":{"1":"qs"}},"search.freecause.com":{"params":["p"],"backlink":"?p={k}"},"suche.freenet.de":{"params":["query","Keywords"],"backlink":"suche\/?query={k}"},"friendfeed.com":{"backlink":"search?q={k}"},"gais.cs.ccu.edu.tw":{"backlink":"search.php?q={k}"},"search.genieo.com":{"backlink":"&q={k}"},"geona.net":{"backlink":"search?q={k}"},"www.gigablast.com":{"backlink":"search?q={k}"},"www.gnadenmeer.de":{"params":["keyword"]},"www.gomeo.com":{"params":["Keywords"],"backlink":"\/search\/{k}"},"search.goo.ne.jp":{"params":["MT"],"backlink":"web.jsp?MT={k}"},"ocnsearch.goo.ne.jp":{"params":["MT"],"backlink":"web.jsp?MT={k}"},"google.com":{"backlink":"search?q={k}"},"google.{}":{"backlink":"search?q={k}"},"encrypted.google.com":{"backlink":"search?q={k}"},"www2.google.com":{"backlink":"search?q={k}"},"ipv6.google.com":{"backlink":"search?q={k}"},"go.google.com":{"backlink":"search?q={k}"},"wwwgoogle.com":{"backlink":"search?q={k}"},"wwwgoogle.{}":{"backlink":"search?q={k}"},"gogole.com":{"backlink":"search?q={k}"},"gogole.{}":{"backlink":"search?q={k}"},"gppgle.com":{"backlink":"search?q={k}"},"gppgle.{}":{"backlink":"search?q={k}"},"googel.com":{"backlink":"search?q={k}"},"googel.{}":{"backlink":"search?q={k}"},"search.avg.com":{"backlink":"search?q={k}"},"isearch.avg.com":{"backlink":"search?q={k}"},"search.chedot.com":{"params":["text"]},"www.cnn.com":{"params":["query"]},"darkoogle.com":{"params":["query"]},"search.darkoogle.com":{"params":["query"]},"search.foxtab.com":{"params":["query"]},"www.gooofullsearch.com":{"params":["Keywords"]},"search.hiyo.com":{"params":["Keywords"]},"search.incredimail.com":{"params":["Keywords"]},"search1.incredimail.com":{"params":["Keywords"]},"search2.incredimail.com":{"params":["Keywords"]},"search3.incredimail.com":{"params":["Keywords"]},"search4.incredimail.com":{"params":["Keywords"]},"search.sweetim.com":{"params":["Keywords"]},"www.fastweb.it":{"params":["Keywords"]},"search.juno.com":{"params":["query"]},"search.zum.com":{"params":["query"]},"find.tdc.dk":{"params":["query"]},"it.luna.tv":{"params":["query"]},"searchresults.verizon.com":{"params":["query"]},"search.walla.co.il":{"params":["query"]},"search.alot.com":{"params":["query"]},"suche.gmx.net":{"backlink":"web?q={k}"},"search.incredibar.com":{"backlink":"search.php?q={k}"},"search.1und1.de":{"backlink":"web?q={k}"},"suche.1und1.de":{"backlink":"web?q={k}"},"search.zonealarm.com":{"backlink":"web?q={k}"},"start.lenovo.com":{"backlink":"search\/index.php?q={k}"},"wow.com":{"backlink":"search\/index.php?q={k}"},"{}.wow.com":{"backlink":"search\/index.php?q={k}"},"search.leonardo.it":{"backlink":"search\/index.php?q={k}"},"www.optuszoo.com.au":{"backlink":"search\/index.php?q={k}"},"search.dolphin-browser.jp":{"backlink":"search\/index.php?q={k}"},"netlavis.azione.jp":{"backlink":"search\/index.php?q={k}"},"search.nan.so":{"backlink":"search\/index.php?q={k}"},"cgi2.nintendo.co.jp":{"params":["gsc.q"]},"search.smt.docomo.ne.jp":{"params":["MT"]},"image.search.smt.docomo.ne.jp":{"params":["MT"]},"searches.f-secure.com":{"params":["query"],"backlink":"search?query={k}"},"search.f-secure.com":{"params":["query"],"backlink":"search?query={k}"},"webcache.googleusercontent.com":{"backlink":"search?q={k}"},"search.bt.com":{"params":["p"],"backlink":"result?p={k}"},"startab.me":{"backlink":"search\/?q={k}"},"blogsearch.google.com":{"backlink":"blogsearch?q={k}"},"blogsearch.google.{}":{"backlink":"blogsearch?q={k}"},"google.com\/cse":{"params":{"1":"query"}},"google.{}\/cse":{"params":{"1":"query"}},"cse.google.com":{"params":{"1":"query"}},"cse.google.{}":{"params":{"1":"query"}},"google.com\/custom":{"params":{"1":"query"}},"google.{}\/custom":{"params":{"1":"query"}},"images.google.com":{"backlink":"images?q={k}"},"images.google.{}":{"backlink":"images?q={k}"},"google.com\/imgres":{"backlink":"images?q={k}"},"google.{}\/imgres":{"backlink":"images?q={k}"},"maps.google.com":{"backlink":"maps?q={k}"},"maps.google.{}":{"backlink":"maps?q={k}"},"scholar.google.com":{"backlink":"scholar?q={k}"},"scholar.google.{}":{"backlink":"scholar?q={k}"},"google.com\/products":{"backlink":"?q={k}&tbm=shop"},"google.{}\/products":{"backlink":"?q={k}&tbm=shop"},"video.google.com":{"backlink":"search?q={k}&tbm=vid"},"www.goyellow.de":{"params":["MDN"]},"www.haosou.com":{"backlink":"s?q={k}"},"www.highbeam.com":{"backlink":"Search.aspx?q={k}"},"req.hit-parade.com":{"params":["p7"],"backlink":"general\/recherche.asp?p7={k}"},"class.hit-parade.com":{"params":["p7"],"backlink":"general\/recherche.asp?p7={k}"},"www.hit-parade.com":{"params":["p7"],"backlink":"general\/recherche.asp?p7={k}"},"holmes.ge":{"backlink":"search.htm?q={k}"},"www.hooseek.com":{"params":["recherche"],"backlink":"web?recherche={k}"},"www.hotbot.com":{"params":["query"]},"start.iplay.com":{"backlink":"searchresults.aspx?q={k}"},"blogs.icerocket.com":{"backlink":"search?q={k}"},"www.icq.com":{"backlink":"search\/results.php?q={k}"},"search.icq.com":{"backlink":"search\/results.php?q={k}"},"www.ilse.nl":{"params":["search_for"],"backlink":"?search_for={k}"},"search.imesh.com":{"params":{"1":"si"},"backlink":"web?q={k}"},"www2.inbox.com":{"backlink":"search\/results1.aspx?q={k}"},"infospace.com":{"backlink":"\/search\/web?q={k}"},"dogpile.com":{"backlink":"\/search\/web?q={k}"},"tattoodle.com":{"backlink":"\/search\/web?q={k}"},"metacrawler.com":{"backlink":"\/search\/web?q={k}"},"webfetch.com":{"backlink":"\/search\/web?q={k}"},"webcrawler.com":{"backlink":"\/search\/web?q={k}"},"search.kiwee.com":{"backlink":"\/search\/web?q={k}"},"searches.vi-view.com":{"backlink":"\/search\/web?q={k}"},"search.webssearches.com":{"backlink":"\/search\/web?q={k}"},"search.fbdownloader.com":{"backlink":"\/search\/web?q={k}"},"searches3.globososo.com":{"backlink":"\/search\/web?q={k}"},"wsdsold.infospace.com":{"backlink":"pemonitorhosted\/ws\/results\/Web\/{k}\/1\/417\/TopNavigation\/Source\/"},"start.facemoods.com":{"params":["s"]},"www.google.interia.pl":{"backlink":"szukaj?q={k}"},"www.isodelen.se":{"params":["Keywords"],"backlink":"sokresultat?Keywords={k}"},"ixquick.com":{"params":["query"],"backlink":"do\/asearch?query={k}"},"www.eu.ixquick.com":{"params":["query"],"backlink":"do\/asearch?query={k}"},"ixquick.de":{"params":["query"],"backlink":"do\/asearch?query={k}"},"www.ixquick.de":{"params":["query"],"backlink":"do\/asearch?query={k}"},"us.ixquick.com":{"params":["query"],"backlink":"do\/asearch?query={k}"},"s1.us.ixquick.com":{"params":["query"],"backlink":"do\/asearch?query={k}"},"s2.us.ixquick.com":{"params":["query"],"backlink":"do\/asearch?query={k}"},"s3.us.ixquick.com":{"params":["query"],"backlink":"do\/asearch?query={k}"},"s4.us.ixquick.com":{"params":["query"],"backlink":"do\/asearch?query={k}"},"s5.us.ixquick.com":{"params":["query"],"backlink":"do\/asearch?query={k}"},"eu.ixquick.com":{"params":["query"],"backlink":"do\/asearch?query={k}"},"s8-eu.ixquick.com":{"params":["query"],"backlink":"do\/asearch?query={k}"},"s1-eu.ixquick.de":{"params":["query"],"backlink":"do\/asearch?query={k}"},"s2-eu4.ixquick.com":{"params":["query"],"backlink":"do\/asearch?query={k}"},"s5-eu4.ixquick.com":{"params":["query"],"backlink":"do\/asearch?query={k}"},"junglekey.com":{"params":["query"],"backlink":"search.php?query={k}&type=web&lang=en"},"junglekey.fr":{"params":["query"],"backlink":"search.php?query={k}&type=web&lang=en"},"jyxo.1188.cz":{"backlink":"s?q={k}"},"k9safesearch.com":{"backlink":"search.jsp?q={k}"},"www.kensaq.com":{"backlink":"web?q={k}"},"kvasir.no":{"params":{"1":"search_word"},"backlink":"alle?q={k}"},"www.kvasir.no":{"params":{"1":"search_word"},"backlink":"alle?q={k}"},"www.toile.com":{"backlink":"search?q={k}"},"web.toile.com":{"backlink":"search?q={k}"},"laban.vn":{"backlink":"search.html?q={k}"},"www.latne.lv":{"backlink":"siets.php?q={k}"},"search.lilo.org":{"backlink":"results.php?q={k}"},"lo.st":{"params":["x_query"],"backlink":"cgi-bin\/eolost.cgi?x_query={k}"},"search.lookseek.com":{"backlink":"search2.php?q={k}"},"www.looksmart.com":{"params":["key"]},"search.lycos.com":{"params":["query"],"backlink":"?query={k}"},"lycos.{}":{"params":["query"],"backlink":"?query={k}"},"www.maailm.com":{"params":["tekst"]},"go.mail.ru":{"backlink":"search?rch=e&q={k}","charsets":["UTF-8","windows-1251"]},"www.mamma.com":{"params":["query"],"backlink":"result.php?q={k}"},"mamma75.mamma.com":{"params":["query"],"backlink":"result.php?q={k}"},"www.meinestadt.de":{"params":["words"]},"meta.ua":{"backlink":"search.asp?q={k}"},"s1.metacrawler.de":{"params":["qry"],"backlink":"?qry={k}"},"s2.metacrawler.de":{"params":["qry"],"backlink":"?qry={k}"},"s3.metacrawler.de":{"params":["qry"],"backlink":"?qry={k}"},"meta.rrzn.uni-hannover.de":{"params":["eingabe"],"backlink":"meta\/cgi-bin\/meta.ger1?eingabe={k}"},"www.metager.de":{"params":["eingabe"],"backlink":"meta\/cgi-bin\/meta.ger1?eingabe={k}"},"metager.de":{"params":["eingabe"],"backlink":"meta\/cgi-bin\/meta.ger1?eingabe={k}"},"metager2.de":{"backlink":"search\/index.php?q={k}"},"www.mister-wong.com":{"params":["keywords"],"backlink":"search\/?keywords={k}"},"www.mister-wong.de":{"params":["keywords"],"backlink":"search\/?keywords={k}"},"www.monstercrawler.com":{"params":["qry"]},"www.mozbot.fr":{"backlink":"results.php?q={k}"},"www.mozbot.co.uk":{"backlink":"results.php?q={k}"},"www.mozbot.com":{"backlink":"results.php?q={k}"},"searchservice.myspace.com":{"params":["qry"],"backlink":"index.cfm?fuseaction=sitesearch.results&type=Web&qry={k}"},"www.mysearch.com":{"params":["searchfor","searchFor"],"backlink":"search\/Ajmain.jhtml?searchfor={k}"},"ms114.mysearch.com":{"params":["searchfor","searchFor"],"backlink":"search\/Ajmain.jhtml?searchfor={k}"},"ms146.mysearch.com":{"params":["searchfor","searchFor"],"backlink":"search\/Ajmain.jhtml?searchfor={k}"},"kf.mysearch.myway.com":{"params":["searchfor","searchFor"],"backlink":"search\/Ajmain.jhtml?searchfor={k}"},"ki.mysearch.myway.com":{"params":["searchfor","searchFor"],"backlink":"search\/Ajmain.jhtml?searchfor={k}"},"search.myway.com":{"params":["searchfor","searchFor"],"backlink":"search\/Ajmain.jhtml?searchfor={k}"},"search.mywebsearch.com":{"params":["searchfor","searchFor"],"backlink":"search\/Ajmain.jhtml?searchfor={k}"},"www.najdi.si":{"backlink":"search.jsp?q={k}"},"search.nate.com":{"backlink":"search\/all.html?q={k}","charsets":["EUC-KR"]},"search.naver.com":{"params":["query"],"backlink":"search.naver?query={k}"},"ko.search.need2find.com":{"params":["searchfor"],"backlink":"search\/AJmain.jhtml?searchfor={k}"},"www.neti.ee":{"params":["query"],"backlink":"cgi-bin\/otsing?query={k}","charsets":["iso-8859-1"]},"search.nifty.com":{"params":{"1":"Text"},"backlink":"websearch\/search?q={k}"},"search.azby.fmworld.net":{"params":{"1":"Text"},"backlink":"websearch\/search?q={k}"},"videosearch.nifty.com":{"params":["kw"],"backlink":"search?kw={k}"},"nigma.ru":{"params":["s"],"backlink":"index.php?s={k}"},"szukaj.onet.pl":{"params":["qt"],"backlink":"query.html?qt={k}"},"online.no":{"backlink":"google\/index.jsp?q={k}"},"www.only-search.com":{"backlink":"?q={k}"},"www.1881.no":{"params":["Query"],"backlink":"Multi\/?Query={k}"},"busca.orange.es":{"backlink":"search?q={k}"},"lemoteur.ke.voila.fr":{"params":["kw"],"backlink":"?kw={k}"},"lemoteur.orange.fr":{"params":["kw"],"backlink":"?kw={k}"},"www.paperball.de":{"backlink":"suche\/s\/?q={k}"},"extern.peoplecheck.de":{"backlink":"link.php?q={k}"},"search.peoplepc.com":{"backlink":"search?q={k}"},"www.picsearch.com":{"backlink":"index.cgi?q={k}"},"plusnetwork.com":{"backlink":"?q={k}"},"poisk.ru":{"params":["text"],"backlink":"cgi-bin\/poisk?text={k}","charsets":["windows-1251"]},"search.qip.ru":{"params":["query"],"backlink":"search?query={k}"},"websearch.rakuten.co.jp":{"params":["qt"],"backlink":"WebIS?qt={k}"},"nova.rambler.ru":{"params":["query","words"],"backlink":"search?query={k}"},"www.riksdelen.se":{"params":["What"],"backlink":"SearchResult.aspx?What={k}"},"search.rr.com":{"backlink":"?q={k}"},"rpmfind.net":{"params":["query"],"backlink":"linux\/rpm2html\/search.php?query={k}"},"fr2.rpmfind.net":{"params":["query"],"backlink":"linux\/rpm2html\/search.php?query={k}"},"pesquisa.sapo.pt":{"backlink":"?q={k}"},"scour.com":{"backlink":"search\/web\/{k}"},"www.search.ch":{"backlink":"?q={k}"},"www.search.com":{"backlink":"search?q={k}"},"searchalot.com":{"backlink":"?q={k}"},"www.searchcanvas.com":{"backlink":"web?q={k}"},"www.searchy.co.uk":{"backlink":"index.html?q={k}"},"search.seesaa.jp":{"backlink":"{k}\/index.html"},"bg.setooz.com":{"params":["query"],"backlink":"search?query={k}"},"da.setooz.com":{"params":["query"],"backlink":"search?query={k}"},"el.setooz.com":{"params":["query"],"backlink":"search?query={k}"},"fa.setooz.com":{"params":["query"],"backlink":"search?query={k}"},"ur.setooz.com":{"params":["query"],"backlink":"search?query={k}"},"{}.setooz.com":{"params":["query"],"backlink":"search?query={k}"},"search.seznam.cz":{"backlink":"?q={k}"},"videa.seznam.cz":{"backlink":"?q={k}"},"www.sharelook.fr":{"params":["keyword"]},"www.skynet.be":{"backlink":"services\/recherche\/google?q={k}"},"m.sm.cn":{"backlink":"s?q={k}"},"so.m.sm.cn":{"backlink":"s?q={k}"},"m.sp.sm.cn":{"backlink":"s?q={k}"},"www.sm.de":{"backlink":"?q={k}"},"search.smartaddressbar.com":{"params":["s"],"backlink":"?s={k}"},"search.smartshopping.com":{"params":["kwd","keywords"],"backlink":"?kwd={k}"},"search.snap.do":{"backlink":"?q={k}"},"www.so-net.ne.jp":{"params":["query"],"backlink":"search\/web\/?query={k}"},"video.so-net.ne.jp":{"params":["kw"],"backlink":"search\/?kw={k}"},"search.softonic.com":{"backlink":"default\/default?q={k}"},"www.sogou.com":{"params":["query"],"backlink":"web?query={k}","charsets":["gb2312"]},"m.sogou.com":{"params":["keyword"]},"wap.sogou.com":{"params":["keyword"]},"www.soso.com":{"params":["w"],"backlink":"q?w={k}","charsets":["gb2312"]},"www.sputnik.ru":{"backlink":"search?q={k}"},"startpage.com":{"params":["query"],"backlink":"do\/asearch?query={k}"},"classic.startpage.com":{"params":["query"],"backlink":"do\/asearch?query={k}"},"www.startpage.com":{"params":["query"],"backlink":"do\/asearch?query={k}"},"eu.startpage.com":{"params":["query"],"backlink":"do\/asearch?query={k}"},"s6-eu5.ixquick.com":{"params":["query"],"backlink":"do\/asearch?query={k}"},"s2-eu4.startpage.com":{"params":["query"],"backlink":"do\/asearch?query={k}"},"s6-eu4.startpage.com":{"params":["query"],"backlink":"do\/asearch?query={k}"},"s7-eu4.startpage.com":{"params":["query"],"backlink":"do\/asearch?query={k}"},"s1-eu5.startpage.com":{"params":["query"],"backlink":"do\/asearch?query={k}"},"s2-eu5.startpage.com":{"params":["query"],"backlink":"do\/asearch?query={k}"},"s4-eu5.startpage.com":{"params":["query"],"backlink":"do\/asearch?query={k}"},"s5-eu5.startpage.com":{"params":["query"],"backlink":"do\/asearch?query={k}"},"s6-eu5.startpage.com":{"params":["query"],"backlink":"do\/asearch?query={k}"},"s7-eu5.startpage.com":{"params":["query"],"backlink":"do\/asearch?query={k}"},"s8-eu5.startpage.com":{"params":["query"],"backlink":"do\/asearch?query={k}"},"s10-eu5.startpage.com":{"params":["query"],"backlink":"do\/asearch?query={k}"},"s11-eu5.startpage.com":{"params":["query"],"backlink":"do\/asearch?query={k}"},"s12-eu5.startpage.com":{"params":["query"],"backlink":"do\/asearch?query={k}"},"s13-eu5.startpage.com":{"params":["query"],"backlink":"do\/asearch?query={k}"},"s14-eu5.startpage.com":{"params":["query"],"backlink":"do\/asearch?query={k}"},"startgoogle.startpagina.nl":{"params":{"1":"query"},"backlink":"?q={k}"},"www.startsiden.no":{"backlink":"sok\/index.html?q={k}"},"suche.info":{"params":["Keywords"],"backlink":"suche.php?Keywords={k}"},"www.suchmaschine.com":{"params":["suchstr"],"backlink":"cgi-bin\/wo.cgi?suchstr={k}"},"suche.t-online.de":{"backlink":"fast-cgi\/tsc?mandant=toi&context=internet-tab&q={k}"},"brisbane.t-online.de":{"backlink":"fast-cgi\/tsc?mandant=toi&context=internet-tab&q={k}"},"navigationshilfe.t-online.de":{"backlink":"dtag\/dns\/results?mode=search_top&q={k}"},"www.talimba.com":{"params":["search"],"backlink":"index.php?page=search\/web&search={k}"},"www.talktalk.co.uk":{"params":["query"],"backlink":"search\/results.html?query={k}"},"tarmot.com":{"backlink":"ara\/?q={k}"},"technorati.com":{"backlink":"search?return=sites&authority=all&q={k}"},"www.teoma.com":{"backlink":"web?q={k}"},"buscador.terra.es":{"params":["query"],"backlink":"Default.aspx?source=Search&query={k}"},"buscador.terra.cl":{"params":["query"],"backlink":"Default.aspx?source=Search&query={k}"},"buscador.terra.com.br":{"params":["query"],"backlink":"Default.aspx?source=Search&query={k}"},"search.tiscali.it":{"params":{"1":"key"},"backlink":"?q={k}"},"search-dyn.tiscali.it":{"params":{"1":"key"},"backlink":"?q={k}"},"hledani.tiscali.cz":{"params":["query"]},"www.tixuma.de":{"params":["sc"],"backlink":"index.php?mp=search&stp=&sc={k}&tg=0"},"www.toolbarhome.com":{"backlink":"search.aspx?q={k}"},"vshare.toolbarhome.com":{"backlink":"search.aspx?q={k}"},"www.toppreise.ch":{"params":["search"],"backlink":"index.php?search={k}","charsets":["ISO-8859-1"]},"toppreise.ch":{"params":["search"],"backlink":"index.php?search={k}","charsets":["ISO-8859-1"]},"fr.toppreise.ch":{"params":["search"],"backlink":"index.php?search={k}","charsets":["ISO-8859-1"]},"de.toppreise.ch":{"params":["search"],"backlink":"index.php?search={k}","charsets":["ISO-8859-1"]},"en.toppreise.ch":{"params":["search"],"backlink":"index.php?search={k}","charsets":["ISO-8859-1"]},"www.trouvez.com":{"params":["query"]},"www.trovarapido.com":{"backlink":"result.php?q={k}"},"www.twingly.com":{"backlink":"search?q={k}"},"busca.uol.com.br":{"backlink":"\/web\/?q={k}"},"www.url.org":{"backlink":"?l=de&q={k}"},"www.vinden.nl":{"backlink":"?q={k}"},"www.vindex.nl":{"params":["search_for"],"backlink":"\/web?search_for={k}"},"search.vindex.nl":{"params":["search_for"],"backlink":"\/web?search_for={k}"},"ricerca.virgilio.it":{"params":["qs"],"backlink":"ricerca?qs={k}"},"ricercaimmagini.virgilio.it":{"params":["qs"],"backlink":"ricerca?qs={k}"},"ricercavideo.virgilio.it":{"params":["qs"],"backlink":"ricerca?qs={k}"},"ricercanews.virgilio.it":{"params":["qs"],"backlink":"ricerca?qs={k}"},"mobile.virgilio.it":{"params":["qrs"]},"search.ke.voila.fr":{"params":["rdata"],"backlink":"S\/voila?rdata={k}"},"www.lemoteur.fr":{"params":["rdata"],"backlink":"S\/voila?rdata={k}"},"web.volny.cz":{"params":["search"],"backlink":"fulltext\/?search={k}","charsets":["windows-1250"]},"www.walhello.info":{"params":["key"],"backlink":"search?key={k}"},"www.walhello.com":{"params":["key"],"backlink":"search?key={k}"},"www.walhello.de":{"params":["key"],"backlink":"search?key={k}"},"www.walhello.nl":{"params":["key"],"backlink":"search?key={k}"},"suche.web.de":{"params":["su"],"backlink":"search\/web\/?su={k}"},"m.suche.web.de":{"params":["su"],"backlink":"search\/web\/?su={k}"},"www.web.nl":{"params":["zoekwoord"]},"www.weborama.fr":{"params":["QUERY"]},"www.websearch.com":{"params":["qkw","q"],"backlink":"search\/results2.aspx?q={k}"},"fr.wedoo.com":{"params":["keyword"]},"en.wedoo.com":{"params":["keyword"]},"es.wedoo.com":{"params":["keyword"]},"search.winamp.com":{"backlink":"search\/search?q={k}"},"szukaj.wp.pl":{"params":["szukaj"],"backlink":"http:\/\/szukaj.wp.pl\/szukaj.html?szukaj={k}"},"www.witch.de":{"params":["search"],"backlink":"search-result.php?cn=0&search={k}"},"www.woopie.jp":{"params":["kw"],"backlink":"search?kw={k}"},"search.www.ee":{"params":["query"]},"www.x-recherche.com":{"params":["MOTS"],"backlink":"cgi-bin\/websearch?MOTS={k}"},"search.yahoo.com":{"params":["p"],"backlink":"search?p={k}"},"malaysia.search.yahoo.com":{"params":["p"],"backlink":"search?p={k}"},"{}.search.yahoo.com":{"params":["p"],"backlink":"search?p={k}"},"yahoo.com":{"params":["p"],"backlink":"search?p={k}"},"espanol.search.yahoo.com":{"params":["p"],"backlink":"search?p={k}"},"qc.search.yahoo.com":{"params":["p"],"backlink":"search?p={k}"},"one.cn.yahoo.com":{"params":["p"],"backlink":"search?p={k}"},"search.yahoo.com\/search\/dir":{"params":["p"],"backlink":"?p={k}"},"images.search.yahoo.com":{"params":["p","va"],"backlink":"search\/images?p={k}"},"{}.images.yahoo.com":{"params":["p","va"],"backlink":"search\/images?p={k}"},"cade.images.yahoo.com":{"params":["p","va"],"backlink":"search\/images?p={k}"},"espanol.images.yahoo.com":{"params":["p","va"],"backlink":"search\/images?p={k}"},"qc.images.yahoo.com":{"params":["p","va"],"backlink":"search\/images?p={k}"},"search.yahoo.co.jp":{"params":["p","vp"],"backlink":"search?p={k}","charsets":["utf-8","euc-jp","ms932"]},"jp.hao123.com":{"params":["query"]},"home.kingsoft.jp":{"params":["keyword"]},"image.search.yahoo.co.jp":{"params":["p"],"backlink":"search?p={k}","charsets":["utf-8","euc-jp","ms932"]},"video.search.yahoo.co.jp":{"params":["p"],"backlink":"search?p={k}","charsets":["utf-8","euc-jp","ms932"]},"search.yam.com":{"params":["k"],"backlink":"Search\/Web\/?SearchType=web&k={k}"},"yandex.ru":{"params":["text"],"backlink":"yandsearch?text={k}"},"yandex.com":{"params":["text"],"backlink":"yandsearch?text={k}"},"yandex.{}":{"params":["text"],"backlink":"yandsearch?text={k}"},"www.yandex.{}":{"params":["text"],"backlink":"yandsearch?text={k}"},"clck.yandex.{}":{"params":["text"],"backlink":"yandsearch?text={k}"},"m.yandex.{}":{"params":["text"],"backlink":"yandsearch?text={k}"},"images.yandex.ru":{"params":["text"],"backlink":"yandsearch?text={k}"},"images.yandex.com":{"params":["text"],"backlink":"yandsearch?text={k}"},"images.yandex.{}":{"params":["text"],"backlink":"yandsearch?text={k}"},"www.yasni.de":{"params":["query"]},"www.yasni.com":{"params":["query"]},"www.yasni.co.uk":{"params":["query"]},"www.yasni.ch":{"params":["query"]},"www.yasni.at":{"params":["query"]},"www.yatedo.com":{"backlink":"search\/profil?q={k}"},"www.yatedo.fr":{"backlink":"search\/profil?q={k}"},"yellowmap.de":{"params":[" "]},"yippy.com":{"params":["query"],"backlink":"search?query={k}"},"www.yougoo.fr":{"backlink":"?cx=search&q={k}"},"www.zapmeta.com":{"params":{"1":"query"},"backlink":"?q={k}"},"zapmeta.{}":{"params":{"1":"query"},"backlink":"?q={k}"},"uk.zapmeta.com":{"params":{"1":"query"},"backlink":"?q={k}"},"ar.zapmeta.com":{"params":{"1":"query"},"backlink":"?q={k}"},"au.zapmeta.com":{"params":{"1":"query"},"backlink":"?q={k}"},"ca.zapmeta.com":{"params":{"1":"query"},"backlink":"?q={k}"},"fi.zapmeta.com":{"params":{"1":"query"},"backlink":"?q={k}"},"no.zapmeta.com":{"params":{"1":"query"},"backlink":"?q={k}"},"tr.zapmeta.com":{"params":{"1":"query"},"backlink":"?q={k}"},"p.zhongsou.com":{"params":["w"],"backlink":"p?w={k}"},"www.zoeken.nl":{"backlink":"?q={k}"},"zoohoo.cz":{"backlink":"?q={k}","charsets":["windows-1250"]},"www.zoznam.sk":{"params":["s"],"backlink":"hladaj.fcgi?s={k}&co=svet"},"www.zxuso.com":{"params":["wd"],"backlink":"ri\/?wd={k}"},"kwzf.net":{"params":["search"],"backlink":"#search={k}"}}
|
vendor/maxmind.php
CHANGED
@@ -2,34 +2,144 @@
|
|
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 ) ) {
|
9 |
$geo_output[ 'country' ][ 'iso_code' ] = 'xy';
|
10 |
}
|
11 |
-
else if ( file_exists(
|
12 |
// Do we need to update our data file?
|
13 |
-
if ( false !== ( $file_stat = stat(
|
14 |
// Is the database more than 30 days old?
|
15 |
if ( !empty( $file_stat ) && ( date( 'U' ) - $file_stat[ 'mtime' ] > 2629740 ) ) {
|
16 |
-
add_action( 'shutdown', array(
|
17 |
}
|
18 |
}
|
19 |
|
20 |
-
$reader = new MaxMindReader(
|
21 |
$geo_maxmind = $reader->get( $_ip_address );
|
22 |
|
23 |
if ( !empty( $geo_maxmind ) ) {
|
24 |
$geo_output = $geo_maxmind;
|
25 |
}
|
26 |
}
|
27 |
-
else if ( !is_file(
|
28 |
return $geo_output;
|
29 |
}
|
30 |
|
31 |
return apply_filters( 'slimstat_get_country', $geo_output, $_ip_address );
|
32 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
33 |
}
|
34 |
|
35 |
/**
|
2 |
|
3 |
class maxmind_geolite2_connector {
|
4 |
public static function get_geolocation_info( $_ip_address = '' ) {
|
5 |
+
$maxmind_path = wp_slimstat::$upload_dir . '/maxmind.mmdb';
|
6 |
$geo_output = array( 'country' => array( 'iso_code' => '' ) );
|
7 |
|
8 |
// Is this a RFC1918 (local) IP?
|
9 |
if ( wp_slimstat::is_local_ip_address( $_ip_address ) ) {
|
10 |
$geo_output[ 'country' ][ 'iso_code' ] = 'xy';
|
11 |
}
|
12 |
+
else if ( file_exists( $maxmind_path ) && is_file( $maxmind_path ) ) {
|
13 |
// Do we need to update our data file?
|
14 |
+
if ( false !== ( $file_stat = stat( $maxmind_path ) ) ) {
|
15 |
// Is the database more than 30 days old?
|
16 |
if ( !empty( $file_stat ) && ( date( 'U' ) - $file_stat[ 'mtime' ] > 2629740 ) ) {
|
17 |
+
add_action( 'shutdown', array( __CLASS__, 'download_maxmind_database' ) );
|
18 |
}
|
19 |
}
|
20 |
|
21 |
+
$reader = new MaxMindReader( $maxmind_path );
|
22 |
$geo_maxmind = $reader->get( $_ip_address );
|
23 |
|
24 |
if ( !empty( $geo_maxmind ) ) {
|
25 |
$geo_output = $geo_maxmind;
|
26 |
}
|
27 |
}
|
28 |
+
else if ( !is_file( $maxmind_path ) ) {
|
29 |
return $geo_output;
|
30 |
}
|
31 |
|
32 |
return apply_filters( 'slimstat_get_country', $geo_output, $_ip_address );
|
33 |
}
|
34 |
+
|
35 |
+
/**
|
36 |
+
* Downloads the MaxMind geolocation database from their repository
|
37 |
+
*/
|
38 |
+
public static function download_maxmind_database() {
|
39 |
+
$maxmind_path = wp_slimstat::$upload_dir . '/maxmind.mmdb';
|
40 |
+
|
41 |
+
// Create the folder, if it doesn't exist
|
42 |
+
if ( !file_exists( dirname( $maxmind_path ) ) ) {
|
43 |
+
mkdir( dirname( $maxmind_path ) );
|
44 |
+
}
|
45 |
+
|
46 |
+
if ( file_exists( $maxmind_path ) ) {
|
47 |
+
if ( is_file( $maxmind_path ) ) {
|
48 |
+
$is_deleted = @unlink( $maxmind_path );
|
49 |
+
}
|
50 |
+
else {
|
51 |
+
// This should not happen, but hey...
|
52 |
+
$is_deleted = @rmdir( $maxmind_path );
|
53 |
+
}
|
54 |
+
|
55 |
+
if ( !$is_deleted ) {
|
56 |
+
return __( "The geolocation database cannot be updated. Please check your server's file permissions and try again.", 'wp-slimstat' );
|
57 |
+
}
|
58 |
+
}
|
59 |
+
|
60 |
+
// Download the most recent database directly from MaxMind's repository
|
61 |
+
if ( wp_slimstat::$settings[ 'geolocation_country' ] == 'on' ) {
|
62 |
+
$maxmind_tmp = self::download_url( 'https://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.mmdb.gz' );
|
63 |
+
}
|
64 |
+
else {
|
65 |
+
$maxmind_tmp = self::download_url( 'https://geolite.maxmind.com/download/geoip/database/GeoLite2-City.mmdb.gz' );
|
66 |
+
}
|
67 |
+
|
68 |
+
if ( is_wp_error( $maxmind_tmp ) ) {
|
69 |
+
return __( 'There was an error downloading the MaxMind Geolite DB:', 'wp-slimstat' ) . ' ' . $maxmind_tmp->get_error_message();
|
70 |
+
}
|
71 |
+
|
72 |
+
$zh = false;
|
73 |
+
|
74 |
+
if ( !function_exists( 'gzopen' ) ) {
|
75 |
+
if ( function_exists( 'gzopen64' ) ) {
|
76 |
+
if ( false === ( $zh = gzopen64( $maxmind_tmp, 'rb' ) ) ) {
|
77 |
+
return __( "There was an error opening the zipped MaxMind Geolite DB. Please check your server's file permissions and try again.", 'wp-slimstat' );
|
78 |
+
}
|
79 |
+
}
|
80 |
+
else {
|
81 |
+
return __( 'Function <code>gzopen</code> is not defined in your environment. Please ask your server administrator to install the corresponding library.', 'wp-slimstat' );
|
82 |
+
}
|
83 |
+
}
|
84 |
+
else{
|
85 |
+
if ( false === ( $zh = gzopen( $maxmind_tmp, 'rb' ) ) ) {
|
86 |
+
return __( "There was an error opening the zipped MaxMind Geolite DB. Please check your server's file permissions and try again.", 'wp-slimstat' );
|
87 |
+
}
|
88 |
+
}
|
89 |
+
|
90 |
+
if ( false === ( $fh = fopen( $maxmind_path, 'wb' ) ) ) {
|
91 |
+
return __( "There was an error opening the MaxMind Geolite DB. Please check your server's file permissions and try again.", 'wp-slimstat' );
|
92 |
+
}
|
93 |
+
|
94 |
+
while ( ( $data = gzread( $zh, 4096 ) ) != false ) {
|
95 |
+
fwrite( $fh, $data );
|
96 |
+
}
|
97 |
+
|
98 |
+
@gzclose( $zh );
|
99 |
+
@fclose( $fh );
|
100 |
+
|
101 |
+
if ( !is_file( $maxmind_path ) ) {
|
102 |
+
// Something went wrong, maybe a folder was created instead of a regular file
|
103 |
+
@rmdir( $maxmind_path );
|
104 |
+
return __( 'There was an error creating the MaxMind Geolite DB.', 'wp-slimstat' );
|
105 |
+
}
|
106 |
+
|
107 |
+
@unlink( $maxmind_tmp );
|
108 |
+
|
109 |
+
return '';
|
110 |
+
}
|
111 |
+
|
112 |
+
public static function download_url( $url ) {
|
113 |
+
// Include the FILE API, if it's not defined
|
114 |
+
if ( !function_exists( 'download_url' ) ) {
|
115 |
+
require_once( ABSPATH . 'wp-admin/includes/file.php' );
|
116 |
+
}
|
117 |
+
|
118 |
+
if ( !$url ) {
|
119 |
+
return new WP_Error( 'http_no_url', __( 'The provided URL is invalid.', 'wp-slimstat' ) );
|
120 |
+
}
|
121 |
+
|
122 |
+
$url_filename = basename( parse_url( $url, PHP_URL_PATH ) );
|
123 |
+
|
124 |
+
$tmpfname = wp_tempnam( $url_filename );
|
125 |
+
if ( ! $tmpfname ) {
|
126 |
+
return new WP_Error( 'http_no_file', __( "A temporary file could not be created. Please check your server's file permissions and try again.", 'wp-slimstat' ) );
|
127 |
+
}
|
128 |
+
|
129 |
+
$response = wp_safe_remote_get( $url, array( 'timeout' => 300, 'stream' => true, 'filename' => $tmpfname, 'user-agent' => 'Slimstat Analytics/' . wp_slimstat::$version . '; ' . home_url() ) );
|
130 |
+
|
131 |
+
if ( is_wp_error( $response ) ) {
|
132 |
+
unlink( $tmpfname );
|
133 |
+
return $response;
|
134 |
+
}
|
135 |
+
|
136 |
+
if ( 200 != wp_remote_retrieve_response_code( $response ) ){
|
137 |
+
unlink( $tmpfname );
|
138 |
+
return new WP_Error( 'http_404', trim( wp_remote_retrieve_response_message( $response ) ) );
|
139 |
+
}
|
140 |
+
|
141 |
+
return $tmpfname;
|
142 |
+
}
|
143 |
}
|
144 |
|
145 |
/**
|
wp-slimstat.js
CHANGED
@@ -1,8 +1,9 @@
|
|
1 |
var SlimStat = {
|
2 |
-
|
|
|
3 |
|
4 |
// Encodes a string using the UTF-8 encoding. This function is needed by the Base64 Encoder here below
|
5 |
-
|
6 |
var n, c, utftext = "";
|
7 |
|
8 |
string = string.replace(/\r\n/g, "\n");
|
@@ -27,10 +28,10 @@ var SlimStat = {
|
|
27 |
},
|
28 |
|
29 |
// Base64 Encode - http://www.webtoolkit.info/
|
30 |
-
|
31 |
var chr1, chr2, chr3, enc1, enc2, enc3, enc4, output = "", i = 0;
|
32 |
|
33 |
-
input = SlimStat.
|
34 |
|
35 |
while ( i < input.length ) {
|
36 |
chr1 = input.charCodeAt( i++ );
|
@@ -49,7 +50,7 @@ var SlimStat = {
|
|
49 |
enc4 = 64;
|
50 |
}
|
51 |
|
52 |
-
output = output + SlimStat.
|
53 |
}
|
54 |
return output;
|
55 |
},
|
@@ -121,6 +122,7 @@ var SlimStat = {
|
|
121 |
|
122 |
xhr.onreadystatechange = function() {
|
123 |
if ( 4 == xhr.readyState ) {
|
|
|
124 |
document.body.insertAdjacentHTML( 'beforeend', xhr.responseText );
|
125 |
}
|
126 |
}
|
@@ -194,10 +196,8 @@ var SlimStat = {
|
|
194 |
use_beacon = true;
|
195 |
}
|
196 |
|
197 |
-
slimstat_data_with_client_info = data + "&sw=" + screen.width + "&sh=" + screen.height + "&bw=" + window.innerWidth + "&bh=" + window.innerHeight + "&sl=" + SlimStat.get_server_latency() + "&pp=" + SlimStat.get_page_performance();
|
198 |
-
|
199 |
if ( use_beacon && navigator.sendBeacon ) {
|
200 |
-
navigator.sendBeacon( SlimStatParams.ajaxurl,
|
201 |
}
|
202 |
else {
|
203 |
try {
|
@@ -211,7 +211,7 @@ var SlimStat = {
|
|
211 |
xhr.setRequestHeader( "Content-type", "application/x-www-form-urlencoded" );
|
212 |
xhr.setRequestHeader( "X-Requested-With", "XMLHttpRequest" );
|
213 |
xhr.withCredentials = true;
|
214 |
-
xhr.send(
|
215 |
|
216 |
xhr.onreadystatechange = function() {
|
217 |
if ( 4 == xhr.readyState ) {
|
@@ -261,66 +261,99 @@ var SlimStat = {
|
|
261 |
return false;
|
262 |
}
|
263 |
|
264 |
-
resource_url = "";
|
|
|
265 |
|
266 |
-
//
|
267 |
-
|
|
|
|
|
268 |
|
269 |
-
//
|
270 |
-
|
271 |
-
|
272 |
-
|
273 |
-
|
274 |
-
|
275 |
-
|
276 |
-
|
277 |
-
}
|
278 |
|
279 |
-
|
280 |
-
|
281 |
-
|
282 |
-
|
|
|
|
|
|
|
|
|
283 |
|
284 |
-
|
285 |
-
|
286 |
-
|
287 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
288 |
}
|
289 |
|
290 |
-
if ( !SlimStat.empty(
|
291 |
-
|
292 |
-
|
293 |
-
resource_url = target_node.hash;
|
294 |
}
|
295 |
-
|
296 |
-
|
297 |
-
|
298 |
-
// Do not track links containing one of the strings defined in the settings as HREF
|
299 |
-
if ( SlimStat.in_array( target_node.href, do_not_track ) ) {
|
300 |
-
return false;
|
301 |
-
}
|
302 |
-
|
303 |
-
resource_url = target_node.href;
|
304 |
}
|
305 |
|
306 |
// If this element has a title, we can record that as well
|
307 |
-
if ( "function" == typeof
|
308 |
-
if ( !SlimStat.empty(
|
309 |
-
note_array.push( "Title:" +
|
310 |
}
|
311 |
-
if ( !SlimStat.empty(
|
312 |
-
note_array.push( "ID:" +
|
313 |
}
|
314 |
}
|
315 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
316 |
}
|
317 |
|
318 |
-
|
319 |
-
|
|
|
320 |
|
321 |
-
|
322 |
-
|
323 |
-
|
|
|
|
|
324 |
}
|
325 |
}
|
326 |
|
@@ -334,20 +367,36 @@ var SlimStat = {
|
|
334 |
position = window.event.clientX + document.body.scrollLeft + document.documentElement.scrollLeft + "," + window.event.clientY + document.body.scrollTop + document.documentElement.scrollTop;
|
335 |
}
|
336 |
|
337 |
-
|
338 |
-
|
339 |
-
|
340 |
-
|
341 |
-
|
342 |
-
|
343 |
-
|
344 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
345 |
}
|
346 |
}
|
347 |
|
348 |
-
|
|
|
349 |
|
350 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
351 |
}
|
352 |
}
|
353 |
|
@@ -364,15 +413,12 @@ SlimStat.add_event( window, 'load', function() {
|
|
364 |
use_beacon = true;
|
365 |
|
366 |
// Server-side mode: update an existing pageview
|
367 |
-
if ( !SlimStat.empty( SlimStatParams.id ) ) {
|
368 |
-
|
369 |
-
if ( parseInt( SlimStatParams.id ) > 0 ) {
|
370 |
-
slimstat_data = "action=slimtrack&id=" + SlimStatParams.id;
|
371 |
-
}
|
372 |
}
|
373 |
// Client-side mode: record a new pageview
|
374 |
else {
|
375 |
-
slimstat_data = "action=slimtrack&ref=" + SlimStat.
|
376 |
|
377 |
// The "ci" param is not defined for external pages (the server-side tracker knows how to handle that situation)
|
378 |
if ( !SlimStat.empty( SlimStatParams.ci ) ) {
|
@@ -384,19 +430,44 @@ SlimStat.add_event( window, 'load', function() {
|
|
384 |
}
|
385 |
|
386 |
if ( slimstat_data.length > 0 ) {
|
387 |
-
|
388 |
-
|
389 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
390 |
}
|
391 |
|
392 |
-
// Attach an event handler to all the
|
393 |
-
|
394 |
-
for ( var i = 0; i <
|
395 |
-
SlimStat.add_event(
|
396 |
SlimStat.ss_track();
|
397 |
} );
|
398 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
399 |
|
400 |
-
|
401 |
-
SlimStat.show_optout_message();
|
402 |
-
} );
|
1 |
var SlimStat = {
|
2 |
+
base64_key_str : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789._-",
|
3 |
+
fingerprint_hash : "",
|
4 |
|
5 |
// Encodes a string using the UTF-8 encoding. This function is needed by the Base64 Encoder here below
|
6 |
+
utf8_encode : function( string ) {
|
7 |
var n, c, utftext = "";
|
8 |
|
9 |
string = string.replace(/\r\n/g, "\n");
|
28 |
},
|
29 |
|
30 |
// Base64 Encode - http://www.webtoolkit.info/
|
31 |
+
base64_encode : function( input ) {
|
32 |
var chr1, chr2, chr3, enc1, enc2, enc3, enc4, output = "", i = 0;
|
33 |
|
34 |
+
input = SlimStat.utf8_encode( input );
|
35 |
|
36 |
while ( i < input.length ) {
|
37 |
chr1 = input.charCodeAt( i++ );
|
50 |
enc4 = 64;
|
51 |
}
|
52 |
|
53 |
+
output = output + SlimStat.base64_key_str.charAt( enc1 ) + SlimStat.base64_key_str.charAt( enc2 ) + SlimStat.base64_key_str.charAt( enc3 ) + SlimStat.base64_key_str.charAt( enc4 );
|
54 |
}
|
55 |
return output;
|
56 |
},
|
122 |
|
123 |
xhr.onreadystatechange = function() {
|
124 |
if ( 4 == xhr.readyState ) {
|
125 |
+
|
126 |
document.body.insertAdjacentHTML( 'beforeend', xhr.responseText );
|
127 |
}
|
128 |
}
|
196 |
use_beacon = true;
|
197 |
}
|
198 |
|
|
|
|
|
199 |
if ( use_beacon && navigator.sendBeacon ) {
|
200 |
+
navigator.sendBeacon( SlimStatParams.ajaxurl, data );
|
201 |
}
|
202 |
else {
|
203 |
try {
|
211 |
xhr.setRequestHeader( "Content-type", "application/x-www-form-urlencoded" );
|
212 |
xhr.setRequestHeader( "X-Requested-With", "XMLHttpRequest" );
|
213 |
xhr.withCredentials = true;
|
214 |
+
xhr.send( data );
|
215 |
|
216 |
xhr.onreadystatechange = function() {
|
217 |
if ( 4 == xhr.readyState ) {
|
261 |
return false;
|
262 |
}
|
263 |
|
264 |
+
var resource_url = "";
|
265 |
+
var fingerprint_hash = "";
|
266 |
|
267 |
+
// This function doesn't track focus events, which are usually triggered along with click events
|
268 |
+
if ( SlimStat.empty( window.event.type ) || window.event.type == "focus" ) {
|
269 |
+
return false;
|
270 |
+
}
|
271 |
|
272 |
+
// Event description and button pressed
|
273 |
+
note_array.push( 'Type:' + window.event.type );
|
274 |
+
if ( "keypress" == window.event.type ) {
|
275 |
+
note_array.push( 'Keypress:' + String.fromCharCode( parseInt( window.event.which ) ) );
|
276 |
+
}
|
277 |
+
else if ( "click" == window.event.type ) {
|
278 |
+
note_array.push( 'Button:' + ( window.event.which == 1 ? 'left' : ( window.event.which == 2 ) ? 'middle' : 'right' ) );
|
279 |
+
}
|
|
|
280 |
|
281 |
+
// Different elements have different properties to record...
|
282 |
+
switch ( target_node.nodeName.toLowerCase() ) {
|
283 |
+
case "input":
|
284 |
+
case "button":
|
285 |
+
// Look for a parent FORM element to get the target action
|
286 |
+
while ( !SlimStat.empty( target_node ) && !SlimStat.empty( target_node.nodeName ) && target_node.nodeName.toLowerCase() != "form" ) {
|
287 |
+
target_node = target_node.parentNode;
|
288 |
+
}
|
289 |
|
290 |
+
if ( !SlimStat.empty( target_node ) && !SlimStat.empty( target_node.action ) ) {
|
291 |
+
resource_url = target_node.action;
|
292 |
+
}
|
293 |
+
break;
|
294 |
+
|
295 |
+
default:
|
296 |
+
// Look for a parent with a HREF attribute, if this node doesn't have one (i.e., a SPAN within an A element)
|
297 |
+
if ( SlimStat.empty( target_node.href ) || "string" != typeof target_node.href ) {
|
298 |
+
parent_node = target_node.parentNode;
|
299 |
+
while ( !SlimStat.empty( parent_node ) && !SlimStat.empty( parent_node.nodeName ) && SlimStat.empty( parent_node.href ) ) {
|
300 |
+
parent_node = parent_node.parentNode;
|
301 |
}
|
302 |
|
303 |
+
if ( !SlimStat.empty( parent_node ) ) {
|
304 |
+
if ( !SlimStat.empty( parent_node.hash ) && parent_node.hostname == location.hostname ) {
|
305 |
+
resource_url = parent_node.hash;
|
|
|
306 |
}
|
307 |
+
else if ( !SlimStat.empty( parent_node.href ) ) {
|
308 |
+
resource_url = parent_node.href;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
309 |
}
|
310 |
|
311 |
// If this element has a title, we can record that as well
|
312 |
+
if ( "function" == typeof parent_node.getAttribute ) {
|
313 |
+
if ( !SlimStat.empty( parent_node.getAttribute( "title" ) ) ) {
|
314 |
+
note_array.push( "Parent Title:" + parent_node.getAttribute( "title" ) );
|
315 |
}
|
316 |
+
if ( !SlimStat.empty( parent_node.getAttribute( "id" ) ) ) {
|
317 |
+
note_array.push( "Parent ID:" + parent_node.getAttribute( "id" ) );
|
318 |
}
|
319 |
}
|
320 |
}
|
321 |
+
}
|
322 |
+
else if ( !SlimStat.empty( target_node.hash ) ) {
|
323 |
+
resource_url = target_node.hash;
|
324 |
+
}
|
325 |
+
else {
|
326 |
+
resource_url = target_node.href;
|
327 |
+
}
|
328 |
+
|
329 |
+
// If this element has a title, we can record that as well
|
330 |
+
if ( "function" == typeof target_node.getAttribute ) {
|
331 |
+
if ( !SlimStat.empty( target_node.getAttribute( "title" ) ) ) {
|
332 |
+
note_array.push( "Title:" + target_node.getAttribute( "title" ) );
|
333 |
+
}
|
334 |
+
if ( !SlimStat.empty( target_node.getAttribute( "id" ) ) ) {
|
335 |
+
note_array.push( "ID:" + target_node.getAttribute( "id" ) );
|
336 |
+
}
|
337 |
+
}
|
338 |
+
}
|
339 |
+
|
340 |
+
do_not_track = !SlimStat.empty( SlimStatParams.dnt ) ? SlimStatParams.dnt.split( ',' ) : [];
|
341 |
+
|
342 |
+
if ( !SlimStat.empty( resource_url ) ) {
|
343 |
+
// Do not track links containing one of the strings defined in the settings as HREF
|
344 |
+
if ( !SlimStat.empty( do_not_track ) && SlimStat.in_array( resource_url, do_not_track ) ) {
|
345 |
+
return false;
|
346 |
}
|
347 |
|
348 |
+
// Send the fingerprint hash, in case this is considered a 'download'
|
349 |
+
fingerprint_hash = "&fh=" + SlimStat.fingerprint_hash;
|
350 |
+
}
|
351 |
|
352 |
+
// See if any of the classes associated to this element are listed as "do not track"
|
353 |
+
target_classes = ( !SlimStat.empty( target_node.className ) && "string" == typeof target_node.className ) ? target_node.className.split( " " ) : [];
|
354 |
+
if ( !SlimStat.empty( do_not_track ) && !SlimStat.empty( target_classes ) ) {
|
355 |
+
if ( target_classes.filter( function( value ) { return do_not_track.indexOf( value ) !== -1; } ).length != 0 || ( !SlimStat.empty( target_node.attributes ) && !SlimStat.empty( target_node.attributes.rel ) && !SlimStat.empty( target_node.attributes.rel.value ) && SlimStat.in_array( target_node.attributes.rel.value, do_not_track ) ) ) {
|
356 |
+
return false;
|
357 |
}
|
358 |
}
|
359 |
|
367 |
position = window.event.clientX + document.body.scrollLeft + document.documentElement.scrollLeft + "," + window.event.clientY + document.body.scrollTop + document.documentElement.scrollTop;
|
368 |
}
|
369 |
|
370 |
+
SlimStat.send_to_server( "action=slimtrack&id=" + SlimStatParams.id + "&res=" + SlimStat.base64_encode( resource_url ) + "&pos=" + position + "&no=" + SlimStat.base64_encode( note_array.join( "," ) ) + fingerprint_hash, use_beacon );
|
371 |
+
|
372 |
+
return true;
|
373 |
+
},
|
374 |
+
|
375 |
+
get_slimstat_data : function( fingerprint_components ) {
|
376 |
+
screenres = SlimStat.get_component_value( fingerprint_components, "screenResolution", [0, 0] );
|
377 |
+
|
378 |
+
return "&sw=" + screenres[ 0 ] + "&sh=" + screenres[ 1 ] + "&bw=" + window.innerWidth + "&bh=" + window.innerHeight + "&sl=" + SlimStat.get_server_latency() + "&pp=" + SlimStat.get_page_performance() + "&fh=" + SlimStat.fingerprint_hash + "&tz=" + SlimStat.get_component_value( fingerprint_components, "timezoneOffset", 0 );
|
379 |
+
},
|
380 |
+
|
381 |
+
get_component_value : function( fingerprint_components, key, default_value ) {
|
382 |
+
for ( x = 0; x < fingerprint_components.length; x++ ) {
|
383 |
+
if ( fingerprint_components[ x ].key === key ) {
|
384 |
+
return fingerprint_components[ x ].value;
|
385 |
}
|
386 |
}
|
387 |
|
388 |
+
return default_value;
|
389 |
+
},
|
390 |
|
391 |
+
init_fingerprint_hash : function ( fingerprint_components ) {
|
392 |
+
values = fingerprint_components.map(
|
393 |
+
function ( component ) {
|
394 |
+
return component.value;
|
395 |
+
}
|
396 |
+
);
|
397 |
+
|
398 |
+
// Generate the unique fingerprint hash
|
399 |
+
SlimStat.fingerprint_hash = Fingerprint2.x64hash128( values.join( '' ), 31 );
|
400 |
}
|
401 |
}
|
402 |
|
413 |
use_beacon = true;
|
414 |
|
415 |
// Server-side mode: update an existing pageview
|
416 |
+
if ( !SlimStat.empty( SlimStatParams.id ) && parseInt( SlimStatParams.id ) > 0 ) {
|
417 |
+
slimstat_data = "action=slimtrack&id=" + SlimStatParams.id;
|
|
|
|
|
|
|
418 |
}
|
419 |
// Client-side mode: record a new pageview
|
420 |
else {
|
421 |
+
slimstat_data = "action=slimtrack&ref=" + SlimStat.base64_encode( document.referrer ) + "&res=" + SlimStat.base64_encode( window.location.href );
|
422 |
|
423 |
// The "ci" param is not defined for external pages (the server-side tracker knows how to handle that situation)
|
424 |
if ( !SlimStat.empty( SlimStatParams.ci ) ) {
|
430 |
}
|
431 |
|
432 |
if ( slimstat_data.length > 0 ) {
|
433 |
+
var options = { excludes: { adBlock: true, addBehavior: true, userAgent: true, canvas: true, webgl: true } };
|
434 |
+
|
435 |
+
if ( window.requestIdleCallback ) {
|
436 |
+
requestIdleCallback( function () {
|
437 |
+
Fingerprint2.get( function ( components ) {
|
438 |
+
SlimStat.init_fingerprint_hash( components );
|
439 |
+
SlimStat.send_to_server( slimstat_data + SlimStat.get_slimstat_data( components ), use_beacon );
|
440 |
+
|
441 |
+
// GDPR: display the Opt-Out box, if needed
|
442 |
+
SlimStat.show_optout_message();
|
443 |
+
} );
|
444 |
+
} );
|
445 |
+
} else {
|
446 |
+
setTimeout( function () {
|
447 |
+
Fingerprint2.get( function ( components ) {
|
448 |
+
SlimStat.init_fingerprint_hash( components );
|
449 |
+
SlimStat.send_to_server( slimstat_data + SlimStat.get_slimstat_data( components ), use_beacon );
|
450 |
+
|
451 |
+
// GDPR: display the Opt-Out box, if needed
|
452 |
+
SlimStat.show_optout_message();
|
453 |
+
} );
|
454 |
+
}, 250 );
|
455 |
+
}
|
456 |
}
|
457 |
|
458 |
+
// Attach an event handler to all the clickable elements on the page
|
459 |
+
all_clickable = document.querySelectorAll( "a,button,input,area" );
|
460 |
+
for ( var i = 0; i < all_clickable.length; i++ ) {
|
461 |
+
SlimStat.add_event( all_clickable[ i ], "click", function( e ) {
|
462 |
SlimStat.ss_track();
|
463 |
} );
|
464 |
}
|
465 |
+
} );
|
466 |
+
SlimStat.add_event( window, 'beforeunload', function() {
|
467 |
+
if ( !SlimStat.empty( document.activeElement ) && !SlimStat.empty( document.activeElement.nodeName ) && document.activeElement.nodeName.toLowerCase() == "body" && !SlimStat.empty( SlimStatParams.id ) && parseInt( SlimStatParams.id ) > 0 ) {
|
468 |
+
SlimStat.send_to_server( "action=slimtrack&id=" + SlimStatParams.id, true );
|
469 |
+
}
|
470 |
+
} );
|
471 |
|
472 |
+
// fingerprintjs2 - https://github.com/Valve/fingerprintjs2
|
473 |
+
!function(e,t,a){"use strict";"undefined"!=typeof window&&"function"==typeof define&&define.amd?define(a):"undefined"!=typeof module&&module.exports?module.exports=a():t.exports?t.exports=a():t.Fingerprint2=a()}(0,this,function(){"use strict";var d=function(e,t){e=[e[0]>>>16,65535&e[0],e[1]>>>16,65535&e[1]],t=[t[0]>>>16,65535&t[0],t[1]>>>16,65535&t[1]];var a=[0,0,0,0];return a[3]+=e[3]+t[3],a[2]+=a[3]>>>16,a[3]&=65535,a[2]+=e[2]+t[2],a[1]+=a[2]>>>16,a[2]&=65535,a[1]+=e[1]+t[1],a[0]+=a[1]>>>16,a[1]&=65535,a[0]+=e[0]+t[0],a[0]&=65535,[a[0]<<16|a[1],a[2]<<16|a[3]]},g=function(e,t){e=[e[0]>>>16,65535&e[0],e[1]>>>16,65535&e[1]],t=[t[0]>>>16,65535&t[0],t[1]>>>16,65535&t[1]];var a=[0,0,0,0];return a[3]+=e[3]*t[3],a[2]+=a[3]>>>16,a[3]&=65535,a[2]+=e[2]*t[3],a[1]+=a[2]>>>16,a[2]&=65535,a[2]+=e[3]*t[2],a[1]+=a[2]>>>16,a[2]&=65535,a[1]+=e[1]*t[3],a[0]+=a[1]>>>16,a[1]&=65535,a[1]+=e[2]*t[2],a[0]+=a[1]>>>16,a[1]&=65535,a[1]+=e[3]*t[1],a[0]+=a[1]>>>16,a[1]&=65535,a[0]+=e[0]*t[3]+e[1]*t[2]+e[2]*t[1]+e[3]*t[0],a[0]&=65535,[a[0]<<16|a[1],a[2]<<16|a[3]]},f=function(e,t){return 32===(t%=64)?[e[1],e[0]]:t<32?[e[0]<<t|e[1]>>>32-t,e[1]<<t|e[0]>>>32-t]:(t-=32,[e[1]<<t|e[0]>>>32-t,e[0]<<t|e[1]>>>32-t])},h=function(e,t){return 0===(t%=64)?e:t<32?[e[0]<<t|e[1]>>>32-t,e[1]<<t]:[e[1]<<t-32,0]},m=function(e,t){return[e[0]^t[0],e[1]^t[1]]},T=function(e){return e=m(e,[0,e[0]>>>1]),e=g(e,[4283543511,3981806797]),e=m(e,[0,e[0]>>>1]),e=g(e,[3301882366,444984403]),e=m(e,[0,e[0]>>>1])},l=function(e,t){t=t||0;for(var a=(e=e||"").length%16,n=e.length-a,r=[0,t],i=[0,t],o=[0,0],l=[0,0],s=[2277735313,289559509],c=[1291169091,658871167],u=0;u<n;u+=16)o=[255&e.charCodeAt(u+4)|(255&e.charCodeAt(u+5))<<8|(255&e.charCodeAt(u+6))<<16|(255&e.charCodeAt(u+7))<<24,255&e.charCodeAt(u)|(255&e.charCodeAt(u+1))<<8|(255&e.charCodeAt(u+2))<<16|(255&e.charCodeAt(u+3))<<24],l=[255&e.charCodeAt(u+12)|(255&e.charCodeAt(u+13))<<8|(255&e.charCodeAt(u+14))<<16|(255&e.charCodeAt(u+15))<<24,255&e.charCodeAt(u+8)|(255&e.charCodeAt(u+9))<<8|(255&e.charCodeAt(u+10))<<16|(255&e.charCodeAt(u+11))<<24],o=g(o,s),o=f(o,31),o=g(o,c),r=m(r,o),r=f(r,27),r=d(r,i),r=d(g(r,[0,5]),[0,1390208809]),l=g(l,c),l=f(l,33),l=g(l,s),i=m(i,l),i=f(i,31),i=d(i,r),i=d(g(i,[0,5]),[0,944331445]);switch(o=[0,0],l=[0,0],a){case 15:l=m(l,h([0,e.charCodeAt(u+14)],48));case 14:l=m(l,h([0,e.charCodeAt(u+13)],40));case 13:l=m(l,h([0,e.charCodeAt(u+12)],32));case 12:l=m(l,h([0,e.charCodeAt(u+11)],24));case 11:l=m(l,h([0,e.charCodeAt(u+10)],16));case 10:l=m(l,h([0,e.charCodeAt(u+9)],8));case 9:l=m(l,[0,e.charCodeAt(u+8)]),l=g(l,c),l=f(l,33),l=g(l,s),i=m(i,l);case 8:o=m(o,h([0,e.charCodeAt(u+7)],56));case 7:o=m(o,h([0,e.charCodeAt(u+6)],48));case 6:o=m(o,h([0,e.charCodeAt(u+5)],40));case 5:o=m(o,h([0,e.charCodeAt(u+4)],32));case 4:o=m(o,h([0,e.charCodeAt(u+3)],24));case 3:o=m(o,h([0,e.charCodeAt(u+2)],16));case 2:o=m(o,h([0,e.charCodeAt(u+1)],8));case 1:o=m(o,[0,e.charCodeAt(u)]),o=g(o,s),o=f(o,31),o=g(o,c),r=m(r,o)}return r=m(r,[0,e.length]),i=m(i,[0,e.length]),r=d(r,i),i=d(i,r),r=T(r),i=T(i),r=d(r,i),i=d(i,r),("00000000"+(r[0]>>>0).toString(16)).slice(-8)+("00000000"+(r[1]>>>0).toString(16)).slice(-8)+("00000000"+(i[0]>>>0).toString(16)).slice(-8)+("00000000"+(i[1]>>>0).toString(16)).slice(-8)},e={preprocessor:null,audio:{timeout:1e3,excludeIOS11:!0},fonts:{swfContainerId:"fingerprintjs2",swfPath:"flash/compiled/FontList.swf",userDefinedFonts:[],extendedJsFonts:!1},screen:{detectScreenOrientation:!0},plugins:{sortPluginsFor:[/palemoon/i],excludeIE:!1},extraComponents:[],excludes:{enumerateDevices:!0,pixelRatio:!0,doNotTrack:!0,fontsFlash:!0},NOT_AVAILABLE:"not available",ERROR:"error",EXCLUDED:"excluded"},c=function(e,t){if(Array.prototype.forEach&&e.forEach===Array.prototype.forEach)e.forEach(t);else if(e.length===+e.length)for(var a=0,n=e.length;a<n;a++)t(e[a],a,e);else for(var r in e)e.hasOwnProperty(r)&&t(e[r],r,e)},s=function(e,n){var r=[];return null==e?r:Array.prototype.map&&e.map===Array.prototype.map?e.map(n):(c(e,function(e,t,a){r.push(n(e,t,a))}),r)},a=function(){return navigator.mediaDevices&&navigator.mediaDevices.enumerateDevices},n=function(e){var t=[window.screen.width,window.screen.height];return e.screen.detectScreenOrientation&&t.sort().reverse(),t},r=function(e){if(window.screen.availWidth&&window.screen.availHeight){var t=[window.screen.availHeight,window.screen.availWidth];return e.screen.detectScreenOrientation&&t.sort().reverse(),t}return e.NOT_AVAILABLE},i=function(e){if(null==navigator.plugins)return e.NOT_AVAILABLE;for(var t=[],a=0,n=navigator.plugins.length;a<n;a++)navigator.plugins[a]&&t.push(navigator.plugins[a]);return u(e)&&(t=t.sort(function(e,t){return e.name>t.name?1:e.name<t.name?-1:0})),s(t,function(e){var t=s(e,function(e){return[e.type,e.suffixes]});return[e.name,e.description,t]})},o=function(t){var e=[];if(Object.getOwnPropertyDescriptor&&Object.getOwnPropertyDescriptor(window,"ActiveXObject")||"ActiveXObject"in window){e=s(["AcroPDF.PDF","Adodb.Stream","AgControl.AgControl","DevalVRXCtrl.DevalVRXCtrl.1","MacromediaFlashPaper.MacromediaFlashPaper","Msxml2.DOMDocument","Msxml2.XMLHTTP","PDF.PdfCtrl","QuickTime.QuickTime","QuickTimeCheckObject.QuickTimeCheck.1","RealPlayer","RealPlayer.RealPlayer(tm) ActiveX Control (32-bit)","RealVideo.RealVideo(tm) ActiveX Control (32-bit)","Scripting.Dictionary","SWCtl.SWCtl","Shell.UIHelper","ShockwaveFlash.ShockwaveFlash","Skype.Detection","TDCCtl.TDCCtl","WMPlayer.OCX","rmocx.RealPlayer G2 Control","rmocx.RealPlayer G2 Control.1"],function(e){try{return new window.ActiveXObject(e),e}catch(e){return t.ERROR}})}else e.push(t.NOT_AVAILABLE);return navigator.plugins&&(e=e.concat(i(t))),e},u=function(e){for(var t=!1,a=0,n=e.plugins.sortPluginsFor.length;a<n;a++){var r=e.plugins.sortPluginsFor[a];if(navigator.userAgent.match(r)){t=!0;break}}return t},p=function(t){try{return!!window.sessionStorage}catch(e){return t.ERROR}},v=function(t){try{return!!window.localStorage}catch(e){return t.ERROR}},A=function(t){try{return!!window.indexedDB}catch(e){return t.ERROR}},S=function(e){return navigator.hardwareConcurrency?navigator.hardwareConcurrency:e.NOT_AVAILABLE},C=function(e){return navigator.cpuClass||e.NOT_AVAILABLE},B=function(e){return navigator.platform?navigator.platform:e.NOT_AVAILABLE},w=function(e){return navigator.doNotTrack?navigator.doNotTrack:navigator.msDoNotTrack?navigator.msDoNotTrack:window.doNotTrack?window.doNotTrack:e.NOT_AVAILABLE},t=function(){var t,e=0;void 0!==navigator.maxTouchPoints?e=navigator.maxTouchPoints:void 0!==navigator.msMaxTouchPoints&&(e=navigator.msMaxTouchPoints);try{document.createEvent("TouchEvent"),t=!0}catch(e){t=!1}return[e,t,"ontouchstart"in window]},y=function(e){var t=[],a=document.createElement("canvas");a.width=2e3,a.height=200,a.style.display="inline";var n=a.getContext("2d");return n.rect(0,0,10,10),n.rect(2,2,6,6),t.push("canvas winding:"+(!1===n.isPointInPath(5,5,"evenodd")?"yes":"no")),n.textBaseline="alphabetic",n.fillStyle="#f60",n.fillRect(125,1,62,20),n.fillStyle="#069",e.dontUseFakeFontInCanvas?n.font="11pt Arial":n.font="11pt no-real-font-123",n.fillText("Cwm fjordbank glyphs vext quiz, 😃",2,15),n.fillStyle="rgba(102, 204, 0, 0.2)",n.font="18pt Arial",n.fillText("Cwm fjordbank glyphs vext quiz, 😃",4,45),n.globalCompositeOperation="multiply",n.fillStyle="rgb(255,0,255)",n.beginPath(),n.arc(50,50,50,0,2*Math.PI,!0),n.closePath(),n.fill(),n.fillStyle="rgb(0,255,255)",n.beginPath(),n.arc(100,50,50,0,2*Math.PI,!0),n.closePath(),n.fill(),n.fillStyle="rgb(255,255,0)",n.beginPath(),n.arc(75,100,50,0,2*Math.PI,!0),n.closePath(),n.fill(),n.fillStyle="rgb(255,0,255)",n.arc(75,75,75,0,2*Math.PI,!0),n.arc(75,75,25,0,2*Math.PI,!0),n.fill("evenodd"),a.toDataURL&&t.push("canvas fp:"+a.toDataURL()),t},E=function(){var o,e=function(e){return o.clearColor(0,0,0,1),o.enable(o.DEPTH_TEST),o.depthFunc(o.LEQUAL),o.clear(o.COLOR_BUFFER_BIT|o.DEPTH_BUFFER_BIT),"["+e[0]+", "+e[1]+"]"};if(!(o=F()))return null;var l=[],t=o.createBuffer();o.bindBuffer(o.ARRAY_BUFFER,t);var a=new Float32Array([-.2,-.9,0,.4,-.26,0,0,.732134444,0]);o.bufferData(o.ARRAY_BUFFER,a,o.STATIC_DRAW),t.itemSize=3,t.numItems=3;var n=o.createProgram(),r=o.createShader(o.VERTEX_SHADER);o.shaderSource(r,"attribute vec2 attrVertex;varying vec2 varyinTexCoordinate;uniform vec2 uniformOffset;void main(){varyinTexCoordinate=attrVertex+uniformOffset;gl_Position=vec4(attrVertex,0,1);}"),o.compileShader(r);var i=o.createShader(o.FRAGMENT_SHADER);o.shaderSource(i,"precision mediump float;varying vec2 varyinTexCoordinate;void main() {gl_FragColor=vec4(varyinTexCoordinate,0,1);}"),o.compileShader(i),o.attachShader(n,r),o.attachShader(n,i),o.linkProgram(n),o.useProgram(n),n.vertexPosAttrib=o.getAttribLocation(n,"attrVertex"),n.offsetUniform=o.getUniformLocation(n,"uniformOffset"),o.enableVertexAttribArray(n.vertexPosArray),o.vertexAttribPointer(n.vertexPosAttrib,t.itemSize,o.FLOAT,!1,0,0),o.uniform2f(n.offsetUniform,1,1),o.drawArrays(o.TRIANGLE_STRIP,0,t.numItems);try{l.push(o.canvas.toDataURL())}catch(e){}l.push("extensions:"+(o.getSupportedExtensions()||[]).join(";")),l.push("webgl aliased line width range:"+e(o.getParameter(o.ALIASED_LINE_WIDTH_RANGE))),l.push("webgl aliased point size range:"+e(o.getParameter(o.ALIASED_POINT_SIZE_RANGE))),l.push("webgl alpha bits:"+o.getParameter(o.ALPHA_BITS)),l.push("webgl antialiasing:"+(o.getContextAttributes().antialias?"yes":"no")),l.push("webgl blue bits:"+o.getParameter(o.BLUE_BITS)),l.push("webgl depth bits:"+o.getParameter(o.DEPTH_BITS)),l.push("webgl green bits:"+o.getParameter(o.GREEN_BITS)),l.push("webgl max anisotropy:"+function(e){var t=e.getExtension("EXT_texture_filter_anisotropic")||e.getExtension("WEBKIT_EXT_texture_filter_anisotropic")||e.getExtension("MOZ_EXT_texture_filter_anisotropic");if(t){var a=e.getParameter(t.MAX_TEXTURE_MAX_ANISOTROPY_EXT);return 0===a&&(a=2),a}return null}(o)),l.push("webgl max combined texture image units:"+o.getParameter(o.MAX_COMBINED_TEXTURE_IMAGE_UNITS)),l.push("webgl max cube map texture size:"+o.getParameter(o.MAX_CUBE_MAP_TEXTURE_SIZE)),l.push("webgl max fragment uniform vectors:"+o.getParameter(o.MAX_FRAGMENT_UNIFORM_VECTORS)),l.push("webgl max render buffer size:"+o.getParameter(o.MAX_RENDERBUFFER_SIZE)),l.push("webgl max texture image units:"+o.getParameter(o.MAX_TEXTURE_IMAGE_UNITS)),l.push("webgl max texture size:"+o.getParameter(o.MAX_TEXTURE_SIZE)),l.push("webgl max varying vectors:"+o.getParameter(o.MAX_VARYING_VECTORS)),l.push("webgl max vertex attribs:"+o.getParameter(o.MAX_VERTEX_ATTRIBS)),l.push("webgl max vertex texture image units:"+o.getParameter(o.MAX_VERTEX_TEXTURE_IMAGE_UNITS)),l.push("webgl max vertex uniform vectors:"+o.getParameter(o.MAX_VERTEX_UNIFORM_VECTORS)),l.push("webgl max viewport dims:"+e(o.getParameter(o.MAX_VIEWPORT_DIMS))),l.push("webgl red bits:"+o.getParameter(o.RED_BITS)),l.push("webgl renderer:"+o.getParameter(o.RENDERER)),l.push("webgl shading language version:"+o.getParameter(o.SHADING_LANGUAGE_VERSION)),l.push("webgl stencil bits:"+o.getParameter(o.STENCIL_BITS)),l.push("webgl vendor:"+o.getParameter(o.VENDOR)),l.push("webgl version:"+o.getParameter(o.VERSION));try{var s=o.getExtension("WEBGL_debug_renderer_info");s&&(l.push("webgl unmasked vendor:"+o.getParameter(s.UNMASKED_VENDOR_WEBGL)),l.push("webgl unmasked renderer:"+o.getParameter(s.UNMASKED_RENDERER_WEBGL)))}catch(e){}return o.getShaderPrecisionFormat&&c(["FLOAT","INT"],function(i){c(["VERTEX","FRAGMENT"],function(r){c(["HIGH","MEDIUM","LOW"],function(n){c(["precision","rangeMin","rangeMax"],function(e){var t=o.getShaderPrecisionFormat(o[r+"_SHADER"],o[n+"_"+i])[e];"precision"!==e&&(e="precision "+e);var a=["webgl ",r.toLowerCase()," shader ",n.toLowerCase()," ",i.toLowerCase()," ",e,":",t].join("");l.push(a)})})})}),l},M=function(){try{var e=F(),t=e.getExtension("WEBGL_debug_renderer_info");return e.getParameter(t.UNMASKED_VENDOR_WEBGL)+"~"+e.getParameter(t.UNMASKED_RENDERER_WEBGL)}catch(e){return null}},x=function(){var e=document.createElement("div");e.innerHTML=" ";var t=!(e.className="adsbox");try{document.body.appendChild(e),t=0===document.getElementsByClassName("adsbox")[0].offsetHeight,document.body.removeChild(e)}catch(e){t=!1}return t},O=function(){if(void 0!==navigator.languages)try{if(navigator.languages[0].substr(0,2)!==navigator.language.substr(0,2))return!0}catch(e){return!0}return!1},b=function(){return window.screen.width<window.screen.availWidth||window.screen.height<window.screen.availHeight},P=function(){var e,t=navigator.userAgent.toLowerCase(),a=navigator.oscpu,n=navigator.platform.toLowerCase();if(e=0<=t.indexOf("windows phone")?"Windows Phone":0<=t.indexOf("win")?"Windows":0<=t.indexOf("android")?"Android":0<=t.indexOf("linux")||0<=t.indexOf("cros")?"Linux":0<=t.indexOf("iphone")||0<=t.indexOf("ipad")?"iOS":0<=t.indexOf("mac")?"Mac":"Other",("ontouchstart"in window||0<navigator.maxTouchPoints||0<navigator.msMaxTouchPoints)&&"Windows Phone"!==e&&"Android"!==e&&"iOS"!==e&&"Other"!==e)return!0;if(void 0!==a){if(0<=(a=a.toLowerCase()).indexOf("win")&&"Windows"!==e&&"Windows Phone"!==e)return!0;if(0<=a.indexOf("linux")&&"Linux"!==e&&"Android"!==e)return!0;if(0<=a.indexOf("mac")&&"Mac"!==e&&"iOS"!==e)return!0;if((-1===a.indexOf("win")&&-1===a.indexOf("linux")&&-1===a.indexOf("mac"))!=("Other"===e))return!0}return 0<=n.indexOf("win")&&"Windows"!==e&&"Windows Phone"!==e||((0<=n.indexOf("linux")||0<=n.indexOf("android")||0<=n.indexOf("pike"))&&"Linux"!==e&&"Android"!==e||((0<=n.indexOf("mac")||0<=n.indexOf("ipad")||0<=n.indexOf("ipod")||0<=n.indexOf("iphone"))&&"Mac"!==e&&"iOS"!==e||((n.indexOf("win")<0&&n.indexOf("linux")<0&&n.indexOf("mac")<0&&n.indexOf("iphone")<0&&n.indexOf("ipad")<0)!==("Other"===e)||void 0===navigator.plugins&&"Windows"!==e&&"Windows Phone"!==e)))},L=function(){var e,t=navigator.userAgent.toLowerCase(),a=navigator.productSub;if(("Chrome"===(e=0<=t.indexOf("firefox")?"Firefox":0<=t.indexOf("opera")||0<=t.indexOf("opr")?"Opera":0<=t.indexOf("chrome")?"Chrome":0<=t.indexOf("safari")?"Safari":0<=t.indexOf("trident")?"Internet Explorer":"Other")||"Safari"===e||"Opera"===e)&&"20030107"!==a)return!0;var n,r=eval.toString().length;if(37===r&&"Safari"!==e&&"Firefox"!==e&&"Other"!==e)return!0;if(39===r&&"Internet Explorer"!==e&&"Other"!==e)return!0;if(33===r&&"Chrome"!==e&&"Opera"!==e&&"Other"!==e)return!0;try{throw"a"}catch(e){try{e.toSource(),n=!0}catch(e){n=!1}}return n&&"Firefox"!==e&&"Other"!==e},I=function(){var e=document.createElement("canvas");return!(!e.getContext||!e.getContext("2d"))},k=function(){if(!I())return!1;var e=F();return!!window.WebGLRenderingContext&&!!e},R=function(){return"Microsoft Internet Explorer"===navigator.appName||!("Netscape"!==navigator.appName||!/Trident/.test(navigator.userAgent))},D=function(){return void 0!==window.swfobject},N=function(){return window.swfobject.hasFlashPlayerVersion("9.0.0")},_=function(t,e){var a="___fp_swf_loaded";window[a]=function(e){t(e)};var n,r,i=e.fonts.swfContainerId;(r=document.createElement("div")).setAttribute("id",n.fonts.swfContainerId),document.body.appendChild(r);var o={onReady:a};window.swfobject.embedSWF(e.fonts.swfPath,i,"1","1","9.0.0",!1,o,{allowScriptAccess:"always",menu:"false"},{})},F=function(){var e=document.createElement("canvas"),t=null;try{t=e.getContext("webgl")||e.getContext("experimental-webgl")}catch(e){}return t||(t=null),t},G=[{key:"userAgent",getData:function(e){e(navigator.userAgent)}},{key:"webdriver",getData:function(e,t){e(null==navigator.webdriver?t.NOT_AVAILABLE:navigator.webdriver)}},{key:"language",getData:function(e,t){e(navigator.language||navigator.userLanguage||navigator.browserLanguage||navigator.systemLanguage||t.NOT_AVAILABLE)}},{key:"colorDepth",getData:function(e,t){e(window.screen.colorDepth||t.NOT_AVAILABLE)}},{key:"deviceMemory",getData:function(e,t){e(navigator.deviceMemory||t.NOT_AVAILABLE)}},{key:"pixelRatio",getData:function(e,t){e(window.devicePixelRatio||t.NOT_AVAILABLE)}},{key:"hardwareConcurrency",getData:function(e,t){e(S(t))}},{key:"screenResolution",getData:function(e,t){e(n(t))}},{key:"availableScreenResolution",getData:function(e,t){e(r(t))}},{key:"timezoneOffset",getData:function(e){e((new Date).getTimezoneOffset())}},{key:"timezone",getData:function(e,t){window.Intl&&window.Intl.DateTimeFormat?e((new window.Intl.DateTimeFormat).resolvedOptions().timeZone):e(t.NOT_AVAILABLE)}},{key:"sessionStorage",getData:function(e,t){e(p(t))}},{key:"localStorage",getData:function(e,t){e(v(t))}},{key:"indexedDb",getData:function(e,t){e(A(t))}},{key:"addBehavior",getData:function(e){e(!(!document.body||!document.body.addBehavior))}},{key:"openDatabase",getData:function(e){e(!!window.openDatabase)}},{key:"cpuClass",getData:function(e,t){e(C(t))}},{key:"platform",getData:function(e,t){e(B(t))}},{key:"doNotTrack",getData:function(e,t){e(w(t))}},{key:"plugins",getData:function(e,t){R()?t.plugins.excludeIE?e(t.EXCLUDED):e(o(t)):e(i(t))}},{key:"canvas",getData:function(e,t){I()?e(y(t)):e(t.NOT_AVAILABLE)}},{key:"webgl",getData:function(e,t){k()?e(E()):e(t.NOT_AVAILABLE)}},{key:"webglVendorAndRenderer",getData:function(e){k()?e(M()):e()}},{key:"adBlock",getData:function(e){e(x())}},{key:"hasLiedLanguages",getData:function(e){e(O())}},{key:"hasLiedResolution",getData:function(e){e(b())}},{key:"hasLiedOs",getData:function(e){e(P())}},{key:"hasLiedBrowser",getData:function(e){e(L())}},{key:"touchSupport",getData:function(e){e(t())}},{key:"fonts",getData:function(e,t){var u=["monospace","sans-serif","serif"],d=["Andale Mono","Arial","Arial Black","Arial Hebrew","Arial MT","Arial Narrow","Arial Rounded MT Bold","Arial Unicode MS","Bitstream Vera Sans Mono","Book Antiqua","Bookman Old Style","Calibri","Cambria","Cambria Math","Century","Century Gothic","Century Schoolbook","Comic Sans","Comic Sans MS","Consolas","Courier","Courier New","Geneva","Georgia","Helvetica","Helvetica Neue","Impact","Lucida Bright","Lucida Calligraphy","Lucida Console","Lucida Fax","LUCIDA GRANDE","Lucida Handwriting","Lucida Sans","Lucida Sans Typewriter","Lucida Sans Unicode","Microsoft Sans Serif","Monaco","Monotype Corsiva","MS Gothic","MS Outlook","MS PGothic","MS Reference Sans Serif","MS Sans Serif","MS Serif","MYRIAD","MYRIAD PRO","Palatino","Palatino Linotype","Segoe Print","Segoe Script","Segoe UI","Segoe UI Light","Segoe UI Semibold","Segoe UI Symbol","Tahoma","Times","Times New Roman","Times New Roman PS","Trebuchet MS","Verdana","Wingdings","Wingdings 2","Wingdings 3"];t.fonts.extendedJsFonts&&(d=d.concat(["Abadi MT Condensed Light","Academy Engraved LET","ADOBE CASLON PRO","Adobe Garamond","ADOBE GARAMOND PRO","Agency FB","Aharoni","Albertus Extra Bold","Albertus Medium","Algerian","Amazone BT","American Typewriter","American Typewriter Condensed","AmerType Md BT","Andalus","Angsana New","AngsanaUPC","Antique Olive","Aparajita","Apple Chancery","Apple Color Emoji","Apple SD Gothic Neo","Arabic Typesetting","ARCHER","ARNO PRO","Arrus BT","Aurora Cn BT","AvantGarde Bk BT","AvantGarde Md BT","AVENIR","Ayuthaya","Bandy","Bangla Sangam MN","Bank Gothic","BankGothic Md BT","Baskerville","Baskerville Old Face","Batang","BatangChe","Bauer Bodoni","Bauhaus 93","Bazooka","Bell MT","Bembo","Benguiat Bk BT","Berlin Sans FB","Berlin Sans FB Demi","Bernard MT Condensed","BernhardFashion BT","BernhardMod BT","Big Caslon","BinnerD","Blackadder ITC","BlairMdITC TT","Bodoni 72","Bodoni 72 Oldstyle","Bodoni 72 Smallcaps","Bodoni MT","Bodoni MT Black","Bodoni MT Condensed","Bodoni MT Poster Compressed","Bookshelf Symbol 7","Boulder","Bradley Hand","Bradley Hand ITC","Bremen Bd BT","Britannic Bold","Broadway","Browallia New","BrowalliaUPC","Brush Script MT","Californian FB","Calisto MT","Calligrapher","Candara","CaslonOpnface BT","Castellar","Centaur","Cezanne","CG Omega","CG Times","Chalkboard","Chalkboard SE","Chalkduster","Charlesworth","Charter Bd BT","Charter BT","Chaucer","ChelthmITC Bk BT","Chiller","Clarendon","Clarendon Condensed","CloisterBlack BT","Cochin","Colonna MT","Constantia","Cooper Black","Copperplate","Copperplate Gothic","Copperplate Gothic Bold","Copperplate Gothic Light","CopperplGoth Bd BT","Corbel","Cordia New","CordiaUPC","Cornerstone","Coronet","Cuckoo","Curlz MT","DaunPenh","Dauphin","David","DB LCD Temp","DELICIOUS","Denmark","DFKai-SB","Didot","DilleniaUPC","DIN","DokChampa","Dotum","DotumChe","Ebrima","Edwardian Script ITC","Elephant","English 111 Vivace BT","Engravers MT","EngraversGothic BT","Eras Bold ITC","Eras Demi ITC","Eras Light ITC","Eras Medium ITC","EucrosiaUPC","Euphemia","Euphemia UCAS","EUROSTILE","Exotc350 Bd BT","FangSong","Felix Titling","Fixedsys","FONTIN","Footlight MT Light","Forte","FrankRuehl","Fransiscan","Freefrm721 Blk BT","FreesiaUPC","Freestyle Script","French Script MT","FrnkGothITC Bk BT","Fruitger","FRUTIGER","Futura","Futura Bk BT","Futura Lt BT","Futura Md BT","Futura ZBlk BT","FuturaBlack BT","Gabriola","Galliard BT","Gautami","Geeza Pro","Geometr231 BT","Geometr231 Hv BT","Geometr231 Lt BT","GeoSlab 703 Lt BT","GeoSlab 703 XBd BT","Gigi","Gill Sans","Gill Sans MT","Gill Sans MT Condensed","Gill Sans MT Ext Condensed Bold","Gill Sans Ultra Bold","Gill Sans Ultra Bold Condensed","Gisha","Gloucester MT Extra Condensed","GOTHAM","GOTHAM BOLD","Goudy Old Style","Goudy Stout","GoudyHandtooled BT","GoudyOLSt BT","Gujarati Sangam MN","Gulim","GulimChe","Gungsuh","GungsuhChe","Gurmukhi MN","Haettenschweiler","Harlow Solid Italic","Harrington","Heather","Heiti SC","Heiti TC","HELV","Herald","High Tower Text","Hiragino Kaku Gothic ProN","Hiragino Mincho ProN","Hoefler Text","Humanst 521 Cn BT","Humanst521 BT","Humanst521 Lt BT","Imprint MT Shadow","Incised901 Bd BT","Incised901 BT","Incised901 Lt BT","INCONSOLATA","Informal Roman","Informal011 BT","INTERSTATE","IrisUPC","Iskoola Pota","JasmineUPC","Jazz LET","Jenson","Jester","Jokerman","Juice ITC","Kabel Bk BT","Kabel Ult BT","Kailasa","KaiTi","Kalinga","Kannada Sangam MN","Kartika","Kaufmann Bd BT","Kaufmann BT","Khmer UI","KodchiangUPC","Kokila","Korinna BT","Kristen ITC","Krungthep","Kunstler Script","Lao UI","Latha","Leelawadee","Letter Gothic","Levenim MT","LilyUPC","Lithograph","Lithograph Light","Long Island","Lydian BT","Magneto","Maiandra GD","Malayalam Sangam MN","Malgun Gothic","Mangal","Marigold","Marion","Marker Felt","Market","Marlett","Matisse ITC","Matura MT Script Capitals","Meiryo","Meiryo UI","Microsoft Himalaya","Microsoft JhengHei","Microsoft New Tai Lue","Microsoft PhagsPa","Microsoft Tai Le","Microsoft Uighur","Microsoft YaHei","Microsoft Yi Baiti","MingLiU","MingLiU_HKSCS","MingLiU_HKSCS-ExtB","MingLiU-ExtB","Minion","Minion Pro","Miriam","Miriam Fixed","Mistral","Modern","Modern No. 20","Mona Lisa Solid ITC TT","Mongolian Baiti","MONO","MoolBoran","Mrs Eaves","MS LineDraw","MS Mincho","MS PMincho","MS Reference Specialty","MS UI Gothic","MT Extra","MUSEO","MV Boli","Nadeem","Narkisim","NEVIS","News Gothic","News GothicMT","NewsGoth BT","Niagara Engraved","Niagara Solid","Noteworthy","NSimSun","Nyala","OCR A Extended","Old Century","Old English Text MT","Onyx","Onyx BT","OPTIMA","Oriya Sangam MN","OSAKA","OzHandicraft BT","Palace Script MT","Papyrus","Parchment","Party LET","Pegasus","Perpetua","Perpetua Titling MT","PetitaBold","Pickwick","Plantagenet Cherokee","Playbill","PMingLiU","PMingLiU-ExtB","Poor Richard","Poster","PosterBodoni BT","PRINCETOWN LET","Pristina","PTBarnum BT","Pythagoras","Raavi","Rage Italic","Ravie","Ribbon131 Bd BT","Rockwell","Rockwell Condensed","Rockwell Extra Bold","Rod","Roman","Sakkal Majalla","Santa Fe LET","Savoye LET","Sceptre","Script","Script MT Bold","SCRIPTINA","Serifa","Serifa BT","Serifa Th BT","ShelleyVolante BT","Sherwood","Shonar Bangla","Showcard Gothic","Shruti","Signboard","SILKSCREEN","SimHei","Simplified Arabic","Simplified Arabic Fixed","SimSun","SimSun-ExtB","Sinhala Sangam MN","Sketch Rockwell","Skia","Small Fonts","Snap ITC","Snell Roundhand","Socket","Souvenir Lt BT","Staccato222 BT","Steamer","Stencil","Storybook","Styllo","Subway","Swis721 BlkEx BT","Swiss911 XCm BT","Sylfaen","Synchro LET","System","Tamil Sangam MN","Technical","Teletype","Telugu Sangam MN","Tempus Sans ITC","Terminal","Thonburi","Traditional Arabic","Trajan","TRAJAN PRO","Tristan","Tubular","Tunga","Tw Cen MT","Tw Cen MT Condensed","Tw Cen MT Condensed Extra Bold","TypoUpright BT","Unicorn","Univers","Univers CE 55 Medium","Univers Condensed","Utsaah","Vagabond","Vani","Vijaya","Viner Hand ITC","VisualUI","Vivaldi","Vladimir Script","Vrinda","Westminster","WHITNEY","Wide Latin","ZapfEllipt BT","ZapfHumnst BT","ZapfHumnst Dm BT","Zapfino","Zurich BlkEx BT","Zurich Ex BT","ZWAdobeF"]));d=(d=d.concat(t.fonts.userDefinedFonts)).filter(function(e,t){return d.indexOf(e)===t});var a=document.getElementsByTagName("body")[0],r=document.createElement("div"),g=document.createElement("div"),n={},i={},f=function(){var e=document.createElement("span");return e.style.position="absolute",e.style.left="-9999px",e.style.fontSize="72px",e.style.fontStyle="normal",e.style.fontWeight="normal",e.style.letterSpacing="normal",e.style.lineBreak="auto",e.style.lineHeight="normal",e.style.textTransform="none",e.style.textAlign="left",e.style.textDecoration="none",e.style.textShadow="none",e.style.whiteSpace="normal",e.style.wordBreak="normal",e.style.wordSpacing="normal",e.innerHTML="mmmmmmmmmmlli",e},o=function(e){for(var t=!1,a=0;a<u.length;a++)if(t=e[a].offsetWidth!==n[u[a]]||e[a].offsetHeight!==i[u[a]])return t;return t},l=function(){for(var e=[],t=0,a=u.length;t<a;t++){var n=f();n.style.fontFamily=u[t],r.appendChild(n),e.push(n)}return e}();a.appendChild(r);for(var s=0,c=u.length;s<c;s++)n[u[s]]=l[s].offsetWidth,i[u[s]]=l[s].offsetHeight;var h=function(){for(var e,t,a,n={},r=0,i=d.length;r<i;r++){for(var o=[],l=0,s=u.length;l<s;l++){var c=(e=d[r],t=u[l],a=void 0,(a=f()).style.fontFamily="'"+e+"',"+t,a);g.appendChild(c),o.push(c)}n[d[r]]=o}return n}();a.appendChild(g);for(var m=[],T=0,p=d.length;T<p;T++)o(h[d[T]])&&m.push(d[T]);a.removeChild(g),a.removeChild(r),e(m)},pauseBefore:!0},{key:"fontsFlash",getData:function(t,e){return D()?N()?e.fonts.swfPath?void _(function(e){t(e)},e):t("missing options.fonts.swfPath"):t("flash not installed"):t("swf object not loaded")},pauseBefore:!0},{key:"audio",getData:function(a,e){var t=e.audio;if(t.excludeIOS11&&navigator.userAgent.match(/OS 11.+Version\/11.+Safari/))return a(e.EXCLUDED);var n=window.OfflineAudioContext||window.webkitOfflineAudioContext;if(null==n)return a(e.NOT_AVAILABLE);var r=new n(1,44100,44100),i=r.createOscillator();i.type="triangle",i.frequency.setValueAtTime(1e4,r.currentTime);var o=r.createDynamicsCompressor();c([["threshold",-50],["knee",40],["ratio",12],["reduction",-20],["attack",0],["release",.25]],function(e){void 0!==o[e[0]]&&"function"==typeof o[e[0]].setValueAtTime&&o[e[0]].setValueAtTime(e[1],r.currentTime)}),i.connect(o),o.connect(r.destination),i.start(0),r.startRendering();var l=setTimeout(function(){return console.warn('Audio fingerprint timed out. Please report bug at https://github.com/Valve/fingerprintjs2 with your user agent: "'+navigator.userAgent+'".'),r.oncomplete=function(){},r=null,a("audioTimeout")},t.timeout);r.oncomplete=function(e){var t;try{clearTimeout(l),t=e.renderedBuffer.getChannelData(0).slice(4500,5e3).reduce(function(e,t){return e+Math.abs(t)},0).toString(),i.disconnect(),o.disconnect()}catch(e){return void a(e)}a(t)}}},{key:"enumerateDevices",getData:function(t,e){if(!a())return t(e.NOT_AVAILABLE);navigator.mediaDevices.enumerateDevices().then(function(e){t(e.map(function(e){return"id="+e.deviceId+";gid="+e.groupId+";"+e.kind+";"+e.label}))}).catch(function(e){t(e)})}}],U=function(e){throw new Error("'new Fingerprint()' is deprecated, see https://github.com/Valve/fingerprintjs2#upgrade-guide-from-182-to-200")};return U.get=function(a,n){n?a||(a={}):(n=a,a={}),function(e,t){if(null==t)return;var a,n;for(n in t)null==(a=t[n])||Object.prototype.hasOwnProperty.call(e,n)||(e[n]=a)}(a,e),a.components=a.extraComponents.concat(G);var r={data:[],addPreprocessedComponent:function(e,t){"function"==typeof a.preprocessor&&(t=a.preprocessor(e,t)),r.data.push({key:e,value:t})}},i=-1,o=function(e){if((i+=1)>=a.components.length)n(r.data);else{var t=a.components[i];if(a.excludes[t.key])o(!1);else{if(!e&&t.pauseBefore)return i-=1,void setTimeout(function(){o(!0)},1);try{t.getData(function(e){r.addPreprocessedComponent(t.key,e),o(!1)},a)}catch(e){r.addPreprocessedComponent(t.key,String(e)),o(!1)}}}};o(!1)},U.getPromise=function(a){return new Promise(function(e,t){U.get(a,e)})},U.getV18=function(i,o){return null==o&&(o=i,i={}),U.get(i,function(e){for(var t=[],a=0;a<e.length;a++){var n=e[a];if(n.value===(i.NOT_AVAILABLE||"not available"))t.push({key:n.key,value:"unknown"});else if("plugins"===n.key)t.push({key:"plugins",value:s(n.value,function(e){var t=s(e[2],function(e){return e.join?e.join("~"):e}).join(",");return[e[0],e[1],t].join("::")})});else if(-1!==["canvas","webgl"].indexOf(n.key))t.push({key:n.key,value:n.value.join("~")});else if(-1!==["sessionStorage","localStorage","indexedDb","addBehavior","openDatabase"].indexOf(n.key)){if(!n.value)continue;t.push({key:n.key,value:1})}else n.value?t.push(n.value.join?{key:n.key,value:n.value.join(";")}:n):t.push({key:n.key,value:n.value})}var r=l(s(t,function(e){return e.value}).join("~~~"),31);o(r,t)})},U.x64hash128=l,U.VERSION="2.1.0",U});
|
|
wp-slimstat.min.js
CHANGED
@@ -1 +1 @@
|
|
1 |
-
var SlimStat={_base64_key_str:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789._-",_utf8_encode:function(t){var e,a,r="";for(t=t.replace(/\r\n/g,"\n"),e=0;e<t.length;e++)(a=t.charCodeAt(e))<128?r+=String.fromCharCode(a):(127<a&&a<2048?r+=String.fromCharCode(a>>6|192):(r+=String.fromCharCode(a>>12|224),r+=String.fromCharCode(a>>6&63|128)),r+=String.fromCharCode(63&a|128));return r},_base64_encode:function(t){var e,a,r,n,o,i,m,s="",d=0;for(t=SlimStat._utf8_encode(t);d<t.length;)n=(e=t.charCodeAt(d++))>>2,o=(3&e)<<4|(a=t.charCodeAt(d++))>>4,i=(15&a)<<2|(r=t.charCodeAt(d++))>>6,m=63&r,isNaN(a)?i=m=64:isNaN(r)&&(m=64),s=s+SlimStat._base64_key_str.charAt(n)+SlimStat._base64_key_str.charAt(o)+SlimStat._base64_key_str.charAt(i)+SlimStat._base64_key_str.charAt(m);return s},get_page_performance:function(){return slim_performance=window.performance||window.mozPerformance||window.msPerformance||window.webkitPerformance||{},void 0===slim_performance.timing?0:slim_performance.timing.loadEventEnd-slim_performance.timing.responseEnd},get_server_latency:function(){return slim_performance=window.performance||window.mozPerformance||window.msPerformance||window.webkitPerformance||{},void 0===slim_performance.timing?0:slim_performance.timing.responseEnd-slim_performance.timing.connectEnd},optout:function(t,e){t.preventDefault(),"string"==typeof SlimStatParams.baseurl&&0!=SlimStatParams.baseurl.length||(SlimStatParams.baseurl="/"),expiration=new Date,expiration.setTime(expiration.getTime()+31536e6),document.cookie="slimstat_optout_tracking="+e+";path="+SlimStatParams.baseurl+";expires="+expiration.toGMTString(),t.target.parentNode.parentNode.removeChild(t.target.parentNode)},show_optout_message:function(){opt_out_cookies=SlimStat.empty(SlimStatParams.oc)?[]:SlimStatParams.oc.split(","),Array.isArray(opt_out_cookies)||(opt_out_cookies=[]),show_optout=0<opt_out_cookies.length;for(var t=0;t<opt_out_cookies.length;t++)""!=SlimStat.get_cookie(opt_out_cookies[t])&&(show_optout=!1);if(show_optout){try{xhr=new XMLHttpRequest}catch(t){return!1}if("object"==typeof xhr)return xhr.open("POST",SlimStatParams.ajaxurl,!0),xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded"),xhr.setRequestHeader("X-Requested-With","XMLHttpRequest"),xhr.withCredentials=!0,xhr.send("action=slimstat_optout_html"),xhr.onreadystatechange=function(){4==xhr.readyState&&document.body.insertAdjacentHTML("beforeend",xhr.responseText)},!0}},add_event:function(t,e,a){t&&t.addEventListener?t.addEventListener(e,a,!1):t&&t.attachEvent?(t["e"+e+a]=a,t[e+a]=function(){t["e"+e+a](window.event)},t.attachEvent("on"+e,t[e+a])):t["on"+e]=t["e"+e+a]},in_array:function(t,e){for(var a=0;a<e.length;a++)if(-1!=t.indexOf(e[a].trim()))return!0;return!1},empty:function(t){return void 0===t||null==t||("number"==typeof t?0==t:"boolean"==typeof t?!t:"string"!=typeof t&&"object"!=typeof t||0==t.length)},get_cookie:function(t){var e=("; "+document.cookie).split("; "+t+"=");return 2==e.length?e.pop().split(";").shift():""},send_to_server:function(t,e){if(SlimStat.empty(SlimStatParams.ajaxurl)||SlimStat.empty(t))return!1;if(void 0===e&&(e=!0),slimstat_data_with_client_info=t+"&sw="+screen.width+"&sh="+screen.height+"&bw="+window.innerWidth+"&bh="+window.innerHeight+"&sl="+SlimStat.get_server_latency()+"&pp="+SlimStat.get_page_performance(),e&&navigator.sendBeacon)navigator.sendBeacon(SlimStatParams.ajaxurl,slimstat_data_with_client_info);else{try{xhr=new XMLHttpRequest}catch(t){return!1}if("object"==typeof xhr)return xhr.open("POST",SlimStatParams.ajaxurl,!0),xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded"),xhr.setRequestHeader("X-Requested-With","XMLHttpRequest"),xhr.withCredentials=!0,xhr.send(slimstat_data_with_client_info),xhr.onreadystatechange=function(){4==xhr.readyState&&(parsed_id=parseInt(xhr.responseText),!isNaN(parsed_id)&&0<parsed_id&&(SlimStatParams.id=xhr.responseText))},!0}return!1},ss_track:function(t,e){if(SlimStat.empty(SlimStatParams.id)||isNaN(parseInt(SlimStatParams.id))||parseInt(SlimStatParams.id)<=0)return!1;if(note_array=[],SlimStat.empty(t)||note_array.push(t),void 0===e&&(e=!0),SlimStat.empty(window.event))return!1;if(SlimStat.empty(window.event.target)){if(SlimStat.empty(window.event.srcElement))return!1;target_node=window.event.srcElement}else target_node=window.event.target;if(resource_url="",do_not_track=SlimStat.empty(SlimStatParams.dnt)?[]:SlimStatParams.dnt.split(","),!SlimStat.empty(target_node.nodeName)){switch(target_node.nodeName){case"INPUT":case"BUTTON":for(;!SlimStat.empty(target_node)&&!SlimStat.empty(target_node.nodeName)&&"form"!=target_node.nodeName.toLowerCase();)target_node=target_node.parentNode;SlimStat.empty(target_node)||SlimStat.empty(target_node.nodeName)||SlimStat.empty(target_node.action)||(resource_url=target_node.action);break;default:for(;!SlimStat.empty(target_node)&&!SlimStat.empty(target_node.nodeName)&&"a"!=target_node.nodeName.toLowerCase();)target_node=target_node.parentNode;if(!SlimStat.empty(target_node)){if(SlimStat.empty(target_node.hash)||target_node.hostname!=location.hostname){if(!SlimStat.empty(target_node.href)&&-1==target_node.href.indexOf("javascript:")){if(SlimStat.in_array(target_node.href,do_not_track))return!1;resource_url=target_node.href}}else resource_url=target_node.hash;"function"==typeof target_node.getAttribute&&(SlimStat.empty(target_node.getAttribute("title"))||note_array.push("Title:"+target_node.getAttribute("title")),SlimStat.empty(target_node.getAttribute("id"))||note_array.push("ID:"+target_node.getAttribute("id")))}}if(!SlimStat.empty(do_not_track.length)&&!SlimStat.empty(target_node)&&(target_classes=SlimStat.empty(target_node.className)?[]:target_node.className.split(" "),0!=target_classes.filter(function(t){return-1!==do_not_track.indexOf(t)}).length||!SlimStat.empty(target_node.attributes)&&!SlimStat.empty(target_node.attributes.rel)&&!SlimStat.empty(target_node.attributes.rel.value)&&SlimStat.in_array(target_node.attributes.rel.value,do_not_track)))return!1}return position="0,0",SlimStat.empty(window.event.pageX)||SlimStat.empty(window.event.pageY)?SlimStat.empty(window.event.clientX)||SlimStat.empty(document.body.scrollLeft)||SlimStat.empty(document.documentElement.scrollLeft)||(position=window.event.clientX+document.body.scrollLeft+document.documentElement.scrollLeft+","+window.event.clientY+document.body.scrollTop+document.documentElement.scrollTop):position=window.event.pageX+","+window.event.pageY,SlimStat.empty(window.event.type)||(note_array.push("type:"+window.event.type),"keypress"==window.event.type?note_array.push("keypress:"+String.fromCharCode(parseInt(window.event.which))):"click"==window.event.type&¬e_array.push("which:"+window.event.which)),SlimStat.send_to_server("action=slimtrack&id="+SlimStatParams.id+"&ref="+SlimStat._base64_encode(document.referrer)+"&res="+SlimStat._base64_encode(resource_url)+"&pos="+position+"&no="+SlimStat._base64_encode(note_array.join(", ")),e),!0}};"function"!=typeof String.prototype.trim&&(String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")}),SlimStat.add_event(window,"load",function(){slimstat_data="",use_beacon=!0,SlimStat.empty(SlimStatParams.id)?(slimstat_data="action=slimtrack&ref="+SlimStat._base64_encode(document.referrer)+"&res="+SlimStat._base64_encode(window.location.href),SlimStat.empty(SlimStatParams.ci)||(slimstat_data+="&ci="+SlimStatParams.ci),use_beacon=!1):0<parseInt(SlimStatParams.id)&&(slimstat_data="action=slimtrack&id="+SlimStatParams.id),0<slimstat_data.length&&setTimeout(function(){SlimStat.send_to_server(slimstat_data,use_beacon)},50),all_links=document.getElementsByTagName("a");for(var t=0;t<all_links.length;t++)SlimStat.add_event(all_links[t],"click",function(t){SlimStat.ss_track()});SlimStat.show_optout_message()});
|
1 |
+
var SlimStat={base64_key_str:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789._-",fingerprint_hash:"",utf8_encode:function(e){var t,a,n="";for(e=e.replace(/\r\n/g,"\n"),t=0;t<e.length;t++)(a=e.charCodeAt(t))<128?n+=String.fromCharCode(a):(127<a&&a<2048?n+=String.fromCharCode(a>>6|192):(n+=String.fromCharCode(a>>12|224),n+=String.fromCharCode(a>>6&63|128)),n+=String.fromCharCode(63&a|128));return n},base64_encode:function(e){var t,a,n,r,i,o,s,l="",d=0;for(e=SlimStat.utf8_encode(e);d<e.length;)r=(t=e.charCodeAt(d++))>>2,i=(3&t)<<4|(a=e.charCodeAt(d++))>>4,o=(15&a)<<2|(n=e.charCodeAt(d++))>>6,s=63&n,isNaN(a)?o=s=64:isNaN(n)&&(s=64),l=l+SlimStat.base64_key_str.charAt(r)+SlimStat.base64_key_str.charAt(i)+SlimStat.base64_key_str.charAt(o)+SlimStat.base64_key_str.charAt(s);return l},get_page_performance:function(){return slim_performance=window.performance||window.mozPerformance||window.msPerformance||window.webkitPerformance||{},void 0===slim_performance.timing?0:slim_performance.timing.loadEventEnd-slim_performance.timing.responseEnd},get_server_latency:function(){return slim_performance=window.performance||window.mozPerformance||window.msPerformance||window.webkitPerformance||{},void 0===slim_performance.timing?0:slim_performance.timing.responseEnd-slim_performance.timing.connectEnd},optout:function(e,t){e.preventDefault(),"string"==typeof SlimStatParams.baseurl&&0!=SlimStatParams.baseurl.length||(SlimStatParams.baseurl="/"),expiration=new Date,expiration.setTime(expiration.getTime()+31536e6),document.cookie="slimstat_optout_tracking="+t+";path="+SlimStatParams.baseurl+";expires="+expiration.toGMTString(),e.target.parentNode.parentNode.removeChild(e.target.parentNode)},show_optout_message:function(){opt_out_cookies=SlimStat.empty(SlimStatParams.oc)?[]:SlimStatParams.oc.split(","),Array.isArray(opt_out_cookies)||(opt_out_cookies=[]),show_optout=0<opt_out_cookies.length;for(var e=0;e<opt_out_cookies.length;e++)""!=SlimStat.get_cookie(opt_out_cookies[e])&&(show_optout=!1);if(show_optout){try{xhr=new XMLHttpRequest}catch(e){return!1}if("object"==typeof xhr)return xhr.open("POST",SlimStatParams.ajaxurl,!0),xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded"),xhr.setRequestHeader("X-Requested-With","XMLHttpRequest"),xhr.withCredentials=!0,xhr.send("action=slimstat_optout_html"),xhr.onreadystatechange=function(){4==xhr.readyState&&document.body.insertAdjacentHTML("beforeend",xhr.responseText)},!0}},add_event:function(e,t,a){e&&e.addEventListener?e.addEventListener(t,a,!1):e&&e.attachEvent?(e["e"+t+a]=a,e[t+a]=function(){e["e"+t+a](window.event)},e.attachEvent("on"+t,e[t+a])):e["on"+t]=e["e"+t+a]},in_array:function(e,t){for(var a=0;a<t.length;a++)if(-1!=e.indexOf(t[a].trim()))return!0;return!1},empty:function(e){return void 0===e||null==e||("number"==typeof e?0==e:"boolean"==typeof e?!e:"string"!=typeof e&&"object"!=typeof e||0==e.length)},get_cookie:function(e){var t=("; "+document.cookie).split("; "+e+"=");return 2==t.length?t.pop().split(";").shift():""},send_to_server:function(e,t){if(SlimStat.empty(SlimStatParams.ajaxurl)||SlimStat.empty(e))return!1;if(void 0===t&&(t=!0),t&&navigator.sendBeacon)navigator.sendBeacon(SlimStatParams.ajaxurl,e);else{try{xhr=new XMLHttpRequest}catch(e){return!1}if("object"==typeof xhr)return xhr.open("POST",SlimStatParams.ajaxurl,!0),xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded"),xhr.setRequestHeader("X-Requested-With","XMLHttpRequest"),xhr.withCredentials=!0,xhr.send(e),xhr.onreadystatechange=function(){4==xhr.readyState&&(parsed_id=parseInt(xhr.responseText),!isNaN(parsed_id)&&0<parsed_id&&(SlimStatParams.id=xhr.responseText))},!0}return!1},ss_track:function(e,t){if(SlimStat.empty(SlimStatParams.id)||isNaN(parseInt(SlimStatParams.id))||parseInt(SlimStatParams.id)<=0)return!1;if(note_array=[],SlimStat.empty(e)||note_array.push(e),void 0===t&&(t=!0),SlimStat.empty(window.event))return!1;if(SlimStat.empty(window.event.target)){if(SlimStat.empty(window.event.srcElement))return!1;target_node=window.event.srcElement}else target_node=window.event.target;var a="",n="";if(SlimStat.empty(window.event.type)||"focus"==window.event.type)return!1;switch(note_array.push("Type:"+window.event.type),"keypress"==window.event.type?note_array.push("Keypress:"+String.fromCharCode(parseInt(window.event.which))):"click"==window.event.type&¬e_array.push("Button:"+(1==window.event.which?"left":2==window.event.which?"middle":"right")),target_node.nodeName.toLowerCase()){case"input":case"button":for(;!SlimStat.empty(target_node)&&!SlimStat.empty(target_node.nodeName)&&"form"!=target_node.nodeName.toLowerCase();)target_node=target_node.parentNode;SlimStat.empty(target_node)||SlimStat.empty(target_node.action)||(a=target_node.action);break;default:if(SlimStat.empty(target_node.href)||"string"!=typeof target_node.href){for(parent_node=target_node.parentNode;!SlimStat.empty(parent_node)&&!SlimStat.empty(parent_node.nodeName)&&SlimStat.empty(parent_node.href);)parent_node=parent_node.parentNode;SlimStat.empty(parent_node)||(SlimStat.empty(parent_node.hash)||parent_node.hostname!=location.hostname?SlimStat.empty(parent_node.href)||(a=parent_node.href):a=parent_node.hash,"function"==typeof parent_node.getAttribute&&(SlimStat.empty(parent_node.getAttribute("title"))||note_array.push("Parent Title:"+parent_node.getAttribute("title")),SlimStat.empty(parent_node.getAttribute("id"))||note_array.push("Parent ID:"+parent_node.getAttribute("id"))))}else a=SlimStat.empty(target_node.hash)?target_node.href:target_node.hash;"function"==typeof target_node.getAttribute&&(SlimStat.empty(target_node.getAttribute("title"))||note_array.push("Title:"+target_node.getAttribute("title")),SlimStat.empty(target_node.getAttribute("id"))||note_array.push("ID:"+target_node.getAttribute("id")))}if(do_not_track=SlimStat.empty(SlimStatParams.dnt)?[]:SlimStatParams.dnt.split(","),!SlimStat.empty(a)){if(!SlimStat.empty(do_not_track)&&SlimStat.in_array(a,do_not_track))return!1;n="&fh="+SlimStat.fingerprint_hash}return target_classes=SlimStat.empty(target_node.className)||"string"!=typeof target_node.className?[]:target_node.className.split(" "),!!(SlimStat.empty(do_not_track)||SlimStat.empty(target_classes)||0==target_classes.filter(function(e){return-1!==do_not_track.indexOf(e)}).length&&(SlimStat.empty(target_node.attributes)||SlimStat.empty(target_node.attributes.rel)||SlimStat.empty(target_node.attributes.rel.value)||!SlimStat.in_array(target_node.attributes.rel.value,do_not_track)))&&(position="0,0",SlimStat.empty(window.event.pageX)||SlimStat.empty(window.event.pageY)?SlimStat.empty(window.event.clientX)||SlimStat.empty(document.body.scrollLeft)||SlimStat.empty(document.documentElement.scrollLeft)||(position=window.event.clientX+document.body.scrollLeft+document.documentElement.scrollLeft+","+window.event.clientY+document.body.scrollTop+document.documentElement.scrollTop):position=window.event.pageX+","+window.event.pageY,SlimStat.send_to_server("action=slimtrack&id="+SlimStatParams.id+"&res="+SlimStat.base64_encode(a)+"&pos="+position+"&no="+SlimStat.base64_encode(note_array.join(","))+n,t),!0)},get_slimstat_data:function(e){return screenres=SlimStat.get_component_value(e,"screenResolution",[0,0]),"&sw="+screenres[0]+"&sh="+screenres[1]+"&bw="+window.innerWidth+"&bh="+window.innerHeight+"&sl="+SlimStat.get_server_latency()+"&pp="+SlimStat.get_page_performance()+"&fh="+SlimStat.fingerprint_hash+"&tz="+SlimStat.get_component_value(e,"timezoneOffset",0)},get_component_value:function(e,t,a){for(x=0;x<e.length;x++)if(e[x].key===t)return e[x].value;return a},init_fingerprint_hash:function(e){values=e.map(function(e){return e.value}),SlimStat.fingerprint_hash=Fingerprint2.x64hash128(values.join(""),31)}};"function"!=typeof String.prototype.trim&&(String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")}),SlimStat.add_event(window,"load",function(){if(slimstat_data="",use_beacon=!0,!SlimStat.empty(SlimStatParams.id)&&0<parseInt(SlimStatParams.id)?slimstat_data="action=slimtrack&id="+SlimStatParams.id:(slimstat_data="action=slimtrack&ref="+SlimStat.base64_encode(document.referrer)+"&res="+SlimStat.base64_encode(window.location.href),SlimStat.empty(SlimStatParams.ci)||(slimstat_data+="&ci="+SlimStatParams.ci),use_beacon=!1),0<slimstat_data.length){window.requestIdleCallback?requestIdleCallback(function(){Fingerprint2.get(function(e){SlimStat.init_fingerprint_hash(e),SlimStat.send_to_server(slimstat_data+SlimStat.get_slimstat_data(e),use_beacon),SlimStat.show_optout_message()})}):setTimeout(function(){Fingerprint2.get(function(e){SlimStat.init_fingerprint_hash(e),SlimStat.send_to_server(slimstat_data+SlimStat.get_slimstat_data(e),use_beacon),SlimStat.show_optout_message()})},250)}all_clickable=document.querySelectorAll("a,button,input,area");for(var e=0;e<all_clickable.length;e++)SlimStat.add_event(all_clickable[e],"click",function(e){SlimStat.ss_track()})}),SlimStat.add_event(window,"beforeunload",function(){!SlimStat.empty(document.activeElement)&&!SlimStat.empty(document.activeElement.nodeName)&&"body"==document.activeElement.nodeName.toLowerCase()&&!SlimStat.empty(SlimStatParams.id)&&0<parseInt(SlimStatParams.id)&&SlimStat.send_to_server("action=slimtrack&id="+SlimStatParams.id,!0)}),function(e,t,a){"use strict";"undefined"!=typeof window&&"function"==typeof define&&define.amd?define(a):"undefined"!=typeof module&&module.exports?module.exports=a():t.exports?t.exports=a():t.Fingerprint2=a()}(0,this,function(){"use strict";function u(e,t){e=[e[0]>>>16,65535&e[0],e[1]>>>16,65535&e[1]],t=[t[0]>>>16,65535&t[0],t[1]>>>16,65535&t[1]];var a=[0,0,0,0];return a[3]+=e[3]+t[3],a[2]+=a[3]>>>16,a[3]&=65535,a[2]+=e[2]+t[2],a[1]+=a[2]>>>16,a[2]&=65535,a[1]+=e[1]+t[1],a[0]+=a[1]>>>16,a[1]&=65535,a[0]+=e[0]+t[0],a[0]&=65535,[a[0]<<16|a[1],a[2]<<16|a[3]]}function m(e,t){e=[e[0]>>>16,65535&e[0],e[1]>>>16,65535&e[1]],t=[t[0]>>>16,65535&t[0],t[1]>>>16,65535&t[1]];var a=[0,0,0,0];return a[3]+=e[3]*t[3],a[2]+=a[3]>>>16,a[3]&=65535,a[2]+=e[2]*t[3],a[1]+=a[2]>>>16,a[2]&=65535,a[2]+=e[3]*t[2],a[1]+=a[2]>>>16,a[2]&=65535,a[1]+=e[1]*t[3],a[0]+=a[1]>>>16,a[1]&=65535,a[1]+=e[2]*t[2],a[0]+=a[1]>>>16,a[1]&=65535,a[1]+=e[3]*t[1],a[0]+=a[1]>>>16,a[1]&=65535,a[0]+=e[0]*t[3]+e[1]*t[2]+e[2]*t[1]+e[3]*t[0],a[0]&=65535,[a[0]<<16|a[1],a[2]<<16|a[3]]}function g(e,t){return 32==(t%=64)?[e[1],e[0]]:t<32?[e[0]<<t|e[1]>>>32-t,e[1]<<t|e[0]>>>32-t]:(t-=32,[e[1]<<t|e[0]>>>32-t,e[0]<<t|e[1]>>>32-t])}function f(e,t){return 0==(t%=64)?e:t<32?[e[0]<<t|e[1]>>>32-t,e[1]<<t]:[e[1]<<t-32,0]}function p(e,t){return[e[0]^t[0],e[1]^t[1]]}function h(e){return e=p(e,[0,e[0]>>>1]),e=m(e,[4283543511,3981806797]),e=p(e,[0,e[0]>>>1]),e=m(e,[3301882366,444984403]),p(e,[0,e[0]>>>1])}function s(e,t){t=t||0;for(var a=(e=e||"").length%16,n=e.length-a,r=[0,t],i=[0,t],o=[0,0],s=[0,0],l=[2277735313,289559509],d=[1291169091,658871167],c=0;c<n;c+=16)o=[255&e.charCodeAt(c+4)|(255&e.charCodeAt(c+5))<<8|(255&e.charCodeAt(c+6))<<16|(255&e.charCodeAt(c+7))<<24,255&e.charCodeAt(c)|(255&e.charCodeAt(c+1))<<8|(255&e.charCodeAt(c+2))<<16|(255&e.charCodeAt(c+3))<<24],s=[255&e.charCodeAt(c+12)|(255&e.charCodeAt(c+13))<<8|(255&e.charCodeAt(c+14))<<16|(255&e.charCodeAt(c+15))<<24,255&e.charCodeAt(c+8)|(255&e.charCodeAt(c+9))<<8|(255&e.charCodeAt(c+10))<<16|(255&e.charCodeAt(c+11))<<24],o=m(o,l),o=g(o,31),o=m(o,d),r=p(r,o),r=g(r,27),r=u(r,i),r=u(m(r,[0,5]),[0,1390208809]),s=m(s,d),s=g(s,33),s=m(s,l),i=p(i,s),i=g(i,31),i=u(i,r),i=u(m(i,[0,5]),[0,944331445]);switch(o=[0,0],s=[0,0],a){case 15:s=p(s,f([0,e.charCodeAt(c+14)],48));case 14:s=p(s,f([0,e.charCodeAt(c+13)],40));case 13:s=p(s,f([0,e.charCodeAt(c+12)],32));case 12:s=p(s,f([0,e.charCodeAt(c+11)],24));case 11:s=p(s,f([0,e.charCodeAt(c+10)],16));case 10:s=p(s,f([0,e.charCodeAt(c+9)],8));case 9:s=p(s,[0,e.charCodeAt(c+8)]),s=m(s,d),s=g(s,33),s=m(s,l),i=p(i,s);case 8:o=p(o,f([0,e.charCodeAt(c+7)],56));case 7:o=p(o,f([0,e.charCodeAt(c+6)],48));case 6:o=p(o,f([0,e.charCodeAt(c+5)],40));case 5:o=p(o,f([0,e.charCodeAt(c+4)],32));case 4:o=p(o,f([0,e.charCodeAt(c+3)],24));case 3:o=p(o,f([0,e.charCodeAt(c+2)],16));case 2:o=p(o,f([0,e.charCodeAt(c+1)],8));case 1:o=p(o,[0,e.charCodeAt(c)]),o=m(o,l),o=g(o,31),o=m(o,d),r=p(r,o)}return r=p(r,[0,e.length]),i=p(i,[0,e.length]),r=u(r,i),i=u(i,r),r=h(r),i=h(i),r=u(r,i),i=u(i,r),("00000000"+(r[0]>>>0).toString(16)).slice(-8)+("00000000"+(r[1]>>>0).toString(16)).slice(-8)+("00000000"+(i[0]>>>0).toString(16)).slice(-8)+("00000000"+(i[1]>>>0).toString(16)).slice(-8)}function d(e,t){if(Array.prototype.forEach&&e.forEach===Array.prototype.forEach)e.forEach(t);else if(e.length===+e.length)for(var a=0,n=e.length;a<n;a++)t(e[a],a,e);else for(var r in e)e.hasOwnProperty(r)&&t(e[r],r,e)}function l(e,n){var r=[];return null==e?r:Array.prototype.map&&e.map===Array.prototype.map?e.map(n):(d(e,function(e,t,a){r.push(n(e,t,a))}),r)}function a(e){if(null==navigator.plugins)return e.NOT_AVAILABLE;for(var t=[],a=0,n=navigator.plugins.length;a<n;a++)navigator.plugins[a]&&t.push(navigator.plugins[a]);return i(e)&&(t=t.sort(function(e,t){return e.name>t.name?1:e.name<t.name?-1:0})),l(t,function(e){var t=l(e,function(e){return[e.type,e.suffixes]});return[e.name,e.description,t]})}function n(){var e=document.createElement("canvas");return!(!e.getContext||!e.getContext("2d"))}function r(){if(!n())return!1;var e=S();return!!window.WebGLRenderingContext&&!!e}function c(e){throw new Error("'new Fingerprint()' is deprecated, see https://github.com/Valve/fingerprintjs2#upgrade-guide-from-182-to-200")}var e={preprocessor:null,audio:{timeout:1e3,excludeIOS11:!0},fonts:{swfContainerId:"fingerprintjs2",swfPath:"flash/compiled/FontList.swf",userDefinedFonts:[],extendedJsFonts:!1},screen:{detectScreenOrientation:!0},plugins:{sortPluginsFor:[/palemoon/i],excludeIE:!1},extraComponents:[],excludes:{enumerateDevices:!0,pixelRatio:!0,doNotTrack:!0,fontsFlash:!0},NOT_AVAILABLE:"not available",ERROR:"error",EXCLUDED:"excluded"},i=function(e){for(var t=!1,a=0,n=e.plugins.sortPluginsFor.length;a<n;a++){var r=e.plugins.sortPluginsFor[a];if(navigator.userAgent.match(r)){t=!0;break}}return t},S=function(){var e=document.createElement("canvas"),t=null;try{t=e.getContext("webgl")||e.getContext("experimental-webgl")}catch(e){}return t=t||null},t=[{key:"userAgent",getData:function(e){e(navigator.userAgent)}},{key:"webdriver",getData:function(e,t){e(null==navigator.webdriver?t.NOT_AVAILABLE:navigator.webdriver)}},{key:"language",getData:function(e,t){e(navigator.language||navigator.userLanguage||navigator.browserLanguage||navigator.systemLanguage||t.NOT_AVAILABLE)}},{key:"colorDepth",getData:function(e,t){e(window.screen.colorDepth||t.NOT_AVAILABLE)}},{key:"deviceMemory",getData:function(e,t){e(navigator.deviceMemory||t.NOT_AVAILABLE)}},{key:"pixelRatio",getData:function(e,t){e(window.devicePixelRatio||t.NOT_AVAILABLE)}},{key:"hardwareConcurrency",getData:function(e,t){e(function(e){return navigator.hardwareConcurrency?navigator.hardwareConcurrency:e.NOT_AVAILABLE}(t))}},{key:"screenResolution",getData:function(e,t){e(function(e){var t=[window.screen.width,window.screen.height];return e.screen.detectScreenOrientation&&t.sort().reverse(),t}(t))}},{key:"availableScreenResolution",getData:function(e,t){e(function(e){if(window.screen.availWidth&&window.screen.availHeight){var t=[window.screen.availHeight,window.screen.availWidth];return e.screen.detectScreenOrientation&&t.sort().reverse(),t}return e.NOT_AVAILABLE}(t))}},{key:"timezoneOffset",getData:function(e){e((new Date).getTimezoneOffset())}},{key:"timezone",getData:function(e,t){window.Intl&&window.Intl.DateTimeFormat?e((new window.Intl.DateTimeFormat).resolvedOptions().timeZone):e(t.NOT_AVAILABLE)}},{key:"sessionStorage",getData:function(e,t){e(function(t){try{return!!window.sessionStorage}catch(e){return t.ERROR}}(t))}},{key:"localStorage",getData:function(e,t){e(function(t){try{return!!window.localStorage}catch(e){return t.ERROR}}(t))}},{key:"indexedDb",getData:function(e,t){e(function(t){try{return!!window.indexedDB}catch(e){return t.ERROR}}(t))}},{key:"addBehavior",getData:function(e){e(!(!document.body||!document.body.addBehavior))}},{key:"openDatabase",getData:function(e){e(!!window.openDatabase)}},{key:"cpuClass",getData:function(e,t){e(function(e){return navigator.cpuClass||e.NOT_AVAILABLE}(t))}},{key:"platform",getData:function(e,t){e(function(e){return navigator.platform?navigator.platform:e.NOT_AVAILABLE}(t))}},{key:"doNotTrack",getData:function(e,t){e(function(e){return navigator.doNotTrack?navigator.doNotTrack:navigator.msDoNotTrack?navigator.msDoNotTrack:window.doNotTrack?window.doNotTrack:e.NOT_AVAILABLE}(t))}},{key:"plugins",getData:function(e,t){"Microsoft Internet Explorer"===navigator.appName||"Netscape"===navigator.appName&&/Trident/.test(navigator.userAgent)?t.plugins.excludeIE?e(t.EXCLUDED):e(function(t){var e=[];return Object.getOwnPropertyDescriptor&&Object.getOwnPropertyDescriptor(window,"ActiveXObject")||"ActiveXObject"in window?e=l(["AcroPDF.PDF","Adodb.Stream","AgControl.AgControl","DevalVRXCtrl.DevalVRXCtrl.1","MacromediaFlashPaper.MacromediaFlashPaper","Msxml2.DOMDocument","Msxml2.XMLHTTP","PDF.PdfCtrl","QuickTime.QuickTime","QuickTimeCheckObject.QuickTimeCheck.1","RealPlayer","RealPlayer.RealPlayer(tm) ActiveX Control (32-bit)","RealVideo.RealVideo(tm) ActiveX Control (32-bit)","Scripting.Dictionary","SWCtl.SWCtl","Shell.UIHelper","ShockwaveFlash.ShockwaveFlash","Skype.Detection","TDCCtl.TDCCtl","WMPlayer.OCX","rmocx.RealPlayer G2 Control","rmocx.RealPlayer G2 Control.1"],function(e){try{return new window.ActiveXObject(e),e}catch(e){return t.ERROR}}):e.push(t.NOT_AVAILABLE),navigator.plugins&&(e=e.concat(a(t))),e}(t)):e(a(t))}},{key:"canvas",getData:function(e,t){n()?e(function(e){var t=[],a=document.createElement("canvas");a.width=2e3,a.height=200,a.style.display="inline";var n=a.getContext("2d");return n.rect(0,0,10,10),n.rect(2,2,6,6),t.push("canvas winding:"+(!1===n.isPointInPath(5,5,"evenodd")?"yes":"no")),n.textBaseline="alphabetic",n.fillStyle="#f60",n.fillRect(125,1,62,20),n.fillStyle="#069",e.dontUseFakeFontInCanvas?n.font="11pt Arial":n.font="11pt no-real-font-123",n.fillText("Cwm fjordbank glyphs vext quiz, 😃",2,15),n.fillStyle="rgba(102, 204, 0, 0.2)",n.font="18pt Arial",n.fillText("Cwm fjordbank glyphs vext quiz, 😃",4,45),n.globalCompositeOperation="multiply",n.fillStyle="rgb(255,0,255)",n.beginPath(),n.arc(50,50,50,0,2*Math.PI,!0),n.closePath(),n.fill(),n.fillStyle="rgb(0,255,255)",n.beginPath(),n.arc(100,50,50,0,2*Math.PI,!0),n.closePath(),n.fill(),n.fillStyle="rgb(255,255,0)",n.beginPath(),n.arc(75,100,50,0,2*Math.PI,!0),n.closePath(),n.fill(),n.fillStyle="rgb(255,0,255)",n.arc(75,75,75,0,2*Math.PI,!0),n.arc(75,75,25,0,2*Math.PI,!0),n.fill("evenodd"),a.toDataURL&&t.push("canvas fp:"+a.toDataURL()),t}(t)):e(t.NOT_AVAILABLE)}},{key:"webgl",getData:function(e,t){r()?e(function(){function e(e){return o.clearColor(0,0,0,1),o.enable(o.DEPTH_TEST),o.depthFunc(o.LEQUAL),o.clear(o.COLOR_BUFFER_BIT|o.DEPTH_BUFFER_BIT),"["+e[0]+", "+e[1]+"]"}var o;if(!(o=S()))return null;var s=[],t=o.createBuffer();o.bindBuffer(o.ARRAY_BUFFER,t);var a=new Float32Array([-.2,-.9,0,.4,-.26,0,0,.732134444,0]);o.bufferData(o.ARRAY_BUFFER,a,o.STATIC_DRAW),t.itemSize=3,t.numItems=3;var n=o.createProgram(),r=o.createShader(o.VERTEX_SHADER);o.shaderSource(r,"attribute vec2 attrVertex;varying vec2 varyinTexCoordinate;uniform vec2 uniformOffset;void main(){varyinTexCoordinate=attrVertex+uniformOffset;gl_Position=vec4(attrVertex,0,1);}"),o.compileShader(r);var i=o.createShader(o.FRAGMENT_SHADER);o.shaderSource(i,"precision mediump float;varying vec2 varyinTexCoordinate;void main() {gl_FragColor=vec4(varyinTexCoordinate,0,1);}"),o.compileShader(i),o.attachShader(n,r),o.attachShader(n,i),o.linkProgram(n),o.useProgram(n),n.vertexPosAttrib=o.getAttribLocation(n,"attrVertex"),n.offsetUniform=o.getUniformLocation(n,"uniformOffset"),o.enableVertexAttribArray(n.vertexPosArray),o.vertexAttribPointer(n.vertexPosAttrib,t.itemSize,o.FLOAT,!1,0,0),o.uniform2f(n.offsetUniform,1,1),o.drawArrays(o.TRIANGLE_STRIP,0,t.numItems);try{s.push(o.canvas.toDataURL())}catch(e){}s.push("extensions:"+(o.getSupportedExtensions()||[]).join(";")),s.push("webgl aliased line width range:"+e(o.getParameter(o.ALIASED_LINE_WIDTH_RANGE))),s.push("webgl aliased point size range:"+e(o.getParameter(o.ALIASED_POINT_SIZE_RANGE))),s.push("webgl alpha bits:"+o.getParameter(o.ALPHA_BITS)),s.push("webgl antialiasing:"+(o.getContextAttributes().antialias?"yes":"no")),s.push("webgl blue bits:"+o.getParameter(o.BLUE_BITS)),s.push("webgl depth bits:"+o.getParameter(o.DEPTH_BITS)),s.push("webgl green bits:"+o.getParameter(o.GREEN_BITS)),s.push("webgl max anisotropy:"+function(e){var t=e.getExtension("EXT_texture_filter_anisotropic")||e.getExtension("WEBKIT_EXT_texture_filter_anisotropic")||e.getExtension("MOZ_EXT_texture_filter_anisotropic");if(t){var a=e.getParameter(t.MAX_TEXTURE_MAX_ANISOTROPY_EXT);return 0===a&&(a=2),a}return null}(o)),s.push("webgl max combined texture image units:"+o.getParameter(o.MAX_COMBINED_TEXTURE_IMAGE_UNITS)),s.push("webgl max cube map texture size:"+o.getParameter(o.MAX_CUBE_MAP_TEXTURE_SIZE)),s.push("webgl max fragment uniform vectors:"+o.getParameter(o.MAX_FRAGMENT_UNIFORM_VECTORS)),s.push("webgl max render buffer size:"+o.getParameter(o.MAX_RENDERBUFFER_SIZE)),s.push("webgl max texture image units:"+o.getParameter(o.MAX_TEXTURE_IMAGE_UNITS)),s.push("webgl max texture size:"+o.getParameter(o.MAX_TEXTURE_SIZE)),s.push("webgl max varying vectors:"+o.getParameter(o.MAX_VARYING_VECTORS)),s.push("webgl max vertex attribs:"+o.getParameter(o.MAX_VERTEX_ATTRIBS)),s.push("webgl max vertex texture image units:"+o.getParameter(o.MAX_VERTEX_TEXTURE_IMAGE_UNITS)),s.push("webgl max vertex uniform vectors:"+o.getParameter(o.MAX_VERTEX_UNIFORM_VECTORS)),s.push("webgl max viewport dims:"+e(o.getParameter(o.MAX_VIEWPORT_DIMS))),s.push("webgl red bits:"+o.getParameter(o.RED_BITS)),s.push("webgl renderer:"+o.getParameter(o.RENDERER)),s.push("webgl shading language version:"+o.getParameter(o.SHADING_LANGUAGE_VERSION)),s.push("webgl stencil bits:"+o.getParameter(o.STENCIL_BITS)),s.push("webgl vendor:"+o.getParameter(o.VENDOR)),s.push("webgl version:"+o.getParameter(o.VERSION));try{var l=o.getExtension("WEBGL_debug_renderer_info");l&&(s.push("webgl unmasked vendor:"+o.getParameter(l.UNMASKED_VENDOR_WEBGL)),s.push("webgl unmasked renderer:"+o.getParameter(l.UNMASKED_RENDERER_WEBGL)))}catch(e){}return o.getShaderPrecisionFormat&&d(["FLOAT","INT"],function(i){d(["VERTEX","FRAGMENT"],function(r){d(["HIGH","MEDIUM","LOW"],function(n){d(["precision","rangeMin","rangeMax"],function(e){var t=o.getShaderPrecisionFormat(o[r+"_SHADER"],o[n+"_"+i])[e];"precision"!==e&&(e="precision "+e);var a=["webgl ",r.toLowerCase()," shader ",n.toLowerCase()," ",i.toLowerCase()," ",e,":",t].join("");s.push(a)})})})}),s}()):e(t.NOT_AVAILABLE)}},{key:"webglVendorAndRenderer",getData:function(e){r()?e(function(){try{var e=S(),t=e.getExtension("WEBGL_debug_renderer_info");return e.getParameter(t.UNMASKED_VENDOR_WEBGL)+"~"+e.getParameter(t.UNMASKED_RENDERER_WEBGL)}catch(e){return null}}()):e()}},{key:"adBlock",getData:function(e){e(function(){var e=document.createElement("div");e.innerHTML=" ";var t=!(e.className="adsbox");try{document.body.appendChild(e),t=0===document.getElementsByClassName("adsbox")[0].offsetHeight,document.body.removeChild(e)}catch(e){t=!1}return t}())}},{key:"hasLiedLanguages",getData:function(e){e(function(){if(void 0!==navigator.languages)try{if(navigator.languages[0].substr(0,2)!==navigator.language.substr(0,2))return!0}catch(e){return!0}return!1}())}},{key:"hasLiedResolution",getData:function(e){e(window.screen.width<window.screen.availWidth||window.screen.height<window.screen.availHeight)}},{key:"hasLiedOs",getData:function(e){e(function(){var e,t=navigator.userAgent.toLowerCase(),a=navigator.oscpu,n=navigator.platform.toLowerCase();if(e=0<=t.indexOf("windows phone")?"Windows Phone":0<=t.indexOf("win")?"Windows":0<=t.indexOf("android")?"Android":0<=t.indexOf("linux")||0<=t.indexOf("cros")?"Linux":0<=t.indexOf("iphone")||0<=t.indexOf("ipad")?"iOS":0<=t.indexOf("mac")?"Mac":"Other",("ontouchstart"in window||0<navigator.maxTouchPoints||0<navigator.msMaxTouchPoints)&&"Windows Phone"!=e&&"Android"!=e&&"iOS"!=e&&"Other"!=e)return!0;if(void 0!==a){if(0<=(a=a.toLowerCase()).indexOf("win")&&"Windows"!=e&&"Windows Phone"!=e)return!0;if(0<=a.indexOf("linux")&&"Linux"!=e&&"Android"!=e)return!0;if(0<=a.indexOf("mac")&&"Mac"!=e&&"iOS"!=e)return!0;if((-1===a.indexOf("win")&&-1===a.indexOf("linux")&&-1===a.indexOf("mac"))!=("Other"==e))return!0}return 0<=n.indexOf("win")&&"Windows"!=e&&"Windows Phone"!=e||(0<=n.indexOf("linux")||0<=n.indexOf("android")||0<=n.indexOf("pike"))&&"Linux"!=e&&"Android"!=e||(0<=n.indexOf("mac")||0<=n.indexOf("ipad")||0<=n.indexOf("ipod")||0<=n.indexOf("iphone"))&&"Mac"!=e&&"iOS"!=e||(n.indexOf("win")<0&&n.indexOf("linux")<0&&n.indexOf("mac")<0&&n.indexOf("iphone")<0&&n.indexOf("ipad")<0)!=("Other"==e)||void 0===navigator.plugins&&"Windows"!=e&&"Windows Phone"!=e}())}},{key:"hasLiedBrowser",getData:function(e){e(function(){var e,t=navigator.userAgent.toLowerCase(),a=navigator.productSub;if(("Chrome"==(e=0<=t.indexOf("firefox")?"Firefox":0<=t.indexOf("opera")||0<=t.indexOf("opr")?"Opera":0<=t.indexOf("chrome")?"Chrome":0<=t.indexOf("safari")?"Safari":0<=t.indexOf("trident")?"Internet Explorer":"Other")||"Safari"==e||"Opera"==e)&&"20030107"!==a)return!0;var n,r=eval.toString().length;if(37===r&&"Safari"!=e&&"Firefox"!=e&&"Other"!=e)return!0;if(39===r&&"Internet Explorer"!=e&&"Other"!=e)return!0;if(33===r&&"Chrome"!=e&&"Opera"!=e&&"Other"!=e)return!0;try{throw"a"}catch(e){try{e.toSource(),n=!0}catch(e){n=!1}}return n&&"Firefox"!=e&&"Other"!=e}())}},{key:"touchSupport",getData:function(e){e(function(){var e,t=0;void 0!==navigator.maxTouchPoints?t=navigator.maxTouchPoints:void 0!==navigator.msMaxTouchPoints&&(t=navigator.msMaxTouchPoints);try{document.createEvent("TouchEvent"),e=!0}catch(t){e=!1}return[t,e,"ontouchstart"in window]}())}},{key:"fonts",getData:function(e,t){var c=["monospace","sans-serif","serif"],u=["Andale Mono","Arial","Arial Black","Arial Hebrew","Arial MT","Arial Narrow","Arial Rounded MT Bold","Arial Unicode MS","Bitstream Vera Sans Mono","Book Antiqua","Bookman Old Style","Calibri","Cambria","Cambria Math","Century","Century Gothic","Century Schoolbook","Comic Sans","Comic Sans MS","Consolas","Courier","Courier New","Geneva","Georgia","Helvetica","Helvetica Neue","Impact","Lucida Bright","Lucida Calligraphy","Lucida Console","Lucida Fax","LUCIDA GRANDE","Lucida Handwriting","Lucida Sans","Lucida Sans Typewriter","Lucida Sans Unicode","Microsoft Sans Serif","Monaco","Monotype Corsiva","MS Gothic","MS Outlook","MS PGothic","MS Reference Sans Serif","MS Sans Serif","MS Serif","MYRIAD","MYRIAD PRO","Palatino","Palatino Linotype","Segoe Print","Segoe Script","Segoe UI","Segoe UI Light","Segoe UI Semibold","Segoe UI Symbol","Tahoma","Times","Times New Roman","Times New Roman PS","Trebuchet MS","Verdana","Wingdings","Wingdings 2","Wingdings 3"];t.fonts.extendedJsFonts&&(u=u.concat(["Abadi MT Condensed Light","Academy Engraved LET","ADOBE CASLON PRO","Adobe Garamond","ADOBE GARAMOND PRO","Agency FB","Aharoni","Albertus Extra Bold","Albertus Medium","Algerian","Amazone BT","American Typewriter","American Typewriter Condensed","AmerType Md BT","Andalus","Angsana New","AngsanaUPC","Antique Olive","Aparajita","Apple Chancery","Apple Color Emoji","Apple SD Gothic Neo","Arabic Typesetting","ARCHER","ARNO PRO","Arrus BT","Aurora Cn BT","AvantGarde Bk BT","AvantGarde Md BT","AVENIR","Ayuthaya","Bandy","Bangla Sangam MN","Bank Gothic","BankGothic Md BT","Baskerville","Baskerville Old Face","Batang","BatangChe","Bauer Bodoni","Bauhaus 93","Bazooka","Bell MT","Bembo","Benguiat Bk BT","Berlin Sans FB","Berlin Sans FB Demi","Bernard MT Condensed","BernhardFashion BT","BernhardMod BT","Big Caslon","BinnerD","Blackadder ITC","BlairMdITC TT","Bodoni 72","Bodoni 72 Oldstyle","Bodoni 72 Smallcaps","Bodoni MT","Bodoni MT Black","Bodoni MT Condensed","Bodoni MT Poster Compressed","Bookshelf Symbol 7","Boulder","Bradley Hand","Bradley Hand ITC","Bremen Bd BT","Britannic Bold","Broadway","Browallia New","BrowalliaUPC","Brush Script MT","Californian FB","Calisto MT","Calligrapher","Candara","CaslonOpnface BT","Castellar","Centaur","Cezanne","CG Omega","CG Times","Chalkboard","Chalkboard SE","Chalkduster","Charlesworth","Charter Bd BT","Charter BT","Chaucer","ChelthmITC Bk BT","Chiller","Clarendon","Clarendon Condensed","CloisterBlack BT","Cochin","Colonna MT","Constantia","Cooper Black","Copperplate","Copperplate Gothic","Copperplate Gothic Bold","Copperplate Gothic Light","CopperplGoth Bd BT","Corbel","Cordia New","CordiaUPC","Cornerstone","Coronet","Cuckoo","Curlz MT","DaunPenh","Dauphin","David","DB LCD Temp","DELICIOUS","Denmark","DFKai-SB","Didot","DilleniaUPC","DIN","DokChampa","Dotum","DotumChe","Ebrima","Edwardian Script ITC","Elephant","English 111 Vivace BT","Engravers MT","EngraversGothic BT","Eras Bold ITC","Eras Demi ITC","Eras Light ITC","Eras Medium ITC","EucrosiaUPC","Euphemia","Euphemia UCAS","EUROSTILE","Exotc350 Bd BT","FangSong","Felix Titling","Fixedsys","FONTIN","Footlight MT Light","Forte","FrankRuehl","Fransiscan","Freefrm721 Blk BT","FreesiaUPC","Freestyle Script","French Script MT","FrnkGothITC Bk BT","Fruitger","FRUTIGER","Futura","Futura Bk BT","Futura Lt BT","Futura Md BT","Futura ZBlk BT","FuturaBlack BT","Gabriola","Galliard BT","Gautami","Geeza Pro","Geometr231 BT","Geometr231 Hv BT","Geometr231 Lt BT","GeoSlab 703 Lt BT","GeoSlab 703 XBd BT","Gigi","Gill Sans","Gill Sans MT","Gill Sans MT Condensed","Gill Sans MT Ext Condensed Bold","Gill Sans Ultra Bold","Gill Sans Ultra Bold Condensed","Gisha","Gloucester MT Extra Condensed","GOTHAM","GOTHAM BOLD","Goudy Old Style","Goudy Stout","GoudyHandtooled BT","GoudyOLSt BT","Gujarati Sangam MN","Gulim","GulimChe","Gungsuh","GungsuhChe","Gurmukhi MN","Haettenschweiler","Harlow Solid Italic","Harrington","Heather","Heiti SC","Heiti TC","HELV","Herald","High Tower Text","Hiragino Kaku Gothic ProN","Hiragino Mincho ProN","Hoefler Text","Humanst 521 Cn BT","Humanst521 BT","Humanst521 Lt BT","Imprint MT Shadow","Incised901 Bd BT","Incised901 BT","Incised901 Lt BT","INCONSOLATA","Informal Roman","Informal011 BT","INTERSTATE","IrisUPC","Iskoola Pota","JasmineUPC","Jazz LET","Jenson","Jester","Jokerman","Juice ITC","Kabel Bk BT","Kabel Ult BT","Kailasa","KaiTi","Kalinga","Kannada Sangam MN","Kartika","Kaufmann Bd BT","Kaufmann BT","Khmer UI","KodchiangUPC","Kokila","Korinna BT","Kristen ITC","Krungthep","Kunstler Script","Lao UI","Latha","Leelawadee","Letter Gothic","Levenim MT","LilyUPC","Lithograph","Lithograph Light","Long Island","Lydian BT","Magneto","Maiandra GD","Malayalam Sangam MN","Malgun Gothic","Mangal","Marigold","Marion","Marker Felt","Market","Marlett","Matisse ITC","Matura MT Script Capitals","Meiryo","Meiryo UI","Microsoft Himalaya","Microsoft JhengHei","Microsoft New Tai Lue","Microsoft PhagsPa","Microsoft Tai Le","Microsoft Uighur","Microsoft YaHei","Microsoft Yi Baiti","MingLiU","MingLiU_HKSCS","MingLiU_HKSCS-ExtB","MingLiU-ExtB","Minion","Minion Pro","Miriam","Miriam Fixed","Mistral","Modern","Modern No. 20","Mona Lisa Solid ITC TT","Mongolian Baiti","MONO","MoolBoran","Mrs Eaves","MS LineDraw","MS Mincho","MS PMincho","MS Reference Specialty","MS UI Gothic","MT Extra","MUSEO","MV Boli","Nadeem","Narkisim","NEVIS","News Gothic","News GothicMT","NewsGoth BT","Niagara Engraved","Niagara Solid","Noteworthy","NSimSun","Nyala","OCR A Extended","Old Century","Old English Text MT","Onyx","Onyx BT","OPTIMA","Oriya Sangam MN","OSAKA","OzHandicraft BT","Palace Script MT","Papyrus","Parchment","Party LET","Pegasus","Perpetua","Perpetua Titling MT","PetitaBold","Pickwick","Plantagenet Cherokee","Playbill","PMingLiU","PMingLiU-ExtB","Poor Richard","Poster","PosterBodoni BT","PRINCETOWN LET","Pristina","PTBarnum BT","Pythagoras","Raavi","Rage Italic","Ravie","Ribbon131 Bd BT","Rockwell","Rockwell Condensed","Rockwell Extra Bold","Rod","Roman","Sakkal Majalla","Santa Fe LET","Savoye LET","Sceptre","Script","Script MT Bold","SCRIPTINA","Serifa","Serifa BT","Serifa Th BT","ShelleyVolante BT","Sherwood","Shonar Bangla","Showcard Gothic","Shruti","Signboard","SILKSCREEN","SimHei","Simplified Arabic","Simplified Arabic Fixed","SimSun","SimSun-ExtB","Sinhala Sangam MN","Sketch Rockwell","Skia","Small Fonts","Snap ITC","Snell Roundhand","Socket","Souvenir Lt BT","Staccato222 BT","Steamer","Stencil","Storybook","Styllo","Subway","Swis721 BlkEx BT","Swiss911 XCm BT","Sylfaen","Synchro LET","System","Tamil Sangam MN","Technical","Teletype","Telugu Sangam MN","Tempus Sans ITC","Terminal","Thonburi","Traditional Arabic","Trajan","TRAJAN PRO","Tristan","Tubular","Tunga","Tw Cen MT","Tw Cen MT Condensed","Tw Cen MT Condensed Extra Bold","TypoUpright BT","Unicorn","Univers","Univers CE 55 Medium","Univers Condensed","Utsaah","Vagabond","Vani","Vijaya","Viner Hand ITC","VisualUI","Vivaldi","Vladimir Script","Vrinda","Westminster","WHITNEY","Wide Latin","ZapfEllipt BT","ZapfHumnst BT","ZapfHumnst Dm BT","Zapfino","Zurich BlkEx BT","Zurich Ex BT","ZWAdobeF"])),u=(u=u.concat(t.fonts.userDefinedFonts)).filter(function(e,t){return u.indexOf(e)===t});function m(){var e=document.createElement("span");return e.style.position="absolute",e.style.left="-9999px",e.style.fontSize="72px",e.style.fontStyle="normal",e.style.fontWeight="normal",e.style.letterSpacing="normal",e.style.lineBreak="auto",e.style.lineHeight="normal",e.style.textTransform="none",e.style.textAlign="left",e.style.textDecoration="none",e.style.textShadow="none",e.style.whiteSpace="normal",e.style.wordBreak="normal",e.style.wordSpacing="normal",e.innerHTML="mmmmmmmmmmlli",e}function a(e){for(var t=!1,a=0;a<c.length;a++)if(t=e[a].offsetWidth!==i[c[a]]||e[a].offsetHeight!==o[c[a]])return t;return t}var n=document.getElementsByTagName("body")[0],r=document.createElement("div"),g=document.createElement("div"),i={},o={},s=function(){for(var e=[],t=0,a=c.length;t<a;t++){var n=m();n.style.fontFamily=c[t],r.appendChild(n),e.push(n)}return e}();n.appendChild(r);for(var l=0,d=c.length;l<d;l++)i[c[l]]=s[l].offsetWidth,o[c[l]]=s[l].offsetHeight;var f=function(){for(var e,t,a,n={},r=0,i=u.length;r<i;r++){for(var o=[],s=0,l=c.length;s<l;s++){var d=(e=u[r],t=c[s],a=void 0,(a=m()).style.fontFamily="'"+e+"',"+t,a);g.appendChild(d),o.push(d)}n[u[r]]=o}return n}();n.appendChild(g);for(var p=[],h=0,S=u.length;h<S;h++)a(f[u[h]])&&p.push(u[h]);n.removeChild(g),n.removeChild(r),e(p)},pauseBefore:!0},{key:"fontsFlash",getData:function(t,e){return void 0!==window.swfobject?window.swfobject.hasFlashPlayerVersion("9.0.0")?e.fonts.swfPath?void function(t,e){var a="___fp_swf_loaded";window[a]=function(e){t(e)};var n,r=e.fonts.swfContainerId;(n=document.createElement("div")).setAttribute("id",(void 0).fonts.swfContainerId),document.body.appendChild(n);var i={onReady:a};window.swfobject.embedSWF(e.fonts.swfPath,r,"1","1","9.0.0",!1,i,{allowScriptAccess:"always",menu:"false"},{})}(function(e){t(e)},e):t("missing options.fonts.swfPath"):t("flash not installed"):t("swf object not loaded")},pauseBefore:!0},{key:"audio",getData:function(a,e){var t=e.audio;if(t.excludeIOS11&&navigator.userAgent.match(/OS 11.+Version\/11.+Safari/))return a(e.EXCLUDED);var n=window.OfflineAudioContext||window.webkitOfflineAudioContext;if(null==n)return a(e.NOT_AVAILABLE);var r=new n(1,44100,44100),i=r.createOscillator();i.type="triangle",i.frequency.setValueAtTime(1e4,r.currentTime);var o=r.createDynamicsCompressor();d([["threshold",-50],["knee",40],["ratio",12],["reduction",-20],["attack",0],["release",.25]],function(e){void 0!==o[e[0]]&&"function"==typeof o[e[0]].setValueAtTime&&o[e[0]].setValueAtTime(e[1],r.currentTime)}),i.connect(o),o.connect(r.destination),i.start(0),r.startRendering();var s=setTimeout(function(){return console.warn('Audio fingerprint timed out. Please report bug at https://github.com/Valve/fingerprintjs2 with your user agent: "'+navigator.userAgent+'".'),r.oncomplete=function(){},r=null,a("audioTimeout")},t.timeout);r.oncomplete=function(e){var t;try{clearTimeout(s),t=e.renderedBuffer.getChannelData(0).slice(4500,5e3).reduce(function(e,t){return e+Math.abs(t)},0).toString(),i.disconnect(),o.disconnect()}catch(e){return void a(e)}a(t)}}},{key:"enumerateDevices",getData:function(t,e){if(!navigator.mediaDevices||!navigator.mediaDevices.enumerateDevices)return t(e.NOT_AVAILABLE);navigator.mediaDevices.enumerateDevices().then(function(e){t(e.map(function(e){return"id="+e.deviceId+";gid="+e.groupId+";"+e.kind+";"+e.label}))}).catch(function(e){t(e)})}}];return c.get=function(a,n){(function(e,t){var a,n;if(null!=t)for(n in t)null==(a=t[n])||Object.prototype.hasOwnProperty.call(e,n)||(e[n]=a)})(a=n?a||{}:(n=a,{}),e),a.components=a.extraComponents.concat(t);var r={data:[],addPreprocessedComponent:function(e,t){"function"==typeof a.preprocessor&&(t=a.preprocessor(e,t)),r.data.push({key:e,value:t})}},i=-1,o=function(e){if((i+=1)>=a.components.length)n(r.data);else{var t=a.components[i];if(a.excludes[t.key])o(!1);else{if(!e&&t.pauseBefore)return i-=1,void setTimeout(function(){o(!0)},1);try{t.getData(function(e){r.addPreprocessedComponent(t.key,e),o(!1)},a)}catch(e){r.addPreprocessedComponent(t.key,String(e)),o(!1)}}}};o(!1)},c.getPromise=function(a){return new Promise(function(e,t){c.get(a,e)})},c.getV18=function(i,o){return null==o&&(o=i,i={}),c.get(i,function(e){for(var t=[],a=0;a<e.length;a++){var n=e[a];if(n.value===(i.NOT_AVAILABLE||"not available"))t.push({key:n.key,value:"unknown"});else if("plugins"===n.key)t.push({key:"plugins",value:l(n.value,function(e){var t=l(e[2],function(e){return e.join?e.join("~"):e}).join(",");return[e[0],e[1],t].join("::")})});else if(-1!==["canvas","webgl"].indexOf(n.key))t.push({key:n.key,value:n.value.join("~")});else if(-1!==["sessionStorage","localStorage","indexedDb","addBehavior","openDatabase"].indexOf(n.key)){if(!n.value)continue;t.push({key:n.key,value:1})}else n.value?t.push(n.value.join?{key:n.key,value:n.value.join(";")}:n):t.push({key:n.key,value:n.value})}var r=s(l(t,function(e){return e.value}).join("~~~"),31);o(r,t)})},c.x64hash128=s,c.VERSION="2.1.0",c});
|
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.
|
7 |
Author: Jason Crouse
|
8 |
Author URI: https://www.wp-slimstat.com/
|
9 |
Text Domain: wp-slimstat
|
@@ -15,12 +15,11 @@ if ( !empty( wp_slimstat::$settings ) ) {
|
|
15 |
}
|
16 |
|
17 |
class wp_slimstat {
|
18 |
-
public static $version = '4.8.
|
19 |
public static $settings = array();
|
20 |
|
21 |
public static $wpdb = '';
|
22 |
public static $upload_dir = '';
|
23 |
-
public static $maxmind_path = '';
|
24 |
|
25 |
public static $update_checker = array();
|
26 |
public static $raw_post_array = array();
|
@@ -70,8 +69,6 @@ class wp_slimstat {
|
|
70 |
self::$upload_dir = apply_filters( 'slimstat_maxmind_path', self::$upload_dir );
|
71 |
}
|
72 |
|
73 |
-
self::$maxmind_path = self::$upload_dir . '/maxmind.mmdb';
|
74 |
-
|
75 |
// Allow add-ons to turn off the tracker based on other conditions
|
76 |
$is_tracking_filter = apply_filters( 'slimstat_filter_pre_tracking', strpos( self::get_request_uri(), 'wp-admin/admin-ajax.php' ) === false );
|
77 |
$is_tracking_filter_js = apply_filters( 'slimstat_filter_pre_tracking_js', true );
|
@@ -89,9 +86,9 @@ class wp_slimstat {
|
|
89 |
}
|
90 |
|
91 |
// Slimstat tracks screen resolutions, outbound links and other client-side information using a client-side tracker
|
92 |
-
add_action( is_admin() ? 'admin_enqueue_scripts' : 'wp_enqueue_scripts' , array( __CLASS__, '
|
93 |
if ( self::$settings[ 'ignore_wp_users' ] != 'on' ) {
|
94 |
-
add_action( 'login_enqueue_scripts', array( __CLASS__, '
|
95 |
}
|
96 |
}
|
97 |
|
@@ -130,7 +127,7 @@ class wp_slimstat {
|
|
130 |
// end init
|
131 |
|
132 |
/**
|
133 |
-
*
|
134 |
*/
|
135 |
public static function slimtrack_ajax() {
|
136 |
// If the website is using a caching plugin, the tracking code might still be there, even if the user turned off tracking
|
@@ -151,10 +148,6 @@ class wp_slimstat {
|
|
151 |
if ( $parsed_ref === false ) {
|
152 |
exit( self::_log_error( 201 ) );
|
153 |
}
|
154 |
-
|
155 |
-
if ( !empty( $parsed_ref ) && $parsed_ref == $site_host && self::$settings[ 'track_same_domain_referers' ] != 'on' ) {
|
156 |
-
self::$stat[ 'referer' ] = '';
|
157 |
-
}
|
158 |
}
|
159 |
|
160 |
// Do we have an id for this request? If we do, we are either updating an existing pageview, or recording an event on the page
|
@@ -180,6 +173,16 @@ class wp_slimstat {
|
|
180 |
// Retrieves all the client-side info (screen resolution, server latency, etc) and sets the corresponding entries in self::$stat
|
181 |
self::$stat = self::_get_client_info( self::$data_js, self::$stat );
|
182 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
183 |
$id = self::_update_row( self::$stat );
|
184 |
}
|
185 |
// ... otherwise, is this an event: a click on a link (maybe a 'download'?) or other user action
|
@@ -197,9 +200,6 @@ class wp_slimstat {
|
|
197 |
|
198 |
self::_insert_row( $event_info, $GLOBALS[ 'wpdb' ]->prefix . 'slim_events' );
|
199 |
|
200 |
-
// Track outbound links and downloads by adding the appropriate informaton to the database
|
201 |
-
$parsed_resource = array( 'host' => '', 'path' => '' );
|
202 |
-
|
203 |
if ( !empty( self::$data_js[ 'res' ] ) ) {
|
204 |
$resource = self::_base64_url_decode( self::$data_js[ 'res' ] );
|
205 |
$parsed_resource = parse_url( $resource );
|
@@ -207,21 +207,29 @@ class wp_slimstat {
|
|
207 |
if ( $parsed_resource === false ) {
|
208 |
exit( self::_log_error( 203 ) );
|
209 |
}
|
210 |
-
}
|
211 |
|
212 |
-
|
213 |
-
|
214 |
-
|
215 |
-
|
216 |
|
217 |
-
|
218 |
-
|
219 |
-
|
220 |
-
|
221 |
-
|
222 |
-
self::$stat[ 'outbound_resource' ] = $resource;
|
223 |
}
|
|
|
|
|
|
|
224 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
225 |
// Visitor is still on this page, record the timestamp in the corresponding field
|
226 |
self::$stat[ 'dt_out' ] = self::date_i18n( 'U' );
|
227 |
|
@@ -267,6 +275,11 @@ class wp_slimstat {
|
|
267 |
self::$stat[ 'content_type' ] = 'external';
|
268 |
}
|
269 |
|
|
|
|
|
|
|
|
|
|
|
270 |
// Track the rest of the information related to this pageview
|
271 |
$id = self::slimtrack();
|
272 |
}
|
@@ -280,13 +293,17 @@ class wp_slimstat {
|
|
280 |
do_action( 'slimstat_track_success' );
|
281 |
exit( self::_get_value_with_checksum( $id ) );
|
282 |
}
|
|
|
283 |
|
284 |
/**
|
285 |
-
*
|
286 |
*/
|
287 |
public static function slimtrack() {
|
288 |
self::$stat[ 'dt' ] = self::date_i18n( 'U' );
|
289 |
-
|
|
|
|
|
|
|
290 |
|
291 |
// Allow third-party tools to initialize the stat array
|
292 |
self::$stat = apply_filters( 'slimstat_filter_pageview_stat_init', self::$stat );
|
@@ -363,12 +380,12 @@ class wp_slimstat {
|
|
363 |
list( $ip_to_ignore, $cidr_mask ) = explode( '/', trim( $ip_to_ignore ) );
|
364 |
}
|
365 |
else{
|
366 |
-
$cidr_mask = self::
|
367 |
}
|
368 |
|
369 |
-
$long_masked_ip_to_ignore = substr( self::
|
370 |
-
$long_masked_user_ip = substr( self::
|
371 |
-
$long_masked_user_other_ip = substr( self::
|
372 |
|
373 |
if ( $long_masked_user_ip === $long_masked_ip_to_ignore || $long_masked_user_other_ip === $long_masked_ip_to_ignore ) {
|
374 |
return false;
|
@@ -380,7 +397,7 @@ class wp_slimstat {
|
|
380 |
// IPv4 or IPv6
|
381 |
$needle = '.';
|
382 |
$replace = '.0';
|
383 |
-
if ( self::
|
384 |
$needle = ':';
|
385 |
$replace = ':0000';
|
386 |
}
|
@@ -418,7 +435,6 @@ class wp_slimstat {
|
|
418 |
}
|
419 |
|
420 |
if ( !empty( self::$stat[ 'referer' ] ) ) {
|
421 |
-
|
422 |
// Is this a 'seriously malformed' URL?
|
423 |
$parsed_url = parse_url( self::$stat[ 'referer' ] );
|
424 |
if ( !$parsed_url ) {
|
@@ -431,36 +447,23 @@ class wp_slimstat {
|
|
431 |
unset( self::$stat[ 'referer' ] );
|
432 |
}
|
433 |
|
434 |
-
$parsed_site_url = parse_url( get_site_url(), PHP_URL_HOST );
|
435 |
-
if ( !empty( $parsed_url[ 'host' ] ) && $parsed_url[ 'host' ] == $parsed_site_url && self::$settings[ 'track_same_domain_referers' ] != 'on' ) {
|
436 |
-
unset( self::$stat[ 'referer' ] );
|
437 |
-
}
|
438 |
-
else {
|
439 |
-
// Fix Google Images referring domain
|
440 |
-
if ( strpos( self::$stat[ 'referer' ], 'www.google' ) !== false ) {
|
441 |
-
if ( strpos( self::$stat[ 'referer' ], '/imgres?' ) !== false ) {
|
442 |
-
self::$stat[ 'referer' ] = str_replace( 'www.google', 'images.google', self::$stat[ 'referer' ] );
|
443 |
-
}
|
444 |
-
if ( strpos( self::$stat[ 'referer' ], '/url?' ) !== false ) {
|
445 |
-
self::$stat[ 'referer' ] = str_replace( '/url?', '/search?', self::$stat[ 'referer' ] );
|
446 |
-
}
|
447 |
-
}
|
448 |
-
}
|
449 |
-
|
450 |
// Is this referer blacklisted?
|
451 |
if ( !empty( self::$settings[ 'ignore_referers' ] ) && self::_is_blacklisted( self::$stat[ 'referer' ], self::$settings[ 'ignore_referers' ] ) ) {
|
452 |
return false;
|
453 |
}
|
454 |
-
}
|
455 |
|
456 |
-
|
457 |
-
if ( !empty( self::$stat[ 'resource' ] ) ) {
|
458 |
-
self::$stat[ 'searchterms' ] = self::_get_search_terms( self::$stat[ 'resource' ] );
|
459 |
-
}
|
460 |
-
if ( empty( self::$stat[ 'searchterms' ] ) && !empty( self::$stat[ 'referer' ] ) ) {
|
461 |
self::$stat[ 'searchterms' ] = self::_get_search_terms( self::$stat[ 'referer' ] );
|
|
|
|
|
|
|
|
|
|
|
|
|
462 |
}
|
463 |
-
|
|
|
|
|
464 |
self::$stat[ 'searchterms' ] = sanitize_text_field( str_replace( '\\', '', $_REQUEST[ 's' ] ) );
|
465 |
}
|
466 |
|
@@ -550,7 +553,7 @@ class wp_slimstat {
|
|
550 |
}
|
551 |
|
552 |
// Geolocation
|
553 |
-
include_once
|
554 |
try {
|
555 |
$geolocation_data = maxmind_geolite2_connector::get_geolocation_info( self::$stat[ 'ip' ] );
|
556 |
}
|
@@ -626,7 +629,7 @@ class wp_slimstat {
|
|
626 |
|
627 |
// Implode the notes
|
628 |
if ( !empty( self::$stat[ 'notes' ] ) ) {
|
629 |
-
self::$stat[ 'notes' ] = implode( '
|
630 |
}
|
631 |
|
632 |
// Remove empty values
|
@@ -701,18 +704,6 @@ class wp_slimstat {
|
|
701 |
}
|
702 |
// end get_request_uri
|
703 |
|
704 |
-
/**
|
705 |
-
* Update content type as needed
|
706 |
-
*/
|
707 |
-
public static function update_content_type( $_status = 301, $_location = '' ) {
|
708 |
-
if ( $_status >= 300 && $_status < 400 ) {
|
709 |
-
// SEE WHY THIS DOESN'T WORK?!
|
710 |
-
self::$stat[ 'content_type' ] = 'redirect:' . intval( $_status );
|
711 |
-
self::_update_row( self::$stat );
|
712 |
-
}
|
713 |
-
}
|
714 |
-
// end update_content_type
|
715 |
-
|
716 |
public static function is_local_ip_address( $ip_address = '' ) {
|
717 |
if ( !filter_var( $ip_address, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE ) ) {
|
718 |
return true;
|
@@ -721,163 +712,16 @@ class wp_slimstat {
|
|
721 |
return false;
|
722 |
}
|
723 |
|
724 |
-
public static function dtr_pton( $ip ){
|
725 |
-
if ( filter_var( $ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 ) ) {
|
726 |
-
$unpacked = unpack( 'A4', inet_pton( $ip ) );
|
727 |
-
}
|
728 |
-
else if ( filter_var( $ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6 ) && defined( 'AF_INET6' ) ) {
|
729 |
-
$unpacked = unpack( 'A16', inet_pton( $ip ) );
|
730 |
-
}
|
731 |
-
|
732 |
-
$binary_ip = '';
|
733 |
-
if ( !empty( $unpacked ) ) {
|
734 |
-
$unpacked = str_split( $unpacked[ 1 ] );
|
735 |
-
foreach ( $unpacked as $char ) {
|
736 |
-
$binary_ip .= str_pad( decbin( ord( $char ) ), 8, '0', STR_PAD_LEFT );
|
737 |
-
}
|
738 |
-
}
|
739 |
-
|
740 |
-
return $binary_ip;
|
741 |
-
}
|
742 |
-
|
743 |
-
public static function get_mask_length( $ip ){
|
744 |
-
if ( filter_var( $ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 ) ) {
|
745 |
-
return 32;
|
746 |
-
}
|
747 |
-
else if ( filter_var( $ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6 ) ) {
|
748 |
-
return 128;
|
749 |
-
}
|
750 |
-
|
751 |
-
return false;
|
752 |
-
}
|
753 |
-
|
754 |
-
/**
|
755 |
-
* Opens given domains during CORS requests to admin-ajax.php
|
756 |
-
*/
|
757 |
-
public static function open_cors_admin_ajax( $_allowed_origins = array() ) {
|
758 |
-
$exploded_domains = self::string_to_array( self::$settings[ 'external_domains' ] );
|
759 |
-
|
760 |
-
if ( !empty( $exploded_domains ) && !empty( $exploded_domains[ 0 ] ) ) {
|
761 |
-
$_allowed_origins = array_merge( $_allowed_origins, $exploded_domains );
|
762 |
-
}
|
763 |
-
|
764 |
-
return $_allowed_origins;
|
765 |
-
}
|
766 |
-
|
767 |
/**
|
768 |
-
*
|
769 |
*/
|
770 |
-
public static function download_maxmind_database() {
|
771 |
-
// Create the folder, if it doesn't exist
|
772 |
-
if ( !file_exists( dirname( self::$maxmind_path ) ) ) {
|
773 |
-
mkdir( dirname( self::$maxmind_path ) );
|
774 |
-
}
|
775 |
-
|
776 |
-
if ( file_exists( self::$maxmind_path ) ) {
|
777 |
-
if ( is_file( self::$maxmind_path ) ) {
|
778 |
-
$is_deleted = @unlink( self::$maxmind_path );
|
779 |
-
}
|
780 |
-
else {
|
781 |
-
// This should not happen, but hey...
|
782 |
-
$is_deleted = @rmdir( self::$maxmind_path );
|
783 |
-
}
|
784 |
-
|
785 |
-
if ( !$is_deleted ) {
|
786 |
-
return __( "The geolocation database cannot be updated. Please check your server's file permissions and try again.", 'wp-slimstat' );
|
787 |
-
}
|
788 |
-
}
|
789 |
-
|
790 |
-
// Download the most recent database directly from MaxMind's repository
|
791 |
-
if ( self::$settings[ 'geolocation_country' ] == 'on' ) {
|
792 |
-
$maxmind_tmp = self::download_url( 'https://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.mmdb.gz' );
|
793 |
-
}
|
794 |
-
else {
|
795 |
-
$maxmind_tmp = self::download_url( 'https://geolite.maxmind.com/download/geoip/database/GeoLite2-City.mmdb.gz' );
|
796 |
-
}
|
797 |
-
|
798 |
-
if ( is_wp_error( $maxmind_tmp ) ) {
|
799 |
-
return __( 'There was an error downloading the MaxMind Geolite DB:', 'wp-slimstat' ) . ' ' . $maxmind_tmp->get_error_message();
|
800 |
-
}
|
801 |
-
|
802 |
-
$zh = false;
|
803 |
-
|
804 |
-
if ( !function_exists( 'gzopen' ) ) {
|
805 |
-
if ( function_exists( 'gzopen64' ) ) {
|
806 |
-
if ( false === ( $zh = gzopen64( $maxmind_tmp, 'rb' ) ) ) {
|
807 |
-
return __( "There was an error opening the zipped MaxMind Geolite DB. Please check your server's file permissions and try again.", 'wp-slimstat' );
|
808 |
-
}
|
809 |
-
}
|
810 |
-
else {
|
811 |
-
return __( 'Function <code>gzopen</code> is not defined in your environment. Please ask your server administrator to install the corresponding library.', 'wp-slimstat' );
|
812 |
-
}
|
813 |
-
}
|
814 |
-
else{
|
815 |
-
if ( false === ( $zh = gzopen( $maxmind_tmp, 'rb' ) ) ) {
|
816 |
-
return __( "There was an error opening the zipped MaxMind Geolite DB. Please check your server's file permissions and try again.", 'wp-slimstat' );
|
817 |
-
}
|
818 |
-
}
|
819 |
-
|
820 |
-
if ( false === ( $fh = fopen( self::$maxmind_path, 'wb' ) ) ) {
|
821 |
-
return __( "There was an error opening the MaxMind Geolite DB. Please check your server's file permissions and try again.", 'wp-slimstat' );
|
822 |
-
}
|
823 |
-
|
824 |
-
while ( ( $data = gzread( $zh, 4096 ) ) != false ) {
|
825 |
-
fwrite( $fh, $data );
|
826 |
-
}
|
827 |
-
|
828 |
-
@gzclose( $zh );
|
829 |
-
@fclose( $fh );
|
830 |
-
|
831 |
-
if ( !is_file( self::$maxmind_path ) ) {
|
832 |
-
// Something went wrong, maybe a folder was created instead of a regular file
|
833 |
-
@rmdir( self::$maxmind_path );
|
834 |
-
return __( 'There was an error creating the MaxMind Geolite DB.', 'wp-slimstat' );
|
835 |
-
}
|
836 |
-
|
837 |
-
@unlink( $maxmind_tmp );
|
838 |
-
|
839 |
-
return '';
|
840 |
-
}
|
841 |
-
|
842 |
-
public static function download_url( $url ) {
|
843 |
-
// Include the FILE API, if it's not defined
|
844 |
-
if ( !function_exists( 'download_url' ) ) {
|
845 |
-
require_once( ABSPATH . 'wp-admin/includes/file.php' );
|
846 |
-
}
|
847 |
-
|
848 |
-
if ( !$url ) {
|
849 |
-
return new WP_Error( 'http_no_url', __( 'The provided URL is invalid.', 'wp-slimstat' ) );
|
850 |
-
}
|
851 |
-
|
852 |
-
$url_filename = basename( parse_url( $url, PHP_URL_PATH ) );
|
853 |
-
|
854 |
-
$tmpfname = wp_tempnam( $url_filename );
|
855 |
-
if ( ! $tmpfname ) {
|
856 |
-
return new WP_Error( 'http_no_file', __( "A temporary file could not be created. Please check your server's file permissions and try again.", 'wp-slimstat' ) );
|
857 |
-
}
|
858 |
-
|
859 |
-
$response = wp_safe_remote_get( $url, array( 'timeout' => 300, 'stream' => true, 'filename' => $tmpfname, 'user-agent' => 'Slimstat Analytics/' . self::$version . '; ' . home_url() ) );
|
860 |
-
|
861 |
-
if ( is_wp_error( $response ) ) {
|
862 |
-
unlink( $tmpfname );
|
863 |
-
return $response;
|
864 |
-
}
|
865 |
-
|
866 |
-
if ( 200 != wp_remote_retrieve_response_code( $response ) ){
|
867 |
-
unlink( $tmpfname );
|
868 |
-
return new WP_Error( 'http_404', trim( wp_remote_retrieve_response_message( $response ) ) );
|
869 |
-
}
|
870 |
-
|
871 |
-
return $tmpfname;
|
872 |
-
}
|
873 |
-
|
874 |
public static function slimstat_shortcode( $_attributes = '', $_content = '' ) {
|
875 |
extract( shortcode_atts( array(
|
876 |
-
'f' => '',
|
877 |
-
'w' => '',
|
878 |
-
's' => ' ',
|
879 |
-
'o' => 0
|
880 |
-
), $_attributes));
|
881 |
|
882 |
$output = $where = $as_column = '';
|
883 |
$s = "<span class='slimstat-item-separator'>$s</span>";
|
@@ -981,7 +825,7 @@ class wp_slimstat {
|
|
981 |
break;
|
982 |
|
983 |
case 'country':
|
984 |
-
$output[ $result_idx ][ $a_column ] .=
|
985 |
break;
|
986 |
|
987 |
case 'display_name':
|
@@ -1004,11 +848,11 @@ class wp_slimstat {
|
|
1004 |
break;
|
1005 |
|
1006 |
case 'language':
|
1007 |
-
$output[ $result_idx ][ $a_column ] .=
|
1008 |
break;
|
1009 |
|
1010 |
case 'platform':
|
1011 |
-
$output[ $result_idx ][ $a_column ] .=
|
1012 |
break;
|
1013 |
|
1014 |
case 'post_link':
|
@@ -1040,7 +884,25 @@ class wp_slimstat {
|
|
1040 |
|
1041 |
return $output;
|
1042 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1043 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1044 |
public static function rest_api_response( $_request = array() ) {
|
1045 |
$filters = '';
|
1046 |
if ( !empty( $_request[ 'filters' ] ) ) {
|
@@ -1089,7 +951,11 @@ class wp_slimstat {
|
|
1089 |
|
1090 |
return rest_ensure_response( $response );
|
1091 |
}
|
|
|
1092 |
|
|
|
|
|
|
|
1093 |
public static function rest_api_authorization( $_request = array() ) {
|
1094 |
if ( empty( $_request[ 'token' ] ) ) {
|
1095 |
return new WP_Error( 'rest_invalid', esc_html__( '[REST API] Please use a valid token in order to access the REST API endpoint at this URL.', 'wp-slimstat' ), array( 'status' => 400 ) );
|
@@ -1101,7 +967,11 @@ class wp_slimstat {
|
|
1101 |
|
1102 |
return true;
|
1103 |
}
|
|
|
1104 |
|
|
|
|
|
|
|
1105 |
public static function register_rest_route() {
|
1106 |
register_rest_route( 'slimstat/v1', '/get', array(
|
1107 |
'methods' => WP_REST_Server::READABLE,
|
@@ -1129,6 +999,7 @@ class wp_slimstat {
|
|
1129 |
)
|
1130 |
) );
|
1131 |
}
|
|
|
1132 |
|
1133 |
/**
|
1134 |
* Converts a series of comma separated values into an array
|
@@ -1141,6 +1012,7 @@ class wp_slimstat {
|
|
1141 |
return array_filter( array_map( 'trim', explode( ',', $_option ) ) );
|
1142 |
}
|
1143 |
}
|
|
|
1144 |
|
1145 |
/**
|
1146 |
* Toggles WordPress filters on date_i18n function
|
@@ -1160,6 +1032,7 @@ class wp_slimstat {
|
|
1160 |
remove_all_filters( 'date_i18n' );
|
1161 |
}
|
1162 |
}
|
|
|
1163 |
|
1164 |
/**
|
1165 |
* Calls the date_i18n function without filters
|
@@ -1171,6 +1044,7 @@ class wp_slimstat {
|
|
1171 |
|
1172 |
return $date;
|
1173 |
}
|
|
|
1174 |
|
1175 |
/**
|
1176 |
* Sets the default values for all the options
|
@@ -1333,7 +1207,7 @@ class wp_slimstat {
|
|
1333 |
/**
|
1334 |
* Attach a script to every page to track visitors' screen resolution and other browser-based information
|
1335 |
*/
|
1336 |
-
public static function
|
1337 |
// Pass some information to the tracker
|
1338 |
$params = array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) );
|
1339 |
|
@@ -1385,6 +1259,7 @@ class wp_slimstat {
|
|
1385 |
wp_enqueue_script( 'wp_slimstat' );
|
1386 |
wp_localize_script( 'wp_slimstat', 'SlimStatParams', $params );
|
1387 |
}
|
|
|
1388 |
|
1389 |
/**
|
1390 |
* Removes old entries from the main table and performs other daily tasks
|
@@ -1440,9 +1315,10 @@ class wp_slimstat {
|
|
1440 |
public static function get_optout_html() {
|
1441 |
die( stripslashes( self::$settings[ 'opt_out_message' ] ) );
|
1442 |
}
|
|
|
1443 |
|
1444 |
/**
|
1445 |
-
* Checks for add-on updates
|
1446 |
*/
|
1447 |
public static function update_checker() {
|
1448 |
if ( empty( self::$update_checker ) || !is_admin() ) {
|
@@ -1464,6 +1340,7 @@ class wp_slimstat {
|
|
1464 |
}
|
1465 |
}
|
1466 |
}
|
|
|
1467 |
|
1468 |
public static function add_plugin_manual_download_link( $_links = array(), $_plugin_file = '' ) {
|
1469 |
$a_clean_slug = str_replace( array( 'wp-slimstat-', '/index.php' ), array( '', '' ), $_plugin_file );
|
@@ -1488,54 +1365,49 @@ class wp_slimstat {
|
|
1488 |
return $_links;
|
1489 |
}
|
1490 |
|
|
|
|
|
|
|
1491 |
public static function register_widget() {
|
1492 |
return register_widget( "slimstat_widget" );
|
1493 |
}
|
|
|
1494 |
|
1495 |
/**
|
1496 |
-
*
|
1497 |
*/
|
1498 |
-
|
1499 |
-
|
1500 |
-
|
1501 |
-
|
1502 |
-
|
1503 |
-
|
1504 |
-
|
1505 |
-
|
1506 |
-
|
1507 |
-
|
1508 |
-
|
1509 |
-
|
1510 |
-
|
1511 |
-
|
1512 |
-
|
1513 |
-
}
|
1514 |
-
}
|
1515 |
-
}
|
1516 |
-
|
1517 |
-
return apply_filters( 'slimstat_filter_ip_address', $ip_array );
|
1518 |
}
|
1519 |
-
// end
|
1520 |
|
1521 |
/**
|
1522 |
-
*
|
1523 |
*/
|
1524 |
-
|
1525 |
-
if (
|
1526 |
-
|
1527 |
-
|
1528 |
-
|
1529 |
-
|
1530 |
-
// Fix some codes, the correct syntax is with minus (-) not underscore (_)
|
1531 |
-
return str_replace( '_', '-', strtolower( $array_languages[ 0 ] ) );
|
1532 |
}
|
1533 |
-
return ''; // Indeterminable language
|
1534 |
}
|
1535 |
-
// end
|
1536 |
|
1537 |
/**
|
1538 |
-
* Stores the information
|
1539 |
*/
|
1540 |
protected static function _insert_row( $_data = array(), $_table = '' ) {
|
1541 |
if ( empty( $_data ) || empty( $_table ) ) {
|
@@ -1570,23 +1442,75 @@ class wp_slimstat {
|
|
1570 |
|
1571 |
// Sanitize column names (SQL/XSS injections, anyone?)
|
1572 |
$_data = array_filter( $_data );
|
1573 |
-
|
1574 |
-
|
1575 |
-
|
1576 |
-
|
1577 |
-
|
|
|
|
|
1578 |
}
|
1579 |
|
1580 |
-
self::$wpdb->
|
1581 |
-
$GLOBALS[ 'wpdb' ]->prefix
|
1582 |
-
$_data
|
1583 |
-
|
1584 |
-
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1585 |
|
1586 |
return $id;
|
1587 |
}
|
1588 |
// end _update_row
|
1589 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1590 |
/**
|
1591 |
* Sniffs out referrals from search engines and tries to determine the query string
|
1592 |
*/
|
@@ -1596,46 +1520,59 @@ class wp_slimstat {
|
|
1596 |
}
|
1597 |
|
1598 |
$searchterms = '';
|
1599 |
-
$parsed_url = parse_url( $_url );
|
1600 |
-
|
1601 |
-
// Engines with different character encodings should always be listed here, regardless of their query string format
|
1602 |
-
$query_strings = array(
|
1603 |
-
'baidu.com' => 'wd',
|
1604 |
-
'eniro' => 'search_word',
|
1605 |
-
'seznam' => 'oq',
|
1606 |
-
'virgilio' => 'qs',
|
1607 |
-
'voila' => 'rdata',
|
1608 |
-
'yandex' => 'text',
|
1609 |
-
'yell' => 'keywords',
|
1610 |
-
'yippy' => 'query'
|
1611 |
-
);
|
1612 |
|
1613 |
-
|
1614 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
1615 |
|
1616 |
-
|
1617 |
-
parse_str( $parsed_url[ 'query' ], $query );
|
1618 |
-
}
|
1619 |
|
1620 |
-
if (
|
1621 |
-
|
1622 |
}
|
1623 |
|
1624 |
-
|
1625 |
-
|
1626 |
-
|
1627 |
-
|
1628 |
-
|
1629 |
-
|
1630 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1631 |
}
|
1632 |
}
|
1633 |
}
|
1634 |
else {
|
1635 |
// We weren't lucky, but there's still hope
|
1636 |
-
foreach( array( 'k', 'q', 'qt', 'query', 's' ) as $
|
1637 |
-
|
1638 |
-
|
1639 |
break;
|
1640 |
}
|
1641 |
}
|
@@ -1645,6 +1582,20 @@ class wp_slimstat {
|
|
1645 |
}
|
1646 |
// end _get_search_terms
|
1647 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1648 |
/**
|
1649 |
* Returns details about the resource being accessed
|
1650 |
*/
|
@@ -1756,6 +1707,36 @@ class wp_slimstat {
|
|
1756 |
}
|
1757 |
// end _get_content_info
|
1758 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1759 |
/**
|
1760 |
* Reads the cookie to get the visit_id and sets the variable accordingly
|
1761 |
*/
|
@@ -1814,29 +1795,8 @@ class wp_slimstat {
|
|
1814 |
// end _set_visit_id
|
1815 |
|
1816 |
/**
|
1817 |
-
*
|
1818 |
*/
|
1819 |
-
protected static function _get_client_info( $_data_js = array(), $_stat = array() ) {
|
1820 |
-
if ( !empty( $_data_js[ 'bw' ] ) ) {
|
1821 |
-
$_stat[ 'resolution' ] = strip_tags( trim( $_data_js[ 'bw' ] . 'x' . $_data_js[ 'bh' ] ) );
|
1822 |
-
}
|
1823 |
-
if ( !empty( $_data_js[ 'sw' ] ) ) {
|
1824 |
-
$_stat[ 'screen_width' ] = intval( $_data_js[ 'sw' ] );
|
1825 |
-
}
|
1826 |
-
if ( !empty( $_data_js[ 'sh' ] ) ) {
|
1827 |
-
$_stat[ 'screen_height' ] = intval( $_data_js[ 'sh' ] );
|
1828 |
-
}
|
1829 |
-
if ( !empty( $_data_js[ 'sl' ] ) && $_data_js[ 'sl' ] > 0 && $_data_js[ 'sl' ] < 60000 ) {
|
1830 |
-
$_stat[ 'server_latency' ] = intval( $_data_js[ 'sl' ] );
|
1831 |
-
}
|
1832 |
-
if ( !empty( $_data_js[ 'pp' ] ) && $_data_js[ 'pp' ] > 0 && $_data_js[ 'pp' ] < 60000 ) {
|
1833 |
-
$_stat[ 'page_performance' ] = intval( $_data_js[ 'pp' ] );
|
1834 |
-
}
|
1835 |
-
|
1836 |
-
return $_stat;
|
1837 |
-
}
|
1838 |
-
// end _get_client_info
|
1839 |
-
|
1840 |
protected static function _log_error( $_error_code = 0 ) {
|
1841 |
// Save this error in the database
|
1842 |
self::update_option( 'slimstat_tracker_error', array( $_error_code, self::date_i18n( 'U' ) ) );
|
@@ -1846,6 +1806,7 @@ class wp_slimstat {
|
|
1846 |
|
1847 |
return -$_error_code;
|
1848 |
}
|
|
|
1849 |
|
1850 |
protected static function _get_value_with_checksum( $_value = 0 ) {
|
1851 |
return $_value . '.' . md5( $_value . self::$settings[ 'secret' ] );
|
@@ -1861,6 +1822,9 @@ class wp_slimstat {
|
|
1861 |
return false;
|
1862 |
}
|
1863 |
|
|
|
|
|
|
|
1864 |
protected static function _is_blacklisted( $_needles = array(), $_haystack_string = '' ) {
|
1865 |
foreach ( self::string_to_array( $_haystack_string ) as $a_item ) {
|
1866 |
$pattern = str_replace( array( '\*', '\!' ) , array( '(.*)', '.' ), preg_quote( $a_item, '@' ) );
|
@@ -1878,13 +1842,70 @@ class wp_slimstat {
|
|
1878 |
|
1879 |
return false;
|
1880 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1881 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1882 |
protected static function _base64_url_encode( $_input = '' ) {
|
1883 |
return strtr( base64_encode( $_input ), '+/=', '._-' );
|
1884 |
}
|
1885 |
protected static function _base64_url_decode( $_input = '' ) {
|
1886 |
return strip_tags( trim( base64_decode( strtr( $_input, '._-', '+/=' ) ) ) );
|
1887 |
}
|
|
|
1888 |
}
|
1889 |
// end of class declaration
|
1890 |
|
@@ -1906,11 +1927,16 @@ class slimstat_widget extends WP_Widget {
|
|
1906 |
* @param array $args
|
1907 |
* @param array $instance
|
1908 |
*/
|
1909 |
-
public function widget( $
|
1910 |
-
extract(
|
1911 |
-
|
1912 |
-
|
|
|
|
|
1913 |
|
|
|
|
|
|
|
1914 |
if ( !empty( $slimstat_widget_id ) ) {
|
1915 |
echo do_shortcode( "[slimstat f='widget' w='{$slimstat_widget_id}']{$slimstat_widget_filters}[/slimstat]" );
|
1916 |
}
|
@@ -1924,13 +1950,17 @@ class slimstat_widget extends WP_Widget {
|
|
1924 |
*
|
1925 |
* @param array $instance The widget options
|
1926 |
*/
|
1927 |
-
public function form( $
|
|
|
|
|
|
|
|
|
|
|
|
|
1928 |
// Let's build the dropdown
|
1929 |
include_once( plugin_dir_path( __FILE__ ) . 'admin/view/wp-slimstat-reports.php' );
|
1930 |
wp_slimstat_reports::init();
|
1931 |
$select_options = '';
|
1932 |
-
$slimstat_widget_id = !empty( $instance[ 'slimstat_widget_id' ] ) ? $instance[ 'slimstat_widget_id' ] : '';
|
1933 |
-
$slimstat_widget_filters = !empty( $instance[ 'slimstat_widget_filters' ] ) ? $instance[ 'slimstat_widget_filters' ] : '';
|
1934 |
|
1935 |
foreach ( wp_slimstat_reports::$reports as $a_report_id => $a_report_info ) {
|
1936 |
$select_options .= "<option value='$a_report_id' " . ( ( $slimstat_widget_id == $a_report_id ) ? 'selected="selected"' : '' ) . ">{$a_report_info[ 'title' ]}</option>";
|
@@ -1938,13 +1968,18 @@ class slimstat_widget extends WP_Widget {
|
|
1938 |
?>
|
1939 |
|
1940 |
<p>
|
1941 |
-
<label for="<?php echo esc_attr( $this->get_field_id( 'slimstat_widget_id' ) ); ?>"
|
1942 |
<select class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'slimstat_widget_id' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'slimstat_widget_id' ) ); ?>">
|
1943 |
<option value="">Select a widget</option>
|
1944 |
<?php echo $select_options ?>
|
1945 |
</select>
|
1946 |
</p>
|
1947 |
|
|
|
|
|
|
|
|
|
|
|
1948 |
<p>
|
1949 |
<label for="<?php echo esc_attr( $this->get_field_id( 'slimstat_widget_filters' ) ); ?>"><?php _e( 'Optional filters', 'wp-slimstat' ); ?></label>
|
1950 |
<a href="https://slimstat.freshdesk.com/solution/articles/5000631833-what-is-the-syntax-of-a-slimstat-shortcode-#slimstat-operators" target="_blank">[?]</a>
|
@@ -1959,11 +1994,12 @@ class slimstat_widget extends WP_Widget {
|
|
1959 |
* @param array $new_instance The new options
|
1960 |
* @param array $old_instance The previous options
|
1961 |
*/
|
1962 |
-
public function update( $
|
1963 |
-
$instance = $
|
1964 |
|
1965 |
-
$instance[ 'slimstat_widget_id' ] = $
|
1966 |
-
$instance[ '
|
|
|
1967 |
return $instance;
|
1968 |
}
|
1969 |
}
|
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.8
|
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.8';
|
19 |
public static $settings = array();
|
20 |
|
21 |
public static $wpdb = '';
|
22 |
public static $upload_dir = '';
|
|
|
23 |
|
24 |
public static $update_checker = array();
|
25 |
public static $raw_post_array = array();
|
69 |
self::$upload_dir = apply_filters( 'slimstat_maxmind_path', self::$upload_dir );
|
70 |
}
|
71 |
|
|
|
|
|
72 |
// Allow add-ons to turn off the tracker based on other conditions
|
73 |
$is_tracking_filter = apply_filters( 'slimstat_filter_pre_tracking', strpos( self::get_request_uri(), 'wp-admin/admin-ajax.php' ) === false );
|
74 |
$is_tracking_filter_js = apply_filters( 'slimstat_filter_pre_tracking_js', true );
|
86 |
}
|
87 |
|
88 |
// Slimstat tracks screen resolutions, outbound links and other client-side information using a client-side tracker
|
89 |
+
add_action( is_admin() ? 'admin_enqueue_scripts' : 'wp_enqueue_scripts' , array( __CLASS__, 'enqueue_tracker' ), 15 );
|
90 |
if ( self::$settings[ 'ignore_wp_users' ] != 'on' ) {
|
91 |
+
add_action( 'login_enqueue_scripts', array( __CLASS__, 'enqueue_tracker' ), 10 );
|
92 |
}
|
93 |
}
|
94 |
|
127 |
// end init
|
128 |
|
129 |
/**
|
130 |
+
* Reads and processes the data received by the XHR tracker
|
131 |
*/
|
132 |
public static function slimtrack_ajax() {
|
133 |
// If the website is using a caching plugin, the tracking code might still be there, even if the user turned off tracking
|
148 |
if ( $parsed_ref === false ) {
|
149 |
exit( self::_log_error( 201 ) );
|
150 |
}
|
|
|
|
|
|
|
|
|
151 |
}
|
152 |
|
153 |
// Do we have an id for this request? If we do, we are either updating an existing pageview, or recording an event on the page
|
173 |
// Retrieves all the client-side info (screen resolution, server latency, etc) and sets the corresponding entries in self::$stat
|
174 |
self::$stat = self::_get_client_info( self::$data_js, self::$stat );
|
175 |
|
176 |
+
// Visitor is still on this page, record the timestamp in the corresponding field if this WAS NOT a request to update a "server-side" pageview with client-side info
|
177 |
+
if ( empty( self::$stat[ 'resolution' ] ) ) {
|
178 |
+
self::$stat[ 'dt_out' ] = self::date_i18n( 'U' );
|
179 |
+
}
|
180 |
+
|
181 |
+
// Is this a new visitor, based on his fingerprint?
|
182 |
+
if ( !empty( self::$stat[ 'fingerprint' ] ) && self::_is_new_visitor( self::$stat[ 'fingerprint' ] ) ) {
|
183 |
+
self::$stat[ 'notes' ] = array( 'new:yes' );
|
184 |
+
}
|
185 |
+
|
186 |
$id = self::_update_row( self::$stat );
|
187 |
}
|
188 |
// ... otherwise, is this an event: a click on a link (maybe a 'download'?) or other user action
|
200 |
|
201 |
self::_insert_row( $event_info, $GLOBALS[ 'wpdb' ]->prefix . 'slim_events' );
|
202 |
|
|
|
|
|
|
|
203 |
if ( !empty( self::$data_js[ 'res' ] ) ) {
|
204 |
$resource = self::_base64_url_decode( self::$data_js[ 'res' ] );
|
205 |
$parsed_resource = parse_url( $resource );
|
207 |
if ( $parsed_resource === false ) {
|
208 |
exit( self::_log_error( 203 ) );
|
209 |
}
|
|
|
210 |
|
211 |
+
// Is this a download? If it is, add a new record to the database
|
212 |
+
if ( in_array( pathinfo( $resource, PATHINFO_EXTENSION ), self::string_to_array( self::$settings[ 'extensions_to_track' ] ) ) && !empty( $parsed_resource[ 'path' ] ) ) {
|
213 |
+
self::$stat[ 'resource' ] = $parsed_resource[ 'path' ];
|
214 |
+
self::$stat[ 'content_type' ] = 'download';
|
215 |
|
216 |
+
if ( !empty( self::$data_js[ 'fh' ] ) ) {
|
217 |
+
self::$stat[ 'fingerprint' ] = sanitize_text_field( self::$data_js[ 'fh' ] );
|
218 |
+
}
|
219 |
+
|
220 |
+
$id = self::slimtrack();
|
|
|
221 |
}
|
222 |
+
// .. or outbound link? If so, update the pageview with the new info
|
223 |
+
else if ( $parsed_resource[ 'host' ] != $site_host ) {
|
224 |
+
self::$stat[ 'outbound_resource' ] = $resource;
|
225 |
|
226 |
+
// Visitor is still on this page, record the timestamp in the corresponding field
|
227 |
+
self::$stat[ 'dt_out' ] = self::date_i18n( 'U' );
|
228 |
+
|
229 |
+
$id = self::_update_row( self::$stat );
|
230 |
+
}
|
231 |
+
}
|
232 |
+
else {
|
233 |
// Visitor is still on this page, record the timestamp in the corresponding field
|
234 |
self::$stat[ 'dt_out' ] = self::date_i18n( 'U' );
|
235 |
|
275 |
self::$stat[ 'content_type' ] = 'external';
|
276 |
}
|
277 |
|
278 |
+
// Is this a new visitor, based on his fingerprint?
|
279 |
+
if ( !empty( self::$stat[ 'fingerprint' ] ) && self::_is_new_visitor( self::$stat[ 'fingerprint' ] ) ) {
|
280 |
+
self::$stat[ 'notes' ] = array( 'new:yes' );
|
281 |
+
}
|
282 |
+
|
283 |
// Track the rest of the information related to this pageview
|
284 |
$id = self::slimtrack();
|
285 |
}
|
293 |
do_action( 'slimstat_track_success' );
|
294 |
exit( self::_get_value_with_checksum( $id ) );
|
295 |
}
|
296 |
+
// end slimtrack_ajax
|
297 |
|
298 |
/**
|
299 |
+
* THE Slimstat tracker
|
300 |
*/
|
301 |
public static function slimtrack() {
|
302 |
self::$stat[ 'dt' ] = self::date_i18n( 'U' );
|
303 |
+
|
304 |
+
if ( empty( self::$stat[ 'notes' ] ) ) {
|
305 |
+
self::$stat[ 'notes' ] = array();
|
306 |
+
}
|
307 |
|
308 |
// Allow third-party tools to initialize the stat array
|
309 |
self::$stat = apply_filters( 'slimstat_filter_pageview_stat_init', self::$stat );
|
380 |
list( $ip_to_ignore, $cidr_mask ) = explode( '/', trim( $ip_to_ignore ) );
|
381 |
}
|
382 |
else{
|
383 |
+
$cidr_mask = self::_get_mask_length( $ip_to_ignore );
|
384 |
}
|
385 |
|
386 |
+
$long_masked_ip_to_ignore = substr( self::_dtr_pton( $ip_to_ignore ), 0, $cidr_mask );
|
387 |
+
$long_masked_user_ip = substr( self::_dtr_pton( self::$stat[ 'ip' ] ), 0, $cidr_mask );
|
388 |
+
$long_masked_user_other_ip = substr( self::_dtr_pton( self::$stat[ 'other_ip' ] ), 0 , $cidr_mask );
|
389 |
|
390 |
if ( $long_masked_user_ip === $long_masked_ip_to_ignore || $long_masked_user_other_ip === $long_masked_ip_to_ignore ) {
|
391 |
return false;
|
397 |
// IPv4 or IPv6
|
398 |
$needle = '.';
|
399 |
$replace = '.0';
|
400 |
+
if ( self::_get_mask_length( self::$stat[ 'ip' ] ) == 128 ) {
|
401 |
$needle = ':';
|
402 |
$replace = ':0000';
|
403 |
}
|
435 |
}
|
436 |
|
437 |
if ( !empty( self::$stat[ 'referer' ] ) ) {
|
|
|
438 |
// Is this a 'seriously malformed' URL?
|
439 |
$parsed_url = parse_url( self::$stat[ 'referer' ] );
|
440 |
if ( !$parsed_url ) {
|
447 |
unset( self::$stat[ 'referer' ] );
|
448 |
}
|
449 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
450 |
// Is this referer blacklisted?
|
451 |
if ( !empty( self::$settings[ 'ignore_referers' ] ) && self::_is_blacklisted( self::$stat[ 'referer' ], self::$settings[ 'ignore_referers' ] ) ) {
|
452 |
return false;
|
453 |
}
|
|
|
454 |
|
455 |
+
// Search terms
|
|
|
|
|
|
|
|
|
456 |
self::$stat[ 'searchterms' ] = self::_get_search_terms( self::$stat[ 'referer' ] );
|
457 |
+
|
458 |
+
// Are we storing internal referrers in the database?
|
459 |
+
$parsed_site_url = parse_url( get_site_url(), PHP_URL_HOST );
|
460 |
+
if ( !empty( $parsed_url[ 'host' ] ) && $parsed_url[ 'host' ] == $parsed_site_url && self::$settings[ 'track_same_domain_referers' ] != 'on' ) {
|
461 |
+
unset( self::$stat[ 'referer' ] );
|
462 |
+
}
|
463 |
}
|
464 |
+
|
465 |
+
// Internal WP search?
|
466 |
+
if ( empty( self::$stat[ 'searchterms' ] ) && !empty( $_POST[ 's' ] ) ) {
|
467 |
self::$stat[ 'searchterms' ] = sanitize_text_field( str_replace( '\\', '', $_REQUEST[ 's' ] ) );
|
468 |
}
|
469 |
|
553 |
}
|
554 |
|
555 |
// Geolocation
|
556 |
+
include_once( plugin_dir_path( __FILE__ ) . 'vendor/maxmind.php' );
|
557 |
try {
|
558 |
$geolocation_data = maxmind_geolite2_connector::get_geolocation_info( self::$stat[ 'ip' ] );
|
559 |
}
|
629 |
|
630 |
// Implode the notes
|
631 |
if ( !empty( self::$stat[ 'notes' ] ) ) {
|
632 |
+
self::$stat[ 'notes' ] = '[' . implode( '][', self::$stat[ 'notes' ] ) . ']';
|
633 |
}
|
634 |
|
635 |
// Remove empty values
|
704 |
}
|
705 |
// end get_request_uri
|
706 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
707 |
public static function is_local_ip_address( $ip_address = '' ) {
|
708 |
if ( !filter_var( $ip_address, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE ) ) {
|
709 |
return true;
|
712 |
return false;
|
713 |
}
|
714 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
715 |
/**
|
716 |
+
* Implements the Slimstat Shortcode API
|
717 |
*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
718 |
public static function slimstat_shortcode( $_attributes = '', $_content = '' ) {
|
719 |
extract( shortcode_atts( array(
|
720 |
+
'f' => '', // recent, popular, count, widget
|
721 |
+
'w' => '', // column to use (for recent, popular and count) or widget to use
|
722 |
+
's' => ' ', // separator
|
723 |
+
'o' => 0 // offset for counters
|
724 |
+
), $_attributes ) );
|
725 |
|
726 |
$output = $where = $as_column = '';
|
727 |
$s = "<span class='slimstat-item-separator'>$s</span>";
|
825 |
break;
|
826 |
|
827 |
case 'country':
|
828 |
+
$output[ $result_idx ][ $a_column ] .= wp_slimstat_i18n::get_string( 'c-' . $a_result[ $a_column ] );
|
829 |
break;
|
830 |
|
831 |
case 'display_name':
|
848 |
break;
|
849 |
|
850 |
case 'language':
|
851 |
+
$output[ $result_idx ][ $a_column ] .= wp_slimstat_i18n::get_string( 'l-' . $a_result[ $a_column ] );
|
852 |
break;
|
853 |
|
854 |
case 'platform':
|
855 |
+
$output[ $result_idx ][ $a_column ] .= wp_slimstat_i18n::get_string( $a_result[ $a_column ] );
|
856 |
break;
|
857 |
|
858 |
case 'post_link':
|
884 |
|
885 |
return $output;
|
886 |
}
|
887 |
+
// end slimstat_shortcode
|
888 |
+
|
889 |
+
/**
|
890 |
+
* Opens given domains during CORS requests to admin-ajax.php
|
891 |
+
*/
|
892 |
+
public static function open_cors_admin_ajax( $_allowed_origins = array() ) {
|
893 |
+
$exploded_domains = self::string_to_array( self::$settings[ 'external_domains' ] );
|
894 |
|
895 |
+
if ( !empty( $exploded_domains ) && !empty( $exploded_domains[ 0 ] ) ) {
|
896 |
+
$_allowed_origins = array_merge( $_allowed_origins, $exploded_domains );
|
897 |
+
}
|
898 |
+
|
899 |
+
return $_allowed_origins;
|
900 |
+
}
|
901 |
+
// end open_cors_admin_ajax
|
902 |
+
|
903 |
+
/**
|
904 |
+
* Implements a REST API interface to retrieve Slimstat reports and metrics
|
905 |
+
*/
|
906 |
public static function rest_api_response( $_request = array() ) {
|
907 |
$filters = '';
|
908 |
if ( !empty( $_request[ 'filters' ] ) ) {
|
951 |
|
952 |
return rest_ensure_response( $response );
|
953 |
}
|
954 |
+
// end rest_api_response
|
955 |
|
956 |
+
/**
|
957 |
+
* Implements a REST API authentication mechanism via token
|
958 |
+
*/
|
959 |
public static function rest_api_authorization( $_request = array() ) {
|
960 |
if ( empty( $_request[ 'token' ] ) ) {
|
961 |
return new WP_Error( 'rest_invalid', esc_html__( '[REST API] Please use a valid token in order to access the REST API endpoint at this URL.', 'wp-slimstat' ), array( 'status' => 400 ) );
|
967 |
|
968 |
return true;
|
969 |
}
|
970 |
+
// end rest_api_authorization
|
971 |
|
972 |
+
/**
|
973 |
+
* Registers a new REST API route for the Slimstat endpoint
|
974 |
+
*/
|
975 |
public static function register_rest_route() {
|
976 |
register_rest_route( 'slimstat/v1', '/get', array(
|
977 |
'methods' => WP_REST_Server::READABLE,
|
999 |
)
|
1000 |
) );
|
1001 |
}
|
1002 |
+
// end register_rest_route
|
1003 |
|
1004 |
/**
|
1005 |
* Converts a series of comma separated values into an array
|
1012 |
return array_filter( array_map( 'trim', explode( ',', $_option ) ) );
|
1013 |
}
|
1014 |
}
|
1015 |
+
// end string_to_array
|
1016 |
|
1017 |
/**
|
1018 |
* Toggles WordPress filters on date_i18n function
|
1032 |
remove_all_filters( 'date_i18n' );
|
1033 |
}
|
1034 |
}
|
1035 |
+
// end toggle_date_i18n_filters
|
1036 |
|
1037 |
/**
|
1038 |
* Calls the date_i18n function without filters
|
1044 |
|
1045 |
return $date;
|
1046 |
}
|
1047 |
+
// end date_i18n
|
1048 |
|
1049 |
/**
|
1050 |
* Sets the default values for all the options
|
1207 |
/**
|
1208 |
* Attach a script to every page to track visitors' screen resolution and other browser-based information
|
1209 |
*/
|
1210 |
+
public static function enqueue_tracker() {
|
1211 |
// Pass some information to the tracker
|
1212 |
$params = array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) );
|
1213 |
|
1259 |
wp_enqueue_script( 'wp_slimstat' );
|
1260 |
wp_localize_script( 'wp_slimstat', 'SlimStatParams', $params );
|
1261 |
}
|
1262 |
+
// end enqueue_tracker
|
1263 |
|
1264 |
/**
|
1265 |
* Removes old entries from the main table and performs other daily tasks
|
1315 |
public static function get_optout_html() {
|
1316 |
die( stripslashes( self::$settings[ 'opt_out_message' ] ) );
|
1317 |
}
|
1318 |
+
// end get_optout_html
|
1319 |
|
1320 |
/**
|
1321 |
+
* Checks for add-on updates, using the third-party library PUC
|
1322 |
*/
|
1323 |
public static function update_checker() {
|
1324 |
if ( empty( self::$update_checker ) || !is_admin() ) {
|
1340 |
}
|
1341 |
}
|
1342 |
}
|
1343 |
+
// end update_checker
|
1344 |
|
1345 |
public static function add_plugin_manual_download_link( $_links = array(), $_plugin_file = '' ) {
|
1346 |
$a_clean_slug = str_replace( array( 'wp-slimstat-', '/index.php' ), array( '', '' ), $_plugin_file );
|
1365 |
return $_links;
|
1366 |
}
|
1367 |
|
1368 |
+
/**
|
1369 |
+
* Registers the Slimstat widget
|
1370 |
+
*/
|
1371 |
public static function register_widget() {
|
1372 |
return register_widget( "slimstat_widget" );
|
1373 |
}
|
1374 |
+
// end register_widget
|
1375 |
|
1376 |
/**
|
1377 |
+
* Generates the key to see if a given host is listed as a search engine in the corresponding Json data file
|
1378 |
*/
|
1379 |
+
public static function get_lossy_url( $_url = '' ) {
|
1380 |
+
return preg_replace(
|
1381 |
+
array(
|
1382 |
+
'/^(w+[0-9]*|search)\./',
|
1383 |
+
'/(^|\.)m\./',
|
1384 |
+
'/(\.(com|org|net|co|it|edu))?\.(ad|ae|af|ag|ai|al|am|ao|aq|ar|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bl|bm|bn|bo|bq|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cu|cv|cw|cx|cy|cz|de|dj|dk|dm|do|dz|ec|ee|eg|eh|er|es|et|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mf|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|ss|st|sv|sx|sy|sz|tc|td|tf|tg|th|tj|tk|tl|tm|tn|to|tr|tt|tv|tw|tz|ua|ug|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|za|zm|zw)(\/|$)/',
|
1385 |
+
'/(^|\.)(ad|ae|af|ag|ai|al|am|ao|aq|ar|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bl|bm|bn|bo|bq|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cu|cv|cw|cx|cy|cz|de|dj|dk|dm|do|dz|ec|ee|eg|eh|er|es|et|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mf|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|ss|st|sv|sx|sy|sz|tc|td|tf|tg|th|tj|tk|tl|tm|tn|to|tr|tt|tv|tw|tz|ua|ug|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|za|zm|zw)\./',
|
1386 |
+
),
|
1387 |
+
array(
|
1388 |
+
'',
|
1389 |
+
'$1',
|
1390 |
+
'.{}$4',
|
1391 |
+
'$1{}.',
|
1392 |
+
),
|
1393 |
+
$_url );
|
|
|
|
|
|
|
|
|
|
|
1394 |
}
|
1395 |
+
// end get_lossy_url
|
1396 |
|
1397 |
/**
|
1398 |
+
* Update content type as needed
|
1399 |
*/
|
1400 |
+
public static function update_content_type( $_status = 301, $_location = '' ) {
|
1401 |
+
if ( $_status >= 300 && $_status < 400 ) {
|
1402 |
+
// SEE WHY THIS DOESN'T WORK?!
|
1403 |
+
self::$stat[ 'content_type' ] = 'redirect:' . intval( $_status );
|
1404 |
+
self::_update_row( self::$stat );
|
|
|
|
|
|
|
1405 |
}
|
|
|
1406 |
}
|
1407 |
+
// end update_content_type
|
1408 |
|
1409 |
/**
|
1410 |
+
* Stores the pageview information in the database and returns the ID associated to the new entry
|
1411 |
*/
|
1412 |
protected static function _insert_row( $_data = array(), $_table = '' ) {
|
1413 |
if ( empty( $_data ) || empty( $_table ) ) {
|
1442 |
|
1443 |
// Sanitize column names (SQL/XSS injections, anyone?)
|
1444 |
$_data = array_filter( $_data );
|
1445 |
+
|
1446 |
+
// The 'notes' column stores multiple comma-separated values: we need to append the new value to the existing ones
|
1447 |
+
// Also, values are organized in an array, which we need to implode as a string
|
1448 |
+
$notes = '';
|
1449 |
+
if ( !empty( $_data[ 'notes' ] ) && is_array( $_data[ 'notes' ] ) ) {
|
1450 |
+
$notes = ( count( $_data ) > 1 ? ',' : '' ) . "notes=CONCAT( IFNULL( notes, '' ), '[" . esc_sql( implode( '][', $_data[ 'notes' ] ) ) . "]' )";
|
1451 |
+
unset( $_data[ 'notes' ] );
|
1452 |
}
|
1453 |
|
1454 |
+
$prepared_query = self::$wpdb->prepare( "
|
1455 |
+
UPDATE IGNORE {$GLOBALS[ 'wpdb' ]->prefix}slim_stats
|
1456 |
+
SET " . implode( '=%s,', array_keys( $_data ) ) . "=%s
|
1457 |
+
WHERE id = $id
|
1458 |
+
", $_data );
|
1459 |
+
|
1460 |
+
// Add the notes
|
1461 |
+
if ( !empty( $notes ) ) {
|
1462 |
+
$prepared_query = str_replace( 'WHERE id =', $notes . ' WHERE id =', $prepared_query );
|
1463 |
+
}
|
1464 |
+
|
1465 |
+
// Save the data in the database
|
1466 |
+
self::$wpdb->query( $prepared_query );
|
1467 |
|
1468 |
return $id;
|
1469 |
}
|
1470 |
// end _update_row
|
1471 |
|
1472 |
+
/**
|
1473 |
+
* Tries to find the user's REAL IP address
|
1474 |
+
*/
|
1475 |
+
protected static function _get_remote_ip() {
|
1476 |
+
$ip_array = array( '', '' );
|
1477 |
+
|
1478 |
+
if ( !empty( $_SERVER[ 'REMOTE_ADDR' ] ) && filter_var( $_SERVER[ 'REMOTE_ADDR' ], FILTER_VALIDATE_IP ) !== false ) {
|
1479 |
+
$ip_array[ 0 ] = $_SERVER[ 'REMOTE_ADDR' ];
|
1480 |
+
}
|
1481 |
+
|
1482 |
+
$originating_ip_headers = array( 'X-Forwarded-For', 'HTTP_X_FORWARDED_FOR', 'CF-Connecting-IP', 'HTTP_CLIENT_IP', 'HTTP_X_REAL_IP', 'HTTP_FORWARDED', 'HTTP_X_FORWARDED' );
|
1483 |
+
foreach ( $originating_ip_headers as $a_header ) {
|
1484 |
+
if ( !empty( $_SERVER[ $a_header ] ) ) {
|
1485 |
+
foreach ( explode( ',', $_SERVER[ $a_header ] ) as $a_ip ) {
|
1486 |
+
if ( filter_var( $a_ip, FILTER_VALIDATE_IP ) !== false && $a_ip != $ip_array[ 0 ] ) {
|
1487 |
+
$ip_array[ 1 ] = $a_ip;
|
1488 |
+
break;
|
1489 |
+
}
|
1490 |
+
}
|
1491 |
+
}
|
1492 |
+
}
|
1493 |
+
|
1494 |
+
return apply_filters( 'slimstat_filter_ip_address', $ip_array );
|
1495 |
+
}
|
1496 |
+
// end _get_remote_ip
|
1497 |
+
|
1498 |
+
/**
|
1499 |
+
* Extracts the accepted language from browser headers
|
1500 |
+
*/
|
1501 |
+
protected static function _get_language() {
|
1502 |
+
if ( isset( $_SERVER[ 'HTTP_ACCEPT_LANGUAGE' ] ) ) {
|
1503 |
+
|
1504 |
+
// Capture up to the first delimiter (, found in Safari)
|
1505 |
+
preg_match( "/([^,;]*)/", $_SERVER[ 'HTTP_ACCEPT_LANGUAGE' ], $array_languages );
|
1506 |
+
|
1507 |
+
// Fix some codes, the correct syntax is with minus (-) not underscore (_)
|
1508 |
+
return str_replace( '_', '-', strtolower( $array_languages[ 0 ] ) );
|
1509 |
+
}
|
1510 |
+
return ''; // Indeterminable language
|
1511 |
+
}
|
1512 |
+
// end _get_language
|
1513 |
+
|
1514 |
/**
|
1515 |
* Sniffs out referrals from search engines and tries to determine the query string
|
1516 |
*/
|
1520 |
}
|
1521 |
|
1522 |
$searchterms = '';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1523 |
|
1524 |
+
// Load the search engines list to mark pageviews accordingly
|
1525 |
+
// Each entry contains the following attributes
|
1526 |
+
// - params: which query string params is associated to the search keyword
|
1527 |
+
// - backlink: format of the URL point to the search engine result page
|
1528 |
+
// - charsets: list of charset used to encode the keywords
|
1529 |
+
//
|
1530 |
+
$search_engines = file_get_contents( plugin_dir_path( __FILE__ ) . 'vendor/matomo-searchengine.json' );
|
1531 |
+
$search_engines = json_decode( $search_engines, TRUE );
|
1532 |
|
1533 |
+
$parsed_url = @parse_url( $_url );
|
|
|
|
|
1534 |
|
1535 |
+
if ( empty( $search_engines ) || empty( $parsed_url ) || empty( $parsed_url[ 'host' ] ) ) {
|
1536 |
+
return '';
|
1537 |
}
|
1538 |
|
1539 |
+
$sek = self::get_lossy_url( $parsed_url[ 'host' ] );
|
1540 |
+
|
1541 |
+
if ( !empty( $search_engines[ $sek ] ) ) {
|
1542 |
+
if ( empty( $search_engines[ $sek ][ 'params' ] ) ) {
|
1543 |
+
$search_engines[ $sek ][ 'params' ] = array( 'q' );
|
1544 |
+
}
|
1545 |
+
|
1546 |
+
foreach ( $search_engines[ $sek ][ 'params' ] as $a_param ) {
|
1547 |
+
$searchterms = self::_get_param_from_query_string( $parsed_url[ 'query' ], $a_param );
|
1548 |
+
if ( !empty( $searchterms ) ) {
|
1549 |
+
break;
|
1550 |
+
}
|
1551 |
+
}
|
1552 |
+
|
1553 |
+
// Make sure to use the appropriate charset, if specified
|
1554 |
+
if ( !empty( $searchterms ) ) {
|
1555 |
+
if ( !empty( $search_engines[ 'charsets' ] ) && function_exists( 'iconv' ) ) {
|
1556 |
+
$charset = $search_engines[ 'charsets' ][ 0 ];
|
1557 |
+
if ( count( $search_engines[ 'charsets' ] ) > 1 && function_exists( 'mb_detect_encoding' ) ) {
|
1558 |
+
$charset = mb_detect_encoding( $searchterms, $search_engines[ 'charsets' ] );
|
1559 |
+
if ( $charset === false ) {
|
1560 |
+
$charset = $search_engines[ 'charsets' ][ 0 ];
|
1561 |
+
}
|
1562 |
+
}
|
1563 |
+
|
1564 |
+
$new_searchterms = @iconv( $charset, 'UTF-8//IGNORE', $searchterms );
|
1565 |
+
if ( !empty( $new_searchterms ) ) {
|
1566 |
+
$searchterms = $new_searchterms;
|
1567 |
+
}
|
1568 |
}
|
1569 |
}
|
1570 |
}
|
1571 |
else {
|
1572 |
// We weren't lucky, but there's still hope
|
1573 |
+
foreach( array( 'ask', 'k', 'q', 'qs', 'qt', 'query', 's', 'string' ) as $a_param ) {
|
1574 |
+
$searchterms = self::_get_param_from_query_string( $parsed_url[ 'query' ], $a_param );
|
1575 |
+
if ( !empty( $searchterms ) ) {
|
1576 |
break;
|
1577 |
}
|
1578 |
}
|
1582 |
}
|
1583 |
// end _get_search_terms
|
1584 |
|
1585 |
+
/**
|
1586 |
+
* Retrieves a param value from a string treated as a URL query string
|
1587 |
+
*/
|
1588 |
+
protected static function _get_param_from_query_string( $_query = '', $_parameter = '' ) {
|
1589 |
+
if ( empty( $_query ) ) {
|
1590 |
+
return '';
|
1591 |
+
}
|
1592 |
+
|
1593 |
+
$parsed_query = @parse_str( $_query, $values );
|
1594 |
+
|
1595 |
+
return !empty( $values[ $_parameter ] ) ? $values[ $_parameter ] : '';
|
1596 |
+
}
|
1597 |
+
// end _get_param_from_query_string
|
1598 |
+
|
1599 |
/**
|
1600 |
* Returns details about the resource being accessed
|
1601 |
*/
|
1707 |
}
|
1708 |
// end _get_content_info
|
1709 |
|
1710 |
+
/**
|
1711 |
+
* Reads the information sent by the Javascript tracker and adds it to the $_stat array
|
1712 |
+
*/
|
1713 |
+
protected static function _get_client_info( $_data_js = array(), $_stat = array() ) {
|
1714 |
+
if ( !empty( $_data_js[ 'bw' ] ) ) {
|
1715 |
+
$_stat[ 'resolution' ] = strip_tags( trim( $_data_js[ 'bw' ] . 'x' . $_data_js[ 'bh' ] ) );
|
1716 |
+
}
|
1717 |
+
if ( !empty( $_data_js[ 'sw' ] ) ) {
|
1718 |
+
$_stat[ 'screen_width' ] = intval( $_data_js[ 'sw' ] );
|
1719 |
+
}
|
1720 |
+
if ( !empty( $_data_js[ 'sh' ] ) ) {
|
1721 |
+
$_stat[ 'screen_height' ] = intval( $_data_js[ 'sh' ] );
|
1722 |
+
}
|
1723 |
+
if ( !empty( $_data_js[ 'sl' ] ) && $_data_js[ 'sl' ] > 0 && $_data_js[ 'sl' ] < 60000 ) {
|
1724 |
+
$_stat[ 'server_latency' ] = intval( $_data_js[ 'sl' ] );
|
1725 |
+
}
|
1726 |
+
if ( !empty( $_data_js[ 'pp' ] ) && $_data_js[ 'pp' ] > 0 && $_data_js[ 'pp' ] < 60000 ) {
|
1727 |
+
$_stat[ 'page_performance' ] = intval( $_data_js[ 'pp' ] );
|
1728 |
+
}
|
1729 |
+
if ( !empty( $_data_js[ 'fh' ] ) ) {
|
1730 |
+
$_stat[ 'fingerprint' ] = sanitize_text_field( $_data_js[ 'fh' ] );
|
1731 |
+
}
|
1732 |
+
if ( !empty( $_data_js[ 'tz' ] ) ) {
|
1733 |
+
$_stat[ 'tz_offset' ] = intval( $_data_js[ 'tz' ] );
|
1734 |
+
}
|
1735 |
+
|
1736 |
+
return $_stat;
|
1737 |
+
}
|
1738 |
+
// end _get_client_info
|
1739 |
+
|
1740 |
/**
|
1741 |
* Reads the cookie to get the visit_id and sets the variable accordingly
|
1742 |
*/
|
1795 |
// end _set_visit_id
|
1796 |
|
1797 |
/**
|
1798 |
+
* Saves an error detected by the tracker in the database
|
1799 |
*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1800 |
protected static function _log_error( $_error_code = 0 ) {
|
1801 |
// Save this error in the database
|
1802 |
self::update_option( 'slimstat_tracker_error', array( $_error_code, self::date_i18n( 'U' ) ) );
|
1806 |
|
1807 |
return -$_error_code;
|
1808 |
}
|
1809 |
+
// end _log_error
|
1810 |
|
1811 |
protected static function _get_value_with_checksum( $_value = 0 ) {
|
1812 |
return $_value . '.' . md5( $_value . self::$settings[ 'secret' ] );
|
1822 |
return false;
|
1823 |
}
|
1824 |
|
1825 |
+
/**
|
1826 |
+
* Determines if a given string is listed in the corresponding 'exclusion' field
|
1827 |
+
*/
|
1828 |
protected static function _is_blacklisted( $_needles = array(), $_haystack_string = '' ) {
|
1829 |
foreach ( self::string_to_array( $_haystack_string ) as $a_item ) {
|
1830 |
$pattern = str_replace( array( '\*', '\!' ) , array( '(.*)', '.' ), preg_quote( $a_item, '@' ) );
|
1842 |
|
1843 |
return false;
|
1844 |
}
|
1845 |
+
// end _is_blacklisted
|
1846 |
+
|
1847 |
+
/**
|
1848 |
+
* Determines if this is a new visitor, meaning that we've never seen this fingerprint before
|
1849 |
+
*/
|
1850 |
+
protected static function _is_new_visitor( $_fingerprint = '' ) {
|
1851 |
+
$count_fingerprint = self::$wpdb->get_var( self::$wpdb->prepare( "
|
1852 |
+
SELECT COUNT( id )
|
1853 |
+
FROM {$GLOBALS[ 'wpdb' ]->prefix}slim_stats
|
1854 |
+
WHERE fingerprint = %s", $_fingerprint
|
1855 |
+
) );
|
1856 |
+
|
1857 |
+
return $count_fingerprint == 0;
|
1858 |
+
}
|
1859 |
+
// end _is_new_visitor
|
1860 |
+
|
1861 |
+
/**
|
1862 |
+
* Validates and unpacks an IP Address
|
1863 |
+
*/
|
1864 |
+
protected static function _dtr_pton( $_ip ){
|
1865 |
+
if ( filter_var( $_ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 ) ) {
|
1866 |
+
$unpacked = unpack( 'A4', inet_pton( $_ip ) );
|
1867 |
+
}
|
1868 |
+
else if ( filter_var( $_ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6 ) && defined( 'AF_INET6' ) ) {
|
1869 |
+
$unpacked = unpack( 'A16', inet_pton( $_ip ) );
|
1870 |
+
}
|
1871 |
+
|
1872 |
+
$binary_ip = '';
|
1873 |
+
if ( !empty( $unpacked ) ) {
|
1874 |
+
$unpacked = str_split( $unpacked[ 1 ] );
|
1875 |
+
foreach ( $unpacked as $char ) {
|
1876 |
+
$binary_ip .= str_pad( decbin( ord( $char ) ), 8, '0', STR_PAD_LEFT );
|
1877 |
+
}
|
1878 |
+
}
|
1879 |
+
|
1880 |
+
return $binary_ip;
|
1881 |
+
}
|
1882 |
+
// end _dtr_pton
|
1883 |
|
1884 |
+
/**
|
1885 |
+
* Helper function to determine if we should ignore visits coming from this IP address
|
1886 |
+
*/
|
1887 |
+
protected static function _get_mask_length( $ip ){
|
1888 |
+
if ( filter_var( $ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 ) ) {
|
1889 |
+
return 32;
|
1890 |
+
}
|
1891 |
+
else if ( filter_var( $ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6 ) ) {
|
1892 |
+
return 128;
|
1893 |
+
}
|
1894 |
+
|
1895 |
+
return false;
|
1896 |
+
}
|
1897 |
+
// end _get_mask_length
|
1898 |
+
|
1899 |
+
/**
|
1900 |
+
* These two functions here implement an URL-safe base64 string
|
1901 |
+
*/
|
1902 |
protected static function _base64_url_encode( $_input = '' ) {
|
1903 |
return strtr( base64_encode( $_input ), '+/=', '._-' );
|
1904 |
}
|
1905 |
protected static function _base64_url_decode( $_input = '' ) {
|
1906 |
return strip_tags( trim( base64_decode( strtr( $_input, '._-', '+/=' ) ) ) );
|
1907 |
}
|
1908 |
+
// end _base64_url_encode/decode
|
1909 |
}
|
1910 |
// end of class declaration
|
1911 |
|
1927 |
* @param array $args
|
1928 |
* @param array $instance
|
1929 |
*/
|
1930 |
+
public function widget( $_args = array(), $_instance = array() ) {
|
1931 |
+
extract( shortcode_atts( array(
|
1932 |
+
'slimstat_widget_id' => '',
|
1933 |
+
'slimstat_widget_title' => '',
|
1934 |
+
'slimstat_widget_filters' => ''
|
1935 |
+
), $_instance ) );
|
1936 |
|
1937 |
+
if ( !empty( $slimstat_widget_title ) ) {
|
1938 |
+
echo ( !empty( $_args[ 'before_title' ] ) ? $_args[ 'before_title' ] : '<h2 class="widget-title">' ) . $slimstat_widget_title . ( !empty( $_args[ 'after_title' ] ) ? $_args[ 'after_title' ] : '</h2>' );
|
1939 |
+
}
|
1940 |
if ( !empty( $slimstat_widget_id ) ) {
|
1941 |
echo do_shortcode( "[slimstat f='widget' w='{$slimstat_widget_id}']{$slimstat_widget_filters}[/slimstat]" );
|
1942 |
}
|
1950 |
*
|
1951 |
* @param array $instance The widget options
|
1952 |
*/
|
1953 |
+
public function form( $_instance ) {
|
1954 |
+
extract( shortcode_atts( array(
|
1955 |
+
'slimstat_widget_id' => '',
|
1956 |
+
'slimstat_widget_title' => '',
|
1957 |
+
'slimstat_widget_filters' => ''
|
1958 |
+
), $_instance ) );
|
1959 |
+
|
1960 |
// Let's build the dropdown
|
1961 |
include_once( plugin_dir_path( __FILE__ ) . 'admin/view/wp-slimstat-reports.php' );
|
1962 |
wp_slimstat_reports::init();
|
1963 |
$select_options = '';
|
|
|
|
|
1964 |
|
1965 |
foreach ( wp_slimstat_reports::$reports as $a_report_id => $a_report_info ) {
|
1966 |
$select_options .= "<option value='$a_report_id' " . ( ( $slimstat_widget_id == $a_report_id ) ? 'selected="selected"' : '' ) . ">{$a_report_info[ 'title' ]}</option>";
|
1968 |
?>
|
1969 |
|
1970 |
<p>
|
1971 |
+
<label for="<?php echo esc_attr( $this->get_field_id( 'slimstat_widget_id' ) ); ?>"><?php _e( 'Report', 'wp-slimstat' ) ?></label>
|
1972 |
<select class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'slimstat_widget_id' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'slimstat_widget_id' ) ); ?>">
|
1973 |
<option value="">Select a widget</option>
|
1974 |
<?php echo $select_options ?>
|
1975 |
</select>
|
1976 |
</p>
|
1977 |
|
1978 |
+
<p>
|
1979 |
+
<label for="<?php echo esc_attr( $this->get_field_id( 'slimstat_widget_title' ) ); ?>"><?php _e( 'Title', 'wp-slimstat' ) ?></label>
|
1980 |
+
<input type="text" class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'slimstat_widget_title' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'slimstat_widget_title' ) ); ?>" value="<?php echo trim( strip_tags( $slimstat_widget_title ) ) ?>">
|
1981 |
+
</p>
|
1982 |
+
|
1983 |
<p>
|
1984 |
<label for="<?php echo esc_attr( $this->get_field_id( 'slimstat_widget_filters' ) ); ?>"><?php _e( 'Optional filters', 'wp-slimstat' ); ?></label>
|
1985 |
<a href="https://slimstat.freshdesk.com/solution/articles/5000631833-what-is-the-syntax-of-a-slimstat-shortcode-#slimstat-operators" target="_blank">[?]</a>
|
1994 |
* @param array $new_instance The new options
|
1995 |
* @param array $old_instance The previous options
|
1996 |
*/
|
1997 |
+
public function update( $_new_instance, $_old_instance ) {
|
1998 |
+
$instance = $_old_instance;
|
1999 |
|
2000 |
+
$instance[ 'slimstat_widget_id' ] = $_new_instance[ 'slimstat_widget_id' ];
|
2001 |
+
$instance[ 'slimstat_widget_title' ] = $_new_instance[ 'slimstat_widget_title' ];
|
2002 |
+
$instance[ 'slimstat_widget_filters' ] = $_new_instance[ 'slimstat_widget_filters' ];
|
2003 |
return $instance;
|
2004 |
}
|
2005 |
}
|