Slimstat Analytics - Version 4.6.9.1

Version Description

  • [New] You can now customize the "past days" interval to be used as the default time range to calculate your metrics, which was previously fixed to 30 days.
  • [Fix] The Overview chart was not working as expected for some users, because of a bug in one of the revised SQL queries.
  • [Fix] The pageview count on the Edit Posts/Pages screens was also affected by the same bug mentioned here above.
Download this release

Release Info

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

Code changes from version 4.6.8 to 4.6.9.1

admin/config/index.php CHANGED
@@ -89,8 +89,9 @@ $settings = array(
89
  'general_integration_header' => array( 'description' => __( 'WordPress Integration', 'wp-slimstat' ), 'type' => 'section_header' ),
90
  'add_dashboard_widgets' => array( 'description' => __( 'Dashboard Widgets', 'wp-slimstat' ), 'type' => 'toggle', 'long_description' => __( 'Enable this option if you want to add reports to your WordPress Dashboard. Use the Customizer to choose which ones to display.', 'wp-slimstat' ) ),
91
  'use_separate_menu' => array( 'description' => __( 'Menu Position', 'wp-slimstat' ), 'type' => 'toggle', 'long_description' => __( 'Choose between a standalone admin menu for Slimstat or a drop down in the admin bar (if visible).', 'wp-slimstat' ), 'custom_label_on' => __( 'Side', 'wp-slimstat' ), 'custom_label_off' => __( 'Bar', 'wp-slimstat' ) ),
 
92
  'add_posts_column' => array( 'description' => __('Posts and Pages','wp-slimstat'), 'type' => 'toggle', 'long_description' => __('Add a new column to the Edit Posts/Pages screens, with the number of hits per post within the timeframe specified here below.','wp-slimstat') ),
93
- 'posts_column_day_interval' => array( 'description' => __('Report Interval','wp-slimstat'), 'type' => 'integer', 'long_description' => __('Enter the time range, in days, that should be used to calculate the value here above.','wp-slimstat') ),
94
  'posts_column_pageviews' => array( 'description' => __( 'Report Type','wp-slimstat' ), 'type' => 'toggle', 'long_description' => __( 'Select what kind of information you would like to see displayed on your Posts admin screen. Hits counts all the pageviews regardless of the user, (unique) IPs counts only one hit per IP in the given time range.', 'wp-slimstat' ), 'custom_label_on' => __( 'Hits', 'wp-slimstat' ), 'custom_label_off' => __( 'IPs', 'wp-slimstat' ) ),
95
  'hide_addons' => array( 'description' => __( 'Hide Add-ons', 'wp-slimstat' ), 'type' => 'toggle', 'long_description' => __( 'Enable this option to hide all your <strong>active</strong> premium add-ons from the list of plugins in WordPress. Please note that you will still receive updates for hidden add-ons.', 'wp-slimstat' ) ),
96
 
@@ -143,6 +144,7 @@ $settings = array(
143
  'ignore_resources' => array('description' => __('Permalinks','wp-slimstat'), 'type' => 'textarea', 'long_description' => __("List all the URLs on your website that you don't want to track. Don't include the domain name: <em>/about, ?p=1</em>, etc. Wildcards: <code>*</code> matches 'any string, including the empty string', <code>!</code> matches 'any character'. For example, <code>/abou*</code> will match /about and /abound, <code>/abo*t</code> will match /aboundant and /about, <code>/abo!t</code> will match /about and /abort. Strings are case-insensitive.",'wp-slimstat')),
144
  'ignore_countries' => array('description' => __('Countries','wp-slimstat'), 'type' => 'textarea', 'long_description' => __("Country codes (i.e.: <code>en-us, it, es</code>) that you don't want to track.",'wp-slimstat')),
145
  'ignore_browsers' => array('description' => __('User Agents','wp-slimstat'), 'type' => 'textarea', 'long_description' => __("Browsers (user agents) you don't want to track. You can specify the browser's version adding a slash after the name (i.e. <em>Firefox/3.6</em>). Wildcards: <code>*</code> matches 'any string, including the empty string', <code>!</code> matches 'any character'. For example, <code>Chr*</code> will match Chrome and Chromium, <code>IE/!.0</code> will match IE/7.0 and IE/8.0. Strings are case-insensitive.",'wp-slimstat')),
 
146
  'ignore_referers' => array('description' => __('Referring Sites','wp-slimstat'), 'type' => 'textarea', 'long_description' => __("Referring URLs that you don't want to track: <code>http://mysite.com*</code>, <code>*/ignore-me-please</code>, etc. Wildcards: <code>*</code> matches 'any string, including the empty string', <code>!</code> matches 'any character'. Strings are case-insensitive. Please include either a wildcard or the protocol you want to filter (http://, https://).",'wp-slimstat')),
147
 
148
  'filters_miscellaneous_header' => array('description' => __('Miscellaneous','wp-slimstat'), 'type' => 'section_header'),
@@ -164,7 +166,7 @@ $settings = array(
164
 
165
  'reports_functionality_header' => array( 'description' => __( 'Functionality', 'wp-slimstat' ), 'type' => 'section_header' ),
166
  'async_load' => array( 'description' => __( 'Async Mode', 'wp-slimstat' ), 'type' => 'toggle', 'long_description' => __( 'Activate this feature if your reports take a while to load. It breaks down the load on your server into multiple requests, thus avoiding memory issues and performance problems.', 'wp-slimstat' ) ),
167
- 'use_current_month_timespan' => array( 'description' => __( 'Default Time Span', 'wp-slimstat' ), 'type' => 'toggle', 'long_description' => __( 'Determine what is the default time period for calculating all the data in each report: current month or past 30 days. You can always use the time filter dropdown to customize this value even further.', 'wp-slimstat' ), 'custom_label_on' => 'Month', 'custom_label_off' => '30 Days' ),
168
  'expand_details' => array('description' => __('Expand Details','wp-slimstat'), 'type' => 'toggle', 'long_description' => __("Expand each row's details by default, insted of on mousehover.",'wp-slimstat')),
169
  'rows_to_show' => array('description' => __('Rows to Display','wp-slimstat'), 'type' => 'integer', 'long_description' => __('Specify the number of items in each report.','wp-slimstat')),
170
  'limit_results' => array( 'description' => __( 'Max Results','wp-slimstat' ), 'type' => 'integer', 'long_description' => __( 'Decide how many records should be retrieved from the database in total. Depending on your server configuration, you may want to fine tune this value to avoid exceeding your PHP memory limit.', 'wp-slimstat' ) ),
89
  'general_integration_header' => array( 'description' => __( 'WordPress Integration', 'wp-slimstat' ), 'type' => 'section_header' ),
90
  'add_dashboard_widgets' => array( 'description' => __( 'Dashboard Widgets', 'wp-slimstat' ), 'type' => 'toggle', 'long_description' => __( 'Enable this option if you want to add reports to your WordPress Dashboard. Use the Customizer to choose which ones to display.', 'wp-slimstat' ) ),
91
  'use_separate_menu' => array( 'description' => __( 'Menu Position', 'wp-slimstat' ), 'type' => 'toggle', 'long_description' => __( 'Choose between a standalone admin menu for Slimstat or a drop down in the admin bar (if visible).', 'wp-slimstat' ), 'custom_label_on' => __( 'Side', 'wp-slimstat' ), 'custom_label_off' => __( 'Bar', 'wp-slimstat' ) ),
92
+ 'posts_column_day_interval' => array( 'description' => __('Report Interval','wp-slimstat'), 'type' => 'integer', 'long_description' => __('Enter the time range, in days, that should be used to count the number of pageviews on Posts/Pages (see option here below) and for the Default Time Span option under the Reports tab.','wp-slimstat') ),
93
  'add_posts_column' => array( 'description' => __('Posts and Pages','wp-slimstat'), 'type' => 'toggle', 'long_description' => __('Add a new column to the Edit Posts/Pages screens, with the number of hits per post within the timeframe specified here below.','wp-slimstat') ),
94
+
95
  'posts_column_pageviews' => array( 'description' => __( 'Report Type','wp-slimstat' ), 'type' => 'toggle', 'long_description' => __( 'Select what kind of information you would like to see displayed on your Posts admin screen. Hits counts all the pageviews regardless of the user, (unique) IPs counts only one hit per IP in the given time range.', 'wp-slimstat' ), 'custom_label_on' => __( 'Hits', 'wp-slimstat' ), 'custom_label_off' => __( 'IPs', 'wp-slimstat' ) ),
96
  'hide_addons' => array( 'description' => __( 'Hide Add-ons', 'wp-slimstat' ), 'type' => 'toggle', 'long_description' => __( 'Enable this option to hide all your <strong>active</strong> premium add-ons from the list of plugins in WordPress. Please note that you will still receive updates for hidden add-ons.', 'wp-slimstat' ) ),
97
 
144
  'ignore_resources' => array('description' => __('Permalinks','wp-slimstat'), 'type' => 'textarea', 'long_description' => __("List all the URLs on your website that you don't want to track. Don't include the domain name: <em>/about, ?p=1</em>, etc. Wildcards: <code>*</code> matches 'any string, including the empty string', <code>!</code> matches 'any character'. For example, <code>/abou*</code> will match /about and /abound, <code>/abo*t</code> will match /aboundant and /about, <code>/abo!t</code> will match /about and /abort. Strings are case-insensitive.",'wp-slimstat')),
145
  'ignore_countries' => array('description' => __('Countries','wp-slimstat'), 'type' => 'textarea', 'long_description' => __("Country codes (i.e.: <code>en-us, it, es</code>) that you don't want to track.",'wp-slimstat')),
146
  'ignore_browsers' => array('description' => __('User Agents','wp-slimstat'), 'type' => 'textarea', 'long_description' => __("Browsers (user agents) you don't want to track. You can specify the browser's version adding a slash after the name (i.e. <em>Firefox/3.6</em>). Wildcards: <code>*</code> matches 'any string, including the empty string', <code>!</code> matches 'any character'. For example, <code>Chr*</code> will match Chrome and Chromium, <code>IE/!.0</code> will match IE/7.0 and IE/8.0. Strings are case-insensitive.",'wp-slimstat')),
147
+ 'ignore_platforms' => array('description' => __('Operating Systems','wp-slimstat'), 'type' => 'textarea', 'long_description' => __("Operating system codes you don't want to track. Please refer to <a href='https://slimstat.freshdesk.com/solution/articles/12000031504-what-are-the-operating-system-codes-used-by-slimstat-' target='_blank'>this page</a> in our knowledge base to learn more about what codes you can use. Usual rules for using wildcards apply (see fields here above).",'wp-slimstat')),
148
  'ignore_referers' => array('description' => __('Referring Sites','wp-slimstat'), 'type' => 'textarea', 'long_description' => __("Referring URLs that you don't want to track: <code>http://mysite.com*</code>, <code>*/ignore-me-please</code>, etc. Wildcards: <code>*</code> matches 'any string, including the empty string', <code>!</code> matches 'any character'. Strings are case-insensitive. Please include either a wildcard or the protocol you want to filter (http://, https://).",'wp-slimstat')),
149
 
150
  'filters_miscellaneous_header' => array('description' => __('Miscellaneous','wp-slimstat'), 'type' => 'section_header'),
166
 
167
  'reports_functionality_header' => array( 'description' => __( 'Functionality', 'wp-slimstat' ), 'type' => 'section_header' ),
168
  'async_load' => array( 'description' => __( 'Async Mode', 'wp-slimstat' ), 'type' => 'toggle', 'long_description' => __( 'Activate this feature if your reports take a while to load. It breaks down the load on your server into multiple requests, thus avoiding memory issues and performance problems.', 'wp-slimstat' ) ),
169
+ 'use_current_month_timespan' => array( 'description' => __( 'Default Time Span', 'wp-slimstat' ), 'type' => 'toggle', 'long_description' => __( 'Determine what is the default time period for calculating all the data in each report: current month or past given number of days. The number of days is defined under Basic > Report Interval. You can always use the time filter dropdown to customize this value even further.', 'wp-slimstat' ), 'custom_label_on' => 'Month', 'custom_label_off' => 'Days' ),
170
  'expand_details' => array('description' => __('Expand Details','wp-slimstat'), 'type' => 'toggle', 'long_description' => __("Expand each row's details by default, insted of on mousehover.",'wp-slimstat')),
171
  'rows_to_show' => array('description' => __('Rows to Display','wp-slimstat'), 'type' => 'integer', 'long_description' => __('Specify the number of items in each report.','wp-slimstat')),
172
  'limit_results' => array( 'description' => __( 'Max Results','wp-slimstat' ), 'type' => 'integer', 'long_description' => __( 'Decide how many records should be retrieved from the database in total. Depending on your server configuration, you may want to fine tune this value to avoid exceeding your PHP memory limit.', 'wp-slimstat' ) ),
admin/css/slimstat.css CHANGED
@@ -701,8 +701,8 @@
701
  }
702
  @font-face {
703
  font-family: 'slimstat';
704
- src: url('data:application/octet-stream;base64,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') format('woff'),
705
- url('data:application/octet-stream;base64,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ICAgsAUmIC5HI0cjYSM8OC2wOCywABYgsAgjQiAgIEYjR7ABKyNhOC2wOSywABawAyWwAiVHI0cjYbAAVFguIDwjIRuwAiWwAiVHI0cjYSCwBSWwBCVHI0cjYbAGJbAFJUmwAiVhuQgACABjYyMgWGIbIVljuAQAYiCwAFBYsEBgWWawAWNgIy4jICA8ijgjIVktsDossAAWILAIQyAuRyNHI2EgYLAgYGawAmIgsABQWLBAYFlmsAFjIyAgPIo4LbA7LCMgLkawAiVGUlggPFkusSsBFCstsDwsIyAuRrACJUZQWCA8WS6xKwEUKy2wPSwjIC5GsAIlRlJYIDxZIyAuRrACJUZQWCA8WS6xKwEUKy2wPiywNSsjIC5GsAIlRlJYIDxZLrErARQrLbA/LLA2K4ogIDywBCNCijgjIC5GsAIlRlJYIDxZLrErARQrsARDLrArKy2wQCywABawBCWwBCYgLkcjRyNhsAlDKyMgPCAuIzixKwEUKy2wQSyxCAQlQrAAFrAEJbAEJSAuRyNHI2EgsAQjQrAJQysgsGBQWCCwQFFYswIgAyAbswImAxpZQkIjIEewBEOwAmIgsABQWLBAYFlmsAFjYCCwASsgiophILACQ2BkI7ADQ2FkUFiwAkNhG7ADQ2BZsAMlsAJiILAAUFiwQGBZZrABY2GwAiVGYTgjIDwjOBshICBGI0ewASsjYTghWbErARQrLbBCLLA1Ky6xKwEUKy2wQyywNishIyAgPLAEI0IjOLErARQrsARDLrArKy2wRCywABUgR7AAI0KyAAEBFRQTLrAxKi2wRSywABUgR7AAI0KyAAEBFRQTLrAxKi2wRiyxAAEUE7AyKi2wRyywNCotsEgssAAWRSMgLiBGiiNhOLErARQrLbBJLLAII0KwSCstsEossgAAQSstsEsssgABQSstsEwssgEAQSstsE0ssgEBQSstsE4ssgAAQistsE8ssgABQistsFAssgEAQistsFEssgEBQistsFIssgAAPistsFMssgABPistsFQssgEAPistsFUssgEBPistsFYssgAAQCstsFcssgABQCstsFgssgEAQCstsFkssgEBQCstsFossgAAQystsFsssgABQystsFwssgEAQystsF0ssgEBQystsF4ssgAAPystsF8ssgABPystsGAssgEAPystsGEssgEBPystsGIssDcrLrErARQrLbBjLLA3K7A7Ky2wZCywNyuwPCstsGUssAAWsDcrsD0rLbBmLLA4Ky6xKwEUKy2wZyywOCuwOystsGgssDgrsDwrLbBpLLA4K7A9Ky2waiywOSsusSsBFCstsGsssDkrsDsrLbBsLLA5K7A8Ky2wbSywOSuwPSstsG4ssDorLrErARQrLbBvLLA6K7A7Ky2wcCywOiuwPCstsHEssDorsD0rLbByLLMJBAIDRVghGyMhWUIrsAhlsAMkUHiwARUwLQBLuADIUlixAQGOWbABuQgACABjcLEABUKxAAAqsQAFQrEACCqxAAVCsQAIKrEABUK5AAAACSqxAAVCuQAAAAkqsQMARLEkAYhRWLBAiFixA2REsSYBiFFYugiAAAEEQIhjVFixAwBEWVlZWbEADCq4Af+FsASNsQIARAA=') format('truetype');
706
  }
707
  [class^="slimstat-font-"]:before, [class*=" slimstat-font-"]:before {
708
  color: #aaa;
@@ -748,6 +748,7 @@
748
  .slimstat-font-docs:before { content: '\e816'; } /* '' */
749
  .slimstat-font-user-plus:before { content: '\e817'; } /* '' */
750
  .slimstat-font-user-times:before { content: '\e818'; } /* '' */
 
751
 
752
  .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)}}
753
 
701
  }
