Version Description
- [Note] If you're upgrading from a version prior to 4.0, please upgrade to version 4.0 first. To simplify our codebase, we removed all the upgrade scripts to support versions prior to 4.0.
- [New] Say hi to your new charts: search terms (total and unique per day or even hour), outbound links, users. If you can't see the new charts, don't forget to give the No Panic button a try.
- [Update] We are dropping old unused columns from the main table: ip_temp, other_ip_temp, ip_num, other_ip_num. Please make sure you have a backup, in case you need those columns for other custom purposes.
- [Fix] Some users were seeing "ghost reports" in their admin screens. A residue from Halloween, we assume.
- [Fix] Our "loading" animated icon was not being displayed correctly on refresh.
- [Fix] Chart legend was not being displayed as expected.
Download this release
Release Info
Developer | coolmann |
Plugin | Slimstat Analytics |
Version | 4.2.1 |
Comparing to | |
See all releases |
Code changes from version 4.2.0.1 to 4.2.1
- admin/css/slimstat.css +1 -1
- admin/js/slimstat.admin.js +5 -4
- admin/view/wp-slimstat-db.php +10 -5
- admin/view/wp-slimstat-reports.php +129 -50
- admin/wp-slimstat-admin.php +10 -206
- readme.txt +18 -19
- wp-slimstat.php +2 -2
admin/css/slimstat.css
CHANGED
@@ -761,4 +761,4 @@
|
|
761 |
.slimstat-font-stopwatch:before { content: '\e815'; } /* '' */
|
762 |
.slimstat-font-docs:before { content: '\e816'; } /* '' */
|
763 |
|
764 |
-
.animate-spin{-moz-animation:spin 3s infinite linear;-o-animation:spin 3s infinite linear;-webkit-animation:spin 3s infinite linear;animation:spin 3s infinite linear;display:inline-block}@-moz-keyframes spin{0%{-moz-transform:rotate(0deg);-o-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-moz-transform:rotate(359deg);-o-transform:rotate(359deg);-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-moz-transform:rotate(0deg);-o-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-moz-transform:rotate(359deg);-o-transform:rotate(359deg);-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@-o-keyframes spin{0%{-moz-transform:rotate(0deg);-o-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-moz-transform:rotate(359deg);-o-transform:rotate(359deg);-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@-ms-keyframes spin{0%{-moz-transform:rotate(0deg);-o-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-moz-transform:rotate(359deg);-o-transform:rotate(359deg);-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes spin{0%{-moz-transform:rotate(0deg);-o-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-moz-transform:rotate(359deg);-o-transform:rotate(359deg);-webkit-transform:rotate(359deg);transform:rotate(359deg)}}
|
761 |
.slimstat-font-stopwatch:before { content: '\e815'; } /* '' */
|
762 |
.slimstat-font-docs:before { content: '\e816'; } /* '' */
|
763 |
|
764 |
+
.animate-spin{-moz-animation:spin 3s infinite linear;-o-animation:spin 3s infinite linear;-webkit-animation:spin 3s infinite linear;animation:spin 3s infinite linear;display:inline-block;line-height:1em;}@-moz-keyframes spin{0%{-moz-transform:rotate(0deg);-o-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-moz-transform:rotate(359deg);-o-transform:rotate(359deg);-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-moz-transform:rotate(0deg);-o-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-moz-transform:rotate(359deg);-o-transform:rotate(359deg);-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@-o-keyframes spin{0%{-moz-transform:rotate(0deg);-o-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-moz-transform:rotate(359deg);-o-transform:rotate(359deg);-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@-ms-keyframes spin{0%{-moz-transform:rotate(0deg);-o-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-moz-transform:rotate(359deg);-o-transform:rotate(359deg);-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes spin{0%{-moz-transform:rotate(0deg);-o-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-moz-transform:rotate(359deg);-o-transform:rotate(359deg);-webkit-transform:rotate(359deg);transform:rotate(359deg)}}
|
admin/js/slimstat.admin.js
CHANGED
@@ -15,7 +15,7 @@ var SlimStatAdmin = {
|
|
15 |
clickable: true
|
16 |
},
|
17 |
legend: {
|
18 |
-
container: '
|
19 |
noColumns: 4
|
20 |
},
|
21 |
pan: { interactive: true },
|
@@ -50,6 +50,7 @@ var SlimStatAdmin = {
|
|
50 |
jQuery(".chart-placeholder").each( function() {
|
51 |
SlimStatAdmin._placeholder = jQuery(this);
|
52 |
SlimStatAdmin._chart_id = jQuery(this).parents('.postbox').attr('id');
|
|
|
53 |
|
54 |
// Don't do anything if no placeholder or if hidden
|
55 |
if (!SlimStatAdmin._placeholder.length || SlimStatAdmin._placeholder.is(':hidden')){
|
@@ -66,7 +67,7 @@ var SlimStatAdmin = {
|
|
66 |
|
67 |
// Calculate the remaining options
|
68 |
SlimStatAdmin._chart_options.colors = SlimStatAdminParams.chart_colors,
|
69 |
-
|
70 |
SlimStatAdmin._chart_options.xaxis = {
|
71 |
ticks: (SlimStatAdmin.ticks[0][1].indexOf('/') > 0 && SlimStatAdmin.ticks.length > 16) ? [] : SlimStatAdmin.ticks,
|
72 |
tickDecimals: 0,
|
@@ -198,7 +199,7 @@ var SlimStatAdmin = {
|
|
198 |
else{
|
199 |
report_id = 'slim_p7_02';
|
200 |
data = {action: 'slimstat_load_report', report_id: report_id, security: jQuery('#meta-box-order-nonce').val(), page: SlimStatAdmin.get_query_string_value( 'page' ) };
|
201 |
-
jQuery('#'+report_id+' .inside').html('<p class="loading"><i class="slimstat-font-
|
202 |
SlimStatAdmin.refresh_report(report_id, data);
|
203 |
|
204 |
window.clearTimeout(refresh_handle);
|
@@ -215,7 +216,7 @@ var SlimStatAdmin = {
|
|
215 |
data[filters_input[i]['name']] = filters_input[i]['value'];
|
216 |
}
|
217 |
|
218 |
-
jQuery('#'+report_id+' .inside').html('<p class="loading"><i class="slimstat-font-
|
219 |
|
220 |
jQuery.post(ajaxurl, data, function(response){
|
221 |
if (report_id.indexOf('_01') > 0){
|
15 |
clickable: true
|
16 |
},
|
17 |
legend: {
|
18 |
+
container: '',
|
19 |
noColumns: 4
|
20 |
},
|
21 |
pan: { interactive: true },
|
50 |
jQuery(".chart-placeholder").each( function() {
|
51 |
SlimStatAdmin._placeholder = jQuery(this);
|
52 |
SlimStatAdmin._chart_id = jQuery(this).parents('.postbox').attr('id');
|
53 |
+
SlimStatAdmin._chart_options.legend.container = '#' + SlimStatAdmin._chart_id + ' .chart-legend';
|
54 |
|
55 |
// Don't do anything if no placeholder or if hidden
|
56 |
if (!SlimStatAdmin._placeholder.length || SlimStatAdmin._placeholder.is(':hidden')){
|
67 |
|
68 |
// Calculate the remaining options
|
69 |
SlimStatAdmin._chart_options.colors = SlimStatAdminParams.chart_colors,
|
70 |
+
|
71 |
SlimStatAdmin._chart_options.xaxis = {
|
72 |
ticks: (SlimStatAdmin.ticks[0][1].indexOf('/') > 0 && SlimStatAdmin.ticks.length > 16) ? [] : SlimStatAdmin.ticks,
|
73 |
tickDecimals: 0,
|
199 |
else{
|
200 |
report_id = 'slim_p7_02';
|
201 |
data = {action: 'slimstat_load_report', report_id: report_id, security: jQuery('#meta-box-order-nonce').val(), page: SlimStatAdmin.get_query_string_value( 'page' ) };
|
202 |
+
jQuery('#'+report_id+' .inside').html('<p class="loading"><i class="slimstat-font-spin4 animate-spin"></i></p>');
|
203 |
SlimStatAdmin.refresh_report(report_id, data);
|
204 |
|
205 |
window.clearTimeout(refresh_handle);
|
216 |
data[filters_input[i]['name']] = filters_input[i]['value'];
|
217 |
}
|
218 |
|
219 |
+
jQuery('#'+report_id+' .inside').html('<p class="loading"><i class="slimstat-font-spin4 animate-spin"></i></p>');
|
220 |
|
221 |
jQuery.post(ajaxurl, data, function(response){
|
222 |
if (report_id.indexOf('_01') > 0){
|
admin/view/wp-slimstat-db.php
CHANGED
@@ -630,7 +630,8 @@ class wp_slimstat_db {
|
|
630 |
'SUM(counthits) AS counthits' ) );
|
631 |
}
|
632 |
|
633 |
-
public static function get_data_for_chart( $_data1 = '', $_data2 = '', $_where = '' ) {
|
|
|
634 |
$previous = array( 'end' => self::$filters_normalized[ 'utime' ][ 'start' ] - 1 );
|
635 |
$label_date_format = '';
|
636 |
$output = array();
|
@@ -671,22 +672,26 @@ class wp_slimstat_db {
|
|
671 |
break;
|
672 |
}
|
673 |
|
|
|
|
|
|
|
|
|
674 |
// Custom intervals don't have a comparison chart ('previous' range)
|
675 |
if ( empty( self::$filters_normalized[ 'date' ][ 'interval' ] ) ) {
|
676 |
-
$
|
677 |
$previous_time_range = ' AND (dt BETWEEN '.$previous[ 'start' ].' AND '.$previous[ 'end' ].' OR dt BETWEEN '.self::$filters_normalized[ 'utime' ][ 'start' ].' AND '.self::$filters_normalized[ 'utime' ][ 'end' ].')';
|
678 |
}
|
679 |
else {
|
680 |
-
$
|
681 |
$previous_time_range = '';
|
682 |
}
|
683 |
|
684 |
// Build the SQL query
|
685 |
$group_by_string = "GROUP BY {$group_by[0]}(CONVERT_TZ(FROM_UNIXTIME(dt), @@session.time_zone, '+00:00')), {$group_by[1]}(CONVERT_TZ(FROM_UNIXTIME(dt), @@session.time_zone, '+00:00'))";
|
686 |
$sql = "
|
687 |
-
SELECT dt, $
|
688 |
FROM {$GLOBALS['wpdb']->prefix}slim_stats
|
689 |
-
WHERE $
|
690 |
$group_by_string";
|
691 |
|
692 |
// Get the data
|
630 |
'SUM(counthits) AS counthits' ) );
|
631 |
}
|
632 |
|
633 |
+
// public static function get_data_for_chart( $_data1 = '', $_data2 = '', $_where = '' ) {
|
634 |
+
public static function get_data_for_chart( $_args = array() ) {
|
635 |
$previous = array( 'end' => self::$filters_normalized[ 'utime' ][ 'start' ] - 1 );
|
636 |
$label_date_format = '';
|
637 |
$output = array();
|
672 |
break;
|
673 |
}
|
674 |
|
675 |
+
if ( empty( $_args[ 'where' ] ) ) {
|
676 |
+
$_args[ 'where' ] = '';
|
677 |
+
}
|
678 |
+
|
679 |
// Custom intervals don't have a comparison chart ('previous' range)
|
680 |
if ( empty( self::$filters_normalized[ 'date' ][ 'interval' ] ) ) {
|
681 |
+
$_args[ 'where' ] = self::get_combined_where( $_args[ 'where' ], '*', false );
|
682 |
$previous_time_range = ' AND (dt BETWEEN '.$previous[ 'start' ].' AND '.$previous[ 'end' ].' OR dt BETWEEN '.self::$filters_normalized[ 'utime' ][ 'start' ].' AND '.self::$filters_normalized[ 'utime' ][ 'end' ].')';
|
683 |
}
|
684 |
else {
|
685 |
+
$_args[ 'where' ] = self::get_combined_where( $_args[ 'where' ] );
|
686 |
$previous_time_range = '';
|
687 |
}
|
688 |
|
689 |
// Build the SQL query
|
690 |
$group_by_string = "GROUP BY {$group_by[0]}(CONVERT_TZ(FROM_UNIXTIME(dt), @@session.time_zone, '+00:00')), {$group_by[1]}(CONVERT_TZ(FROM_UNIXTIME(dt), @@session.time_zone, '+00:00'))";
|
691 |
$sql = "
|
692 |
+
SELECT dt, {$_args[ 'data1' ]} first_metric, {$_args[ 'data2' ]} second_metric
|
693 |
FROM {$GLOBALS['wpdb']->prefix}slim_stats
|
694 |
+
WHERE {$_args[ 'where' ]} $previous_time_range
|
695 |
$group_by_string";
|
696 |
|
697 |
// Get the data
|
admin/view/wp-slimstat-reports.php
CHANGED
@@ -100,7 +100,15 @@ class wp_slimstat_reports {
|
|
100 |
'title' => __( 'Pageviews', 'wp-slimstat' ),
|
101 |
'callback' => array( __CLASS__, 'show_chart' ),
|
102 |
'callback_args' => array(
|
103 |
-
'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
104 |
),
|
105 |
'classes' => array( 'wide', 'chart' ),
|
106 |
'screens' => array( 'slimview2', 'dashboard' ),
|
@@ -163,7 +171,7 @@ class wp_slimstat_reports {
|
|
163 |
),
|
164 |
'classes' => array( 'normal' ),
|
165 |
'screens' => array( 'slimview2', 'dashboard' ),
|
166 |
-
'tooltip' => __( 'Here a "page" is not just a WordPress page type, but any webpage on your site, including posts, products, categories, and so on.', 'wp-slimstat' )
|
167 |
),
|
168 |
'slim_p1_10' => array(
|
169 |
'title' => __('Top Traffic Sources', 'wp-slimstat'),
|
@@ -245,12 +253,39 @@ class wp_slimstat_reports {
|
|
245 |
'screens' => array( 'slimview2', 'dashboard' ),
|
246 |
'tooltip' => __( 'When visitors leave a comment on your blog, WordPress assigns them a cookie. Slimstat leverages this information to identify returning visitors. Please note that visitors also include registered users.', 'wp-slimstat' )
|
247 |
),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
248 |
|
249 |
'slim_p2_01' => array(
|
250 |
'title' => __( 'Human Visits', 'wp-slimstat' ),
|
251 |
'callback' => array( __CLASS__, 'show_chart' ),
|
252 |
'callback_args' => array(
|
253 |
-
'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
254 |
),
|
255 |
'classes' => array( 'wide', 'chart' ),
|
256 |
'screens' => array( 'slimview3' ),
|
@@ -458,12 +493,39 @@ class wp_slimstat_reports {
|
|
458 |
'classes' => array( 'normal', 'hidden' ),
|
459 |
'screens' => array( 'slimview3', 'dashboard' )
|
460 |
),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
461 |
|
462 |
'slim_p3_01' => array(
|
463 |
'title' => __( 'Traffic Sources', 'wp-slimstat' ),
|
464 |
'callback' => array( __CLASS__, 'show_chart' ),
|
465 |
'callback_args' => array(
|
466 |
-
'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
467 |
),
|
468 |
'classes' => array( 'wide', 'chart' ),
|
469 |
'screens' => array( 'slimview5' ),
|
@@ -777,6 +839,24 @@ class wp_slimstat_reports {
|
|
777 |
'classes' => array( 'normal', 'hidden' ),
|
778 |
'screens' => array( 'slimview4' )
|
779 |
),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
780 |
|
781 |
'slim_p6_01' => array(
|
782 |
'title' => __( 'World Map', 'wp-slimstat' ),
|
@@ -792,18 +872,19 @@ class wp_slimstat_reports {
|
|
792 |
|
793 |
// Define what reports have been deprecated over time, to remove them from the user's settings
|
794 |
$deprecated_reports = array(
|
795 |
-
'slim_p1_05',
|
796 |
-
'slim_p1_18',
|
797 |
-
'slim_p2_10',
|
798 |
-
'slim_p3_03',
|
799 |
-
'slim_p3_04',
|
800 |
-
'slim_p3_05',
|
801 |
-
'slim_p3_08',
|
802 |
-
'slim_p3_09',
|
803 |
-
'slim_p3_10',
|
804 |
-
'slim_p4_08',
|
805 |
-
'slim_p4_14',
|
806 |
-
'
|
|
|
807 |
);
|
808 |
|
809 |
// Retrieve this user's list of active reports,
|
@@ -1127,39 +1208,37 @@ class wp_slimstat_reports {
|
|
1127 |
}
|
1128 |
|
1129 |
public static function show_chart( $_args = array() ){
|
1130 |
-
|
1131 |
-
|
1132 |
-
switch ( $_args[ 'type' ] ) {
|
1133 |
-
|
1134 |
-
|
1135 |
-
|
1136 |
-
|
1137 |
-
|
1138 |
-
|
1139 |
-
|
1140 |
-
|
1141 |
-
|
1142 |
-
|
1143 |
-
|
1144 |
-
|
1145 |
-
|
1146 |
-
|
1147 |
-
|
1148 |
-
|
1149 |
-
|
1150 |
-
|
1151 |
-
|
1152 |
-
}
|
1153 |
-
|
1154 |
-
echo wp_slimstat_db::$debug_message;
|
1155 |
?>
|
1156 |
<div class="chart-placeholder"></div><div class="chart-legend"></div>
|
1157 |
<script type="text/javascript">
|
1158 |
-
SlimStatAdmin.chart_data[ '<?php echo $_args[ '
|
1159 |
|
1160 |
<?php if ( !empty( $chart_data[ 'previous' ][ 'label' ] ) ) : ?>
|
1161 |
-
SlimStatAdmin.chart_data[ '<?php echo $_args[ '
|
1162 |
-
label: '<?php echo $chart_labels[ 0 ] . ' ' . $chart_data[ 'previous' ][ 'label' ] ?>',
|
1163 |
data: [<?php
|
1164 |
$tmp_serialize = array();
|
1165 |
$j = 0;
|
@@ -1176,8 +1255,8 @@ class wp_slimstat_reports {
|
|
1176 |
}
|
1177 |
}
|
1178 |
});
|
1179 |
-
SlimStatAdmin.chart_data[ '<?php echo $_args[ '
|
1180 |
-
label: '<?php echo $chart_labels[ 1 ] . ' ' . $chart_data[ 'previous' ][ 'label' ] ?>',
|
1181 |
data: [<?php
|
1182 |
$tmp_serialize = array();
|
1183 |
$j = 0;
|
@@ -1196,8 +1275,8 @@ class wp_slimstat_reports {
|
|
1196 |
});
|
1197 |
<?php endif ?>
|
1198 |
|
1199 |
-
SlimStatAdmin.chart_data[ '<?php echo $_args[ '
|
1200 |
-
label: '<?php echo $chart_labels[ 0 ] . ' ' . $chart_data[ 'current' ][ 'label' ] ?>',
|
1201 |
data: [<?php
|
1202 |
$tmp_serialize = array();
|
1203 |
$j = 0;
|
@@ -1214,8 +1293,8 @@ class wp_slimstat_reports {
|
|
1214 |
}
|
1215 |
}
|
1216 |
});
|
1217 |
-
SlimStatAdmin.chart_data[ '<?php echo $_args[ '
|
1218 |
-
label: '<?php echo $chart_labels[ 1 ] . ' ' . $chart_data[ 'current' ][ 'label' ] ?>',
|
1219 |
data: [<?php
|
1220 |
$tmp_serialize = array();
|
1221 |
$j = 0;
|
100 |
'title' => __( 'Pageviews', 'wp-slimstat' ),
|
101 |
'callback' => array( __CLASS__, 'show_chart' ),
|
102 |
'callback_args' => array(
|
103 |
+
'id' => 'slim_p1_01',
|
104 |
+
'chart_data' => array(
|
105 |
+
'data1' => 'COUNT( ip )',
|
106 |
+
'data2' => 'COUNT( DISTINCT ip )'
|
107 |
+
),
|
108 |
+
'chart_labels' => array(
|
109 |
+
__( 'Pageviews', 'wp-slimstat' ),
|
110 |
+
__( 'Unique IPs', 'wp-slimstat' )
|
111 |
+
)
|
112 |
),
|
113 |
'classes' => array( 'wide', 'chart' ),
|
114 |
'screens' => array( 'slimview2', 'dashboard' ),
|
171 |
),
|
172 |
'classes' => array( 'normal' ),
|
173 |
'screens' => array( 'slimview2', 'dashboard' ),
|
174 |
+
'tooltip' => __( 'Here a "page" is not just a WordPress page type, but any webpage on your site, including posts, products, categories, and so on. You can set the corresponding filter where Resource Content Type equals cpt:you_cpt_slug_here to get top web pages for a specific custom post type you have.', 'wp-slimstat' )
|
175 |
),
|
176 |
'slim_p1_10' => array(
|
177 |
'title' => __('Top Traffic Sources', 'wp-slimstat'),
|
253 |
'screens' => array( 'slimview2', 'dashboard' ),
|
254 |
'tooltip' => __( 'When visitors leave a comment on your blog, WordPress assigns them a cookie. Slimstat leverages this information to identify returning visitors. Please note that visitors also include registered users.', 'wp-slimstat' )
|
255 |
),
|
256 |
+
'slim_p1_19_01' => array( // Chart Reports need to always have a _01 suffix to tell our custom "refresh" code to avoid fading the chart, which apparently doesn't work
|
257 |
+
'title' => __( 'Search Terms', 'wp-slimstat' ),
|
258 |
+
'callback' => array( __CLASS__, 'show_chart' ),
|
259 |
+
'callback_args' => array(
|
260 |
+
'id' => 'slim_p1_19_01',
|
261 |
+
'chart_data' => array(
|
262 |
+
'data1' => 'COUNT( searchterms )',
|
263 |
+
'data2' => 'COUNT( DISTINCT searchterms )'
|
264 |
+
),
|
265 |
+
'chart_labels' => array(
|
266 |
+
__( 'Search Terms', 'wp-slimstat' ),
|
267 |
+
__( 'Unique Terms', 'wp-slimstat' )
|
268 |
+
)
|
269 |
+
),
|
270 |
+
'classes' => array( 'wide', 'chart' ),
|
271 |
+
'screens' => array( 'slimview2' ),
|
272 |
+
'tooltip' => $chart_tooltip
|
273 |
+
),
|
274 |
|
275 |
'slim_p2_01' => array(
|
276 |
'title' => __( 'Human Visits', 'wp-slimstat' ),
|
277 |
'callback' => array( __CLASS__, 'show_chart' ),
|
278 |
'callback_args' => array(
|
279 |
+
'id' => 'slim_p2_01',
|
280 |
+
'chart_data' => array(
|
281 |
+
'data1' => 'COUNT( DISTINCT visit_id )',
|
282 |
+
'data2' => 'COUNT( DISTINCT ip )'
|
283 |
+
),
|
284 |
+
'chart_labels' => array(
|
285 |
+
__( 'Visits', 'wp-slimstat' ),
|
286 |
+
__( 'Unique IPs', 'wp-slimstat' )
|
287 |
+
),
|
288 |
+
'where' => '(visit_id > 0 AND browser_type <> 1)'
|
289 |
),
|
290 |
'classes' => array( 'wide', 'chart' ),
|
291 |
'screens' => array( 'slimview3' ),
|
493 |
'classes' => array( 'normal', 'hidden' ),
|
494 |
'screens' => array( 'slimview3', 'dashboard' )
|
495 |
),
|
496 |
+
'slim_p2_22_01' => array( // Chart Reports need to always have a _01 suffix to tell our custom "refresh" code to avoid fading the chart, which apparently doesn't work
|
497 |
+
'title' => __( 'Users', 'wp-slimstat' ),
|
498 |
+
'callback' => array( __CLASS__, 'show_chart' ),
|
499 |
+
'callback_args' => array(
|
500 |
+
'id' => 'slim_p2_22_01',
|
501 |
+
'chart_data' => array(
|
502 |
+
'data1' => 'COUNT( username )',
|
503 |
+
'data2' => 'COUNT( DISTINCT username )'
|
504 |
+
),
|
505 |
+
'chart_labels' => array(
|
506 |
+
__( 'Users', 'wp-slimstat' ),
|
507 |
+
__( 'Unique Users', 'wp-slimstat' )
|
508 |
+
)
|
509 |
+
),
|
510 |
+
'classes' => array( 'wide', 'chart' ),
|
511 |
+
'screens' => array( 'slimview3' ),
|
512 |
+
'tooltip' => $chart_tooltip
|
513 |
+
),
|
514 |
|
515 |
'slim_p3_01' => array(
|
516 |
'title' => __( 'Traffic Sources', 'wp-slimstat' ),
|
517 |
'callback' => array( __CLASS__, 'show_chart' ),
|
518 |
'callback_args' => array(
|
519 |
+
'id' => 'slim_p3_01',
|
520 |
+
'chart_data' => array(
|
521 |
+
'data1' => 'COUNT( DISTINCT referer )',
|
522 |
+
'data2' => 'COUNT( DISTINCT ip )'
|
523 |
+
),
|
524 |
+
'chart_labels' => array(
|
525 |
+
__( 'Domains', 'wp-slimstat' ),
|
526 |
+
__( 'Unique IPs', 'wp-slimstat' )
|
527 |
+
),
|
528 |
+
'where' => '(referer IS NOT NULL AND referer NOT LIKE "%' . home_url() . '%")'
|
529 |
),
|
530 |
'classes' => array( 'wide', 'chart' ),
|
531 |
'screens' => array( 'slimview5' ),
|
839 |
'classes' => array( 'normal', 'hidden' ),
|
840 |
'screens' => array( 'slimview4' )
|
841 |
),
|
842 |
+
'slim_p4_26_01' => array( // Chart Reports need to always have a _01 suffix to tell our custom "refresh" code to avoid fading the chart, which apparently doesn't work
|
843 |
+
'title' => __( 'Outbound Links', 'wp-slimstat' ),
|
844 |
+
'callback' => array( __CLASS__, 'show_chart' ),
|
845 |
+
'callback_args' => array(
|
846 |
+
'id' => 'slim_p4_26_01',
|
847 |
+
'chart_data' => array(
|
848 |
+
'data1' => 'COUNT( outbound_resource )',
|
849 |
+
'data2' => 'COUNT( DISTINCT outbound_resource )'
|
850 |
+
),
|
851 |
+
'chart_labels' => array(
|
852 |
+
__( 'Outbound Links', 'wp-slimstat' ),
|
853 |
+
__( 'Unique Outbound', 'wp-slimstat' )
|
854 |
+
)
|
855 |
+
),
|
856 |
+
'classes' => array( 'wide', 'chart' ),
|
857 |
+
'screens' => array( 'slimview4' ),
|
858 |
+
'tooltip' => $chart_tooltip
|
859 |
+
),
|
860 |
|
861 |
'slim_p6_01' => array(
|
862 |
'title' => __( 'World Map', 'wp-slimstat' ),
|
872 |
|
873 |
// Define what reports have been deprecated over time, to remove them from the user's settings
|
874 |
$deprecated_reports = array(
|
875 |
+
'slim_p1_05' => 1,
|
876 |
+
'slim_p1_18' => 1,
|
877 |
+
'slim_p2_10' => 1,
|
878 |
+
'slim_p3_03' => 1,
|
879 |
+
'slim_p3_04' => 1,
|
880 |
+
'slim_p3_05' => 1,
|
881 |
+
'slim_p3_08' => 1,
|
882 |
+
'slim_p3_09' => 1,
|
883 |
+
'slim_p3_10' => 1,
|
884 |
+
'slim_p4_08' => 1,
|
885 |
+
'slim_p4_14' => 1,
|
886 |
+
'slim_p4_16' => 1,
|
887 |
+
'slim_p4_17' => 1
|
888 |
);
|
889 |
|
890 |
// Retrieve this user's list of active reports,
|
1208 |
}
|
1209 |
|
1210 |
public static function show_chart( $_args = array() ){
|
1211 |
+
$chart_data = wp_slimstat_db::get_data_for_chart( $_args[ 'chart_data' ] );
|
1212 |
+
|
1213 |
+
// switch ( $_args[ 'type' ] ) {
|
1214 |
+
// case 'slim_p1_01':
|
1215 |
+
// $chart_data = wp_slimstat_db::get_data_for_chart( 'COUNT(ip)', 'COUNT(DISTINCT(ip))' );
|
1216 |
+
// $chart_labels = array( __( 'Pageviews', 'wp-slimstat' ), __( 'Unique IPs', 'wp-slimstat' ) );
|
1217 |
+
// break;
|
1218 |
+
|
1219 |
+
// case 'slim_p2_01':
|
1220 |
+
// $chart_data = wp_slimstat_db::get_data_for_chart( 'COUNT(DISTINCT visit_id)', 'COUNT(DISTINCT ip)', '(visit_id > 0 AND browser_type <> 1)' );
|
1221 |
+
// $chart_labels = array( __( 'Visits', 'wp-slimstat' ), __( 'Unique IPs', 'wp-slimstat' ) );
|
1222 |
+
// break;
|
1223 |
+
|
1224 |
+
// case 'slim_p3_01':
|
1225 |
+
// $chart_data = wp_slimstat_db::get_data_for_chart( 'COUNT(DISTINCT(referer))', 'COUNT(DISTINCT(ip))', '(referer IS NOT NULL AND referer NOT LIKE "%' . home_url() . '%")' );
|
1226 |
+
// $chart_labels = array( __( 'Domains', 'wp-slimstat' ), __( 'Unique IPs', 'wp-slimstat' ) );
|
1227 |
+
// break;
|
1228 |
+
|
1229 |
+
// default:
|
1230 |
+
// $chart_data = array();
|
1231 |
+
// $chart_labels = array( '', '' );
|
1232 |
+
// break;
|
1233 |
+
// }
|
|
|
|
|
1234 |
?>
|
1235 |
<div class="chart-placeholder"></div><div class="chart-legend"></div>
|
1236 |
<script type="text/javascript">
|
1237 |
+
SlimStatAdmin.chart_data[ '<?php echo $_args[ 'id' ] ?>' ] = [];
|
1238 |
|
1239 |
<?php if ( !empty( $chart_data[ 'previous' ][ 'label' ] ) ) : ?>
|
1240 |
+
SlimStatAdmin.chart_data[ '<?php echo $_args[ 'id' ] ?>' ].push({
|
1241 |
+
label: '<?php echo $_args[ 'chart_labels' ][ 0 ] . ' ' . $chart_data[ 'previous' ][ 'label' ] ?>',
|
1242 |
data: [<?php
|
1243 |
$tmp_serialize = array();
|
1244 |
$j = 0;
|
1255 |
}
|
1256 |
}
|
1257 |
});
|
1258 |
+
SlimStatAdmin.chart_data[ '<?php echo $_args[ 'id' ] ?>' ].push({
|
1259 |
+
label: '<?php echo $_args[ 'chart_labels' ][ 1 ] . ' ' . $chart_data[ 'previous' ][ 'label' ] ?>',
|
1260 |
data: [<?php
|
1261 |
$tmp_serialize = array();
|
1262 |
$j = 0;
|
1275 |
});
|
1276 |
<?php endif ?>
|
1277 |
|
1278 |
+
SlimStatAdmin.chart_data[ '<?php echo $_args[ 'id' ] ?>' ].push({
|
1279 |
+
label: '<?php echo $_args[ 'chart_labels' ][ 0 ] . ' ' . $chart_data[ 'current' ][ 'label' ] ?>',
|
1280 |
data: [<?php
|
1281 |
$tmp_serialize = array();
|
1282 |
$j = 0;
|
1293 |
}
|
1294 |
}
|
1295 |
});
|
1296 |
+
SlimStatAdmin.chart_data[ '<?php echo $_args[ 'id' ] ?>' ].push({
|
1297 |
+
label: '<?php echo $_args[ 'chart_labels' ][ 1 ] . ' ' . $chart_data[ 'current' ][ 'label' ] ?>',
|
1298 |
data: [<?php
|
1299 |
$tmp_serialize = array();
|
1300 |
$j = 0;
|
admin/wp-slimstat-admin.php
CHANGED
@@ -311,211 +311,6 @@ class wp_slimstat_admin{
|
|
311 |
public static function update_tables_and_options(){
|
312 |
$my_wpdb = apply_filters('slimstat_custom_wpdb', $GLOBALS['wpdb']);
|
313 |
|
314 |
-
// --- Updates for version 3.8.4 ---
|
315 |
-
if (version_compare(wp_slimstat::$options['version'], '3.8.4', '<')){
|
316 |
-
$my_wpdb->query("CREATE TABLE {$GLOBALS['wpdb']->prefix}slim_stats_archive LIKE {$GLOBALS['wpdb']->prefix}slim_stats");
|
317 |
-
}
|
318 |
-
// --- END: Updates for version 3.8.4 ---
|
319 |
-
|
320 |
-
// --- Updates for version 3.9.6 ---
|
321 |
-
if (version_compare(wp_slimstat::$options['version'], '3.9.6', '<')){
|
322 |
-
// Consolidate some settings
|
323 |
-
$classes = wp_slimstat::string_to_array(wp_slimstat::$options['ignore_outbound_classes']);
|
324 |
-
$rel = wp_slimstat::string_to_array(wp_slimstat::$options['ignore_outbound_rel']);
|
325 |
-
$href = wp_slimstat::string_to_array(wp_slimstat::$options['ignore_outbound_href']);
|
326 |
-
wp_slimstat::$options['ignore_outbound_classes_rel_href'] = implode(',', array_merge($classes, $rel, $href));
|
327 |
-
|
328 |
-
$classes = wp_slimstat::string_to_array(wp_slimstat::$options['do_not_track_outbound_classes']);
|
329 |
-
$rel = wp_slimstat::string_to_array(wp_slimstat::$options['do_not_track_outbound_rel']);
|
330 |
-
$href = wp_slimstat::string_to_array(wp_slimstat::$options['do_not_track_outbound_href']);
|
331 |
-
wp_slimstat::$options['do_not_track_outbound_classes_rel_href'] = implode(',', array_merge($classes, $rel, $href));
|
332 |
-
|
333 |
-
// More secure secret key
|
334 |
-
wp_slimstat::$options['secret'] = wp_hash(uniqid(time(), true));
|
335 |
-
}
|
336 |
-
// --- END: Updates for version 3.9.6 ---
|
337 |
-
|
338 |
-
// --- Updates for version 3.9.8.2 ---
|
339 |
-
if (version_compare(wp_slimstat::$options['version'], '3.9.8.2', '<')){
|
340 |
-
// The GeoLite DB is already installed, let's unzip it to improve the tracker's performance
|
341 |
-
if (file_exists(wp_slimstat::$maxmind_path.'.gz')){
|
342 |
-
@unlink(wp_slimstat::$maxmind_path.'.gz');
|
343 |
-
wp_slimstat::download_maxmind_database();
|
344 |
-
}
|
345 |
-
}
|
346 |
-
// --- END: Updates for version 3.9.8.2 ---
|
347 |
-
|
348 |
-
// --- Updates for version 4.0 ---
|
349 |
-
if (version_compare(wp_slimstat::$options['version'], '4.0', '<')){
|
350 |
-
$GLOBALS['wpdb']->query("DELETE FROM {$GLOBALS['wpdb']->prefix}usermeta WHERE meta_key LIKE 'meta-box-order_slimstat%'");
|
351 |
-
|
352 |
-
$have_innodb = $GLOBALS['wpdb']->get_results("SHOW VARIABLES LIKE 'have_innodb'", ARRAY_A);
|
353 |
-
$use_innodb = (!empty($have_innodb[0]) && $have_innodb[0]['Value'] == 'YES')?'ENGINE=InnoDB':'';
|
354 |
-
|
355 |
-
// Create the new table
|
356 |
-
self::_create_table ("
|
357 |
-
CREATE TABLE IF NOT EXISTS {$GLOBALS['wpdb']->prefix}slim_stats_4 (
|
358 |
-
id INT UNSIGNED NOT NULL auto_increment,
|
359 |
-
ip INT UNSIGNED DEFAULT 0,
|
360 |
-
other_ip INT UNSIGNED DEFAULT 0,
|
361 |
-
username VARCHAR(255) DEFAULT NULL,
|
362 |
-
country VARCHAR(16) DEFAULT NULL,
|
363 |
-
referer VARCHAR(2048) DEFAULT NULL,
|
364 |
-
resource VARCHAR(2048) DEFAULT NULL,
|
365 |
-
searchterms VARCHAR(2048) DEFAULT NULL,
|
366 |
-
plugins VARCHAR(255) DEFAULT NULL,
|
367 |
-
notes VARCHAR(2048) DEFAULT NULL,
|
368 |
-
visit_id INT UNSIGNED NOT NULL DEFAULT 0,
|
369 |
-
server_latency INT(10) UNSIGNED DEFAULT 0,
|
370 |
-
page_performance INT(10) UNSIGNED DEFAULT 0,
|
371 |
-
|
372 |
-
browser VARCHAR(40) DEFAULT NULL,
|
373 |
-
browser_version VARCHAR(15) DEFAULT NULL,
|
374 |
-
browser_type TINYINT UNSIGNED DEFAULT 0,
|
375 |
-
platform VARCHAR(15) DEFAULT NULL,
|
376 |
-
language VARCHAR(5) DEFAULT NULL,
|
377 |
-
user_agent VARCHAR(2048) DEFAULT NULL,
|
378 |
-
|
379 |
-
resolution VARCHAR(12) DEFAULT NULL,
|
380 |
-
screen_width SMALLINT UNSIGNED DEFAULT 0,
|
381 |
-
screen_height SMALLINT UNSIGNED DEFAULT 0,
|
382 |
-
|
383 |
-
content_type VARCHAR(64) DEFAULT NULL,
|
384 |
-
category VARCHAR(256) DEFAULT NULL,
|
385 |
-
author VARCHAR(64) DEFAULT NULL,
|
386 |
-
content_id BIGINT(20) UNSIGNED DEFAULT 0,
|
387 |
-
|
388 |
-
outbound_resource VARCHAR(2048) DEFAULT NULL,
|
389 |
-
|
390 |
-
dt INT(10) UNSIGNED DEFAULT 0,
|
391 |
-
|
392 |
-
CONSTRAINT PRIMARY KEY (id),
|
393 |
-
INDEX idx_{$GLOBALS['wpdb']->prefix}slim_stats_dt (dt)
|
394 |
-
) COLLATE utf8_general_ci $use_innodb", $GLOBALS['wpdb']->prefix.'slim_stats_4', $my_wpdb );
|
395 |
-
|
396 |
-
// Create the archive table
|
397 |
-
$my_wpdb->query( "CREATE TABLE IF NOT EXISTS {$GLOBALS['wpdb']->prefix}slim_stats_archive_4 LIKE {$GLOBALS['wpdb']->prefix}slim_stats_4" );
|
398 |
-
|
399 |
-
// Rename old and new tables
|
400 |
-
$my_wpdb->query( "RENAME TABLE {$GLOBALS['wpdb']->prefix}slim_stats TO {$GLOBALS['wpdb']->prefix}slim_stats_3" );
|
401 |
-
$my_wpdb->query( "RENAME TABLE {$GLOBALS['wpdb']->prefix}slim_stats_4 TO {$GLOBALS['wpdb']->prefix}slim_stats" );
|
402 |
-
$my_wpdb->query( "RENAME TABLE {$GLOBALS['wpdb']->prefix}slim_stats_archive TO {$GLOBALS['wpdb']->prefix}slim_stats_archive_3" );
|
403 |
-
$my_wpdb->query( "RENAME TABLE {$GLOBALS['wpdb']->prefix}slim_stats_archive_4 TO {$GLOBALS['wpdb']->prefix}slim_stats_archive" );
|
404 |
-
|
405 |
-
// Create the new events table
|
406 |
-
$my_wpdb->query( "
|
407 |
-
CREATE TABLE IF NOT EXISTS {$GLOBALS['wpdb']->prefix}slim_events (
|
408 |
-
event_id INT(10) NOT NULL AUTO_INCREMENT,
|
409 |
-
type TINYINT UNSIGNED DEFAULT 0,
|
410 |
-
event_description VARCHAR(64) DEFAULT NULL,
|
411 |
-
notes VARCHAR(256) DEFAULT NULL,
|
412 |
-
position VARCHAR(32) DEFAULT NULL,
|
413 |
-
id INT UNSIGNED NOT NULL DEFAULT 0,
|
414 |
-
dt INT(10) UNSIGNED DEFAULT 0,
|
415 |
-
|
416 |
-
CONSTRAINT PRIMARY KEY (event_id),
|
417 |
-
INDEX idx_{$GLOBALS['wpdb']->prefix}slim_events (dt),
|
418 |
-
CONSTRAINT fk_{$GLOBALS['wpdb']->prefix}id FOREIGN KEY (id) REFERENCES {$GLOBALS['wpdb']->prefix}slim_stats(id) ON UPDATE CASCADE ON DELETE CASCADE
|
419 |
-
) COLLATE utf8_general_ci $use_innodb" );
|
420 |
-
|
421 |
-
// Copy the data if less than 750k records
|
422 |
-
$count_records = $my_wpdb->get_var("SELECT COUNT(*) FROM {$GLOBALS['wpdb']->prefix}slim_stats");
|
423 |
-
if ($count_records <= 750000){
|
424 |
-
$my_wpdb->query( "
|
425 |
-
INSERT INTO {$GLOBALS['wpdb']->prefix}slim_stats (
|
426 |
-
id,
|
427 |
-
ip,
|
428 |
-
other_ip,
|
429 |
-
username,
|
430 |
-
country,
|
431 |
-
referer,
|
432 |
-
resource,
|
433 |
-
searchterms,
|
434 |
-
plugins,
|
435 |
-
notes,
|
436 |
-
visit_id,
|
437 |
-
server_latency,
|
438 |
-
page_performance,
|
439 |
-
|
440 |
-
browser,
|
441 |
-
browser_version,
|
442 |
-
browser_type,
|
443 |
-
platform,
|
444 |
-
language,
|
445 |
-
user_agent,
|
446 |
-
|
447 |
-
screen_width,
|
448 |
-
screen_height,
|
449 |
-
|
450 |
-
content_type,
|
451 |
-
category,
|
452 |
-
author,
|
453 |
-
content_id,
|
454 |
-
|
455 |
-
outbound_resource,
|
456 |
-
|
457 |
-
dt
|
458 |
-
)
|
459 |
-
SELECT
|
460 |
-
t1.id,
|
461 |
-
t1.ip,
|
462 |
-
t1.other_ip,
|
463 |
-
NULLIF(t1.user, ''),
|
464 |
-
NULLIF(t1.country, ''),
|
465 |
-
NULLIF(t1.referer, ''),
|
466 |
-
NULLIF(t1.resource, ''),
|
467 |
-
NULLIF(t1.searchterms, ''),
|
468 |
-
NULLIF(t1.plugins, ''),
|
469 |
-
NULLIF(t1.notes, ''),
|
470 |
-
t1.visit_id,
|
471 |
-
t1.server_latency,
|
472 |
-
t1.page_performance,
|
473 |
-
|
474 |
-
NULLIF(tb.browser, ''),
|
475 |
-
NULLIF(tb.version, ''),
|
476 |
-
tb.type,
|
477 |
-
NULLIF(tb.platform, ''),
|
478 |
-
NULLIF(t1.language, ''),
|
479 |
-
NULLIF(tb.user_agent, ''),
|
480 |
-
|
481 |
-
9812,
|
482 |
-
9812,
|
483 |
-
|
484 |
-
NULLIF(tci.content_type, ''),
|
485 |
-
NULLIF(tci.category, ''),
|
486 |
-
NULLIF(tci.author, ''),
|
487 |
-
tci.content_id,
|
488 |
-
|
489 |
-
NULL,
|
490 |
-
|
491 |
-
t1.dt
|
492 |
-
|
493 |
-
FROM {$GLOBALS['wpdb']->prefix}slim_stats_3 AS t1
|
494 |
-
INNER JOIN {$GLOBALS['wpdb']->base_prefix}slim_browsers AS tb ON t1.browser_id = tb.browser_id
|
495 |
-
INNER JOIN {$GLOBALS['wpdb']->base_prefix}slim_content_info AS tci ON t1.content_info_id = tci.content_info_id" );
|
496 |
-
|
497 |
-
// Copy the events
|
498 |
-
$my_wpdb->query( "
|
499 |
-
INSERT INTO {$GLOBALS['wpdb']->prefix}slim_events (
|
500 |
-
type,
|
501 |
-
event_description,
|
502 |
-
notes,
|
503 |
-
position,
|
504 |
-
id,
|
505 |
-
dt
|
506 |
-
)
|
507 |
-
SELECT
|
508 |
-
tob.type,
|
509 |
-
SUBSTRING(tob.notes, LOCATE('Event:', tob.notes)+6, LOCATE(',', tob.notes, LOCATE('Event:', tob.notes)+6) - LOCATE('Event:', tob.notes)-6),
|
510 |
-
SUBSTRING(tob.notes, 1, LOCATE('Event:', tob.notes) - 3),
|
511 |
-
tob.position,
|
512 |
-
tob.id,
|
513 |
-
tob.dt
|
514 |
-
FROM {$GLOBALS['wpdb']->prefix}slim_outbound AS tob" );
|
515 |
-
}
|
516 |
-
}
|
517 |
-
// --- END: Updates for version 4.0 ---
|
518 |
-
|
519 |
// --- Updates for version 4.1.3 ---
|
520 |
if ( version_compare( wp_slimstat::$options[ 'version' ], '4.1.3', '<' ) ) {
|
521 |
// Change column type to add IPv6 support
|
@@ -533,6 +328,7 @@ class wp_slimstat_admin{
|
|
533 |
// Change column type to add IPv6 support
|
534 |
$my_wpdb->query( "ALTER TABLE {$GLOBALS[ 'wpdb' ]->prefix}slim_stats ADD dt_out INT(10) UNSIGNED DEFAULT 0 AFTER outbound_resource" );
|
535 |
}
|
|
|
536 |
|
537 |
// --- Updates for version 4.2 ---
|
538 |
if ( version_compare( wp_slimstat::$options[ 'version' ], '4.2', '<' ) ) {
|
@@ -556,8 +352,16 @@ class wp_slimstat_admin{
|
|
556 |
}
|
557 |
// --- END: Updates for version 4.2 ---
|
558 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
559 |
// Now we can update the version stored in the database
|
560 |
-
|
561 |
|
562 |
return true;
|
563 |
}
|
311 |
public static function update_tables_and_options(){
|
312 |
$my_wpdb = apply_filters('slimstat_custom_wpdb', $GLOBALS['wpdb']);
|
313 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
314 |
// --- Updates for version 4.1.3 ---
|
315 |
if ( version_compare( wp_slimstat::$options[ 'version' ], '4.1.3', '<' ) ) {
|
316 |
// Change column type to add IPv6 support
|
328 |
// Change column type to add IPv6 support
|
329 |
$my_wpdb->query( "ALTER TABLE {$GLOBALS[ 'wpdb' ]->prefix}slim_stats ADD dt_out INT(10) UNSIGNED DEFAULT 0 AFTER outbound_resource" );
|
330 |
}
|
331 |
+
// --- END: Updates for version 4.1.7 ---
|
332 |
|
333 |
// --- Updates for version 4.2 ---
|
334 |
if ( version_compare( wp_slimstat::$options[ 'version' ], '4.2', '<' ) ) {
|
352 |
}
|
353 |
// --- END: Updates for version 4.2 ---
|
354 |
|
355 |
+
// --- Updates for version 4.2.1 ---
|
356 |
+
if ( version_compare( wp_slimstat::$options[ 'version' ], '4.2.1', '<' ) ) {
|
357 |
+
// Remove old unused columns, if still there.
|
358 |
+
$my_wpdb->query( "ALTER TABLE {$GLOBALS['wpdb']->prefix}slim_stats DROP COLUMN ip_temp, DROP COLUMN other_ip_temp, DROP COLUMN ip_num, DROP COLUMN other_ip_num" );
|
359 |
+
$my_wpdb->query( "ALTER TABLE {$GLOBALS['wpdb']->prefix}slim_stats_archive DROP COLUMN ip_temp, DROP COLUMN other_ip_temp, DROP COLUMN ip_num, DROP COLUMN other_ip_num" );
|
360 |
+
}
|
361 |
+
// --- END: Updates for version 4.2.1 ---
|
362 |
+
|
363 |
// Now we can update the version stored in the database
|
364 |
+
wp_slimstat::$options['version'] = wp_slimstat::$version;
|
365 |
|
366 |
return true;
|
367 |
}
|
readme.txt
CHANGED
@@ -5,7 +5,7 @@ Tags: analytics, tracking, reports, analyze, wassup, geolocation, online users,
|
|
5 |
Text Domain: wp-slimstat
|
6 |
Requires at least: 3.8
|
7 |
Tested up to: 4.4
|
8 |
-
Stable tag: 4.2.
|
9 |
|
10 |
== Description ==
|
11 |
[youtube https://www.youtube.com/watch?v=iJCtjxArq4U]
|
@@ -27,9 +27,9 @@ Stable tag: 4.2.0.1
|
|
27 |
* WordPress 3.8+
|
28 |
* PHP 5.3+
|
29 |
* MySQL 5.0.3+
|
30 |
-
* At least
|
31 |
* At least 5 MB of free DB space
|
32 |
-
* At least
|
33 |
* IE9+ or any browser supporting HTML5, to access the reports
|
34 |
|
35 |
= Premium Add-ons =
|
@@ -44,7 +44,9 @@ Visit [our website](http://www.wp-slimstat.com/addons/) for a list of available
|
|
44 |
5. Go to Slimstat > Settings > Maintenance tab > MaxMind IP to Country section and click on "Install GeoLite DB" to detect your visitors' countries based on their IP addresses
|
45 |
6. If your `wp-admin` folder is not publicly accessible, make sure to check the [FAQs](http://wordpress.org/extend/plugins/wp-slimstat/faq/) to see if there's anything else you need to do
|
46 |
|
47 |
-
Please note
|
|
|
|
|
48 |
|
49 |
== Frequently Asked Questions ==
|
50 |
|
@@ -60,6 +62,14 @@ Our knowledge base is available on our [support center](http://docs.wp-slimstat.
|
|
60 |
|
61 |
== Changelog ==
|
62 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
63 |
= 4.2.0.1 =
|
64 |
* [Fix] The Access Log report was not displaying referrers and other critical information.
|
65 |
|
@@ -158,11 +168,6 @@ Our knowledge base is available on our [support center](http://docs.wp-slimstat.
|
|
158 |
* [Fix] Quotes in post titles were being escaped twice (better safe than sorry, right? thank you, Victor).
|
159 |
* [Fix] Bug affecting the Export to Excel add-on.
|
160 |
|
161 |
-
== Special Thanks To ==
|
162 |
-
|
163 |
-
* [Vitaly](http://www.visbiz.org/), who volunteers quite a lot of time for QA, testing, and for his Russian localization.
|
164 |
-
* Davide Tomasello, who provided great feedback and plenty of ideas to take this plugin to the next level.
|
165 |
-
|
166 |
== Supporters ==
|
167 |
Slimstat is an Open Source project, dependent in large parts on donations. [This page](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=BNJR5EZNY3W38)
|
168 |
is for those who want to donate money - be it once, be it regularly, be it a small or a big amount. Everything is set up for an easy donation process.
|
@@ -212,13 +217,7 @@ Thomas Weiss,
|
|
212 |
Wayne Liebman,
|
213 |
Willow Ridge Press
|
214 |
|
215 |
-
==
|
216 |
-
|
217 |
-
[
|
218 |
-
|
219 |
-
[Gimp](http://www.gimp.org/),
|
220 |
-
[Google Chrome](https://www.google.com/intl/en/chrome/browser/),
|
221 |
-
[poEdit](http://www.poedit.net/),
|
222 |
-
[Notepad++](http://notepad-plus-plus.org/),
|
223 |
-
[Tortoise SVN](http://tortoisesvn.net/),
|
224 |
-
[WAMP Server](http://www.wampserver.com/en/)
|
5 |
Text Domain: wp-slimstat
|
6 |
Requires at least: 3.8
|
7 |
Tested up to: 4.4
|
8 |
+
Stable tag: 4.2.1
|
9 |
|
10 |
== Description ==
|
11 |
[youtube https://www.youtube.com/watch?v=iJCtjxArq4U]
|
27 |
* WordPress 3.8+
|
28 |
* PHP 5.3+
|
29 |
* MySQL 5.0.3+
|
30 |
+
* At least 35 MB of free web space
|
31 |
* At least 5 MB of free DB space
|
32 |
+
* At least 30 Mb of free PHP memory for the tracker (peak memory usage)
|
33 |
* IE9+ or any browser supporting HTML5, to access the reports
|
34 |
|
35 |
= Premium Add-ons =
|
44 |
5. Go to Slimstat > Settings > Maintenance tab > MaxMind IP to Country section and click on "Install GeoLite DB" to detect your visitors' countries based on their IP addresses
|
45 |
6. If your `wp-admin` folder is not publicly accessible, make sure to check the [FAQs](http://wordpress.org/extend/plugins/wp-slimstat/faq/) to see if there's anything else you need to do
|
46 |
|
47 |
+
== Please note ==
|
48 |
+
* If you decide to uninstall Slimstat, all the stats will be **PERMANENTLY** deleted from your database. Make sure to setup a database backup (wp_slim_*) to avoid losing your data.
|
49 |
+
* If you are upgrading from a version prior to 4.0, please install version 4.0 first to upgrade the database structure and download the new Geolocation data.
|
50 |
|
51 |
== Frequently Asked Questions ==
|
52 |
|
62 |
|
63 |
== Changelog ==
|
64 |
|
65 |
+
= 4.2.1 =
|
66 |
+
* [Note] If you're upgrading from a version prior to 4.0, please upgrade to version 4.0 first. To simplify our codebase, we removed all the upgrade scripts to support versions prior to 4.0.
|
67 |
+
* [New] Say hi to your new charts: search terms (total and unique per day or even hour), outbound links, users. If you can't see the new charts, don't forget to give the No Panic button a try.
|
68 |
+
* [Update] We are dropping old unused columns from the main table: ip_temp, other_ip_temp, ip_num, other_ip_num. Please make sure you have a backup, in case you need those columns for other custom purposes.
|
69 |
+
* [Fix] Some users were seeing "ghost reports" in their admin screens. A residue from Halloween, we assume.
|
70 |
+
* [Fix] Our "loading" animated icon was not being displayed correctly on refresh.
|
71 |
+
* [Fix] Chart legend was not being displayed as expected.
|
72 |
+
|
73 |
= 4.2.0.1 =
|
74 |
* [Fix] The Access Log report was not displaying referrers and other critical information.
|
75 |
|
168 |
* [Fix] Quotes in post titles were being escaped twice (better safe than sorry, right? thank you, Victor).
|
169 |
* [Fix] Bug affecting the Export to Excel add-on.
|
170 |
|
|
|
|
|
|
|
|
|
|
|
171 |
== Supporters ==
|
172 |
Slimstat is an Open Source project, dependent in large parts on donations. [This page](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=BNJR5EZNY3W38)
|
173 |
is for those who want to donate money - be it once, be it regularly, be it a small or a big amount. Everything is set up for an easy donation process.
|
217 |
Wayne Liebman,
|
218 |
Willow Ridge Press
|
219 |
|
220 |
+
== Special Thanks To ==
|
221 |
+
|
222 |
+
* [Vitaly](http://www.visbiz.org/), who volunteers quite a lot of time for QA, testing, and for his Russian localization.
|
223 |
+
* Davide Tomasello, who provided great feedback and plenty of ideas to take this plugin to the next level.
|
|
|
|
|
|
|
|
|
|
|
|
wp-slimstat.php
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
Plugin Name: WP Slimstat
|
4 |
Plugin URI: http://wordpress.org/plugins/wp-slimstat/
|
5 |
Description: The leading web analytics plugin for WordPress
|
6 |
-
Version: 4.2.
|
7 |
Author: Camu
|
8 |
Author URI: http://www.wp-slimstat.com/
|
9 |
Text Domain: wp-slimstat
|
@@ -13,7 +13,7 @@ Domain Path: /languages
|
|
13 |
if ( !empty( wp_slimstat::$options ) ) return true;
|
14 |
|
15 |
class wp_slimstat {
|
16 |
-
public static $version = '4.2.
|
17 |
public static $options = array();
|
18 |
|
19 |
public static $wpdb = '';
|
3 |
Plugin Name: WP Slimstat
|
4 |
Plugin URI: http://wordpress.org/plugins/wp-slimstat/
|
5 |
Description: The leading web analytics plugin for WordPress
|
6 |
+
Version: 4.2.1
|
7 |
Author: Camu
|
8 |
Author URI: http://www.wp-slimstat.com/
|
9 |
Text Domain: wp-slimstat
|
13 |
if ( !empty( wp_slimstat::$options ) ) return true;
|
14 |
|
15 |
class wp_slimstat {
|
16 |
+
public static $version = '4.2.1';
|
17 |
public static $options = array();
|
18 |
|
19 |
public static $wpdb = '';
|