Slimstat Analytics - Version 3.5.5

Version Description

  • [Note] Our partnership with HackerNinja.com ended a few days ago, we wish them all the best for their business!
  • [New] The new DB API supports natural language dates: day equals today, year equals this year, etc. This brings the Shortcodes add-on to a whole new level of flexibility!
  • [Update] Right Now has been renamed Activity Log
  • [Fix] We can't believe nobody had noticed a bug in calculating the bounce rate value. Numbers were way off! (thank you, Rob)
  • [Fix] User Overview add-on had some problems with sorting by certain columns
  • [Fix] Filters were not being reset when multiple shortcodes were being used on the same page (thank you, joachimcarrein)
  • [Fix] Pageviews in the Edit Posts panel were not being properly calculated (thank you, Aljoscha)
  • [Fix] The Add-Ons page was not working as expected.
Download this release

Release Info

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

Code changes from version 3.5.4 to 3.5.5

admin/config/index.php CHANGED
@@ -55,10 +55,10 @@ switch ($config_tabs[$current_tab-1]){
55
  'expand_details' => array('description' => __('Expand Details','wp-slimstat'), 'type' => 'yesno', 'long_description' => __("Expand each row's details by default, insted of on mousehover.",'wp-slimstat')),
56
  'rows_to_show' => array('description' => __('Rows to Display','wp-slimstat'), 'type' => 'integer', 'long_description' => __('Specify the number of items in each report.','wp-slimstat')),
57
 
58
- 'views_right_now_header' => array('description' => __('Right Now Screen','wp-slimstat'), 'type' => 'section_header'),
59
- 'refresh_interval' => array('description' => __('Live Stream','wp-slimstat'), 'type' => 'integer', 'long_description' => __('Enable the Live view, which refreshes the Right Now screen every X seconds. Enter <strong>0</strong> (number zero) to disable this functionality.','wp-slimstat'), 'after_input_field' => __('seconds','wp-slimstat')),
60
- 'number_results_raw_data' => array('description' => __('Rows to Display','wp-slimstat'), 'type' => 'integer', 'long_description' => __('Specify the number of items in Right Now.','wp-slimstat')),
61
- 'include_outbound_links_right_now' => array('description' => __('Right Now Extended','wp-slimstat'), 'type' => 'yesno', 'long_description' => __('Choose if you want to see outbound links listed under Right Now. It might slow down the rendering of this report.','wp-slimstat'))
62
  );
63
  break;
64
  case __('Filters','wp-slimstat'):
55
  'expand_details' => array('description' => __('Expand Details','wp-slimstat'), 'type' => 'yesno', 'long_description' => __("Expand each row's details by default, insted of on mousehover.",'wp-slimstat')),
56
  'rows_to_show' => array('description' => __('Rows to Display','wp-slimstat'), 'type' => 'integer', 'long_description' => __('Specify the number of items in each report.','wp-slimstat')),
57
 
58
+ 'views_right_now_header' => array('description' => __('Activity Log','wp-slimstat'), 'type' => 'section_header'),
59
+ 'refresh_interval' => array('description' => __('Live Stream','wp-slimstat'), 'type' => 'integer', 'long_description' => __('Enable the Live view, which refreshes the Activity Log every X seconds. Enter <strong>0</strong> (number zero) to disable this functionality.','wp-slimstat'), 'after_input_field' => __('seconds','wp-slimstat')),
60
+ 'number_results_raw_data' => array('description' => __('Rows to Display','wp-slimstat'), 'type' => 'integer', 'long_description' => __('Specify the number of items in the Activity Log.','wp-slimstat')),
61
+ 'include_outbound_links_right_now' => array('description' => __('Activity Log Extended','wp-slimstat'), 'type' => 'yesno', 'long_description' => __('Choose if you want to see outbound links listed in the Activity Log. It might slow down the rendering of this report.','wp-slimstat'))
62
  );
63
  break;
64
  case __('Filters','wp-slimstat'):
admin/css/slimstat.css CHANGED
@@ -586,77 +586,4 @@
586
  #ui-datepicker-div{display:none;}.ui-datepicker{background-color:#fff;border:1px solid #ccc;width:17em;padding:.2em .2em 0;display:none;}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month-year{width:100%}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:49%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:700;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}
587
 
588
  /* Fontello - Custom Icon Fonts for SlimStat | Uses Fontelico (C) 2012 by Fontello project, Elusive (C) 2013 by Aristeides Stathopoulos, Font Awesome (C) 2012 by Dave Gandy | http://www.fontello.com */