702
  @font-face {
703
  font-family: 'slimstat';
704
+ src: url('data:application/octet-stream;base64,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') format('woff'),
705
+ url('data:application/octet-stream;base64,AAEAAAAPAIAAAwBwR1NVQiCLJXoAAAD8AAAAVE9TLzI+UEk6AAABUAAAAFZjbWFwDgfuNQAAAagAAALOY3Z0IAcz/qQAACJEAAAAIGZwZ22KkZBZAAAiZAAAC3BnYXNwAAAAEAAAIjwAAAAIZ2x5ZilyI9cAAAR4AAAYQmhlYWQOp0OgAAAcvAAAADZoaGVhB8oD9gAAHPQAAAAkaG10eFtq//kAAB0YAAAAbGxvY2FIdk6NAAAdhAAAADhtYXhwAUkL+QAAHbwAAAAgbmFtZUhCRHEAAB3cAAADCXBvc3R0zYSJAAAg6AAAAVJwcmVw5UErvAAALdQAAACGAAEAAAAKADAAPgACREZMVAAObGF0bgAaAAQAAAAAAAAAAQAAAAQAAAAAAAAAAQAAAAFsaWdhAAgAAAABAAAAAQAEAAQAAAABAAgAAQAGAAAAAQAAAAEDYwGQAAUAAAJ6ArwAAACMAnoCvAAAAeAAMQECAAACAAUDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBmRWQAQOgA6BkDUv9qAFoDgQDGAAAAAQAAAAAAAAAAAAUAAAADAAAALAAAAAQAAAGGAAEAAAAAAIAAAwABAAAALAADAAoAAAGGAAQAVAAAAAQABAABAADoGf//AADoAP//AAAAAQAEAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaAAABBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAFIAAAAAAAAABoAAOgAAADoAAAAAAEAAOgBAADoAQAAAAIAAOgCAADoAgAAAAMAAOgDAADoAwAAAAQAAOgEAADoBAAAAAUAAOgFAADoBQAAAAYAAOgGAADoBgAAAAcAAOgHAADoBwAAAAgAAOgIAADoCAAAAAkAAOgJAADoCQAAAAoAAOgKAADoCgAAAAsAAOgLAADoCwAAAAwAAOgMAADoDAAAAA0AAOgNAADoDQAAAA4AAOgOAADoDgAAAA8AAOgPAADoDwAAABAAAOgQAADoEAAAABEAAOgRAADoEQAAABIAAOgSAADoEgAAABMAAOgTAADoEwAAABQAAOgUAADoFAAAABUAAOgVAADoFQAAABYAAOgWAADoFgAAABcAAOgXAADoFwAAABgAAOgYAADoGAAAABkAAOgZAADoGQAAABoAAAACAAD/agM4A1IABwALAG1LsBFQWEAmAAEAAAFjAAQDBQMEBW0HAQUFbgIBAAMDAFICAQAAA1cGAQMAA0sbQCUAAQABbwAEAwUDBAVtBwEFBW4CAQADAwBSAgEAAANXBgEDAANLWUAUCAgAAAgLCAsKCQAHAAcREREIBRcrETUhNTMVIRUBESERASH2ASH88wLiAnmNTEyN/PECpP1cAAAAA//9/7EDXwMLABQAIQAuAEBAPQ4BAQIJAQIAAQJHAAIDAQMCAW0ABgADAgYDYAABAAAEAQBgAAQFBQRUAAQEBVgABQQFTBUWFRYjJiMHBRsrARUUBisBIiY9ATQ2OwE1NDY7ATIWFzQuAQ4DHgI+ATcUDgEiLgI+ATIeAQH0CgiyCAoKCH0KByQICuhSiqaMUAJUiKqGVntyxujIbgZ6vPS6fgIi+gcKCgckCArECAoKzFOKVAJQjqKOUAJUilN1xHR0xOrEdHTEAAAAAv///2oDoQMNAAgAIQAyQC8fAQEADgEDAQJHAAIDAnAABAAAAQQAYAABAwMBVAABAQNYAAMBA0wXIxQTEgUFGSsBNC4BBh4BPgEBFAYiLwEGIyIuAj4EHgIXFAcXFgKDlMyWBI7UjAEiLDoUv2R7UJJoQAI8bI6kjHA4A0W/FQGCZ5IClsqYBoz+mh0qFb9FPmqQoo5uOgRCZpZNe2S/FQAAAAABAAD/7wLUAoYAJAAeQBsiGRAHBAACAUcDAQIAAm8BAQAAZhQcFBQEBRgrJRQPAQYiLwEHBiIvASY0PwEnJjQ/ATYyHwE3NjIfARYUDwEXFgLUD0wQLBCkpBAsEEwQEKSkEBBMECwQpKQQLBBMDw+kpA9wFhBMDw+lpQ8PTBAsEKSkECwQTBAQpKQQEEwPLg+kpA8ABAAA//kDoQNSAAgAEQAnAD8AkkALPAEICQkAAgEAAkdLsAxQWEAzAAkICW8KAQgECG8ABwQFBAcFbQAFAAEFYwYBBAIBAAEEAGAAAQMDAVQAAQEDWQADAQNNG0A0AAkICW8KAQgECG8ABwQFBAcFbQAFAAQFAGsGAQQCAQABBABgAAEDAwFUAAEBA1kAAwEDTVlAED89OjglFiISJTkUExILBR0rJTQuAQYeAT4BNzQuAQ4BFj4BNxUUBgchIiYnNTQ2MyEXFjI/ASEyFgMWDwEGIi8BJjc2OwE1NDY3MzIWBxUzMgLKFB4WAhIiEJEUIBICFhwYRiAW/MsXHgEgFgEDSyFWIUwBAxYgtgoS+goeCvoRCQoXjxYOjw4WAY8YZA8UAhgaGAIUDw8UAhgaGAIUjLMWHgEgFbMWIEwgIEwgASgXEfoKCvoRFxX6DxQBFg76AAQAAP+xA6EDLgAIABEAKQBAAJRACzUBCQgJAAIBAAJHS7AJUFhAMwALCAtvCgEICQhvAAkFCW8ABgUAAQZlBwEFAgEAAQUAYAMBAQQEAVQDAQEBBFkABAEETRtANAALCAtvCgEICQhvAAkFCW8ABgUABQYAbQcBBQIBAAEFAGADAQEEBAFUAwEBAQRZAAQBBE1ZQBI9PDg2MzAjIjIlNRMUExIMBR0rJTQmDgEeATI2NzQmDgIWMjY3FRQGIyEiJic1NDYXMx4BOwEyNjczMhYDBisBFRQGByMiJic1IyImPwE2Mh8BFgLKFB4WAhIiEJEUIBICFhwYRiAW/MsXHgEgFu4MNiOPIjYN7hYgtgkYjxQPjw8UAY8XExH6Ch4K+hIdDhYCEiAUFBAOFgISIBQUjbMWICAWsxYgAR8oKB8eAVIW+g8UARYO+iwR+goK+hEAAAAC////+QQwAwsAGAAzAEJAPyoBAQYxIwUDAAECRwAGBQEFBgFtAgEAAQMBAANtAAUAAQAFAWAAAwQEA1QAAwMEWAAEAwRMIyg2FhQjIgcFGysBNCYrATU0JisBIgYdASMiBhQfARYyPwE2BRQGByEiJjc0NjcnNDYzMhYXNjMyFhUUBx4BAsoKCH0KB2wHCn0ICgXEBRAFxAUBZXxa/aFnlAFOQgGodleQISg1O1QXSF4BTAgKxAgKCgjEChAFxAUFxAZ2WXwBkmhIfB4YdqhiUCNUOysiEXYAAAAAAv////kEMAMLABgAMwBFQEIqAQAGMSMCAQANAQIBA0cABgUABQYAbQMBAQACAAECbQAFAAABBQBgAAIEBAJUAAICBFgABAIETCMoNRQjJRQHBRsrATQvASYiDwEGFBY7ARUUFjsBMjY9ATMyNgUUBgchIiY3NDY3JzQ2MzIWFzYzMhYVFAceAQLKBcQFEAXEBQoIfQoHbAcKfQgKAWV8Wv2hZ5QBTkIBqHZXkCEoNTtUF0heAXAIBcQFBcQGDwrECAoKCMQKmVl8AZJoSHweGHaoYlAjVDsrIhF2AAIAAP+xAjwDCwAIABgAJkAjAAEAAgABAm0AAgJuAAMAAANUAAMDAFgAAAMATBcXExIEBRgrATQmIgYUFjI2NxQHAw4BIiYnAyY1NDYyFgGtVHZUVHZUjhLLCSQmJgfMEqjsqAHtO1RUdlRUOz0n/lASFhYSAbAnPXaoqAACAAD/aQPoA1IADgAdAFFAThgUAgUGDgMCAQAAAQMBA0cVAQRFCAcCBQYABgUAbQIBAAEGAAFrAAQABgUEBmAAAQMDAVQAAQEDWAADAQNMDw8PHQ8dIhMkIhIiEQkFGysVESEHFjMyNjczBgQnIicDNiQzMhc3ESE3JiMiBgcBkqBsln3CIYoj/uyzz5KJIwEUs8+Tkv5uoGyWfcIhlgGSoGuWda3mAZIBxK7kkpL+bqBrlnUAAAAAAgAA//kDWQLEABgAQABQQE0MAQECAUchAQABRgADBwYHAwZtAAIGAQYCAW0AAQUGAQVrAAAFBAUABG0ABwAGAgcGYAAFAAQFVAAFBQRYAAQFBEwsJSonExYjFAgFHCsBFAcBBiImPQEjIiYnNTQ2NzM1NDYWFwEWNxEUBisBIiY3JyY/AT4BFzMyNjcRNCYnIyI0JjYvASY/AT4BFzMyFgKVC/7RCx4U+g8UARYO+hQeCwEvC8ReQ7IHDAEBAQECAQgIsiU0ATYktAYKAgIBAQECAQgIskNeAV4OC/7QChQPoRYO1g8UAaEOFgIJ/tAKtf54Q14KCAsJBg0HCAE2JAGIJTQBBAIIBAsJBg0HCAFeAAAAAgAA//kDawLDACcAQABCQD8UAQIBAUcABgIFAgYFbQAFAwIFA2sABAMAAwQAbQABAAIGAQJgAAMEAANUAAMDAFgAAAMATBYjGSUqJScHBRsrJRQWDwEOAQcjIiY1ETQ2OwEyFhUXFg8BDgEnIyIGBxEUFhczMh4CARQHAQYiJj0BIyImPQE0NjczNTQ2FhcBFgFlAgECAQgIskNeXkOyCAoBAQECAQgIsiU0ATYktAYCBgICBgv+0QscFvoOFhYO+hYcCwEvCy4CEgUOCQQBXkMBiENeCggLCQYNBwgBNiT+eCU0AQQCCAEsDgv+0AoUD6EWDtYPFAGhDhYCCf7QCgAAAAABAAAAAAFeAlEAFQAXQBQDAQABAUcAAQABbwAAAGYXGQIFFisBFA8BFxYUDwEGIicBJjQ3ATYyHwEWAV4G29sGBhwFDgb+/AYGAQQFEAQcBgIiBwXc2wYOBhwFBQEEBg4GAQQGBhwFAAEAAAAAAUwCUQAVABdAFAsBAAEBRwABAAFvAAAAZhwUAgUWKwEUBwEGIi8BJjQ/AScmND8BNjIXARYBTAb+/AUOBhwGBtvbBgYcBRAEAQQGAToHBv78BQUcBg4G29wFDgYcBgb+/AUAAgAAAAACNAJRABUAKwAcQBkpEwIAAQFHAwEBAAFvAgEAAGYXHRcUBAUYKyUUDwEGIicBJjQ3ATYyHwEWFA8BFxYXFA8BBiInASY0NwE2Mh8BFhQPARcWAV4GHAUOBv78BgYBBAUQBBwGBtvbBtYFHAYOBv78BgYBBAYOBhwFBdzcBVIHBhwFBQEEBg4GAQQGBhwFEATc2wYHBwYcBQUBBAYOBgEEBgYcBRAE3NsGAAACAAAAAAIiAlEAFQArABxAGSELAgABAUcDAQEAAW8CAQAAZhwYHBQEBRgrARQHAQYiLwEmND8BJyY0PwE2MhcBFhcUBwEGIi8BJjQ/AScmND8BNjIXARYBTAb+/AUOBhwGBtvbBgYcBRAEAQQG1gX+/AYOBhwFBdvbBQUcBg4GAQQFAToHBv78BQUcBg4G29wFDgYcBgb+/AUIBwb+/AUFHAYOBtvcBQ4GHAYG/vwFAAIAAP+xA1sDCwAkAEcAXUBaQyUCBgkvAQUGFwEDAggBAQMERwAJCAYICQZtBwEFBgIGBQJtBAECAwYCA2sAAQMAAwEAbQAIAAYFCAZgAAMBAANUAAMDAFgAAAMATEZFJiUlNiUmNRQkCgUdKwEUFQ4BIyImJwcGIiY9ATQ2OwEyFgYPAR4BMzI2NzY3NjsBMhYTFRQGKwEiJjY/ASYjIgYHBgcGKwEiJjc1PgEzMhYXNzYyFgNLJOSZUZg8SAscFhYO+g4WAglNKGQ3SoInBhcFDGsICg4UEPoOFgIJTVJwS4InBhcFDG8HDAEk5plRmjxICxwYAQUDAZa6PjlICxYO+g4WFhwLTSUoSj4KOA0MAbj6DhYWHAtNTUo+CjgNDAYElro+OUgLFgAAAAMAAP+xAsoDCwAIAA8AIwAyQC8PAQMCAUcABQACAwUCXgADAAEAAwFgAAAEBABSAAAABFgABAAETDU5ERMhEAYFGisXIREjIiYnNSEFMyYvASYnBREUBiMhIiYnETQ2MyEyFh8BHgFHAjzoFx4B/uIBZtEFB68GEAEdHhf9oRceASAWAWUWNg+uEBYHAawgFujWEAeuBwbk/gwWICAWAu4WIBgOrw82AAL///9bA+oDUgAfAEEAKUAmBAECAAFHMQEBRAMBAAIAbwACAQJvAAEBZgEAISAUEwAfAR8EBRQrASIHBgcxNjc2FxYXFhcWBgcGFx4BNz4BNzYmJy4BJyYBIgcGBwYHBhYXFhcWFxY3NjcxBgcGJyYnJicmNjc2JicmAfJXUVREVmxqZ2pPQiEhBiUOGhAzEQMKAiMBJSaQXlv+BRgPBAQGASQCJCZIW3t3eX1hVmxqZ2tPQiEgBSUIBg4SA1IdHjlFFRQeIE9CVlOzUSkbEAERAw8GWsNZXZAmJf7uEAQGCAZaw1ldSFskIhgZUUUVFB4gT0JWU7NRFSEOEgAAAAAFAAD/+QPkAwsAKQAuADUAPgBIAQBAEUg1NDMtLCsiCAUBHAEGBQJHS7AKUFhAMAAHAAEABwFtAAUBBgYFZQAAAAEFAAFgAAYIAQQCBgRfAAIDAwJUAAICA1gAAwIDTBtLsAtQWEApAAUBBgYFZQcBAAABBQABYAAGCAEEAgYEXwACAwMCVAACAgNYAAMCA0wbS7AXUFhAMAAHAAEABwFtAAUBBgYFZQAAAAEFAAFgAAYIAQQCBgRfAAIDAwJUAAICA1gAAwIDTBtAMQAHAAEABwFtAAUBBgEFBm0AAAABBQABYAAGCAEEAgYEXwACAwMCVAACAgNYAAMCA0xZWVlAEyoqQkEyMTAvKi4qLjw1ODMJBRgrNRE0NjchMhceAQ8BBicmIyEiBgcRFBYXITI2PQE0PwE2FgcVFAYjISImJTUBFwEnMxUzNycHNxY/ATYmDwEGEzc2Mh8BFhQPAV5DAdAjHgkDBxsICg0M/jAlNAE2JAHQJTQFJAgYAV5D/jBDXgFlAXeh/olrNSBAVUB0CQnECRIJxAn6MxAsEFUQEDOaAdBCXgEOBBMGHAgEAzQl/jAlNAE2JEYHBSQICAxqQ15eMaABd6D+iWs2QVVBZwkJxAkSCcQJAUEzEBBUECwQNAAABwAA/7ED6ALDABEAGgAjADUAPgBHAFAAYUBeNgEFBz8bAgQGLAECAwNHCQEFBwYHBQZtAAYEBwYEawgBBAMHBANrCwEDAgcDAmsAAAAHBQAHYAoBAgEBAlQKAQICAVgAAQIBTE9OS0pGRUJBPTw5OBMUExU3FAwFGis1ND4CMh4CFRQHBiMhIicmNxQWMj4BJg4BNxQWMjYuAQ4BEwYeATY3NiYnNzYuAQYPAQ4BExQWMjYuAQ4BFxQWMjYuAQ4BExQWMjYuAQ4BUIS8yLyEUE8KFPzyFApPRyo8KAIsOC5uKjosBCRCItULLFhKDQkaGzkDEBocAzghNhkqOiwEJEIi9io6LAQkQiJnKjosAig+Js9muIhOToi4ZpF8ERF7kh0qKjosAijbHSoqOiwCKP6XK0wYLishQBPVDhoGDBDVAywBlB0qKjosAiiKHSoqOiwCKP7nHSoqOiwCKAAAAAUAAP86A6oDgQAoADEAQgBLAFQAgEB9GwoCBAEfAQoGAAENCgNHAAQBBgEEBm0ABgoBBgprAAkNBw0JB20PAQoADQkKDWAABwAIDAcIYBABDAALBQwLYAMBAQECWAACAgxIDgEFBQBYAAAADQBJTUxEQyopUVBMVE1USEdDS0RLQD86NzQyLi0pMSoxGCMzKBQRBRkrARYVFAAEADU0Ejc1JzUjIiY+ATczMh4BBicjFQcVFhc/ATYyFgYPAQYBMjYQJgQGEBYTMzIWFAYnIyImPQE0NjIWBycyFhIGIiYSNhMyNi4BDgIWA1dT/uz+fv7s8LICMxUgAhwX0BUeAiITNAGccgYbDyogAg4aBf50l9bW/tLW1stoFSAgFZwVICAqIAE0gbYCuv68BLSDa5oCltqWApoCGXWUwv7uAgEWwLQBChMBAzMgKh4BICgiATMBAxFsCRoPHiwPGgX9hdYBLtYC0v7O0gGeHiogAR4WnBYeHhaduP7+uLgBArj9wprWmgKW2pYABQAA/2oD6ANSAB8AIgAlADMAPABwQG0jAQAGHQEJACcgAgcFA0cAAwAGAAMGXgwBAAAJBQAJXgAFAAcEBQdgAAQACggECmAACAACCwgCYA0BCwEBC1INAQsLAVgAAQsBTDQ0AQA0PDQ8Ozk2NTAvLiwpKCUkIiEaFw4MCQYAHwEeDgUUKwEyFhcRFAYHISImJzUhIiYnETQ2PwE+ATsBMhYXFTYzDwEzAQczFzc1IxUUBicjESE1NDYBESMVFAYnIxEDshceASAW/ekXHgH+0RceARYQ5A82FugXHgEmIUenp/6bp6dtsNYeF+kBHhYCJtceF+gCfCAW/VoXHgEgFqAgFgF3FjYP5BAWIBa3F3enAX2nwrDp6RYgAf6bjxY2/k4Cg+gWIAH+mgAAAwAA/7EEeAMMAAgALABPAHdAdCwlAgoHIB8OAwMCMhMCBAgDRwABBwFvAAcKB28OAQAKDQoADW0ACw0CDQsCbQwBCgANCwoNYAYBAgUBAwgCA2AACAQECFQACAgEWAkBBAgETAEATUtKSEVEQT82MzEvKSgkIhwbFxUSEAoJBQQACAEIDwUUKwEiJj4BHgIGBTMyFgcVFAYrARUUBgcjIiY9ASMiJic1NDY3MzU0NhczMhYXARQWNzMVBiMhIiY1ND4FFzIXHgEyNjc2MzIXIyIGFQGJWX4CerZ4BoQBw8QHDAEKCMQMBmsICsUHCgEMBsUKCGsHCgH+ZSodjyY5/hhDUgQMEh4mOiELCyxUZFQsCwtJMH0dKgFefrCAAny0ekkMBmsICsUHCgEMBsUKCGsHCgHEBwwBCgj+vx0sAYUcTkMeOEI2OCIaAgoiIiIiCjYqHQAAAAADAAD/sQRyAwwACAAsAE4AVEBRSQEAByQbEgMCCDIBBgIDRwABBAFvBQEEBwRvCQEHAAdvCgEACABvAAgCCG8DAQIGAm8ABgZmAQBIRkRDQT82MycmIiEVFBAPBQQACAEICwUUKwEiJj4BHgIGBRcWFA8BBiIvAQcGIi8BJjQ/AScmND8BNjIfATc2Mh8BFhQHBQcGFB8BBiMhIiY1ND4FFzIXFjI3NjMyFw4BBxQXAYlZfgJ6tngGhAIEiwUFTAUPBYuLBQ8FTAUFi4sFBUwFDwWLiwUPBUwFBf5fZRUVLgsN/hhDUgQMEh4mOiELC1a4VgsLDxAPDgEVAV5+sIACfLR6tYoGDwVMBQWLiwUFTAUPBoqLBQ8GSwUFi4sFBUsGDwWLZRQ8FS4CTkMeOEI2OCIaAgpERAoEDxoSHhUAAAIAAP9pA+oDUwAIAAwAHUAaAAADAG8AAwIDbwACAQJvAAEBZhESExIEBRgrETQABAACAAQANyE1IQEmAZwBKAT+4P5c/uLRAj79wgFezwEmAv7e/l7+3gIBJn2kAAAAAAEAAAABAACwdKvHXw889QALA+gAAAAA1YmAAAAAAADViYAA//3/OgR4A4EAAAAIAAIAAAAAAAAAAQAAA1L/agAABHb//f/6BHgAAQAAAAAAAAAAAAAAAAAAABsD6AAAAzgAAANZ//0DoP//AxEAAAOgAAADoAAABC///wQv//8COwAAA+gAAANZAAADoAAAAWUAAAFlAAACOwAAAjsAAANZAAACygAAA+n//wPoAAAD6AAAA6oAAAPoAAAEdgAABHYAAAPoAAAAAAAAAFAAtgEIAVIB/AKmAxQDggPABBwEpgUoBVwFkAXoBkAG1gcqB6oInAlMChAKpgtSC/IMIQABAAAAGwBVAAcAAAAAAAIAIgAyAHMAAACRC3AAAAAAAAAAEgDeAAEAAAAAAAAANQAAAAEAAAAAAAEADQA1AAEAAAAAAAIABwBCAAEAAAAAAAMADQBJAAEAAAAAAAQADQBWAAEAAAAAAAUACwBjAAEAAAAAAAYADQBuAAEAAAAAAAoAKwB7AAEAAAAAAAsAEwCmAAMAAQQJAAAAagC5AAMAAQQJAAEAGgEjAAMAAQQJAAIADgE9AAMAAQQJAAMAGgFLAAMAAQQJAAQAGgFlAAMAAQQJAAUAFgF/AAMAAQQJAAYAGgGVAAMAAQQJAAoAVgGvAAMAAQQJAAsAJgIFQ29weXJpZ2h0IChDKSAyMDE3IGJ5IG9yaWdpbmFsIGF1dGhvcnMgQCBmb250ZWxsby5jb21zbGltc3RhdC1mb250UmVndWxhcnNsaW1zdGF0LWZvbnRzbGltc3RhdC1mb250VmVyc2lvbiAxLjBzbGltc3RhdC1mb250R2VuZXJhdGVkIGJ5IHN2ZzJ0dGYgZnJvbSBGb250ZWxsbyBwcm9qZWN0Lmh0dHA6Ly9mb250ZWxsby5jb20AQwBvAHAAeQByAGkAZwBoAHQAIAAoAEMAKQAgADIAMAAxADcAIABiAHkAIABvAHIAaQBnAGkAbgBhAGwAIABhAHUAdABoAG8AcgBzACAAQAAgAGYAbwBuAHQAZQBsAGwAbwAuAGMAbwBtAHMAbABpAG0AcwB0AGEAdAAtAGYAbwBuAHQAUgBlAGcAdQBsAGEAcgBzAGwAaQBtAHMAdABhAHQALQBmAG8AbgB0AHMAbABpAG0AcwB0AGEAdAAtAGYAbwBuAHQAVgBlAHIAcwBpAG8AbgAgADEALgAwAHMAbABpAG0AcwB0AGEAdAAtAGYAbwBuAHQARwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABzAHYAZwAyAHQAdABmACAAZgByAG8AbQAgAEYAbwBuAHQAZQBsAGwAbwAgAHAAcgBvAGoAZQBjAHQALgBoAHQAdABwADoALwAvAGYAbwBuAHQAZQBsAGwAbwAuAGMAbwBtAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGwECAQMBBAEFAQYBBwEIAQkBCgELAQwBDQEOAQ8BEAERARIBEwEUARUBFgEXARgBGQEaARsBHAAFdHJhc2gFY2xvY2sGc2VhcmNoBmNhbmNlbAhkb3dubG9hZAZ1cGxvYWQOZG93bmxvYWQtY2xvdWQMdXBsb2FkLWNsb3VkCmxvY2F0aW9uLTELYXJyb3dzLWN3LTEFbG9naW4GbG9nb3V0CmFuZ2xlLWxlZnQLYW5nbGUtcmlnaHQRYW5nbGUtZG91YmxlLWxlZnQSYW5nbGUtZG91YmxlLXJpZ2h0CWFycm93cy1jdwNkb2MFc3BpbjQEZWRpdAVnYXVnZQlzdG9wd2F0Y2gEZG9jcwl1c2VyLXBsdXMKdXNlci10aW1lcw1taW51cy1jaXJjbGVkAAAAAAABAAH//wAPAAAAAAAAAAAAAAAAAAAAAAAYABgAGAAYA4H/OgOB/zqwACwgsABVWEVZICBLuAAOUUuwBlNaWLA0G7AoWWBmIIpVWLACJWG5CAAIAGNjI2IbISGwAFmwAEMjRLIAAQBDYEItsAEssCBgZi2wAiwgZCCwwFCwBCZasigBCkNFY0VSW1ghIyEbilggsFBQWCGwQFkbILA4UFghsDhZWSCxAQpDRWNFYWSwKFBYIbEBCkNFY0UgsDBQWCGwMFkbILDAUFggZiCKimEgsApQWGAbILAgUFghsApgGyCwNlBYIbA2YBtgWVlZG7ABK1lZI7AAUFhlWVktsAMsIEUgsAQlYWQgsAVDUFiwBSNCsAYjQhshIVmwAWAtsAQsIyEjISBksQViQiCwBiNCsQEKQ0VjsQEKQ7ABYEVjsAMqISCwBkMgiiCKsAErsTAFJbAEJlFYYFAbYVJZWCNZISCwQFNYsAErGyGwQFkjsABQWGVZLbAFLLAHQyuyAAIAQ2BCLbAGLLAHI0IjILAAI0JhsAJiZrABY7ABYLAFKi2wBywgIEUgsAtDY7gEAGIgsABQWLBAYFlmsAFjYESwAWAtsAgssgcLAENFQiohsgABAENgQi2wCSywAEMjRLIAAQBDYEItsAosICBFILABKyOwAEOwBCVgIEWKI2EgZCCwIFBYIbAAG7AwUFiwIBuwQFlZI7AAUFhlWbADJSNhRESwAWAtsAssICBFILABKyOwAEOwBCVgIEWKI2EgZLAkUFiwABuwQFkjsABQWGVZsAMlI2FERLABYC2wDCwgsAAjQrILCgNFWCEbIyFZKiEtsA0ssQICRbBkYUQtsA4ssAFgICCwDENKsABQWCCwDCNCWbANQ0qwAFJYILANI0JZLbAPLCCwEGJmsAFjILgEAGOKI2GwDkNgIIpgILAOI0IjLbAQLEtUWLEEZERZJLANZSN4LbARLEtRWEtTWLEEZERZGyFZJLATZSN4LbASLLEAD0NVWLEPD0OwAWFCsA8rWbAAQ7ACJUKxDAIlQrENAiVCsAEWIyCwAyVQWLEBAENgsAQlQoqKIIojYbAOKiEjsAFhIIojYbAOKiEbsQEAQ2CwAiVCsAIlYbAOKiFZsAxDR7ANQ0dgsAJiILAAUFiwQGBZZrABYyCwC0NjuAQAYiCwAFBYsEBgWWawAWNgsQAAEyNEsAFDsAA+sgEBAUNgQi2wEywAsQACRVRYsA8jQiBFsAsjQrAKI7ABYEIgYLABYbUQEAEADgBCQopgsRIGK7ByKxsiWS2wFCyxABMrLbAVLLEBEystsBYssQITKy2wFyyxAxMrLbAYLLEEEystsBkssQUTKy2wGiyxBhMrLbAbLLEHEystsBwssQgTKy2wHSyxCRMrLbAeLACwDSuxAAJFVFiwDyNCIEWwCyNCsAojsAFgQiBgsAFhtRAQAQAOAEJCimCxEgYrsHIrGyJZLbAfLLEAHistsCAssQEeKy2wISyxAh4rLbAiLLEDHistsCMssQQeKy2wJCyxBR4rLbAlLLEGHistsCYssQceKy2wJyyxCB4rLbAoLLEJHistsCksIDywAWAtsCosIGCwEGAgQyOwAWBDsAIlYbABYLApKiEtsCsssCorsCoqLbAsLCAgRyAgsAtDY7gEAGIgsABQWLBAYFlmsAFjYCNhOCMgilVYIEcgILALQ2O4BABiILAAUFiwQGBZZrABY2AjYTgbIVktsC0sALEAAkVUWLABFrAsKrABFTAbIlktsC4sALANK7EAAkVUWLABFrAsKrABFTAbIlktsC8sIDWwAWAtsDAsALABRWO4BABiILAAUFiwQGBZZrABY7ABK7ALQ2O4BABiILAAUFiwQGBZZrABY7ABK7AAFrQAAAAAAEQ+IzixLwEVKi2wMSwgPCBHILALQ2O4BABiILAAUFiwQGBZZrABY2CwAENhOC2wMiwuFzwtsDMsIDwgRyCwC0NjuAQAYiCwAFBYsEBgWWawAWNgsABDYbABQ2M4LbA0LLECABYlIC4gR7AAI0KwAiVJiopHI0cjYSBYYhshWbABI0KyMwEBFRQqLbA1LLAAFrAEJbAEJUcjRyNhsAlDK2WKLiMgIDyKOC2wNiywABawBCWwBCUgLkcjRyNhILAEI0KwCUMrILBgUFggsEBRWLMCIAMgG7MCJgMaWUJCIyCwCEMgiiNHI0cjYSNGYLAEQ7ACYiCwAFBYsEBgWWawAWNgILABKyCKimEgsAJDYGQjsANDYWRQWLACQ2EbsANDYFmwAyWwAmIgsABQWLBAYFlmsAFjYSMgILAEJiNGYTgbI7AIQ0awAiWwCENHI0cjYWAgsARDsAJiILAAUFiwQGBZZrABY2AjILABKyOwBENgsAErsAUlYbAFJbACYiCwAFBYsEBgWWawAWOwBCZhILAEJWBkI7ADJWBkUFghGyMhWSMgILAEJiNGYThZLbA3LLAAFiAgILAFJiAuRyNHI2EjPDgtsDgssAAWILAII0IgICBGI0ewASsjYTgtsDkssAAWsAMlsAIlRyNHI2GwAFRYLiA8IyEbsAIlsAIlRyNHI2EgsAUlsAQlRyNHI2GwBiWwBSVJsAIlYbkIAAgAY2MjIFhiGyFZY7gEAGIgsABQWLBAYFlmsAFjYCMuIyAgPIo4IyFZLbA6LLAAFiCwCEMgLkcjRyNhIGCwIGBmsAJiILAAUFiwQGBZZrABYyMgIDyKOC2wOywjIC5GsAIlRlJYIDxZLrErARQrLbA8LCMgLkawAiVGUFggPFkusSsBFCstsD0sIyAuRrACJUZSWCA8WSMgLkawAiVGUFggPFkusSsBFCstsD4ssDUrIyAuRrACJUZSWCA8WS6xKwEUKy2wPyywNiuKICA8sAQjQoo4IyAuRrACJUZSWCA8WS6xKwEUK7AEQy6wKystsEAssAAWsAQlsAQmIC5HI0cjYbAJQysjIDwgLiM4sSsBFCstsEEssQgEJUKwABawBCWwBCUgLkcjRyNhILAEI0KwCUMrILBgUFggsEBRWLMCIAMgG7MCJgMaWUJCIyBHsARDsAJiILAAUFiwQGBZZrABY2AgsAErIIqKYSCwAkNgZCOwA0NhZFBYsAJDYRuwA0NgWbADJbACYiCwAFBYsEBgWWawAWNhsAIlRmE4IyA8IzgbISAgRiNHsAErI2E4IVmxKwEUKy2wQiywNSsusSsBFCstsEMssDYrISMgIDywBCNCIzixKwEUK7AEQy6wKystsEQssAAVIEewACNCsgABARUUEy6wMSotsEUssAAVIEewACNCsgABARUUEy6wMSotsEYssQABFBOwMiotsEcssDQqLbBILLAAFkUjIC4gRoojYTixKwEUKy2wSSywCCNCsEgrLbBKLLIAAEErLbBLLLIAAUErLbBMLLIBAEErLbBNLLIBAUErLbBOLLIAAEIrLbBPLLIAAUIrLbBQLLIBAEIrLbBRLLIBAUIrLbBSLLIAAD4rLbBTLLIAAT4rLbBULLIBAD4rLbBVLLIBAT4rLbBWLLIAAEArLbBXLLIAAUArLbBYLLIBAEArLbBZLLIBAUArLbBaLLIAAEMrLbBbLLIAAUMrLbBcLLIBAEMrLbBdLLIBAUMrLbBeLLIAAD8rLbBfLLIAAT8rLbBgLLIBAD8rLbBhLLIBAT8rLbBiLLA3Ky6xKwEUKy2wYyywNyuwOystsGQssDcrsDwrLbBlLLAAFrA3K7A9Ky2wZiywOCsusSsBFCstsGcssDgrsDsrLbBoLLA4K7A8Ky2waSywOCuwPSstsGossDkrLrErARQrLbBrLLA5K7A7Ky2wbCywOSuwPCstsG0ssDkrsD0rLbBuLLA6Ky6xKwEUKy2wbyywOiuwOystsHAssDorsDwrLbBxLLA6K7A9Ky2wciyzCQQCA0VYIRsjIVlCK7AIZbADJFB4sAEVMC0AS7gAyFJYsQEBjlmwAbkIAAgAY3CxAAVCsgABACqxAAVCswoCAQgqsQAFQrMOAAEIKrEABkK6AsAAAQAJKrEAB0K6AEAAAQAJKrEDAESxJAGIUViwQIhYsQNkRLEmAYhRWLoIgAABBECIY1RYsQMARFlZWVmzDAIBDCq4Af+FsASNsQIARAAA') format('truetype');
706
  }
707
  [class^="slimstat-font-"]:before, [class*=" slimstat-font-"]:before {
708
  color: #aaa;
748
  .slimstat-font-docs:before { content: '\e816'; } /* '' */
749
  .slimstat-font-user-plus:before { content: '\e817'; } /* '' */
750
  .slimstat-font-user-times:before { content: '\e818'; } /* '' */
751
+ .slimstat-font-minus-circled:before { content: '\e819'; } /* '' */
752
 
753
  .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)}}
754
 
admin/css/slimstat.eot CHANGED
Binary file
admin/css/slimstat.svg CHANGED
@@ -1,36 +1,62 @@
1
  <?xml version="1.0" standalone="no"?>
2
  <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
3
  <svg xmlns="http://www.w3.org/2000/svg">
4
- <metadata>Copyright (C) 2015 by original authors @ fontello.com</metadata>
5
  <defs>
6
- <font id="fontello" horiz-adv-x="1000" >
7
- <font-face font-family="fontello" font-weight="400" font-stretch="normal" units-per-em="1000" ascent="850" descent="-150" />
8
  <missing-glyph horiz-adv-x="1000" />
9
- <glyph glyph-name="trash" unicode="&#xe800;" d="m0 633l0 141 289 0 0 76 246 0 0-76 289 0 0-141-824 0z m43-783l0 676 738 0 0-676-738 0z" horiz-adv-x="824" />
10
- <glyph glyph-name="clock" unicode="&#xe801;" d="m500 546v-250q0-7-5-12t-13-5h-178q-8 0-13 5t-5 12v36q0 8 5 13t13 5h125v196q0 8 5 13t12 5h36q8 0 13-5t5-13z m232-196q0 83-41 152t-110 111-152 41-153-41-110-111-41-152 41-152 110-111 153-41 152 41 110 111 41 152z m125 0q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
11
- <glyph glyph-name="search" unicode="&#xe802;" d="m643 386q0 103-74 176t-176 74-177-74-73-176 73-177 177-73 176 73 74 177z m286-465q0-29-22-50t-50-21q-30 0-50 21l-191 191q-100-69-223-69-80 0-153 31t-125 84-84 125-31 153 31 152 84 126 125 84 153 31 152-31 126-84 84-126 31-152q0-123-69-223l191-191q21-21 21-51z" horiz-adv-x="928.6" />
12
- <glyph glyph-name="cancel" unicode="&#xe803;" d="m724 112q0-22-15-38l-76-76q-16-15-38-15t-38 15l-164 165-164-165q-16-15-38-15t-38 15l-76 76q-16 16-16 38t16 38l164 164-164 164q-16 16-16 38t16 38l76 76q16 16 38 16t38-16l164-164 164 164q16 16 38 16t38-16l76-76q15-15 15-38t-15-38l-164-164 164-164q15-15 15-38z" horiz-adv-x="785.7" />
13
- <glyph glyph-name="download" unicode="&#xe804;" d="m714 100q0 15-10 25t-25 11-26-11-10-25 10-25 26-11 25 11 10 25z m143 0q0 15-10 25t-26 11-25-11-10-25 10-25 25-11 26 11 10 25z m72 125v-179q0-22-16-37t-38-16h-821q-23 0-38 16t-16 37v179q0 22 16 38t38 16h259l75-76q33-32 76-32t76 32l76 76h259q22 0 38-16t16-38z m-182 318q10-23-8-40l-250-250q-10-10-25-10t-25 10l-250 250q-17 17-8 40 10 21 33 21h143v250q0 15 11 25t25 11h143q14 0 25-11t10-25v-250h143q24 0 33-21z" horiz-adv-x="928.6" />
14
- <glyph glyph-name="upload" unicode="&#xe805;" d="m714 29q0 14-10 25t-25 10-26-10-10-25 10-26 26-10 25 10 10 26z m143 0q0 14-10 25t-26 10-25-10-10-25 10-26 25-10 26 10 10 26z m72 125v-179q0-22-16-38t-38-16h-821q-23 0-38 16t-16 38v179q0 22 16 38t38 15h238q12-31 39-51t62-20h143q34 0 61 20t40 51h238q22 0 38-15t16-38z m-182 361q-9-22-33-22h-143v-250q0-15-10-25t-25-11h-143q-15 0-25 11t-11 25v250h-143q-23 0-33 22-9 22 8 39l250 250q10 10 25 10t25-10l250-250q18-17 8-39z" horiz-adv-x="928.6" />
15
- <glyph glyph-name="download-cloud" unicode="&#xe806;" d="m714 332q0 8-5 13t-13 5h-125v196q0 8-5 13t-12 5h-108q-7 0-12-5t-5-13v-196h-125q-8 0-13-5t-5-13q0-8 5-13l196-196q5-5 13-5t13 5l196 196q5 6 5 13z m357-125q0-89-62-151t-152-63h-607q-103 0-177 73t-73 177q0 72 39 134t105 92q-1 17-1 24 0 118 84 202t202 84q87 0 159-49t105-129q40 35 93 35 59 0 101-42t42-101q0-43-23-77 72-17 119-76t46-133z" horiz-adv-x="1071.4" />
16
- <glyph glyph-name="upload-cloud" unicode="&#xe807;" d="m714 368q0 8-5 13l-196 196q-5 5-13 5t-13-5l-196-196q-5-6-5-13 0-8 5-13t13-5h125v-196q0-8 5-13t12-5h108q7 0 12 5t5 13v196h125q8 0 13 5t5 13z m357-161q0-89-62-151t-152-63h-607q-103 0-177 73t-73 177q0 72 39 134t105 92q-1 17-1 24 0 118 84 202t202 84q87 0 159-49t105-129q40 35 93 35 59 0 101-42t42-101q0-43-23-77 72-17 119-76t46-133z" horiz-adv-x="1071.4" />
17
- <glyph glyph-name="location-1" unicode="&#xe808;" d="m429 493q0 59-42 101t-101 42-101-42-42-101 42-101 101-42 101 42 42 101z m142 0q0-61-18-100l-203-432q-9-18-27-29t-37-11-38 11-26 29l-204 432q-18 39-18 100 0 118 84 202t202 84 202-84 83-202z" horiz-adv-x="571.4" />
18
- <glyph glyph-name="arrows-cw-1" unicode="&#xe809;" d="m0-150l0 402 402 0-160-160q108-107 258-107 125 0 222 75t130 192l138 0q-35-173-173-288t-317-114q-207 0-353 146z m10 598q35 174 173 288t317 114q207 0 354-146l146 146 0-402-402 0 160 160q-108 107-258 107-125 0-222-75t-130-192l-138 0z" horiz-adv-x="1000" />
19
- <glyph glyph-name="login" unicode="&#xe80a;" d="m661 350q0-14-11-25l-303-304q-11-10-26-10t-25 10-10 25v161h-250q-15 0-25 11t-11 25v214q0 15 11 25t25 11h250v161q0 14 10 25t25 10 26-10l303-304q11-10 11-25z m196 196v-392q0-67-47-114t-114-47h-178q-7 0-13 5t-5 13q0 2-1 11t0 15 2 13 5 11 12 3h178q37 0 63 27t27 63v392q0 37-27 63t-63 27h-174t-6 0-6 2-5 3-4 5-1 8q0 2-1 11t0 15 2 13 5 11 12 3h178q67 0 114-47t47-114z" horiz-adv-x="857.1" />
20
- <glyph glyph-name="logout" unicode="&#xe80b;" d="m357 46q0-2 1-11t0-14-2-14-5-11-12-3h-178q-67 0-114 47t-47 114v392q0 67 47 114t114 47h178q8 0 13-5t5-13q0-2 1-11t0-15-2-13-5-11-12-3h-178q-37 0-63-27t-27-63v-392q0-37 27-63t63-27h174t6 0 7-2 4-3 4-5 1-8z m518 304q0-14-11-25l-303-304q-11-10-25-10t-25 10-11 25v161h-250q-14 0-25 11t-11 25v214q0 15 11 25t25 11h250v161q0 14 11 25t25 10 25-10l303-304q11-10 11-25z" horiz-adv-x="928.6" />
21
- <glyph glyph-name="angle-left" unicode="&#xe80c;" d="m350 546q0-7-6-12l-219-220 219-219q6-6 6-13t-6-13l-28-28q-5-5-12-5t-13 5l-260 260q-6 6-6 13t6 13l260 260q5 6 13 6t12-6l28-28q6-5 6-13z" horiz-adv-x="357.1" />
22
- <glyph glyph-name="angle-right" unicode="&#xe80d;" d="m332 314q0-7-6-13l-260-260q-5-5-12-5t-13 5l-28 28q-6 6-6 13t6 13l219 219-219 220q-6 5-6 12t6 13l28 28q5 6 13 6t12-6l260-260q6-5 6-13z" horiz-adv-x="357.1" />
23
- <glyph glyph-name="angle-double-left" unicode="&#xe80e;" d="m350 82q0-7-6-13l-28-28q-5-5-12-5t-13 5l-260 260q-6 6-6 13t6 13l260 260q5 6 13 6t12-6l28-28q6-5 6-13t-6-12l-219-220 219-219q6-6 6-13z m214 0q0-7-5-13l-28-28q-6-5-13-5t-13 5l-260 260q-6 6-6 13t6 13l260 260q6 6 13 6t13-6l28-28q5-5 5-13t-5-12l-220-220 220-219q5-6 5-13z" horiz-adv-x="571.4" />
24
- <glyph glyph-name="angle-double-right" unicode="&#xe80f;" d="m332 314q0-7-6-13l-260-260q-5-5-12-5t-13 5l-28 28q-6 6-6 13t6 13l219 219-219 220q-6 5-6 12t6 13l28 28q5 6 13 6t12-6l260-260q6-5 6-13z m214 0q0-7-5-13l-260-260q-6-5-13-5t-13 5l-28 28q-5 6-5 13t5 13l219 219-219 220q-5 5-5 12t5 13l28 28q6 6 13 6t13-6l260-260q5-5 5-13z" horiz-adv-x="571.4" />
25
- <glyph glyph-name="arrows-cw" unicode="&#xe810;" d="m843 261q0-3 0-4-36-150-150-243t-267-93q-81 0-157 31t-136 88l-72-72q-11-11-25-11t-25 11-11 25v250q0 14 11 25t25 11h250q14 0 25-11t10-25-10-25l-77-77q40-37 90-57t105-20q74 0 139 37t104 99q6 10 29 66 5 13 17 13h107q8 0 13-6t5-12z m14 446v-250q0-14-10-25t-26-11h-250q-14 0-25 11t-10 25 10 25l77 77q-82 77-194 77-75 0-140-37t-104-99q-6-10-29-66-5-13-17-13h-111q-7 0-13 6t-5 12v4q36 150 151 243t268 93q81 0 158-31t137-88l72 72q11 11 25 11t26-11 10-25z" horiz-adv-x="857.1" />
26
- <glyph glyph-name="doc" unicode="&#xe811;" d="m71-7h572v428h-232q-23 0-38 16t-16 38v232h-286v-714z m358 500h209q-5 16-12 23l-175 174q-6 7-22 13v-210z m285-18v-500q0-22-15-38t-38-16h-607q-23 0-38 16t-16 38v750q0 22 16 38t38 16h357q22 0 49-12t42-26l174-175q16-15 27-42t11-49z" horiz-adv-x="714.3" />
27
- <glyph glyph-name="spin4" unicode="&#xe812;" d="m498 850c-114 0-228-39-320-116l0 0c173 140 428 130 588-31 134-134 164-332 89-495-10-29-5-50 12-68 21-20 61-23 84 0 3 3 12 15 15 24 71 180 33 393-112 539-99 98-228 147-356 147z m-409-274c-14 0-29-5-39-16-3-3-13-15-15-24-71-180-34-393 112-539 185-185 479-195 676-31l0 0c-173-140-428-130-589 31-134 134-163 333-89 495 11 29 6 50-12 68-11 11-27 17-44 16z" horiz-adv-x="1001" />
28
- <glyph glyph-name="edit" unicode="&#xe813;" d="m0 154v464q0 66 47 113t114 48h464q35 0 65-14 9-4 10-13 2-10-5-16l-27-28q-8-8-18-4-13 3-25 3h-464q-37 0-63-26t-27-63v-464q0-37 27-63t63-27h464q37 0 63 27t26 63v70q0 7 5 12l36 36q8 8 20 4t11-16v-106q0-67-47-114t-114-47h-464q-67 0-114 47t-47 114z m357-18v160l375 375 161-160-375-375h-161z m54 107h53v-54h32l64 65-85 85-64-65v-31z m116 134q9-9 18 0l196 196q9 9 0 18t-18 0l-196-196q-9-9 0-18z m241 330l51 51q16 16 38 16t38-16l85-84q16-16 16-38t-16-38l-51-52z" horiz-adv-x="1000" />
29
- <glyph glyph-name="gauge" unicode="&#xe814;" d="m0 207q0 102 40 194t106 160 160 107 194 39 194-39 160-107 106-160 40-194q0-145-79-269-10-17-30-17h-782q-20 0-30 17-79 123-79 269z m71 0q0-29 21-50t51-21 50 21 21 50-21 51-50 21-51-21-21-51z m108 250q0-29 21-50t50-21 51 21 20 50-20 51-51 21-50-21-21-51z m217-330q-11-43 11-81t66-50 81 11 50 66q9 33-4 65t-40 51l57 213q3 14-5 27t-21 16-27-3-17-22l-56-213q-33-3-60-25t-35-55z m33 437q0-29 21-50t50-21 51 21 20 50-20 51-51 21-50-21-21-51z m250-107q0-29 21-50t50-21 51 21 20 50-20 51-51 21-50-21-21-51z m107-250q0-29 21-50t50-21 51 21 21 50-21 51-51 21-50-21-21-51z" horiz-adv-x="1000" />
30
- <glyph glyph-name="stopwatch" unicode="&#xe815;" d="m855 537q83-117 83-265 0-194-138-331t-331-138-331 138-138 331q0 180 120 313t298 152l0 1-2 3 0 51-51 0q-21 0-37 16t-15 37 15 36 37 16l208 0q21 0 36-16t16-36-16-37-36-16l-52 0 0-51-1-1 0-3q156-17 270-125 1 1 3 4t3 5l27 26q15 15 36 15t37-15 15-37-15-37l-26-26q-5-5-15-10z m-386-630q151 0 258 107t107 258-107 258-258 106-258-106-107-258 107-258 258-107z m52 416l104 0q21 0 37-15t16-36-16-37-37-15l-156 0q-21 0-37 15t-16 37l0 156q0 22 16 37t37 15 37-15 15-37l0-105z m-52 262q129 0 220-92t92-221-92-221-220-92-221 92-92 221 92 221 221 92z m0-574q107 0 184 77t76 184-76 184-184 76-184-76-76-184 76-184 184-77z" horiz-adv-x="938" />
31
- <glyph glyph-name="docs" unicode="&#xe816;" d="m946 636q23 0 38-16t16-38v-678q0-23-16-38t-38-16h-535q-23 0-38 16t-16 38v160h-303q-23 0-38 16t-16 38v375q0 22 11 49t27 42l228 228q15 16 42 27t49 11h232q23 0 38-16t16-38v-183q38 23 71 23h232z m-303-119l-167-167h167v167z m-357 214l-167-167h167v167z m109-361l176 176v233h-214v-233q0-22-15-38t-38-15h-233v-357h286v143q0 22 11 49t27 42z m534-449v643h-215v-232q0-22-15-38t-38-15h-232v-358h500z" horiz-adv-x="1000" />
32
- <glyph glyph-name="user-plus" unicode="&#xe817;" d="m393 350q-89 0-152 63t-62 151 62 152 152 63 151-63 63-152-63-151-151-63z m536-71h196q7 0 13-6t5-12v-107q0-8-5-13t-13-5h-196v-197q0-7-6-12t-12-6h-107q-8 0-13 6t-5 12v197h-197q-7 0-12 5t-6 13v107q0 7 6 12t12 6h197v196q0 7 5 13t13 5h107q7 0 12-5t6-13v-196z m-411-125q0-29 21-51t50-21h143v-133q-38-28-95-28h-488q-67 0-108 39t-41 106q0 30 2 58t8 61 15 60 24 55 34 45 48 30 62 11q11 0 22-10 44-34 86-51t92-17 92 17 86 51q11 10 22 10 73 0 121-54h-125q-29 0-50-21t-21-50v-107z" horiz-adv-x="1142.9" />
33
- <glyph glyph-name="user-times" unicode="&#xe818;" d="m393 350q-89 0-152 63t-62 151 62 152 152 63 151-63 63-152-63-151-151-63z m601-179l139-138q5-6 5-13 0-8-5-13l-76-76q-5-5-12-5-8 0-13 5l-139 139-139-139q-5-5-13-5-7 0-12 5l-76 76q-5 5-5 13 0 7 5 13l139 138-139 139q-5 5-5 13 0 7 5 13l76 75q5 5 12 5 8 0 13-5l139-139 139 139q5 5 13 5 7 0 12-5l76-75q5-6 5-13 0-8-5-13z m-278 0l-101-101q-21-20-21-50 0-30 21-51l46-46q-11-2-24-2h-488q-67 0-108 39t-41 106q0 30 2 58t8 61 15 60 24 55 34 45 48 30 62 11q11 0 22-10 86-68 178-68t178 68q11 10 22 10 15 0 31-4-15-15-22-28t-8-31q0-30 21-51z" horiz-adv-x="1142.9" />
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
34
  </font>