589
- @font-face{font-family:slimstat;src:url(fontello.eot),url(fontello.eot#iefix) format('embedded-opentype'),url(fontello.svg#fontello) format('svg'),url(fontello.woff) format('woff'),url(fontello.ttf) format('truetype');font-weight:400;font-style:normal}[class*=" slimstat-font-"]:before,[class^=slimstat-font-]:before{font-family:slimstat;font-style:normal;font-weight:400;speak:none;display:inline-block;text-decoration:inherit;width:1em;margin-right:.2em;text-align:center;font-variant:normal;text-transform:none;line-height:1em;margin-left:.2em;}.slimstat-font-spin1:before{content:'\e800'}.slimstat-font-clock:before{content:'\e812'}.slimstat-font-search:before{content:'\e802'}.slimstat-font-cancel:before{content:'\e803'}.slimstat-font-download:before{content:'\e804'}.slimstat-font-upload:before{content:'\e805'}.slimstat-font-download-cloud:before{content:'\e806'}.slimstat-font-upload-cloud:before{content:'\e807'}.slimstat-font-location-1:before{content:'\e808'}.slimstat-font-arrows-cw-1:before{content:'\e801'}.slimstat-font-login:before{content:'\e80a'}.slimstat-font-logout:before{content:'\e80b'}.slimstat-font-angle-left:before{content:'\e80c'}.slimstat-font-angle-right:before{content:'\e80d'}.slimstat-font-angle-double-left:before{content:'\e80e'}.slimstat-font-angle-double-right:before{content:'\e80f'}.slimstat-font-arrows-cw:before{content:'\e810'}.slimstat-font-doc:before{content:'\e811'}.slimstat-font-spin3:before{content:'\e809'}.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)}}
590
-
591
-
592
-
593
-
594
-
595
-
596
-
597
-
598
-
599
-
600
- /*
601
-
602
- .inside span.date-and-other{max-width:48%}
603
- .inside span.date-and-other em{width:100%}
604
-
605
- #slimstat_interval_block{display:none}
606
- .current-filters{clear:both;overflow:hidden}
607
- .current-filters code{padding:2px 3px}
608
- .current-filters a{vertical-align:middle}
609
-
610
- .ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next{width:1em}
611
- .ui-datepicker .ui-datepicker-prev{left:15px}
612
- .ui-datepicker .ui-datepicker-next{right:7px}
613
- .ui-datepicker td span, .ui-datepicker td a{text-align:center}
614
- .ui-state-highlight {background-color: #777;color: #eee}
615
-
616
-
617
-
618
-
619
- .postbox.flex{height:auto;width:100%}
620
-
621
-
622
-
623
-
624
- .postbox.slimstat.flex .inside{height:100%}
625
-
626
-
627
-
628
-
629
-
630
-
631
-
632
-
633
-
634
-
635
-
636
-
637
-
638
- a.image{display:inline-block;height:16px;margin-left:5px;vertical-align:text-bottom}
639
- a.image.first{margin-left:0}
640
-
641
- .box-help{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAEiSURBVHjanFNLboMwEB075iM2SIiw6ilylShn4EwsWUe5Sk/RFbAAiQW/4M5ri2Uh3Kp5EvJorDfznpkRZVlSGIbnpmnuJwYRjWRBCEHrulLf9xTHMeLgyUjT9DZNU608zztXVfXOpyForU08zzPh7of8lUcfcLIsu8i2bR82GQScAArhDudG3oA8q35IhtiSNsHOucBKhNp73gh5nr/Z+aIoPg5qjPKoy57sygESfodhML73XR2dDWCBfN8nl1xXZ6MA8pVSh49lk11K5F8v/RvZWHiFiLngEfhW4AIsOF9fSmMhoNcRKJait2r/sQDwTmnJS3LdzzkKHs2FDewMb+RVLctSc5FL13V3Jp74GzmmKIpcvzfghs8kSW5cpP4UYAC48qDxuux3/wAAAABJRU5ErkJggg==)}
642
- .inline-help{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAADzSURBVHjaNFDLrYMwEFwb87GQnEuOuQAl5EYFr4vUFqpIDZSAhKjBPmDEL29nFUZaGe/Mzo5RXdc953n+nOfpvox930kpRcYY4qtKkiSUZflnYozv4zju3ARBVVWJaJomufPgfVmWt2GnGwulibNtW0rTlMZxlDu+2exmWB2ttbRtmxBwAokIcM6yjLz3UaOptSZ2lrNpGqrrWsTosRs550hjgl1lNR6BwgAKyPOc1nUlHUIgrL4AIXA9DoVYcLSYAJDxygUBAK4oCmvYzXPwx7Wi73tZCyF6AP9Lb3j6xaE/TDgmvsMwiOiXEzkCO77+BRgAqD6g60Uv2X0AAAAASUVORK5CYII=)}
643
- .box-refresh{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjM3OEFBNTNBQUNEQzExRTJBNjM2QUU1MEUyRTY0REQzIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjM3OEFBNTNCQUNEQzExRTJBNjM2QUU1MEUyRTY0REQzIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6Mzc4QUE1MzhBQ0RDMTFFMkE2MzZBRTUwRTJFNjRERDMiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6Mzc4QUE1MzlBQ0RDMTFFMkE2MzZBRTUwRTJFNjRERDMiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7fLZxBAAAAVUlEQVR42mL4//8/AzI2TJ35H10MhJkYsACjtFn/0cUYQapxSZ6blcYI56BbB2Jjsx6r1cgmwWxiwqYImzOYcJmA0zOEPISiEFkxio9xuRGb1QABBgAfi12N9rv+cAAAAABJRU5ErkJggg==)}
644
- .box-header-button{float:right;height:10px;margin:7px 5px 7px 0;width:10px}
645
-
646
-
647
-
648
- .more-modal-window{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAADXppVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+Cjx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDQuMi4yLWMwNjMgNTMuMzUyNjI0LCAyMDA4LzA3LzMwLTE4OjEyOjE4ICAgICAgICAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgeG1sbnM6eG1wUmlnaHRzPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvcmlnaHRzLyIKICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgIHhtbG5zOklwdGM0eG1wQ29yZT0iaHR0cDovL2lwdGMub3JnL3N0ZC9JcHRjNHhtcENvcmUvMS4wL3htbG5zLyIKICAgeG1wUmlnaHRzOk1hcmtlZD0iRmFsc2UiCiAgIHhtcFJpZ2h0czpXZWJTdGF0ZW1lbnQ9IiIKICAgcGhvdG9zaG9wOkF1dGhvcnNQb3NpdGlvbj0iIj4KICAgPGRjOnJpZ2h0cz4KICAgIDxyZGY6QWx0PgogICAgIDxyZGY6bGkgeG1sOmxhbmc9IngtZGVmYXVsdCIvPgogICAgPC9yZGY6QWx0PgogICA8L2RjOnJpZ2h0cz4KICAgPGRjOmNyZWF0b3I+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpPlRob21hcyBOaWVsc2VuPC9yZGY6bGk+CiAgICA8L3JkZjpTZXE+CiAgIDwvZGM6Y3JlYXRvcj4KICAgPGRjOnRpdGxlPgogICAgPHJkZjpBbHQ+CiAgICAgPHJkZjpsaSB4bWw6bGFuZz0ieC1kZWZhdWx0Ij5XUCBTbGltc3RhdCBJY29uczwvcmRmOmxpPgogICAgPC9yZGY6QWx0PgogICA8L2RjOnRpdGxlPgogICA8eG1wUmlnaHRzOlVzYWdlVGVybXM+CiAgICA8cmRmOkFsdD4KICAgICA8cmRmOmxpIHhtbDpsYW5nPSJ4LWRlZmF1bHQiLz4KICAgIDwvcmRmOkFsdD4KICAgPC94bXBSaWdodHM6VXNhZ2VUZXJtcz4KICAgPElwdGM0eG1wQ29yZTpDcmVhdG9yQ29udGFjdEluZm8KICAgIElwdGM0eG1wQ29yZTpDaUFkckV4dGFkcj0iIgogICAgSXB0YzR4bXBDb3JlOkNpQWRyQ2l0eT0iIgogICAgSXB0YzR4bXBDb3JlOkNpQWRyUmVnaW9uPSIiCiAgICBJcHRjNHhtcENvcmU6Q2lBZHJQY29kZT0iIgogICAgSXB0YzR4bXBDb3JlOkNpQWRyQ3RyeT0iIgogICAgSXB0YzR4bXBDb3JlOkNpVGVsV29yaz0iIgogICAgSXB0YzR4bXBDb3JlOkNpRW1haWxXb3JrPSIiCiAgICBJcHRjNHhtcENvcmU6Q2lVcmxXb3JrPSJ3d3cuYm9ndC5kayIvPgogIDwvcmRmOkRlc2NyaXB0aW9uPgogPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8+gc/bLwAAAStJREFUeNpMUM1KQlEQ/s7PtauIWNHGB6i2QT5IoRS0jegdwhCkV2gRtIwS0lcI2teywAdwUZjlven13ns8zUwunM3MOfN98803tvf8vvcyGJ4GxgQegFsswGG1lpzlLqvv1m7s62B43n16OwsLFloB5WIBTIhnKTwVyTyDMcrrwBrLIEWgzUoJ/c4RHttNrJeLQuQeYyyRPIOq5RAblRBb1RKc81JTC+NoxgreOrcQuftWg6aswRDLWIW7i0OM4zma7a4QZWMlyxNgaYCDa/5Ty7c1RiOixY87PZF9uGyAVU6u+viazBBNUzYDEoFid6PJVHb6/P4V4AflnzgR54yxae7yJM3E3YgmHLS6IvV/Hg/uEcbZ+k7tWiuV0AkCrBzcrBx8f7t2+yfAAKhcgK464nRcAAAAAElFTkSuQmCC);float:right;margin:7px 5px}
649
- .remove-filter,.close-dialog{background:transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAADXppVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+Cjx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDQuMi4yLWMwNjMgNTMuMzUyNjI0LCAyMDA4LzA3LzMwLTE4OjEyOjE4ICAgICAgICAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgeG1sbnM6eG1wUmlnaHRzPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvcmlnaHRzLyIKICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgIHhtbG5zOklwdGM0eG1wQ29yZT0iaHR0cDovL2lwdGMub3JnL3N0ZC9JcHRjNHhtcENvcmUvMS4wL3htbG5zLyIKICAgeG1wUmlnaHRzOk1hcmtlZD0iRmFsc2UiCiAgIHhtcFJpZ2h0czpXZWJTdGF0ZW1lbnQ9IiIKICAgcGhvdG9zaG9wOkF1dGhvcnNQb3NpdGlvbj0iIj4KICAgPGRjOnJpZ2h0cz4KICAgIDxyZGY6QWx0PgogICAgIDxyZGY6bGkgeG1sOmxhbmc9IngtZGVmYXVsdCIvPgogICAgPC9yZGY6QWx0PgogICA8L2RjOnJpZ2h0cz4KICAgPGRjOmNyZWF0b3I+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpPlRob21hcyBOaWVsc2VuPC9yZGY6bGk+CiAgICA8L3JkZjpTZXE+CiAgIDwvZGM6Y3JlYXRvcj4KICAgPGRjOnRpdGxlPgogICAgPHJkZjpBbHQ+CiAgICAgPHJkZjpsaSB4bWw6bGFuZz0ieC1kZWZhdWx0Ij5XUCBTbGltc3RhdCBJY29uczwvcmRmOmxpPgogICAgPC9yZGY6QWx0PgogICA8L2RjOnRpdGxlPgogICA8eG1wUmlnaHRzOlVzYWdlVGVybXM+CiAgICA8cmRmOkFsdD4KICAgICA8cmRmOmxpIHhtbDpsYW5nPSJ4LWRlZmF1bHQiLz4KICAgIDwvcmRmOkFsdD4KICAgPC94bXBSaWdodHM6VXNhZ2VUZXJtcz4KICAgPElwdGM0eG1wQ29yZTpDcmVhdG9yQ29udGFjdEluZm8KICAgIElwdGM0eG1wQ29yZTpDaUFkckV4dGFkcj0iIgogICAgSXB0YzR4bXBDb3JlOkNpQWRyQ2l0eT0iIgogICAgSXB0YzR4bXBDb3JlOkNpQWRyUmVnaW9uPSIiCiAgICBJcHRjNHhtcENvcmU6Q2lBZHJQY29kZT0iIgogICAgSXB0YzR4bXBDb3JlOkNpQWRyQ3RyeT0iIgogICAgSXB0YzR4bXBDb3JlOkNpVGVsV29yaz0iIgogICAgSXB0YzR4bXBDb3JlOkNpRW1haWxXb3JrPSIiCiAgICBJcHRjNHhtcENvcmU6Q2lVcmxXb3JrPSJ3d3cuYm9ndC5kayIvPgogIDwvcmRmOkRlc2NyaXB0aW9uPgogPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8+gc/bLwAAAW9JREFUeNqkk99KwzAUxpM0bWcdeDNv9ypeeqE45/8/iLAn2js4REGGAxGF3fg6GwOHW7dSm/gdm2gXO2924MfW03O+JF9OudaarRLS/kmnU6aVYozz5dVYTFYqTPj+okAax6zXaq3Hw2GHSzlD6prSTnsIgRsZhnyjXr/abrfnXhCYHSgl0Xw/GQx2hJRW+LIgEoI7sK+ShGVJ4qHnGM9ZLoBtY+WImo0AvSRzzoCwzfYYWHnNHtV68AkOwCPYMrkTk/d/mvPog1NafcFExDtogF5B5MLxgZqbYGITwikYg13wWnIHT2Cv2FwmQEG3MC3Jf4C5mxR/roqxB+OHG+fGTH+ZQGXB7TxezLlZwdgOCNxJpN/bErfp2QPPzu1oY7CyO+AY402dZczQB02QgBg0wJt9r1BLPcUdpH4UNYNqtSvyUT503B6bK+6qNOWoPbJzwL+/RhCPRqQuMGHqn4+PUy33PB3VauxXYIX4EmAAzUqWQZaDhywAAAAASUVORK5CYII=) 75% 0 no-repeat scroll;display:inline-block;height:16px;width:16px}
650
-
651
- Edit Posts screen
652
- .widefat th.column-wp-slimstat,.widefat td.column-wp-slimstat{text-align:center;width:3em}
653
-
654
- RTL compatibility
655
- .rtl #slimstat-filters .nowrap, .rtl #slimstat-filters input.button-primary{float:right}
656
- .rtl #analytics-icon,.rtl .wrap form p span,.rtl .filters-title,.rtl .filter-item,.rtl .postbox,.rtl .legend-title,.rtl .little-color-box,.rtl .form-table span.block-element{float:right}
657
- .rtl .box-help{float:left;margin:7px 0 7px 5px}
658
-
659
- .rtl .postbox p span{float:left;margin-right:1%}
660
- .rtl .postbox .inline-help{float:right;margin: 0 0 0 5px}
661
-
662
- */
586
  #ui-datepicker-div{display:none;}.ui-datepicker{background-color:#fff;border:1px solid #ccc;width:17em;padding:.2em .2em 0;display:none;}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month-year{width:100%}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:49%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:700;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}
587
 
588
  /* Fontello - Custom Icon Fonts for SlimStat | Uses Fontelico (C) 2012 by Fontello project, Elusive (C) 2013 by Aristeides Stathopoulos, Font Awesome (C) 2012 by Dave Gandy | http://www.fontello.com */
589
+ @font-face{font-family:slimstat;src:url(fontello.eot),url(fontello.eot#iefix) format('embedded-opentype'),url(fontello.svg#fontello) format('svg'),url(fontello.woff) format('woff'),url(fontello.ttf) format('truetype');font-weight:400;font-style:normal}[class*=" slimstat-font-"]:before,[class^=slimstat-font-]:before{font-family:slimstat;font-style:normal;font-weight:400;speak:none;display:inline-block;text-decoration:inherit;width:1em;margin-right:.2em;text-align:center;font-variant:normal;text-transform:none;line-height:1em;margin-left:.2em;}.slimstat-font-spin1:before{content:'\e800'}.slimstat-font-clock:before{content:'\e812'}.slimstat-font-search:before{content:'\e802'}.slimstat-font-cancel:before{content:'\e803'}.slimstat-font-download:before{content:'\e804'}.slimstat-font-upload:before{content:'\e805'}.slimstat-font-download-cloud:before{content:'\e806'}.slimstat-font-upload-cloud:before{content:'\e807'}.slimstat-font-location-1:before{content:'\e808'}.slimstat-font-arrows-cw-1:before{content:'\e801'}.slimstat-font-login:before{content:'\e80a'}.slimstat-font-logout:before{content:'\e80b'}.slimstat-font-angle-left:before{content:'\e80c'}.slimstat-font-angle-right:before{content:'\e80d'}.slimstat-font-angle-double-left:before{content:'\e80e'}.slimstat-font-angle-double-right:before{content:'\e80f'}.slimstat-font-arrows-cw:before{content:'\e810'}.slimstat-font-doc:before{content:'\e811'}.slimstat-font-spin3:before{content:'\e809'}.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)}}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
admin/js/slimstat.admin.js CHANGED
@@ -223,12 +223,6 @@ var SlimStatAdmin = {
223
  SlimStatAdmin._refresh_timer[1] = SlimStatAdminParams.refresh_interval%60;
224
  refresh_handle = window.setTimeout("SlimStatAdmin.refresh_countdown();", 1000);
225
  }
226
- },
227
-
228
- hacker_ninja_show_result: function(id){
229
- return function(response){
230
- jQuery(id).removeClass('blink').html(response);
231
- }
232
  }
233
  }
234
 
@@ -332,6 +326,7 @@ jQuery(function(){
332
  changeMonth: true,
333
  changeYear: true,
334
  dateFormat: 'yy-m-d',
 
335
  nextText: '&raquo;',
336
  prevText: '&laquo;',
337
  showOn: 'both',
@@ -412,32 +407,6 @@ jQuery(function(){
412
  });
413
  });
414
 
415
- // HackerNinja.com
416
- jQuery(document).on('click', '.button-hacker-ninja', function(e){
417
- e.preventDefault();
418
- data = {action: 'slimstat_load_report', report_id: 'slim_p1_16', security: jQuery('#meta-box-order-nonce').val(), 'run_scan': '00'};
419
- jQuery('#slim_p1_16 .inside').html('<p class="loading"></p>');
420
- jQuery.ajax({
421
- url: ajaxurl,
422
- type: 'post',
423
- async: false,
424
- data: data
425
- }).done(function(response){
426
- jQuery('#slim_p1_16 .inside').html(response);
427
- });
428
-
429
- /* jQuery('#slim_p1_16 .blink').each(function(){
430
- data['run_scan'] = jQuery(this).attr('id');
431
- jQuery.ajax({
432
- url: ajaxurl,
433
- type: 'post',
434
- async: true,
435
- data: data,
436
- success: SlimStatAdmin.hacker_ninja_show_result('#'+data['run_scan'])
437
- });
438
- }); */
439
- });
440
-
441
  // SlimScroll init
442
  jQuery('[id^=slim_]:not(.tall) .inside').slimScroll({
443
  distance: '2px',
223
  SlimStatAdmin._refresh_timer[1] = SlimStatAdminParams.refresh_interval%60;
224
  refresh_handle = window.setTimeout("SlimStatAdmin.refresh_countdown();", 1000);
225
  }
 
 
 
 
 
 
226
  }
227
  }
228
 
326
  changeMonth: true,
327
  changeYear: true,
328
  dateFormat: 'yy-m-d',
329
+ maxDate: new Date,
330
  nextText: '&raquo;',
331
  prevText: '&laquo;',
332
  showOn: 'both',
407
  });