35
  </defs>
36
  </svg>
1
  <?xml version="1.0" standalone="no"?>
2
  <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
3
  <svg xmlns="http://www.w3.org/2000/svg">
4
+ <metadata>Copyright (C) 2017 by original authors @ fontello.com</metadata>
5
  <defs>
6
+ <font id="slimstat-font" horiz-adv-x="1000" >
7
+ <font-face font-family="slimstat-font" font-weight="400" font-stretch="normal" units-per-em="1000" ascent="850" descent="-150" />
8
  <missing-glyph horiz-adv-x="1000" />
9
+ <glyph glyph-name="trash" unicode="&#xe800;" d="M0 633l0 141 289 0 0 76 246 0 0-76 289 0 0-141-824 0z m43-783l0 676 738 0 0-676-738 0z" horiz-adv-x="824" />
10
+
11
+ <glyph glyph-name="clock" unicode="&#xe801;" d="M500 546v-250q0-7-5-12t-13-5h-178q-8 0-13 5t-5 12v36q0 8 5 13t13 5h125v196q0 8 5 13t12 5h36q8 0 13-5t5-13z m232-196q0 83-41 152t-110 111-152 41-153-41-110-111-41-152 41-152 110-111 153-41 152 41 110 111 41 152z m125 0q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
12
+
13
+ <glyph glyph-name="search" unicode="&#xe802;" d="M643 386q0 103-74 176t-176 74-177-74-73-176 73-177 177-73 176 73 74 177z m286-465q0-29-22-50t-50-21q-30 0-50 21l-191 191q-100-69-223-69-80 0-153 31t-125 84-84 125-31 153 31 152 84 126 125 84 153 31 152-31 126-84 84-126 31-152q0-123-69-223l191-191q21-21 21-51z" horiz-adv-x="928.6" />
14
+
15
+ <glyph glyph-name="cancel" unicode="&#xe803;" d="M724 112q0-22-15-38l-76-76q-16-15-38-15t-38 15l-164 165-164-165q-16-15-38-15t-38 15l-76 76q-16 16-16 38t16 38l164 164-164 164q-16 16-16 38t16 38l76 76q16 16 38 16t38-16l164-164 164 164q16 16 38 16t38-16l76-76q15-15 15-38t-15-38l-164-164 164-164q15-15 15-38z" horiz-adv-x="785.7" />
16
+
17
+ <glyph glyph-name="download" unicode="&#xe804;" d="M714 100q0 15-10 25t-25 11-26-11-10-25 10-25 26-11 25 11 10 25z m143 0q0 15-10 25t-26 11-25-11-10-25 10-25 25-11 26 11 10 25z m72 125v-179q0-22-16-37t-38-16h-821q-23 0-38 16t-16 37v179q0 22 16 38t38 16h259l75-76q33-32 76-32t76 32l76 76h259q22 0 38-16t16-38z m-182 318q10-23-8-40l-250-250q-10-10-25-10t-25 10l-250 250q-17 17-8 40 10 21 33 21h143v250q0 15 11 25t25 11h143q14 0 25-11t10-25v-250h143q24 0 33-21z" horiz-adv-x="928.6" />
18
+
19
+ <glyph glyph-name="upload" unicode="&#xe805;" d="M714 29q0 14-10 25t-25 10-26-10-10-25 10-26 26-10 25 10 10 26z m143 0q0 14-10 25t-26 10-25-10-10-25 10-26 25-10 26 10 10 26z m72 125v-179q0-22-16-38t-38-16h-821q-23 0-38 16t-16 38v179q0 22 16 38t38 15h238q12-31 39-51t62-20h143q34 0 61 20t40 51h238q22 0 38-15t16-38z m-182 361q-9-22-33-22h-143v-250q0-15-10-25t-25-11h-143q-15 0-25 11t-11 25v250h-143q-23 0-33 22-9 22 8 39l250 250q10 10 25 10t25-10l250-250q18-17 8-39z" horiz-adv-x="928.6" />
20
+
21
+ <glyph glyph-name="download-cloud" unicode="&#xe806;" d="M714 332q0 8-5 13t-13 5h-125v196q0 8-5 13t-12 5h-108q-7 0-12-5t-5-13v-196h-125q-8 0-13-5t-5-13q0-8 5-13l196-196q5-5 13-5t13 5l196 196q5 6 5 13z m357-125q0-89-62-151t-152-63h-607q-103 0-177 73t-73 177q0 72 39 134t105 92q-1 17-1 24 0 118 84 202t202 84q87 0 159-49t105-129q40 35 93 35 59 0 101-42t42-101q0-43-23-77 72-17 119-76t46-133z" horiz-adv-x="1071.4" />
22
+
23
+ <glyph glyph-name="upload-cloud" unicode="&#xe807;" d="M714 368q0 8-5 13l-196 196q-5 5-13 5t-13-5l-196-196q-5-6-5-13 0-8 5-13t13-5h125v-196q0-8 5-13t12-5h108q7 0 12 5t5 13v196h125q8 0 13 5t5 13z m357-161q0-89-62-151t-152-63h-607q-103 0-177 73t-73 177q0 72 39 134t105 92q-1 17-1 24 0 118 84 202t202 84q87 0 159-49t105-129q40 35 93 35 59 0 101-42t42-101q0-43-23-77 72-17 119-76t46-133z" horiz-adv-x="1071.4" />
24
+
25
+ <glyph glyph-name="location-1" unicode="&#xe808;" d="M429 493q0 59-42 101t-101 42-101-42-42-101 42-101 101-42 101 42 42 101z m142 0q0-61-18-100l-203-432q-9-18-27-29t-37-11-38 11-26 29l-204 432q-18 39-18 100 0 118 84 202t202 84 202-84 83-202z" horiz-adv-x="571.4" />
26
+
27
+ <glyph glyph-name="arrows-cw-1" unicode="&#xe809;" d="M0-150l0 402 402 0-160-160q108-107 258-107 125 0 222 75t130 192l138 0q-35-173-173-288t-317-114q-207 0-353 146z m10 598q35 174 173 288t317 114q207 0 354-146l146 146 0-402-402 0 160 160q-108 107-258 107-125 0-222-75t-130-192l-138 0z" horiz-adv-x="1000" />
28
+
29
+ <glyph glyph-name="login" unicode="&#xe80a;" d="M661 350q0-14-11-25l-303-304q-11-10-26-10t-25 10-10 25v161h-250q-15 0-25 11t-11 25v214q0 15 11 25t25 11h250v161q0 14 10 25t25 10 26-10l303-304q11-10 11-25z m196 196v-392q0-67-47-114t-114-47h-178q-7 0-13 5t-5 13q0 2-1 11t0 15 2 13 5 11 12 3h178q37 0 63 27t27 63v392q0 37-27 63t-63 27h-174t-6 0-6 2-5 3-4 5-1 8q0 2-1 11t0 15 2 13 5 11 12 3h178q67 0 114-47t47-114z" horiz-adv-x="857.1" />
30
+
31
+ <glyph glyph-name="logout" unicode="&#xe80b;" d="M357 46q0-2 1-11t0-14-2-14-5-11-12-3h-178q-67 0-114 47t-47 114v392q0 67 47 114t114 47h178q8 0 13-5t5-13q0-2 1-11t0-15-2-13-5-11-12-3h-178q-37 0-63-27t-27-63v-392q0-37 27-63t63-27h174t6 0 7-2 4-3 4-5 1-8z m518 304q0-14-11-25l-303-304q-11-10-25-10t-25 10-11 25v161h-250q-14 0-25 11t-11 25v214q0 15 11 25t25 11h250v161q0 14 11 25t25 10 25-10l303-304q11-10 11-25z" horiz-adv-x="928.6" />
32
+
33
+ <glyph glyph-name="angle-left" unicode="&#xe80c;" d="M350 546q0-7-6-12l-219-220 219-219q6-6 6-13t-6-13l-28-28q-5-5-12-5t-13 5l-260 260q-6 6-6 13t6 13l260 260q5 6 13 6t12-6l28-28q6-5 6-13z" horiz-adv-x="357.1" />
34
+
35
+ <glyph glyph-name="angle-right" unicode="&#xe80d;" d="M332 314q0-7-6-13l-260-260q-5-5-12-5t-13 5l-28 28q-6 6-6 13t6 13l219 219-219 220q-6 5-6 12t6 13l28 28q5 6 13 6t12-6l260-260q6-5 6-13z" horiz-adv-x="357.1" />
36
+
37
+ <glyph glyph-name="angle-double-left" unicode="&#xe80e;" d="M350 82q0-7-6-13l-28-28q-5-5-12-5t-13 5l-260 260q-6 6-6 13t6 13l260 260q5 6 13 6t12-6l28-28q6-5 6-13t-6-12l-219-220 219-219q6-6 6-13z m214 0q0-7-5-13l-28-28q-6-5-13-5t-13 5l-260 260q-6 6-6 13t6 13l260 260q6 6 13 6t13-6l28-28q5-5 5-13t-5-12l-220-220 220-219q5-6 5-13z" horiz-adv-x="571.4" />
38
+
39
+ <glyph glyph-name="angle-double-right" unicode="&#xe80f;" d="M332 314q0-7-6-13l-260-260q-5-5-12-5t-13 5l-28 28q-6 6-6 13t6 13l219 219-219 220q-6 5-6 12t6 13l28 28q5 6 13 6t12-6l260-260q6-5 6-13z m214 0q0-7-5-13l-260-260q-6-5-13-5t-13 5l-28 28q-5 6-5 13t5 13l219 219-219 220q-5 5-5 12t5 13l28 28q6 6 13 6t13-6l260-260q5-5 5-13z" horiz-adv-x="571.4" />
40
+
41
+ <glyph glyph-name="arrows-cw" unicode="&#xe810;" d="M843 261q0-3 0-4-36-150-150-243t-267-93q-81 0-157 31t-136 88l-72-72q-11-11-25-11t-25 11-11 25v250q0 14 11 25t25 11h250q14 0 25-11t10-25-10-25l-77-77q40-37 90-57t105-20q74 0 139 37t104 99q6 10 29 66 5 13 17 13h107q8 0 13-6t5-12z m14 446v-250q0-14-10-25t-26-11h-250q-14 0-25 11t-10 25 10 25l77 77q-82 77-194 77-75 0-140-37t-104-99q-6-10-29-66-5-13-17-13h-111q-7 0-13 6t-5 12v4q36 150 151 243t268 93q81 0 158-31t137-88l72 72q11 11 25 11t26-11 10-25z" horiz-adv-x="857.1" />
42
+
43
+ <glyph glyph-name="doc" unicode="&#xe811;" d="M71-7h572v428h-232q-23 0-38 16t-16 38v232h-286v-714z m358 500h209q-5 16-12 23l-175 174q-6 7-22 13v-210z m285-18v-500q0-22-15-38t-38-16h-607q-23 0-38 16t-16 38v750q0 22 16 38t38 16h357q22 0 49-12t42-26l174-175q16-15 27-42t11-49z" horiz-adv-x="714.3" />
44
+
45
+ <glyph glyph-name="spin4" unicode="&#xe812;" d="M498 850c-114 0-228-39-320-116l0 0c173 140 428 130 588-31 134-134 164-332 89-495-10-29-5-50 12-68 21-20 61-23 84 0 3 3 12 15 15 24 71 180 33 393-112 539-99 98-228 147-356 147z m-409-274c-14 0-29-5-39-16-3-3-13-15-15-24-71-180-34-393 112-539 185-185 479-195 676-31l0 0c-173-140-428-130-589 31-134 134-163 333-89 495 11 29 6 50-12 68-11 11-27 17-44 16z" horiz-adv-x="1001" />
46
+
47
+ <glyph glyph-name="edit" unicode="&#xe813;" d="M0 154v464q0 66 47 113t114 48h464q35 0 65-14 9-4 10-13 2-10-5-16l-27-28q-8-8-18-4-13 3-25 3h-464q-37 0-63-26t-27-63v-464q0-37 27-63t63-27h464q37 0 63 27t26 63v70q0 7 5 12l36 36q8 8 20 4t11-16v-106q0-67-47-114t-114-47h-464q-67 0-114 47t-47 114z m357-18v160l375 375 161-160-375-375h-161z m54 107h53v-54h32l64 65-85 85-64-65v-31z m116 134q9-9 18 0l196 196q9 9 0 18t-18 0l-196-196q-9-9 0-18z m241 330l51 51q16 16 38 16t38-16l85-84q16-16 16-38t-16-38l-51-52z" horiz-adv-x="1000" />
48
+
49
+ <glyph glyph-name="gauge" unicode="&#xe814;" d="M0 207q0 102 40 194t106 160 160 107 194 39 194-39 160-107 106-160 40-194q0-145-79-269-10-17-30-17h-782q-20 0-30 17-79 123-79 269z m71 0q0-29 21-50t51-21 50 21 21 50-21 51-50 21-51-21-21-51z m108 250q0-29 21-50t50-21 51 21 20 50-20 51-51 21-50-21-21-51z m217-330q-11-43 11-81t66-50 81 11 50 66q9 33-4 65t-40 51l57 213q3 14-5 27t-21 16-27-3-17-22l-56-213q-33-3-60-25t-35-55z m33 437q0-29 21-50t50-21 51 21 20 50-20 51-51 21-50-21-21-51z m250-107q0-29 21-50t50-21 51 21 20 50-20 51-51 21-50-21-21-51z m107-250q0-29 21-50t50-21 51 21 21 50-21 51-51 21-50-21-21-51z" horiz-adv-x="1000" />
50
+
51
+ <glyph glyph-name="stopwatch" unicode="&#xe815;" d="M855 537q83-117 83-265 0-194-138-331t-331-138-331 138-138 331q0 180 120 313t298 152l0 1-2 3 0 51-51 0q-21 0-37 16t-15 37 15 36 37 16l208 0q21 0 36-16t16-36-16-37-36-16l-52 0 0-51-1-1 0-3q156-17 270-125 1 1 3 4t3 5l27 26q15 15 36 15t37-15 15-37-15-37l-26-26q-5-5-15-10z m-386-630q151 0 258 107t107 258-107 258-258 106-258-106-107-258 107-258 258-107z m52 416l104 0q21 0 37-15t16-36-16-37-37-15l-156 0q-21 0-37 15t-16 37l0 156q0 22 16 37t37 15 37-15 15-37l0-105z m-52 262q129 0 220-92t92-221-92-221-220-92-221 92-92 221 92 221 221 92z m0-574q107 0 184 77t76 184-76 184-184 76-184-76-76-184 76-184 184-77z" horiz-adv-x="938" />
52
+
53
+ <glyph glyph-name="docs" unicode="&#xe816;" d="M946 636q23 0 38-16t16-38v-678q0-23-16-38t-38-16h-535q-23 0-38 16t-16 38v160h-303q-23 0-38 16t-16 38v375q0 22 11 49t27 42l228 228q15 16 42 27t49 11h232q23 0 38-16t16-38v-183q38 23 71 23h232z m-303-119l-167-167h167v167z m-357 214l-167-167h167v167z m109-361l176 176v233h-214v-233q0-22-15-38t-38-15h-233v-357h286v143q0 22 11 49t27 42z m534-449v643h-215v-232q0-22-15-38t-38-15h-232v-358h500z" horiz-adv-x="1000" />
54
+
55
+ <glyph glyph-name="user-plus" unicode="&#xe817;" d="M393 350q-89 0-152 63t-62 151 62 152 152 63 151-63 63-152-63-151-151-63z m536-71h196q7 0 13-6t5-12v-107q0-8-5-13t-13-5h-196v-197q0-7-6-12t-12-6h-107q-8 0-13 6t-5 12v197h-197q-7 0-12 5t-6 13v107q0 7 6 12t12 6h197v196q0 7 5 13t13 5h107q7 0 12-5t6-13v-196z m-411-125q0-29 21-51t50-21h143v-133q-38-28-95-28h-488q-67 0-108 39t-41 106q0 30 2 58t8 61 15 60 24 55 34 45 48 30 62 11q11 0 22-10 44-34 86-51t92-17 92 17 86 51q11 10 22 10 73 0 121-54h-125q-29 0-50-21t-21-50v-107z" horiz-adv-x="1142.9" />
56
+
57
+ <glyph glyph-name="user-times" unicode="&#xe818;" d="M393 350q-89 0-152 63t-62 151 62 152 152 63 151-63 63-152-63-151-151-63z m601-179l139-138q5-6 5-13 0-8-5-13l-76-76q-5-5-12-5-8 0-13 5l-139 139-139-139q-5-5-13-5-7 0-12 5l-76 76q-5 5-5 13 0 7 5 13l139 138-139 139q-5 5-5 13 0 7 5 13l76 75q5 5 12 5 8 0 13-5l139-139 139 139q5 5 13 5 7 0 12-5l76-75q5-6 5-13 0-8-5-13z m-278 0l-101-101q-21-20-21-50 0-30 21-51l46-46q-11-2-24-2h-488q-67 0-108 39t-41 106q0 30 2 58t8 61 15 60 24 55 34 45 48 30 62 11q11 0 22-10 86-68 178-68t178 68q11 10 22 10 15 0 31-4-15-15-22-28t-8-31q0-30 21-51z" horiz-adv-x="1142.9" />
58
+
59
+ <glyph glyph-name="minus-circled" unicode="&#xe819;" d="M0 350q0 207 147 354t353 146 354-146 146-354-146-354-354-146-353 146-147 354z m213-82l574 0 0 164-574 0 0-164z" horiz-adv-x="1000" />
60
  </font>