408
  });
409
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
410
  // SlimScroll init
411
  jQuery('[id^=slim_]:not(.tall) .inside').slimScroll({
412
  distance: '2px',
admin/view/index.php CHANGED
@@ -89,6 +89,10 @@
89
  <?php foreach(wp_slimstat_db::$filters_normalized['date'] as $a_key => $a_value): if (!empty($a_value) && !empty(wp_slimstat_db::$filters_normalized['date'][$a_key])): ?>
90
  <input type="hidden" name="fs[<?php echo $a_key ?>]" class="slimstat-post-filter" value="equals <?php echo $a_value ?>"/>
91
  <?php endif; endforeach; ?>
 
 
 
 
92
  </form>
93
 
94
  <?php
@@ -146,9 +150,6 @@
146
  case 'slim_p1_15':
147
  wp_slimstat_reports::report_header($a_box_id, 'normal', __("WP SlimStat retrieves live information from Alexa, Facebook and Google, to measures your site's rankings. Values are updated every 12 hours. Filters set above don't apply to this report.",'wp-slimstat'));
148
  break;
149
- case 'slim_p1_16':
150
- wp_slimstat_reports::report_header($a_box_id, 'normal', __("We have teamed up with HackerNinja.com to offer you a free website security scan. By clicking on Start Free Scan, your website will be analyzed to detect viruses and other treats. Please note that no confidential information is being sent to HackerNinja.",'wp-slimstat'));
151
- break;
152
  case 'slim_p2_01':
153
  wp_slimstat_reports::report_header($a_box_id, 'wide chart', wp_slimstat_reports::$chart_tooltip, wp_slimstat_reports::chart_title(__('Human Visits', 'wp-slimstat')));
154
  break;
89
  <?php foreach(wp_slimstat_db::$filters_normalized['date'] as $a_key => $a_value): if (!empty($a_value) && !empty(wp_slimstat_db::$filters_normalized['date'][$a_key])): ?>
90
  <input type="hidden" name="fs[<?php echo $a_key ?>]" class="slimstat-post-filter" value="equals <?php echo $a_value ?>"/>
91
  <?php endif; endforeach; ?>
92
+
93
+ <?php foreach(wp_slimstat_db::$filters_normalized['misc'] as $a_key => $a_value): if (!empty($a_value) && !empty(wp_slimstat_db::$filters_normalized['misc'][$a_key])): ?>
94
+ <input type="hidden" name="fs[<?php echo $a_key ?>]" class="slimstat-post-filter" value="equals <?php echo $a_value ?>"/>
95
+ <?php endif; endforeach; ?>
96
  </form>
97
 
98
  <?php
150
  case 'slim_p1_15':
151
  wp_slimstat_reports::report_header($a_box_id, 'normal', __("WP SlimStat retrieves live information from Alexa, Facebook and Google, to measures your site's rankings. Values are updated every 12 hours. Filters set above don't apply to this report.",'wp-slimstat'));
152
  break;
 
 
 
153
  case 'slim_p2_01':
154
  wp_slimstat_reports::report_header($a_box_id, 'wide chart', wp_slimstat_reports::$chart_tooltip, wp_slimstat_reports::chart_title(__('Human Visits', 'wp-slimstat')));
155
  break;
admin/view/wp-slimstat-db.php CHANGED
@@ -10,18 +10,7 @@ class wp_slimstat_db {
10
  public static $formats = array('decimal' => ',', 'thousand' => '.');
11
 
12
  // Filters as SQL clauses
13
- public static $sql_filters = array(
14
- 'from' => array(
15
- 'browsers' => '',
16
- 'screenres' => '',
17
- 'content_info' => '',
18
- 'outbound' => '',
19
- 'all_tables' => '',
20
- 'all_other_tables' => ''
21
- ),
22
- 'where' => '',
23
- 'where_time_range' => ''
24
- );
25
 
26
  /*
27
  * Initializes the environment, sets the filters
@@ -93,14 +82,14 @@ class wp_slimstat_db {
93
  'strtotime' => 0
94
  );
95
 
96
- // Apply pre filters
97
- self::$filters_normalized = apply_filters('slimstat_pre_filters_normalized', self::$filters_normalized);
98
 
99
  // Normalize the input (filters)
100
  self::$filters_normalized = self::parse_filters($_filters);
101
 
102
- // Apply post filters
103
- self::$filters_normalized = apply_filters('slimstat_post_filters_normalized', self::$filters_normalized);
104
 
105
  if (empty(self::$filters_normalized['date']['interval'])){
106
  if (!empty(self::$filters_normalized['date']['hour'])){
@@ -127,7 +116,7 @@ class wp_slimstat_db {
127
  self::$filters_normalized['utime']['end'] = self::$filters_normalized['utime']['start'] + 86399;
128
  self::$filters_normalized['utime']['type'] = 'd';
129
  }
130
- else if(!empty(self::$filters_normalized['date']['year'])){
131
  self::$filters_normalized['utime']['start'] = mktime(0, 0, 0, 1, 1, self::$filters_normalized['date']['year']);
132
  self::$filters_normalized['utime']['end'] = mktime(0, 0, 0, 1, 1, self::$filters_normalized['date']['year']+1)-1;
133
  self::$filters_normalized['utime']['type'] = 'Y';
@@ -206,7 +195,19 @@ class wp_slimstat_db {
206
  }
207
 
208
  // Now let's translate our filters into SQL clauses
209
- self::$sql_filters['where_time_range'] = ' AND (t1.dt BETWEEN '.self::$filters_normalized['utime']['start'].' AND '.self::$filters_normalized['utime']['end'].')';
 
 
 
 
 
 
 
 
 
 
 
 
210
  foreach (self::$filters_normalized['columns'] as $a_filter_column => $a_filter_data){
211
  $a_filter_empty = '0';
212
 
@@ -611,16 +612,42 @@ class wp_slimstat_db {
611
  }
612
 
613
  switch($a_filter[1]){
614
- case 'strtotime': // TODO - TO BE REMOVED - add support for strtotime to right side of expression
615
  $custom_date = strtotime($a_filter[3].' UTC');
616
- $filters_normalized['date']['day'] = gmdate('j', $custom_date);
617
- $filters_normalized['date']['month'] = gmdate('n', $custom_date);
618
- $filters_normalized['date']['year'] = gmdate('Y', $custom_date);
619
  break;
620
  case 'hour':
621
  case 'day':
622
  case 'month':
623
  case 'year':
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
624
  case 'interval':
625
  $filters_normalized['date'][$a_filter[1]] = intval($a_filter[3]);
626
  break;
10
  public static $formats = array('decimal' => ',', 'thousand' => '.');
11
 
12
  // Filters as SQL clauses
13
+ public static $sql_filters = array();
 
 
 
 
 
 
 
 
 
 
 
14
 
15
  /*
16
  * Initializes the environment, sets the filters
82
  'strtotime' => 0
83
  );
84
 
85
+ // Filter the... filters
86
+ $_filters = apply_filters('slimstat_db_pre_filters', $_filters);
87
 
88
  // Normalize the input (filters)
89
  self::$filters_normalized = self::parse_filters($_filters);
90
 
91
+ // Filter the array of normalized filters
92
+ self::$filters_normalized = apply_filters('slimstat_db_filters_normalized', self::$filters_normalized, $_filters);
93
 
94
  if (empty(self::$filters_normalized['date']['interval'])){
95
  if (!empty(self::$filters_normalized['date']['hour'])){
116
  self::$filters_normalized['utime']['end'] = self::$filters_normalized['utime']['start'] + 86399;
117
  self::$filters_normalized['utime']['type'] = 'd';
118
  }
119
+ else if(!empty(self::$filters_normalized['date']['year']) && empty(self::$filters_normalized['date']['month'])){
120
  self::$filters_normalized['utime']['start'] = mktime(0, 0, 0, 1, 1, self::$filters_normalized['date']['year']);
121
  self::$filters_normalized['utime']['end'] = mktime(0, 0, 0, 1, 1, self::$filters_normalized['date']['year']+1)-1;
122
  self::$filters_normalized['utime']['type'] = 'Y';
195
  }
196
 
197
  // Now let's translate our filters into SQL clauses
198
+ self::$sql_filters = array(
199
+ 'from' => array(
200
+ 'browsers' => '',
201
+ 'screenres' => '',
202
+ 'content_info' => '',
203
+ 'outbound' => '',
204
+ 'all_tables' => '',
205
+ 'all_other_tables' => ''
206
+ ),
207
+ 'where' => '',
208
+ 'where_time_range' => ' AND (t1.dt BETWEEN '.self::$filters_normalized['utime']['start'].' AND '.self::$filters_normalized['utime']['end'].')'
209
+ );
210
+
211
  foreach (self::$filters_normalized['columns'] as $a_filter_column => $a_filter_data){
212
  $a_filter_empty = '0';
213
 
612
  }
613
 
614
  switch($a_filter[1]){
615
+ case 'strtotime':
616
  $custom_date = strtotime($a_filter[3].' UTC');
617
+ $filters_normalized['date']['day'] = date('j', $custom_date);
618
+ $filters_normalized['date']['month'] = date('n', $custom_date);
619
+ $filters_normalized['date']['year'] = date('Y', $custom_date);
620
  break;
621
  case 'hour':
622
  case 'day':
623
  case 'month':
624
  case 'year':
625
+ if (is_numeric($a_filter[3])){
626
+ $filters_normalized['date'][$a_filter[1]] = intval($a_filter[3]);
627
+ }
628
+ else{
629
+ // Try to apply strtotime to value
630
+ switch($a_filter[1]){
631
+ case 'hour':
632
+ $filters_normalized['date'][$a_filter[1]] = date('H', strtotime($a_filter[3]));
633
+ break;
634
+ case 'day':
635
+ $filters_normalized['date'][$a_filter[1]] = date('j', strtotime($a_filter[3]));
636
+ break;
637
+ case 'month':
638
+ $filters_normalized['date'][$a_filter[1]] = date('n', strtotime($a_filter[3]));
639
+ break;
640
+ case 'year':
641
+ $filters_normalized['date'][$a_filter[1]] = date('Y', strtotime($a_filter[3]));
642
+ break;
643
+ default:
644
+ break;
645
+ }
646
+ if ($filters_normalized['date'][$a_filter[1]] === false){
647
+ unset($filters_normalized['date'][$a_filter[1]]);
648
+ }
649
+ }
650
+ break;
651
  case 'interval':
652
  $filters_normalized['date'][$a_filter[1]] = intval($a_filter[3]);
653
  break;
admin/view/wp-slimstat-reports.php CHANGED
@@ -25,7 +25,7 @@ class wp_slimstat_reports{
25
  */
26
  public static function init(){
27
  self::$screen_names = array(
28
- 1 => __('Right Now','wp-slimstat'),
29
  2 => __('Overview','wp-slimstat'),
30
  3 => __('Visitors','wp-slimstat'),
31
  4 => __('Content','wp-slimstat'),
@@ -47,7 +47,6 @@ class wp_slimstat_reports{
47
  'slim_p1_12' => __('Top Search Terms','wp-slimstat'),
48
  'slim_p1_13' => __('Top Countries','wp-slimstat'),
49
  'slim_p1_15' => __('Rankings','wp-slimstat'),
50
- 'slim_p1_16' => __('Security Scan','wp-slimstat'),
51
  'slim_p1_17' => __('Top Language Families','wp-slimstat'),
52
  'slim_p2_01' => __('Human Visits (chart)','wp-slimstat'),
53
  'slim_p2_02' => __('At a Glance','wp-slimstat'),
@@ -100,13 +99,16 @@ class wp_slimstat_reports{
100
  'slim_p4_21' => __('Top Outbound Links and Downloads','wp-slimstat'),
101
  'slim_p4_22' => __('Your Website','wp-slimstat'),
102
  'slim_p6_01' => __('World Map','wp-slimstat'),
103
- 'slim_p7_02' => __('Activity Log','wp-slimstat')
104
  );
105
 
106
 
107
  if (!empty($_GET['page'])){
108
  self::$current_tab = intval(str_replace('wp-slim-view-', '', $_GET['page']));
109
  }
 
 
 
110
  self::$view_url = ((wp_slimstat::$options['use_separate_menu'] == 'yes')?'admin.php':'options.php').'?page=wp-slim-view-'.self::$current_tab;
111
 
112
  // TO BE REVIEWED AND CLEANED UP
@@ -124,32 +126,29 @@ class wp_slimstat_reports{
124
  }
125
  self::$all_reports = (empty(self::$all_reports) || empty(self::$all_reports[0]))?array():explode(',', self::$all_reports[0]);
126
 
127
- // Use default values, if the corresponding option hasn't been initialized
128
- $old_ids = array_intersect(array('p1_01','p2_01','p3_01','p4_01'), self::$all_reports);
129
-
130
- if (empty(self::$all_reports) || !empty($old_ids)){
131
- switch(self::$current_tab){
132
- case 2:
133
- self::$all_reports = array('slim_p1_01','slim_p1_02','slim_p1_03','slim_p1_04','slim_p1_11','slim_p1_12','slim_p1_05','slim_p1_08','slim_p1_10','slim_p1_13','slim_p1_15','slim_p1_16','slim_p1_17');
134
- break;
135
- case 3:
136
- self::$all_reports = array('slim_p2_01','slim_p2_02','slim_p2_03','slim_p2_04','slim_p2_06','slim_p2_05','slim_p2_07','slim_p2_09','slim_p2_10','slim_p2_12','slim_p2_13','slim_p2_14','slim_p2_15','slim_p2_16','slim_p2_17','slim_p2_18','slim_p2_19','slim_p2_20','slim_p2_21');
137
- break;
138
- case 4:
139
- self::$all_reports = array('slim_p4_01','slim_p4_22','slim_p1_06','slim_p4_07','slim_p4_02','slim_p4_03','slim_p4_05','slim_p4_04','slim_p4_06','slim_p4_08','slim_p4_12','slim_p4_13','slim_p4_14','slim_p4_15','slim_p4_16','slim_p4_17','slim_p4_18','slim_p4_11','slim_p4_10','slim_p4_19','slim_p4_20','slim_p4_21');
140
- break;
141
- case 5:
142
- self::$all_reports = array('slim_p3_01','slim_p3_02','slim_p3_03','slim_p3_04','slim_p3_06','slim_p3_05','slim_p3_08','slim_p3_10','slim_p3_09','slim_p3_11');
143
- break;
144
- default:
145
- }
146
- }
147
 
148
  // Some boxes are hidden by default
149
- if (!empty($_GET['page']) && strpos($_GET['page'], 'wp-slim-view-') !== false)
150
  self::$hidden_reports = get_user_option("metaboxhidden_{$page_location}_page_wp-slim-view-".self::$current_tab, $user->ID);
151
- else // the script is being called from the dashboard widgets plugin
 
 
 
 
 
 
 
152
  self::$hidden_reports = get_user_option("metaboxhidden_{$page_location}", $user->ID);
 
153
 
154
  // Default values
155
  if (self::$hidden_reports === false){
@@ -294,7 +293,7 @@ class wp_slimstat_reports{
294
 
295
  if (!empty($filters_dropdown)){
296
  foreach($filters_dropdown as $a_filter_label => $a_filter_details){
297
- if (strpos($a_filter_label, 'no-filter-selected')){
298
  continue;
299
  }
300
 
@@ -971,66 +970,6 @@ class wp_slimstat_reports{
971
  <p><?php _e('Alexa Popularity', 'wp-slimstat') ?> <span><?php echo number_format($rankings['alexa_popularity'], 0, wp_slimstat_db::$formats['decimal'], wp_slimstat_db::$formats['thousand']) ?></span></p><?php
972
  }
973
 
974
- public static function show_hacker_ninja($_id = 'p0'){
975
- $hn_urls = array('hn01' => 'http://www.hackerninja.com/scanner/crawler/launcher_bing_bot.php', 'hn02' => 'http://www.hackerninja.com/scanner/crawler/launcher_clamav_scanner.php', 'hn03' => 'http://www.hackerninja.com/scanner/crawler/launcher_google_bot.php', 'hn04' => 'http://www.hackerninja.com/scanner/crawler/launcher_hostile_strings.php', 'hn05' => 'http://www.hackerninja.com/scanner/crawler/launcher_vanilla_bot.php', 'hn06' => 'http://www.hackerninja.com/scanner/crawler/scan_google_malware_list.php', 'hn07' => 'http://www.hackerninja.com/scanner/crawler/scan_external_links.php', 'hn08' => 'http://www.hackerninja.com/scanner/crawler/scan_external_links.php');
976
-
977
- if (!isset($_POST['run_scan']) && wp_slimstat::$options['enable_hacker_ninja'] != 'yes'){
978
- echo '<p class="nodata"><a class="button-hacker-ninja button-secondary" href="#">Enable Free Scan</a><br><br><a target="_blank" href="http://www.hackerninja.com/wp-slimstat-hackerninja/">Get instant email notifications of malware,<br> infections and hostile attacks</a></p>';
979
- }
980
- else{
981
- if (wp_slimstat::$options['enable_hacker_ninja'] != 'yes'){
982
- wp_slimstat::$options['enable_hacker_ninja'] = 'yes';
983
- }
984
- $run_scan = !empty($_POST['run_scan'])?$_POST['run_scan']:'00';
985
-
986
- switch($run_scan){
987
- case '00': ?>
988
- <p><?php _e('Bing Test', 'wp-slimstat') ?> <span id="hn01" class="blink">Loading</span></p>
989
- <p><?php _e('AntiVirus Scan', 'wp-slimstat') ?> <span id="hn02" class="blink">Loading</span></p>
990
- <p><?php _e('Google Bot Test', 'wp-slimstat') ?> <span id="hn03" class="blink">Loading</span></p>
991
- <p><?php _e('Scan for Hostile Strings', 'wp-slimstat') ?> <span id="hn04" class="blink">Loading</span></p>
992
- <p><?php _e('Generic Web Bot test', 'wp-slimstat') ?> <span id="hn05" class="blink">Loading</span></p>
993
- <p><?php _e('Google Safe Browsing List', 'wp-slimstat') ?> <span id="hn06" class="blink">Loading</span></p>
994
- <p><?php _e('Hostile External Links', 'wp-slimstat') ?> <span id="hn07" class="blink">Loading</span></p>
995
- <p><?php _e('Other Treats', 'wp-slimstat') ?> <span id="hn08" class="blink">Loading</span></p>
996
- <script type="text/javascript">
997
- var data = {action: 'slimstat_load_report', report_id: 'slim_p1_16', security: jQuery('#meta-box-order-nonce').val(), 'run_scan': '00'};
998
- jQuery('#slim_p1_16 .blink').each(function(){
999
- data['run_scan'] = jQuery(this).attr('id');
1000
- jQuery.ajax({
1001
- url: ajaxurl,
1002
- type: 'post',
1003
- async: true,
1004
- data: data,
1005
- success: SlimStatAdmin.hacker_ninja_show_result('#'+data['run_scan'])
1006
- });
1007
- });
1008
- </script><?php
1009
- break;
1010
- case 'hn01':
1011
- case 'hn02':
1012
- case 'hn03':
1013
- case 'hn04':
1014
- case 'hn05':
1015
- case 'hn06':
1016
- case 'hn07':
1017
- case 'hn08':
1018
- $options = array('timeout' => 30);
1019
- $response = @wp_remote_get($hn_urls[$run_scan].'?website='.site_url(), $options);
1020
- if (!is_wp_error($response) && isset($response['response']['code']) && ($response['response']['code'] == 200) && !empty($response['body'])){
1021
- echo '<a target="_blank" href="http://www.hackerninja.com/wp-slimstat-hackerninja-special-offer/">'.((stripos($response['body'],'passed') !== false)?__('Passed','wp-slimstat'):__('At Risk','wp-slimstat')).'</a>';
1022
- }
1023
- else{
1024
- echo __('Timed Out','wp-slimstat');
1025
- }
1026
- break;
1027
- default:
1028
- echo '<p class="nodata"><a class="button-hacker-ninja button-secondary" href="#">Enable Free Scan</a><br><br><a target="_blank" href="http://www.hackerninja.com/wp-slimstat-hackerninja/">Get instant email notifications of malware,<br> infections and hostile attacks</a></p>';
1029
- break;
1030
- }
1031
- }
1032
- }
1033
-
1034
  public static function show_world_map($_id = 'p0'){
1035
  wp_slimstat_db::$filters_normalized['misc']['limit_results'] = 9999;
1036
  $countries = wp_slimstat_db::get_popular('t1.country');
@@ -1223,14 +1162,11 @@ class wp_slimstat_reports{
1223
  case 'slim_p1_15':
1224
  self::show_rankings($_report_id);
1225
  break;
1226
- case 'slim_p1_16':
1227
- self::show_hacker_ninja($_report_id);
1228
- break;
1229
  case 'slim_p1_17':
1230
  self::show_results('popular', $_report_id, 'SUBSTRING(t1.language, 1, 2)', array('total_for_percentage' => $current_pageviews, 'as_column' => 'language', 'filter_op' => 'contains'));
1231
  break;
1232
  case 'slim_p2_02':
1233
- self::show_visitors_summary($_report_id, wp_slimstat_db::count_records('t1.visit_id > 0 AND tb.type <> 1'), wp_slimstat_db::count_records('t1.visit_id > 0 AND tb.type <> 1', 'visit_id'));
1234
  break;
1235
  case 'slim_p2_03':
1236
  self::show_results('popular', $_report_id, 'language', array('total_for_percentage' => $current_pageviews));
25
  */
26
  public static function init(){
27
  self::$screen_names = array(
28
+ 1 => __('Activity Log','wp-slimstat'),
29
  2 => __('Overview','wp-slimstat'),
30
  3 => __('Visitors','wp-slimstat'),
31
  4 => __('Content','wp-slimstat'),
47
  'slim_p1_12' => __('Top Search Terms','wp-slimstat'),
48
  'slim_p1_13' => __('Top Countries','wp-slimstat'),
49
  'slim_p1_15' => __('Rankings','wp-slimstat'),
 
50
  'slim_p1_17' => __('Top Language Families','wp-slimstat'),
51
  'slim_p2_01' => __('Human Visits (chart)','wp-slimstat'),
52
  'slim_p2_02' => __('At a Glance','wp-slimstat'),
99
  'slim_p4_21' => __('Top Outbound Links and Downloads','wp-slimstat'),
100
  'slim_p4_22' => __('Your Website','wp-slimstat'),
101
  'slim_p6_01' => __('World Map','wp-slimstat'),
102
+ 'slim_p7_02' => __('At A Glance','wp-slimstat')
103
  );
104
 
105
 
106
  if (!empty($_GET['page'])){
107
  self::$current_tab = intval(str_replace('wp-slim-view-', '', $_GET['page']));
108
  }
109
+ else if (!empty($_POST['current_tab'])){
110
+ self::$current_tab = intval($_POST['current_tab']);
111
+ }
112
  self::$view_url = ((wp_slimstat::$options['use_separate_menu'] == 'yes')?'admin.php':'options.php').'?page=wp-slim-view-'.self::$current_tab;
113
 
114
  // TO BE REVIEWED AND CLEANED UP
126
  }
127
  self::$all_reports = (empty(self::$all_reports) || empty(self::$all_reports[0]))?array():explode(',', self::$all_reports[0]);
128
 
129
+ $all_existing_reports = array(
130
+ 1 => array('slim_p7_02'),
131
+ 2 => array('slim_p1_01','slim_p1_02','slim_p1_03','slim_p1_04','slim_p1_11','slim_p1_12','slim_p1_05','slim_p1_08','slim_p1_10','slim_p1_13','slim_p1_15','slim_p1_17'),
132
+ 3 => array('slim_p2_01','slim_p2_02','slim_p2_03','slim_p2_04','slim_p2_06','slim_p2_05','slim_p2_07','slim_p2_09','slim_p2_10','slim_p2_12','slim_p2_13','slim_p2_14','slim_p2_15','slim_p2_16','slim_p2_17','slim_p2_18','slim_p2_19','slim_p2_20','slim_p2_21'),
133
+ 4 => array('slim_p4_01','slim_p4_22','slim_p1_06','slim_p4_07','slim_p4_02','slim_p4_03','slim_p4_05','slim_p4_04','slim_p4_06','slim_p4_08','slim_p4_12','slim_p4_13','slim_p4_14','slim_p4_15','slim_p4_16','slim_p4_17','slim_p4_18','slim_p4_11','slim_p4_10','slim_p4_19','slim_p4_20','slim_p4_21'),
134
+ 5 => array('slim_p3_01','slim_p3_02','slim_p3_03','slim_p3_04','slim_p3_06','slim_p3_05','slim_p3_08','slim_p3_10','slim_p3_09','slim_p3_11'),
135
+ 6 => array('slim_p6_01'),
136
+ 7 => array()
137
+ );
 
 
 
 
 
 
 
 
 
 
 
138
 
139
  // Some boxes are hidden by default
140
+ if (!empty($_GET['page']) && strpos($_GET['page'], 'wp-slim-view-') !== false){
141
  self::$hidden_reports = get_user_option("metaboxhidden_{$page_location}_page_wp-slim-view-".self::$current_tab, $user->ID);
142
+ if (empty(self::$all_reports)){
143
+ self::$all_reports = $all_existing_reports[self::$current_tab];
144
+ }
145
+ else{
146
+ self::$all_reports = array_intersect(self::$all_reports, $all_existing_reports[self::$current_tab]);
147
+ }
148
+ }
149
+ else{ // the script is being called from the dashboard widgets plugin
150
  self::$hidden_reports = get_user_option("metaboxhidden_{$page_location}", $user->ID);
151
+ }
152
 
153
  // Default values
154
  if (self::$hidden_reports === false){
293
 
294
  if (!empty($filters_dropdown)){
295
  foreach($filters_dropdown as $a_filter_label => $a_filter_details){
296
+ if (!array_key_exists($a_filter_label, wp_slimstat_db::$filter_names) || strpos($a_filter_label, 'no_filter') !== false){
297
  continue;
298
  }
299
 
970
  <p><?php _e('Alexa Popularity', 'wp-slimstat') ?> <span><?php echo number_format($rankings['alexa_popularity'], 0, wp_slimstat_db::$formats['decimal'], wp_slimstat_db::$formats['thousand']) ?></span></p><?php
971
  }
972
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
973
  public static function show_world_map($_id = 'p0'){
974
  wp_slimstat_db::$filters_normalized['misc']['limit_results'] = 9999;
975
  $countries = wp_slimstat_db::get_popular('t1.country');
1162
  case 'slim_p1_15':
1163
  self::show_rankings($_report_id);
1164
  break;
 
 
 
1165
  case 'slim_p1_17':
1166
  self::show_results('popular', $_report_id, 'SUBSTRING(t1.language, 1, 2)', array('total_for_percentage' => $current_pageviews, 'as_column' => 'language', 'filter_op' => 'contains'));
1167
  break;
1168
  case 'slim_p2_02':
1169
+ self::show_visitors_summary($_report_id, wp_slimstat_db::count_records_having('visit_id > 0', 'ip'), wp_slimstat_db::count_records('t1.visit_id > 0 AND tb.type <> 1', 'visit_id'));
1170
  break;
1171
  case 'slim_p2_03':
1172
  self::show_results('popular', $_report_id, 'language', array('total_for_percentage' => $current_pageviews));
admin/wp-slimstat-admin.php CHANGED
@@ -5,8 +5,7 @@ class wp_slimstat_admin{
5
  public static $config_url = '';
6
  public static $faulty_fields = array();
7
 
8
- protected static $admin_notice = "Would you like to promote your own free/premium add-on for WP SlimStat? Let us know and we will list it <a href='http://slimstat.getused.to.it/' target='_blank'>on our website</a>.";
9
- //
10
 
11
  /**
12
  * Init -- Sets things up.
@@ -39,9 +38,9 @@ class wp_slimstat_admin{
39
 
40
  // Display a notice that hightlights this version's features
41
  $admin_filemtime = @filemtime(WP_PLUGIN_DIR.'/wp-slimstat/admin/wp-slimstat-admin.php');
42
- if (wp_slimstat::$options['show_admin_notice'] != wp_slimstat::$version && !empty($_GET['page']) && strpos($_GET['page'], 'wp-slim') !== false) {
43
- add_action('admin_notices', array(__CLASS__, 'show_admin_notice'));
44
- }
45
 
46
  // Remove spammers from the database
47
  if (wp_slimstat::$options['ignore_spammers'] == 'yes'){
@@ -318,7 +317,7 @@ class wp_slimstat_admin{
318
  * Removes 'spammers' from the database when the corresponding comments are marked as spam
319
  */
320
  public static function remove_spam($_new_status = '', $_old_status = '', $_comment = ''){
321
- if ($_new_status == 'spam'){
322
  wp_slimstat::$wpdb->query(wp_slimstat::$wpdb->prepare("DELETE ts FROM {$GLOBALS['wpdb']->prefix}slim_stats ts WHERE user = %s OR INET_NTOA(ip) = %s", $_comment->comment_author, $_comment->comment_author_IP));
323
  }
324
  }
@@ -398,7 +397,7 @@ class wp_slimstat_admin{
398
  $new_entry = array();
399
  if (wp_slimstat::$options['use_separate_menu'] == 'yes'){
400
  $new_entry[] = add_menu_page(__('SlimStat','wp-slimstat'), __('SlimStat','wp-slimstat'), $minimum_capability, 'wp-slim-view-1', array(__CLASS__, 'wp_slimstat_include_view'));
401
- $new_entry[] = add_submenu_page('wp-slim-view-1', __('Right Now','wp-slimstat'), __('Right Now','wp-slimstat'), $minimum_capability, 'wp-slim-view-1', array(__CLASS__, 'wp_slimstat_include_view'));
402
  $new_entry[] = add_submenu_page('wp-slim-view-1', __('Overview','wp-slimstat'), __('Overview','wp-slimstat'), $minimum_capability, 'wp-slim-view-2', array(__CLASS__, 'wp_slimstat_include_view'));
403
  $new_entry[] = add_submenu_page('wp-slim-view-1', __('Visitors','wp-slimstat'), __('Visitors','wp-slimstat'), $minimum_capability, 'wp-slim-view-3', array(__CLASS__, 'wp_slimstat_include_view'));
404
  $new_entry[] = add_submenu_page('wp-slim-view-1', __('Content','wp-slimstat'), __('Content','wp-slimstat'), $minimum_capability, 'wp-slim-view-4', array(__CLASS__, 'wp_slimstat_include_view'));
@@ -527,7 +526,7 @@ class wp_slimstat_admin{
527
  if ('wp-slimstat' != $_column_name) return;
528
  $parsed_permalink = parse_url( get_permalink($_post_id) );
529
  $parsed_permalink = $parsed_permalink['path'].(!empty($parsed_permalink['query'])?'?'.$parsed_permalink['query']:'');
530
- wp_slimstat_db::init('resource contains '.$parsed_permalink.'|day equals '.date_i18n('d').'|month equals '.date_i18n('m').'|year equals '.date_i18n('Y').'|interval equals -365');
531
  $count = wp_slimstat_db::count_records();
532
  echo '<a href="'.wp_slimstat_reports::fs_url("resource contains $parsed_permalink&&&day equals ".date_i18n('d').'&&&month equals '.date_i18n('m').'&&&year equals '.date_i18n('Y').'&&&interval equals -365').'">'.$count.'</a>';
533
  }
@@ -597,7 +596,7 @@ class wp_slimstat_admin{
597
  self::show_alert_message(__('There was an error updating the following options:','wp-slimstat').' '.implode(', ', self::$faulty_fields), 'updated below-h2');
598
  }
599
  else{
600
- self::show_alert_message(__('Your settings have been successfully updated.','wp-slimstat'), 'updated below-h2');
601
  }
602
  }
603
 
5
  public static $config_url = '';
6
  public static $faulty_fields = array();
7
 
8
+ protected static $admin_notice = ".";
 
9
 
10
  /**
11
  * Init -- Sets things up.
38
 
39
  // Display a notice that hightlights this version's features
40
  $admin_filemtime = @filemtime(WP_PLUGIN_DIR.'/wp-slimstat/admin/wp-slimstat-admin.php');
41
+ // if (wp_slimstat::$options['show_admin_notice'] != wp_slimstat::$version && !empty($_GET['page']) && strpos($_GET['page'], 'wp-slim') !== false) {
42
+ // add_action('admin_notices', array(__CLASS__, 'show_admin_notice'));
43
+ // }
44
 
45
  // Remove spammers from the database
46
  if (wp_slimstat::$options['ignore_spammers'] == 'yes'){
317
  * Removes 'spammers' from the database when the corresponding comments are marked as spam
318
  */
319
  public static function remove_spam($_new_status = '', $_old_status = '', $_comment = ''){
320
+ if ($_new_status == 'spam' && !empty($_comment->comment_author) && !empty($_comment->comment_author_IP)){
321
  wp_slimstat::$wpdb->query(wp_slimstat::$wpdb->prepare("DELETE ts FROM {$GLOBALS['wpdb']->prefix}slim_stats ts WHERE user = %s OR INET_NTOA(ip) = %s", $_comment->comment_author, $_comment->comment_author_IP));
322
  }
323
  }
397
  $new_entry = array();
398
  if (wp_slimstat::$options['use_separate_menu'] == 'yes'){
399
  $new_entry[] = add_menu_page(__('SlimStat','wp-slimstat'), __('SlimStat','wp-slimstat'), $minimum_capability, 'wp-slim-view-1', array(__CLASS__, 'wp_slimstat_include_view'));
400
+ $new_entry[] = add_submenu_page('wp-slim-view-1', __('Activity Log','wp-slimstat'), __('Activity Log','wp-slimstat'), $minimum_capability, 'wp-slim-view-1', array(__CLASS__, 'wp_slimstat_include_view'));
401
  $new_entry[] = add_submenu_page('wp-slim-view-1', __('Overview','wp-slimstat'), __('Overview','wp-slimstat'), $minimum_capability, 'wp-slim-view-2', array(__CLASS__, 'wp_slimstat_include_view'));
402
  $new_entry[] = add_submenu_page('wp-slim-view-1', __('Visitors','wp-slimstat'), __('Visitors','wp-slimstat'), $minimum_capability, 'wp-slim-view-3', array(__CLASS__, 'wp_slimstat_include_view'));
403
  $new_entry[] = add_submenu_page('wp-slim-view-1', __('Content','wp-slimstat'), __('Content','wp-slimstat'), $minimum_capability, 'wp-slim-view-4', array(__CLASS__, 'wp_slimstat_include_view'));
526
  if ('wp-slimstat' != $_column_name) return;
527
  $parsed_permalink = parse_url( get_permalink($_post_id) );
528
  $parsed_permalink = $parsed_permalink['path'].(!empty($parsed_permalink['query'])?'?'.$parsed_permalink['query']:'');
529
+ wp_slimstat_db::init('resource contains '.$parsed_permalink.'&&&hour equals 0&&&day equals '.date_i18n('d').'&&&month equals '.date_i18n('m').'&&&year equals '.date_i18n('Y').'&&&interval equals -365');
530
  $count = wp_slimstat_db::count_records();
531
  echo '<a href="'.wp_slimstat_reports::fs_url("resource contains $parsed_permalink&&&day equals ".date_i18n('d').'&&&month equals '.date_i18n('m').'&&&year equals '.date_i18n('Y').'&&&interval equals -365').'">'.$count.'</a>';
532
  }
596
  self::show_alert_message(__('There was an error updating the following options:','wp-slimstat').' '.implode(', ', self::$faulty_fields), 'updated below-h2');
597
  }
598
  else{
599
+ self::show_alert_message(__('Your changes have been saved.','wp-slimstat'), 'updated below-h2');
600
  }
601
  }
602
 
databases/maxmind.dat CHANGED
Binary file
readme.txt CHANGED
@@ -3,11 +3,11 @@ Contributors: coolmann
3
  Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=BNJR5EZNY3W38
4
  Tags: analytics, tracking, reports, analyze, wassup, geolocation, online users, spider, tracker, pageviews, stats, maxmind, statistics, statpress
5
  Requires at least: 3.8
6
- Tested up to: 3.8
7
- Stable tag: 3.5.4
8
 
9
  == Description ==
10
- A powerful real-time web analytics plugin for WordPress. Visit our [official site](http://slimstat.getused.to.it/) for more information, or find us on [GitHub](https://github.com/getusedtoit/wp-slimstat) (psst, we have Flattr enabled, there: star our project to donate).
11
 
12
  = Key Features =
13
  * Real-time reports
@@ -66,9 +66,12 @@ Go to SlimStat > Settings > General and set Tracking Mode to Javascript. Don't f
66
  Also, if you're using W3 Total Cache, make sure to exclude wp-slimstat.js from the minifier: our code is already minified, and it looks like W3TC breaks something when it tries to minify it again.
67
 
68
  = My screen goes blank when trying to access the reports / after installing WP SlimStat =
69
- Go to SlimStat > Settings > Maintenance and click on the No Panic Button. If that doesn't help,
70
  [increase the amount of memory](http://codex.wordpress.org/Editing_wp-config.php#Increasing_memory_allocated_to_PHP) allocated to PHP.
71
 
 
 
 
72
  = When trying to access any of options screens, I get the following error: You do not have sufficient permissions to access this page. =
73
  You were playing with the plugin's permission settings, weren't you? But don't worry, there's a secret passage that will allow you to unlock your access. Create a new WordPress admin user named `slimstatadmin`. Then log into your WordPress admin area with the new user and... voila: you can now access WP SlimStat's settings again. Update your users' permissions and then get rid of this newly created user.
74
 
@@ -220,12 +223,12 @@ You will need to edit your template and add something like this where you want y
220
  require_once(WP_PLUGIN_DIR.'/wp-slimstat/admin/view/wp-slimstat-db.php');
221
 
222
  // Initialize the API. You can pass a filter in the options, i.e. show only hits by people who where using Firefox (any version) *and* visiting 'posts':
223
- wp_slimstat_db::init('browser contains Firefox|content_type equals post');
224
 
225
  // Use the appropriate method to display your stats
226
  echo wp_slimstat_db::count_records('1=1', '*', false);`
227
 
228
- You can list more than one filter by using the pipe char | to separate them (which is evaluated as AND among the filters).
229
 
230
  *Available methods*
231
 
@@ -250,29 +253,39 @@ You can list more than one filter by using the pipe char | to separate them (whi
250
 
251
  Recent Posts:
252
 
253
- `wp_slimstat_db::init('content_type equals post|visit_id');
254
  $results = wp_slimstat_db::get_recent('t1.resource');
255
  foreach ($results...`
256
 
257
  Top Languages last month:
258
 
259
- `wp_slimstat_db::init('month equals '.date('n', strtotime('-1 month')));
260
  $results = wp_slimstat_db::get_popular('t1.language');
261
  foreach ($results...`
262
 
263
  == Screenshots ==
264
 
265
  1. **Overview** - Your website traffic at a glance
266
- 2. **Right Now** - A real-time view of your visitors' whereabouts
267
  3. **Settings** - Plenty of options to customize the plugin's behavior
268
  4. **Interactive World Map** - See where your visitors are coming from
269
  5. **Responsive layout** - Keep an eye on your reports on the go
270
 
271
  == Changelog ==
272
 
 
 
 
 
 
 
 
 
 
273
 
274
  = 3.5.4 =
275
  * [Note] Update your free and premium add-ons to the latest version available!
 
276
  * [New] When Convert IP Addresses is enabled, hostnames are shown along with IP addresses, not instead of (thank you, Simas)
277
  * [New] Added a new switch to turn 'Debug Mode' on (under Settings > Advanced)
278
  * [New] Consolidated report functions to use the new DB API filter format
@@ -344,49 +357,6 @@ foreach ($results...`
344
  * [Update] MaxMind / Geolocation database updated to December 2013
345
  * [Fix] Bug on masking IP Addresses on 32-bit systems (thank you, Per)
346
 
347
- = 3.4.3 =
348
- * [Fix] Bug in parsing the data returned by Alexa (new Rankings report) was causing some reports to disappear (thank you, [pepe](http://wordpress.org/support/topic/php-warnings-in-rankings-box))
349
- * [Fix] A few PHP notices (thank you, [supriyos](http://wordpress.org/support/topic/errors-after-upgrading-to-342))
350
- * [Fix] Bug in masking local IP addresses (thank you, [carbeck](http://wordpress.org/support/topic/1272552550-1))
351
-
352
- = 3.4.2 =
353
- * [New] Three new reports give you detailed information about your rankings (Google, Facebook, Alexa), your content and your site's security.
354
- * [Update] Complete Russian Localization (thank you, Vitaly!)
355
- * [Update] Top Browsers now groups browsers by name, if the user agent string is not enabled/displayed (thank you, Vitaly)
356
- * [Update] Much improved language detection and localization (thank you, Vitaly)
357
- * [Update] By default only admins can now see the stats (minimum capability to view: activate_plugins).
358
- * [Update] Removed unused languages from the dictionary (who is using operating systems in Herero, Igbo, Hiri Motu, Church Slavic anyway?)
359
- * [Update] Optimized code to manage the plugin's options (removed unnecessary db interactions)
360
- * [Update] World Map ([AmMap](http://www.ammap.com/download/)) updated to version 3.7
361
- * [Update] MaxMind / Geolocation database updated to November 2013
362
- * [Update] Consolidated reports and improved performance on Overview tab
363
- * [Fix] Bug in converting some IP addresses to long integers (thank you, [tkleinsteuber](http://wordpress.org/support/topic/wrong-geolocation-for-rfc-1918-private-ip-ranges))
364
- * [Fix] Some PHP warnings about undefined variables
365
-
366
- = 3.4.1 =
367
- * [New] Report to visualize top Outbound Links and Downloads (thank you, [bobinoz](http://wordpress.org/support/topic/tracking-outbound-links-1))
368
- * [New] Purge data by user agent (thank you, [GermanKiwi](http://wordpress.org/support/topic/purge-data-based-on-user-agent))
369
- * [New] Import/Export all your settings in a text file. Go to Settings > Maintenance and give it a try! (thank you, [Mike](http://wordpress.org/support/topic/feature-request-save-out-settings))
370
- * [Update] Cosmetic updates to the interface
371
- * [Update] Right Now Extended is now set to 'No' by default
372
- * [Fix] Filters were not being reset if API was invoked more than once on the same page (thank you, [PV-Patrick](http://wordpress.org/support/topic/api-calls-in-the_loop))
373
- * [Fix] Compatibility issues with User Overview (thank you, Thorsten)
374
- * [Fix] Bug affecting the data recorded when URLs were using non-ASCII characters (thank you, [dimitrios1988](http://wordpress.org/support/topic/stats-now-showing-in-non-ascii-characters))
375
- * [Fix] Compatibility issues with Export to Excel
376
- * [Fix] Bug related to the new HTTP POST-based Filtering system
377
- * [Fix] Issue with French localization encoding (thank you [whoaloic](http://wordpress.org/support/topic/foreign-language-encoding-issue))
378
- * [Fix] Elaborated on how to use multiple filters with the API (thank you, [Statistiker](http://wordpress.org/support/topic/filter-most-popular-posts))
379
-
380
- = 3.4 =
381
- * [Note] We can't believe we're already crossing the 600,000 downloads mark! To celebrate this accomplishment, we're working on a brand new website! Stay tuned.
382
- * [New] Local IP Addresses are now marked as such (thank you, [Thorsten](http://wordpress.org/support/topic/wrong-geolocation-for-rfc-1918-private-ip-ranges))
383
- * [Update] SlimStat's filters have been reimplemented to use HTTP POST requests, in order to avoid issues with very long URIs (thank you, John)
384
- * [Update] You can now restrict access to the configuration screens by specifying the minimum capability required (default: activate_plugins)
385
- * [Update] Localization files have consolidated and are now easier to manage. Send us your localization!
386
- * [Fix] Clicking on report titles doesn't collapse the box anymore (thank you, psn)
387
- * [Fix] Minor fixes to the Javascript used on admin pages
388
- * [Fix] Restored compatibility with the plugin Dashboard Widgets
389
-
390
  == Distinguished Users ==
391
 
392
  * [Vitaly](http://www.visbiz.org/) - Volunteered quite a lot of time for QA and testing, and provided the complete Russian localization
3
  Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=BNJR5EZNY3W38
4
  Tags: analytics, tracking, reports, analyze, wassup, geolocation, online users, spider, tracker, pageviews, stats, maxmind, statistics, statpress
5
  Requires at least: 3.8
6
+ Tested up to: 3.8.1
7
+ Stable tag: 3.5.5
8
 
9
  == Description ==
10
+ The most accurate real-time statistics plugin for WordPress. Visit our [official site](http://slimstat.getused.to.it/) for more information, or find us on [GitHub](https://github.com/getusedtoit/wp-slimstat) (psst, we have Flattr enabled, there: star our project to donate).
11
 
12
  = Key Features =
13
  * Real-time reports
66
  Also, if you're using W3 Total Cache, make sure to exclude wp-slimstat.js from the minifier: our code is already minified, and it looks like W3TC breaks something when it tries to minify it again.
67
 
68
  = My screen goes blank when trying to access the reports / after installing WP SlimStat =
69
+ Go to SlimStat > Settings > Maintenance and click the NO PANIC Button. If that doesn't help,
70
  [increase the amount of memory](http://codex.wordpress.org/Editing_wp-config.php#Increasing_memory_allocated_to_PHP) allocated to PHP.
71
 
72
+ = Reports look all messy and not styled =
73
+ Go to SlimStat > Settings > Maintenance and click the NO PANIC Button. If that doesn't help, make sure you don't have AdBlock installed and active in your browser. For some reason, that plugin doesn't like WP SlimStat.
74
+
75
  = When trying to access any of options screens, I get the following error: You do not have sufficient permissions to access this page. =
76
  You were playing with the plugin's permission settings, weren't you? But don't worry, there's a secret passage that will allow you to unlock your access. Create a new WordPress admin user named `slimstatadmin`. Then log into your WordPress admin area with the new user and... voila: you can now access WP SlimStat's settings again. Update your users' permissions and then get rid of this newly created user.
77
 
223
  require_once(WP_PLUGIN_DIR.'/wp-slimstat/admin/view/wp-slimstat-db.php');
224
 
225
  // Initialize the API. You can pass a filter in the options, i.e. show only hits by people who where using Firefox (any version) *and* visiting 'posts':
226
+ wp_slimstat_db::init('browser contains Firefox&&&content_type equals post');
227
 
228
  // Use the appropriate method to display your stats
229
  echo wp_slimstat_db::count_records('1=1', '*', false);`
230
 
231
+ You can list more than one filter by using &&& to separate them (which is evaluated as AND among the filters). Please read [these FAQs](http://wordpress.org/plugins/wp-slimstat-shortcodes/faq/) for more information on how to combine filters.
232
 
233
  *Available methods*
234
 
253
 
254
  Recent Posts:
255
 
256
+ `wp_slimstat_db::init('content_type equals post');
257
  $results = wp_slimstat_db::get_recent('t1.resource');
258
  foreach ($results...`
259
 
260
  Top Languages last month:
261
 
262
+ `wp_slimstat_db::init('month equals last month');
263
  $results = wp_slimstat_db::get_popular('t1.language');
264
  foreach ($results...`
265
 
266
  == Screenshots ==
267
 
268
  1. **Overview** - Your website traffic at a glance
269
+ 2. **Activity Log** - A real-time view of your visitors' whereabouts
270
  3. **Settings** - Plenty of options to customize the plugin's behavior
271
  4. **Interactive World Map** - See where your visitors are coming from
272
  5. **Responsive layout** - Keep an eye on your reports on the go
273
 
274
  == Changelog ==
275
 
276
+ = 3.5.5 =
277
+ * [Note] Our partnership with HackerNinja.com ended a few days ago, we wish them all the best for their business!
278
+ * [New] The new DB API supports natural language dates: day equals today, year equals this year, etc. This brings the [Shortcodes](http://wordpress.org/plugins/wp-slimstat-shortcodes/) add-on to a whole new level of flexibility!
279
+ * [Update] Right Now has been renamed Activity Log
280
+ * [Fix] We can't believe nobody had noticed a bug in calculating the bounce rate value. Numbers were way off! (thank you, Rob)
281
+ * [Fix] User Overview add-on had some problems with sorting by certain columns
282
+ * [Fix] Filters were not being reset when multiple shortcodes were being used on the same page (thank you, [joachimcarrein](http://wordpress.org/support/topic/filters-remembered))
283
+ * [Fix] Pageviews in the Edit Posts panel were not being properly calculated (thank you, [Aljoscha](http://wordpress.org/support/topic/updated-to-354-no-statistics))
284
+ * [Fix] The Add-Ons page was not working as expected.
285
 
286
  = 3.5.4 =
287
  * [Note] Update your free and premium add-ons to the latest version available!
288
+ * [New] If you're using the APIs, our filter separator changed from | to &&& (three ampersand chars). Please update your code accordingly.
289
  * [New] When Convert IP Addresses is enabled, hostnames are shown along with IP addresses, not instead of (thank you, Simas)
290
  * [New] Added a new switch to turn 'Debug Mode' on (under Settings > Advanced)
291
  * [New] Consolidated report functions to use the new DB API filter format
357
  * [Update] MaxMind / Geolocation database updated to December 2013
358
  * [Fix] Bug on masking IP Addresses on 32-bit systems (thank you, Per)
359
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
360
  == Distinguished Users ==
361
 
362
  * [Vitaly](http://www.visbiz.org/) - Volunteered quite a lot of time for QA and testing, and provided the complete Russian localization
wp-slimstat.php CHANGED
@@ -2,8 +2,8 @@
2
  /*
3
  Plugin Name: WP SlimStat
4
  Plugin URI: http://wordpress.org/plugins/wp-slimstat/
5
- Description: A powerful real-time web analytics plugin for Wordpress.
6
- Version: 3.5.4
7
  Author: Camu
8
  Author URI: http://slimstat.getused.to.it/
9
  */
@@ -11,7 +11,7 @@ Author URI: http://slimstat.getused.to.it/
11
  if (!empty(wp_slimstat::$options)) return true;
12
 
13
  class wp_slimstat{
14
- public static $version = '3.5.4';
15
  public static $options = array();
16
 
17
  public static $wpdb = '';
@@ -1175,7 +1175,7 @@ class wp_slimstat{
1175
  $slimstat_config_url = get_site_url($GLOBALS['blog_id'], "/wp-admin/$slimstat_config_url?page=wp-slim-config");
1176
 
1177
  $GLOBALS['wp_admin_bar']->add_menu(array('id' => 'slimstat-header', 'title' => 'SlimStat', 'href' => "{$slimstat_view_url}1"));
1178
- $GLOBALS['wp_admin_bar']->add_menu(array('id' => 'slimstat-panel1', 'href' => "{$slimstat_view_url}1", 'parent' => 'slimstat-header', 'title' => __('Right Now', 'wp-slimstat')));
1179
  $GLOBALS['wp_admin_bar']->add_menu(array('id' => 'slimstat-panel2', 'href' => "{$slimstat_view_url}2", 'parent' => 'slimstat-header', 'title' => __('Overview', 'wp-slimstat')));
1180
  $GLOBALS['wp_admin_bar']->add_menu(array('id' => 'slimstat-panel3', 'href' => "{$slimstat_view_url}3", 'parent' => 'slimstat-header', 'title' => __('Visitors', 'wp-slimstat')));
1181
  $GLOBALS['wp_admin_bar']->add_menu(array('id' => 'slimstat-panel4', 'href' => "{$slimstat_view_url}4", 'parent' => 'slimstat-header', 'title' => __('Content', 'wp-slimstat')));
2
  /*
3
  Plugin Name: WP SlimStat
4
  Plugin URI: http://wordpress.org/plugins/wp-slimstat/
5
+ Description: The most accurate real-time statistics plugin for WordPress
6
+ Version: 3.5.5
7
  Author: Camu
8
  Author URI: http://slimstat.getused.to.it/
9
  */
11
  if (!empty(wp_slimstat::$options)) return true;
12
 
13
  class wp_slimstat{
14
+ public static $version = '3.5.5';
15
  public static $options = array();
16
 
17
  public static $wpdb = '';
1175
  $slimstat_config_url = get_site_url($GLOBALS['blog_id'], "/wp-admin/$slimstat_config_url?page=wp-slim-config");
1176
 
1177
  $GLOBALS['wp_admin_bar']->add_menu(array('id' => 'slimstat-header', 'title' => 'SlimStat', 'href' => "{$slimstat_view_url}1"));
1178
+ $GLOBALS['wp_admin_bar']->add_menu(array('id' => 'slimstat-panel1', 'href' => "{$slimstat_view_url}1", 'parent' => 'slimstat-header', 'title' => __('Activity Log', 'wp-slimstat')));
1179
  $GLOBALS['wp_admin_bar']->add_menu(array('id' => 'slimstat-panel2', 'href' => "{$slimstat_view_url}2", 'parent' => 'slimstat-header', 'title' => __('Overview', 'wp-slimstat')));
1180
  $GLOBALS['wp_admin_bar']->add_menu(array('id' => 'slimstat-panel3', 'href' => "{$slimstat_view_url}3", 'parent' => 'slimstat-header', 'title' => __('Visitors', 'wp-slimstat')));
1181
  $GLOBALS['wp_admin_bar']->add_menu(array('id' => 'slimstat-panel4', 'href' => "{$slimstat_view_url}4", 'parent' => 'slimstat-header', 'title' => __('Content', 'wp-slimstat')));