61
  </defs>
62
  </svg>
admin/js/slimstat.admin.js CHANGED
@@ -118,10 +118,10 @@ var SlimStatAdmin = {
118
 
119
  jQuery(function(){
120
  // Refresh page every X seconds
121
- if (SlimStatAdminParams.refresh_interval > 0 && !jQuery('[name^="fs\[is_past\]"]').length){
122
- SlimStatAdmin._refresh_timer[0] = parseInt(SlimStatAdminParams.refresh_interval/60);
123
- SlimStatAdmin._refresh_timer[1] = SlimStatAdminParams.refresh_interval%60;
124
- refresh_handle = window.setTimeout("SlimStatAdmin.refresh_countdown();", 1000);
125
  }
126
 
127
  // Refresh report if (re)activated via the checkbox under Screen Options
@@ -238,11 +238,11 @@ jQuery(function(){
238
 
239
  jQuery('#'+report_id+' .inside').slimScroll({scrollTo : '0px'});
240
 
241
- if (typeof refresh_handle != 'undefined' && !jQuery('[name^="fs\[is_past\]"]').length){
242
  window.clearTimeout(refresh_handle);
243
- SlimStatAdmin._refresh_timer[0] = parseInt(SlimStatAdminParams.refresh_interval/60);
244
- SlimStatAdmin._refresh_timer[1] = SlimStatAdminParams.refresh_interval%60;
245
- refresh_handle = window.setTimeout("SlimStatAdmin.refresh_countdown();", 1000);
246
  }
247
  });
248
 
@@ -443,6 +443,9 @@ jQuery(function(){
443
  jQuery( this ).removeClass( 'slimstat-font-docs' ).addClass( 'slimstat-font-trash' ).parents( '.postbox' ).clone(true).appendTo( jQuery( this ).parents( '.meta-box-sortables' ) );
444
  jQuery( this ).removeClass( 'slimstat-font-trash' ).addClass( 'slimstat-font-docs' );
445
  }
 
 
 
446
  else {
447
  jQuery( this ).parents( '.postbox' ).remove();
448
  }
@@ -452,7 +455,7 @@ jQuery(function(){
452
  jQuery( '.meta-box-sortables' ).each( function() {
453
  data[ 'order[' + this.id.split("-")[0] + ']' ] = jQuery( this ).sortable( 'toArray' ).join( ',' );
454
  });
455
-
456
  jQuery.ajax({
457
  url: ajaxurl,
458
  type: 'post',
118
 
119
  jQuery(function(){
120
  // Refresh page every X seconds
121
+ if ( SlimStatAdminParams.refresh_interval > 0 && jQuery( '.refresh-timer' ).length ) {
122
+ SlimStatAdmin._refresh_timer[ 0 ] = parseInt( SlimStatAdminParams.refresh_interval / 60 );
123
+ SlimStatAdmin._refresh_timer[ 1 ] = SlimStatAdminParams.refresh_interval % 60;
124
+ refresh_handle = window.setTimeout( "SlimStatAdmin.refresh_countdown();", 1000 );
125
  }
126
 
127
  // Refresh report if (re)activated via the checkbox under Screen Options
238
 
239
  jQuery('#'+report_id+' .inside').slimScroll({scrollTo : '0px'});
240
 
241
+ if ( typeof refresh_handle != 'undefined' && jQuery( '.refresh-timer' ).length ) {
242
  window.clearTimeout(refresh_handle);
243
+ SlimStatAdmin._refresh_timer[ 0 ] = parseInt( SlimStatAdminParams.refresh_interval / 60 );
244
+ SlimStatAdmin._refresh_timer[ 1 ] = SlimStatAdminParams.refresh_interval % 60;
245
+ refresh_handle = window.setTimeout( "SlimStatAdmin.refresh_countdown();", 1000 );
246
  }
247
  });
248
 
443
  jQuery( this ).removeClass( 'slimstat-font-docs' ).addClass( 'slimstat-font-trash' ).parents( '.postbox' ).clone(true).appendTo( jQuery( this ).parents( '.meta-box-sortables' ) );
444
  jQuery( this ).removeClass( 'slimstat-font-trash' ).addClass( 'slimstat-font-docs' );
445
  }
446
+ else if ( jQuery( this ).hasClass( 'slimstat-font-minus-circled' ) ) {
447
+ jQuery( this ).removeClass( 'slimstat-font-minus-circled' ).parents( '.postbox' ).appendTo( jQuery( '#postbox-container-inactive .meta-box-sortables' ) );
448
+ }
449
  else {
450
  jQuery( this ).parents( '.postbox' ).remove();
451
  }
455
  jQuery( '.meta-box-sortables' ).each( function() {
456
  data[ 'order[' + this.id.split("-")[0] + ']' ] = jQuery( this ).sortable( 'toArray' ).join( ',' );
457
  });
458
+
459
  jQuery.ajax({
460
  url: ajaxurl,
461
  type: 'post',
admin/view/index.php CHANGED
@@ -98,8 +98,8 @@
98
 
99
  <label for="slimstat-filter-interval_direction">Direction</label>
100
  <select name="interval_direction" class="short" id="slimstat-filter-interval_direction">
101
- <option value="0" <?php selected( wp_slimstat_db::$filters_normalized[ 'date' ][ 'interval_direction' ], 0 ) ?>>-</option>
102
- <option value="1" <?php selected( wp_slimstat_db::$filters_normalized[ 'date' ][ 'interval_direction' ], 1 ) ?>>+</option>
103
  </select>
104
 
105
  <label for="slimstat-filter-interval">Days in interval</label>
98
 
99
  <label for="slimstat-filter-interval_direction">Direction</label>
100
  <select name="interval_direction" class="short" id="slimstat-filter-interval_direction">
101
+ <option value="1" <?php selected( wp_slimstat_db::$filters_normalized[ 'date' ][ 'interval_direction' ], 1 ) ?>>-</option>
102
+ <option value="2" <?php selected( wp_slimstat_db::$filters_normalized[ 'date' ][ 'interval_direction' ], 2 ) ?>>+</option>
103
  </select>
104
 
105
  <label for="slimstat-filter-interval">Days in interval</label>
admin/view/layout.php CHANGED
@@ -72,6 +72,13 @@
72
  <div id="postbox-container-<?php echo $a_location_id ?>" class="postbox-container">
73
  <h2 class="slimstat-options-section-header"><?php echo wp_slimstat_admin::$screens_info[ $a_location_id ][ 'title' ] ?></h2>
74
  <div id="<?php echo $a_location_id ?>-sortables" class="meta-box-sortables"><?php
 
 
 
 
 
 
 
75
  foreach( $a_location_list as $a_report_id ) {
76
  if ( empty( wp_slimstat_reports::$reports_info[ $a_report_id ] ) ) {
77
  continue;
@@ -94,7 +101,10 @@
94
 
95
  echo "
96
  <div class='postbox$placeholder_classes' id='$a_report_id'>
97
- <div class='slimstat-header-buttons'><a class='slimstat-font-$icon' href='#' title='$title'></a></div>
 
 
 
98
  <h3 class='hndle'>" . wp_slimstat_reports::$reports_info[ $a_report_id ][ 'title' ] . "</h3>
99
  </div>";
100
  } ?>
72
  <div id="postbox-container-<?php echo $a_location_id ?>" class="postbox-container">
73
  <h2 class="slimstat-options-section-header"><?php echo wp_slimstat_admin::$screens_info[ $a_location_id ][ 'title' ] ?></h2>
74
  <div id="<?php echo $a_location_id ?>-sortables" class="meta-box-sortables"><?php
75
+ if ( $a_location_id != 'inactive' ) {
76
+ $move_to_inactive = ' <a class="slimstat-font-minus-circled" href="#" title="' . __( 'Move to Inactive', 'wp-slimstat' ) . '"></a>';
77
+ }
78
+ else {
79
+ $move_to_inactive = '';
80
+ }
81
+
82
  foreach( $a_location_list as $a_report_id ) {
83
  if ( empty( wp_slimstat_reports::$reports_info[ $a_report_id ] ) ) {
84
  continue;
101
 
102
  echo "
103
  <div class='postbox$placeholder_classes' id='$a_report_id'>
104
+ <div class='slimstat-header-buttons'>
105
+ <a class='slimstat-font-$icon' href='#' title='$title'></a>
106
+ $move_to_inactive
107
+ </div>
108
  <h3 class='hndle'>" . wp_slimstat_reports::$reports_info[ $a_report_id ][ 'title' ] . "</h3>
109
  </div>";
110
  } ?>
admin/view/wp-slimstat-db.php CHANGED
@@ -22,18 +22,13 @@ class wp_slimstat_db {
22
  /*
23
  * Sets the filters and other structures needed to store the data retrieved from the DB
24
  */
25
- public static function init( $_filters = '' ){
26
  // Decimal and thousand separators
27
  if ( wp_slimstat::$settings[ 'use_european_separators' ] == 'no' ){
28
  self::$formats[ 'decimal' ] = '.';
29
  self::$formats[ 'thousand' ] = ',';
30
  }
31
 
32
- // Filters are defined as: browser equals Chrome|country starts_with en
33
- if ( !is_string( $_filters ) || empty( $_filters ) ){
34
- $_filters = '';
35
- }
36
-
37
  // List of supported filters and their friendly names
38
  self::$columns_names = array(
39
  'browser' => array( __( 'Browser', 'wp-slimstat' ), 'varchar' ),
@@ -128,14 +123,49 @@ class wp_slimstat_db {
128
  // Allow third party plugins to add even more column names to the array
129
  self::$all_columns_names = apply_filters( 'slimstat_column_names', self::$all_columns_names );
130
 
131
- // Hook for the... filters
132
- $_filters = apply_filters( 'slimstat_db_pre_filters', $_filters );
 
 
 
 
 
 
 
 
 
 
133
 
134
- // Normalize the input (filters)
135
- self::$filters_normalized = self::parse_filters( $_filters );
 
 
 
 
 
 
 
 
 
136
 
137
- // Hook for the array of normalized filters
138
- self::$filters_normalized = apply_filters( 'slimstat_db_filters_normalized', self::$filters_normalized, $_filters );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
139
  }
140
  // end init
141
 
@@ -340,18 +370,15 @@ class wp_slimstat_db {
340
  return wp_slimstat::$wpdb->get_var( $_sql );
341
  }
342
 
343
- public static function parse_filters( $_filters = '', $_init_misc = true ) {
344
  $filters_normalized = array(
345
  'columns' => array(),
346
- 'date' => array(
347
- 'interval_direction' => 0,
348
- 'is_past' => false
349
- ),
350
- 'misc' => $_init_misc?array(
351
  'direction' => 'DESC',
352
  'limit_results' => wp_slimstat::$settings[ 'limit_results' ],
353
  'start_from' => 0
354
- ) : array(),
355
  'utime' => array(
356
  'start' => 0,
357
  'end' => 0
@@ -360,6 +387,7 @@ class wp_slimstat_db {
360
 
361
  if ( !empty( $_filters ) ) {
362
  $matches = explode( '&&&', $_filters );
 
363
  foreach( $matches as $idx => $a_match ) {
364
  preg_match( '/([^\s]+)\s([^\s]+)\s(.+)?/', urldecode( $a_match ), $a_filter );
365
 
@@ -391,12 +419,10 @@ class wp_slimstat_db {
391
  switch( $a_filter[ 1 ] ) {
392
  case 'minute':
393
  $filters_normalized[ 'date' ][ 'minute' ] = intval( date( 'i', strtotime( $a_filter[ 3 ], date_i18n( 'U' ) ) ) );
394
- $filters_normalized[ 'date' ][ 'is_past' ] = true;
395
  break;
396
 
397
  case 'hour':
398
  $filters_normalized[ 'date' ][ 'hour' ] = intval( date( 'H', strtotime( $a_filter[ 3 ], date_i18n( 'U' ) ) ) );
399
- $filters_normalized[ 'date' ][ 'is_past' ] = true;
400
  break;
401
 
402
  case 'day':
@@ -419,29 +445,6 @@ class wp_slimstat_db {
419
  unset( $filters_normalized[ 'date' ][ $a_filter[ 1 ] ] );
420
  }
421
  }
422
-
423
- switch( $a_filter[ 1 ] ) {
424
- case 'day':
425
- if ( $filters_normalized[ 'date' ][ 'day' ] != date_i18n( 'j' ) ) {
426
- $filters_normalized[ 'date' ][ 'is_past' ] = true;
427
- }
428
- break;
429
-
430
- case 'month':
431
- if ( $filters_normalized[ 'date' ][ 'month' ] != date_i18n( 'n' ) ) {
432
- $filters_normalized[ 'date' ][ 'is_past' ] = true;
433
- }
434
- break;
435
-
436
- case 'year':
437
- if ( $filters_normalized[ 'date' ][ 'year' ] != date_i18n( 'Y' ) ) {
438
- $filters_normalized[ 'date' ][ 'is_past' ] = true;
439
- }
440
- break;
441
-
442
- default:
443
- break;
444
- }
445
  break;
446
 
447
  case 'interval':
@@ -450,12 +453,12 @@ class wp_slimstat_db {
450
  $intval_filter = intval( $a_filter[ 3 ] );
451
  $filters_normalized[ 'date' ][ $a_filter[ 1 ] ] = abs( $intval_filter );
452
  if ( $intval_filter < 0 ) {
453
- $filters_normalized[ 'date' ][ 'interval_direction' ] = 0;
454
  }
455
  break;
456
 
457
  case 'interval_direction':
458
- $filters_normalized[ 'date' ][ $a_filter[ 1 ] ] = in_array( $a_filter[ 3 ], array( 0, 1 ) ) ? $a_filter[ 3 ] : 1;
459
  break;
460
 
461
  case 'direction':
@@ -551,10 +554,14 @@ class wp_slimstat_db {
551
  !empty( $filters_normalized[ 'date' ][ 'year' ] ) ? $filters_normalized[ 'date' ][ 'year' ] : date_i18n( 'Y' )
552
  );
553
 
554
- $filters_normalized[ 'utime' ][ 'start' ] = $filters_normalized[ 'utime' ][ 'end' ] - 2592000;
 
555
  $filters_normalized[ 'utime' ][ 'type' ] = 'interval';
556
- $filters_normalized[ 'date' ][ 'interval' ] = isset( $filters_normalized[ 'date' ][ 'interval' ] ) ? $filters_normalized[ 'date' ][ 'interval' ] : 30;
557
- $filters_normalized[ 'date' ][ 'interval_direction' ] = 0;
 
 
 
558
  }
559
  else {
560
  $filters_normalized[ 'utime' ][ 'start' ] = mktime(
@@ -577,8 +584,8 @@ class wp_slimstat_db {
577
  else { // An interval was specified
578
  $filters_normalized[ 'utime' ][ 'type' ] = 'interval';
579
 
580
- // Interval Direction: 0 = past, 1 = future
581
- $sign = ( $filters_normalized[ 'date' ][ 'interval_direction' ] == 0 ) ? '-' : '+';
582
 
583
  $filters_normalized[ 'utime' ][ 'start' ] = mktime(
584
  !empty( $filters_normalized[ 'date' ][ 'hour' ] ) ? $filters_normalized[ 'date' ][ 'hour' ] : 0,
@@ -596,7 +603,7 @@ class wp_slimstat_db {
596
  ) );
597
 
598
  // Swap boundaries if we're going back in time
599
- if ( $filters_normalized[ 'date' ][ 'interval_direction' ] == 0 ) {
600
  $adjustment = ( abs( $filters_normalized[ 'utime' ][ 'start' ] - $filters_normalized[ 'utime' ][ 'end' ] ) < 86400 ) ? 0 : 86400;
601
  list( $filters_normalized[ 'utime' ][ 'start' ], $filters_normalized[ 'utime' ][ 'end' ] ) = array( $filters_normalized[ 'utime' ][ 'end' ] + $adjustment, $filters_normalized[ 'utime' ][ 'start' ] + $adjustment );
602
  }
@@ -625,6 +632,9 @@ class wp_slimstat_db {
625
  // Restore filters on date_i18n
626
  wp_slimstat::toggle_date_i18n_filters( true );
627
 
 
 
 
628
  return $filters_normalized;
629
  }
630
 
@@ -688,7 +698,6 @@ class wp_slimstat_db {
688
  public static function get_data_for_chart( $_args = array() ) {
689
  $previous = array( 'end' => self::$filters_normalized[ 'utime' ][ 'start' ] - 1 );
690
  $label_date_format = '';
691
- $has_previous = true;
692
  $output = array( 'json' => '[]', 'json_count' => 0, 'current' => array( 'label' => '' ) );
693
 
694
  // Each type has its own parameters
@@ -715,7 +724,6 @@ class wp_slimstat_db {
715
  break;
716
 
717
  case 'interval':
718
- $has_previous = false;
719
  $group_by = array( 'MONTH', 'DAY', 'j' );
720
  $values_in_interval = array( abs( self::$filters_normalized[ 'date' ][ 'interval' ] - 1 ), abs( self::$filters_normalized[ 'date' ][ 'interval' ] - 1 ), 0, 86400 );
721
  break;
@@ -733,7 +741,7 @@ class wp_slimstat_db {
733
  }
734
 
735
  // Custom intervals don't have a comparison chart ('previous' range)
736
- if ( empty( self::$filters_normalized[ 'date' ][ 'interval' ] ) ) {
737
  $_args[ 'where' ] = self::get_combined_where( $_args[ 'where' ], '*', false );
738
  $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' ].')';
739
  }
@@ -758,7 +766,7 @@ class wp_slimstat_db {
758
  $group_by_string, 'SUM(first_metric) AS first_metric, SUM(second_metric) AS second_metric' );
759
 
760
  // Fill the output array
761
- if ( $has_previous ) {
762
  $output[ 'current' ][ 'label' ] = gmdate( $label_date_format, self::$filters_normalized[ 'utime' ][ 'start' ] );
763
  $output[ 'previous' ][ 'label' ] = gmdate( $label_date_format, $previous[ 'start' ] );
764
  }
22
  /*
23
  * Sets the filters and other structures needed to store the data retrieved from the DB
24
  */
25
+ public static function init( $_filters = '' ) {
26
  // Decimal and thousand separators
27
  if ( wp_slimstat::$settings[ 'use_european_separators' ] == 'no' ){
28
  self::$formats[ 'decimal' ] = '.';
29
  self::$formats[ 'thousand' ] = ',';
30
  }
31
 
 
 
 
 
 
32
  // List of supported filters and their friendly names
33
  self::$columns_names = array(
34
  'browser' => array( __( 'Browser', 'wp-slimstat' ), 'varchar' ),
123
  // Allow third party plugins to add even more column names to the array
124
  self::$all_columns_names = apply_filters( 'slimstat_column_names', self::$all_columns_names );
125
 
126
+ // Filters use the following format: browser equals Firefox&&&country contains gb
127
+ $filters_array = array();
128
+ if ( !empty( $_REQUEST[ 'fs' ] ) && is_array( $_REQUEST[ 'fs' ] ) ) {
129
+ foreach( $_REQUEST[ 'fs' ] as $a_request_filter_name => $a_request_filter_value ) {
130
+ $filters_array[ htmlspecialchars( $a_request_filter_name ) ] = "$a_request_filter_name $a_request_filter_value";
131
+ }
132
+ }
133
+
134
+ // Fields and drop downs
135
+ if ( !empty( $_POST[ 'f' ] ) && !empty( $_POST[ 'o' ] ) ) {
136
+ $filters_array[ htmlspecialchars( $_POST[ 'f' ] ) ] = "{$_POST[ 'f' ]} {$_POST[ 'o' ]} " . ( isset( $_POST[ 'v' ] ) ? $_POST[ 'v' ] : '' );
137
+ }
138
 
139
+ foreach ( array( 'minute', 'hour', 'day', 'month', 'year', 'interval_direction', 'interval', 'interval_hours', 'interval_minutes' ) as $a_date_time_filter_name ) {
140
+ if ( isset( $_POST[ $a_date_time_filter_name ] ) ) {
141
+ $filters_array[ $a_date_time_filter_name ] = "$a_date_time_filter_name equals " . intval( $_POST[ $a_date_time_filter_name ] );
142
+ }
143
+ }
144
+
145
+ // Hidden Filters
146
+ if ( wp_slimstat::$settings[ 'restrict_authors_view' ] == 'yes' && !current_user_can( 'manage_options' ) && !empty( $GLOBALS[ 'current_user' ]->user_login ) ) {
147
+ $filters_array[ 'author' ] = 'author equals ' . $GLOBALS[ 'current_user' ]->user_login;
148
+ self::$hidden_filters[ 'author' ] = 1;
149
+ }
150
 
151
+ if ( !empty( $filters_array ) ) {
152
+ $filters_raw = implode( '&&&', $filters_array );
153
+ }
154
+
155
+ // Filters are defined as: browser equals Chrome&&&country starts_with en
156
+ if ( !isset( $filters_raw ) || !is_string( $filters_raw ) ) {
157
+ $filters_raw = '';
158
+ }
159
+
160
+ if ( !empty( $_filters ) && is_string( $_filters ) ) {
161
+ $filters_raw = empty( $filters_raw ) ? $_filters : $_filters . $filters_raw;
162
+ }
163
+
164
+ // Hook for the... filters
165
+ $filters_raw = apply_filters( 'slimstat_db_pre_filters', $filters_raw );
166
+
167
+ // Normalize the filters
168
+ self::$filters_normalized = self::get_filters_normalized( $filters_raw );
169
  }
170
  // end init
171
 
370
  return wp_slimstat::$wpdb->get_var( $_sql );
371
  }
372
 
373
+ public static function get_filters_normalized( $_filters = '', $_init_misc = true ) {
374
  $filters_normalized = array(
375
  'columns' => array(),
376
+ 'date' => array(),
377
+ 'misc' => array(
 
 
 
378
  'direction' => 'DESC',
379
  'limit_results' => wp_slimstat::$settings[ 'limit_results' ],
380
  'start_from' => 0
381
+ ),
382
  'utime' => array(
383
  'start' => 0,
384
  'end' => 0
387
 
388
  if ( !empty( $_filters ) ) {
389
  $matches = explode( '&&&', $_filters );
390
+
391
  foreach( $matches as $idx => $a_match ) {
392
  preg_match( '/([^\s]+)\s([^\s]+)\s(.+)?/', urldecode( $a_match ), $a_filter );
393
 
419
  switch( $a_filter[ 1 ] ) {
420
  case 'minute':
421
  $filters_normalized[ 'date' ][ 'minute' ] = intval( date( 'i', strtotime( $a_filter[ 3 ], date_i18n( 'U' ) ) ) );
 
422
  break;
423
 
424
  case 'hour':
425
  $filters_normalized[ 'date' ][ 'hour' ] = intval( date( 'H', strtotime( $a_filter[ 3 ], date_i18n( 'U' ) ) ) );
 
426
  break;
427
 
428
  case 'day':
445
  unset( $filters_normalized[ 'date' ][ $a_filter[ 1 ] ] );
446
  }
447
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
448
  break;
449
 
450
  case 'interval':
453
  $intval_filter = intval( $a_filter[ 3 ] );
454
  $filters_normalized[ 'date' ][ $a_filter[ 1 ] ] = abs( $intval_filter );
455
  if ( $intval_filter < 0 ) {
456
+ $filters_normalized[ 'date' ][ 'interval_direction' ] = 1;
457
  }
458
  break;
459
 
460
  case 'interval_direction':
461
+ $filters_normalized[ 'date' ][ $a_filter[ 1 ] ] = in_array( $a_filter[ 3 ], array( 1, 2 ) ) ? $a_filter[ 3 ] : 1;
462
  break;
463
 
464
  case 'direction':
554
  !empty( $filters_normalized[ 'date' ][ 'year' ] ) ? $filters_normalized[ 'date' ][ 'year' ] : date_i18n( 'Y' )
555
  );
556
 
557
+ $filters_normalized[ 'utime' ][ 'start' ] = $filters_normalized[ 'utime' ][ 'end' ] - ( intval( wp_slimstat::$settings[ 'posts_column_day_interval' ] ) * 86400 );
558
+ $filters_normalized[ 'date' ][ 'interval' ] = wp_slimstat::$settings[ 'posts_column_day_interval' ];
559
  $filters_normalized[ 'utime' ][ 'type' ] = 'interval';
560
+
561
+ if ( isset( $filters_normalized[ 'date' ][ 'interval' ] ) ) {
562
+ $filters_normalized[ 'date' ][ 'interval' ] = $filters_normalized[ 'date' ][ 'interval' ];
563
+ $filters_normalized[ 'date' ][ 'interval_direction' ] = 1;
564
+ }
565
  }
566
  else {
567
  $filters_normalized[ 'utime' ][ 'start' ] = mktime(
584
  else { // An interval was specified
585
  $filters_normalized[ 'utime' ][ 'type' ] = 'interval';
586
 
587
+ // Interval Direction: 1 = past, 2 = future
588
+ $sign = ( !empty( $filters_normalized[ 'date' ][ 'interval_direction' ] ) && $filters_normalized[ 'date' ][ 'interval_direction' ] == 2 ) ? '+' : '-';
589
 
590
  $filters_normalized[ 'utime' ][ 'start' ] = mktime(
591
  !empty( $filters_normalized[ 'date' ][ 'hour' ] ) ? $filters_normalized[ 'date' ][ 'hour' ] : 0,
603
  ) );
604
 
605
  // Swap boundaries if we're going back in time
606
+ if ( $filters_normalized[ 'date' ][ 'interval_direction' ] == 1 ) {
607
  $adjustment = ( abs( $filters_normalized[ 'utime' ][ 'start' ] - $filters_normalized[ 'utime' ][ 'end' ] ) < 86400 ) ? 0 : 86400;
608
  list( $filters_normalized[ 'utime' ][ 'start' ], $filters_normalized[ 'utime' ][ 'end' ] ) = array( $filters_normalized[ 'utime' ][ 'end' ] + $adjustment, $filters_normalized[ 'utime' ][ 'start' ] + $adjustment );
609
  }
632
  // Restore filters on date_i18n
633
  wp_slimstat::toggle_date_i18n_filters( true );
634
 
635
+ // Apply third-party filters
636
+ $filters_normalized = apply_filters( 'slimstat_db_filters_normalized', $filters_normalized, $_filters );
637
+
638
  return $filters_normalized;
639
  }
640
 
698
  public static function get_data_for_chart( $_args = array() ) {
699
  $previous = array( 'end' => self::$filters_normalized[ 'utime' ][ 'start' ] - 1 );
700
  $label_date_format = '';
 
701
  $output = array( 'json' => '[]', 'json_count' => 0, 'current' => array( 'label' => '' ) );
702
 
703
  // Each type has its own parameters
724
  break;
725
 
726
  case 'interval':
 
727
  $group_by = array( 'MONTH', 'DAY', 'j' );
728
  $values_in_interval = array( abs( self::$filters_normalized[ 'date' ][ 'interval' ] - 1 ), abs( self::$filters_normalized[ 'date' ][ 'interval' ] - 1 ), 0, 86400 );
729
  break;
741
  }
742
 
743
  // Custom intervals don't have a comparison chart ('previous' range)
744
+ if ( !empty( $previous[ 'start' ] ) ) {
745
  $_args[ 'where' ] = self::get_combined_where( $_args[ 'where' ], '*', false );
746
  $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' ].')';
747
  }
766
  $group_by_string, 'SUM(first_metric) AS first_metric, SUM(second_metric) AS second_metric' );
767
 
768
  // Fill the output array
769
+ if ( !empty( $previous[ 'start' ] ) ) {
770
  $output[ 'current' ][ 'label' ] = gmdate( $label_date_format, self::$filters_normalized[ 'utime' ][ 'start' ] );
771
  $output[ 'previous' ][ 'label' ] = gmdate( $label_date_format, $previous[ 'start' ] );
772
  }
admin/view/wp-slimstat-reports.php CHANGED
@@ -16,38 +16,10 @@ class wp_slimstat_reports {
16
  * Initalize class properties
17
  */
18
  public static function init(){
19
- // Filters use the following format: browser equals Firefox&&&country contains gb
20
- $filters = array();
21
- if ( !empty( $_REQUEST[ 'fs' ] ) && is_array( $_REQUEST[ 'fs' ] ) ) {
22
- foreach( $_REQUEST[ 'fs' ] as $a_request_filter_name => $a_request_filter_value ) {
23
- $filters[ htmlspecialchars( $a_request_filter_name ) ] = "$a_request_filter_name $a_request_filter_value";
24
- }
25
- }
26
-
27
- // Fields and drop downs
28
- if ( !empty( $_POST[ 'f' ] ) && !empty( $_POST[ 'o' ] ) ) {
29
- $filters[ htmlspecialchars( $_POST[ 'f' ] ) ] = "{$_POST[ 'f' ]} {$_POST[ 'o' ]} " . ( isset( $_POST[ 'v' ] ) ? $_POST[ 'v' ] : '' );
30
- }
31
-
32
- foreach ( array( 'minute', 'hour', 'day', 'month', 'year', 'interval_direction', 'interval', 'interval_hours', 'interval_minutes' ) as $a_date_time_filter_name ) {
33
- if ( isset( $_POST[ $a_date_time_filter_name ] ) ) {
34
- $filters[ $a_date_time_filter_name ] = "$a_date_time_filter_name equals " . intval( $_POST[ $a_date_time_filter_name ] );
35
- }
36
- }
37
-
38
- // Hidden Filters
39
- if ( wp_slimstat::$settings[ 'restrict_authors_view' ] == 'yes' && !current_user_can( 'manage_options' ) && !empty( $GLOBALS[ 'current_user' ]->user_login ) ) {
40
- $filters[ 'author' ] = 'author equals ' . $GLOBALS[ 'current_user' ]->user_login;
41
- self::$hidden_filters[ 'author' ] = 1;
42
- }
43
-
44
- if ( !empty( $filters ) ) {
45
- $filters = implode( '&&&', $filters );
46
- }
47
-
48
  // Include and initialize the API to interact with the database
49
  include_once( 'wp-slimstat-db.php' );
50
- wp_slimstat_db::init( $filters );
51
 
52
  // Retrieve data that will be used by multiple reports
53
  self::$pageviews = wp_slimstat_db::count_records();
@@ -904,7 +876,7 @@ class wp_slimstat_reports {
904
 
905
  // No network-wide settings exist
906
  if ( empty( self::$user_reports ) ) {
907
- self::$user_reports = get_user_option( "meta-box-order_{$page_location}_page_slimlayout", $current_user->ID );
908
  }
909
 
910
  // Do this only if we are in one of our screens (no dashboard!)
@@ -985,21 +957,21 @@ class wp_slimstat_reports {
985
 
986
  $_results_per_page = ( $_results_per_page < 0 ) ? wp_slimstat::$settings[ 'rows_to_show' ] : $_results_per_page;
987
 
988
- $endpoint = min($_count_all_results, wp_slimstat_db::$filters_normalized['misc']['start_from'] + $_results_per_page);
989
  $pagination_buttons = '';
990
  $direction_prev = is_rtl() ? 'right' : 'left';
991
  $direction_next = is_rtl() ? 'left' : 'right';
992
 
993
- if ($endpoint + $_results_per_page < $_count_all_results && $_count_page_results > 0){
994
  $startpoint = $_count_all_results - $_count_all_results % $_results_per_page;
995
- if ($startpoint == $_count_all_results) {
996
  $startpoint -= $_results_per_page;
997
  }
998
- $pagination_buttons .= '<a class="button-ajax slimstat-font-angle-double-'.$direction_next.'" href="'.wp_slimstat_reports::fs_url('start_from equals '.$startpoint).'"></a> ';
999
  }
1000
  if ($endpoint < $_count_all_results && $_count_page_results > 0){
1001
  $startpoint = wp_slimstat_db::$filters_normalized['misc']['start_from'] + $_results_per_page;
1002
- $pagination_buttons .= '<a class="button-ajax slimstat-font-angle-'.$direction_next.'" href="'.wp_slimstat_reports::fs_url('start_from equals '.$startpoint).'"></a> ';
1003
  }
1004
  if (wp_slimstat_db::$filters_normalized['misc']['start_from'] > 0){
1005
  $startpoint = (wp_slimstat_db::$filters_normalized['misc']['start_from'] > $_results_per_page)?wp_slimstat_db::$filters_normalized['misc']['start_from'] - $_results_per_page : 0;
@@ -1009,9 +981,10 @@ class wp_slimstat_reports {
1009
  $pagination_buttons .= '<a class="button-ajax slimstat-font-angle-double-'.$direction_prev.'" href="'.wp_slimstat_reports::fs_url('start_from equals 0').'"></a> ';
1010
  }
1011
 
1012
- $pagination = '<p class="pagination">'.sprintf(__('Results %s - %s of %s', 'wp-slimstat'), number_format(wp_slimstat_db::$filters_normalized['misc']['start_from'] + 1, 0, '', wp_slimstat_db::$formats['thousand']), number_format($endpoint, 0, '', wp_slimstat_db::$formats['thousand']), number_format($_count_all_results, 0, '', wp_slimstat_db::$formats['thousand']) . ( ( $_count_all_results == wp_slimstat::$settings[ 'limit_results' ] ) ? '+' : '') );
1013
- if ($_show_refresh_countdown && wp_slimstat::$settings['refresh_interval'] > 0 && !wp_slimstat_db::$filters_normalized['date']['is_past']){
1014
- $pagination .= ' ['.__('Refresh in','wp-slimstat').' <i class="refresh-timer"></i>]';
 
1015
  }
1016
  $pagination .= $pagination_buttons.'</p>';
1017
 
@@ -1314,7 +1287,7 @@ class wp_slimstat_reports {
1314
  "mouseWheelZoomEnabled": true,
1315
  "legend": {
1316
  "equalWidths": true,
1317
- "periodValueText": "[[value.sum]]",
1318
  "position": "bottom",
1319
  "align": "center"
1320
  },
@@ -1339,6 +1312,9 @@ class wp_slimstat_reports {
1339
  "export": {
1340
  "enabled": true
1341
  },
 
 
 
1342
  "graphs": [
1343
  <?php if ( !empty( $chart_data[ 'previous' ][ 'label' ] ) ) : ?>
1344
  {
@@ -1350,7 +1326,7 @@ class wp_slimstat_reports {
1350
  "hideBulletsCount": 50,
1351
  "lineThickness": 2,
1352
  "lineColor": "<?php echo $chart_colors[ 2 ] ?>",
1353
- "title": "<?php echo htmlspecialchars( $_args[ 'chart_labels' ][ 0 ] . ' ' . $chart_data[ 'previous' ][ 'label' ], ENT_QUOTES, 'UTF-8' ); ?>",
1354
  "type": "line",
1355
  "useLineColorForBulletBorder": true,
1356
  "valueField": "v3"
@@ -1363,7 +1339,7 @@ class wp_slimstat_reports {
1363
  "hideBulletsCount": 50,
1364
  "lineThickness": 2,
1365
  "lineColor": "<?php echo $chart_colors[ 3 ] ?>",
1366
- "title": "<?php echo htmlspecialchars( $_args[ 'chart_labels' ][ 1 ] . ' ' . $chart_data[ 'previous' ][ 'label' ], ENT_QUOTES, 'UTF-8' ); ?>",
1367
  "type": "line",
1368
  "useLineColorForBulletBorder": true,
1369
  "valueField": "v4"
@@ -1378,7 +1354,7 @@ class wp_slimstat_reports {
1378
  "hideBulletsCount": 50,
1379
  "lineColor": "<?php echo $chart_colors[ 0 ] ?>",
1380
  "lineThickness": 2,
1381
- "title": "<?php echo htmlspecialchars( $_args[ 'chart_labels' ][ 0 ] . ' ' . $chart_data[ 'current' ][ 'label' ], ENT_QUOTES, 'UTF-8' ); ?>",
1382
  "type": "line",
1383
  "useLineColorForBulletBorder": true,
1384
  "valueField": "v1"
@@ -1391,7 +1367,7 @@ class wp_slimstat_reports {
1391
  "hideBulletsCount": 50,
1392
  "lineColor": "<?php echo $chart_colors[ 1 ] ?>",
1393
  "lineThickness": 2,
1394
- "title": "<?php echo htmlspecialchars( $_args[ 'chart_labels' ][ 1 ] . ' ' . $chart_data[ 'current' ][ 'label' ], ENT_QUOTES, 'UTF-8' ); ?>",
1395
  "type": "line",
1396
  "useLineColorForBulletBorder": true,
1397
  "valueField": "v2"
@@ -1455,7 +1431,7 @@ class wp_slimstat_reports {
1455
  $results[ 1 ][ 'value' ] = $days_in_range;
1456
 
1457
  $results[ 2 ][ 'metric' ] = __( 'Average Daily Pageviews', 'wp-slimstat' );
1458
- $results[ 2 ][ 'value' ] = number_format( intval( self::$pageviews/$days_in_range ), 0, '', wp_slimstat_db::$formats['thousand'] );
1459
  $results[ 2 ][ 'tooltip' ] = __( 'How many pages have been visited on average every day during the current period.', 'wp-slimstat' );
1460
 
1461
  $results[ 3 ][ 'metric' ] = __( 'From Search Results', 'wp-slimstat' );
@@ -2026,28 +2002,30 @@ class wp_slimstat_reports {
2026
  $filtered_url = $filtered_url[ 0 ] . '?page=' . $request_page;
2027
 
2028
  // Columns
2029
- $filters_normalized = wp_slimstat_db::parse_filters( $_filters, false );
2030
 
2031
- if ( !empty( $filters_normalized[ 'columns' ] ) ) {
2032
- foreach ( $filters_normalized[ 'columns' ] as $a_key => $a_filter ) {
2033
  $a_key = str_replace( '_calculated', '', $a_key );
2034
  $filtered_url .= "&amp;fs%5B$a_key%5D=" . urlencode( $a_filter[ 0 ] . ' ' . $a_filter[ 1 ] );
2035
  }
2036
  }
2037
 
2038
  // Date ranges
2039
- if ( !empty( $filters_normalized[ 'date' ] ) ) {
2040
- foreach ( $filters_normalized[ 'date' ] as $a_key => $a_filter ) {
2041
- if ( !empty( $a_filter ) || $a_filter === 0 ) {
2042
  $filtered_url .= "&amp;fs%5B$a_key%5D=" . urlencode( 'equals ' . $a_filter );
2043
  }
2044
  }
2045
  }
2046
 
2047
  // Misc filters
2048
- if ( !empty( $filters_normalized[ 'misc' ] ) ) {
2049
- foreach ( $filters_normalized[ 'misc' ] as $a_key => $a_filter ) {
2050
- $filtered_url .= "&amp;fs%5B$a_key%5D=" . urlencode( 'equals ' . $a_filter );
 
 
2051
  }
2052
  }
2053
 
16
  * Initalize class properties
17
  */
18
  public static function init(){
19
+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
20
  // Include and initialize the API to interact with the database
21
  include_once( 'wp-slimstat-db.php' );
22
+ wp_slimstat_db::init();
23
 
24
  // Retrieve data that will be used by multiple reports
25
  self::$pageviews = wp_slimstat_db::count_records();
876
 
877
  // No network-wide settings exist
878
  if ( empty( self::$user_reports ) ) {
879
+ self::$user_reports = get_user_option( "meta-box-order_slimstat_page_slimlayout", $current_user->ID );
880
  }
881
 
882
  // Do this only if we are in one of our screens (no dashboard!)
957
 
958
  $_results_per_page = ( $_results_per_page < 0 ) ? wp_slimstat::$settings[ 'rows_to_show' ] : $_results_per_page;
959
 
960
+ $endpoint = min( $_count_all_results, wp_slimstat_db::$filters_normalized[ 'misc' ][ 'start_from' ] + $_results_per_page );
961
  $pagination_buttons = '';
962
  $direction_prev = is_rtl() ? 'right' : 'left';
963
  $direction_next = is_rtl() ? 'left' : 'right';
964
 
965
+ if ( $endpoint + $_results_per_page < $_count_all_results && $_count_page_results > 0 ) {
966
  $startpoint = $_count_all_results - $_count_all_results % $_results_per_page;
967
+ if ( $startpoint == $_count_all_results ) {
968
  $startpoint -= $_results_per_page;
969
  }
970
+ $pagination_buttons .= '<a class="button-ajax slimstat-font-angle-double-' . $direction_next . '" href="' . wp_slimstat_reports::fs_url( 'start_from equals ' . $startpoint ) . '"></a> ';
971
  }
972
  if ($endpoint < $_count_all_results && $_count_page_results > 0){
973
  $startpoint = wp_slimstat_db::$filters_normalized['misc']['start_from'] + $_results_per_page;
974
+ $pagination_buttons .= '<a class="button-ajax slimstat-font-angle-'.$direction_next.'" href="' . wp_slimstat_reports::fs_url( 'start_from equals ' . $startpoint ) . '"></a> ';
975
  }
976
  if (wp_slimstat_db::$filters_normalized['misc']['start_from'] > 0){
977
  $startpoint = (wp_slimstat_db::$filters_normalized['misc']['start_from'] > $_results_per_page)?wp_slimstat_db::$filters_normalized['misc']['start_from'] - $_results_per_page : 0;
981
  $pagination_buttons .= '<a class="button-ajax slimstat-font-angle-double-'.$direction_prev.'" href="'.wp_slimstat_reports::fs_url('start_from equals 0').'"></a> ';
982
  }
983
 
984
+ $pagination = '<p class="pagination">' . sprintf( __( 'Results %s - %s of %s', 'wp-slimstat' ), number_format( wp_slimstat_db::$filters_normalized[ 'misc' ][ 'start_from' ] + 1, 0, '', wp_slimstat_db::$formats[ 'thousand' ] ), number_format( $endpoint, 0, '', wp_slimstat_db::$formats[ 'thousand' ] ), number_format( $_count_all_results, 0, '', wp_slimstat_db::$formats[ 'thousand' ] ) . ( ( $_count_all_results == wp_slimstat::$settings[ 'limit_results' ] ) ? '+' : '') );
985
+
986
+ if ( $_show_refresh_countdown && wp_slimstat::$settings[ 'refresh_interval' ] > 0 && wp_slimstat_db::$filters_normalized[ 'utime' ][ 'end' ] >= date_i18n( 'U' ) - 300 ) {
987
+ $pagination .= ' [' . __( 'Refresh in', 'wp-slimstat' ) . ' <i class="refresh-timer"></i>]';
988
  }
989
  $pagination .= $pagination_buttons.'</p>';
990
 
1287
  "mouseWheelZoomEnabled": true,
1288
  "legend": {
1289
  "equalWidths": true,
1290
+ "periodValueText": "[[value.average]]",
1291
  "position": "bottom",
1292
  "align": "center"
1293
  },
1312
  "export": {
1313
  "enabled": true
1314
  },
1315
+ "numberFormatter": {
1316
+ "precision": 0
1317
+ },
1318
  "graphs": [
1319
  <?php if ( !empty( $chart_data[ 'previous' ][ 'label' ] ) ) : ?>
1320
  {
1326
  "hideBulletsCount": 50,
1327
  "lineThickness": 2,
1328
  "lineColor": "<?php echo $chart_colors[ 2 ] ?>",
1329
+ "title": "<?php echo htmlspecialchars( $_args[ 'chart_labels' ][ 0 ] . ' ' . $chart_data[ 'previous' ][ 'label' ], ENT_QUOTES, 'UTF-8' ); ?> (avg)",
1330
  "type": "line",
1331
  "useLineColorForBulletBorder": true,
1332
  "valueField": "v3"
1339
  "hideBulletsCount": 50,
1340
  "lineThickness": 2,
1341
  "lineColor": "<?php echo $chart_colors[ 3 ] ?>",
1342
+ "title": "<?php echo htmlspecialchars( $_args[ 'chart_labels' ][ 1 ] . ' ' . $chart_data[ 'previous' ][ 'label' ], ENT_QUOTES, 'UTF-8' ); ?> (avg)",
1343
  "type": "line",
1344
  "useLineColorForBulletBorder": true,
1345
  "valueField": "v4"
1354
  "hideBulletsCount": 50,
1355
  "lineColor": "<?php echo $chart_colors[ 0 ] ?>",
1356
  "lineThickness": 2,
1357
+ "title": "<?php echo htmlspecialchars( $_args[ 'chart_labels' ][ 0 ] . ' ' . $chart_data[ 'current' ][ 'label' ], ENT_QUOTES, 'UTF-8' ); ?> (avg)",
1358
  "type": "line",
1359
  "useLineColorForBulletBorder": true,
1360
  "valueField": "v1"
1367
  "hideBulletsCount": 50,
1368
  "lineColor": "<?php echo $chart_colors[ 1 ] ?>",
1369
  "lineThickness": 2,
1370
+ "title": "<?php echo htmlspecialchars( $_args[ 'chart_labels' ][ 1 ] . ' ' . $chart_data[ 'current' ][ 'label' ], ENT_QUOTES, 'UTF-8' ); ?> (avg)",
1371
  "type": "line",
1372
  "useLineColorForBulletBorder": true,
1373
  "valueField": "v2"
1431
  $results[ 1 ][ 'value' ] = $days_in_range;
1432
 
1433
  $results[ 2 ][ 'metric' ] = __( 'Average Daily Pageviews', 'wp-slimstat' );
1434
+ $results[ 2 ][ 'value' ] = number_format( round( self::$pageviews / $days_in_range, 0 ), 0, '', wp_slimstat_db::$formats['thousand'] );
1435
  $results[ 2 ][ 'tooltip' ] = __( 'How many pages have been visited on average every day during the current period.', 'wp-slimstat' );
1436
 
1437
  $results[ 3 ][ 'metric' ] = __( 'From Search Results', 'wp-slimstat' );
2002
  $filtered_url = $filtered_url[ 0 ] . '?page=' . $request_page;
2003
 
2004
  // Columns
2005
+ $url_filters = wp_slimstat_db::get_filters_normalized( $_filters, false );
2006
 
2007
+ if ( !empty( $url_filters[ 'columns' ] ) ) {
2008
+ foreach ( $url_filters[ 'columns' ] as $a_key => $a_filter ) {
2009
  $a_key = str_replace( '_calculated', '', $a_key );
2010
  $filtered_url .= "&amp;fs%5B$a_key%5D=" . urlencode( $a_filter[ 0 ] . ' ' . $a_filter[ 1 ] );
2011
  }
2012
  }
2013
 
2014
  // Date ranges
2015
+ if ( !empty( $url_filters[ 'date' ] ) ) {
2016
+ foreach ( $url_filters[ 'date' ] as $a_key => $a_filter ) {
2017
+ if ( isset( $a_filter ) ) {
2018
  $filtered_url .= "&amp;fs%5B$a_key%5D=" . urlencode( 'equals ' . $a_filter );
2019
  }
2020
  }
2021
  }
2022
 
2023
  // Misc filters
2024
+ if ( !empty( $url_filters[ 'misc' ] ) ) {
2025
+ foreach ( $url_filters[ 'misc' ] as $a_key => $a_filter ) {
2026
+ if ( strpos( $_filters, "$a_key equals" ) !== false ) {
2027
+ $filtered_url .= "&amp;fs%5B$a_key%5D=" . urlencode( 'equals ' . $a_filter );
2028
+ }
2029
  }
2030
  }
2031
 
readme.txt CHANGED
@@ -5,7 +5,7 @@ Tags: analytics, statistics, counter, tracking, reports, wassup, geolocation, on
5
  Text Domain: wp-slimstat
6
  Requires at least: 3.8
7
  Tested up to: 4.8
8
- Stable tag: 4.6.8
9
 
10
  == Description ==
11
  The leading web analytics plugin for WordPress. Track returning customers and registered users, monitor Javascript events, detect intrusions, analyze email campaigns. Thousands of WordPress sites are already using it.
@@ -71,6 +71,18 @@ Our knowledge base is available on our [support center](http://docs.wp-slimstat.
71
  5. **Responsive layout** - Keep an eye on your reports on the go
72
 
73
  == Changelog ==
 
 
 
 
 
 
 
 
 
 
 
 
74
  = 4.6.8 =
75
  * [Update] We should have known better: for every naysayer there is always a yaysayer that will [ask for just the opposite feature](https://wordpress.org/support/topic/recent-month-change/), right? Fair enough: that's what the settings panels are for, after all. In order to make everybody happy, we introduced a new option (under Slimstat > Settings > Reports) that will allow you to decide what the default time span should be: current month or past 30 days, it's totally up to you.
76
  * [Update] We implemented Chris' idea to use a transient when recording the visit_id, to improve performance (thank you, [Chris](https://wordpress.org/support/topic/recommend-switching-slimstat_visit_id-to-use-a-transient/)).
@@ -83,7 +95,6 @@ Our knowledge base is available on our [support center](http://docs.wp-slimstat.
83
  * [Fix] There was an incompatibility issue between our premium add-ons Custom DB and Network Settings, causing the network-wide configuration to be reset when a new blog was being created in the network.
84
  * [Fix] The tracker was not working as expected if the blacklist by usernames contained a @ character (thank you, Eugenio).
85
  * [Fix] A bug was affecting the way the geolocation function would calculate the country parameter from certain given IP addresses (thank you, Carsten).
86
- * [Fix] Links with "javascript:" value were being tracked as outbound clicks (thank you, [Luna](https://wordpress.org/support/topic/javascriptvoid0-2)).
87
 
88
  = 4.6.6 =
89
  * [New] Super administrators can now decide what reports users will see, and their arrangement both on the dashboard and Slimstat screens (thank you, [ac1643](https://wordpress.org/support/topic/specifying-the-settings-by-user/)). You will need our premium add-on [Network Analysis](https://www.wp-slimstat.com/downloads/network-view/) to unlock this feature.
5
  Text Domain: wp-slimstat
6
  Requires at least: 3.8
7
  Tested up to: 4.8
8
+ Stable tag: 4.6.9.1
9
 
10
  == Description ==
11
  The leading web analytics plugin for WordPress. Track returning customers and registered users, monitor Javascript events, detect intrusions, analyze email campaigns. Thousands of WordPress sites are already using it.
71
  5. **Responsive layout** - Keep an eye on your reports on the go
72
 
73
  == Changelog ==
74
+ = 4.6.9.1 =
75
+ * [New] You can now customize the "past days" interval to be used as the default time range to calculate your metrics, which was previously fixed to 30 days.
76
+ * [Fix] The Overview chart was not working as expected for some users, because of a bug in one of the revised SQL queries.
77
+ * [Fix] The pageview count on the Edit Posts/Pages screens was also affected by the same bug mentioned here above.
78
+
79
+ = 4.6.9 =
80
+ * [New] Added operating systems to the column you can use to blacklist certain pageviews. Please refer to [this page](https://slimstat.freshdesk.com/solution/articles/12000031504-what-are-the-operating-system-codes-used-by-slimstat-) to learn more about what codes Slimstat uses to represent operating systems internally.
81
+ * [New] In the Customizer, you can now quickly move your reports to the Inactive bucket with just one simple click, instead of dragging and dropping them all the way to the top (thank you, [ac1643](https://wordpress.org/support/topic/customizing-the-reports/)).
82
+ * [Update] We partially rewrote the code that handles our Filter Bar, specifically when it comes to handling date ranges. A few minor bugs were squashed in the process, but please don't report us to PETA! (thank you, Boris)
83
+ * [Fix] The customizer was not working if the Slimstat menu was being displayed in the admin bar instead of as a separate menu. Please report any issues you experience in using the customizer.
84
+ * [Fix] Our charts are calculating the sum of all the data points, day by day. However other reports show a cumulative sum (let's say of Unique IPs) for the whole month. If a given IP visits your website on two different days, it will be counted twice in the Unique IPs chart, but only once in Traffic at Glance. In order to avoid any confusion, we are changing the chart legend to display the AVERAGE value, instead of the sum.
85
+
86
  = 4.6.8 =
87
  * [Update] We should have known better: for every naysayer there is always a yaysayer that will [ask for just the opposite feature](https://wordpress.org/support/topic/recent-month-change/), right? Fair enough: that's what the settings panels are for, after all. In order to make everybody happy, we introduced a new option (under Slimstat > Settings > Reports) that will allow you to decide what the default time span should be: current month or past 30 days, it's totally up to you.
88
  * [Update] We implemented Chris' idea to use a transient when recording the visit_id, to improve performance (thank you, [Chris](https://wordpress.org/support/topic/recommend-switching-slimstat_visit_id-to-use-a-transient/)).
95
  * [Fix] There was an incompatibility issue between our premium add-ons Custom DB and Network Settings, causing the network-wide configuration to be reset when a new blog was being created in the network.
96
  * [Fix] The tracker was not working as expected if the blacklist by usernames contained a @ character (thank you, Eugenio).
97
  * [Fix] A bug was affecting the way the geolocation function would calculate the country parameter from certain given IP addresses (thank you, Carsten).
 
98
 
99
  = 4.6.6 =
100
  * [New] Super administrators can now decide what reports users will see, and their arrangement both on the dashboard and Slimstat screens (thank you, [ac1643](https://wordpress.org/support/topic/specifying-the-settings-by-user/)). You will need our premium add-on [Network Analysis](https://www.wp-slimstat.com/downloads/network-view/) to unlock this feature.
wp-slimstat.php CHANGED
@@ -3,7 +3,7 @@
3
  Plugin Name: Slimstat Analytics
4
  Plugin URI: http://wordpress.org/plugins/wp-slimstat/
5
  Description: The leading web analytics plugin for WordPress
6
- Version: 4.6.8
7
  Author: Jason Crouse
8
  Author URI: http://www.wp-slimstat.com/
9
  Text Domain: wp-slimstat
@@ -15,7 +15,7 @@ if ( !empty( wp_slimstat::$settings ) ) {
15
  }
16
 
17
  class wp_slimstat {
18
- public static $version = '4.6.8';
19
  public static $settings = array();
20
  public static $options = array(); // To be removed, here just for backward compatibility
21
 
@@ -568,6 +568,18 @@ class wp_slimstat {
568
  }
569
  }
570
 
 
 
 
 
 
 
 
 
 
 
 
 
571
  self::$stat = self::$stat + self::$browser;
572
 
573
  // This function can be called in "simulate" mode: no data will be actually saved in the database
3
  Plugin Name: Slimstat Analytics
4
  Plugin URI: http://wordpress.org/plugins/wp-slimstat/
5
  Description: The leading web analytics plugin for WordPress
6
+ Version: 4.6.9.1
7
  Author: Jason Crouse
8
  Author URI: http://www.wp-slimstat.com/
9
  Text Domain: wp-slimstat
15
  }
16
 
17
  class wp_slimstat {
18
+ public static $version = '4.6.9.1';
19
  public static $settings = array();
20
  public static $options = array(); // To be removed, here just for backward compatibility
21
 
568
  }
569
  }
570
 
571
+ // Is this operating system blacklisted?
572
+ if ( !empty( self::$settings[ 'ignore_platforms' ] ) ) {
573
+ $return_error_code = array(
574
+ -312,
575
+ sprintf( __( 'Operating System %s is blacklisted', 'wp-slimstat' ), self::$browser[ 'platform' ] ),
576
+ true
577
+ );
578
+ if ( self::_is_blacklisted( self::$browser[ 'platform' ], self::$settings[ 'ignore_platforms' ], $return_error_code ) ) {
579
+ return $_argument;
580
+ }
581
+ }
582
+
583
  self::$stat = self::$stat + self::$browser;
584
 
585
  // This function can be called in "simulate" mode: no data will be actually saved in the database