WassUp Real Time Analytics - Version 1.9.2

Version Description

  • Urgent bugfix upgrade. DO NOT UPGRADE when your site busy! Read installation instructions for safe upgrade instructions.

=

Download this release

Release Info

Developer michelem
Plugin Icon 128x128 WassUp Real Time Analytics
Version 1.9.2
Comparing to
See all releases

Code changes from version 1.9.1 to 1.9.2

README.md DELETED
@@ -1,257 +0,0 @@
1
- # WassUp Real Time Analytics for WordPress
2
- Contributors: michelem, helened
3
- Donate link: [donate](https://www.paypal.com/cgi-bin/webscr?cmd=_xclick&business=michele%40befree%2eit&item_name=WassUp&no_shipping=0&no_note=1&tax=0&currency_code=EUR&lc=IT&bn=PP%2dDonationsBF&charset=UTF%2d8)
4
- Tags: analytics, counter, online, seo, statistics, stats, tracker, traffic, trends, user, visitor, web
5
- Requires at least: WordPress 4.0
6
- Tested up to: 4.6.1
7
- Stable tag: 1.9.1
8
- License: GPLv2 or later
9
- License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
-
11
- #### Analyze your website traffic with accurate, real-time stats, live views, visitor counts, top stats, IP geolocation, customizable tracking, and more.
12
- -----
13
- ## Description
14
-
15
- WassUp is a Wordpress plugin to analyze your visitors traffic with accurate, real-time stats, lots of detailed chronological information, customizable tracking, live views, visitor and pageview counts, top stats, charts, IP geolocation, map, two aside widgets, and a dashboard widget.
16
-
17
- Wassup does in-depth visitor tracking and shows you incredible details about your site's latest hits...more than you can get from almost any other single plugin. It is very useful for SEO and statistics maniacs who want to see accurate, up-to-date stats displayed in a straightforward, easy to understand manner.
18
-
19
- The aim of WassUp is the timely knowledge of what your visitors do when they surf your site. It is not intended to show grouped statistics over preset, long-term time periods like visitors per month, pageviews per quarter, and so on (there are many others tools to better gain that, like Google Analytics). WassUp's flexible, easy-to-read views are the best for learning the details about your visitors' latest activities. With it's customizable filters and search capability, you can drill deeply into the data to learn even more about specific visitors, visitor types, etc.
20
-
21
- ### Detailed Specs:
22
- #### WassUp comes with 4 admin screen panels for viewing your visitors' activities and for customizing those views
23
- * There is a fancy "Visitors Details" screen that lets you to see almost everything about your visitors and what they do on your site and that includes search capability, view filters, plus a chart and top stats summary.
24
- * There is an ajax "Spy View" screen (like Digg Spy) that lets you monitor your visitors live, with optional geolocation on a Google!maps world map.
25
- * There is a "Current Visitors Online" screen that shows a summary of your online visitors in real-time.
26
- * There is an "Options" panel with lots of customizable settings for WassUp.
27
-
28
- There is a nice Dashboard widget that shows a line chart of hits over time (24 hours default) and a count of current visitors online and their latest activities.
29
-
30
- #### WassUp comes with two useful sidebar Widgets that lets you display your site's latest data to your visitors
31
- * The "Online" widget shows counts of current visitors online and includes options to display logged-in usernames and country flags.
32
- * The "Top Stats" widgets lets you display trending or timed top items about your site based on the latest stats. You can list top search engine keywords, top external referrers, top url requests, top articles, top browsers, top OSes, and more.
33
- * The widgets are fully customizable.
34
-
35
- #### WassUp's advanced tracking features can:
36
- * Distinguish registered users from anonymous visitors, and administrators from other registered users.
37
- * Identify and label new browsers, robots, and feed readers, heuristically.
38
- * Track page requests that generate 404 (not found) redirects.
39
- * Detect some spiders that pretend to be regular visitors/browsers.
40
- * Expose spam and malware activity such as hack attempts, script injection, and xss exploit attempts.¹
41
-
42
- WassUp works with two anti-spam functions to detect and omit (if you want) referrers spammers and comment spammers. It can also detect and omit malware activity such as unauthorized users' login attempts, script injection, and xss exploit attempts.
43
-
44
- For people with database size limitations, WassUp has a few options to manage the database table growth: you can empty it; you can delete old records automatically; and you can set a warning notice for when it exceeds a preset size limit.
45
-
46
- #### WassUp gives a detailed chronology of your hits with a lot of information for each single user session:
47
- * ip / hostname
48
- * referrer
49
- * spider
50
- * search engines used
51
- * keywords
52
- * SERP (search engine result page)
53
- * operating system / language / browser
54
- * pages viewed (chronologically and per user session)
55
- * complete user agent
56
- * name of user logged in
57
- * name of comment's author
58
- * spam and hack attempts
59
-
60
- #### Wassup admin console has flexible view filters that show:
61
- * records by time period
62
- * record count per page
63
- * records by entry type (spider, users logged in, comment authors, search engine, referrer)
64
- * search by keyword
65
- * expand/collapse informations (with ajax support)
66
- * usage chart (Google!chart)
67
- * top stats lists with aggregate data (top queries, requests, os, browsers)
68
-
69
- #### There are many options to customize how WassUp tracks and displays data:
70
- * Enable/Disable recording (tracking)
71
- * Screen refresh frequency (minutes)
72
- * Screen resolution (browser width)
73
- * User permission levels
74
- * Top stats selections
75
- * Record or not logged-in users
76
- * Record or not spiders and bots
77
- * Record or not exploit attempts
78
- * Record or not comment spammers
79
- * Record or not referrer spammers
80
- * registered users to exclude from recording
81
- * IP or hostname to exclude from recording
82
- * Email alert for table growth
83
- * Auto delete of old records
84
-
85
- ### IMPORTANT NOTICES
86
- * To run Wassup in Wordpress 2.2 - 3.7, you must install the full copy of Wassup with backward-compatibility features available at [http://github.com/michelem09/wassup/](http://github.com/michelem09/wassup/)
87
- * WassUp is incompatible with static page caching plugins such as "WP Super-Cache"
88
- * ¹WassUp is NOT a security plugin. It does not block unwanted visitors nor protect your site from malware attempts. You need a separate security plugin for that
89
-
90
- ## Screenshots
91
- 1. Wassup - Visitor Details view.
92
- 2. Wassup - SPY Visitors view.
93
-
94
- You can find more screenshots at [http://www.wpwp.org](http://www.wpwp.org)
95
-
96
- ## Installation
97
-
98
- ### Installation
99
- A. If your Wordpress setup is up-to-date, you can install this plugin automatically from Wordpress admin panel:
100
- 1. Navigate to Plugins >> `Add New`
101
- 2. Type "WassUp" plugin name in the "Search Plugins" box.
102
- 3. Locate "Wassup Real-Time Analytics" and click `Install Now`
103
- 4. Activate it and you are done!
104
-
105
- B. If you prefer to install the plugin manually or you are running an older version of Wordpress, download the latest full release of WassUp (Real-Time Analytics) plugin directly from [gitHub.com/michelem09/wassup/releases/](https://github.com/michelem09/wassup/releases/) and save onto your local computer
106
-
107
- * If available, use Wordpress' `Upload Plugin` option in the plugins panel to complete your install:
108
- 1. Navigate to Plugins panel >> `Add New` >> `Upload Plugin`
109
- 2. Click `Browse`, then find and select the plugin zip file that you downloaded
110
- 3. Click `Install Now`
111
- 4. Activate WassUp plugin and you are done!
112
-
113
- * Otherwise, unpack the plugin's zip or gz file with your preferred unzip/untar program or use the command line: `tar xzvf wassup.tar.gz` (linux), then follow these steps to complete your install:
114
- 1. Upload the entire "wassup" folder into your `/wp-content/plugins` directory on your Wordpress host using their Cpanel File manager or an ftp client software
115
- 2. Login to Wordpress admin panel and navigate to Plugins page
116
- 3. Activate WassUp plugin and you are done!
117
-
118
- -----
119
- ### Upgrading**
120
-
121
- Check your current visitors count under WassUp >>Current Visitors Online panel. If your site is busy, STOP! Don't upgrade. Wait until there are no visitors or follow the "Safe Upgrade Instructions" below.
122
-
123
- A. If your Wordpress setup is up-to-date, you can upgrade this plugin automatically from Wordpress admin panel:
124
-
125
- 1. Navigate to "Plugins" page, and under WassUp plugin name, click the `Update Now` link.
126
-
127
- B. If you prefer to manually upgrade OR you are running an older version of Wordpress, follow these instructions:
128
-
129
- 1. Deactivate WassUp plugin under Wordpress admin panel >>Plugins page
130
- 2. Manually delete the "wassup" folder from your plugins directory (`/wp-content/plugins/`) on your Wordpress host using their CPanel File manager or with an ftp client software. Do NOT click the `delete` link in Wordpress.
131
- 3. Download the latest full release of Wassup Real-Time Analytics directly from [gitHub.com/michelem09/wassup/releases/](https://github.com/michelem09/wassup/releases/) and save onto your local computer.
132
- 4. Then follow the manual install instructions in section B:i-iv above.
133
-
134
-
135
- ### **IMPORTANT Safe Upgrade Instructions
136
-
137
- To safely upgrade WassUp when your site is busy, you must manually stop visitor recording beforehand, do the upgrade, then manually resume recording afterwards:
138
-
139
- 1. In WordPress admin panel, navigate to WassUp >>Options >>[Genernal Setup] tab. Uncheck the box for "Enable statistics recording" and save.
140
- 1. Navigate to Plugins page and click the "Update Now" link under "WassUp" plugin name or follow the manual upgrade instructions above
141
- 1. After the upgrade is done, go back to WassUp >>Options >>[General Setup] tab, and check the box for "Enable statistics recording" and save.
142
-
143
- ### Usage
144
- When you activate this plugin (as described in "Installation"), it works "as is". You don't have anything to do. Wait for visitors to hit your site and start seeing details (click the dashboard and go to WassUp page)
145
-
146
- ### Compatibility Notice
147
- * WassUp is incompatible with the following static page caching plugins: WP Super Cache, WP Cache, and WP Hyper Cache.
148
-
149
-
150
- ## Upgrade Notice
151
-
152
- ### v1.9.1
153
- * Critical security, compatibility and bugfix upgrade.
154
- 64MB memory is now required for Wassup! See [codex document "Editing wp-config.php"](https://codex.wordpress.org/Editing_wp-config.php#Increasing_memory_allocated_to_PHP) to increase memory allocated to Wordpress before upgrading.
155
- DO NOT UPGRADE when your site busy! Read [installation instructions](http://wordpress.org/plugins/wassup/installation/) for safe upgrade instructions.
156
-
157
- ## Changelog
158
- ### v1.9.1: Critical security, compatibility, and bugfix upgrade
159
- * patched security loopholes (xss vulnerability) in the 'Top stats' widget and in `wassupURI::add_siteurl` method
160
- * revised plugin code to improve prevention of XSS attacks via it's interface and widgets
161
- * revised plugin code to comply with the latest requirements for inclusion in Wordpress.org plugin repository
162
- * revised 'readme.txt' to comply with Wordpress.org plugin repository guidelines.
163
- * new module, 'wassupadmin.php' for WassUp admin panels and dashboard widget
164
- * new module, 'compatibility.php' to check for Wordpress and PHP compatibility and to load compatibility modules from `/lib/compat-lib/` subfolder when available
165
- * removed backward compatibility folder, modules, and javascripts from Wordpress's copy of Wassup package to comply with Wordpress plugin repository requirements.
166
- Wassup's backward-compatibility feature remains in the full copy of Wassup available at [http://github.com/michelem09/wassup/](http://github.com/michelem09/wassup/)
167
- * removed obsolete files 'badhosts.txt', 'badhosts-intl.txt'
168
- * updated Google!Maps API link to use a common API key for Wassup-Spy (required by Google since 2016-06-22).
169
- * updated WassUp 'wp-cron' scheduled tasks to terminate (and restart) at reset-to-default, recording stop/start, and at plugin deactivate/reactivate events.
170
- * updated Wassup table export to omit all known spam/malware records from export by default...to avoid propagation of malware code when exported records are imported into other applications.
171
- * updated `wassup_Akismet` class to abort remote requests with timeout error after 5 seconds to avoid plugin slowdown due to slow server response.
172
- * updated 'UADetector' and 'wDetector' classes to improve browser and os detection (Microsoft Edge, Win10).
173
- * updated translation template, 'wassup.pot'.
174
- * fixed problem with login page hits not being recorded.
175
- * fixed errors caused by disabled 'set_time_limit' function in some configurations.
176
- * fixed a 'preg_match' error that affected 404 and spam detection.
177
- * fixed a "script timeout" calculation/test error in Visitor-details.
178
- * fixed incorrect Wassup menu "href" values in network admin panels.
179
- * fixed a MySQL timezone/offset calculation error in some queries.
180
- * fixed a scheduled task validation error that caused some wp-cron tasks to fail.
181
- * miscellaneous minor bugfixes.
182
- * miscellaneous minor text changes
183
- * minor css changes for small screen devices.
184
-
185
- ### v1.9: Important compatibility and feature improvement upgrade.
186
- * new caching of MySQL expensive queries to improve plugin performance
187
- * new options for improved MySQL table management
188
- * new multisite network compatibility feature added
189
- * new and improved aside widgets with multi-widget capability
190
- * new tracking filters to exclude some automated requests and to add wildcard filtering by hostnames and ip
191
- * new "FAQ" and "Donate" panels in Wassup-Options submenu
192
- * new "top stats" popup-window in Visitor Details panel
193
- * updated code for Wordpress 4.x, PHP 5.6-mysqli compatibility, and Akismet 3.0 plugin compatibility
194
- * updated plugin security with more input validation, deprecated functions removal, and escaped output
195
- * updated javascripts libraries, `jquery.js`,`jquery-ui.js` and added jquery-migrate.js and wassup.js
196
- * updated css and validated as 100% W3C CSS3 compliant
197
- * updated browser and os detection for new agents (Win10)
198
- * updated translation template (wassup.pot)
199
- * updated "readme.txt"
200
- * fixed search engine referrer data to substitute "not provided" for missing keywords from secure searches (https-to-http omission)
201
- * fixed a fatal error in Wassup-options caused by disabled PHP functions in some host configurations
202
- * fixed a bug in Wassup-options that caused table export to fail
203
- * fixed an activation failure problem in `upgrade.php` that occurred in some host configurations
204
- * 3 new classes added to code: `wassupDb` for MySQL table operations and caching, `wassupURI` to format and clean urls/links for safe output, and `Wassup_Widget` a base widget for building Wassup widgets
205
- * minor text changes
206
- * minor bugfixes
207
-
208
- ### v1.8.6
209
- * Removed deprecated Wordpress methods, minor text changes.
210
-
211
- ### v1.8.5
212
- * Changes to GEOIP API for Map geolocation, minor CSS changes.
213
-
214
- ### v1.8.4
215
- * Migrated to Google Maps API v3
216
- * New locales: English (United Kingdom) [complete], Persian [partial], Sinhalese [partial], Vietnamese [partial]
217
- * New donate button in WassUp menu
218
- * fixed CSS for WassUp menu.
219
-
220
- ### v1.8.3.1
221
- * Security fix for xss attempts via useragent string.
222
-
223
- ### v1.8.3
224
- * bugfixes, improved tracking, changes for Wordpress compatibility.
225
-
226
- ### v1.8.2
227
- * bugfixes, improved browser/agent detection.
228
-
229
- ### v1.8.1
230
- * bugfix and minor changes.
231
-
232
- ### v1.8: Important feature improvement upgrade.
233
- * new table `wassup_meta` for caching and stats collection.
234
- * new admin interface style.
235
- * new GEOIP API [freegeoip.net](http://freegeoip.net) for map geolocation in SPY view. Thanks to [@AlexandreFiori](http://twitter.com/alexandrefiori) for giving us access to his API.
236
- * bugfixes, security fixes, and changes for Wordpress compatibility.
237
-
238
-
239
- ## Infos
240
- ### Plugin Home
241
- * [http://www.wpwp.org](http://www.wpwp.org "http://www.wpwp.org")
242
-
243
- ### Plugin Development
244
- * For pre-release bugfixes and other changes to WassUp, you can download the development version of Wassup from GitHub:
245
- [https://github.com/michelem09/wassup](https://github.com/michelem09/wassup "https://github.com/michelem09/wassup")
246
- * For the latest browsers, os, and spider detection updates, you can download the `uadetector.class.php` module separately on GitHub:
247
- [https://github.com/hdunk/uadetector.class.php](https://github.com/hdunk/uadetector.class.php "https://github.com/hdunk/uadetector.class.php")
248
-
249
- ### Developers Home
250
- * Michele M: [http://www.michelem.org](http://www.michelem.org "http://www.michelem.org")
251
- * Helene D: [http://helenesit.com](http://helenesit.com "http://helenesit.com")
252
-
253
- ### Credits
254
- * [Jquery](http://www.jquery.com) for the amazing Ajax framework
255
- * [FAMFAMFAM](http://www.famfamfam.com/) for the flags icons
256
- * Thanks to [@AlexandreFiori](http://twitter.com/alexandrefiori) for access to his GeoIP API at [freegeoip.net](http://freegeoip.net)
257
- * A big thanks to [Helene D.](http://helenesit.com/) for her help to improve WassUp!
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
css/wassup.css CHANGED
@@ -97,8 +97,6 @@ div.main-tabs{margin:10px auto 3px;padding:3px;color:#445;background-color:#e1df
97
  #wassup-wrap .sum-det .det1{padding-left:10px;text-indent:-5px;font-size:14px;}
98
  #wassup-wrap .det3{padding-left:20px;}
99
  #wassup-wrap .det1 span{color:#00284a;}
100
- #wassup-wrap span.malware{color:#777;}
101
- #wassup-wrap ul.useragent >li span.malware{color:inherit;}
102
  #wassup-wrap .det1 a{font-weight:bold;border-bottom:1px solid !important;}
103
  #wassup-wrap .det2 a,#wassup-wrap .det2 a:link, #wassup-wrap .sum-det span.det2 a{color:#02a !important;}
104
  #wassup-wrap .det2 a:hover, #wassup-wrap .sum-det span.det2 a:hover {color:#d54d22 !important;}
97
  #wassup-wrap .sum-det .det1{padding-left:10px;text-indent:-5px;font-size:14px;}
98
  #wassup-wrap .det3{padding-left:20px;}
99
  #wassup-wrap .det1 span{color:#00284a;}
 
 
100
  #wassup-wrap .det1 a{font-weight:bold;border-bottom:1px solid !important;}
101
  #wassup-wrap .det2 a,#wassup-wrap .det2 a:link, #wassup-wrap .sum-det span.det2 a{color:#02a !important;}
102
  #wassup-wrap .det2 a:hover, #wassup-wrap .sum-det span.det2 a:hover {color:#d54d22 !important;}
img/loadingAnimation.gif CHANGED
Binary file
js/thickbox/loadingAnimation.gif CHANGED
Binary file
js/thickbox/thickbox.js CHANGED
@@ -314,4 +314,3 @@
314
  }
315
  }
316
  }(jQuery));
317
-
314
  }
315
  }
316
  }(jQuery));
 
language/wassup.pot CHANGED
@@ -8,7 +8,7 @@ msgid ""
8
  msgstr ""
9
  "Project-Id-Version: WassUp 1.9.1\n"
10
  "Report-Msgid-Bugs-To: michele@befree.it\n"
11
- "POT-Creation-Date: 2016-10-04 18:34-0400\n"
12
  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14
  "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,226 +17,221 @@ msgstr ""
17
  "Content-Type: text/plain; charset=CHARSET\n"
18
  "Content-Transfer-Encoding: 8bit\n"
19
 
20
- #: wassup.php:132
21
  #, php-format
22
  msgid "File %s does not exist!"
23
  msgstr ""
24
 
25
- #: wassup.php:142
26
- msgid ""
27
- "Sorry, WassUp requires WordPress 3.1 or higher to work in multisite setups"
28
- msgstr ""
29
-
30
- #: wassup.php:153
31
  msgid "Sorry! \"Network Activation\" is DISABLED for subdomain networks."
32
  msgstr ""
33
 
34
- #: wassup.php:154
35
  #, php-format
36
  msgid "%s must be activated on each subdomain site separately."
37
  msgstr ""
38
 
39
- #: wassup.php:155
40
  msgid ""
41
  "Activate plugin on your parent domain (main site) to set default options for "
42
  "your network."
43
  msgstr ""
44
 
45
- #: wassup.php:156
46
  msgid "Back to Plugins"
47
  msgstr ""
48
 
49
- #: wassup.php:218 lib\upgrade.php:717
50
  msgid "Database created/upgraded successfully"
51
  msgstr ""
52
 
53
- #: wassup.php:220
54
  msgid ""
55
  "An error occurred during the upgrade. WassUp table structure may not have "
56
  "been updated properly."
57
  msgstr ""
58
 
59
- #: wassup.php:224
60
  msgid "activation successful"
61
  msgstr ""
62
 
63
- #: wassup.php:226
64
  msgid "activation successful. No upgrade necessary."
65
  msgstr ""
66
 
67
- #: wassup.php:253
68
  #, php-format
69
  msgid "%s: database upgrade failed!"
70
  msgstr ""
71
 
72
- #: wassup.php:264
73
  #, php-format
74
  msgid "%s: plugin install/upgrade failed!"
75
  msgstr ""
76
 
77
- #: wassup.php:444 wassup.php:447 wassup.php:450 lib\action.php:59
78
  msgid "Bad request!"
79
  msgstr ""
80
 
81
- #: wassup.php:636
82
  msgid "Export ERROR: nonce failure!"
83
  msgstr ""
84
 
85
- #: wassup.php:639 lib\wassup.class.php:1907 lib\compat-lib\compat_php.php:1917
86
  msgid "Export ERROR: login required!"
87
  msgstr ""
88
 
89
- #: wassup.php:683
90
  msgid "Export failed due to script interruption or timeout error!"
91
  msgstr ""
92
 
93
- #: wassup.php:697
94
  msgid "ERROR: Nothing to Export."
95
  msgstr ""
96
 
97
- #: wassup.php:970 wassup.php:3210 lib\uadetector.class.php:607
98
- #: lib\uadetector.class.php:1438
99
  msgid "Unknown Spider"
100
  msgstr ""
101
 
102
- #: wassup.php:971
103
  msgid "Unknown Browser"
104
  msgstr ""
105
 
106
- #: wassup.php:1580
107
  msgid "Spoofer bot"
108
  msgstr ""
109
 
110
- #: wassup.php:1993
111
  #, php-format
112
  msgid "%s WassUp Plugin table has reached maximum size!"
113
  msgstr ""
114
 
115
- #: wassup.php:1993
116
  msgid "ALERT"
117
  msgstr ""
118
 
119
- #: wassup.php:1994
120
  msgid "Hi"
121
  msgstr ""
122
 
123
- #: wassup.php:1994
124
  msgid ""
125
  "you have received this email because your WassUp Database table at your "
126
  "Wordpress blog"
127
  msgstr ""
128
 
129
- #: wassup.php:1994
130
  msgid "has reached the maximum value set in the options menu"
131
  msgstr ""
132
 
133
- #: wassup.php:1995
134
  msgid ""
135
  "This is only a reminder, please take the actions you want in the WassUp "
136
  "options menu"
137
  msgstr ""
138
 
139
- #: wassup.php:1995
140
  msgid "This alert now will be removed and you will be able to set a new one"
141
  msgstr ""
142
 
143
- #: wassup.php:1996
144
  msgid ""
145
  "Thank you for using WassUp plugin. Check if there is a new version available "
146
  "here:"
147
  msgstr ""
148
 
149
- #: wassup.php:1996
150
  msgid "Have a nice day!"
151
  msgstr ""
152
 
153
- #: wassup.php:2237 wassup.php:2681
154
  msgid "encrypted search"
155
  msgstr ""
156
 
157
- #: wassup.php:3197 wassup.php:3204
158
  msgid "Feed Reader"
159
  msgstr ""
160
 
161
- #: wassup.php:3205
162
  msgid "feed reader"
163
  msgstr ""
164
 
165
- #: wassup.php:3812
166
  msgid "timestamp"
167
  msgstr ""
168
 
169
- #: wassup.php:3813
170
  msgid "If above timestamp is not current time, this page is cached"
171
  msgstr ""
172
 
173
- #: wassup.php:3994
174
  msgid "Visitors Online"
175
  msgstr ""
176
 
177
- #: wassup.php:4009 lib\compat-lib\compat_widget.php:157 widgets\widgets.php:151
178
- #: widgets\widgets.php:342 widgets\widgets.php:556
179
  msgid "No Data"
180
  msgstr ""
181
 
182
- #: lib\action.php:50
183
  msgid "Missing or invalid action parameter!"
184
  msgstr ""
185
 
186
- #: lib\action.php:62
187
  msgid "Login required!"
188
  msgstr ""
189
 
190
- #: lib\action.php:66
191
  msgid "Missing or invalid whash parameter!"
192
  msgstr ""
193
 
194
- #: lib\action.php:76
195
  msgid "invalid hash parameter!"
196
  msgstr ""
197
 
198
- #: lib\action.php:80
199
  msgid "Nothing to do"
200
  msgstr ""
201
 
202
- #: lib\action.php:100
203
  msgid "An error occurred during delete of"
204
  msgstr ""
205
 
206
- #: lib\action.php:105 lib\action.php:116 lib\action.php:119 lib\action.php:122
207
  msgid "Error"
208
  msgstr ""
209
 
210
- #: lib\action.php:109
211
  #, php-format
212
  msgid "%d records deleted!"
213
  msgstr ""
214
 
215
- #: lib\action.php:155
216
  msgid "ERROR: bad date parameter"
217
  msgstr ""
218
 
219
- #: lib\action.php:208
220
  msgid "Error: Nothing to do!"
221
  msgstr ""
222
 
223
- #: lib\akismet.class.php:127
224
  msgid "Timed out waiting for server response."
225
  msgstr ""
226
 
227
- #: lib\akismet.class.php:129 lib\akismet.class.php:132
228
  msgid "The response could not be retrieved."
229
  msgstr ""
230
 
231
- #: lib\akismet.class.php:139
232
  msgid "Could not connect to Akismet server."
233
  msgstr ""
234
 
235
- #: lib\akismet.class.php:193
236
  msgid "Your Akismet API key is not valid."
237
  msgstr ""
238
 
239
- #: lib\compatibility.php:79
240
  msgid "Sorry, WassUp requires WordPress 2.2 or higher to work"
241
  msgstr ""
242
 
@@ -244,1073 +239,1082 @@ msgstr ""
244
  msgid "WARNING! WassUp's backward compatibility modules are missing."
245
  msgstr ""
246
 
247
- #: lib\compatibility.php:86 lib\compatibility.php:89
248
  #, php-format
249
  msgid ""
250
  "Download and install the full version of Wassup with compatibility library "
251
  "included directly from %s."
252
  msgstr ""
253
 
254
- #: lib\compatibility.php:88
 
 
 
 
 
255
  msgid "WARNING! WassUp's PHP compatibility module is missing."
256
  msgstr ""
257
 
258
- #: lib\main.php:63 lib\settings.php:320 lib\settings.php:374
259
- #: lib\settings.php:1008 lib\settings.php:1024 lib\settings.php:1085
260
- #: lib\settings.php:1105
261
  msgid "Next"
262
  msgstr ""
263
 
264
- #: lib\main.php:65
265
  msgid "Previous"
266
  msgstr ""
267
 
268
- #: lib\main.php:119
269
  #, php-format
270
  msgid "You must specify the %s"
271
  msgstr ""
272
 
273
- #: lib\main.php:119
274
  msgid "number of pages"
275
  msgstr ""
276
 
277
- #: lib\main.php:123
278
  #, php-format
279
  msgid "You must specify the %s to show per page"
280
  msgstr ""
281
 
282
- #: lib\main.php:123
283
  msgid "limit of items"
284
  msgstr ""
285
 
286
- #: lib\main.php:172
287
  msgid "Pages"
288
  msgstr ""
289
 
290
- #: lib\main.php:412
291
  msgid "Raw data"
292
  msgstr ""
293
 
294
- #: lib\main.php:413
295
  msgid "Visitor type"
296
  msgstr ""
297
 
298
- #: lib\main.php:425 widgets\widget_functions.php:230
299
  msgid "Logged-in user"
300
  msgstr ""
301
 
302
- #: lib\main.php:427
303
  msgid "Spammer/Hacker"
304
  msgstr ""
305
 
306
- #: lib\main.php:429 lib\main.php:594
307
  msgid "Spammer"
308
  msgstr ""
309
 
310
- #: lib\main.php:431 lib\main.php:614 widgets\widget_functions.php:240
311
  msgid "Comment author"
312
  msgstr ""
313
 
314
- #: lib\main.php:433 lib\main.php:484 lib\main.php:486
315
  msgid "Feed"
316
  msgstr ""
317
 
318
- #: lib\main.php:435 lib\main.php:489 lib\main.php:601 lib\wassup.class.php:481
319
- #: lib\wassup.class.php:537 lib\compat-lib\compat_php.php:494
320
- #: lib\compat-lib\compat_php.php:550
321
  msgid "Spider"
322
  msgstr ""
323
 
324
- #: lib\main.php:437 lib\main.php:573 widgets\widget_functions.php:250
325
  msgid "Regular visitor"
326
  msgstr ""
327
 
328
- #: lib\main.php:440
329
  msgid "IP"
330
  msgstr ""
331
 
332
- #: lib\main.php:441 lib\wassupadmin.php:1773
333
  msgid "Hostname"
334
  msgstr ""
335
 
336
- #: lib\main.php:442
337
  msgid "Url Requested"
338
  msgstr ""
339
 
340
- #: lib\main.php:449
341
  msgid "Post/page ID"
342
  msgstr ""
343
 
344
- #: lib\main.php:453
345
  msgid "none or deleted post"
346
  msgstr ""
347
 
348
- #: lib\main.php:455 lib\compat-lib\compat_widget.php:108
349
- #: widgets\widgets.php:105 widgets\widgets.php:236 widgets\widgets.php:410
350
  msgid "Title"
351
  msgstr ""
352
 
353
- #: lib\main.php:457 lib\wassupadmin.php:1770 lib\wassupadmin.php:2116
354
- #: lib\compat-lib\compat_php.php:2627
355
  msgid "Referrer"
356
  msgstr ""
357
 
358
- #: lib\main.php:460
359
  msgid "Search Engine"
360
  msgstr ""
361
 
362
- #: lib\main.php:461 lib\wassupadmin.php:209 lib\wassupadmin.php:212
363
- #: lib\wassupadmin.php:1571 lib\wassupadmin.php:1603
364
  msgid "Search"
365
  msgstr ""
366
 
367
- #: lib\main.php:462
368
  msgid "Page"
369
  msgstr ""
370
 
371
- #: lib\main.php:464 lib\wassupadmin.php:1842
372
  msgid "User Agent"
373
  msgstr ""
374
 
375
- #: lib\main.php:467
376
  msgid "Browser"
377
  msgstr ""
378
 
379
- #: lib\main.php:469 lib\wassupadmin.php:1863
380
  msgid "OS"
381
  msgstr ""
382
 
383
- #: lib\main.php:470
384
  msgid "Locale/Language"
385
  msgstr ""
386
 
387
- #: lib\main.php:471
388
  msgid "Screen Resolution"
389
  msgstr ""
390
 
391
- #: lib\main.php:474
392
  msgid "Username"
393
  msgstr ""
394
 
395
- #: lib\main.php:478
396
  msgid "Comment Author"
397
  msgstr ""
398
 
399
- #: lib\main.php:492 lib\wassup.class.php:483 lib\wassup.class.php:538
400
- #: lib\wassupadmin.php:1827 lib\compat-lib\compat_php.php:496
401
- #: lib\compat-lib\compat_php.php:551
402
  msgid "Spam"
403
  msgstr ""
404
 
405
- #: lib\main.php:493
406
  msgid "comment spam"
407
  msgstr ""
408
 
409
- #: lib\main.php:494
410
  msgid "referrer spam"
411
  msgstr ""
412
 
413
- #: lib\main.php:495
414
  msgid "hack/malware attempt"
415
  msgstr ""
416
 
417
- #: lib\main.php:496
418
  msgid "not spam"
419
  msgstr ""
420
 
421
- #: lib\main.php:500
422
  msgid "End timestamp"
423
  msgstr ""
424
 
425
- #: lib\main.php:501
426
  msgid "Timestamp"
427
  msgstr ""
428
 
429
- #: lib\main.php:509 lib\main.php:587 lib\main.php:736 lib\main.php:738
430
- #: lib\main.php:747 lib\main.php:749 lib\settings.php:535 lib\settings.php:539
431
- #: lib\settings.php:617 lib\settings.php:635 lib\settings.php:646
432
- #: lib\settings.php:703 lib\settings.php:713 lib\settings.php:729
433
- #: lib\settings.php:732 lib\settings.php:844 lib\settings.php:853
434
- #: lib\settings.php:861 lib\settings.php:878 lib\settings.php:913
435
- #: lib\settings.php:923 lib\settings.php:931 lib\settings.php:941
436
- #: lib\settings.php:947 lib\settings.php:973 lib\settings.php:978
437
- #: lib\wassupadmin.php:1056 lib\wassupadmin.php:1663
438
  msgid "unknown"
439
  msgstr ""
440
 
441
- #: lib\main.php:513
442
  #, php-format
443
  msgid "%d URLs visited in session"
444
  msgstr ""
445
 
446
- #: lib\main.php:574 lib\wassupadmin.php:1065
447
  msgid "Direct hit"
448
  msgstr ""
449
 
450
- #: lib\main.php:596
451
  msgid "Spam/Malware"
452
  msgstr ""
453
 
454
- #: lib\main.php:600
455
  msgid "Feedreader"
456
  msgstr ""
457
 
458
- #: lib\main.php:609 lib\main.php:658 lib\main.php:659
459
  msgid "Logged user"
460
  msgstr ""
461
 
462
- #: lib\main.php:638 lib\main.php:639
463
  msgid "Country"
464
  msgstr ""
465
 
466
- #: lib\main.php:649 lib\settings.php:557 lib\wassupadmin.php:1856
467
  msgid "Language"
468
  msgstr ""
469
 
470
- #: lib\main.php:662
471
  msgid "Country:"
472
  msgstr ""
473
 
474
- #: lib\main.php:662
475
  msgid "URL Request:"
476
  msgstr ""
477
 
478
- #: lib\main.php:705
479
  msgid "No visitor activity"
480
  msgstr ""
481
 
482
- #: lib\main.php:732 lib\main.php:736 lib\main.php:738 lib\main.php:743
483
- #: lib\main.php:747 lib\main.php:749
484
  #, php-format
485
  msgid "City: %s"
486
  msgstr ""
487
 
488
- #: lib\main.php:752
489
  msgid "Country: unknown, City: unknown"
490
  msgstr ""
491
 
492
- #: lib\main.php:1023
493
  msgid "Print"
494
  msgstr ""
495
 
496
- #: lib\main.php:1025
497
  #, php-format
498
  msgid "Top Stats for Period: %s"
499
  msgstr ""
500
 
501
- #: lib\main.php:1060
502
  msgid "TOP QUERY"
503
  msgstr ""
504
 
505
- #: lib\main.php:1068 lib\wassupadmin.php:1794
506
  msgid "not provided"
507
  msgstr ""
508
 
509
- #: lib\main.php:1096
510
  msgid "TOP REFERRER"
511
  msgstr ""
512
 
513
- #: lib\main.php:1135
514
  msgid "TOP REQUEST"
515
  msgstr ""
516
 
517
- #: lib\main.php:1174
518
  msgid "TOP BROWSER"
519
  msgstr ""
520
 
521
- #: lib\main.php:1207
522
  msgid "TOP OS"
523
  msgstr ""
524
 
525
- #: lib\main.php:1239
526
  msgid "TOP LOCALE"
527
  msgstr ""
528
 
529
- #: lib\main.php:1273
530
  msgid "TOP VISITOR"
531
  msgstr ""
532
 
533
- #: lib\main.php:1311
534
  msgid "TOP ARTICLE"
535
  msgstr ""
536
 
537
- #: lib\main.php:1334
538
  msgid "This report excludes spam and spider records"
539
  msgstr ""
540
 
541
- #: lib\main.php:1336
542
  msgid "This report excludes spider records"
543
  msgstr ""
544
 
545
- #: lib\main.php:1338
546
  msgid "This report excludes spam records"
547
  msgstr ""
548
 
549
- #: lib\main.php:1784
550
  msgid "Last 1 Hour"
551
  msgstr ""
552
 
553
- #: lib\main.php:1793
554
  msgid "Last 6 Hours"
555
  msgstr ""
556
 
557
- #: lib\main.php:1802
558
  msgid "Last 12 Hours"
559
  msgstr ""
560
 
561
- #: lib\main.php:1811
562
  msgid "Last 7 Days"
563
  msgstr ""
564
 
565
- #: lib\main.php:1825
566
  msgid "Last 2 Weeks"
567
  msgstr ""
568
 
569
- #: lib\main.php:1844
570
  msgid "Last Month"
571
  msgstr ""
572
 
573
- #: lib\main.php:1858
574
  msgid "Last 3 Months"
575
  msgstr ""
576
 
577
- #: lib\main.php:1872
578
  msgid "Last 6 Months"
579
  msgstr ""
580
 
581
- #: lib\main.php:1880
582
  msgid "Last Year"
583
  msgstr ""
584
 
585
- #: lib\main.php:1888 lib\main.php:1904
586
  msgid "All Time"
587
  msgstr ""
588
 
589
- #: lib\main.php:1895
590
  msgid "Last 24 Hours"
591
  msgstr ""
592
 
593
- #: lib\settings.php:88
594
  msgid ""
595
  "ATTENTION! Your WassUp table have reached the maximum value you set, I "
596
  "disabled the alert, you can re-enable it here."
597
  msgstr ""
598
 
599
- #: lib\settings.php:109
600
  msgid "IMPORTANT"
601
  msgstr ""
602
 
603
- #: lib\settings.php:109
604
  msgid "table empty or does not exist!"
605
  msgstr ""
606
 
607
- #: lib\settings.php:111
608
  msgid "Visitors Online or Top Stats"
609
  msgstr ""
610
 
611
- #: lib\settings.php:112
612
  msgid "Widgets menu"
613
  msgstr ""
614
 
615
- #: lib\settings.php:114
616
  #, php-format
617
  msgid ""
618
  "You can add a sidebar Widget with some useful statistics information by "
619
  "activating the %s widget from the %s."
620
  msgstr ""
621
 
622
- #: lib\settings.php:115
623
  msgid "Select the options you want for WassUp plugin"
624
  msgstr ""
625
 
626
- #: lib\settings.php:152 lib\settings.php:1032 lib\settings.php:1038
627
- #: lib\settings.php:1041 lib\settings.php:1045 lib\settings.php:1047
628
- #: lib\settings.php:1048 lib\settings.php:1051 lib\settings.php:1052
629
- #: lib\settings.php:1070 lib\settings.php:1074
630
  msgid "General Setup"
631
  msgstr ""
632
 
633
- #: lib\settings.php:153 lib\settings.php:1043 lib\settings.php:1066
634
  msgid "Filters & Exclusions"
635
  msgstr ""
636
 
637
- #: lib\settings.php:154
638
  msgid "Manage Files & Data"
639
  msgstr ""
640
 
641
- #: lib\settings.php:157 lib\settings.php:1080 lib\settings.php:1081
642
  msgid "Uninstall"
643
  msgstr ""
644
 
645
- #: lib\settings.php:162 lib\wassupadmin.php:554 lib\wassupadmin.php:900
646
  msgid "Donate"
647
  msgstr ""
648
 
649
- #: lib\settings.php:169
650
  msgid "Networkwide Settings"
651
  msgstr ""
652
 
653
- #: lib\settings.php:170
654
  msgid "Multisite settings that applies to all subsites in the network."
655
  msgstr ""
656
 
657
- #: lib\settings.php:172
658
  msgid "Network Statistics Recording"
659
  msgstr ""
660
 
661
- #: lib\settings.php:173
662
  msgid ""
663
  "Enables Wassup visitor tracking on all subsites in network. Do NOT disable "
664
  "unless upgrading plugin."
665
  msgstr ""
666
 
667
- #: lib\settings.php:174
668
  msgid "Enable Statistics Recording for network."
669
  msgstr ""
670
 
671
- #: lib\settings.php:175
672
  msgid ""
673
  "Can be overridden on individual subsites to disable statistics recording."
674
  msgstr ""
675
 
676
- #: lib\settings.php:177
677
  msgid "Network Subsites Options"
678
  msgstr ""
679
 
680
- #: lib\settings.php:178
681
  msgid "Show Wassup's Main menu and options panel to subsite administrators."
682
  msgstr ""
683
 
684
- #: lib\settings.php:179
685
  msgid ""
686
  "Uncheck to hide Wassup Main menu and options panel from all users except "
687
  "Network administrator (super-admin). Dashboard submenu \"Wassup-stats\" and "
688
  "dashboard widget display are unaffected."
689
  msgstr ""
690
 
691
- #: lib\settings.php:182
692
  msgid "Site Settings"
693
  msgstr ""
694
 
695
- #: lib\settings.php:183
696
  msgid "Main site settings / Default settings for new network subsites."
697
  msgstr ""
698
 
699
- #: lib\settings.php:186
700
  msgid "Statistics Recording"
701
  msgstr ""
702
 
703
- #: lib\settings.php:187
704
  msgid ""
705
  "By default, Wassup collects and stores incoming visitor hits and checks each "
706
  "new record for spam and malware activity."
707
  msgstr ""
708
 
709
- #: lib\settings.php:188
710
  msgid "Enable statistics recording"
711
  msgstr ""
712
 
713
- #: lib\settings.php:190
714
  msgid "Do NOT disable unless upgrading or troubleshooting plugin problems."
715
  msgstr ""
716
 
717
- #: lib\settings.php:191
718
  msgid "Do NOT disable unless troubleshooting plugin problems."
719
  msgstr ""
720
 
721
- #: lib\settings.php:194
722
  msgid "Enable spam and malware detection on new records"
723
  msgstr ""
724
 
725
- #: lib\settings.php:195
726
  msgid ""
727
  "For identification of incoming spam/malware hits only. Does NOT stop attacks "
728
  "nor protect your site."
729
  msgstr ""
730
 
731
- #: lib\settings.php:199
732
  msgid "User Permissions"
733
  msgstr ""
734
 
735
- #: lib\settings.php:200
736
  msgid ""
737
  "Gives selected users read-only access to Wassup-stats dashboard submenu "
738
  "panels and the ability to view the dashboard widget."
739
  msgstr ""
740
 
741
- #: lib\settings.php:201
742
  msgid ""
743
  "Only administrators have full access to Wassup main admin menu and Wassup-"
744
  "options panels to delete data and edit plugin settings."
745
  msgstr ""
746
 
747
- #: lib\settings.php:202
748
  msgid "Set minimum user level that can view WassUp stats"
749
  msgstr ""
750
 
751
- #: lib\settings.php:206
752
  msgid "default administrator"
753
  msgstr ""
754
 
755
- #: lib\settings.php:211
756
  msgid "Screen resolution"
757
  msgstr ""
758
 
759
- #: lib\settings.php:212
760
  msgid ""
761
  "Adjusts chart size and resets the max-width/truncation point of long texts."
762
  msgstr ""
763
 
764
- #: lib\settings.php:213
765
  msgid "Your default screen resolution (in pixels)"
766
  msgstr ""
767
 
768
- #: lib\settings.php:218
769
  msgid "Dashboard Widget"
770
  msgstr ""
771
 
772
- #: lib\settings.php:219
773
  msgid "Enable widget/small chart in admin dashboard"
774
  msgstr ""
775
 
776
- #: lib\settings.php:221
777
  msgid "Spy Visitors Settings"
778
  msgstr ""
779
 
780
- #: lib\settings.php:236
781
  msgid "Display a GEO IP Map in the spy visitors view"
782
  msgstr ""
783
 
784
- #: lib\settings.php:237
785
  msgid "key"
786
  msgstr ""
787
 
788
- #: lib\settings.php:237
789
  msgid "signup for your key"
790
  msgstr ""
791
 
792
- #: lib\settings.php:238
793
  msgid ""
794
  "Use your own key to avoid map denial when Wassup API total usage exceeds "
795
  "Google!Maps limits."
796
  msgstr ""
797
 
798
- #: lib\settings.php:244
799
  msgid "Visitor Detail Settings"
800
  msgstr ""
801
 
802
- #: lib\settings.php:245
803
  msgid "Show visitor details from the last"
804
  msgstr ""
805
 
806
- #: lib\settings.php:250
807
  msgid "Time format 12/24 Hour"
808
  msgstr ""
809
 
810
- #: lib\settings.php:254
811
  msgid "Filter visitor details for"
812
  msgstr ""
813
 
814
- #: lib\settings.php:259
815
  msgid "Display line chart in detail view"
816
  msgstr ""
817
 
818
- #: lib\settings.php:260
819
  msgid "Line chart type - how many axes?"
820
  msgstr ""
821
 
822
- #: lib\settings.php:261
823
  msgid "Set how many minutes wait for automatic page refresh"
824
  msgstr ""
825
 
826
- #: lib\settings.php:262 lib\settings.php:966 widgets\widgets.php:466
827
  msgid "minutes"
828
  msgstr ""
829
 
830
- #: lib\settings.php:263
831
  msgid "default 3, 0=no refresh"
832
  msgstr ""
833
 
834
- #: lib\settings.php:265
835
  msgid "Number of items per page"
836
  msgstr ""
837
 
838
- #: lib\settings.php:270
839
  msgid "Top Stats Lists"
840
  msgstr ""
841
 
842
- #: lib\settings.php:271
843
  msgid "Customize Top stats by selected criteria below."
844
  msgstr ""
845
 
846
- #: lib\settings.php:271
847
  msgid ""
848
  "Stats are in descending order from highest count and known spam and malware "
849
  "attempts are excluded from counts."
850
  msgstr ""
851
 
852
- #: lib\settings.php:278
853
  msgid "List limit of top items"
854
  msgstr ""
855
 
856
- #: lib\settings.php:280
857
  msgid "default 10"
858
  msgstr ""
859
 
860
- #: lib\settings.php:282
861
  msgid "Choose one or more items to list in Top Stats"
862
  msgstr ""
863
 
864
- #: lib\settings.php:282
865
  msgid "over 5 selections may cause horizontal scrolling"
866
  msgstr ""
867
 
868
- #: lib\settings.php:285
869
  msgid "Top Searches"
870
  msgstr ""
871
 
872
- #: lib\settings.php:286
873
  msgid "Top Referrers"
874
  msgstr ""
875
 
876
- #: lib\settings.php:287
877
  msgid "Top Articles"
878
  msgstr ""
879
 
880
- #: lib\settings.php:290
881
  msgid "Top Requests"
882
  msgstr ""
883
 
884
- #: lib\settings.php:291
885
  msgid "Top Browsers"
886
  msgstr ""
887
 
888
- #: lib\settings.php:292
889
  msgid "Top OS"
890
  msgstr ""
891
 
892
- #: lib\settings.php:295
893
  msgid "Top Locales"
894
  msgstr ""
895
 
896
- #: lib\settings.php:296
897
  msgid "Top Visitors"
898
  msgstr ""
899
 
900
- #: lib\settings.php:301
901
  msgid "Exclude the following website domains from Top Referrers"
902
  msgstr ""
903
 
904
- #: lib\settings.php:301 lib\settings.php:309
905
  msgid "applies to top stats view and widgets"
906
  msgstr ""
907
 
908
- #: lib\settings.php:304
909
  msgid "comma separated value"
910
  msgstr ""
911
 
912
- #: lib\settings.php:304
913
  msgid "List whole domains only. Wildcards and partial domains will be ignored."
914
  msgstr ""
915
 
916
- #: lib\settings.php:305
917
  msgid "Don't list your website domain defined in WordPress"
918
  msgstr ""
919
 
920
- #: lib\settings.php:309
921
  msgid "Exclude site front page from Top Articles"
922
  msgstr ""
923
 
924
- #: lib\settings.php:316
925
  msgid "Exclude all spider records from Top Stats"
926
  msgstr ""
927
 
928
- #: lib\settings.php:319 lib\settings.php:373 lib\settings.php:524
929
- #: lib\settings.php:1023 lib\wassupadmin.php:1539
930
  msgid "Save Settings"
931
  msgstr ""
932
 
933
- #: lib\settings.php:319 lib\settings.php:373 lib\settings.php:524
934
- #: lib\settings.php:1023
935
  msgid "Reset"
936
  msgstr ""
937
 
938
- #: lib\settings.php:319 lib\settings.php:373 lib\settings.php:524
939
- #: lib\settings.php:1023
940
  msgid "Reset to Default"
941
  msgstr ""
942
 
943
- #: lib\settings.php:320 lib\settings.php:374 lib\settings.php:1008
944
- #: lib\settings.php:1024 lib\settings.php:1085 lib\settings.php:1105
945
- #: lib\wassupadmin.php:982 widgets\widgets.php:584
946
- #: widgets\widget_functions.php:416
947
  msgid "Top"
948
  msgstr ""
949
 
950
- #: lib\settings.php:324
951
  msgid "Recording Filters and Exclusions"
952
  msgstr ""
953
 
954
- #: lib\settings.php:325
955
  msgid ""
956
  "Use the filter checkboxes and exclusion input fields below to customize "
957
  "Wassup's statistics recording so that only the data that you need for your "
958
  "site analyses are stored."
959
  msgstr ""
960
 
961
- #: lib\settings.php:327
962
  msgid "Visitor Type Filters:"
963
  msgstr ""
964
 
965
- #: lib\settings.php:328
966
  msgid "Checkbox to enable recording by type of \"visitor\""
967
  msgstr ""
968
 
969
- #: lib\settings.php:330
970
  msgid "Record regular visitors"
971
  msgstr ""
972
 
973
- #: lib\settings.php:331
974
  msgid "Record logged in users"
975
  msgstr ""
976
 
977
- #: lib\settings.php:332
978
  msgid "Record logged in administrators"
979
  msgstr ""
980
 
981
- #: lib\settings.php:333
982
  msgid "Record spiders and bots"
983
  msgstr ""
984
 
985
- #: lib\settings.php:336
986
  msgid "Spam and Malware Filters:"
987
  msgstr ""
988
 
989
- #: lib\settings.php:337
990
  msgid "Checkbox to enable recording of each type of \"spam\""
991
  msgstr ""
992
 
993
- #: lib\settings.php:339 lib\wassupadmin.php:1535
994
  msgid "Record Akismet comment spam attempts"
995
  msgstr ""
996
 
997
- #: lib\settings.php:339
998
  msgid "checks IP for previous spam comments"
999
  msgstr ""
1000
 
1001
- #: lib\settings.php:340 lib\wassupadmin.php:1536
1002
  msgid "Record referrer spam attempts"
1003
  msgstr ""
1004
 
1005
- #: lib\settings.php:341 lib\wassupadmin.php:1538
1006
  msgid "Record admin break-in/hacker attempts"
1007
  msgstr ""
1008
 
1009
- #: lib\settings.php:342 lib\wassupadmin.php:1537
1010
- msgid "Record attack/exploit attempts (libwww-perl agent)"
1011
  msgstr ""
1012
 
1013
- #: lib\settings.php:345
 
 
 
 
1014
  msgid "Recording Exceptions"
1015
  msgstr ""
1016
 
1017
- #: lib\settings.php:346
1018
  msgid ""
1019
  "You can exclude a single visitor (by IP, hostname or username) or you can "
1020
  "exclude a specific URL request from being stored in WassUp records."
1021
  msgstr ""
1022
 
1023
- #: lib\settings.php:347
1024
  msgid ""
1025
  "Note that recording exceptions lower overall statistics counts and excessive "
1026
  "exclusions can affect page load speed on slow host servers."
1027
  msgstr ""
1028
 
1029
- #: lib\settings.php:349
1030
  msgid "Exclude by IP"
1031
  msgstr ""
1032
 
1033
- #: lib\settings.php:350
1034
  msgid "Enter source IPs to omit from recording"
1035
  msgstr ""
1036
 
1037
- #: lib\settings.php:353
1038
  msgid "comma separated value (ex: 127.0.0.1, 10.0.0.1, etc...)."
1039
  msgstr ""
1040
 
1041
- #: lib\settings.php:353
1042
  msgid ""
1043
  "A single wildcard (*) can be placed after the last '.' in the IP ('::' in "
1044
  "IPv6) for range exclusions (ex: 10.10.100.*, 192.168.*)."
1045
  msgstr ""
1046
 
1047
- #: lib\settings.php:355
1048
  msgid "Exclude by Hostname"
1049
  msgstr ""
1050
 
1051
- #: lib\settings.php:356
1052
  msgid "Enter source hostnames to omit from recording"
1053
  msgstr ""
1054
 
1055
- #: lib\settings.php:359
1056
  msgid "comma separated value (ex: host1.domain.com, host2.domain.net, etc...)."
1057
  msgstr ""
1058
 
1059
- #: lib\settings.php:359
1060
  msgid ""
1061
  "A single wildcard (*) can be placed before the first '.' for domain network "
1062
  "exclusions (ex: *.spamdomain.com, *.hackers.malware.net)."
1063
  msgstr ""
1064
 
1065
- #: lib\settings.php:361
1066
  msgid "Exclude by Username"
1067
  msgstr ""
1068
 
1069
- #: lib\settings.php:362
1070
  msgid "Enter usernames to omit from recording"
1071
  msgstr ""
1072
 
1073
- #: lib\settings.php:365
1074
  msgid ""
1075
  "comma separated value, enter a registered user's login name (ex: bobmarley, "
1076
  "enyabrennan, etc.)"
1077
  msgstr ""
1078
 
1079
- #: lib\settings.php:367
1080
  msgid "Exclude by URL request"
1081
  msgstr ""
1082
 
1083
- #: lib\settings.php:368
1084
  msgid "Enter URLs of page/post/feed to omit from recording"
1085
  msgstr ""
1086
 
1087
- #: lib\settings.php:371
1088
  msgid ""
1089
  "comma separated value, don't enter entire url, only the last path or some "
1090
  "word to exclude (ex: /category/wordpress, 2007, etc...)"
1091
  msgstr ""
1092
 
1093
- #: lib\settings.php:374 lib\settings.php:1008 lib\settings.php:1024
1094
- #: lib\settings.php:1085 lib\settings.php:1105
1095
  msgid "Prev"
1096
  msgstr ""
1097
 
1098
- #: lib\settings.php:378
1099
  msgid "Table Management Options"
1100
  msgstr ""
1101
 
1102
- #: lib\settings.php:385
1103
  msgid "Select actions for table growth"
1104
  msgstr ""
1105
 
1106
- #: lib\settings.php:386
1107
  msgid ""
1108
  "WassUp table grows very fast, especially if your site is frequently visited. "
1109
  "I recommend you delete old records sometimes."
1110
  msgstr ""
1111
 
1112
- #: lib\settings.php:387
1113
  msgid ""
1114
  "You can delete all Wassup records now (Empty Table), you can set an "
1115
  "automatic delete option to delete selected old records daily, and you can "
1116
  "manually delete selected old records once (Delete NOW)."
1117
  msgstr ""
1118
 
1119
- #: lib\settings.php:388
1120
  msgid "If you haven't database space problems, you can leave the table as is."
1121
  msgstr ""
1122
 
1123
- #: lib\settings.php:389
1124
  msgid "Current WassUp table usage is"
1125
  msgstr ""
1126
 
1127
- #: lib\settings.php:392
1128
  msgid "records"
1129
  msgstr ""
1130
 
1131
- #: lib\settings.php:395
1132
  msgid "Alert me"
1133
  msgstr ""
1134
 
1135
- #: lib\settings.php:395
1136
  msgid "email to"
1137
  msgstr ""
1138
 
1139
- #: lib\settings.php:395
1140
  msgid "when table reaches"
1141
  msgstr ""
1142
 
1143
- #: lib\settings.php:396
1144
  msgid "Delete old records"
1145
  msgstr ""
1146
 
1147
- #: lib\settings.php:400
1148
  #, php-format
1149
  msgid ""
1150
  "Before deleting, you can save Wassup data in SQL 'export' format onto your "
1151
  "local computer by clicking %s below."
1152
  msgstr ""
1153
 
1154
- #: lib\settings.php:400
1155
  msgid "export table"
1156
  msgstr ""
1157
 
1158
- #: lib\settings.php:401
1159
  msgid "Reload this screen after export to view export messages."
1160
  msgstr ""
1161
 
1162
- #: lib\settings.php:402
1163
  msgid "Automatically delete"
1164
  msgstr ""
1165
 
1166
- #: lib\settings.php:404 lib\settings.php:409
1167
  msgid "records older than"
1168
  msgstr ""
1169
 
1170
- #: lib\settings.php:405
1171
  msgid "daily"
1172
  msgstr ""
1173
 
1174
- #: lib\settings.php:407
1175
  msgid "Manually delete"
1176
  msgstr ""
1177
 
1178
- #: lib\settings.php:410
1179
  msgid "once"
1180
  msgstr ""
1181
 
1182
- #: lib\settings.php:416
1183
  msgid "Delete all records up to record ID#"
1184
  msgstr ""
1185
 
1186
- #: lib\settings.php:417
1187
  msgid "Last exported record ID#:"
1188
  msgstr ""
1189
 
1190
- #: lib\settings.php:419
1191
  msgid "Empty table"
1192
  msgstr ""
1193
 
1194
- #: lib\settings.php:420
1195
  msgid "export table in SQL format"
1196
  msgstr ""
1197
 
1198
- #: lib\settings.php:423
1199
  msgid "Delete NOW"
1200
  msgstr ""
1201
 
1202
- #: lib\settings.php:423
1203
  msgid "Action is NOT undoable!"
1204
  msgstr ""
1205
 
1206
- #: lib\settings.php:426
1207
  msgid "Table Export Options"
1208
  msgstr ""
1209
 
1210
- #: lib\settings.php:428
1211
  msgid ""
1212
  "By default, known spam/malware records are omitted from Wassup's export data "
1213
  "to reduce the risk of malware code becoming active and causing damage when "
1214
  "records are imported into other applications."
1215
  msgstr ""
1216
 
1217
- #: lib\settings.php:429
1218
  msgid "Include spam records in exported data"
1219
  msgstr ""
1220
 
1221
- #: lib\settings.php:430
1222
  msgid ""
1223
  "Security NOTICE: Wassup is not configured to identify spam/malware, so all "
1224
  "records are exported, including spam."
1225
  msgstr ""
1226
 
1227
- #: lib\settings.php:431
1228
  msgid ""
1229
  "Security NOTICE: Enabling this could expose your computer or website to "
1230
  "malware when spam records are imported."
1231
  msgstr ""
1232
 
1233
- #: lib\settings.php:432
1234
  msgid "Omit record ID from exported fields"
1235
  msgstr ""
1236
 
1237
- #: lib\settings.php:433
1238
  msgid ""
1239
  "Check this box when importing data into another Wassup table that already "
1240
  "has records (appending data)."
1241
  msgstr ""
1242
 
1243
- #: lib\settings.php:435
1244
  msgid "Table Optimization"
1245
  msgstr ""
1246
 
1247
- #: lib\settings.php:440
1248
  msgid ""
1249
  "By default, WassUp tables are automatically optimized weekly and after each "
1250
  "bulk deletion. This helps keep WassUp running fast, but it can sometimes "
1251
  "cause slowdowns especially when there is a corrupt record in the table."
1252
  msgstr ""
1253
 
1254
- #: lib\settings.php:449
1255
  msgid "You can cancel automatic optimization by unchecking the box below."
1256
  msgstr ""
1257
 
1258
- #: lib\settings.php:451
1259
  msgid "Login as network admin to cancel automatic optimization below."
1260
  msgstr ""
1261
 
1262
- #: lib\settings.php:452
1263
  msgid "Login as network admin to enable automatic optimization below."
1264
  msgstr ""
1265
 
1266
- #: lib\settings.php:454
1267
  msgid "Your table engine does NOT support the \"optimize\" command."
1268
  msgstr ""
1269
 
1270
- #: lib\settings.php:464
1271
  msgid "Enable automatic table optimization"
1272
  msgstr ""
1273
 
1274
- #: lib\settings.php:472
1275
  msgid "is overdue"
1276
  msgstr ""
1277
 
1278
- #: lib\settings.php:474
1279
  msgid "today"
1280
  msgstr ""
1281
 
1282
- #: lib\settings.php:477
1283
  #, php-format
1284
  msgid "%d days"
1285
  msgstr ""
1286
 
1287
- #: lib\settings.php:478
1288
  msgid "1 week"
1289
  msgstr ""
1290
 
1291
- #: lib\settings.php:484
1292
  #, php-format
1293
  msgid "Next scheduled optimization is: %s (approximately)"
1294
  msgstr ""
1295
 
1296
- #: lib\settings.php:486
1297
  #, php-format
1298
  msgid "Next scheduled optimization is: %s"
1299
  msgstr ""
1300
 
1301
- #: lib\settings.php:486
1302
  msgid "never"
1303
  msgstr ""
1304
 
1305
- #: lib\settings.php:490
1306
  msgid "Data Storage Methods"
1307
  msgstr ""
1308
 
1309
- #: lib\settings.php:493
1310
  msgid "Delayed Insert"
1311
  msgstr ""
1312
 
1313
- #: lib\settings.php:495
1314
  msgid ""
1315
  "When possible, WassUp uses the \"Delayed insert\" method of saving records "
1316
  "in MySQL to store new visitor records. This method helps keep Wassup running "
@@ -1319,292 +1323,292 @@ msgid ""
1319
  "disable it on shared servers."
1320
  msgstr ""
1321
 
1322
- #: lib\settings.php:496
1323
  msgid "You can turn off \"delayed insert\" by unchecking the box below."
1324
  msgstr ""
1325
 
1326
- #: lib\settings.php:500
1327
  msgid "This method is unavailable for your storage engine type."
1328
  msgstr ""
1329
 
1330
- #: lib\settings.php:512
1331
  msgid "This method is disabled on your host server."
1332
  msgstr ""
1333
 
1334
- #: lib\settings.php:521
1335
  msgid "Store new visitor records with \"delayed insert\""
1336
  msgstr ""
1337
 
1338
- #: lib\settings.php:528
1339
  msgid "Server Settings and Memory Resources"
1340
  msgstr ""
1341
 
1342
- #: lib\settings.php:529
1343
  #, php-format
1344
  msgid ""
1345
  "For information only. Some values may be adjustable in startup files: %s"
1346
  msgstr ""
1347
 
1348
- #: lib\settings.php:529
1349
  msgid "\"wp_config.php\", \"php.ini\" and \"my.ini\""
1350
  msgstr ""
1351
 
1352
- #: lib\settings.php:530 lib\settings.php:541 lib\settings.php:649
1353
- #: lib\settings.php:844
1354
  msgid "Version"
1355
  msgstr ""
1356
 
1357
- #: lib\settings.php:532
1358
  msgid "Table name"
1359
  msgstr ""
1360
 
1361
- #: lib\settings.php:533
1362
  msgid "Table Charset/collation"
1363
  msgstr ""
1364
 
1365
- #: lib\settings.php:537
1366
  msgid "Table engine"
1367
  msgstr ""
1368
 
1369
- #: lib\settings.php:539
1370
  msgid "Upgrade date"
1371
  msgstr ""
1372
 
1373
- #: lib\settings.php:547
1374
  msgid "network"
1375
  msgstr ""
1376
 
1377
- #: lib\settings.php:550 lib\settings.php:563 lib\settings.php:659
1378
- #: lib\settings.php:670 lib\settings.php:674 lib\settings.php:954
1379
  msgid "on"
1380
  msgstr ""
1381
 
1382
- #: lib\settings.php:552 lib\settings.php:661 lib\settings.php:668
1383
- #: lib\settings.php:675 lib\settings.php:952
1384
  msgid "off"
1385
  msgstr ""
1386
 
1387
- #: lib\settings.php:556
1388
  msgid "Character set"
1389
  msgstr ""
1390
 
1391
- #: lib\settings.php:560 lib\settings.php:737
1392
  msgid "not set"
1393
  msgstr ""
1394
 
1395
- #: lib\settings.php:568 lib\settings.php:689
1396
  msgid "Memory Allocation"
1397
  msgstr ""
1398
 
1399
- #: lib\settings.php:593
1400
  msgid "no limit/unknown"
1401
  msgstr ""
1402
 
1403
- #: lib\settings.php:597 lib\settings.php:753 lib\settings.php:980
1404
  msgid "Timezone"
1405
  msgstr ""
1406
 
1407
- #: lib\settings.php:598 lib\settings.php:756
1408
  msgid "Time Offset"
1409
  msgstr ""
1410
 
1411
- #: lib\settings.php:610 lib\settings.php:759 lib\settings.php:761
1412
  msgid "hours"
1413
  msgstr ""
1414
 
1415
- #: lib\settings.php:611
1416
  msgid "Host Timezone"
1417
  msgstr ""
1418
 
1419
- #: lib\settings.php:619
1420
  msgid "Host Server"
1421
  msgstr ""
1422
 
1423
- #: lib\settings.php:637
1424
  msgid "Browser Client"
1425
  msgstr ""
1426
 
1427
- #: lib\settings.php:655
1428
  msgid "Safe Mode"
1429
  msgstr ""
1430
 
1431
- #: lib\settings.php:665
1432
  msgid "File Open Restrictions"
1433
  msgstr ""
1434
 
1435
- #: lib\settings.php:672
1436
  msgid "URL File Open"
1437
  msgstr ""
1438
 
1439
- #: lib\settings.php:677
1440
  msgid "Disabled functions"
1441
  msgstr ""
1442
 
1443
- #: lib\settings.php:684
1444
  msgid "none"
1445
  msgstr ""
1446
 
1447
- #: lib\settings.php:686
1448
  msgid "not applicable/safe mode set"
1449
  msgstr ""
1450
 
1451
- #: lib\settings.php:700 lib\settings.php:875
1452
  msgid "unlimited/up to server maximum"
1453
  msgstr ""
1454
 
1455
- #: lib\settings.php:708
1456
  msgid "Memory Usage"
1457
  msgstr ""
1458
 
1459
- #: lib\settings.php:715
1460
  msgid "Script Timeout Limit"
1461
  msgstr ""
1462
 
1463
- #: lib\settings.php:720 lib\settings.php:721 lib\settings.php:722
1464
- #: lib\settings.php:724 lib\settings.php:945 lib\settings.php:968
1465
  msgid "seconds"
1466
  msgstr ""
1467
 
1468
- #: lib\settings.php:727
1469
  msgid "unlimited"
1470
  msgstr ""
1471
 
1472
- #: lib\settings.php:735
1473
  msgid "Browser Capabilities File"
1474
  msgstr ""
1475
 
1476
- #: lib\settings.php:741
1477
  msgid "not installed"
1478
  msgstr ""
1479
 
1480
- #: lib\settings.php:742
1481
  msgid "installed"
1482
  msgstr ""
1483
 
1484
- #: lib\settings.php:764
1485
  msgid "as modified in Wordpress"
1486
  msgstr ""
1487
 
1488
- #: lib\settings.php:846
1489
  msgid "Storage Engine"
1490
  msgstr ""
1491
 
1492
- #: lib\settings.php:855
1493
  msgid "Charset/collation"
1494
  msgstr ""
1495
 
1496
- #: lib\settings.php:864
1497
  msgid "Max User Connections"
1498
  msgstr ""
1499
 
1500
- #: lib\settings.php:870
1501
  msgid "possibly too small"
1502
  msgstr ""
1503
 
1504
- #: lib\settings.php:880
1505
  msgid "Allocation"
1506
  msgstr ""
1507
 
1508
- #: lib\settings.php:886
1509
  msgid "possibly too big, reduces available RAM."
1510
  msgstr ""
1511
 
1512
- #: lib\settings.php:893
1513
  msgid "on demand"
1514
  msgstr ""
1515
 
1516
- #: lib\settings.php:895
1517
  msgid "Cached Query Limit"
1518
  msgstr ""
1519
 
1520
- #: lib\settings.php:898 lib\settings.php:901 lib\settings.php:911
1521
- #: lib\settings.php:921 lib\settings.php:929 lib\settings.php:938
1522
- #: lib\settings.php:959 lib\settings.php:977
1523
  msgid "disabled"
1524
  msgstr ""
1525
 
1526
- #: lib\settings.php:943
1527
  msgid "Wait Timeout"
1528
  msgstr ""
1529
 
1530
- #: lib\settings.php:962
1531
  msgid "rows"
1532
  msgstr ""
1533
 
1534
- #: lib\settings.php:976
1535
  msgid "not available"
1536
  msgstr ""
1537
 
1538
- #: lib\settings.php:1003
1539
  msgid "may be different from PHP offset"
1540
  msgstr ""
1541
 
1542
- #: lib\settings.php:1013
1543
  msgid "Want to uninstall WassUp?"
1544
  msgstr ""
1545
 
1546
- #: lib\settings.php:1014
1547
  msgid ""
1548
  "No problem. Before you deactivate this plugin, check the box below to "
1549
  "cleanup any data that was collected by WassUp that could be left behind."
1550
  msgstr ""
1551
 
1552
- #: lib\settings.php:1015
1553
  msgid "Permanently remove WassUp data and settings."
1554
  msgstr ""
1555
 
1556
- #: lib\settings.php:1017
1557
  msgid "WARNING"
1558
  msgstr ""
1559
 
1560
- #: lib\settings.php:1017
1561
  msgid ""
1562
  "All WassUp data and settings will be DELETED upon deactivation of this "
1563
  "plugin."
1564
  msgstr ""
1565
 
1566
- #: lib\settings.php:1019
1567
  #, php-format
1568
  msgid ""
1569
  "This action cannot be undone. Before uninstalling WassUp, you should backup "
1570
  "your Wordpress database first. WassUp data is stored in the table %s."
1571
  msgstr ""
1572
 
1573
- #: lib\settings.php:1021
1574
  #, php-format
1575
  msgid "To help improve this plugin, we would appreciate your feedback at %s."
1576
  msgstr ""
1577
 
1578
- #: lib\settings.php:1029
1579
  msgid "Frequently Asked Questions"
1580
  msgstr ""
1581
 
1582
- #: lib\settings.php:1031
1583
  msgid "How do I add WassUp's chart to my admin dashboard?"
1584
  msgstr ""
1585
 
1586
- #: lib\settings.php:1032
1587
  #, php-format
1588
  msgid ""
1589
  "Check the box for \"Enable widget/small chart in admin dashboard\" under %s "
1590
  "tab."
1591
  msgstr ""
1592
 
1593
- #: lib\settings.php:1032 lib\settings.php:1038 lib\settings.php:1041
1594
- #: lib\settings.php:1043 lib\settings.php:1045 lib\settings.php:1047
1595
- #: lib\settings.php:1048 lib\settings.php:1051 lib\settings.php:1052
1596
- #: lib\settings.php:1053 lib\settings.php:1058 lib\settings.php:1064
1597
- #: lib\settings.php:1066 lib\settings.php:1070 lib\settings.php:1074
1598
- #: lib\settings.php:1080 lib\settings.php:1081 lib\wassupadmin.php:455
1599
  #: lib\wassupadmin.php:892
1600
  msgid "Options"
1601
  msgstr ""
1602
 
1603
- #: lib\settings.php:1033
1604
  msgid "How do I display WassUp widgets on my site?"
1605
  msgstr ""
1606
 
1607
- #: lib\settings.php:1034
1608
  msgid ""
1609
  "From Wordpress widgets panel, drag the \"WassUp Online\" widget or the "
1610
  "\"Wassup Top Stats\" widget from the list of available widgets on the left "
@@ -1612,86 +1616,86 @@ msgid ""
1612
  "Customizer to add Wassup widgets interactively."
1613
  msgstr ""
1614
 
1615
- #: lib\settings.php:1035
1616
  msgid ""
1617
  "My Wordpress theme is not widget ready. Is it possible to display WassUp "
1618
  "widgets on my site?"
1619
  msgstr ""
1620
 
1621
- #: lib\settings.php:1036
1622
  msgid ""
1623
  "Yes. Insert the template tag \"wassup_sidebar()\" into your theme's "
1624
  "\"sidebar.php\" file to display Wassup widgets as a single combined widget "
1625
  "on your site."
1626
  msgstr ""
1627
 
1628
- #: lib\settings.php:1037
1629
  msgid "How do I view the real-time visitor geolocation map in WassUp?"
1630
  msgstr ""
1631
 
1632
- #: lib\settings.php:1038
1633
  #, php-format
1634
  msgid ""
1635
  "Check the box for \"Display a GEO IP Map in spy visitors view\" in %s tab "
1636
  "and save, then navigate to %s panel to see the map."
1637
  msgstr ""
1638
 
1639
- #: lib\settings.php:1038 lib\wassupadmin.php:452 lib\wassupadmin.php:539
1640
  #: lib\wassupadmin.php:889
1641
  msgid "SPY Visitors"
1642
  msgstr ""
1643
 
1644
- #: lib\settings.php:1039
1645
  msgid ""
1646
  "The map has vanished and I get a message like: \"Google has disabled use of "
1647
  "the Maps API for this application\". How do I fix this?"
1648
  msgstr ""
1649
 
1650
- #: lib\settings.php:1040
1651
  msgid ""
1652
  "Wassup-spy total daily map views has likely exceeded the Google!maps usage "
1653
  "limit for Wassup plugin."
1654
  msgstr ""
1655
 
1656
- #: lib\settings.php:1041
1657
  #, php-format
1658
  msgid ""
1659
  "To fix, sign up for a free %s for your site's sole usage and enter the key "
1660
  "under \"Spy Visitors settings\" in %s tab."
1661
  msgstr ""
1662
 
1663
- #: lib\settings.php:1041
1664
  msgid "Key"
1665
  msgstr ""
1666
 
1667
- #: lib\settings.php:1042
1668
  msgid "How do I exclude a visitor from being recorded?"
1669
  msgstr ""
1670
 
1671
- #: lib\settings.php:1043
1672
  #, php-format
1673
  msgid ""
1674
  "Navigate to %s tab and enter a visitor's username, IP address, or hostname "
1675
  "into the appropriate text area for that \"Recording Exclusion\" type."
1676
  msgstr ""
1677
 
1678
- #: lib\settings.php:1044
1679
  msgid ""
1680
  "How do I stop (temporarily) WassUp from recording new visits on my site?"
1681
  msgstr ""
1682
 
1683
- #: lib\settings.php:1045
1684
  #, php-format
1685
  msgid "Uncheck the box for \"Enable statistics recording\" under %s tab."
1686
  msgstr ""
1687
 
1688
- #: lib\settings.php:1046
1689
  msgid ""
1690
  "In Wordpress multisite, how do I stop (temporarily) WassUp from recording "
1691
  "new visits on all sites in the network?"
1692
  msgstr ""
1693
 
1694
- #: lib\settings.php:1047
1695
  #, php-format
1696
  msgid ""
1697
  "If plugin is \"network activated\", login as network admin, go to the "
@@ -1699,7 +1703,7 @@ msgid ""
1699
  "Statistics Recording for network\" and save."
1700
  msgstr ""
1701
 
1702
- #: lib\settings.php:1048
1703
  #, php-format
1704
  msgid ""
1705
  "If plugin is NOT \"network activated\", login as network admin, go to the "
@@ -1707,39 +1711,39 @@ msgid ""
1707
  "the box for \"Enable Statistics Recording for network\" and save."
1708
  msgstr ""
1709
 
1710
- #: lib\settings.php:1050
1711
  msgid ""
1712
  "No data is being displayed; or \"Visitor Details\" panel show 0 records for "
1713
  "the last 24 hours. How do I fix this?"
1714
  msgstr ""
1715
 
1716
- #: lib\settings.php:1051
1717
  #, php-format
1718
  msgid ""
1719
  "Check the box for \"Enable statistics recording\" setting under %s tab and "
1720
  "save."
1721
  msgstr ""
1722
 
1723
- #: lib\settings.php:1052
1724
  #, php-format
1725
  msgid "Click the [Reset to Default] button under %s tab."
1726
  msgstr ""
1727
 
1728
- #: lib\settings.php:1053
1729
  #, php-format
1730
  msgid ""
1731
  "Navigate to %s tab and uncheck the \"MySQL Delayed Insert\" setting and save."
1732
  msgstr ""
1733
 
1734
- #: lib\settings.php:1053 lib\settings.php:1058 lib\settings.php:1064
1735
  msgid "Manage File & Data"
1736
  msgstr ""
1737
 
1738
- #: lib\settings.php:1054
1739
  msgid "Deactivate and Re-activate Wassup from Wordpress Plugins panel."
1740
  msgstr ""
1741
 
1742
- #: lib\settings.php:1055
1743
  #, php-format
1744
  msgid ""
1745
  "If you have access to MySql/phpMyAdmin on your host server, run the MySql "
@@ -1747,20 +1751,20 @@ msgid ""
1747
  "table name may be different in other Wordpress setups."
1748
  msgstr ""
1749
 
1750
- #: lib\settings.php:1056
1751
  msgid ""
1752
  "As a last resort, uninstall WassUp cleanly (delete data and files) and "
1753
  "reinstall it."
1754
  msgstr ""
1755
 
1756
- #: lib\settings.php:1057
1757
  msgid ""
1758
  "My popular web site is hosted on a shared server with restrictive database "
1759
  "size limits. How do I prevent WassUp's table from growing too big for my "
1760
  "allocated quota?"
1761
  msgstr ""
1762
 
1763
- #: lib\settings.php:1058
1764
  #, php-format
1765
  msgid ""
1766
  "Navigate to %s tab and enable the setting for \"Auto Delete\" of old records "
@@ -1768,13 +1772,13 @@ msgid ""
1768
  "exceeded."
1769
  msgstr ""
1770
 
1771
- #: lib\settings.php:1059
1772
  msgid ""
1773
  "WassUp visitor counts are much lower than actual for my website. Why is "
1774
  "there a discrepancy and how do I fix it?"
1775
  msgstr ""
1776
 
1777
- #: lib\settings.php:1060
1778
  msgid ""
1779
  "Low visitor count is likely caused by page caching on your website. WassUp "
1780
  "is incompatible with static page caching plugins such as WP Supercache, WP "
@@ -1782,60 +1786,60 @@ msgid ""
1782
  "different (javascript-based) statistics plugin."
1783
  msgstr ""
1784
 
1785
- #: lib\settings.php:1061
1786
  msgid "Is there any caching plugin that works with WassUp?"
1787
  msgstr ""
1788
 
1789
- #: lib\settings.php:1062
1790
  #, php-format
1791
  msgid "%s is the only caching plugin verified to work with WassUp."
1792
  msgstr ""
1793
 
1794
- #: lib\settings.php:1063
1795
  msgid "How can I make Wassup run faster?"
1796
  msgstr ""
1797
 
1798
- #: lib\settings.php:1064
1799
  #, php-format
1800
  msgid ""
1801
  "Keep Wassup table size small by setting automatic delete of old records or "
1802
  "do manual delete periodically under %s tab."
1803
  msgstr ""
1804
 
1805
- #: lib\settings.php:1065
1806
  msgid ""
1807
  "If using the \"Top Stats\" widget on your site, set refresh frequency to 15 "
1808
  "minutes or higher."
1809
  msgstr ""
1810
 
1811
- #: lib\settings.php:1066
1812
  #, php-format
1813
  msgid ""
1814
  "Reduce the number of recording exclusions (by ip/hostname/username/url) "
1815
  "under %s tab."
1816
  msgstr ""
1817
 
1818
- #: lib\settings.php:1069
1819
  #, php-format
1820
  msgid ""
1821
  "Delete the file(s) %s from the plugin subfolder 'lib' to stop Wassup from "
1822
  "doing remote server queries for spam identification."
1823
  msgstr ""
1824
 
1825
- #: lib\settings.php:1070
1826
  #, php-format
1827
  msgid ""
1828
  "As a last resort, stop all spam/malware detection on new hits by unchecking "
1829
  "\"Enable Spam and malware detection on records\" under %s tab."
1830
  msgstr ""
1831
 
1832
- #: lib\settings.php:1071
1833
  msgid ""
1834
  "Why does WassUp stats sometimes show more page views than actual pages "
1835
  "clicked by a person?"
1836
  msgstr ""
1837
 
1838
- #: lib\settings.php:1072
1839
  msgid ""
1840
  "\"Phantom\" page views can occur when a user's browser does automatic feed "
1841
  "retrieval, link pre-fetching, a page refresh, or automatically adds your "
@@ -1844,11 +1848,11 @@ msgid ""
1844
  "from user link clicks."
1845
  msgstr ""
1846
 
1847
- #: lib\settings.php:1073
1848
  msgid "How do I upgrade WassUp safely when my site has frequent visitors?"
1849
  msgstr ""
1850
 
1851
- #: lib\settings.php:1074
1852
  #, php-format
1853
  msgid ""
1854
  "To upgrade WassUp when your site is busy, you must first disable statistics "
@@ -1857,11 +1861,11 @@ msgid ""
1857
  "active."
1858
  msgstr ""
1859
 
1860
- #: lib\settings.php:1075
1861
  msgid "An unspecified error occurred during plugin upgrade. What do I do next?"
1862
  msgstr ""
1863
 
1864
- #: lib\settings.php:1076
1865
  msgid ""
1866
  "Wait a few minutes. Do NOT re-attempt to upgrade nor try to activate the "
1867
  "plugin again! An activation error with no explanation is probably due to "
@@ -1871,18 +1875,18 @@ msgid ""
1871
  "and verify that Wassup plugin has activated."
1872
  msgstr ""
1873
 
1874
- #: lib\settings.php:1077
1875
  msgid "How do I uninstall WassUp cleanly?"
1876
  msgstr ""
1877
 
1878
- #: lib\settings.php:1078
1879
  msgid ""
1880
  "From a single Wordpress site: navigate to Wordpress Plugins panel and "
1881
  "deactivate WassUp plugin. Then, on the same page, click the \"delete\" link "
1882
  "below WassUp name. This deletes both data and files permanently."
1883
  msgstr ""
1884
 
1885
- #: lib\settings.php:1079
1886
  msgid ""
1887
  "From Wordpress multisite Network admin panel: navigate to Plugins panel and "
1888
  "deactivate WassUp plugin. If the plugin is not \"network activated\", "
@@ -1893,7 +1897,7 @@ msgid ""
1893
  "the network."
1894
  msgstr ""
1895
 
1896
- #: lib\settings.php:1080
1897
  #, php-format
1898
  msgid ""
1899
  "From a subsite in Wordpress multisite: navigate to %s tab and check the box "
@@ -1902,7 +1906,7 @@ msgid ""
1902
  "subsite's data permanently. No files are deleted (not needed)."
1903
  msgstr ""
1904
 
1905
- #: lib\settings.php:1081
1906
  #, php-format
1907
  msgid ""
1908
  "From a Wordpress 2.x site: navigate to %s tab and check the box for "
@@ -1914,62 +1918,62 @@ msgid ""
1914
  "your host server."
1915
  msgstr ""
1916
 
1917
- #: lib\settings.php:1083
1918
  #, php-format
1919
  msgid "Visit the %s to find more answers to your WassUp questions."
1920
  msgstr ""
1921
 
1922
- #: lib\settings.php:1083
1923
  msgid "Plugin Forum"
1924
  msgstr ""
1925
 
1926
- #: lib\settings.php:1088
1927
  msgid "How you can donate"
1928
  msgstr ""
1929
 
1930
- #: lib\settings.php:1089
1931
  msgid ""
1932
  "If you like this plugin, please consider making a donation to help keep it's "
1933
  "development active."
1934
  msgstr ""
1935
 
1936
- #: lib\settings.php:1091
1937
  #, php-format
1938
  msgid "Donate by %s"
1939
  msgstr ""
1940
 
1941
- #: lib\settings.php:1092
1942
  #, php-format
1943
  msgid "Donate %s"
1944
  msgstr ""
1945
 
1946
- #: lib\settings.php:1094
1947
  msgid "Send your bitcoin donation to this address"
1948
  msgstr ""
1949
 
1950
- #: lib\uadetector.class.php:459 lib\uadetector.class.php:782
1951
  msgid "Script Injection Bot"
1952
  msgstr ""
1953
 
1954
- #: lib\uadetector.class.php:608
1955
  msgid "Unknown Feedreader"
1956
  msgstr ""
1957
 
1958
- #: lib\upgrade.php:138
1959
  msgid "COMPATIBILITY WARNING: non-MySQL database type detected!"
1960
  msgstr ""
1961
 
1962
- #: lib\upgrade.php:138
1963
  msgid ""
1964
  "WassUp uses complex MySQL queries that may not run on a different database "
1965
  "type."
1966
  msgstr ""
1967
 
1968
- #: lib\upgrade.php:140
1969
  msgid "WassUp cannot generate accurate statistics with page caching enabled."
1970
  msgstr ""
1971
 
1972
- #: lib\upgrade.php:140
1973
  msgid ""
1974
  "If your cache plugin stores whole Wordpress pages/posts as static HTML, then "
1975
  "WassUp won't run properly. Please deactivate your cache plugin and remove "
@@ -1977,337 +1981,337 @@ msgid ""
1977
  "plugin."
1978
  msgstr ""
1979
 
1980
- #: lib\upgrade.php:147
1981
  #, php-format
1982
  msgid ""
1983
  "WARNING: Insufficient memory: %s found! A minimum allocation of %s is "
1984
  "recommended for WassUp and Wordpress."
1985
  msgstr ""
1986
 
1987
- #: lib\upgrade.php:150
1988
  #, php-format
1989
  msgid "See %s for information about increasing Wordpress memory."
1990
  msgstr ""
1991
 
1992
- #: lib\upgrade.php:157
1993
  msgid "IMPORTANT: Wassup Widget has changed and must be re-installed."
1994
  msgstr ""
1995
 
1996
- #: lib\upgrade.php:344
1997
  msgid "Welcome to WassUP"
1998
  msgstr ""
1999
 
2000
- #: lib\upgrade.php:364 lib\upgrade.php:407
2001
  #, php-format
2002
  msgid "An error occurred during the install of table %s."
2003
  msgstr ""
2004
 
2005
- #: lib\wassup.class.php:449 lib\compat-lib\compat_php.php:462
2006
  msgid "Administrator"
2007
  msgstr ""
2008
 
2009
- #: lib\wassup.class.php:450 lib\compat-lib\compat_php.php:463
2010
  msgid "Editor"
2011
  msgstr ""
2012
 
2013
- #: lib\wassup.class.php:451 lib\compat-lib\compat_php.php:464
2014
  msgid "Author"
2015
  msgstr ""
2016
 
2017
- #: lib\wassup.class.php:452 lib\compat-lib\compat_php.php:465
2018
  msgid "Contributor"
2019
  msgstr ""
2020
 
2021
- #: lib\wassup.class.php:453 lib\compat-lib\compat_php.php:466
2022
  msgid "Subscriber"
2023
  msgstr ""
2024
 
2025
- #: lib\wassup.class.php:459 lib\compat-lib\compat_php.php:472
2026
  msgid "One - 2 lines chart 1 axis"
2027
  msgstr ""
2028
 
2029
- #: lib\wassup.class.php:460 lib\compat-lib\compat_php.php:473
2030
  msgid "Two - 2 lines chart 2 axes"
2031
  msgstr ""
2032
 
2033
- #: lib\wassup.class.php:480 lib\compat-lib\compat_php.php:493
2034
  msgid "Everything"
2035
  msgstr ""
2036
 
2037
- #: lib\wassup.class.php:482 lib\compat-lib\compat_php.php:495
2038
  msgid "No spider"
2039
  msgstr ""
2040
 
2041
- #: lib\wassup.class.php:484 lib\compat-lib\compat_php.php:497
2042
  msgid "No Spam"
2043
  msgstr ""
2044
 
2045
- #: lib\wassup.class.php:485 lib\compat-lib\compat_php.php:498
2046
  msgid "No Spam, No Spider"
2047
  msgstr ""
2048
 
2049
- #: lib\wassup.class.php:486 lib\compat-lib\compat_php.php:499
2050
  msgid "Users logged in"
2051
  msgstr ""
2052
 
2053
- #: lib\wassup.class.php:487 lib\wassupadmin.php:1041 lib\wassupadmin.php:2132
2054
- #: lib\compat-lib\compat_php.php:500 lib\compat-lib\compat_php.php:2643
2055
- #: widgets\widgets.php:243 widgets\widget_functions.php:241
2056
  msgid "Comment authors"
2057
  msgstr ""
2058
 
2059
- #: lib\wassup.class.php:488 lib\compat-lib\compat_php.php:501
2060
  msgid "Referrer from search engine"
2061
  msgstr ""
2062
 
2063
- #: lib\wassup.class.php:489 lib\compat-lib\compat_php.php:502
2064
  msgid "Referrer from ext link"
2065
  msgstr ""
2066
 
2067
- #: lib\wassup.class.php:522 lib\compat-lib\compat_php.php:535
2068
  msgid "Don't delete anything"
2069
  msgstr ""
2070
 
2071
- #: lib\wassup.class.php:523 lib\wassup.class.php:559
2072
- #: lib\compat-lib\compat_php.php:536 lib\compat-lib\compat_php.php:572
2073
  msgid "24 hours"
2074
  msgstr ""
2075
 
2076
- #: lib\wassup.class.php:524 lib\wassup.class.php:560
2077
- #: lib\compat-lib\compat_php.php:537 lib\compat-lib\compat_php.php:573
2078
  msgid "7 days"
2079
  msgstr ""
2080
 
2081
- #: lib\wassup.class.php:525 lib\wassup.class.php:561
2082
- #: lib\compat-lib\compat_php.php:538 lib\compat-lib\compat_php.php:574
2083
  msgid "2 weeks"
2084
  msgstr ""
2085
 
2086
- #: lib\wassup.class.php:526 lib\wassup.class.php:562
2087
- #: lib\compat-lib\compat_php.php:539 lib\compat-lib\compat_php.php:575
2088
  msgid "1 month"
2089
  msgstr ""
2090
 
2091
- #: lib\wassup.class.php:527 lib\wassup.class.php:563
2092
- #: lib\compat-lib\compat_php.php:540 lib\compat-lib\compat_php.php:576
2093
  msgid "3 months"
2094
  msgstr ""
2095
 
2096
- #: lib\wassup.class.php:528 lib\wassup.class.php:564
2097
- #: lib\compat-lib\compat_php.php:541 lib\compat-lib\compat_php.php:577
2098
  msgid "6 months"
2099
  msgstr ""
2100
 
2101
- #: lib\wassup.class.php:529 lib\wassup.class.php:565
2102
- #: lib\compat-lib\compat_php.php:542 lib\compat-lib\compat_php.php:578
2103
  msgid "1 year"
2104
  msgstr ""
2105
 
2106
- #: lib\wassup.class.php:536 lib\compat-lib\compat_php.php:549
2107
  msgid "All"
2108
  msgstr ""
2109
 
2110
- #: lib\wassup.class.php:539 lib\compat-lib\compat_php.php:552
2111
  msgid "Spider and spam"
2112
  msgstr ""
2113
 
2114
- #: lib\wassup.class.php:549 lib\compat-lib\compat_php.php:562
2115
  msgid "IP Address"
2116
  msgstr ""
2117
 
2118
- #: lib\wassup.class.php:550 lib\compat-lib\compat_php.php:563
2119
  msgid "URL Request"
2120
  msgstr ""
2121
 
2122
- #: lib\wassup.class.php:556 lib\compat-lib\compat_php.php:569
2123
  msgid "1 hour"
2124
  msgstr ""
2125
 
2126
- #: lib\wassup.class.php:557 lib\compat-lib\compat_php.php:570
2127
  msgid "6 hours"
2128
  msgstr ""
2129
 
2130
- #: lib\wassup.class.php:558 lib\compat-lib\compat_php.php:571
2131
  msgid "12 hours"
2132
  msgstr ""
2133
 
2134
- #: lib\wassup.class.php:566 lib\compat-lib\compat_php.php:579
2135
  msgid "all time"
2136
  msgstr ""
2137
 
2138
- #: lib\wassup.class.php:659 lib\compat-lib\compat_php.php:672
2139
  msgid ""
2140
  "Permission denied! Sorry, you must be an 'administrator' to change settings."
2141
  msgstr ""
2142
 
2143
- #: lib\wassup.class.php:662 lib\compat-lib\compat_php.php:675
2144
  msgid "Nothing to do!"
2145
  msgstr ""
2146
 
2147
- #: lib\wassup.class.php:690 lib\compat-lib\compat_php.php:703
2148
  msgid "not required"
2149
  msgstr ""
2150
 
2151
- #: lib\wassup.class.php:792 lib\wassupadmin.php:673
2152
- #: lib\compat-lib\compat_php.php:805
2153
  msgid "Wassup options updated successfully"
2154
  msgstr ""
2155
 
2156
- #: lib\wassup.class.php:1036 lib\compat-lib\compat_php.php:1049
2157
  msgid "error"
2158
  msgstr ""
2159
 
2160
- #: lib\wassup.class.php:1037 lib\compat-lib\compat_php.php:1050
2161
  msgid "warning"
2162
  msgstr ""
2163
 
2164
- #: lib\wassup.class.php:1038 lib\compat-lib\compat_php.php:1051
2165
  msgid "updated"
2166
  msgstr ""
2167
 
2168
- #: lib\wassup.class.php:1039 lib\compat-lib\compat_php.php:1052
2169
  msgid "upgraded"
2170
  msgstr ""
2171
 
2172
- #: lib\wassup.class.php:1040 lib\compat-lib\compat_php.php:1053
2173
  msgid "deleted"
2174
  msgstr ""
2175
 
2176
- #: lib\wassup.class.php:1710 lib\compat-lib\compat_php.php:1720
2177
  msgid "ERROR"
2178
  msgstr ""
2179
 
2180
- #: lib\wassup.class.php:1770 lib\compat-lib\compat_php.php:1780
2181
  #, php-format
2182
  msgid "%s error!"
2183
  msgstr ""
2184
 
2185
- #: lib\wassup.class.php:1771 lib\compat-lib\compat_php.php:1781
2186
  #, php-format
2187
  msgid "%s encountered an error."
2188
  msgstr ""
2189
 
2190
- #: lib\wassup.class.php:1878 lib\compat-lib\compat_php.php:1888
2191
  msgid "Wassup auto-delete notice"
2192
  msgstr ""
2193
 
2194
- #: lib\wassup.class.php:1879 lib\compat-lib\compat_php.php:1889
2195
  #, php-format
2196
  msgid "Auto-delete deleted %d old %s records today."
2197
  msgstr ""
2198
 
2199
- #: lib\wassup.class.php:1915 lib\compat-lib\compat_php.php:1925
2200
  #, php-format
2201
  msgid "Error with TABLE %s: Not found"
2202
  msgstr ""
2203
 
2204
- #: lib\wassup.class.php:1950 lib\compat-lib\compat_php.php:1960
2205
  #, php-format
2206
  msgid "Error with \"SHOW CREATE TABLE\" for %s."
2207
  msgstr ""
2208
 
2209
- #: lib\wassup.class.php:1957 lib\compat-lib\compat_php.php:1967
2210
  #, php-format
2211
  msgid "Table structure of table %s"
2212
  msgstr ""
2213
 
2214
- #: lib\wassup.class.php:1963 lib\compat-lib\compat_php.php:1973
2215
  #, php-format
2216
  msgid "Data contents of table %s"
2217
  msgstr ""
2218
 
2219
- #: lib\wassup.class.php:1971 lib\compat-lib\compat_php.php:1981
2220
  #, php-format
2221
  msgid "Error getting table structure of %s: %s"
2222
  msgstr ""
2223
 
2224
- #: lib\wassup.class.php:1974 lib\compat-lib\compat_php.php:1984
2225
  #, php-format
2226
  msgid "Error getting table structure of %s"
2227
  msgstr ""
2228
 
2229
- #: lib\wassup.class.php:1980 lib\compat-lib\compat_php.php:1990
2230
  #, php-format
2231
  msgid "Error with table %s: %s"
2232
  msgstr ""
2233
 
2234
- #: lib\wassup.class.php:1982 lib\compat-lib\compat_php.php:1992
2235
  #, php-format
2236
  msgid "Error with table %s: No data"
2237
  msgstr ""
2238
 
2239
- #: lib\wassup.class.php:2063 lib\compat-lib\compat_php.php:2073
2240
  #, php-format
2241
  msgid "Error exporting data from table %s: %s"
2242
  msgstr ""
2243
 
2244
- #: lib\wassup.class.php:2119 lib\compat-lib\compat_php.php:2129
2245
  #, php-format
2246
  msgid "End of data contents of table %s"
2247
  msgstr ""
2248
 
2249
- #: lib\wassup.class.php:2121 lib\compat-lib\compat_php.php:2131
2250
  #, php-format
2251
  msgid "Interrupted data contents of table %s"
2252
  msgstr ""
2253
 
2254
- #: lib\wassup.class.php:2130 lib\compat-lib\compat_php.php:2140
2255
  #, php-format
2256
  msgid "End time: %d"
2257
  msgstr ""
2258
 
2259
- #: lib\wassup.class.php:2131 lib\wassup.class.php:2136
2260
- #: lib\compat-lib\compat_php.php:2141 lib\compat-lib\compat_php.php:2146
2261
  #, php-format
2262
  msgid "%d out of %d records exported."
2263
  msgstr ""
2264
 
2265
- #: lib\wassup.class.php:2131 lib\wassup.class.php:2136
2266
- #: lib\compat-lib\compat_php.php:2141 lib\compat-lib\compat_php.php:2146
2267
  #, php-format
2268
  msgid "Last record ID: %d"
2269
  msgstr ""
2270
 
2271
- #: lib\wassup.class.php:2280 lib\wassup.class.php:2313
2272
- #: lib\compat-lib\compat_php.php:2288 lib\compat-lib\compat_php.php:2321
2273
  msgid "direct hit"
2274
  msgstr ""
2275
 
2276
- #: lib\wassup.class.php:2291 lib\wassup.class.php:2294
2277
- #: lib\compat-lib\compat_php.php:2299 lib\compat-lib\compat_php.php:2302
2278
  msgid "from your site"
2279
  msgstr ""
2280
 
2281
- #: lib\wassupadmin.php:155
2282
  msgid "paused"
2283
  msgstr ""
2284
 
2285
- #: lib\wassupadmin.php:194
2286
  msgid "Sorry, delete failed!"
2287
  msgstr ""
2288
 
2289
- #: lib\wassupadmin.php:197
2290
  msgid "Delete record failed!"
2291
  msgstr ""
2292
 
2293
- #: lib\wassupadmin.php:207 lib\wassupadmin.php:214 lib\wassupadmin.php:1570
2294
  msgid "Hide Search"
2295
  msgstr ""
2296
 
2297
- #: lib\wassupadmin.php:219 lib\wassupadmin.php:262
2298
  msgid "Collapse All"
2299
  msgstr ""
2300
 
2301
- #: lib\wassupadmin.php:221 lib\wassupadmin.php:264 lib\wassupadmin.php:980
2302
- #: lib\wassupadmin.php:1611
2303
  msgid "Expand All"
2304
  msgstr ""
2305
 
2306
- #: lib\wassupadmin.php:224
2307
  msgid "Expand Chronology"
2308
  msgstr ""
2309
 
2310
- #: lib\wassupadmin.php:226 lib\wassupadmin.php:1612
2311
  msgid "Collapse Chronology"
2312
  msgstr ""
2313
 
@@ -2424,532 +2428,536 @@ msgstr ""
2424
  msgid "Exec time"
2425
  msgstr ""
2426
 
2427
- #: lib\wassupadmin.php:1011 lib\wassupadmin.php:1198
2428
  msgid "Legend"
2429
  msgstr ""
2430
 
2431
- #: lib\wassupadmin.php:1011 lib\wassupadmin.php:1040 lib\wassupadmin.php:1198
2432
  msgid "Logged-in Users"
2433
  msgstr ""
2434
 
2435
- #: lib\wassupadmin.php:1011
2436
  msgid "Comment Authors"
2437
  msgstr ""
2438
 
2439
- #: lib\wassupadmin.php:1011 lib\wassupadmin.php:1198
2440
  msgid "Spiders/bots"
2441
  msgstr ""
2442
 
2443
- #: lib\wassupadmin.php:1039 lib\wassupadmin.php:2079
2444
- #: lib\compat-lib\compat_php.php:2590 widgets\widget_functions.php:221
2445
  msgid "Visitors online"
2446
  msgstr ""
2447
 
2448
- #: lib\wassupadmin.php:1067
2449
  msgid "From your site"
2450
  msgstr ""
2451
 
2452
- #: lib\wassupadmin.php:1089 lib\wassupadmin.php:1681
2453
  msgid "LOGGED IN USER"
2454
  msgstr ""
2455
 
2456
- #: lib\wassupadmin.php:1094 lib\wassupadmin.php:1688
2457
  msgid "ADMINISTRATOR"
2458
  msgstr ""
2459
 
2460
- #: lib\wassupadmin.php:1109 lib\wassupadmin.php:1709
2461
  msgid "COMMENT AUTHOR"
2462
  msgstr ""
2463
 
2464
- #: lib\wassupadmin.php:1130 lib\wassupadmin.php:1764
2465
  msgid "show raw table"
2466
  msgstr ""
2467
 
2468
- #: lib\wassupadmin.php:1130 lib\wassupadmin.php:1764
2469
  msgid "Show the items as raw table"
2470
  msgstr ""
2471
 
2472
- #: lib\wassupadmin.php:1198
2473
  msgid "Comments Authors"
2474
  msgstr ""
2475
 
2476
- #: lib\wassupadmin.php:1202
2477
  msgid "Pause"
2478
  msgstr ""
2479
 
2480
- #: lib\wassupadmin.php:1203
2481
  msgid "Play"
2482
  msgstr ""
2483
 
2484
- #: lib\wassupadmin.php:1214
2485
  msgid "Show map"
2486
  msgstr ""
2487
 
2488
- #: lib\wassupadmin.php:1214
2489
  msgid "Show ip geo location on map"
2490
  msgstr ""
2491
 
2492
- #: lib\wassupadmin.php:1220
2493
  msgid "Spy items by"
2494
  msgstr ""
2495
 
2496
- #: lib\wassupadmin.php:1267
2497
  msgid "WassUp recording is disabled"
2498
  msgstr ""
2499
 
2500
- #: lib\wassupadmin.php:1269
2501
  msgid "WassUp recording is disabled for network."
2502
  msgstr ""
2503
 
2504
- #: lib\wassupadmin.php:1467
2505
  msgid "Show details from the last"
2506
  msgstr ""
2507
 
2508
- #: lib\wassupadmin.php:1476
2509
  msgid "Items per page"
2510
  msgstr ""
2511
 
2512
- #: lib\wassupadmin.php:1486
2513
  msgid "Filter items for"
2514
  msgstr ""
2515
 
2516
- #: lib\wassupadmin.php:1500
2517
  msgid "Visits"
2518
  msgstr ""
2519
 
2520
- #: lib\wassupadmin.php:1501
2521
  msgid "Pageviews"
2522
  msgstr ""
2523
 
2524
- #: lib\wassupadmin.php:1502
2525
  msgid "Pages/Visits"
2526
  msgstr ""
2527
 
2528
- #: lib\wassupadmin.php:1518
2529
  msgid "Spams"
2530
  msgstr ""
2531
 
2532
- #: lib\wassupadmin.php:1528
2533
  msgid "Spam/Malware Options"
2534
  msgstr ""
2535
 
2536
- #: lib\wassupadmin.php:1534
2537
  msgid "Enable Spam and Malware Check on Records"
2538
  msgstr ""
2539
 
2540
- #: lib\wassupadmin.php:1546
 
 
 
 
2541
  msgid "refresh screen"
2542
  msgstr ""
2543
 
2544
- #: lib\wassupadmin.php:1548
2545
  #, php-format
2546
  msgid "Auto refresh in %s seconds"
2547
  msgstr ""
2548
 
2549
- #: lib\wassupadmin.php:1553
2550
  msgid "hide chart"
2551
  msgstr ""
2552
 
2553
- #: lib\wassupadmin.php:1553
2554
  msgid "Hide the chart"
2555
  msgstr ""
2556
 
2557
- #: lib\wassupadmin.php:1553
2558
  msgid "Hide chart"
2559
  msgstr ""
2560
 
2561
- #: lib\wassupadmin.php:1555
2562
  msgid "show chart"
2563
  msgstr ""
2564
 
2565
- #: lib\wassupadmin.php:1555
2566
  msgid "Show the chart"
2567
  msgstr ""
2568
 
2569
- #: lib\wassupadmin.php:1555
2570
  msgid "Show chart"
2571
  msgstr ""
2572
 
2573
- #: lib\wassupadmin.php:1566
2574
  #, php-format
2575
  msgid "Top Stats for %s"
2576
  msgstr ""
2577
 
2578
- #: lib\wassupadmin.php:1566
2579
  msgid "Show top stats"
2580
  msgstr ""
2581
 
2582
- #: lib\wassupadmin.php:1568
2583
  #, php-format
2584
  msgid "Top stats for %s in popup"
2585
  msgstr ""
2586
 
2587
- #: lib\wassupadmin.php:1576
2588
  #, php-format
2589
  msgid "%s matches found for search"
2590
  msgstr ""
2591
 
2592
- #: lib\wassupadmin.php:1580
2593
  #, php-format
2594
  msgid "%s items marked for IP"
2595
  msgstr ""
2596
 
2597
- #: lib\wassupadmin.php:1581
2598
  msgid "Filter by marked IP"
2599
  msgstr ""
2600
 
2601
- #: lib\wassupadmin.php:1645
2602
  msgid "Records display interrupted."
2603
  msgstr ""
2604
 
2605
- #: lib\wassupadmin.php:1648
2606
  msgid "Unable to display records."
2607
  msgstr ""
2608
 
2609
- #: lib\wassupadmin.php:1715
2610
  msgid "FEEDREADER"
2611
  msgstr ""
2612
 
2613
- #: lib\wassupadmin.php:1717
2614
  msgid "SUBSCRIBER(S)"
2615
  msgstr ""
2616
 
2617
- #: lib\wassupadmin.php:1720
2618
  msgid "SPIDER"
2619
  msgstr ""
2620
 
2621
- #: lib\wassupadmin.php:1754 lib\wassupadmin.php:1759
2622
  msgid "delete"
2623
  msgstr ""
2624
 
2625
- #: lib\wassupadmin.php:1754
2626
  msgid "Delete ALL marked records with this IP"
2627
  msgstr ""
2628
 
2629
- #: lib\wassupadmin.php:1756
2630
  msgid "unmark"
2631
  msgstr ""
2632
 
2633
- #: lib\wassupadmin.php:1756
2634
  msgid "UnMark IP"
2635
  msgstr ""
2636
 
2637
- #: lib\wassupadmin.php:1759
2638
  msgid "Delete this record"
2639
  msgstr ""
2640
 
2641
- #: lib\wassupadmin.php:1761
2642
  msgid "mark"
2643
  msgstr ""
2644
 
2645
- #: lib\wassupadmin.php:1761
2646
  msgid "Mark IP"
2647
  msgstr ""
2648
 
2649
- #: lib\wassupadmin.php:1799
2650
  msgid "SEARCH ENGINE"
2651
  msgstr ""
2652
 
2653
- #: lib\wassupadmin.php:1799
2654
  msgid "page"
2655
  msgstr ""
2656
 
2657
- #: lib\wassupadmin.php:1800
2658
  msgid "KEYWORDS"
2659
  msgstr ""
2660
 
2661
- #: lib\wassupadmin.php:1823
2662
  msgid "Probably SPAM!"
2663
  msgstr ""
2664
 
2665
- #: lib\wassupadmin.php:1825
2666
  msgid "Referer Spam"
2667
  msgstr ""
2668
 
2669
- #: lib\wassupadmin.php:1829
2670
  msgid "Comment Spam"
2671
  msgstr ""
2672
 
2673
- #: lib\wassupadmin.php:1837
2674
  msgid "Probably hack/malware attempt!"
2675
  msgstr ""
2676
 
2677
- #: lib\wassupadmin.php:1864
2678
  msgid "BROWSER"
2679
  msgstr ""
2680
 
2681
- #: lib\wassupadmin.php:1867
2682
  msgid "RESOLUTION"
2683
  msgstr ""
2684
 
2685
- #: lib\wassupadmin.php:1937
2686
  msgid "Graph of visitor hits"
2687
  msgstr ""
2688
 
2689
- #: lib\wassupadmin.php:1939
2690
  msgid "Too few records to print chart"
2691
  msgstr ""
2692
 
2693
- #: lib\wassupadmin.php:1948
2694
  #, php-format
2695
  msgid "Invalid page request %s"
2696
  msgstr ""
2697
 
2698
- #: lib\wassupadmin.php:2013 lib\compat-lib\compat_php.php:2524
2699
  msgid "Stats"
2700
  msgstr ""
2701
 
2702
- #: lib\wassupadmin.php:2013 lib\compat-lib\compat_php.php:2524
2703
  msgid "More"
2704
  msgstr ""
2705
 
2706
- #: lib\wassupadmin.php:2015 lib\wassupadmin.php:2050
2707
- #: lib\compat-lib\compat_php.php:2526 lib\compat-lib\compat_php.php:2561
2708
  msgid "visitor stats chart"
2709
  msgstr ""
2710
 
2711
- #: lib\wassupadmin.php:2045 lib\compat-lib\compat_php.php:2556
2712
  msgid "More Stats"
2713
  msgstr ""
2714
 
2715
- #: lib\wassupadmin.php:2126 lib\compat-lib\compat_php.php:2637
2716
  msgid "Registered users"
2717
  msgstr ""
2718
 
2719
- #: lib\wassupadmin.php:2136 lib\compat-lib\compat_php.php:2647
2720
- #: widgets\widget_functions.php:220
2721
  msgid "Visitor online"
2722
  msgstr ""
2723
 
2724
- #: lib\wassupadmin.php:2141 lib\compat-lib\compat_php.php:2652
2725
  msgid "No online data!"
2726
  msgstr ""
2727
 
2728
- #: lib\wassupadmin.php:2145 lib\compat-lib\compat_php.php:2656
2729
- #: widgets\widget_functions.php:125
2730
  msgid "powered by"
2731
  msgstr ""
2732
 
2733
- #: lib\wassupadmin.php:2145 lib\compat-lib\compat_php.php:2656
2734
- #: widgets\widget_functions.php:125
2735
  msgid "Real Time Visitors Tracking"
2736
  msgstr ""
2737
 
2738
- #: lib\compat-lib\compat_widget.php:111 widgets\widgets.php:108
2739
- #: widgets\widgets.php:256 widgets\widgets.php:470
2740
  msgid "Widget style options"
2741
  msgstr ""
2742
 
2743
- #: lib\compat-lib\compat_widget.php:113 widgets\widgets.php:110
2744
- #: widgets\widgets.php:258 widgets\widgets.php:472
2745
  #, php-format
2746
  msgid "Class attribute for %s list:"
2747
  msgstr ""
2748
 
2749
- #: lib\compat-lib\compat_widget.php:115 widgets\widgets.php:112
2750
- #: widgets\widgets.php:260 widgets\widgets.php:474
2751
  msgid "Max. chars to display from left"
2752
  msgstr ""
2753
 
2754
- #: lib\compat-lib\compat_widget.php:116 widgets\widgets.php:113
2755
- #: widgets\widgets.php:261 widgets\widgets.php:475
2756
  msgid "enter \"0\" for theme default/line wrap of long texts"
2757
  msgstr ""
2758
 
2759
- #: widgets\widgets.php:64
2760
  msgid "base widget"
2761
  msgstr ""
2762
 
2763
- #: widgets\widgets.php:208
2764
  msgid "Online"
2765
  msgstr ""
2766
 
2767
- #: widgets\widgets.php:209
2768
  msgid "Show counts of your site's visitors who are currently online."
2769
  msgstr ""
2770
 
2771
- #: widgets\widgets.php:219
2772
  msgid "Online Now"
2773
  msgstr ""
2774
 
2775
- #: widgets\widgets.php:239
2776
  msgid "Show online counts for:"
2777
  msgstr ""
2778
 
2779
- #: widgets\widgets.php:241
2780
  msgid "All current visitors"
2781
  msgstr ""
2782
 
2783
- #: widgets\widgets.php:242 widgets\widget_functions.php:231
2784
  msgid "Logged-in users"
2785
  msgstr ""
2786
 
2787
- #: widgets\widgets.php:244 widgets\widget_functions.php:251
2788
  msgid "Regular visitors"
2789
  msgstr ""
2790
 
2791
- #: widgets\widgets.php:245 widgets\widget_functions.php:261
2792
  msgid "Others"
2793
  msgstr ""
2794
 
2795
- #: widgets\widgets.php:249
2796
  msgid "Online Users Details"
2797
  msgstr ""
2798
 
2799
- #: widgets\widgets.php:251
2800
  msgid "Show online usernames to registered users"
2801
  msgstr ""
2802
 
2803
- #: widgets\widgets.php:252
2804
  msgid "Show country flags of users online"
2805
  msgstr ""
2806
 
2807
- #: widgets\widgets.php:265
2808
  msgid "online counts are automatically cached for 1 minute."
2809
  msgstr ""
2810
 
2811
- #: widgets\widgets.php:266 widgets\widgets.php:480
2812
  msgid "empty results are not displayed."
2813
  msgstr ""
2814
 
2815
- #: widgets\widgets.php:377
2816
  msgid "Top Stats"
2817
  msgstr ""
2818
 
2819
- #: widgets\widgets.php:378
2820
  msgid ""
2821
  "List your site's most popular or trending items from Wassup's latest stats "
2822
  "data."
2823
  msgstr ""
2824
 
2825
- #: widgets\widgets.php:411
2826
  msgid "of first checked item below"
2827
  msgstr ""
2828
 
2829
- #: widgets\widgets.php:413
2830
  msgid "List Top Results for"
2831
  msgstr ""
2832
 
2833
- #: widgets\widgets.php:417
2834
  msgid "Stat item"
2835
  msgstr ""
2836
 
2837
- #: widgets\widgets.php:418
2838
  msgid "max limit"
2839
  msgstr ""
2840
 
2841
- #: widgets\widgets.php:420
2842
  msgid "Titles of posts and pages"
2843
  msgstr ""
2844
 
2845
- #: widgets\widgets.php:420
2846
  msgid "Latest articles"
2847
  msgstr ""
2848
 
2849
- #: widgets\widgets.php:426
2850
  msgid "Search engine searches"
2851
  msgstr ""
2852
 
2853
- #: widgets\widgets.php:426
2854
  msgid "Latest searches"
2855
  msgstr ""
2856
 
2857
- #: widgets\widgets.php:432
2858
  msgid "External links that generated referrals to your site"
2859
  msgstr ""
2860
 
2861
- #: widgets\widgets.php:432
2862
  msgid "Latest referrers"
2863
  msgstr ""
2864
 
2865
- #: widgets\widgets.php:438
2866
  msgid "Latest URL requests"
2867
  msgstr ""
2868
 
2869
- #: widgets\widgets.php:444
2870
  msgid "Client browser software"
2871
  msgstr ""
2872
 
2873
- #: widgets\widgets.php:444
2874
  msgid "Latest browsers"
2875
  msgstr ""
2876
 
2877
- #: widgets\widgets.php:450
2878
  msgid "Client device/operating software"
2879
  msgstr ""
2880
 
2881
- #: widgets\widgets.php:450
2882
  msgid "Latest OS"
2883
  msgstr ""
2884
 
2885
- #: widgets\widgets.php:456
2886
  msgid "Visitors country/language"
2887
  msgstr ""
2888
 
2889
- #: widgets\widgets.php:456
2890
  msgid "Latest locale"
2891
  msgstr ""
2892
 
2893
- #: widgets\widgets.php:463
2894
  msgid "Show counts for each item"
2895
  msgstr ""
2896
 
2897
- #: widgets\widgets.php:464
2898
  msgid "Statistics timeframe"
2899
  msgstr ""
2900
 
2901
- #: widgets\widgets.php:465
2902
  msgid ""
2903
  "select 1-30 days for latest top results, 1-12 hours for trending results"
2904
  msgstr ""
2905
 
2906
- #: widgets\widgets.php:466
2907
  msgid "Refresh statistics every:"
2908
  msgstr ""
2909
 
2910
- #: widgets\widgets.php:479
2911
  msgid "known spammers and spiders are excluded from results."
2912
  msgstr ""
2913
 
2914
- #: widgets\widgets.php:583
2915
  msgid "Trending"
2916
  msgstr ""
2917
 
2918
- #: widgets\widget_functions.php:260
2919
  msgid "Other"
2920
  msgstr ""
2921
 
2922
- #: widgets\widget_functions.php:417
2923
  #, php-format
2924
  msgid "%s articles"
2925
  msgstr ""
2926
 
2927
- #: widgets\widget_functions.php:418
2928
  #, php-format
2929
  msgid "%s searches"
2930
  msgstr ""
2931
 
2932
- #: widgets\widget_functions.php:419
2933
  #, php-format
2934
  msgid "%s referrers"
2935
  msgstr ""
2936
 
2937
- #: widgets\widget_functions.php:420
2938
  #, php-format
2939
  msgid "%s requests"
2940
  msgstr ""
2941
 
2942
- #: widgets\widget_functions.php:421
2943
  #, php-format
2944
  msgid "%s browsers"
2945
  msgstr ""
2946
 
2947
- #: widgets\widget_functions.php:422
2948
  #, php-format
2949
  msgid "%s OS"
2950
  msgstr ""
2951
 
2952
- #: widgets\widget_functions.php:423
2953
  #, php-format
2954
  msgid "%s locale"
2955
  msgstr ""
8
  msgstr ""
9
  "Project-Id-Version: WassUp 1.9.1\n"
10
  "Report-Msgid-Bugs-To: michele@befree.it\n"
11
+ "POT-Creation-Date: 2016-10-19 15:20-0400\n"
12
  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14
  "Language-Team: LANGUAGE <LL@li.org>\n"
17
  "Content-Type: text/plain; charset=CHARSET\n"
18
  "Content-Transfer-Encoding: 8bit\n"
19
 
20
+ #: wassup.php:160
21
  #, php-format
22
  msgid "File %s does not exist!"
23
  msgstr ""
24
 
25
+ #: wassup.php:175
 
 
 
 
 
26
  msgid "Sorry! \"Network Activation\" is DISABLED for subdomain networks."
27
  msgstr ""
28
 
29
+ #: wassup.php:176
30
  #, php-format
31
  msgid "%s must be activated on each subdomain site separately."
32
  msgstr ""
33
 
34
+ #: wassup.php:177
35
  msgid ""
36
  "Activate plugin on your parent domain (main site) to set default options for "
37
  "your network."
38
  msgstr ""
39
 
40
+ #: wassup.php:178
41
  msgid "Back to Plugins"
42
  msgstr ""
43
 
44
+ #: wassup.php:241 lib\upgrade.php:710
45
  msgid "Database created/upgraded successfully"
46
  msgstr ""
47
 
48
+ #: wassup.php:243
49
  msgid ""
50
  "An error occurred during the upgrade. WassUp table structure may not have "
51
  "been updated properly."
52
  msgstr ""
53
 
54
+ #: wassup.php:247
55
  msgid "activation successful"
56
  msgstr ""
57
 
58
+ #: wassup.php:249
59
  msgid "activation successful. No upgrade necessary."
60
  msgstr ""
61
 
62
+ #: wassup.php:276
63
  #, php-format
64
  msgid "%s: database upgrade failed!"
65
  msgstr ""
66
 
67
+ #: wassup.php:287
68
  #, php-format
69
  msgid "%s: plugin install/upgrade failed!"
70
  msgstr ""
71
 
72
+ #: wassup.php:469 wassup.php:472 lib\action.php:53
73
  msgid "Bad request!"
74
  msgstr ""
75
 
76
+ #: wassup.php:672
77
  msgid "Export ERROR: nonce failure!"
78
  msgstr ""
79
 
80
+ #: wassup.php:675 lib\wassup.class.php:1903 lib\compat-lib\compat_php.php:1913
81
  msgid "Export ERROR: login required!"
82
  msgstr ""
83
 
84
+ #: wassup.php:718
85
  msgid "Export failed due to script interruption or timeout error!"
86
  msgstr ""
87
 
88
+ #: wassup.php:732
89
  msgid "ERROR: Nothing to Export."
90
  msgstr ""
91
 
92
+ #: wassup.php:1028 wassup.php:3310 lib\uadetector.class.php:600
93
+ #: lib\uadetector.class.php:1431
94
  msgid "Unknown Spider"
95
  msgstr ""
96
 
97
+ #: wassup.php:1029
98
  msgid "Unknown Browser"
99
  msgstr ""
100
 
101
+ #: wassup.php:1659
102
  msgid "Spoofer bot"
103
  msgstr ""
104
 
105
+ #: wassup.php:2093
106
  #, php-format
107
  msgid "%s WassUp Plugin table has reached maximum size!"
108
  msgstr ""
109
 
110
+ #: wassup.php:2093
111
  msgid "ALERT"
112
  msgstr ""
113
 
114
+ #: wassup.php:2094
115
  msgid "Hi"
116
  msgstr ""
117
 
118
+ #: wassup.php:2094
119
  msgid ""
120
  "you have received this email because your WassUp Database table at your "
121
  "Wordpress blog"
122
  msgstr ""
123
 
124
+ #: wassup.php:2094
125
  msgid "has reached the maximum value set in the options menu"
126
  msgstr ""
127
 
128
+ #: wassup.php:2095
129
  msgid ""
130
  "This is only a reminder, please take the actions you want in the WassUp "
131
  "options menu"
132
  msgstr ""
133
 
134
+ #: wassup.php:2095
135
  msgid "This alert now will be removed and you will be able to set a new one"
136
  msgstr ""
137
 
138
+ #: wassup.php:2096
139
  msgid ""
140
  "Thank you for using WassUp plugin. Check if there is a new version available "
141
  "here:"
142
  msgstr ""
143
 
144
+ #: wassup.php:2096
145
  msgid "Have a nice day!"
146
  msgstr ""
147
 
148
+ #: wassup.php:2337 wassup.php:2781
149
  msgid "encrypted search"
150
  msgstr ""
151
 
152
+ #: wassup.php:3297 wassup.php:3304
153
  msgid "Feed Reader"
154
  msgstr ""
155
 
156
+ #: wassup.php:3305
157
  msgid "feed reader"
158
  msgstr ""
159
 
160
+ #: wassup.php:3912
161
  msgid "timestamp"
162
  msgstr ""
163
 
164
+ #: wassup.php:3913
165
  msgid "If above timestamp is not current time, this page is cached"
166
  msgstr ""
167
 
168
+ #: wassup.php:4094
169
  msgid "Visitors Online"
170
  msgstr ""
171
 
172
+ #: wassup.php:4112 lib\compat-lib\compat_widget.php:151 widgets\widgets.php:144
173
+ #: widgets\widgets.php:335 widgets\widgets.php:549
174
  msgid "No Data"
175
  msgstr ""
176
 
177
+ #: lib\action.php:44
178
  msgid "Missing or invalid action parameter!"
179
  msgstr ""
180
 
181
+ #: lib\action.php:56
182
  msgid "Login required!"
183
  msgstr ""
184
 
185
+ #: lib\action.php:60
186
  msgid "Missing or invalid whash parameter!"
187
  msgstr ""
188
 
189
+ #: lib\action.php:70
190
  msgid "invalid hash parameter!"
191
  msgstr ""
192
 
193
+ #: lib\action.php:74
194
  msgid "Nothing to do"
195
  msgstr ""
196
 
197
+ #: lib\action.php:94
198
  msgid "An error occurred during delete of"
199
  msgstr ""
200
 
201
+ #: lib\action.php:99 lib\action.php:110 lib\action.php:113 lib\action.php:116
202
  msgid "Error"
203
  msgstr ""
204
 
205
+ #: lib\action.php:103
206
  #, php-format
207
  msgid "%d records deleted!"
208
  msgstr ""
209
 
210
+ #: lib\action.php:149
211
  msgid "ERROR: bad date parameter"
212
  msgstr ""
213
 
214
+ #: lib\action.php:202
215
  msgid "Error: Nothing to do!"
216
  msgstr ""
217
 
218
+ #: lib\akismet.class.php:121
219
  msgid "Timed out waiting for server response."
220
  msgstr ""
221
 
222
+ #: lib\akismet.class.php:123 lib\akismet.class.php:126
223
  msgid "The response could not be retrieved."
224
  msgstr ""
225
 
226
+ #: lib\akismet.class.php:133
227
  msgid "Could not connect to Akismet server."
228
  msgstr ""
229
 
230
+ #: lib\akismet.class.php:187
231
  msgid "Your Akismet API key is not valid."
232
  msgstr ""
233
 
234
+ #: lib\compatibility.php:78
235
  msgid "Sorry, WassUp requires WordPress 2.2 or higher to work"
236
  msgstr ""
237
 
239
  msgid "WARNING! WassUp's backward compatibility modules are missing."
240
  msgstr ""
241
 
242
+ #: lib\compatibility.php:86 lib\compatibility.php:95
243
  #, php-format
244
  msgid ""
245
  "Download and install the full version of Wassup with compatibility library "
246
  "included directly from %s."
247
  msgstr ""
248
 
249
+ #: lib\compatibility.php:91
250
+ msgid ""
251
+ "Sorry, WassUp requires WordPress 3.1 or higher to work in multisite setups"
252
+ msgstr ""
253
+
254
+ #: lib\compatibility.php:94
255
  msgid "WARNING! WassUp's PHP compatibility module is missing."
256
  msgstr ""
257
 
258
+ #: lib\main.php:56 lib\settings.php:316 lib\settings.php:370
259
+ #: lib\settings.php:1004 lib\settings.php:1020 lib\settings.php:1081
260
+ #: lib\settings.php:1101
261
  msgid "Next"
262
  msgstr ""
263
 
264
+ #: lib\main.php:58
265
  msgid "Previous"
266
  msgstr ""
267
 
268
+ #: lib\main.php:112
269
  #, php-format
270
  msgid "You must specify the %s"
271
  msgstr ""
272
 
273
+ #: lib\main.php:112
274
  msgid "number of pages"
275
  msgstr ""
276
 
277
+ #: lib\main.php:116
278
  #, php-format
279
  msgid "You must specify the %s to show per page"
280
  msgstr ""
281
 
282
+ #: lib\main.php:116
283
  msgid "limit of items"
284
  msgstr ""
285
 
286
+ #: lib\main.php:165
287
  msgid "Pages"
288
  msgstr ""
289
 
290
+ #: lib\main.php:406
291
  msgid "Raw data"
292
  msgstr ""
293
 
294
+ #: lib\main.php:407
295
  msgid "Visitor type"
296
  msgstr ""
297
 
298
+ #: lib\main.php:419 widgets\widget_functions.php:210
299
  msgid "Logged-in user"
300
  msgstr ""
301
 
302
+ #: lib\main.php:421
303
  msgid "Spammer/Hacker"
304
  msgstr ""
305
 
306
+ #: lib\main.php:423 lib\main.php:588
307
  msgid "Spammer"
308
  msgstr ""
309
 
310
+ #: lib\main.php:425 lib\main.php:608 widgets\widget_functions.php:220
311
  msgid "Comment author"
312
  msgstr ""
313
 
314
+ #: lib\main.php:427 lib\main.php:478 lib\main.php:480
315
  msgid "Feed"
316
  msgstr ""
317
 
318
+ #: lib\main.php:429 lib\main.php:483 lib\main.php:595 lib\wassup.class.php:478
319
+ #: lib\wassup.class.php:534 lib\compat-lib\compat_php.php:491
320
+ #: lib\compat-lib\compat_php.php:547
321
  msgid "Spider"
322
  msgstr ""
323
 
324
+ #: lib\main.php:431 lib\main.php:567 widgets\widget_functions.php:230
325
  msgid "Regular visitor"
326
  msgstr ""
327
 
328
+ #: lib\main.php:434
329
  msgid "IP"
330
  msgstr ""
331
 
332
+ #: lib\main.php:435 lib\wassupadmin.php:1776
333
  msgid "Hostname"
334
  msgstr ""
335
 
336
+ #: lib\main.php:436
337
  msgid "Url Requested"
338
  msgstr ""
339
 
340
+ #: lib\main.php:443
341
  msgid "Post/page ID"
342
  msgstr ""
343
 
344
+ #: lib\main.php:447
345
  msgid "none or deleted post"
346
  msgstr ""
347
 
348
+ #: lib\main.php:449 lib\compat-lib\compat_widget.php:102 widgets\widgets.php:98
349
+ #: widgets\widgets.php:229 widgets\widgets.php:403
350
  msgid "Title"
351
  msgstr ""
352
 
353
+ #: lib\main.php:451 lib\wassupadmin.php:1768 lib\wassupadmin.php:2119
354
+ #: lib\compat-lib\compat_php.php:2623
355
  msgid "Referrer"
356
  msgstr ""
357
 
358
+ #: lib\main.php:454
359
  msgid "Search Engine"
360
  msgstr ""
361
 
362
+ #: lib\main.php:455 lib\wassupadmin.php:208 lib\wassupadmin.php:211
363
+ #: lib\wassupadmin.php:1569 lib\wassupadmin.php:1601
364
  msgid "Search"
365
  msgstr ""
366
 
367
+ #: lib\main.php:456
368
  msgid "Page"
369
  msgstr ""
370
 
371
+ #: lib\main.php:458 lib\wassupadmin.php:1845
372
  msgid "User Agent"
373
  msgstr ""
374
 
375
+ #: lib\main.php:461
376
  msgid "Browser"
377
  msgstr ""
378
 
379
+ #: lib\main.php:463 lib\wassupadmin.php:1866
380
  msgid "OS"
381
  msgstr ""
382
 
383
+ #: lib\main.php:464
384
  msgid "Locale/Language"
385
  msgstr ""
386
 
387
+ #: lib\main.php:465
388
  msgid "Screen Resolution"
389
  msgstr ""
390
 
391
+ #: lib\main.php:468
392
  msgid "Username"
393
  msgstr ""
394
 
395
+ #: lib\main.php:472
396
  msgid "Comment Author"
397
  msgstr ""
398
 
399
+ #: lib\main.php:486 lib\wassup.class.php:480 lib\wassup.class.php:535
400
+ #: lib\wassupadmin.php:1830 lib\compat-lib\compat_php.php:493
401
+ #: lib\compat-lib\compat_php.php:548
402
  msgid "Spam"
403
  msgstr ""
404
 
405
+ #: lib\main.php:487
406
  msgid "comment spam"
407
  msgstr ""
408
 
409
+ #: lib\main.php:488
410
  msgid "referrer spam"
411
  msgstr ""
412
 
413
+ #: lib\main.php:489
414
  msgid "hack/malware attempt"
415
  msgstr ""
416
 
417
+ #: lib\main.php:490
418
  msgid "not spam"
419
  msgstr ""
420
 
421
+ #: lib\main.php:494
422
  msgid "End timestamp"
423
  msgstr ""
424
 
425
+ #: lib\main.php:495
426
  msgid "Timestamp"
427
  msgstr ""
428
 
429
+ #: lib\main.php:503 lib\main.php:581 lib\main.php:730 lib\main.php:732
430
+ #: lib\main.php:741 lib\main.php:743 lib\settings.php:531 lib\settings.php:535
431
+ #: lib\settings.php:613 lib\settings.php:631 lib\settings.php:642
432
+ #: lib\settings.php:699 lib\settings.php:709 lib\settings.php:725
433
+ #: lib\settings.php:728 lib\settings.php:840 lib\settings.php:849
434
+ #: lib\settings.php:857 lib\settings.php:874 lib\settings.php:909
435
+ #: lib\settings.php:919 lib\settings.php:927 lib\settings.php:937
436
+ #: lib\settings.php:943 lib\settings.php:969 lib\settings.php:974
437
+ #: lib\wassupadmin.php:1055 lib\wassupadmin.php:1661
438
  msgid "unknown"
439
  msgstr ""
440
 
441
+ #: lib\main.php:507
442
  #, php-format
443
  msgid "%d URLs visited in session"
444
  msgstr ""
445
 
446
+ #: lib\main.php:568 lib\wassupadmin.php:1064
447
  msgid "Direct hit"
448
  msgstr ""
449
 
450
+ #: lib\main.php:590
451
  msgid "Spam/Malware"
452
  msgstr ""
453
 
454
+ #: lib\main.php:594
455
  msgid "Feedreader"
456
  msgstr ""
457
 
458
+ #: lib\main.php:603 lib\main.php:652 lib\main.php:653
459
  msgid "Logged user"
460
  msgstr ""
461
 
462
+ #: lib\main.php:632 lib\main.php:633
463
  msgid "Country"
464
  msgstr ""
465
 
466
+ #: lib\main.php:643 lib\settings.php:553 lib\wassupadmin.php:1859
467
  msgid "Language"
468
  msgstr ""
469
 
470
+ #: lib\main.php:656
471
  msgid "Country:"
472
  msgstr ""
473
 
474
+ #: lib\main.php:656
475
  msgid "URL Request:"
476
  msgstr ""
477
 
478
+ #: lib\main.php:699
479
  msgid "No visitor activity"
480
  msgstr ""
481
 
482
+ #: lib\main.php:726 lib\main.php:730 lib\main.php:732 lib\main.php:737
483
+ #: lib\main.php:741 lib\main.php:743
484
  #, php-format
485
  msgid "City: %s"
486
  msgstr ""
487
 
488
+ #: lib\main.php:746
489
  msgid "Country: unknown, City: unknown"
490
  msgstr ""
491
 
492
+ #: lib\main.php:1017
493
  msgid "Print"
494
  msgstr ""
495
 
496
+ #: lib\main.php:1019
497
  #, php-format
498
  msgid "Top Stats for Period: %s"
499
  msgstr ""
500
 
501
+ #: lib\main.php:1054
502
  msgid "TOP QUERY"
503
  msgstr ""
504
 
505
+ #: lib\main.php:1062 lib\wassupadmin.php:1797
506
  msgid "not provided"
507
  msgstr ""
508
 
509
+ #: lib\main.php:1090
510
  msgid "TOP REFERRER"
511
  msgstr ""
512
 
513
+ #: lib\main.php:1129
514
  msgid "TOP REQUEST"
515
  msgstr ""
516
 
517
+ #: lib\main.php:1168
518
  msgid "TOP BROWSER"
519
  msgstr ""
520
 
521
+ #: lib\main.php:1201
522
  msgid "TOP OS"
523
  msgstr ""
524
 
525
+ #: lib\main.php:1233
526
  msgid "TOP LOCALE"
527
  msgstr ""
528
 
529
+ #: lib\main.php:1267
530
  msgid "TOP VISITOR"
531
  msgstr ""
532
 
533
+ #: lib\main.php:1305
534
  msgid "TOP ARTICLE"
535
  msgstr ""
536
 
537
+ #: lib\main.php:1328
538
  msgid "This report excludes spam and spider records"
539
  msgstr ""
540
 
541
+ #: lib\main.php:1330
542
  msgid "This report excludes spider records"
543
  msgstr ""
544
 
545
+ #: lib\main.php:1332
546
  msgid "This report excludes spam records"
547
  msgstr ""
548
 
549
+ #: lib\main.php:1778
550
  msgid "Last 1 Hour"
551
  msgstr ""
552
 
553
+ #: lib\main.php:1787
554
  msgid "Last 6 Hours"
555
  msgstr ""
556
 
557
+ #: lib\main.php:1796
558
  msgid "Last 12 Hours"
559
  msgstr ""
560
 
561
+ #: lib\main.php:1805
562
  msgid "Last 7 Days"
563
  msgstr ""
564
 
565
+ #: lib\main.php:1819
566
  msgid "Last 2 Weeks"
567
  msgstr ""
568
 
569
+ #: lib\main.php:1838
570
  msgid "Last Month"
571
  msgstr ""
572
 
573
+ #: lib\main.php:1852
574
  msgid "Last 3 Months"
575
  msgstr ""
576
 
577
+ #: lib\main.php:1866
578
  msgid "Last 6 Months"
579
  msgstr ""
580
 
581
+ #: lib\main.php:1874
582
  msgid "Last Year"
583
  msgstr ""
584
 
585
+ #: lib\main.php:1882 lib\main.php:1898
586
  msgid "All Time"
587
  msgstr ""
588
 
589
+ #: lib\main.php:1889
590
  msgid "Last 24 Hours"
591
  msgstr ""
592
 
593
+ #: lib\settings.php:84
594
  msgid ""
595
  "ATTENTION! Your WassUp table have reached the maximum value you set, I "
596
  "disabled the alert, you can re-enable it here."
597
  msgstr ""
598
 
599
+ #: lib\settings.php:105
600
  msgid "IMPORTANT"
601
  msgstr ""
602
 
603
+ #: lib\settings.php:105
604
  msgid "table empty or does not exist!"
605
  msgstr ""
606
 
607
+ #: lib\settings.php:107
608
  msgid "Visitors Online or Top Stats"
609
  msgstr ""
610
 
611
+ #: lib\settings.php:108
612
  msgid "Widgets menu"
613
  msgstr ""
614
 
615
+ #: lib\settings.php:110
616
  #, php-format
617
  msgid ""
618
  "You can add a sidebar Widget with some useful statistics information by "
619
  "activating the %s widget from the %s."
620
  msgstr ""
621
 
622
+ #: lib\settings.php:111
623
  msgid "Select the options you want for WassUp plugin"
624
  msgstr ""
625
 
626
+ #: lib\settings.php:148 lib\settings.php:1028 lib\settings.php:1034
627
+ #: lib\settings.php:1037 lib\settings.php:1041 lib\settings.php:1043
628
+ #: lib\settings.php:1044 lib\settings.php:1047 lib\settings.php:1048
629
+ #: lib\settings.php:1066 lib\settings.php:1070
630
  msgid "General Setup"
631
  msgstr ""
632
 
633
+ #: lib\settings.php:149 lib\settings.php:1039 lib\settings.php:1062
634
  msgid "Filters & Exclusions"
635
  msgstr ""
636
 
637
+ #: lib\settings.php:150
638
  msgid "Manage Files & Data"
639
  msgstr ""
640
 
641
+ #: lib\settings.php:153 lib\settings.php:1076 lib\settings.php:1077
642
  msgid "Uninstall"
643
  msgstr ""
644
 
645
+ #: lib\settings.php:158 lib\wassupadmin.php:554 lib\wassupadmin.php:900
646
  msgid "Donate"
647
  msgstr ""
648
 
649
+ #: lib\settings.php:165
650
  msgid "Networkwide Settings"
651
  msgstr ""
652
 
653
+ #: lib\settings.php:166
654
  msgid "Multisite settings that applies to all subsites in the network."
655
  msgstr ""
656
 
657
+ #: lib\settings.php:168
658
  msgid "Network Statistics Recording"
659
  msgstr ""
660
 
661
+ #: lib\settings.php:169
662
  msgid ""
663
  "Enables Wassup visitor tracking on all subsites in network. Do NOT disable "
664
  "unless upgrading plugin."
665
  msgstr ""
666
 
667
+ #: lib\settings.php:170
668
  msgid "Enable Statistics Recording for network."
669
  msgstr ""
670
 
671
+ #: lib\settings.php:171
672
  msgid ""
673
  "Can be overridden on individual subsites to disable statistics recording."
674
  msgstr ""
675
 
676
+ #: lib\settings.php:173
677
  msgid "Network Subsites Options"
678
  msgstr ""
679
 
680
+ #: lib\settings.php:174
681
  msgid "Show Wassup's Main menu and options panel to subsite administrators."
682
  msgstr ""
683
 
684
+ #: lib\settings.php:175
685
  msgid ""
686
  "Uncheck to hide Wassup Main menu and options panel from all users except "
687
  "Network administrator (super-admin). Dashboard submenu \"Wassup-stats\" and "
688
  "dashboard widget display are unaffected."
689
  msgstr ""
690
 
691
+ #: lib\settings.php:178
692
  msgid "Site Settings"
693
  msgstr ""
694
 
695
+ #: lib\settings.php:179
696
  msgid "Main site settings / Default settings for new network subsites."
697
  msgstr ""
698
 
699
+ #: lib\settings.php:182
700
  msgid "Statistics Recording"
701
  msgstr ""
702
 
703
+ #: lib\settings.php:183
704
  msgid ""
705
  "By default, Wassup collects and stores incoming visitor hits and checks each "
706
  "new record for spam and malware activity."
707
  msgstr ""
708
 
709
+ #: lib\settings.php:184
710
  msgid "Enable statistics recording"
711
  msgstr ""
712
 
713
+ #: lib\settings.php:186
714
  msgid "Do NOT disable unless upgrading or troubleshooting plugin problems."
715
  msgstr ""
716
 
717
+ #: lib\settings.php:187
718
  msgid "Do NOT disable unless troubleshooting plugin problems."
719
  msgstr ""
720
 
721
+ #: lib\settings.php:190
722
  msgid "Enable spam and malware detection on new records"
723
  msgstr ""
724
 
725
+ #: lib\settings.php:191
726
  msgid ""
727
  "For identification of incoming spam/malware hits only. Does NOT stop attacks "
728
  "nor protect your site."
729
  msgstr ""
730
 
731
+ #: lib\settings.php:195
732
  msgid "User Permissions"
733
  msgstr ""
734
 
735
+ #: lib\settings.php:196
736
  msgid ""
737
  "Gives selected users read-only access to Wassup-stats dashboard submenu "
738
  "panels and the ability to view the dashboard widget."
739
  msgstr ""
740
 
741
+ #: lib\settings.php:197
742
  msgid ""
743
  "Only administrators have full access to Wassup main admin menu and Wassup-"
744
  "options panels to delete data and edit plugin settings."
745
  msgstr ""
746
 
747
+ #: lib\settings.php:198
748
  msgid "Set minimum user level that can view WassUp stats"
749
  msgstr ""
750
 
751
+ #: lib\settings.php:202
752
  msgid "default administrator"
753
  msgstr ""
754
 
755
+ #: lib\settings.php:207
756
  msgid "Screen resolution"
757
  msgstr ""
758
 
759
+ #: lib\settings.php:208
760
  msgid ""
761
  "Adjusts chart size and resets the max-width/truncation point of long texts."
762
  msgstr ""
763
 
764
+ #: lib\settings.php:209
765
  msgid "Your default screen resolution (in pixels)"
766
  msgstr ""
767
 
768
+ #: lib\settings.php:214
769
  msgid "Dashboard Widget"
770
  msgstr ""
771
 
772
+ #: lib\settings.php:215
773
  msgid "Enable widget/small chart in admin dashboard"
774
  msgstr ""
775
 
776
+ #: lib\settings.php:217
777
  msgid "Spy Visitors Settings"
778
  msgstr ""
779
 
780
+ #: lib\settings.php:232
781
  msgid "Display a GEO IP Map in the spy visitors view"
782
  msgstr ""
783
 
784
+ #: lib\settings.php:233
785
  msgid "key"
786
  msgstr ""
787
 
788
+ #: lib\settings.php:233
789
  msgid "signup for your key"
790
  msgstr ""
791
 
792
+ #: lib\settings.php:234
793
  msgid ""
794
  "Use your own key to avoid map denial when Wassup API total usage exceeds "
795
  "Google!Maps limits."
796
  msgstr ""
797
 
798
+ #: lib\settings.php:240
799
  msgid "Visitor Detail Settings"
800
  msgstr ""
801
 
802
+ #: lib\settings.php:241
803
  msgid "Show visitor details from the last"
804
  msgstr ""
805
 
806
+ #: lib\settings.php:246
807
  msgid "Time format 12/24 Hour"
808
  msgstr ""
809
 
810
+ #: lib\settings.php:250
811
  msgid "Filter visitor details for"
812
  msgstr ""
813
 
814
+ #: lib\settings.php:255
815
  msgid "Display line chart in detail view"
816
  msgstr ""
817
 
818
+ #: lib\settings.php:256
819
  msgid "Line chart type - how many axes?"
820
  msgstr ""
821
 
822
+ #: lib\settings.php:257
823
  msgid "Set how many minutes wait for automatic page refresh"
824
  msgstr ""
825
 
826
+ #: lib\settings.php:258 lib\settings.php:962 widgets\widgets.php:459
827
  msgid "minutes"
828
  msgstr ""
829
 
830
+ #: lib\settings.php:259
831
  msgid "default 3, 0=no refresh"
832
  msgstr ""
833
 
834
+ #: lib\settings.php:261
835
  msgid "Number of items per page"
836
  msgstr ""
837
 
838
+ #: lib\settings.php:266
839
  msgid "Top Stats Lists"
840
  msgstr ""
841
 
842
+ #: lib\settings.php:267
843
  msgid "Customize Top stats by selected criteria below."
844
  msgstr ""
845
 
846
+ #: lib\settings.php:267
847
  msgid ""
848
  "Stats are in descending order from highest count and known spam and malware "
849
  "attempts are excluded from counts."
850
  msgstr ""
851
 
852
+ #: lib\settings.php:274
853
  msgid "List limit of top items"
854
  msgstr ""
855
 
856
+ #: lib\settings.php:276
857
  msgid "default 10"
858
  msgstr ""
859
 
860
+ #: lib\settings.php:278
861
  msgid "Choose one or more items to list in Top Stats"
862
  msgstr ""
863
 
864
+ #: lib\settings.php:278
865
  msgid "over 5 selections may cause horizontal scrolling"
866
  msgstr ""
867
 
868
+ #: lib\settings.php:281
869
  msgid "Top Searches"
870
  msgstr ""
871
 
872
+ #: lib\settings.php:282
873
  msgid "Top Referrers"
874
  msgstr ""
875
 
876
+ #: lib\settings.php:283
877
  msgid "Top Articles"
878
  msgstr ""
879
 
880
+ #: lib\settings.php:286
881
  msgid "Top Requests"
882
  msgstr ""
883
 
884
+ #: lib\settings.php:287
885
  msgid "Top Browsers"
886
  msgstr ""
887
 
888
+ #: lib\settings.php:288
889
  msgid "Top OS"
890
  msgstr ""
891
 
892
+ #: lib\settings.php:291
893
  msgid "Top Locales"
894
  msgstr ""
895
 
896
+ #: lib\settings.php:292
897
  msgid "Top Visitors"
898
  msgstr ""
899
 
900
+ #: lib\settings.php:297
901
  msgid "Exclude the following website domains from Top Referrers"
902
  msgstr ""
903
 
904
+ #: lib\settings.php:297 lib\settings.php:305
905
  msgid "applies to top stats view and widgets"
906
  msgstr ""
907
 
908
+ #: lib\settings.php:300
909
  msgid "comma separated value"
910
  msgstr ""
911
 
912
+ #: lib\settings.php:300
913
  msgid "List whole domains only. Wildcards and partial domains will be ignored."
914
  msgstr ""
915
 
916
+ #: lib\settings.php:301
917
  msgid "Don't list your website domain defined in WordPress"
918
  msgstr ""
919
 
920
+ #: lib\settings.php:305
921
  msgid "Exclude site front page from Top Articles"
922
  msgstr ""
923
 
924
+ #: lib\settings.php:312
925
  msgid "Exclude all spider records from Top Stats"
926
  msgstr ""
927
 
928
+ #: lib\settings.php:315 lib\settings.php:369 lib\settings.php:520
929
+ #: lib\settings.php:1019 lib\wassupadmin.php:1537
930
  msgid "Save Settings"
931
  msgstr ""
932
 
933
+ #: lib\settings.php:315 lib\settings.php:369 lib\settings.php:520
934
+ #: lib\settings.php:1019
935
  msgid "Reset"
936
  msgstr ""
937
 
938
+ #: lib\settings.php:315 lib\settings.php:369 lib\settings.php:520
939
+ #: lib\settings.php:1019
940
  msgid "Reset to Default"
941
  msgstr ""
942
 
943
+ #: lib\settings.php:316 lib\settings.php:370 lib\settings.php:1004
944
+ #: lib\settings.php:1020 lib\settings.php:1081 lib\settings.php:1101
945
+ #: lib\wassupadmin.php:981 widgets\widgets.php:577
946
+ #: widgets\widget_functions.php:396
947
  msgid "Top"
948
  msgstr ""
949
 
950
+ #: lib\settings.php:320
951
  msgid "Recording Filters and Exclusions"
952
  msgstr ""
953
 
954
+ #: lib\settings.php:321
955
  msgid ""
956
  "Use the filter checkboxes and exclusion input fields below to customize "
957
  "Wassup's statistics recording so that only the data that you need for your "
958
  "site analyses are stored."
959
  msgstr ""
960
 
961
+ #: lib\settings.php:323
962
  msgid "Visitor Type Filters:"
963
  msgstr ""
964
 
965
+ #: lib\settings.php:324
966
  msgid "Checkbox to enable recording by type of \"visitor\""
967
  msgstr ""
968
 
969
+ #: lib\settings.php:326
970
  msgid "Record regular visitors"
971
  msgstr ""
972
 
973
+ #: lib\settings.php:327
974
  msgid "Record logged in users"
975
  msgstr ""
976
 
977
+ #: lib\settings.php:328
978
  msgid "Record logged in administrators"
979
  msgstr ""
980
 
981
+ #: lib\settings.php:329
982
  msgid "Record spiders and bots"
983
  msgstr ""
984
 
985
+ #: lib\settings.php:332
986
  msgid "Spam and Malware Filters:"
987
  msgstr ""
988
 
989
+ #: lib\settings.php:333
990
  msgid "Checkbox to enable recording of each type of \"spam\""
991
  msgstr ""
992
 
993
+ #: lib\settings.php:335 lib\wassupadmin.php:1533
994
  msgid "Record Akismet comment spam attempts"
995
  msgstr ""
996
 
997
+ #: lib\settings.php:335
998
  msgid "checks IP for previous spam comments"
999
  msgstr ""
1000
 
1001
+ #: lib\settings.php:336 lib\wassupadmin.php:1534
1002
  msgid "Record referrer spam attempts"
1003
  msgstr ""
1004
 
1005
+ #: lib\settings.php:337 lib\wassupadmin.php:1536
1006
  msgid "Record admin break-in/hacker attempts"
1007
  msgstr ""
1008
 
1009
+ #: lib\settings.php:338
1010
+ msgid "Record attack/exploit attempts"
1011
  msgstr ""
1012
 
1013
+ #: lib\settings.php:338
1014
+ msgid "or"
1015
+ msgstr ""
1016
+
1017
+ #: lib\settings.php:341
1018
  msgid "Recording Exceptions"
1019
  msgstr ""
1020
 
1021
+ #: lib\settings.php:342
1022
  msgid ""
1023
  "You can exclude a single visitor (by IP, hostname or username) or you can "
1024
  "exclude a specific URL request from being stored in WassUp records."
1025
  msgstr ""
1026
 
1027
+ #: lib\settings.php:343
1028
  msgid ""
1029
  "Note that recording exceptions lower overall statistics counts and excessive "
1030
  "exclusions can affect page load speed on slow host servers."
1031
  msgstr ""
1032
 
1033
+ #: lib\settings.php:345
1034
  msgid "Exclude by IP"
1035
  msgstr ""
1036
 
1037
+ #: lib\settings.php:346
1038
  msgid "Enter source IPs to omit from recording"
1039
  msgstr ""
1040
 
1041
+ #: lib\settings.php:349
1042
  msgid "comma separated value (ex: 127.0.0.1, 10.0.0.1, etc...)."
1043
  msgstr ""
1044
 
1045
+ #: lib\settings.php:349
1046
  msgid ""
1047
  "A single wildcard (*) can be placed after the last '.' in the IP ('::' in "
1048
  "IPv6) for range exclusions (ex: 10.10.100.*, 192.168.*)."
1049
  msgstr ""
1050
 
1051
+ #: lib\settings.php:351
1052
  msgid "Exclude by Hostname"
1053
  msgstr ""
1054
 
1055
+ #: lib\settings.php:352
1056
  msgid "Enter source hostnames to omit from recording"
1057
  msgstr ""
1058
 
1059
+ #: lib\settings.php:355
1060
  msgid "comma separated value (ex: host1.domain.com, host2.domain.net, etc...)."
1061
  msgstr ""
1062
 
1063
+ #: lib\settings.php:355
1064
  msgid ""
1065
  "A single wildcard (*) can be placed before the first '.' for domain network "
1066
  "exclusions (ex: *.spamdomain.com, *.hackers.malware.net)."
1067
  msgstr ""
1068
 
1069
+ #: lib\settings.php:357
1070
  msgid "Exclude by Username"
1071
  msgstr ""
1072
 
1073
+ #: lib\settings.php:358
1074
  msgid "Enter usernames to omit from recording"
1075
  msgstr ""
1076
 
1077
+ #: lib\settings.php:361
1078
  msgid ""
1079
  "comma separated value, enter a registered user's login name (ex: bobmarley, "
1080
  "enyabrennan, etc.)"
1081
  msgstr ""
1082
 
1083
+ #: lib\settings.php:363
1084
  msgid "Exclude by URL request"
1085
  msgstr ""
1086
 
1087
+ #: lib\settings.php:364
1088
  msgid "Enter URLs of page/post/feed to omit from recording"
1089
  msgstr ""
1090
 
1091
+ #: lib\settings.php:367
1092
  msgid ""
1093
  "comma separated value, don't enter entire url, only the last path or some "
1094
  "word to exclude (ex: /category/wordpress, 2007, etc...)"
1095
  msgstr ""
1096
 
1097
+ #: lib\settings.php:370 lib\settings.php:1004 lib\settings.php:1020
1098
+ #: lib\settings.php:1081 lib\settings.php:1101
1099
  msgid "Prev"
1100
  msgstr ""
1101
 
1102
+ #: lib\settings.php:374
1103
  msgid "Table Management Options"
1104
  msgstr ""
1105
 
1106
+ #: lib\settings.php:381
1107
  msgid "Select actions for table growth"
1108
  msgstr ""
1109
 
1110
+ #: lib\settings.php:382
1111
  msgid ""
1112
  "WassUp table grows very fast, especially if your site is frequently visited. "
1113
  "I recommend you delete old records sometimes."
1114
  msgstr ""
1115
 
1116
+ #: lib\settings.php:383
1117
  msgid ""
1118
  "You can delete all Wassup records now (Empty Table), you can set an "
1119
  "automatic delete option to delete selected old records daily, and you can "
1120
  "manually delete selected old records once (Delete NOW)."
1121
  msgstr ""
1122
 
1123
+ #: lib\settings.php:384
1124
  msgid "If you haven't database space problems, you can leave the table as is."
1125
  msgstr ""
1126
 
1127
+ #: lib\settings.php:385
1128
  msgid "Current WassUp table usage is"
1129
  msgstr ""
1130
 
1131
+ #: lib\settings.php:388
1132
  msgid "records"
1133
  msgstr ""
1134
 
1135
+ #: lib\settings.php:391
1136
  msgid "Alert me"
1137
  msgstr ""
1138
 
1139
+ #: lib\settings.php:391
1140
  msgid "email to"
1141
  msgstr ""
1142
 
1143
+ #: lib\settings.php:391
1144
  msgid "when table reaches"
1145
  msgstr ""
1146
 
1147
+ #: lib\settings.php:392
1148
  msgid "Delete old records"
1149
  msgstr ""
1150
 
1151
+ #: lib\settings.php:396
1152
  #, php-format
1153
  msgid ""
1154
  "Before deleting, you can save Wassup data in SQL 'export' format onto your "
1155
  "local computer by clicking %s below."
1156
  msgstr ""
1157
 
1158
+ #: lib\settings.php:396
1159
  msgid "export table"
1160
  msgstr ""
1161
 
1162
+ #: lib\settings.php:397
1163
  msgid "Reload this screen after export to view export messages."
1164
  msgstr ""
1165
 
1166
+ #: lib\settings.php:398
1167
  msgid "Automatically delete"
1168
  msgstr ""
1169
 
1170
+ #: lib\settings.php:400 lib\settings.php:405
1171
  msgid "records older than"
1172
  msgstr ""
1173
 
1174
+ #: lib\settings.php:401
1175
  msgid "daily"
1176
  msgstr ""
1177
 
1178
+ #: lib\settings.php:403
1179
  msgid "Manually delete"
1180
  msgstr ""
1181
 
1182
+ #: lib\settings.php:406
1183
  msgid "once"
1184
  msgstr ""
1185
 
1186
+ #: lib\settings.php:412
1187
  msgid "Delete all records up to record ID#"
1188
  msgstr ""
1189
 
1190
+ #: lib\settings.php:413
1191
  msgid "Last exported record ID#:"
1192
  msgstr ""
1193
 
1194
+ #: lib\settings.php:415
1195
  msgid "Empty table"
1196
  msgstr ""
1197
 
1198
+ #: lib\settings.php:416
1199
  msgid "export table in SQL format"
1200
  msgstr ""
1201
 
1202
+ #: lib\settings.php:419
1203
  msgid "Delete NOW"
1204
  msgstr ""
1205
 
1206
+ #: lib\settings.php:419
1207
  msgid "Action is NOT undoable!"
1208
  msgstr ""
1209
 
1210
+ #: lib\settings.php:422
1211
  msgid "Table Export Options"
1212
  msgstr ""
1213
 
1214
+ #: lib\settings.php:424
1215
  msgid ""
1216
  "By default, known spam/malware records are omitted from Wassup's export data "
1217
  "to reduce the risk of malware code becoming active and causing damage when "
1218
  "records are imported into other applications."
1219
  msgstr ""
1220
 
1221
+ #: lib\settings.php:425
1222
  msgid "Include spam records in exported data"
1223
  msgstr ""
1224
 
1225
+ #: lib\settings.php:426
1226
  msgid ""
1227
  "Security NOTICE: Wassup is not configured to identify spam/malware, so all "
1228
  "records are exported, including spam."
1229
  msgstr ""
1230
 
1231
+ #: lib\settings.php:427
1232
  msgid ""
1233
  "Security NOTICE: Enabling this could expose your computer or website to "
1234
  "malware when spam records are imported."
1235
  msgstr ""
1236
 
1237
+ #: lib\settings.php:428
1238
  msgid "Omit record ID from exported fields"
1239
  msgstr ""
1240
 
1241
+ #: lib\settings.php:429
1242
  msgid ""
1243
  "Check this box when importing data into another Wassup table that already "
1244
  "has records (appending data)."
1245
  msgstr ""
1246
 
1247
+ #: lib\settings.php:431
1248
  msgid "Table Optimization"
1249
  msgstr ""
1250
 
1251
+ #: lib\settings.php:436
1252
  msgid ""
1253
  "By default, WassUp tables are automatically optimized weekly and after each "
1254
  "bulk deletion. This helps keep WassUp running fast, but it can sometimes "
1255
  "cause slowdowns especially when there is a corrupt record in the table."
1256
  msgstr ""
1257
 
1258
+ #: lib\settings.php:445
1259
  msgid "You can cancel automatic optimization by unchecking the box below."
1260
  msgstr ""
1261
 
1262
+ #: lib\settings.php:447
1263
  msgid "Login as network admin to cancel automatic optimization below."
1264
  msgstr ""
1265
 
1266
+ #: lib\settings.php:448
1267
  msgid "Login as network admin to enable automatic optimization below."
1268
  msgstr ""
1269
 
1270
+ #: lib\settings.php:450
1271
  msgid "Your table engine does NOT support the \"optimize\" command."
1272
  msgstr ""
1273
 
1274
+ #: lib\settings.php:460
1275
  msgid "Enable automatic table optimization"
1276
  msgstr ""
1277
 
1278
+ #: lib\settings.php:468
1279
  msgid "is overdue"
1280
  msgstr ""
1281
 
1282
+ #: lib\settings.php:470
1283
  msgid "today"
1284
  msgstr ""
1285
 
1286
+ #: lib\settings.php:473
1287
  #, php-format
1288
  msgid "%d days"
1289
  msgstr ""
1290
 
1291
+ #: lib\settings.php:474
1292
  msgid "1 week"
1293
  msgstr ""
1294
 
1295
+ #: lib\settings.php:480
1296
  #, php-format
1297
  msgid "Next scheduled optimization is: %s (approximately)"
1298
  msgstr ""
1299
 
1300
+ #: lib\settings.php:482
1301
  #, php-format
1302
  msgid "Next scheduled optimization is: %s"
1303
  msgstr ""
1304
 
1305
+ #: lib\settings.php:482
1306
  msgid "never"
1307
  msgstr ""
1308
 
1309
+ #: lib\settings.php:486
1310
  msgid "Data Storage Methods"
1311
  msgstr ""
1312
 
1313
+ #: lib\settings.php:489
1314
  msgid "Delayed Insert"
1315
  msgstr ""
1316
 
1317
+ #: lib\settings.php:491
1318
  msgid ""
1319
  "When possible, WassUp uses the \"Delayed insert\" method of saving records "
1320
  "in MySQL to store new visitor records. This method helps keep Wassup running "
1323
  "disable it on shared servers."
1324
  msgstr ""
1325
 
1326
+ #: lib\settings.php:492
1327
  msgid "You can turn off \"delayed insert\" by unchecking the box below."
1328
  msgstr ""
1329
 
1330
+ #: lib\settings.php:496
1331
  msgid "This method is unavailable for your storage engine type."
1332
  msgstr ""
1333
 
1334
+ #: lib\settings.php:508
1335
  msgid "This method is disabled on your host server."
1336
  msgstr ""
1337
 
1338
+ #: lib\settings.php:517
1339
  msgid "Store new visitor records with \"delayed insert\""
1340
  msgstr ""
1341
 
1342
+ #: lib\settings.php:524
1343
  msgid "Server Settings and Memory Resources"
1344
  msgstr ""
1345
 
1346
+ #: lib\settings.php:525
1347
  #, php-format
1348
  msgid ""
1349
  "For information only. Some values may be adjustable in startup files: %s"
1350
  msgstr ""
1351
 
1352
+ #: lib\settings.php:525
1353
  msgid "\"wp_config.php\", \"php.ini\" and \"my.ini\""
1354
  msgstr ""
1355
 
1356
+ #: lib\settings.php:526 lib\settings.php:537 lib\settings.php:645
1357
+ #: lib\settings.php:840
1358
  msgid "Version"
1359
  msgstr ""
1360
 
1361
+ #: lib\settings.php:528
1362
  msgid "Table name"
1363
  msgstr ""
1364
 
1365
+ #: lib\settings.php:529
1366
  msgid "Table Charset/collation"
1367
  msgstr ""
1368
 
1369
+ #: lib\settings.php:533
1370
  msgid "Table engine"
1371
  msgstr ""
1372
 
1373
+ #: lib\settings.php:535
1374
  msgid "Upgrade date"
1375
  msgstr ""
1376
 
1377
+ #: lib\settings.php:543
1378
  msgid "network"
1379
  msgstr ""
1380
 
1381
+ #: lib\settings.php:546 lib\settings.php:559 lib\settings.php:655
1382
+ #: lib\settings.php:666 lib\settings.php:670 lib\settings.php:950
1383
  msgid "on"
1384
  msgstr ""
1385
 
1386
+ #: lib\settings.php:548 lib\settings.php:657 lib\settings.php:664
1387
+ #: lib\settings.php:671 lib\settings.php:948
1388
  msgid "off"
1389
  msgstr ""
1390
 
1391
+ #: lib\settings.php:552
1392
  msgid "Character set"
1393
  msgstr ""
1394
 
1395
+ #: lib\settings.php:556 lib\settings.php:733
1396
  msgid "not set"
1397
  msgstr ""
1398
 
1399
+ #: lib\settings.php:564 lib\settings.php:685
1400
  msgid "Memory Allocation"
1401
  msgstr ""
1402
 
1403
+ #: lib\settings.php:589
1404
  msgid "no limit/unknown"
1405
  msgstr ""
1406
 
1407
+ #: lib\settings.php:593 lib\settings.php:749 lib\settings.php:976
1408
  msgid "Timezone"
1409
  msgstr ""
1410
 
1411
+ #: lib\settings.php:594 lib\settings.php:752
1412
  msgid "Time Offset"
1413
  msgstr ""
1414
 
1415
+ #: lib\settings.php:606 lib\settings.php:755 lib\settings.php:757
1416
  msgid "hours"
1417
  msgstr ""
1418
 
1419
+ #: lib\settings.php:607
1420
  msgid "Host Timezone"
1421
  msgstr ""
1422
 
1423
+ #: lib\settings.php:615
1424
  msgid "Host Server"
1425
  msgstr ""
1426
 
1427
+ #: lib\settings.php:633
1428
  msgid "Browser Client"
1429
  msgstr ""
1430
 
1431
+ #: lib\settings.php:651
1432
  msgid "Safe Mode"
1433
  msgstr ""
1434
 
1435
+ #: lib\settings.php:661
1436
  msgid "File Open Restrictions"
1437
  msgstr ""
1438
 
1439
+ #: lib\settings.php:668
1440
  msgid "URL File Open"
1441
  msgstr ""
1442
 
1443
+ #: lib\settings.php:673
1444
  msgid "Disabled functions"
1445
  msgstr ""
1446
 
1447
+ #: lib\settings.php:680
1448
  msgid "none"
1449
  msgstr ""
1450
 
1451
+ #: lib\settings.php:682
1452
  msgid "not applicable/safe mode set"
1453
  msgstr ""
1454
 
1455
+ #: lib\settings.php:696 lib\settings.php:871
1456
  msgid "unlimited/up to server maximum"
1457
  msgstr ""
1458
 
1459
+ #: lib\settings.php:704
1460
  msgid "Memory Usage"
1461
  msgstr ""
1462
 
1463
+ #: lib\settings.php:711
1464
  msgid "Script Timeout Limit"
1465
  msgstr ""
1466
 
1467
+ #: lib\settings.php:716 lib\settings.php:717 lib\settings.php:718
1468
+ #: lib\settings.php:720 lib\settings.php:941 lib\settings.php:964
1469
  msgid "seconds"
1470
  msgstr ""
1471
 
1472
+ #: lib\settings.php:723
1473
  msgid "unlimited"
1474
  msgstr ""
1475
 
1476
+ #: lib\settings.php:731
1477
  msgid "Browser Capabilities File"
1478
  msgstr ""
1479
 
1480
+ #: lib\settings.php:737
1481
  msgid "not installed"
1482
  msgstr ""
1483
 
1484
+ #: lib\settings.php:738
1485
  msgid "installed"
1486
  msgstr ""
1487
 
1488
+ #: lib\settings.php:760
1489
  msgid "as modified in Wordpress"
1490
  msgstr ""
1491
 
1492
+ #: lib\settings.php:842
1493
  msgid "Storage Engine"
1494
  msgstr ""
1495
 
1496
+ #: lib\settings.php:851
1497
  msgid "Charset/collation"
1498
  msgstr ""
1499
 
1500
+ #: lib\settings.php:860
1501
  msgid "Max User Connections"
1502
  msgstr ""
1503
 
1504
+ #: lib\settings.php:866
1505
  msgid "possibly too small"
1506
  msgstr ""
1507
 
1508
+ #: lib\settings.php:876
1509
  msgid "Allocation"
1510
  msgstr ""
1511
 
1512
+ #: lib\settings.php:882
1513
  msgid "possibly too big, reduces available RAM."
1514
  msgstr ""
1515
 
1516
+ #: lib\settings.php:889
1517
  msgid "on demand"
1518
  msgstr ""
1519
 
1520
+ #: lib\settings.php:891
1521
  msgid "Cached Query Limit"
1522
  msgstr ""
1523
 
1524
+ #: lib\settings.php:894 lib\settings.php:897 lib\settings.php:907
1525
+ #: lib\settings.php:917 lib\settings.php:925 lib\settings.php:934
1526
+ #: lib\settings.php:955 lib\settings.php:973
1527
  msgid "disabled"
1528
  msgstr ""
1529
 
1530
+ #: lib\settings.php:939
1531
  msgid "Wait Timeout"
1532
  msgstr ""
1533
 
1534
+ #: lib\settings.php:958
1535
  msgid "rows"
1536
  msgstr ""
1537
 
1538
+ #: lib\settings.php:972
1539
  msgid "not available"
1540
  msgstr ""
1541
 
1542
+ #: lib\settings.php:999
1543
  msgid "may be different from PHP offset"
1544
  msgstr ""
1545
 
1546
+ #: lib\settings.php:1009
1547
  msgid "Want to uninstall WassUp?"
1548
  msgstr ""
1549
 
1550
+ #: lib\settings.php:1010
1551
  msgid ""
1552
  "No problem. Before you deactivate this plugin, check the box below to "
1553
  "cleanup any data that was collected by WassUp that could be left behind."
1554
  msgstr ""
1555
 
1556
+ #: lib\settings.php:1011
1557
  msgid "Permanently remove WassUp data and settings."
1558
  msgstr ""
1559
 
1560
+ #: lib\settings.php:1013
1561
  msgid "WARNING"
1562
  msgstr ""
1563
 
1564
+ #: lib\settings.php:1013
1565
  msgid ""
1566
  "All WassUp data and settings will be DELETED upon deactivation of this "
1567
  "plugin."
1568
  msgstr ""
1569
 
1570
+ #: lib\settings.php:1015
1571
  #, php-format
1572
  msgid ""
1573
  "This action cannot be undone. Before uninstalling WassUp, you should backup "
1574
  "your Wordpress database first. WassUp data is stored in the table %s."
1575
  msgstr ""
1576
 
1577
+ #: lib\settings.php:1017
1578
  #, php-format
1579
  msgid "To help improve this plugin, we would appreciate your feedback at %s."
1580
  msgstr ""
1581
 
1582
+ #: lib\settings.php:1025
1583
  msgid "Frequently Asked Questions"
1584
  msgstr ""
1585
 
1586
+ #: lib\settings.php:1027
1587
  msgid "How do I add WassUp's chart to my admin dashboard?"
1588
  msgstr ""
1589
 
1590
+ #: lib\settings.php:1028
1591
  #, php-format
1592
  msgid ""
1593
  "Check the box for \"Enable widget/small chart in admin dashboard\" under %s "
1594
  "tab."
1595
  msgstr ""
1596
 
1597
+ #: lib\settings.php:1028 lib\settings.php:1034 lib\settings.php:1037
1598
+ #: lib\settings.php:1039 lib\settings.php:1041 lib\settings.php:1043
1599
+ #: lib\settings.php:1044 lib\settings.php:1047 lib\settings.php:1048
1600
+ #: lib\settings.php:1049 lib\settings.php:1054 lib\settings.php:1060
1601
+ #: lib\settings.php:1062 lib\settings.php:1066 lib\settings.php:1070
1602
+ #: lib\settings.php:1076 lib\settings.php:1077 lib\wassupadmin.php:455
1603
  #: lib\wassupadmin.php:892
1604
  msgid "Options"
1605
  msgstr ""
1606
 
1607
+ #: lib\settings.php:1029
1608
  msgid "How do I display WassUp widgets on my site?"
1609
  msgstr ""
1610
 
1611
+ #: lib\settings.php:1030
1612
  msgid ""
1613
  "From Wordpress widgets panel, drag the \"WassUp Online\" widget or the "
1614
  "\"Wassup Top Stats\" widget from the list of available widgets on the left "
1616
  "Customizer to add Wassup widgets interactively."
1617
  msgstr ""
1618
 
1619
+ #: lib\settings.php:1031
1620
  msgid ""
1621
  "My Wordpress theme is not widget ready. Is it possible to display WassUp "
1622
  "widgets on my site?"
1623
  msgstr ""
1624
 
1625
+ #: lib\settings.php:1032
1626
  msgid ""
1627
  "Yes. Insert the template tag \"wassup_sidebar()\" into your theme's "
1628
  "\"sidebar.php\" file to display Wassup widgets as a single combined widget "
1629
  "on your site."
1630
  msgstr ""
1631
 
1632
+ #: lib\settings.php:1033
1633
  msgid "How do I view the real-time visitor geolocation map in WassUp?"
1634
  msgstr ""
1635
 
1636
+ #: lib\settings.php:1034
1637
  #, php-format
1638
  msgid ""
1639
  "Check the box for \"Display a GEO IP Map in spy visitors view\" in %s tab "
1640
  "and save, then navigate to %s panel to see the map."
1641
  msgstr ""
1642
 
1643
+ #: lib\settings.php:1034 lib\wassupadmin.php:452 lib\wassupadmin.php:539
1644
  #: lib\wassupadmin.php:889
1645
  msgid "SPY Visitors"
1646
  msgstr ""
1647
 
1648
+ #: lib\settings.php:1035
1649
  msgid ""
1650
  "The map has vanished and I get a message like: \"Google has disabled use of "
1651
  "the Maps API for this application\". How do I fix this?"
1652
  msgstr ""
1653
 
1654
+ #: lib\settings.php:1036
1655
  msgid ""
1656
  "Wassup-spy total daily map views has likely exceeded the Google!maps usage "
1657
  "limit for Wassup plugin."
1658
  msgstr ""
1659
 
1660
+ #: lib\settings.php:1037
1661
  #, php-format
1662
  msgid ""
1663
  "To fix, sign up for a free %s for your site's sole usage and enter the key "
1664
  "under \"Spy Visitors settings\" in %s tab."
1665
  msgstr ""
1666
 
1667
+ #: lib\settings.php:1037
1668
  msgid "Key"
1669
  msgstr ""
1670
 
1671
+ #: lib\settings.php:1038
1672
  msgid "How do I exclude a visitor from being recorded?"
1673
  msgstr ""
1674
 
1675
+ #: lib\settings.php:1039
1676
  #, php-format
1677
  msgid ""
1678
  "Navigate to %s tab and enter a visitor's username, IP address, or hostname "
1679
  "into the appropriate text area for that \"Recording Exclusion\" type."
1680
  msgstr ""
1681
 
1682
+ #: lib\settings.php:1040
1683
  msgid ""
1684
  "How do I stop (temporarily) WassUp from recording new visits on my site?"
1685
  msgstr ""
1686
 
1687
+ #: lib\settings.php:1041
1688
  #, php-format
1689
  msgid "Uncheck the box for \"Enable statistics recording\" under %s tab."
1690
  msgstr ""
1691
 
1692
+ #: lib\settings.php:1042
1693
  msgid ""
1694
  "In Wordpress multisite, how do I stop (temporarily) WassUp from recording "
1695
  "new visits on all sites in the network?"
1696
  msgstr ""
1697
 
1698
+ #: lib\settings.php:1043
1699
  #, php-format
1700
  msgid ""
1701
  "If plugin is \"network activated\", login as network admin, go to the "
1703
  "Statistics Recording for network\" and save."
1704
  msgstr ""
1705
 
1706
+ #: lib\settings.php:1044
1707
  #, php-format
1708
  msgid ""
1709
  "If plugin is NOT \"network activated\", login as network admin, go to the "
1711
  "the box for \"Enable Statistics Recording for network\" and save."
1712
  msgstr ""
1713
 
1714
+ #: lib\settings.php:1046
1715
  msgid ""
1716
  "No data is being displayed; or \"Visitor Details\" panel show 0 records for "
1717
  "the last 24 hours. How do I fix this?"
1718
  msgstr ""
1719
 
1720
+ #: lib\settings.php:1047
1721
  #, php-format
1722
  msgid ""
1723
  "Check the box for \"Enable statistics recording\" setting under %s tab and "
1724
  "save."
1725
  msgstr ""
1726
 
1727
+ #: lib\settings.php:1048
1728
  #, php-format
1729
  msgid "Click the [Reset to Default] button under %s tab."
1730
  msgstr ""
1731
 
1732
+ #: lib\settings.php:1049
1733
  #, php-format
1734
  msgid ""
1735
  "Navigate to %s tab and uncheck the \"MySQL Delayed Insert\" setting and save."
1736
  msgstr ""
1737
 
1738
+ #: lib\settings.php:1049 lib\settings.php:1054 lib\settings.php:1060
1739
  msgid "Manage File & Data"
1740
  msgstr ""
1741
 
1742
+ #: lib\settings.php:1050
1743
  msgid "Deactivate and Re-activate Wassup from Wordpress Plugins panel."
1744
  msgstr ""
1745
 
1746
+ #: lib\settings.php:1051
1747
  #, php-format
1748
  msgid ""
1749
  "If you have access to MySql/phpMyAdmin on your host server, run the MySql "
1751
  "table name may be different in other Wordpress setups."
1752
  msgstr ""
1753
 
1754
+ #: lib\settings.php:1052
1755
  msgid ""
1756
  "As a last resort, uninstall WassUp cleanly (delete data and files) and "
1757
  "reinstall it."
1758
  msgstr ""
1759
 
1760
+ #: lib\settings.php:1053
1761
  msgid ""
1762
  "My popular web site is hosted on a shared server with restrictive database "
1763
  "size limits. How do I prevent WassUp's table from growing too big for my "
1764
  "allocated quota?"
1765
  msgstr ""
1766
 
1767
+ #: lib\settings.php:1054
1768
  #, php-format
1769
  msgid ""
1770
  "Navigate to %s tab and enable the setting for \"Auto Delete\" of old records "
1772
  "exceeded."
1773
  msgstr ""
1774
 
1775
+ #: lib\settings.php:1055
1776
  msgid ""
1777
  "WassUp visitor counts are much lower than actual for my website. Why is "
1778
  "there a discrepancy and how do I fix it?"
1779
  msgstr ""
1780
 
1781
+ #: lib\settings.php:1056
1782
  msgid ""
1783
  "Low visitor count is likely caused by page caching on your website. WassUp "
1784
  "is incompatible with static page caching plugins such as WP Supercache, WP "
1786
  "different (javascript-based) statistics plugin."
1787
  msgstr ""
1788
 
1789
+ #: lib\settings.php:1057
1790
  msgid "Is there any caching plugin that works with WassUp?"
1791
  msgstr ""
1792
 
1793
+ #: lib\settings.php:1058
1794
  #, php-format
1795
  msgid "%s is the only caching plugin verified to work with WassUp."
1796
  msgstr ""
1797
 
1798
+ #: lib\settings.php:1059
1799
  msgid "How can I make Wassup run faster?"
1800
  msgstr ""
1801
 
1802
+ #: lib\settings.php:1060
1803
  #, php-format
1804
  msgid ""
1805
  "Keep Wassup table size small by setting automatic delete of old records or "
1806
  "do manual delete periodically under %s tab."
1807
  msgstr ""
1808
 
1809
+ #: lib\settings.php:1061
1810
  msgid ""
1811
  "If using the \"Top Stats\" widget on your site, set refresh frequency to 15 "
1812
  "minutes or higher."
1813
  msgstr ""
1814
 
1815
+ #: lib\settings.php:1062
1816
  #, php-format
1817
  msgid ""
1818
  "Reduce the number of recording exclusions (by ip/hostname/username/url) "
1819
  "under %s tab."
1820
  msgstr ""
1821
 
1822
+ #: lib\settings.php:1065
1823
  #, php-format
1824
  msgid ""
1825
  "Delete the file(s) %s from the plugin subfolder 'lib' to stop Wassup from "
1826
  "doing remote server queries for spam identification."
1827
  msgstr ""
1828
 
1829
+ #: lib\settings.php:1066
1830
  #, php-format
1831
  msgid ""
1832
  "As a last resort, stop all spam/malware detection on new hits by unchecking "
1833
  "\"Enable Spam and malware detection on records\" under %s tab."
1834
  msgstr ""
1835
 
1836
+ #: lib\settings.php:1067
1837
  msgid ""
1838
  "Why does WassUp stats sometimes show more page views than actual pages "
1839
  "clicked by a person?"
1840
  msgstr ""
1841
 
1842
+ #: lib\settings.php:1068
1843
  msgid ""
1844
  "\"Phantom\" page views can occur when a user's browser does automatic feed "
1845
  "retrieval, link pre-fetching, a page refresh, or automatically adds your "
1848
  "from user link clicks."
1849
  msgstr ""
1850
 
1851
+ #: lib\settings.php:1069
1852
  msgid "How do I upgrade WassUp safely when my site has frequent visitors?"
1853
  msgstr ""
1854
 
1855
+ #: lib\settings.php:1070
1856
  #, php-format
1857
  msgid ""
1858
  "To upgrade WassUp when your site is busy, you must first disable statistics "
1861
  "active."
1862
  msgstr ""
1863
 
1864
+ #: lib\settings.php:1071
1865
  msgid "An unspecified error occurred during plugin upgrade. What do I do next?"
1866
  msgstr ""
1867
 
1868
+ #: lib\settings.php:1072
1869
  msgid ""
1870
  "Wait a few minutes. Do NOT re-attempt to upgrade nor try to activate the "
1871
  "plugin again! An activation error with no explanation is probably due to "
1875
  "and verify that Wassup plugin has activated."
1876
  msgstr ""
1877
 
1878
+ #: lib\settings.php:1073
1879
  msgid "How do I uninstall WassUp cleanly?"
1880
  msgstr ""
1881
 
1882
+ #: lib\settings.php:1074
1883
  msgid ""
1884
  "From a single Wordpress site: navigate to Wordpress Plugins panel and "
1885
  "deactivate WassUp plugin. Then, on the same page, click the \"delete\" link "
1886
  "below WassUp name. This deletes both data and files permanently."
1887
  msgstr ""
1888
 
1889
+ #: lib\settings.php:1075
1890
  msgid ""
1891
  "From Wordpress multisite Network admin panel: navigate to Plugins panel and "
1892
  "deactivate WassUp plugin. If the plugin is not \"network activated\", "
1897
  "the network."
1898
  msgstr ""
1899
 
1900
+ #: lib\settings.php:1076
1901
  #, php-format
1902
  msgid ""
1903
  "From a subsite in Wordpress multisite: navigate to %s tab and check the box "
1906
  "subsite's data permanently. No files are deleted (not needed)."
1907
  msgstr ""
1908
 
1909
+ #: lib\settings.php:1077
1910
  #, php-format
1911
  msgid ""
1912
  "From a Wordpress 2.x site: navigate to %s tab and check the box for "
1918
  "your host server."
1919
  msgstr ""
1920
 
1921
+ #: lib\settings.php:1079
1922
  #, php-format
1923
  msgid "Visit the %s to find more answers to your WassUp questions."
1924
  msgstr ""
1925
 
1926
+ #: lib\settings.php:1079
1927
  msgid "Plugin Forum"
1928
  msgstr ""
1929
 
1930
+ #: lib\settings.php:1084
1931
  msgid "How you can donate"
1932
  msgstr ""
1933
 
1934
+ #: lib\settings.php:1085
1935
  msgid ""
1936
  "If you like this plugin, please consider making a donation to help keep it's "
1937
  "development active."
1938
  msgstr ""
1939
 
1940
+ #: lib\settings.php:1087
1941
  #, php-format
1942
  msgid "Donate by %s"
1943
  msgstr ""
1944
 
1945
+ #: lib\settings.php:1088
1946
  #, php-format
1947
  msgid "Donate %s"
1948
  msgstr ""
1949
 
1950
+ #: lib\settings.php:1090
1951
  msgid "Send your bitcoin donation to this address"
1952
  msgstr ""
1953
 
1954
+ #: lib\uadetector.class.php:452 lib\uadetector.class.php:775
1955
  msgid "Script Injection Bot"
1956
  msgstr ""
1957
 
1958
+ #: lib\uadetector.class.php:601
1959
  msgid "Unknown Feedreader"
1960
  msgstr ""
1961
 
1962
+ #: lib\upgrade.php:131
1963
  msgid "COMPATIBILITY WARNING: non-MySQL database type detected!"
1964
  msgstr ""
1965
 
1966
+ #: lib\upgrade.php:131
1967
  msgid ""
1968
  "WassUp uses complex MySQL queries that may not run on a different database "
1969
  "type."
1970
  msgstr ""
1971
 
1972
+ #: lib\upgrade.php:133
1973
  msgid "WassUp cannot generate accurate statistics with page caching enabled."
1974
  msgstr ""
1975
 
1976
+ #: lib\upgrade.php:133
1977
  msgid ""
1978
  "If your cache plugin stores whole Wordpress pages/posts as static HTML, then "
1979
  "WassUp won't run properly. Please deactivate your cache plugin and remove "
1981
  "plugin."
1982
  msgstr ""
1983
 
1984
+ #: lib\upgrade.php:140
1985
  #, php-format
1986
  msgid ""
1987
  "WARNING: Insufficient memory: %s found! A minimum allocation of %s is "
1988
  "recommended for WassUp and Wordpress."
1989
  msgstr ""
1990
 
1991
+ #: lib\upgrade.php:143
1992
  #, php-format
1993
  msgid "See %s for information about increasing Wordpress memory."
1994
  msgstr ""
1995
 
1996
+ #: lib\upgrade.php:150
1997
  msgid "IMPORTANT: Wassup Widget has changed and must be re-installed."
1998
  msgstr ""
1999
 
2000
+ #: lib\upgrade.php:337
2001
  msgid "Welcome to WassUP"
2002
  msgstr ""
2003
 
2004
+ #: lib\upgrade.php:357 lib\upgrade.php:400
2005
  #, php-format
2006
  msgid "An error occurred during the install of table %s."
2007
  msgstr ""
2008
 
2009
+ #: lib\wassup.class.php:446 lib\compat-lib\compat_php.php:459
2010
  msgid "Administrator"
2011
  msgstr ""
2012
 
2013
+ #: lib\wassup.class.php:447 lib\compat-lib\compat_php.php:460
2014
  msgid "Editor"
2015
  msgstr ""
2016
 
2017
+ #: lib\wassup.class.php:448 lib\compat-lib\compat_php.php:461
2018
  msgid "Author"
2019
  msgstr ""
2020
 
2021
+ #: lib\wassup.class.php:449 lib\compat-lib\compat_php.php:462
2022
  msgid "Contributor"
2023
  msgstr ""
2024
 
2025
+ #: lib\wassup.class.php:450 lib\compat-lib\compat_php.php:463
2026
  msgid "Subscriber"
2027
  msgstr ""
2028
 
2029
+ #: lib\wassup.class.php:456 lib\compat-lib\compat_php.php:469
2030
  msgid "One - 2 lines chart 1 axis"
2031
  msgstr ""
2032
 
2033
+ #: lib\wassup.class.php:457 lib\compat-lib\compat_php.php:470
2034
  msgid "Two - 2 lines chart 2 axes"
2035
  msgstr ""
2036
 
2037
+ #: lib\wassup.class.php:477 lib\compat-lib\compat_php.php:490
2038
  msgid "Everything"
2039
  msgstr ""
2040
 
2041
+ #: lib\wassup.class.php:479 lib\compat-lib\compat_php.php:492
2042
  msgid "No spider"
2043
  msgstr ""
2044
 
2045
+ #: lib\wassup.class.php:481 lib\compat-lib\compat_php.php:494
2046
  msgid "No Spam"
2047
  msgstr ""
2048
 
2049
+ #: lib\wassup.class.php:482 lib\compat-lib\compat_php.php:495
2050
  msgid "No Spam, No Spider"
2051
  msgstr ""
2052
 
2053
+ #: lib\wassup.class.php:483 lib\compat-lib\compat_php.php:496
2054
  msgid "Users logged in"
2055
  msgstr ""
2056
 
2057
+ #: lib\wassup.class.php:484 lib\wassupadmin.php:1040 lib\wassupadmin.php:2135
2058
+ #: lib\compat-lib\compat_php.php:497 lib\compat-lib\compat_php.php:2639
2059
+ #: widgets\widgets.php:236 widgets\widget_functions.php:221
2060
  msgid "Comment authors"
2061
  msgstr ""
2062
 
2063
+ #: lib\wassup.class.php:485 lib\compat-lib\compat_php.php:498
2064
  msgid "Referrer from search engine"
2065
  msgstr ""
2066
 
2067
+ #: lib\wassup.class.php:486 lib\compat-lib\compat_php.php:499
2068
  msgid "Referrer from ext link"
2069
  msgstr ""
2070
 
2071
+ #: lib\wassup.class.php:519 lib\compat-lib\compat_php.php:532
2072
  msgid "Don't delete anything"
2073
  msgstr ""
2074
 
2075
+ #: lib\wassup.class.php:520 lib\wassup.class.php:556
2076
+ #: lib\compat-lib\compat_php.php:533 lib\compat-lib\compat_php.php:569
2077
  msgid "24 hours"
2078
  msgstr ""
2079
 
2080
+ #: lib\wassup.class.php:521 lib\wassup.class.php:557
2081
+ #: lib\compat-lib\compat_php.php:534 lib\compat-lib\compat_php.php:570
2082
  msgid "7 days"
2083
  msgstr ""
2084
 
2085
+ #: lib\wassup.class.php:522 lib\wassup.class.php:558
2086
+ #: lib\compat-lib\compat_php.php:535 lib\compat-lib\compat_php.php:571
2087
  msgid "2 weeks"
2088
  msgstr ""
2089
 
2090
+ #: lib\wassup.class.php:523 lib\wassup.class.php:559
2091
+ #: lib\compat-lib\compat_php.php:536 lib\compat-lib\compat_php.php:572
2092
  msgid "1 month"
2093
  msgstr ""
2094
 
2095
+ #: lib\wassup.class.php:524 lib\wassup.class.php:560
2096
+ #: lib\compat-lib\compat_php.php:537 lib\compat-lib\compat_php.php:573
2097
  msgid "3 months"
2098
  msgstr ""
2099
 
2100
+ #: lib\wassup.class.php:525 lib\wassup.class.php:561
2101
+ #: lib\compat-lib\compat_php.php:538 lib\compat-lib\compat_php.php:574
2102
  msgid "6 months"
2103
  msgstr ""
2104
 
2105
+ #: lib\wassup.class.php:526 lib\wassup.class.php:562
2106
+ #: lib\compat-lib\compat_php.php:539 lib\compat-lib\compat_php.php:575
2107
  msgid "1 year"
2108
  msgstr ""
2109
 
2110
+ #: lib\wassup.class.php:533 lib\compat-lib\compat_php.php:546
2111
  msgid "All"
2112
  msgstr ""
2113
 
2114
+ #: lib\wassup.class.php:536 lib\compat-lib\compat_php.php:549
2115
  msgid "Spider and spam"
2116
  msgstr ""
2117
 
2118
+ #: lib\wassup.class.php:546 lib\compat-lib\compat_php.php:559
2119
  msgid "IP Address"
2120
  msgstr ""
2121
 
2122
+ #: lib\wassup.class.php:547 lib\compat-lib\compat_php.php:560
2123
  msgid "URL Request"
2124
  msgstr ""
2125
 
2126
+ #: lib\wassup.class.php:553 lib\compat-lib\compat_php.php:566
2127
  msgid "1 hour"
2128
  msgstr ""
2129
 
2130
+ #: lib\wassup.class.php:554 lib\compat-lib\compat_php.php:567
2131
  msgid "6 hours"
2132
  msgstr ""
2133
 
2134
+ #: lib\wassup.class.php:555 lib\compat-lib\compat_php.php:568
2135
  msgid "12 hours"
2136
  msgstr ""
2137
 
2138
+ #: lib\wassup.class.php:563 lib\compat-lib\compat_php.php:576
2139
  msgid "all time"
2140
  msgstr ""
2141
 
2142
+ #: lib\wassup.class.php:656 lib\compat-lib\compat_php.php:669
2143
  msgid ""
2144
  "Permission denied! Sorry, you must be an 'administrator' to change settings."
2145
  msgstr ""
2146
 
2147
+ #: lib\wassup.class.php:659 lib\compat-lib\compat_php.php:672
2148
  msgid "Nothing to do!"
2149
  msgstr ""
2150
 
2151
+ #: lib\wassup.class.php:687 lib\compat-lib\compat_php.php:700
2152
  msgid "not required"
2153
  msgstr ""
2154
 
2155
+ #: lib\wassup.class.php:789 lib\wassupadmin.php:673
2156
+ #: lib\compat-lib\compat_php.php:802
2157
  msgid "Wassup options updated successfully"
2158
  msgstr ""
2159
 
2160
+ #: lib\wassup.class.php:1032 lib\compat-lib\compat_php.php:1045
2161
  msgid "error"
2162
  msgstr ""
2163
 
2164
+ #: lib\wassup.class.php:1033 lib\compat-lib\compat_php.php:1046
2165
  msgid "warning"
2166
  msgstr ""
2167
 
2168
+ #: lib\wassup.class.php:1034 lib\compat-lib\compat_php.php:1047
2169
  msgid "updated"
2170
  msgstr ""
2171
 
2172
+ #: lib\wassup.class.php:1035 lib\compat-lib\compat_php.php:1048
2173
  msgid "upgraded"
2174
  msgstr ""
2175
 
2176
+ #: lib\wassup.class.php:1036 lib\compat-lib\compat_php.php:1049
2177
  msgid "deleted"
2178
  msgstr ""
2179
 
2180
+ #: lib\wassup.class.php:1706 lib\compat-lib\compat_php.php:1716
2181
  msgid "ERROR"
2182
  msgstr ""
2183
 
2184
+ #: lib\wassup.class.php:1766 lib\compat-lib\compat_php.php:1776
2185
  #, php-format
2186
  msgid "%s error!"
2187
  msgstr ""
2188
 
2189
+ #: lib\wassup.class.php:1767 lib\compat-lib\compat_php.php:1777
2190
  #, php-format
2191
  msgid "%s encountered an error."
2192
  msgstr ""
2193
 
2194
+ #: lib\wassup.class.php:1874 lib\compat-lib\compat_php.php:1884
2195
  msgid "Wassup auto-delete notice"
2196
  msgstr ""
2197
 
2198
+ #: lib\wassup.class.php:1875 lib\compat-lib\compat_php.php:1885
2199
  #, php-format
2200
  msgid "Auto-delete deleted %d old %s records today."
2201
  msgstr ""
2202
 
2203
+ #: lib\wassup.class.php:1911 lib\compat-lib\compat_php.php:1921
2204
  #, php-format
2205
  msgid "Error with TABLE %s: Not found"
2206
  msgstr ""
2207
 
2208
+ #: lib\wassup.class.php:1946 lib\compat-lib\compat_php.php:1956
2209
  #, php-format
2210
  msgid "Error with \"SHOW CREATE TABLE\" for %s."
2211
  msgstr ""
2212
 
2213
+ #: lib\wassup.class.php:1953 lib\compat-lib\compat_php.php:1963
2214
  #, php-format
2215
  msgid "Table structure of table %s"
2216
  msgstr ""
2217
 
2218
+ #: lib\wassup.class.php:1959 lib\compat-lib\compat_php.php:1969
2219
  #, php-format
2220
  msgid "Data contents of table %s"
2221
  msgstr ""
2222
 
2223
+ #: lib\wassup.class.php:1967 lib\compat-lib\compat_php.php:1977
2224
  #, php-format
2225
  msgid "Error getting table structure of %s: %s"
2226
  msgstr ""
2227
 
2228
+ #: lib\wassup.class.php:1970 lib\compat-lib\compat_php.php:1980
2229
  #, php-format
2230
  msgid "Error getting table structure of %s"
2231
  msgstr ""
2232
 
2233
+ #: lib\wassup.class.php:1976 lib\compat-lib\compat_php.php:1986
2234
  #, php-format
2235
  msgid "Error with table %s: %s"
2236
  msgstr ""
2237
 
2238
+ #: lib\wassup.class.php:1978 lib\compat-lib\compat_php.php:1988
2239
  #, php-format
2240
  msgid "Error with table %s: No data"
2241
  msgstr ""
2242
 
2243
+ #: lib\wassup.class.php:2059 lib\compat-lib\compat_php.php:2069
2244
  #, php-format
2245
  msgid "Error exporting data from table %s: %s"
2246
  msgstr ""
2247
 
2248
+ #: lib\wassup.class.php:2115 lib\compat-lib\compat_php.php:2125
2249
  #, php-format
2250
  msgid "End of data contents of table %s"
2251
  msgstr ""
2252
 
2253
+ #: lib\wassup.class.php:2117 lib\compat-lib\compat_php.php:2127
2254
  #, php-format
2255
  msgid "Interrupted data contents of table %s"
2256
  msgstr ""
2257
 
2258
+ #: lib\wassup.class.php:2126 lib\compat-lib\compat_php.php:2136
2259
  #, php-format
2260
  msgid "End time: %d"
2261
  msgstr ""
2262
 
2263
+ #: lib\wassup.class.php:2127 lib\wassup.class.php:2132
2264
+ #: lib\compat-lib\compat_php.php:2137 lib\compat-lib\compat_php.php:2142
2265
  #, php-format
2266
  msgid "%d out of %d records exported."
2267
  msgstr ""
2268
 
2269
+ #: lib\wassup.class.php:2127 lib\wassup.class.php:2132
2270
+ #: lib\compat-lib\compat_php.php:2137 lib\compat-lib\compat_php.php:2142
2271
  #, php-format
2272
  msgid "Last record ID: %d"
2273
  msgstr ""
2274
 
2275
+ #: lib\wassup.class.php:2276 lib\wassup.class.php:2309 lib\wassupadmin.php:1770
2276
+ #: lib\compat-lib\compat_php.php:2284 lib\compat-lib\compat_php.php:2317
2277
  msgid "direct hit"
2278
  msgstr ""
2279
 
2280
+ #: lib\wassup.class.php:2287 lib\wassup.class.php:2290
2281
+ #: lib\compat-lib\compat_php.php:2295 lib\compat-lib\compat_php.php:2298
2282
  msgid "from your site"
2283
  msgstr ""
2284
 
2285
+ #: lib\wassupadmin.php:152
2286
  msgid "paused"
2287
  msgstr ""
2288
 
2289
+ #: lib\wassupadmin.php:193
2290
  msgid "Sorry, delete failed!"
2291
  msgstr ""
2292
 
2293
+ #: lib\wassupadmin.php:196
2294
  msgid "Delete record failed!"
2295
  msgstr ""
2296
 
2297
+ #: lib\wassupadmin.php:206 lib\wassupadmin.php:213 lib\wassupadmin.php:1568
2298
  msgid "Hide Search"
2299
  msgstr ""
2300
 
2301
+ #: lib\wassupadmin.php:218 lib\wassupadmin.php:262
2302
  msgid "Collapse All"
2303
  msgstr ""
2304
 
2305
+ #: lib\wassupadmin.php:220 lib\wassupadmin.php:264 lib\wassupadmin.php:979
2306
+ #: lib\wassupadmin.php:1609
2307
  msgid "Expand All"
2308
  msgstr ""
2309
 
2310
+ #: lib\wassupadmin.php:223
2311
  msgid "Expand Chronology"
2312
  msgstr ""
2313
 
2314
+ #: lib\wassupadmin.php:225 lib\wassupadmin.php:1610
2315
  msgid "Collapse Chronology"
2316
  msgstr ""
2317
 
2428
  msgid "Exec time"
2429
  msgstr ""
2430
 
2431
+ #: lib\wassupadmin.php:1010 lib\wassupadmin.php:1197
2432
  msgid "Legend"
2433
  msgstr ""
2434
 
2435
+ #: lib\wassupadmin.php:1010 lib\wassupadmin.php:1039 lib\wassupadmin.php:1197
2436
  msgid "Logged-in Users"
2437
  msgstr ""
2438
 
2439
+ #: lib\wassupadmin.php:1010
2440
  msgid "Comment Authors"
2441
  msgstr ""
2442
 
2443
+ #: lib\wassupadmin.php:1010 lib\wassupadmin.php:1197
2444
  msgid "Spiders/bots"
2445
  msgstr ""
2446
 
2447
+ #: lib\wassupadmin.php:1038 lib\wassupadmin.php:2082
2448
+ #: lib\compat-lib\compat_php.php:2586 widgets\widget_functions.php:201
2449
  msgid "Visitors online"
2450
  msgstr ""
2451
 
2452
+ #: lib\wassupadmin.php:1066
2453
  msgid "From your site"
2454
  msgstr ""
2455
 
2456
+ #: lib\wassupadmin.php:1088 lib\wassupadmin.php:1679
2457
  msgid "LOGGED IN USER"
2458
  msgstr ""
2459
 
2460
+ #: lib\wassupadmin.php:1093 lib\wassupadmin.php:1686
2461
  msgid "ADMINISTRATOR"
2462
  msgstr ""
2463
 
2464
+ #: lib\wassupadmin.php:1108 lib\wassupadmin.php:1707
2465
  msgid "COMMENT AUTHOR"
2466
  msgstr ""
2467
 
2468
+ #: lib\wassupadmin.php:1129 lib\wassupadmin.php:1762
2469
  msgid "show raw table"
2470
  msgstr ""
2471
 
2472
+ #: lib\wassupadmin.php:1129 lib\wassupadmin.php:1762
2473
  msgid "Show the items as raw table"
2474
  msgstr ""
2475
 
2476
+ #: lib\wassupadmin.php:1197
2477
  msgid "Comments Authors"
2478
  msgstr ""
2479
 
2480
+ #: lib\wassupadmin.php:1201
2481
  msgid "Pause"
2482
  msgstr ""
2483
 
2484
+ #: lib\wassupadmin.php:1202
2485
  msgid "Play"
2486
  msgstr ""
2487
 
2488
+ #: lib\wassupadmin.php:1213
2489
  msgid "Show map"
2490
  msgstr ""
2491
 
2492
+ #: lib\wassupadmin.php:1213
2493
  msgid "Show ip geo location on map"
2494
  msgstr ""
2495
 
2496
+ #: lib\wassupadmin.php:1219
2497
  msgid "Spy items by"
2498
  msgstr ""
2499
 
2500
+ #: lib\wassupadmin.php:1266
2501
  msgid "WassUp recording is disabled"
2502
  msgstr ""
2503
 
2504
+ #: lib\wassupadmin.php:1268
2505
  msgid "WassUp recording is disabled for network."
2506
  msgstr ""
2507
 
2508
+ #: lib\wassupadmin.php:1465
2509
  msgid "Show details from the last"
2510
  msgstr ""
2511
 
2512
+ #: lib\wassupadmin.php:1474
2513
  msgid "Items per page"
2514
  msgstr ""
2515
 
2516
+ #: lib\wassupadmin.php:1484
2517
  msgid "Filter items for"
2518
  msgstr ""
2519
 
2520
+ #: lib\wassupadmin.php:1498
2521
  msgid "Visits"
2522
  msgstr ""
2523
 
2524
+ #: lib\wassupadmin.php:1499
2525
  msgid "Pageviews"
2526
  msgstr ""
2527
 
2528
+ #: lib\wassupadmin.php:1500
2529
  msgid "Pages/Visits"
2530
  msgstr ""
2531
 
2532
+ #: lib\wassupadmin.php:1516
2533
  msgid "Spams"
2534
  msgstr ""
2535
 
2536
+ #: lib\wassupadmin.php:1526
2537
  msgid "Spam/Malware Options"
2538
  msgstr ""
2539
 
2540
+ #: lib\wassupadmin.php:1532
2541
  msgid "Enable Spam and Malware Check on Records"
2542
  msgstr ""
2543
 
2544
+ #: lib\wassupadmin.php:1535
2545
+ msgid "Record attack/exploit attempts (libwww-perl agent)"
2546
+ msgstr ""
2547
+
2548
+ #: lib\wassupadmin.php:1544
2549
  msgid "refresh screen"
2550
  msgstr ""
2551
 
2552
+ #: lib\wassupadmin.php:1546
2553
  #, php-format
2554
  msgid "Auto refresh in %s seconds"
2555
  msgstr ""
2556
 
2557
+ #: lib\wassupadmin.php:1551
2558
  msgid "hide chart"
2559
  msgstr ""
2560
 
2561
+ #: lib\wassupadmin.php:1551
2562
  msgid "Hide the chart"
2563
  msgstr ""
2564
 
2565
+ #: lib\wassupadmin.php:1551
2566
  msgid "Hide chart"
2567
  msgstr ""
2568
 
2569
+ #: lib\wassupadmin.php:1553
2570
  msgid "show chart"
2571
  msgstr ""
2572
 
2573
+ #: lib\wassupadmin.php:1553
2574
  msgid "Show the chart"
2575
  msgstr ""
2576
 
2577
+ #: lib\wassupadmin.php:1553
2578
  msgid "Show chart"
2579
  msgstr ""
2580
 
2581
+ #: lib\wassupadmin.php:1564
2582
  #, php-format
2583
  msgid "Top Stats for %s"
2584
  msgstr ""
2585
 
2586
+ #: lib\wassupadmin.php:1564
2587
  msgid "Show top stats"
2588
  msgstr ""
2589
 
2590
+ #: lib\wassupadmin.php:1566
2591
  #, php-format
2592
  msgid "Top stats for %s in popup"
2593
  msgstr ""
2594
 
2595
+ #: lib\wassupadmin.php:1574
2596
  #, php-format
2597
  msgid "%s matches found for search"
2598
  msgstr ""
2599
 
2600
+ #: lib\wassupadmin.php:1578
2601
  #, php-format
2602
  msgid "%s items marked for IP"
2603
  msgstr ""
2604
 
2605
+ #: lib\wassupadmin.php:1579
2606
  msgid "Filter by marked IP"
2607
  msgstr ""
2608
 
2609
+ #: lib\wassupadmin.php:1643
2610
  msgid "Records display interrupted."
2611
  msgstr ""
2612
 
2613
+ #: lib\wassupadmin.php:1646
2614
  msgid "Unable to display records."
2615
  msgstr ""
2616
 
2617
+ #: lib\wassupadmin.php:1713
2618
  msgid "FEEDREADER"
2619
  msgstr ""
2620
 
2621
+ #: lib\wassupadmin.php:1715
2622
  msgid "SUBSCRIBER(S)"
2623
  msgstr ""
2624
 
2625
+ #: lib\wassupadmin.php:1718
2626
  msgid "SPIDER"
2627
  msgstr ""
2628
 
2629
+ #: lib\wassupadmin.php:1752 lib\wassupadmin.php:1757
2630
  msgid "delete"
2631
  msgstr ""
2632
 
2633
+ #: lib\wassupadmin.php:1752
2634
  msgid "Delete ALL marked records with this IP"
2635
  msgstr ""
2636
 
2637
+ #: lib\wassupadmin.php:1754
2638
  msgid "unmark"
2639
  msgstr ""
2640
 
2641
+ #: lib\wassupadmin.php:1754
2642
  msgid "UnMark IP"
2643
  msgstr ""
2644
 
2645
+ #: lib\wassupadmin.php:1757
2646
  msgid "Delete this record"
2647
  msgstr ""
2648
 
2649
+ #: lib\wassupadmin.php:1759
2650
  msgid "mark"
2651
  msgstr ""
2652
 
2653
+ #: lib\wassupadmin.php:1759
2654
  msgid "Mark IP"
2655
  msgstr ""
2656
 
2657
+ #: lib\wassupadmin.php:1802
2658
  msgid "SEARCH ENGINE"
2659
  msgstr ""
2660
 
2661
+ #: lib\wassupadmin.php:1802
2662
  msgid "page"
2663
  msgstr ""
2664
 
2665
+ #: lib\wassupadmin.php:1803
2666
  msgid "KEYWORDS"
2667
  msgstr ""
2668
 
2669
+ #: lib\wassupadmin.php:1826
2670
  msgid "Probably SPAM!"
2671
  msgstr ""
2672
 
2673
+ #: lib\wassupadmin.php:1828
2674
  msgid "Referer Spam"
2675
  msgstr ""
2676
 
2677
+ #: lib\wassupadmin.php:1832
2678
  msgid "Comment Spam"
2679
  msgstr ""
2680
 
2681
+ #: lib\wassupadmin.php:1840
2682
  msgid "Probably hack/malware attempt!"
2683
  msgstr ""
2684
 
2685
+ #: lib\wassupadmin.php:1867
2686
  msgid "BROWSER"
2687
  msgstr ""
2688
 
2689
+ #: lib\wassupadmin.php:1870
2690
  msgid "RESOLUTION"
2691
  msgstr ""
2692
 
2693
+ #: lib\wassupadmin.php:1940
2694
  msgid "Graph of visitor hits"
2695
  msgstr ""
2696
 
2697
+ #: lib\wassupadmin.php:1942
2698
  msgid "Too few records to print chart"
2699
  msgstr ""
2700
 
2701
+ #: lib\wassupadmin.php:1951
2702
  #, php-format
2703
  msgid "Invalid page request %s"
2704
  msgstr ""
2705
 
2706
+ #: lib\wassupadmin.php:2016 lib\compat-lib\compat_php.php:2520
2707
  msgid "Stats"
2708
  msgstr ""
2709
 
2710
+ #: lib\wassupadmin.php:2016 lib\compat-lib\compat_php.php:2520
2711
  msgid "More"
2712
  msgstr ""
2713
 
2714
+ #: lib\wassupadmin.php:2018 lib\wassupadmin.php:2053
2715
+ #: lib\compat-lib\compat_php.php:2522 lib\compat-lib\compat_php.php:2557
2716
  msgid "visitor stats chart"
2717
  msgstr ""
2718
 
2719
+ #: lib\wassupadmin.php:2048 lib\compat-lib\compat_php.php:2552
2720
  msgid "More Stats"
2721
  msgstr ""
2722
 
2723
+ #: lib\wassupadmin.php:2129 lib\compat-lib\compat_php.php:2633
2724
  msgid "Registered users"
2725
  msgstr ""
2726
 
2727
+ #: lib\wassupadmin.php:2139 lib\compat-lib\compat_php.php:2643
2728
+ #: widgets\widget_functions.php:200
2729
  msgid "Visitor online"
2730
  msgstr ""
2731
 
2732
+ #: lib\wassupadmin.php:2144 lib\compat-lib\compat_php.php:2648
2733
  msgid "No online data!"
2734
  msgstr ""
2735
 
2736
+ #: lib\wassupadmin.php:2148 lib\compat-lib\compat_php.php:2652
2737
+ #: widgets\widget_functions.php:105
2738
  msgid "powered by"
2739
  msgstr ""
2740
 
2741
+ #: lib\wassupadmin.php:2148 lib\compat-lib\compat_php.php:2652
2742
+ #: widgets\widget_functions.php:105
2743
  msgid "Real Time Visitors Tracking"
2744
  msgstr ""
2745
 
2746
+ #: lib\compat-lib\compat_widget.php:105 widgets\widgets.php:101
2747
+ #: widgets\widgets.php:249 widgets\widgets.php:463
2748
  msgid "Widget style options"
2749
  msgstr ""
2750
 
2751
+ #: lib\compat-lib\compat_widget.php:107 widgets\widgets.php:103
2752
+ #: widgets\widgets.php:251 widgets\widgets.php:465
2753
  #, php-format
2754
  msgid "Class attribute for %s list:"
2755
  msgstr ""
2756
 
2757
+ #: lib\compat-lib\compat_widget.php:109 widgets\widgets.php:105
2758
+ #: widgets\widgets.php:253 widgets\widgets.php:467
2759
  msgid "Max. chars to display from left"
2760
  msgstr ""
2761
 
2762
+ #: lib\compat-lib\compat_widget.php:110 widgets\widgets.php:106
2763
+ #: widgets\widgets.php:254 widgets\widgets.php:468
2764
  msgid "enter \"0\" for theme default/line wrap of long texts"
2765
  msgstr ""
2766
 
2767
+ #: widgets\widgets.php:57
2768
  msgid "base widget"
2769
  msgstr ""
2770
 
2771
+ #: widgets\widgets.php:201
2772
  msgid "Online"
2773
  msgstr ""
2774
 
2775
+ #: widgets\widgets.php:202
2776
  msgid "Show counts of your site's visitors who are currently online."
2777
  msgstr ""
2778
 
2779
+ #: widgets\widgets.php:212
2780
  msgid "Online Now"
2781
  msgstr ""
2782
 
2783
+ #: widgets\widgets.php:232
2784
  msgid "Show online counts for:"
2785
  msgstr ""
2786
 
2787
+ #: widgets\widgets.php:234
2788
  msgid "All current visitors"
2789
  msgstr ""
2790
 
2791
+ #: widgets\widgets.php:235 widgets\widget_functions.php:211
2792
  msgid "Logged-in users"
2793
  msgstr ""
2794
 
2795
+ #: widgets\widgets.php:237 widgets\widget_functions.php:231
2796
  msgid "Regular visitors"
2797
  msgstr ""
2798
 
2799
+ #: widgets\widgets.php:238 widgets\widget_functions.php:241
2800
  msgid "Others"
2801
  msgstr ""
2802
 
2803
+ #: widgets\widgets.php:242
2804
  msgid "Online Users Details"
2805
  msgstr ""
2806
 
2807
+ #: widgets\widgets.php:244
2808
  msgid "Show online usernames to registered users"
2809
  msgstr ""
2810
 
2811
+ #: widgets\widgets.php:245
2812
  msgid "Show country flags of users online"
2813
  msgstr ""
2814
 
2815
+ #: widgets\widgets.php:258
2816
  msgid "online counts are automatically cached for 1 minute."
2817
  msgstr ""
2818
 
2819
+ #: widgets\widgets.php:259 widgets\widgets.php:473
2820
  msgid "empty results are not displayed."
2821
  msgstr ""
2822
 
2823
+ #: widgets\widgets.php:370
2824
  msgid "Top Stats"
2825
  msgstr ""
2826
 
2827
+ #: widgets\widgets.php:371
2828
  msgid ""
2829
  "List your site's most popular or trending items from Wassup's latest stats "
2830
  "data."
2831
  msgstr ""
2832
 
2833
+ #: widgets\widgets.php:404
2834
  msgid "of first checked item below"
2835
  msgstr ""
2836
 
2837
+ #: widgets\widgets.php:406
2838
  msgid "List Top Results for"
2839
  msgstr ""
2840
 
2841
+ #: widgets\widgets.php:410
2842
  msgid "Stat item"
2843
  msgstr ""
2844
 
2845
+ #: widgets\widgets.php:411
2846
  msgid "max limit"
2847
  msgstr ""
2848
 
2849
+ #: widgets\widgets.php:413
2850
  msgid "Titles of posts and pages"
2851
  msgstr ""
2852
 
2853
+ #: widgets\widgets.php:413
2854
  msgid "Latest articles"
2855
  msgstr ""
2856
 
2857
+ #: widgets\widgets.php:419
2858
  msgid "Search engine searches"
2859
  msgstr ""
2860
 
2861
+ #: widgets\widgets.php:419
2862
  msgid "Latest searches"
2863
  msgstr ""
2864
 
2865
+ #: widgets\widgets.php:425
2866
  msgid "External links that generated referrals to your site"
2867
  msgstr ""
2868
 
2869
+ #: widgets\widgets.php:425
2870
  msgid "Latest referrers"
2871
  msgstr ""
2872
 
2873
+ #: widgets\widgets.php:431
2874
  msgid "Latest URL requests"
2875
  msgstr ""
2876
 
2877
+ #: widgets\widgets.php:437
2878
  msgid "Client browser software"
2879
  msgstr ""
2880
 
2881
+ #: widgets\widgets.php:437
2882
  msgid "Latest browsers"
2883
  msgstr ""
2884
 
2885
+ #: widgets\widgets.php:443
2886
  msgid "Client device/operating software"
2887
  msgstr ""
2888
 
2889
+ #: widgets\widgets.php:443
2890
  msgid "Latest OS"
2891
  msgstr ""
2892
 
2893
+ #: widgets\widgets.php:449
2894
  msgid "Visitors country/language"
2895
  msgstr ""
2896
 
2897
+ #: widgets\widgets.php:449
2898
  msgid "Latest locale"
2899
  msgstr ""
2900
 
2901
+ #: widgets\widgets.php:456
2902
  msgid "Show counts for each item"
2903
  msgstr ""
2904
 
2905
+ #: widgets\widgets.php:457
2906
  msgid "Statistics timeframe"
2907
  msgstr ""
2908
 
2909
+ #: widgets\widgets.php:458
2910
  msgid ""
2911
  "select 1-30 days for latest top results, 1-12 hours for trending results"
2912
  msgstr ""
2913
 
2914
+ #: widgets\widgets.php:459
2915
  msgid "Refresh statistics every:"
2916
  msgstr ""
2917
 
2918
+ #: widgets\widgets.php:472
2919
  msgid "known spammers and spiders are excluded from results."
2920
  msgstr ""
2921
 
2922
+ #: widgets\widgets.php:576
2923
  msgid "Trending"
2924
  msgstr ""
2925
 
2926
+ #: widgets\widget_functions.php:240
2927
  msgid "Other"
2928
  msgstr ""
2929
 
2930
+ #: widgets\widget_functions.php:397
2931
  #, php-format
2932
  msgid "%s articles"
2933
  msgstr ""
2934
 
2935
+ #: widgets\widget_functions.php:398
2936
  #, php-format
2937
  msgid "%s searches"
2938
  msgstr ""
2939
 
2940
+ #: widgets\widget_functions.php:399
2941
  #, php-format
2942
  msgid "%s referrers"
2943
  msgstr ""
2944
 
2945
+ #: widgets\widget_functions.php:400
2946
  #, php-format
2947
  msgid "%s requests"
2948
  msgstr ""
2949
 
2950
+ #: widgets\widget_functions.php:401
2951
  #, php-format
2952
  msgid "%s browsers"
2953
  msgstr ""
2954
 
2955
+ #: widgets\widget_functions.php:402
2956
  #, php-format
2957
  msgid "%s OS"
2958
  msgstr ""
2959
 
2960
+ #: widgets\widget_functions.php:403
2961
  #, php-format
2962
  msgid "%s locale"
2963
  msgstr ""
lib/action.php CHANGED
@@ -5,28 +5,22 @@
5
  * @package WassUp Real-time Analytics
6
  * @subpackage action.php
7
  */
8
- //-------------------------------------------------
9
- //# No direct requests for this plugin module
10
- $wfile=preg_replace('/\\\\/','/',__FILE__); //for windows
11
  //abort if this is direct uri request for file
12
- if((!empty($_SERVER['PHP_SELF']) && preg_match('#'.preg_quote($_SERVER['PHP_SELF']).'$#',$wfile)>0) ||
13
- (!empty($_SERVER['SCRIPT_FILENAME']) && realpath($_SERVER['SCRIPT_FILENAME'])===realpath($wfile))){
14
  //try track this uri request
15
  if(!headers_sent()){
16
  //triggers redirect to 404 error page so Wassup can track this attempt to access itself (original request_uri is lost)
17
- header('Location: /?p=404page&err=wassup403'.'&wf='.basename($wfile));
18
  exit;
19
  }else{
20
  //'wp_die' may be undefined here
21
  die('<strong>Sorry. Unable to display requested page.</strong>');
22
  }
23
- exit;
24
  //abort if no WordPress
25
  }elseif(!defined('ABSPATH') || empty($GLOBALS['wp_version'])){
26
  //show escaped bad request on exit
27
- die("Bad Request: ".htmlspecialchars(preg_replace('/(&#0*37;|&amp;#0*37;|&#0*38;#0*37;|%)(?:[01][0-9A-F]|7F)/i','',$_SERVER['REQUEST_URI'])));
28
  }
29
- unset($wfile); //to free memory
30
  //-------------------------------------------------
31
  /**
32
  * Wassup ajax action handler function.
5
  * @package WassUp Real-time Analytics
6
  * @subpackage action.php
7
  */
 
 
 
8
  //abort if this is direct uri request for file
9
+ if(!empty($_SERVER['SCRIPT_FILENAME']) && realpath($_SERVER['SCRIPT_FILENAME'])===realpath(preg_replace('/\\\\/','/',__FILE__))){
 
10
  //try track this uri request
11
  if(!headers_sent()){
12
  //triggers redirect to 404 error page so Wassup can track this attempt to access itself (original request_uri is lost)
13
+ header('Location: /?p=404page&werr=wassup403'.'&wf='.basename(__FILE__));
14
  exit;
15
  }else{
16
  //'wp_die' may be undefined here
17
  die('<strong>Sorry. Unable to display requested page.</strong>');
18
  }
 
19
  //abort if no WordPress
20
  }elseif(!defined('ABSPATH') || empty($GLOBALS['wp_version'])){
21
  //show escaped bad request on exit
22
+ die("Bad Request: ".htmlspecialchars(preg_replace('/(&#0*37;?|&amp;?#0*37;?|&#0*38;?#0*37;?|%)(?:[01][0-9A-F]|7F)/i','',$_SERVER['REQUEST_URI'])));
23
  }
 
24
  //-------------------------------------------------
25
  /**
26
  * Wassup ajax action handler function.
lib/akismet.class.php CHANGED
@@ -5,28 +5,22 @@
5
  * @package WassUp Real-time Analytics
6
  * @subpackage akismet.class.php module
7
  */
8
- //-------------------------------------------------
9
- //# No direct requests for this plugin module
10
- $wfile=preg_replace('/\\\\/','/',__FILE__); //for windows
11
  //abort if this is direct uri request for file
12
- if((!empty($_SERVER['PHP_SELF']) && preg_match('#'.preg_quote($_SERVER['PHP_SELF']).'$#',$wfile)>0) ||
13
- (!empty($_SERVER['SCRIPT_FILENAME']) && realpath($_SERVER['SCRIPT_FILENAME'])===realpath($wfile))){
14
  //try track this uri request
15
  if(!headers_sent()){
16
  //triggers redirect to 404 error page so Wassup can track this attempt to access itself (original request_uri is lost)
17
- header('Location: /?p=404page&err=wassup403'.'&wf='.basename($wfile));
18
  exit;
19
  }else{
20
  //'wp_die' may be undefined here
21
  die('<strong>Sorry. Unable to display requested page.</strong>');
22
  }
23
- exit;
24
  //abort if no WordPress
25
  }elseif(!defined('ABSPATH') || empty($GLOBALS['wp_version'])){
26
  //show escaped bad request on exit
27
- die("Bad Request: ".htmlspecialchars(preg_replace('/(&#0*37;|&amp;#0*37;|&#0*38;#0*37;|%)(?:[01][0-9A-F]|7F)/i','',$_SERVER['REQUEST_URI'])));
28
  }
29
- unset($wfile);
30
  //-------------------------------------------------
31
  //Classes and constants renamed for compatibility with Akismet v3.0 -Helene D. @since v1.9
32
  /**
@@ -112,14 +106,14 @@ class wassup_AkismetHttpClient extends wassup_AkismetObject {
112
  "\r\n".$request;
113
  $response="";
114
  @fwrite($this->con,$request);
115
- //new in v1.9.1: don't wait for slow server
116
  stream_set_timeout($this->con,5);
117
  $info=stream_get_meta_data($this->con);
118
  while(!feof($this->con) && !$info['timed_out']){
119
  $response .= @fgets($this->con,$responseLength);
120
- $info=stream_get_meta_data($this->con); //new in v1.9.1: for timeout checking
121
  }
122
- //New in v1.9.1: timeout error message
123
  if(!empty($response)){
124
  $response=explode("\r\n\r\n",$response,2);
125
  return $response[1];
@@ -195,7 +189,6 @@ class wassup_Akismet extends wassup_AkismetObject {
195
  }
196
  /** Query Akismet server to check if comment is spam or not */
197
  function isSpam() {
198
- //v1.9.1 bugfix: removed 'set_time_limit' code (since v1.9) because it has no effect on remote requests
199
  $response=$this->http->getResponse($this->_getQueryString(), 'comment-check');
200
  return ($response=="true");
201
  }
5
  * @package WassUp Real-time Analytics
6
  * @subpackage akismet.class.php module
7
  */
 
 
 
8
  //abort if this is direct uri request for file
9
+ if(!empty($_SERVER['SCRIPT_FILENAME']) && realpath($_SERVER['SCRIPT_FILENAME'])===realpath(preg_replace('/\\\\/','/',__FILE__))){
 
10
  //try track this uri request
11
  if(!headers_sent()){
12
  //triggers redirect to 404 error page so Wassup can track this attempt to access itself (original request_uri is lost)
13
+ header('Location: /?p=404page&werr=wassup403'.'&wf='.basename(__FILE__));
14
  exit;
15
  }else{
16
  //'wp_die' may be undefined here
17
  die('<strong>Sorry. Unable to display requested page.</strong>');
18
  }
 
19
  //abort if no WordPress
20
  }elseif(!defined('ABSPATH') || empty($GLOBALS['wp_version'])){
21
  //show escaped bad request on exit
22
+ die("Bad Request: ".htmlspecialchars(preg_replace('/(&#0*37;?|&amp;?#0*37;?|&#0*38;?#0*37;?|%)(?:[01][0-9A-F]|7F)/i','',$_SERVER['REQUEST_URI'])));
23
  }
 
24
  //-------------------------------------------------
25
  //Classes and constants renamed for compatibility with Akismet v3.0 -Helene D. @since v1.9
26
  /**
106
  "\r\n".$request;
107
  $response="";
108
  @fwrite($this->con,$request);
109
+ //don't wait for slow server @since v1.9.1
110
  stream_set_timeout($this->con,5);
111
  $info=stream_get_meta_data($this->con);
112
  while(!feof($this->con) && !$info['timed_out']){
113
  $response .= @fgets($this->con,$responseLength);
114
+ $info=stream_get_meta_data($this->con);
115
  }
116
+ //timeout error message @since v1.9.1
117
  if(!empty($response)){
118
  $response=explode("\r\n\r\n",$response,2);
119
  return $response[1];
189
  }
190
  /** Query Akismet server to check if comment is spam or not */
191
  function isSpam() {
 
192
  $response=$this->http->getResponse($this->_getQueryString(), 'comment-check');
193
  return ($response=="true");
194
  }
lib/compatibility.php CHANGED
@@ -10,16 +10,12 @@
10
  * @since: v1.9.1
11
  * @author: helened <http://helenesit.com>
12
  */
13
- //-------------------------------------------------
14
- //# No direct requests for this plugin module
15
- $wfile=preg_replace('/\\\\/','/',__FILE__); //for windows
16
  //abort if this is direct uri request for file
17
- if((!empty($_SERVER['PHP_SELF']) && preg_match('#'.preg_quote($_SERVER['PHP_SELF']).'$#',$wfile)>0) ||
18
- (!empty($_SERVER['SCRIPT_FILENAME']) && realpath($_SERVER['SCRIPT_FILENAME'])===realpath($wfile))){
19
  //try track this uri request
20
  if(!headers_sent()){
21
  //triggers redirect to 404 error page so Wassup can track this attempt to access itself (original request_uri is lost)
22
- header('Location: /?p=404page&err=wassup403'.'&wf='.basename($wfile));
23
  exit;
24
  }else{
25
  //'wp_die' may be undefined here
@@ -28,8 +24,8 @@ if((!empty($_SERVER['PHP_SELF']) && preg_match('#'.preg_quote($_SERVER['PHP_SELF
28
  exit;
29
  //abort if no WordPress
30
  }elseif(!defined('ABSPATH') || empty($GLOBALS['wp_version'])){
31
- //'wp_die' is undefined here
32
- die("Bad Request: ".htmlspecialchars(preg_replace('/(&#0*37;|&amp;#0*37;|&#0*38;#0*37;|%)(?:[01][0-9A-F]|7F)/i','',$_SERVER['REQUEST_URI'])));
33
  }
34
  //-------------------------------------------------
35
  /**
@@ -46,10 +42,14 @@ function wassup_load_compat_modules(){
46
  if(version_compare($wp_version,'3.1','<')){
47
  if(file_exists($wassup_compatlib.'/compat_wp.php')){
48
  require_once($wassup_compatlib.'/compat_wp.php');
49
- include_once($wassup_compatlib.'/compat_functions.php');
 
 
 
 
 
50
  }else{
51
  $is_compatible=false;
52
- //wp_die("Missing file $wassup_compatlib/compat_wp.php"); //debug
53
  }
54
  }elseif(version_compare($wp_version,'4.5','<')){
55
  if(file_exists($wassup_compatlib.'/compat_functions.php')){
@@ -62,7 +62,6 @@ function wassup_load_compat_modules(){
62
  require_once($wassup_compatlib.'/compat_php.php');
63
  }else{
64
  $is_compatible=false;
65
- //wp_die("Missing file $wassup_compatlib/compat_php.php"); //debug
66
  }
67
  }
68
  }
@@ -81,9 +80,16 @@ function wassup_show_compat_message(){
81
  $php_vers=phpversion();
82
  $wassup_compatlib=WASSUPDIR.'/lib/compat-lib';
83
  $download_link='<a href="https://github.com/michelem09/wassup/releases/tag/v'.WASSUPVERSION.'">GitHub</a>';
84
- if(version_compare($wp_version,'3.1','<') && !file_exists($wassup_compatlib.'/compat_wp.php')){
85
- $msg= __("WARNING! WassUp's backward compatibility modules are missing.","wassup");
86
- $msg .= ' '.sprintf(__('Download and install the full version of Wassup with compatibility library included directly from %s.','wassup'),$download_link);
 
 
 
 
 
 
 
87
  }elseif(version_compare($php_vers,'5.2','<') && !file_exists($wassup_compatlib.'/compat_php.php')){
88
  $msg= __("WARNING! WassUp's PHP compatibility module is missing.","wassup");
89
  $msg .= ' '.sprintf(__('Download and install the full version of Wassup with compatibility library included directly from %s.','wassup'),$download_link);
@@ -95,4 +101,4 @@ function wassup_show_compat_message(){
95
  echo '<div '.$mstyle.'>'.$msg.'</div>';
96
  }
97
  }
98
- unset($wfile); //to free memory
10
  * @since: v1.9.1
11
  * @author: helened <http://helenesit.com>
12
  */
 
 
 
13
  //abort if this is direct uri request for file
14
+ if(!empty($_SERVER['SCRIPT_FILENAME']) && realpath($_SERVER['SCRIPT_FILENAME'])===realpath(preg_replace('/\\\\/','/',__FILE__))){
 
15
  //try track this uri request
16
  if(!headers_sent()){
17
  //triggers redirect to 404 error page so Wassup can track this attempt to access itself (original request_uri is lost)
18
+ header('Location: /?p=404page&werr=wassup403'.'&wf='.basename(__FILE__));
19
  exit;
20
  }else{
21
  //'wp_die' may be undefined here
24
  exit;
25
  //abort if no WordPress
26
  }elseif(!defined('ABSPATH') || empty($GLOBALS['wp_version'])){
27
+ //show escaped bad request on exit
28
+ die("Bad Request: ".htmlspecialchars(preg_replace('/(&#0*37;?|&amp;?#0*37;?|&#0*38;?#0*37;?|%)(?:[01][0-9A-F]|7F)/i','',$_SERVER['REQUEST_URI'])));
29
  }
30
  //-------------------------------------------------
31
  /**
42
  if(version_compare($wp_version,'3.1','<')){
43
  if(file_exists($wassup_compatlib.'/compat_wp.php')){
44
  require_once($wassup_compatlib.'/compat_wp.php');
45
+ //New in v1.9.2: added multisite compatibility check
46
+ if(function_exists('is_multisite') && is_multisite()){
47
+ $is_compatible=false;
48
+ }else{
49
+ include_once($wassup_compatlib.'/compat_functions.php');
50
+ }
51
  }else{
52
  $is_compatible=false;
 
53
  }
54
  }elseif(version_compare($wp_version,'4.5','<')){
55
  if(file_exists($wassup_compatlib.'/compat_functions.php')){
62
  require_once($wassup_compatlib.'/compat_php.php');
63
  }else{
64
  $is_compatible=false;
 
65
  }
66
  }
67
  }
80
  $php_vers=phpversion();
81
  $wassup_compatlib=WASSUPDIR.'/lib/compat-lib';
82
  $download_link='<a href="https://github.com/michelem09/wassup/releases/tag/v'.WASSUPVERSION.'">GitHub</a>';
83
+ if(version_compare($wp_version,'3.1','<')){
84
+ if(!file_exists($wassup_compatlib.'/compat_wp.php')){
85
+ $msg= __("WARNING! WassUp's backward compatibility modules are missing.","wassup");
86
+ $msg .= ' '.sprintf(__('Download and install the full version of Wassup with compatibility library included directly from %s.','wassup'),$download_link);
87
+ }
88
+ //New in v1.9.2: added multisite compatibility message
89
+ //WassUp works only in WP3.1 or higher for multisite
90
+ if(function_exists('is_multisite') && is_multisite()){
91
+ $msg =__("Sorry, WassUp requires WordPress 3.1 or higher to work in multisite setups","wassup");
92
+ }
93
  }elseif(version_compare($php_vers,'5.2','<') && !file_exists($wassup_compatlib.'/compat_php.php')){
94
  $msg= __("WARNING! WassUp's PHP compatibility module is missing.","wassup");
95
  $msg .= ' '.sprintf(__('Download and install the full version of Wassup with compatibility library included directly from %s.','wassup'),$download_link);
101
  echo '<div '.$mstyle.'>'.$msg.'</div>';
102
  }
103
  }
104
+ ?>
lib/main.php CHANGED
@@ -5,29 +5,22 @@
5
  * @package WassUp Real-time Analytics
6
  * @subpackage main.php module
7
  */
8
- //-------------------------------------------------
9
- //# No direct requests for this plugin module
10
- $wfile=preg_replace('/\\\\/','/',__FILE__); //for windows
11
  //abort if this is direct uri request for file
12
- if((!empty($_SERVER['PHP_SELF']) && preg_match('#'.preg_quote($_SERVER['PHP_SELF']).'$#',$wfile)>0) ||
13
- (!empty($_SERVER['SCRIPT_FILENAME']) && realpath($_SERVER['SCRIPT_FILENAME'])===realpath($wfile))){
14
  //try track this uri request
15
  if(!headers_sent()){
16
  //triggers redirect to 404 error page so Wassup can track this attempt to access itself (original request_uri is lost)
17
- header('Location: /?p=404page&err=wassup403'.'&wf='.basename($wfile));
18
  exit;
19
  }else{
20
  //'wp_die' may be undefined here
21
  die('<strong>Sorry. Unable to display requested page.</strong>');
22
  }
23
- exit;
24
  //abort if no WordPress
25
  }elseif(!defined('ABSPATH') || empty($GLOBALS['wp_version'])){
26
  //show escaped bad request on exit
27
- die("Bad Request: ".htmlspecialchars(preg_replace('/(&#0*37;|&amp;#0*37;|&#0*38;#0*37;|%)(?:[01][0-9A-F]|7F)/i','',$_SERVER['REQUEST_URI'])));
28
  }
29
- unset($wfile); //to free memory
30
-
31
  //-------------------------------------------------
32
  if(!class_exists('wassup_pagination')){
33
  /**
@@ -235,11 +228,12 @@ class wDetector{
235
  $browser="";
236
  $version="";
237
  $match=array();
238
- if(strstr($useragent,' Gecko/')==false && preg_match("#^Mozilla\/\d\.\d\s\(Windows\sNT\s\d+(?:\.\d+)?;(?:\s[0-9A-Za-z./]+;)+\srv\:([0-9\.]+)\)#",$useragent,$match)){
239
- $browser="IE";
240
- }elseif(preg_match("#^Mozilla\/[0-9.\s]+\(Windows\s(?:NT|Phone)\s[0-9.]+.+\).+(?:\sChrome|Safari)\/[0-9.]+.+\sEdge\/([0-9\.]+)#",$useragent,$match)){
241
  $browser="Edge";
242
  $version=$match[1];
 
 
 
243
  }elseif(preg_match("/^Mozilla(?:.*)compatible;\sMSIE\s(?:.*)Opera\s([0-9\.]+)/",$useragent,$match)){
244
  $browser = "Opera";
245
  }elseif(preg_match("/^Opera\/([0-9\.]+)/",$useragent,$match)){
@@ -317,7 +311,7 @@ class wDetector{
317
  }elseif(preg_match("/^SonyEricsson([0-9a-zA-Z\-.]+)\/([a-zA-Z0-9\.]+)/i",$useragent,$match)){
318
  $browser="SonyEricsson";
319
  }
320
- if(empty($version) && !empty($match[1]) && preg_match("/^\d+(\.\d+)?/",$match[1],$pcs)>0){ //v1.9.1 bugfix
321
  $version=$pcs[0];
322
  }
323
  $this->browser=$browser;
@@ -641,7 +635,7 @@ function wassup_spiaView ($from_date="",$rows=0,$spytype="",$spy_datasource="")
641
  $flag='<img src="'.WASSUPURL.'/img/flags/'.$locale.'.png" title="'.$flag_title.'" />';
642
  //update language/locale code when different from geoip country code (not us)
643
  if(empty($cv->language) || ($cv->language =="us" && $locale!="us")){
644
- $wassup_dbtask[]=sprintf("UPDATE `$wassup_table` SET `language`='%s' WHERE `wassup_id`='%s' AND `language`='%s'",$locale,$cv->wassup_id,$cv->language); //v1.9.1 bugfix
645
  }
646
  }
647
  }
@@ -2070,7 +2064,7 @@ function wFetchAPIData($api_url) {
2070
  global $wdebug_mode;
2071
  $wassup_agent=apply_filters('http_headers_useragent',"WassUp/".WASSUPVERSION." - www.wpwp.org");
2072
  $apidata=array();
2073
- //v1.9.1 bugfix: timeout now set in http/curl settings, not via 'set_time_limit' which does not apply to remote requests
2074
  //try Wordpress 'wp_remote_get' for api results
2075
  if(function_exists('wp_remote_get')){
2076
  $opts=array('user-agent'=>"$wassup_agent",'timeout'=>5);
5
  * @package WassUp Real-time Analytics
6
  * @subpackage main.php module
7
  */
 
 
 
8
  //abort if this is direct uri request for file
9
+ if(!empty($_SERVER['SCRIPT_FILENAME']) && realpath($_SERVER['SCRIPT_FILENAME'])===realpath(preg_replace('/\\\\/','/',__FILE__))){
 
10
  //try track this uri request
11
  if(!headers_sent()){
12
  //triggers redirect to 404 error page so Wassup can track this attempt to access itself (original request_uri is lost)
13
+ header('Location: /?p=404page&werr=wassup403'.'&wf='.basename(__FILE__));
14
  exit;
15
  }else{
16
  //'wp_die' may be undefined here
17
  die('<strong>Sorry. Unable to display requested page.</strong>');
18
  }
 
19
  //abort if no WordPress
20
  }elseif(!defined('ABSPATH') || empty($GLOBALS['wp_version'])){
21
  //show escaped bad request on exit
22
+ die("Bad Request: ".htmlspecialchars(preg_replace('/(&#0*37;?|&amp;?#0*37;?|&#0*38;?#0*37;?|%)(?:[01][0-9A-F]|7F)/i','',$_SERVER['REQUEST_URI'])));
23
  }
 
 
24
  //-------------------------------------------------
25
  if(!class_exists('wassup_pagination')){
26
  /**
228
  $browser="";
229
  $version="";
230
  $match=array();
231
+ if(strpos($useragent,' Gecko/')>0 && preg_match("#^Mozilla\/[0-9.\s]+\(Windows\s(?:NT|Phone)\s[0-9.]+.+\).+(?:\sChrome|Safari)\/[0-9.]+.+\sEdge\/([0-9\.]+)#",$useragent,$match)){
 
 
232
  $browser="Edge";
233
  $version=$match[1];
234
+ }elseif(preg_match("#^Mozilla\/[0-9.\s]+\(Windows\sNT\s[0-9.]+;.+;\s?rv\:([0-9.]+)\)#",$useragent,$match)){
235
+ $browser="IE";
236
+ $version=$match[1];
237
  }elseif(preg_match("/^Mozilla(?:.*)compatible;\sMSIE\s(?:.*)Opera\s([0-9\.]+)/",$useragent,$match)){
238
  $browser = "Opera";
239
  }elseif(preg_match("/^Opera\/([0-9\.]+)/",$useragent,$match)){
311
  }elseif(preg_match("/^SonyEricsson([0-9a-zA-Z\-.]+)\/([a-zA-Z0-9\.]+)/i",$useragent,$match)){
312
  $browser="SonyEricsson";
313
  }
314
+ if(empty($version) && !empty($match[1]) && preg_match("/^\d+(\.\d+)?/",$match[1],$pcs)>0){
315
  $version=$pcs[0];
316
  }
317
  $this->browser=$browser;
635
  $flag='<img src="'.WASSUPURL.'/img/flags/'.$locale.'.png" title="'.$flag_title.'" />';
636
  //update language/locale code when different from geoip country code (not us)
637
  if(empty($cv->language) || ($cv->language =="us" && $locale!="us")){
638
+ $wassup_dbtask[]=sprintf("UPDATE `$wassup_table` SET `language`='%s' WHERE `wassup_id`='%s' AND `language`='%s'",$locale,$cv->wassup_id,$cv->language);
639
  }
640
  }
641
  }
2064
  global $wdebug_mode;
2065
  $wassup_agent=apply_filters('http_headers_useragent',"WassUp/".WASSUPVERSION." - www.wpwp.org");
2066
  $apidata=array();
2067
+ //timeout now set in http/curl settings, not via 'set_time_limit' which does not apply to remote requests @since v1.9.1
2068
  //try Wordpress 'wp_remote_get' for api results
2069
  if(function_exists('wp_remote_get')){
2070
  $opts=array('user-agent'=>"$wassup_agent",'timeout'=>5);
lib/settings.php CHANGED
@@ -6,28 +6,22 @@
6
  * @subpackage settings.php
7
  * @author helened (http://helenesit.com)
8
  */
9
- //-------------------------------------------------
10
- //# No direct requests for this plugin module
11
- $wfile=preg_replace('/\\\\/','/',__FILE__); //for windows
12
  //abort if this is direct uri request for file
13
- if((!empty($_SERVER['PHP_SELF']) && preg_match('#'.preg_quote($_SERVER['PHP_SELF']).'$#',$wfile)>0) ||
14
- (!empty($_SERVER['SCRIPT_FILENAME']) && realpath($_SERVER['SCRIPT_FILENAME'])===realpath($wfile))){
15
  //try track this uri request
16
  if(!headers_sent()){
17
  //triggers redirect to 404 error page so Wassup can track this attempt to access itself (original request_uri is lost)
18
- header('Location: /?p=404page&err=wassup403'.'&wf='.basename($wfile));
19
  exit;
20
  }else{
21
  //'wp_die' may be undefined here
22
  die('<strong>Sorry. Unable to display requested page.</strong>');
23
  }
24
- exit;
25
  //abort if no WordPress
26
  }elseif(!defined('ABSPATH') || empty($GLOBALS['wp_version'])){
27
  //show escaped bad request on exit
28
- die("Bad Request: ".htmlspecialchars(preg_replace('/(&#0*37;|&amp;#0*37;|&#0*38;#0*37;|%)(?:[01][0-9A-F]|7F)/i','',$_SERVER['REQUEST_URI'])));
29
  }
30
- unset($wfile); //to free memory
31
  //-------------------------------------------------
32
  /**
33
  * Form to change Wassup's wp_option settings and to show plugin info.
@@ -46,9 +40,9 @@ function wassup_optionsView($tab=0) {
46
  $adminemail = get_bloginfo('admin_email');
47
  $wassup_table=$wassup_options->wassup_table;
48
  $wassup_network_settings=array();
49
- //bugfix in v1.9.1: fix wassup-options links for multisite network admin screens
50
  $multisite_whereis="";
51
  $is_shared_table=false;
 
52
  if(is_multisite()){
53
  $wassup_network_settings=get_site_option('wassup_network_settings');
54
  if(!empty($wassup_network_settings['wassup_table'])){
@@ -66,9 +60,11 @@ function wassup_optionsView($tab=0) {
66
  $wassup_options->wassup_remind_flag=$site_settings['wassup_remind_flag'];
67
 
68
  }
 
69
  if(is_network_admin()) $options_link=network_admin_url('admin.php?page=wassup-options');
70
  else $options_link=admin_url('admin.php?page=wassup-options');
71
  }else{
 
72
  $options_link=admin_url('admin.php?page=wassup-options');
73
  }
74
  $wassup_meta_table = $wassup_table . "_meta";
@@ -224,7 +220,7 @@ function wassup_optionsView($tab=0) {
224
  $disabled=' disabled="DISABLED" style="color:#99a;"';
225
  $api_key="";
226
  if ($wassup_options->wassup_geoip_map == 1) {
227
- //New in v1.9.1: Api key IS required for accessing Google!Maps v3
228
  if(!empty($wassup_options->wassup_googlemaps_key)) $api_key=esc_attr(strip_tags(html_entity_decode($wassup_options->wassup_googlemaps_key)));
229
  $disabled="";
230
  } else {
@@ -339,7 +335,7 @@ function wassup_optionsView($tab=0) {
339
  <input type="checkbox" name="wassup_spam" value="1" <?php if($wassup_options->wassup_spam == 1) echo $checked; ?> /> <?php _e('Record Akismet comment spam attempts','wassup');?> (<?php _e('checks IP for previous spam comments','wassup');?>)<br />
340
  <input type="checkbox" name="wassup_refspam" value="1" <?php if($wassup_options->wassup_refspam == 1) echo $checked; ?> /> <?php _e('Record referrer spam attempts','wassup'); ?><br />
341
  <input type="checkbox" name="wassup_hack" value="1" <?php if($wassup_options->wassup_hack == 1) echo $checked; ?> /> <?php _e("Record admin break-in/hacker attempts", "wassup") ?><br />
342
- <input type="checkbox" name="wassup_attack" value="1" <?php if($wassup_options->wassup_attack == 1) echo $checked; ?> /> <?php _e("Record attack/exploit attempts (libwww-perl agent)", "wassup") ?><br />
343
  </span>
344
  </p><br />
345
  <h3><?php _e('Recording Exceptions','wassup');?></h3>
@@ -444,7 +440,7 @@ function wassup_optionsView($tab=0) {
444
  if($tengine !="myisam" && $tengine !="archive"){
445
  $is_optimizable_table=wassupDb::is_optimizable_table($wassup_table);
446
  }
447
- //New in v1.9.1: table optimization and delayed insert options for multisite subsites that are NOT network activated only
448
  if(!$is_shared_table){
449
  echo __("You can cancel automatic optimization by unchecking the box below.","wassup");
450
  }elseif($is_optimizable_table){
6
  * @subpackage settings.php
7
  * @author helened (http://helenesit.com)
8
  */
 
 
 
9
  //abort if this is direct uri request for file
10
+ if(!empty($_SERVER['SCRIPT_FILENAME']) && realpath($_SERVER['SCRIPT_FILENAME'])===realpath(preg_replace('/\\\\/','/',__FILE__))){
 
11
  //try track this uri request
12
  if(!headers_sent()){
13
  //triggers redirect to 404 error page so Wassup can track this attempt to access itself (original request_uri is lost)
14
+ header('Location: /?p=404page&werr=wassup403'.'&wf='.basename(__FILE__));
15
  exit;
16
  }else{
17
  //'wp_die' may be undefined here
18
  die('<strong>Sorry. Unable to display requested page.</strong>');
19
  }
 
20
  //abort if no WordPress
21
  }elseif(!defined('ABSPATH') || empty($GLOBALS['wp_version'])){
22
  //show escaped bad request on exit
23
+ die("Bad Request: ".htmlspecialchars(preg_replace('/(&#0*37;?|&amp;?#0*37;?|&#0*38;?#0*37;?|%)(?:[01][0-9A-F]|7F)/i','',$_SERVER['REQUEST_URI'])));
24
  }
 
25
  //-------------------------------------------------
26
  /**
27
  * Form to change Wassup's wp_option settings and to show plugin info.
40
  $adminemail = get_bloginfo('admin_email');
41
  $wassup_table=$wassup_options->wassup_table;
42
  $wassup_network_settings=array();
 
43
  $multisite_whereis="";
44
  $is_shared_table=false;
45
+ //different wassup-options links for single-site/ multisite @since v1.9.1
46
  if(is_multisite()){
47
  $wassup_network_settings=get_site_option('wassup_network_settings');
48
  if(!empty($wassup_network_settings['wassup_table'])){
60
  $wassup_options->wassup_remind_flag=$site_settings['wassup_remind_flag'];
61
 
62
  }
63
+ //wassup-options link for multisite network admin
64
  if(is_network_admin()) $options_link=network_admin_url('admin.php?page=wassup-options');
65
  else $options_link=admin_url('admin.php?page=wassup-options');
66
  }else{
67
+ //wassup-options link for single-site
68
  $options_link=admin_url('admin.php?page=wassup-options');
69
  }
70
  $wassup_meta_table = $wassup_table . "_meta";
220
  $disabled=' disabled="DISABLED" style="color:#99a;"';
221
  $api_key="";
222
  if ($wassup_options->wassup_geoip_map == 1) {
223
+ //Api key now required for accessing Google!Maps v3 - 2016/06/22
224
  if(!empty($wassup_options->wassup_googlemaps_key)) $api_key=esc_attr(strip_tags(html_entity_decode($wassup_options->wassup_googlemaps_key)));
225
  $disabled="";
226
  } else {
335
  <input type="checkbox" name="wassup_spam" value="1" <?php if($wassup_options->wassup_spam == 1) echo $checked; ?> /> <?php _e('Record Akismet comment spam attempts','wassup');?> (<?php _e('checks IP for previous spam comments','wassup');?>)<br />
336
  <input type="checkbox" name="wassup_refspam" value="1" <?php if($wassup_options->wassup_refspam == 1) echo $checked; ?> /> <?php _e('Record referrer spam attempts','wassup'); ?><br />
337
  <input type="checkbox" name="wassup_hack" value="1" <?php if($wassup_options->wassup_hack == 1) echo $checked; ?> /> <?php _e("Record admin break-in/hacker attempts", "wassup") ?><br />
338
+ <input type="checkbox" name="wassup_attack" value="1" <?php if($wassup_options->wassup_attack == 1) echo $checked; ?> /> <?php echo __("Record attack/exploit attempts", "wassup").' (libwww-perl '.__("or","wassup").' xss in user-agent)';?><br />
339
  </span>
340
  </p><br />
341
  <h3><?php _e('Recording Exceptions','wassup');?></h3>
440
  if($tengine !="myisam" && $tengine !="archive"){
441
  $is_optimizable_table=wassupDb::is_optimizable_table($wassup_table);
442
  }
443
+ //table optimization and delayed insert options for multisite subsites that are NOT network activated only @since v1.9.1
444
  if(!$is_shared_table){
445
  echo __("You can cancel automatic optimization by unchecking the box below.","wassup");
446
  }elseif($is_optimizable_table){
lib/uadetector.class.php CHANGED
@@ -25,29 +25,22 @@
25
  * a) "Name" field is best for statistics collection
26
  * b) "Emulation" field is best for UI customizations.
27
  */
28
- //-------------------------------------------------
29
- //# No direct requests for this plugin module
30
- $wfile=preg_replace('/\\\\/','/',__FILE__); //for windows
31
  //abort if this is direct uri request for file
32
- if((!empty($_SERVER['PHP_SELF']) && preg_match('#'.preg_quote($_SERVER['PHP_SELF']).'$#',$wfile)>0) ||
33
- (!empty($_SERVER['SCRIPT_FILENAME']) && realpath($_SERVER['SCRIPT_FILENAME'])===realpath($wfile))){
34
  //try track this uri request
35
  if(!headers_sent()){
36
  //triggers redirect to 404 error page so Wassup can track this attempt to access itself (original request_uri is lost)
37
- header('Location: /?p=404page&err=wassup403'.'&wf='.basename($wfile));
38
  exit;
39
  }else{
40
  //'wp_die' may be undefined here
41
  die('<strong>Sorry. Unable to display requested page.</strong>');
42
  }
43
- exit;
44
  //abort if no WordPress
45
  }elseif(!defined('ABSPATH') || empty($GLOBALS['wp_version'])){
46
  //show escaped bad request on exit
47
- die("Bad Request: ".htmlspecialchars(preg_replace('/(&#0*37;|&amp;#0*37;|&#0*38;#0*37;|%)(?:[01][0-9A-F]|7F)/i','',$_SERVER['REQUEST_URI'])));
48
  }
49
- unset($wfile); //to free memory
50
-
51
  //-------------------------------------------------
52
  class UADetector {
53
  var $name=''; //browser or spider name, not null
25
  * a) "Name" field is best for statistics collection
26
  * b) "Emulation" field is best for UI customizations.
27
  */
 
 
 
28
  //abort if this is direct uri request for file
29
+ if(!empty($_SERVER['SCRIPT_FILENAME']) && realpath($_SERVER['SCRIPT_FILENAME'])===realpath(preg_replace('/\\\\/','/',__FILE__))){
 
30
  //try track this uri request
31
  if(!headers_sent()){
32
  //triggers redirect to 404 error page so Wassup can track this attempt to access itself (original request_uri is lost)
33
+ header('Location: /?p=404page&werr=wassup403'.'&wf='.basename(__FILE__));
34
  exit;
35
  }else{
36
  //'wp_die' may be undefined here
37
  die('<strong>Sorry. Unable to display requested page.</strong>');
38
  }
 
39
  //abort if no WordPress
40
  }elseif(!defined('ABSPATH') || empty($GLOBALS['wp_version'])){
41
  //show escaped bad request on exit
42
+ die("Bad Request: ".htmlspecialchars(preg_replace('/(&#0*37;?|&amp;?#0*37;?|&#0*38;?#0*37;?|%)(?:[01][0-9A-F]|7F)/i','',$_SERVER['REQUEST_URI'])));
43
  }
 
 
44
  //-------------------------------------------------
45
  class UADetector {
46
  var $name=''; //browser or spider name, not null
lib/upgrade.php CHANGED
@@ -9,29 +9,22 @@
9
  *
10
  * This module is loaded once by the 'wassup_install' hook function when plugin is installed/upgraded.
11
  */
12
- //-------------------------------------------------
13
- //# No direct requests for this plugin module
14
- $wfile=preg_replace('/\\\\/','/',__FILE__); //for windows
15
  //abort if this is direct uri request for file
16
- if((!empty($_SERVER['PHP_SELF']) && preg_match('#'.preg_quote($_SERVER['PHP_SELF']).'$#',$wfile)>0) ||
17
- (!empty($_SERVER['SCRIPT_FILENAME']) && realpath($_SERVER['SCRIPT_FILENAME'])===realpath($wfile))){
18
  //try track this uri request
19
  if(!headers_sent()){
20
  //triggers redirect to 404 error page so Wassup can track this attempt to access itself (original request_uri is lost)
21
- header('Location: /?p=404page&err=wassup403'.'&wf='.basename($wfile));
22
  exit;
23
  }else{
24
  //'wp_die' may be undefined here
25
  die('<strong>Sorry. Unable to display requested page.</strong>');
26
  }
27
- exit;
28
  //abort if no WordPress
29
  }elseif(!defined('ABSPATH') || empty($GLOBALS['wp_version'])){
30
  //show escaped bad request on exit
31
- die("Bad Request: ".htmlspecialchars(preg_replace('/(&#0*37;|&amp;#0*37;|&#0*38;#0*37;|%)(?:[01][0-9A-F]|7F)/i','',$_SERVER['REQUEST_URI'])));
32
  }
33
- unset($wfile); //to free memory
34
-
35
  //-------------------------------------------------
36
  function log_me($message) {
37
  if ( WP_DEBUG === true ) {
@@ -330,7 +323,7 @@ function wassup_createTable($wtable="",$withcharset=true) {
330
  $logged_user = (!empty($current_user->user_login)? $current_user->user_login: "");
331
  $screen_res="";
332
  $sessionhash=$wassup_options->whash;
333
- if(isset($_COOKIE['wassup_screen_res'.$sessionhash])){ //v1.9.1 bugfix
334
  $screen_res=esc_attr(trim($_COOKIE['wassup_screen_res'.$sessionhash]));
335
  if($screen_res == "x") $screen_res="";
336
  }
@@ -487,7 +480,7 @@ function wassup_updateTable($wtable=""){
487
  $dbtask_keys=array();
488
  //Since Wordpress 3.1, 'wassup_createTable' no longer upgrades "wp_wassup" table structure because of an ALTER TABLE error in the "dbDelta" function. @since v1.8.3
489
  //Do table structure upgrades
490
- //New in v1.9.1: skip some upgrade checks when script timeout is small number
491
  if($stimeout >180){
492
  // Upgrade from version < v1.8.4:
493
  // -add 'spam' field to table - v1.3.9
@@ -557,7 +550,7 @@ function wassup_updateTable($wtable=""){
557
  //}
558
  // Upgrade from v1.9:
559
  // -remove all Wassup 1.9 scheduled actions from wp-cron
560
- if(!empty($from_version) && ($from_version=="1.9" || WASSUPVERSION=="1.9.1")){
561
  remove_action('wassup_scheduled_optimize',array('wassupDb','scheduled_dbtask'));
562
  remove_action('wassup_scheduled_dbtasks',array('wassupDb','scheduled_dbtask'));
563
  remove_action('wassup_scheduled_cleanup','wassup_temp_cleanup');
@@ -641,7 +634,7 @@ function wassup_updateTable($wtable=""){
641
  //increase mysql session timeout to 10 minutes for index rebuild
642
  if(is_numeric($mtimeout) && $mtimeout< 600) $result=$wpdb->query("SET wait_timeout=600");
643
  $result=false;
644
- //New in v1.9.1: rebuild wassup_id index first, in case of script timeout
645
  $wkey=$wpdb->get_results(sprintf("SHOW INDEX FROM `%s` WHERE Column_name='wassup_id'",$wassup_table));
646
  if(empty($wkey)) $result=$wpdb->query(sprintf("ALTER TABLE `%s` ADD KEY idx_wassup (wassup_id(32))",$wassup_table));
647
  if($wdebug_mode && !empty($result) && is_wp_error($result)){
@@ -668,7 +661,7 @@ function wassup_updateTable($wtable=""){
668
 
669
  //Do retroactive data updates by version#
670
  //Retroactive data updates are run separately from table structure upgrades (via wp_cron). @since v1.9
671
- //Bugfix in v1.9.1: LOW_PRIORITY in update is strictly for separate cron/ajax processes only..otherwise it will cause long waits when site is busy
672
  $low_priority="LOW_PRIORITY";
673
  if(version_compare($wp_version,'3.0','<')) $low_priority="";
674
  else add_action('wassup_upgrade_dbtasks',array('wassupDb','scheduled_dbtask'),10,1);
9
  *
10
  * This module is loaded once by the 'wassup_install' hook function when plugin is installed/upgraded.
11
  */
 
 
 
12
  //abort if this is direct uri request for file
13
+ if(!empty($_SERVER['SCRIPT_FILENAME']) && realpath($_SERVER['SCRIPT_FILENAME'])===realpath(preg_replace('/\\\\/','/',__FILE__))){
 
14
  //try track this uri request
15
  if(!headers_sent()){
16
  //triggers redirect to 404 error page so Wassup can track this attempt to access itself (original request_uri is lost)
17
+ header('Location: /?p=404page&werr=wassup403'.'&wf='.basename(__FILE__));
18
  exit;
19
  }else{
20
  //'wp_die' may be undefined here
21
  die('<strong>Sorry. Unable to display requested page.</strong>');
22
  }
 
23
  //abort if no WordPress
24
  }elseif(!defined('ABSPATH') || empty($GLOBALS['wp_version'])){
25
  //show escaped bad request on exit
26
+ die("Bad Request: ".htmlspecialchars(preg_replace('/(&#0*37;?|&amp;?#0*37;?|&#0*38;?#0*37;?|%)(?:[01][0-9A-F]|7F)/i','',$_SERVER['REQUEST_URI'])));
27
  }
 
 
28
  //-------------------------------------------------
29
  function log_me($message) {
30
  if ( WP_DEBUG === true ) {
323
  $logged_user = (!empty($current_user->user_login)? $current_user->user_login: "");
324
  $screen_res="";
325
  $sessionhash=$wassup_options->whash;
326
+ if(isset($_COOKIE['wassup_screen_res'.$sessionhash])){
327
  $screen_res=esc_attr(trim($_COOKIE['wassup_screen_res'.$sessionhash]));
328
  if($screen_res == "x") $screen_res="";
329
  }
480
  $dbtask_keys=array();
481
  //Since Wordpress 3.1, 'wassup_createTable' no longer upgrades "wp_wassup" table structure because of an ALTER TABLE error in the "dbDelta" function. @since v1.8.3
482
  //Do table structure upgrades
483
+ //skip some upgrade checks when script timeout is small number @since v1.9.1
484
  if($stimeout >180){
485
  // Upgrade from version < v1.8.4:
486
  // -add 'spam' field to table - v1.3.9
550
  //}
551
  // Upgrade from v1.9:
552
  // -remove all Wassup 1.9 scheduled actions from wp-cron
553
+ if(!empty($from_version) && $from_version=="1.9"){
554
  remove_action('wassup_scheduled_optimize',array('wassupDb','scheduled_dbtask'));
555
  remove_action('wassup_scheduled_dbtasks',array('wassupDb','scheduled_dbtask'));
556
  remove_action('wassup_scheduled_cleanup','wassup_temp_cleanup');
634
  //increase mysql session timeout to 10 minutes for index rebuild
635
  if(is_numeric($mtimeout) && $mtimeout< 600) $result=$wpdb->query("SET wait_timeout=600");
636
  $result=false;
637
+ //rebuild wassup_id index first, in case of script timeout @since v1.9.1
638
  $wkey=$wpdb->get_results(sprintf("SHOW INDEX FROM `%s` WHERE Column_name='wassup_id'",$wassup_table));
639
  if(empty($wkey)) $result=$wpdb->query(sprintf("ALTER TABLE `%s` ADD KEY idx_wassup (wassup_id(32))",$wassup_table));
640
  if($wdebug_mode && !empty($result) && is_wp_error($result)){
661
 
662
  //Do retroactive data updates by version#
663
  //Retroactive data updates are run separately from table structure upgrades (via wp_cron). @since v1.9
664
+ //LOW_PRIORITY in update is strictly for separate cron/ajax processes only..otherwise it will cause long waits when site is busy @since v1.9.1
665
  $low_priority="LOW_PRIORITY";
666
  if(version_compare($wp_version,'3.0','<')) $low_priority="";
667
  else add_action('wassup_upgrade_dbtasks',array('wassupDb','scheduled_dbtask'),10,1);
lib/wassup.class.php CHANGED
@@ -10,28 +10,25 @@
10
  * @subpackage wassup.class.php module
11
  * @author helened <http://helenesit.com>
12
  */
13
- //-------------------------------------------------
14
- //# No direct requests for this plugin module
15
- $wfile=preg_replace('/\\\\/','/',__FILE__); //for windows
16
  //abort if this is direct uri request for file
17
- if((!empty($_SERVER['PHP_SELF']) && preg_match('#'.preg_quote($_SERVER['PHP_SELF']).'$#',$wfile)>0) ||
18
- (!empty($_SERVER['SCRIPT_FILENAME']) && realpath($_SERVER['SCRIPT_FILENAME'])===realpath($wfile))){
 
19
  //try track this uri request
20
  if(!headers_sent()){
21
  //triggers redirect to 404 error page so Wassup can track this attempt to access itself (original request_uri is lost)
22
- header('Location: /?p=404page&err=wassup403'.'&wf='.basename($wfile));
23
  exit;
24
  }else{
25
  //'wp_die' may be undefined here
26
  die('<strong>Sorry. Unable to display requested page.</strong>');
27
  }
28
- exit;
29
  //abort if no WordPress
30
  }elseif(!defined('ABSPATH') || empty($GLOBALS['wp_version'])){
31
  //show escaped bad request on exit
32
- die("Bad Request: ".htmlspecialchars(preg_replace('/(&#0*37;|&amp;#0*37;|&#0*38;#0*37;|%)(?:[01][0-9A-F]|7F)/i','',$_SERVER['REQUEST_URI'])));
33
  }
34
- unset($wfile);
35
  //-------------------------------------------------
36
  if (!class_exists('wassupOptions')) {
37
  /**
@@ -77,8 +74,8 @@ class wassupOptions {
77
  var $wassup_remind_mb = "100";
78
  var $wassup_remind_flag = "1";
79
  var $delayed_insert = "1"; //for use of "Delayed" option in MySQL INSERT command
80
- var $export_spam = "0"; //New in v1.9.1: no spam in exported data
81
- var $export_omit_recid="0"; //New in v1.9.1
82
 
83
  /* chart/map display settings */
84
  var $wassup_dashboard_chart = 0;
@@ -639,7 +636,7 @@ class wassupOptions {
639
  if(function_exists('sanitize_text_field')) $text=sanitize_text_field($input);
640
  else $text=strip_tags(html_entity_decode(wp_kses($input,array())));
641
  //only alphanumeric chars allowed with few exceptions
642
- //v1.9.1 bugfix: allow email '@' char in search field
643
  $cleantext=preg_replace('/([^0-9a-z\-_\.,\:*#@\'" ]+)/i','',$text);
644
  return $cleantext;
645
  }
@@ -772,7 +769,7 @@ class wassupOptions {
772
  }else{
773
  wp_clear_scheduled_hook('wassup_scheduled_purge');
774
  }
775
- //new in v1.9.1: save export options
776
  $this->export_spam=(!empty($_POST['export_spam'])?"1":"0");
777
  $this->export_omit_recid=(!empty($_POST['export_omit_recid'])?"1":"0");
778
  //save optimization timestamp and delayed_insert boolean values @since v1.9
@@ -807,7 +804,7 @@ class wassupOptions {
807
  public function getHostTimezone($getoffset=false){
808
  global $wdebug_mode;
809
  $hostTZ=false;
810
- $hostTimezone=array(); //v1.9.1 bugfix
811
  $is_nix_server=true;
812
  //cannot use 'date' for timezone on Windows
813
  if(defined('PHP_OS') && preg_match('/^win/i',PHP_OS)>0){
@@ -1018,17 +1015,16 @@ class wassupOptions {
1018
  return true;
1019
  } //end _options2class
1020
 
1021
- /** display a system notice or message in admin panel. */
1022
  public function showMessage($message="") {
1023
  global $wp_version,$current_user;
1024
- if(empty($message) && (empty($_GET['page'])|| stristr($_GET['page'],'wassup')!==false)){
1025
- //new in v1.9.1: prioritize user alerts first
1026
- if(!is_object($current_user) || empty($current_user->ID)) wp_get_current_user();
1027
  $wassup_user_settings = get_user_option('_wassup_settings',$current_user->ID);
1028
  if(!empty($wassup_user_settings['ualert_message'])){
1029
  $message=$wassup_user_settings['ualert_message'];
1030
- //v1.9.1 bugfix: user alert cleared after message display
1031
- }elseif(!empty($this->wassup_alert_message)){
1032
  $message=$this->wassup_alert_message;
1033
  }
1034
  }
@@ -1724,7 +1720,7 @@ class wassupDb{
1724
  $wassup_meta_table='`'.$wassup_settings['wassup_table'].'_meta`';
1725
  if(strpos($db_sql,$wassup_table)>0){
1726
  $timestamp=time();
1727
- $last_optimized=self::get_wassupmeta($wassup_table,'_optimize'); //v1.9.1 bugfix
1728
  if(empty($last_optimized) || ($timestamp - $last_optimized)>24*3600){
1729
  //save timestamp to prevent repeat of optimize
1730
  $expire=time()+7*24*3600;
@@ -1926,14 +1922,14 @@ class wassupDb{
1926
  $stimer_start=time();
1927
  $row_count=0;
1928
  $last_recid=0;
1929
- //New in v1.9.1: omit recid from export
1930
  $exclude_id=false;
1931
  if(isset($_REQUEST['omit_recid'])){
1932
  $exclude_id=true;
1933
  }elseif(!empty($wassup_options->export_omit_recid)){
1934
  $exclude_id=true;
1935
  }
1936
- //New in v1.9.1: omit `spam` records from export
1937
  if(empty($wassup_options->export_spam)){
1938
  if(empty($condition)) $condition=" WHERE `spam`='0'";
1939
  else $condition .=" AND `spam`='0'";
@@ -2187,7 +2183,7 @@ class wassupURI {
2187
  }
2188
  return self::cleanURL($outputurl);
2189
  }else{
2190
- return self::cleanURL($inputurl); //v1.9.1 security fix
2191
  }
2192
  }
2193
  /** Return the url and "path" for wordpress site's "home". */
@@ -2231,7 +2227,7 @@ class wassupURI {
2231
  $request=strtolower($urlrequested);
2232
  if(strlen($request)>60) $tooltip=' title="'.self::cleanURL($request).'" ';
2233
  else $tooltip="";
2234
- //New in v1.9.1: no link for spam, 404, wp-admin, wp-login or any possible unidentified spam
2235
  if(!empty($spam) || self::is_xss($urlrequested)){
2236
  $urllink='<span class="malware"'.$tooltip.'>';
2237
  if($chars >0) $urllink .=stringShortener("$urlrequested",round($chars*.9,0));
@@ -2276,7 +2272,7 @@ class wassupURI {
2276
  //referrer from site or site-admin
2277
  if(stristr($referer,$wpurl)==$referer || stristr($referer,$siteurl)==$referer){
2278
  //direct hit when referrer == request
2279
- if(!empty($wrec->urlrequested) && $ref == $siteurl.$wrec->urlrequested){
2280
  $referrerlink='<span>'.__("direct hit","wassup").'</span>';
2281
  }elseif($spam==2 || self::is_xss($ref)){
2282
  //show spam referrers w/o link
@@ -2296,7 +2292,7 @@ class wassupURI {
2296
  //external referrer
2297
  }else{
2298
  $favicon_img="";
2299
- //New in v1.9.1: no link for spam or wp-admin
2300
  if($spam==2 || self::is_xss($ref)){
2301
  $referrerlink='<span class="malware"'.$tooltip.'>'.stringShortener($referer,round($chars*.9,0)).'</span>';
2302
  }elseif($spam >0 || strpos($ref,'http')===false || strpos($ref,'http')>0 || preg_match('/\/wp\-(?:admin|content|includes)\/|\/wp\-login\.php/i',$ref)>0){
10
  * @subpackage wassup.class.php module
11
  * @author helened <http://helenesit.com>
12
  */
 
 
 
13
  //abort if this is direct uri request for file
14
+ $wfile=preg_replace('/\\\\/','/',__FILE__); //for windows
15
+ if((!empty($_SERVER['SCRIPT_FILENAME']) && realpath($_SERVER['SCRIPT_FILENAME'])===realpath($wfile)) ||
16
+ (!empty($_SERVER['PHP_SELF']) && preg_match('#'.str_replace('#','\#',preg_quote($_SERVER['PHP_SELF'])).'$#',$wfile)>0)){
17
  //try track this uri request
18
  if(!headers_sent()){
19
  //triggers redirect to 404 error page so Wassup can track this attempt to access itself (original request_uri is lost)
20
+ header('Location: /?p=404page&werr=wassup403'.'&wf='.basename($wfile));
21
  exit;
22
  }else{
23
  //'wp_die' may be undefined here
24
  die('<strong>Sorry. Unable to display requested page.</strong>');
25
  }
 
26
  //abort if no WordPress
27
  }elseif(!defined('ABSPATH') || empty($GLOBALS['wp_version'])){
28
  //show escaped bad request on exit
29
+ die("Bad Request: ".htmlspecialchars(preg_replace('/(&#0*37;?|&amp;?#0*37;?|&#0*38;?#0*37;?|%)(?:[01][0-9A-F]|7F)/i','',$_SERVER['REQUEST_URI'])));
30
  }
31
+ unset($wfile); //to free memory
32
  //-------------------------------------------------
33
  if (!class_exists('wassupOptions')) {
34
  /**
74
  var $wassup_remind_mb = "100";
75
  var $wassup_remind_flag = "1";
76
  var $delayed_insert = "1"; //for use of "Delayed" option in MySQL INSERT command
77
+ var $export_spam = "0"; //since v1.9.1: no spam in exported data
78
+ var $export_omit_recid="0"; //since v1.9.1
79
 
80
  /* chart/map display settings */
81
  var $wassup_dashboard_chart = 0;
636
  if(function_exists('sanitize_text_field')) $text=sanitize_text_field($input);
637
  else $text=strip_tags(html_entity_decode(wp_kses($input,array())));
638
  //only alphanumeric chars allowed with few exceptions
639
+ //allow email '@' char in search field
640
  $cleantext=preg_replace('/([^0-9a-z\-_\.,\:*#@\'" ]+)/i','',$text);
641
  return $cleantext;
642
  }
769
  }else{
770
  wp_clear_scheduled_hook('wassup_scheduled_purge');
771
  }
772
+ //save export options
773
  $this->export_spam=(!empty($_POST['export_spam'])?"1":"0");
774
  $this->export_omit_recid=(!empty($_POST['export_omit_recid'])?"1":"0");
775
  //save optimization timestamp and delayed_insert boolean values @since v1.9
804
  public function getHostTimezone($getoffset=false){
805
  global $wdebug_mode;
806
  $hostTZ=false;
807
+ $hostTimezone=array();
808
  $is_nix_server=true;
809
  //cannot use 'date' for timezone on Windows
810
  if(defined('PHP_OS') && preg_match('/^win/i',PHP_OS)>0){
1015
  return true;
1016
  } //end _options2class
1017
 
1018
+ /** display a system notice or user message in admin panel. */
1019
  public function showMessage($message="") {
1020
  global $wp_version,$current_user;
1021
+ if(empty($message)){
1022
+ //prioritize user alerts and show anytime
1023
+ if(!is_object($current_user) || empty($current_user->ID)) $user=wp_get_current_user();
1024
  $wassup_user_settings = get_user_option('_wassup_settings',$current_user->ID);
1025
  if(!empty($wassup_user_settings['ualert_message'])){
1026
  $message=$wassup_user_settings['ualert_message'];
1027
+ }elseif(!empty($this->wassup_alert_message) && (empty($_GET['page']) || stristr($_GET['page'],'wassup')!==false)){
 
1028
  $message=$this->wassup_alert_message;
1029
  }
1030
  }
1720
  $wassup_meta_table='`'.$wassup_settings['wassup_table'].'_meta`';
1721
  if(strpos($db_sql,$wassup_table)>0){
1722
  $timestamp=time();
1723
+ $last_optimized=self::get_wassupmeta($wassup_table,'_optimize');
1724
  if(empty($last_optimized) || ($timestamp - $last_optimized)>24*3600){
1725
  //save timestamp to prevent repeat of optimize
1726
  $expire=time()+7*24*3600;
1922
  $stimer_start=time();
1923
  $row_count=0;
1924
  $last_recid=0;
1925
+ //omit recid from export @since v1.9.1
1926
  $exclude_id=false;
1927
  if(isset($_REQUEST['omit_recid'])){
1928
  $exclude_id=true;
1929
  }elseif(!empty($wassup_options->export_omit_recid)){
1930
  $exclude_id=true;
1931
  }
1932
+ //omit `spam` records from export @since v1.9.1
1933
  if(empty($wassup_options->export_spam)){
1934
  if(empty($condition)) $condition=" WHERE `spam`='0'";
1935
  else $condition .=" AND `spam`='0'";
2183
  }
2184
  return self::cleanURL($outputurl);
2185
  }else{
2186
+ return self::cleanURL($inputurl); //security fix
2187
  }
2188
  }
2189
  /** Return the url and "path" for wordpress site's "home". */
2227
  $request=strtolower($urlrequested);
2228
  if(strlen($request)>60) $tooltip=' title="'.self::cleanURL($request).'" ';
2229
  else $tooltip="";
2230
+ //no link for spam, 404, wp-admin, wp-login or any possible unidentified spam @since v1.9.1
2231
  if(!empty($spam) || self::is_xss($urlrequested)){
2232
  $urllink='<span class="malware"'.$tooltip.'>';
2233
  if($chars >0) $urllink .=stringShortener("$urlrequested",round($chars*.9,0));
2272
  //referrer from site or site-admin
2273
  if(stristr($referer,$wpurl)==$referer || stristr($referer,$siteurl)==$referer){
2274
  //direct hit when referrer == request
2275
+ if(!empty($wrec->urlrequested) && ($ref == $siteurl.$wrec->urlrequested || $ref == rtrim($siteurl.$wrec->urlrequested,'/'))){
2276
  $referrerlink='<span>'.__("direct hit","wassup").'</span>';
2277
  }elseif($spam==2 || self::is_xss($ref)){
2278
  //show spam referrers w/o link
2292
  //external referrer
2293
  }else{
2294
  $favicon_img="";
2295
+ //no link for spam or wp-admin
2296
  if($spam==2 || self::is_xss($ref)){
2297
  $referrerlink='<span class="malware"'.$tooltip.'>'.stringShortener($referer,round($chars*.9,0)).'</span>';
2298
  }elseif($spam >0 || strpos($ref,'http')===false || strpos($ref,'http')>0 || preg_match('/\/wp\-(?:admin|content|includes)\/|\/wp\-login\.php/i',$ref)>0){
lib/wassupadmin.php CHANGED
@@ -7,26 +7,23 @@
7
  * @since: v1.9
8
  * @author: helened <http://helenesit.com>
9
  */
10
- //-------------------------------------------------
11
- //# No direct requests for this plugin module
12
- $wfile=preg_replace('/\\\\/','/',__FILE__); //for windows
13
  //abort if this is direct uri request for file
14
- if((!empty($_SERVER['PHP_SELF']) && preg_match('#'.preg_quote($_SERVER['PHP_SELF']).'$#',$wfile)>0) ||
15
- (!empty($_SERVER['SCRIPT_FILENAME']) && realpath($_SERVER['SCRIPT_FILENAME'])===realpath($wfile))){
 
16
  //try track this uri request
17
  if(!headers_sent()){
18
  //triggers redirect to 404 error page so Wassup can track this attempt to access itself (original request_uri is lost)
19
- header('Location: /?p=404page&err=wassup403'.'&wf='.basename($wfile));
20
  exit;
21
  }else{
22
  //'wp_die' may be undefined here
23
  die('<strong>Sorry. Unable to display requested page.</strong>');
24
  }
25
- exit;
26
  //abort if no WordPress
27
  }elseif(!defined('ABSPATH') || empty($GLOBALS['wp_version'])){
28
  //show escaped bad request on exit
29
- die("Bad Request: ".htmlspecialchars(preg_replace('/(&#0*37;|&amp;#0*37;|&#0*38;#0*37;|%)(?:[01][0-9A-F]|7F)/i','',$_SERVER['REQUEST_URI'])));
30
  }
31
  unset($wfile); //to free memory
32
  //-------------------------------------------------
@@ -148,17 +145,19 @@ function wassup_embeded_scripts($wassuppage="") {
148
  if($wrefresh < 0 || $wrefresh >180){
149
  $wrefresh=3; //3 minutes default;
150
  }
151
- //add refresh timer javascripts...
152
  ?>
153
  <script type='text/javascript'>
154
  //<![CDATA[
155
  var paused=" *<?php _e('paused','wassup'); ?>* ";
156
- <?php
157
- if($wrefresh >0){
158
- ?>
159
  var selftimerID=0;
160
  function wassupReload<?php echo $wnonce;?>(wassuploc){if(wassuploc!=="") location.href=wassuploc;}
161
  function wSelfRefresh(){<?php echo $refresh_loc;?>}
 
 
 
 
 
162
  selftimerID=setTimeout('wSelfRefresh()',<?php echo ($wrefresh*60000)+2000;?>);
163
  addLoadEvent(function(){ActivateCountDown("CountDownPanel",<?php echo ($wrefresh*60);?>);});
164
  <?php
@@ -172,7 +171,7 @@ function wassup_embeded_scripts($wassuppage="") {
172
  echo "\n";
173
  //only administrators can delete
174
  if(current_user_can('manage_options')){
175
- //Add nonce to query vars to validate deleteID @since v1.9.1.
176
  $action_param['_wpnonce']=wp_create_nonce('wassupdeleteID-'.$current_user->ID);
177
  //format 'action_param' for ajax post data
178
  $postparams="";
@@ -237,7 +236,8 @@ function wassup_embeded_scripts($wassuppage="") {
237
  }
238
  else{
239
  if(_currentSeconds < 1) timeleft=1000;
240
- selftimerID=setTimeout('wSelfRefresh()',timeleft);tickerID=window.setInterval("CountDownTick()",1000);
 
241
  $(this).css('color','#555');
242
  }
243
  });
@@ -282,9 +282,10 @@ function wassup_embeded_scripts($wassuppage="") {
282
  }elseif($wassuppage=="wassup-spia" || $wassuppage=="wassup-spy"){
283
  // GEO IP Map
284
  //google!Maps map init and marker javascripts in document head @since v1.9
285
- if($wassup_user_settings['spy_map']==1 || !empty($_GET['map'])){
286
- //New in v1.9.1: Wassup api key for Google!maps
287
- $apikey="AIzaSyCu_plin97TltY8Zk6KualGCmRjdF-OXDo";
 
288
  if(!empty($wassup_options->wassup_googlemaps_key)) $apikey=$wassup_options->wassup_googlemaps_key;
289
  echo '<script src="https://maps.googleapis.com/maps/api/js?key='.esc_attr($apikey).'" type="text/javascript"></script>';
290
  } //end if spy_map
@@ -607,7 +608,7 @@ function WassUp() {
607
  //add a select condition for subsite in multisite
608
  $multisite_whereis="";
609
  if(is_multisite()){
610
- //v1.9.1 bugfix for multisite: use table name/optimize setting from network/main site
611
  $network_settings=get_site_option('wassup_network_settings');
612
  if(!empty($network_settings['wassup_table'])){
613
  $multisite_whereis=sprintf(" AND `subsite_id`=%d",$GLOBALS['current_blog']->blog_id);
@@ -727,7 +728,7 @@ function WassUp() {
727
  $wassup_options->wassup_optimize=$last_week;
728
  $wassup_options->saveSettings();
729
  }
730
- //New in v1.9.1: for multisite: reset optimize in main site when plugin is network-activated
731
  if(!empty($network_settings['wassup_table']) && !empty($site_settings['wassup_optimize'])){
732
  if($site_settings['wassup_optimize'] >$last_week){
733
  $site_settings['wassup_optimize']=$last_week;
@@ -748,7 +749,7 @@ function WassUp() {
748
  $wassup_settings=get_option('wassup_settings');
749
  //form input validated and saved in wassupOptions::saveFormChanges() @since v1.9
750
  $admin_message=$wassup_options->saveFormChanges();
751
- //New in v1.9.1: after save, stop scheduled wp-cron tasks when wassup_active is changed to "0" and restart if changed to "1"
752
  if(empty($wassup_options->wassup_active)) wassup_cron_terminate();
753
  elseif(empty($wassup_settings['wassup_active']) && (!is_multisite() || !empty($network_settings['wassup_active']))) wassup_cron_startup();
754
  if(isset($_POST['submit-options'])) $tab=1;
@@ -758,7 +759,7 @@ function WassUp() {
758
  if (!empty($_POST['wassup_uninstall'])) {
759
  $wassup_options->wassup_uninstall="1";
760
  $wassup_options->wassup_active="0"; //disable recording now
761
- //New in v1.9.1: for uninstall, stop all wassup wp-cron tasks
762
  wassup_cron_terminate();
763
  } else {
764
  $wassup_options->wassup_uninstall = "0";
@@ -768,7 +769,7 @@ function WassUp() {
768
  }
769
  $tab=4;
770
  } elseif (isset($_POST['reset-to-default'])) {
771
- //New in v1.9.1: for reset-to-default, stop and restart scheduled wassup wp-cron tasks
772
  wassup_cron_terminate(); //stop wp-cron
773
  $wassup_options->loadDefaults();
774
  if ($wassup_options->saveSettings()) {
@@ -914,8 +915,8 @@ function WassUp() {
914
  function wassup_page_contents($args=array()){
915
  global $wpdb, $wp_version, $current_user, $wassup_options, $wdebug_mode;
916
  if(!empty($args) && is_array($args)) extract($args);
917
- if($wdebug_mode){
918
- $mode_reset=@ini_get('display_errors');
919
  //don't check for 'strict' php5 standards (part of E_ALL since PHP 5.4)
920
  if (defined('PHP_VERSION') && version_compare(PHP_VERSION, 5.4, '<')) @error_reporting(E_ALL);
921
  else @error_reporting(E_ALL ^ E_STRICT); //E_STRICT=php5 only
@@ -973,7 +974,6 @@ function wassup_page_contents($args=array()){
973
  }else{
974
  $wassupmenulink='admin.php?page='.$_GET['page'];
975
  }
976
- //v1.9.1 bugfix: use 'network_admin_url' for network admin links in multisite
977
  $wassuppageurl=wassupURI::get_admin_url($wassupmenulink);
978
  $expcol='
979
  <table width="100%" class="toggle"><tbody><tr>
@@ -1269,7 +1269,6 @@ function wassup_page_contents($args=array()){
1269
  <p style="color:red;font-weight:bold;"><?php _e("WassUp recording is disabled for network.", "wassup");?></p><?php
1270
  }
1271
  }
1272
- //v1.9.1 bugfix: pagination url fixed for 'ml' param and moved below
1273
  $remove_it=array(); //for GET param cleanup
1274
  $stickyFilters=""; //filters that remain in effect after page reloads
1275
  $timenow=current_time('timestamp');
@@ -1448,7 +1447,7 @@ function wassup_page_contents($args=array()){
1448
  if(!empty($ipsearch)) $wsearch=$ipsearch;
1449
  //Clear non-sticky filter parameters from URL before applying new filters
1450
  $URLQuery=trim(html_entity_decode($_SERVER['QUERY_STRING']));
1451
- //New in v1.9.1: replaced "preg_replace" for "remove_it" with 'remove_query_arg' function
1452
  if(!empty($remove_it)){
1453
  $newURL=remove_query_arg($remove_it,$_SERVER['REQUEST_URI']);
1454
  if(!empty($newURL) && $newURL !=$_SERVER['REQUEST_URI'] && preg_match('/[^\?]+\?([A-Za-z\-_]+.*)/',$newURL,$pcs)>0){
@@ -1586,7 +1585,7 @@ function wassup_page_contents($args=array()){
1586
  <div class="search-ip" <?php if (empty($wsearch)) echo 'style="display: none;"'; ?>>
1587
  <form id="wassup-ip-search" class="wassup-search" action="" method="get">
1588
  <input type="hidden" name="page" value="<?php echo $_GET['page'];?>"/><?php
1589
- if(isset($_GET['ml'])){ //v1.9.1 bugfix: add 'ml' query param as hidden input field
1590
  echo "\n";?>
1591
  <input type="hidden" name="ml" value="<?php echo $_GET['ml'];?>"/><?php
1592
  }
@@ -1635,7 +1634,7 @@ function wassup_page_contents($args=array()){
1635
  //monitor for script timeout limit and extend, if needed @since v1.9
1636
  if((time()-$stimer_start) >($stimeout-7)){
1637
  //extend timeout if more than 80% done
1638
- if($witems > $witemstot) $percen=($rkcount/$witemstot)*100; //v1.9.1 bugfix
1639
  else $percen=($rkcount/$witems)*100;
1640
  if($rkcount>0 && $percen >80 && $stimeout >=180 && $can_set_timelimit){
1641
  @set_time_limit($stimeout);
@@ -1768,8 +1767,13 @@ function wassup_page_contents($args=array()){
1768
  echo wassupURI::url_link($rk->urlrequested,$char_len,$rk->malware_type);?></span>
1769
  <span class="det2"><strong><?php
1770
  _e('Referrer','wassup');
1771
- if(empty($rk->searchengine)) $referrer=wassupURI::referrer_link($rk,$char_len);
1772
- else $referrer=wassupURI::se_link($rk,$char_len);?>: </strong><?php print $referrer;?><br />
 
 
 
 
 
1773
  <strong><?php _e('Hostname','wassup');?>:</strong> <?php echo esc_attr($hostname); ?></span>
1774
  </div>
1775
  </div> <!-- /sum-nav -->
7
  * @since: v1.9
8
  * @author: helened <http://helenesit.com>
9
  */
 
 
 
10
  //abort if this is direct uri request for file
11
+ $wfile=preg_replace('/\\\\/','/',__FILE__); //for windows
12
+ if((!empty($_SERVER['SCRIPT_FILENAME']) && realpath($_SERVER['SCRIPT_FILENAME'])===realpath($wfile)) ||
13
+ (!empty($_SERVER['PHP_SELF']) && preg_match('#'.str_replace('#','\#',preg_quote($_SERVER['PHP_SELF'])).'$#',$wfile)>0)){
14
  //try track this uri request
15
  if(!headers_sent()){
16
  //triggers redirect to 404 error page so Wassup can track this attempt to access itself (original request_uri is lost)
17
+ header('Location: /?p=404page&werr=wassup403'.'&wf='.basename($wfile));
18
  exit;
19
  }else{
20
  //'wp_die' may be undefined here
21
  die('<strong>Sorry. Unable to display requested page.</strong>');
22
  }
 
23
  //abort if no WordPress
24
  }elseif(!defined('ABSPATH') || empty($GLOBALS['wp_version'])){
25
  //show escaped bad request on exit
26
+ die("Bad Request: ".htmlspecialchars(preg_replace('/(&#0*37;?|&amp;?#0*37;?|&#0*38;?#0*37;?|%)(?:[01][0-9A-F]|7F)/i','',$_SERVER['REQUEST_URI'])));
27
  }
28
  unset($wfile); //to free memory
29
  //-------------------------------------------------
145
  if($wrefresh < 0 || $wrefresh >180){
146
  $wrefresh=3; //3 minutes default;
147
  }
148
+ //embed refresh javascripts
149
  ?>
150
  <script type='text/javascript'>
151
  //<![CDATA[
152
  var paused=" *<?php _e('paused','wassup'); ?>* ";
 
 
 
153
  var selftimerID=0;
154
  function wassupReload<?php echo $wnonce;?>(wassuploc){if(wassuploc!=="") location.href=wassuploc;}
155
  function wSelfRefresh(){<?php echo $refresh_loc;?>}
156
+ <?php
157
+ //start countdown for refresh
158
+ //v1.9.2 bugfix: moved wrefresh test so 'wassupReload' function is unaffected when wrefresh=0
159
+ if($wrefresh >0){
160
+ ?>
161
  selftimerID=setTimeout('wSelfRefresh()',<?php echo ($wrefresh*60000)+2000;?>);
162
  addLoadEvent(function(){ActivateCountDown("CountDownPanel",<?php echo ($wrefresh*60);?>);});
163
  <?php
171
  echo "\n";
172
  //only administrators can delete
173
  if(current_user_can('manage_options')){
174
+ //add nonce to query vars to validate deleteID @since v1.9.1.
175
  $action_param['_wpnonce']=wp_create_nonce('wassupdeleteID-'.$current_user->ID);
176
  //format 'action_param' for ajax post data
177
  $postparams="";
236
  }
237
  else{
238
  if(_currentSeconds < 1) timeleft=1000;
239
+ selftimerID=setTimeout('wSelfRefresh()',timeleft);
240
+ tickerID=window.setInterval("CountDownTick()",1000);
241
  $(this).css('color','#555');
242
  }
243
  });
282
  }elseif($wassuppage=="wassup-spia" || $wassuppage=="wassup-spy"){
283
  // GEO IP Map
284
  //google!Maps map init and marker javascripts in document head @since v1.9
285
+ if($wassup_user_settings['spy_map']== 1 || !empty($_GET['map'])){
286
+ //check for api key for Google!maps
287
+ //$apikey="AIzaSyCu_plin97TltY8Zk6KualGCmRjdF-OXDo";
288
+ $apikey=base64_decode(urldecode("QUl6YVN5Q3VfcGxpbjk3VGx0WThaazZLdWFsR0NtUmpkRi1PWERv"));
289
  if(!empty($wassup_options->wassup_googlemaps_key)) $apikey=$wassup_options->wassup_googlemaps_key;
290
  echo '<script src="https://maps.googleapis.com/maps/api/js?key='.esc_attr($apikey).'" type="text/javascript"></script>';
291
  } //end if spy_map
608
  //add a select condition for subsite in multisite
609
  $multisite_whereis="";
610
  if(is_multisite()){
611
+ //use table name/optimize setting from network/main site @since v1.9.1
612
  $network_settings=get_site_option('wassup_network_settings');
613
  if(!empty($network_settings['wassup_table'])){
614
  $multisite_whereis=sprintf(" AND `subsite_id`=%d",$GLOBALS['current_blog']->blog_id);
728
  $wassup_options->wassup_optimize=$last_week;
729
  $wassup_options->saveSettings();
730
  }
731
+ //reset optimize in main site when plugin is network-activated @since v1.9.1
732
  if(!empty($network_settings['wassup_table']) && !empty($site_settings['wassup_optimize'])){
733
  if($site_settings['wassup_optimize'] >$last_week){
734
  $site_settings['wassup_optimize']=$last_week;
749
  $wassup_settings=get_option('wassup_settings');
750
  //form input validated and saved in wassupOptions::saveFormChanges() @since v1.9
751
  $admin_message=$wassup_options->saveFormChanges();
752
+ //after save, stop scheduled wp-cron tasks when wassup_active is changed to "0" and restart if changed to "1" @since v1.9.1
753
  if(empty($wassup_options->wassup_active)) wassup_cron_terminate();
754
  elseif(empty($wassup_settings['wassup_active']) && (!is_multisite() || !empty($network_settings['wassup_active']))) wassup_cron_startup();
755
  if(isset($_POST['submit-options'])) $tab=1;
759
  if (!empty($_POST['wassup_uninstall'])) {
760
  $wassup_options->wassup_uninstall="1";
761
  $wassup_options->wassup_active="0"; //disable recording now
762
+ //for uninstall, stop all wassup wp-cron tasks @since v1.9.1
763
  wassup_cron_terminate();
764
  } else {
765
  $wassup_options->wassup_uninstall = "0";
769
  }
770
  $tab=4;
771
  } elseif (isset($_POST['reset-to-default'])) {
772
+ //for reset-to-default, stop and restart scheduled wassup wp-cron tasks @since v1.9.1
773
  wassup_cron_terminate(); //stop wp-cron
774
  $wassup_options->loadDefaults();
775
  if ($wassup_options->saveSettings()) {
915
  function wassup_page_contents($args=array()){
916
  global $wpdb, $wp_version, $current_user, $wassup_options, $wdebug_mode;
917
  if(!empty($args) && is_array($args)) extract($args);
918
+ if ($wdebug_mode) {
919
+ $mode_reset=ini_get('display_errors');
920
  //don't check for 'strict' php5 standards (part of E_ALL since PHP 5.4)
921
  if (defined('PHP_VERSION') && version_compare(PHP_VERSION, 5.4, '<')) @error_reporting(E_ALL);
922
  else @error_reporting(E_ALL ^ E_STRICT); //E_STRICT=php5 only
974
  }else{
975
  $wassupmenulink='admin.php?page='.$_GET['page'];
976
  }
 
977
  $wassuppageurl=wassupURI::get_admin_url($wassupmenulink);
978
  $expcol='
979
  <table width="100%" class="toggle"><tbody><tr>
1269
  <p style="color:red;font-weight:bold;"><?php _e("WassUp recording is disabled for network.", "wassup");?></p><?php
1270
  }
1271
  }
 
1272
  $remove_it=array(); //for GET param cleanup
1273
  $stickyFilters=""; //filters that remain in effect after page reloads
1274
  $timenow=current_time('timestamp');
1447
  if(!empty($ipsearch)) $wsearch=$ipsearch;
1448
  //Clear non-sticky filter parameters from URL before applying new filters
1449
  $URLQuery=trim(html_entity_decode($_SERVER['QUERY_STRING']));
1450
+ //'remove_query_arg' function replaces "preg_replace" to remove args from query string @since v1.9.1
1451
  if(!empty($remove_it)){
1452
  $newURL=remove_query_arg($remove_it,$_SERVER['REQUEST_URI']);
1453
  if(!empty($newURL) && $newURL !=$_SERVER['REQUEST_URI'] && preg_match('/[^\?]+\?([A-Za-z\-_]+.*)/',$newURL,$pcs)>0){
1585
  <div class="search-ip" <?php if (empty($wsearch)) echo 'style="display: none;"'; ?>>
1586
  <form id="wassup-ip-search" class="wassup-search" action="" method="get">
1587
  <input type="hidden" name="page" value="<?php echo $_GET['page'];?>"/><?php
1588
+ if(isset($_GET['ml'])){ //'ml' query param is hidden input field @since v1.9.1
1589
  echo "\n";?>
1590
  <input type="hidden" name="ml" value="<?php echo $_GET['ml'];?>"/><?php
1591
  }
1634
  //monitor for script timeout limit and extend, if needed @since v1.9
1635
  if((time()-$stimer_start) >($stimeout-7)){
1636
  //extend timeout if more than 80% done
1637
+ if($witems > $witemstot) $percen=($rkcount/$witemstot)*100;
1638
  else $percen=($rkcount/$witems)*100;
1639
  if($rkcount>0 && $percen >80 && $stimeout >=180 && $can_set_timelimit){
1640
  @set_time_limit($stimeout);
1767
  echo wassupURI::url_link($rk->urlrequested,$char_len,$rk->malware_type);?></span>
1768
  <span class="det2"><strong><?php
1769
  _e('Referrer','wassup');
1770
+ if(empty($rk->referrer)){
1771
+ $referrer=__("direct hit","wassup");
1772
+ }elseif(empty($rk->searchengine)){
1773
+ $referrer=wassupURI::referrer_link($rk,$char_len);
1774
+ }else{
1775
+ $referrer=wassupURI::se_link($rk,$char_len);
1776
+ }?>: </strong><?php echo $referrer;?><br />
1777
  <strong><?php _e('Hostname','wassup');?>:</strong> <?php echo esc_attr($hostname); ?></span>
1778
  </div>
1779
  </div> <!-- /sum-nav -->
readme.txt CHANGED
@@ -2,9 +2,9 @@
2
  Contributors: michelem, helened
3
  Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_xclick&business=michele%40befree%2eit&item_name=WassUp&no_shipping=0&no_note=1&tax=0&currency_code=EUR&lc=IT&bn=PP%2dDonationsBF&charset=UTF%2d8
4
  Tags: analytics, counter, online, seo, statistics, stats, tracker, traffic, trends, user, visitor, web
5
- Requires at least: 4.0
6
  Tested up to: 4.6.1
7
- Stable tag: 1.9.1
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
@@ -40,7 +40,7 @@ There is a nice Dashboard widget that shows a line chart of hits over time (24 h
40
  * Identify and label new browsers, robots, and feed readers, heuristically.
41
  * Track page requests that generate 404 (not found) redirects.
42
  * Detect some spiders that pretend to be regular visitors/browsers.
43
- * Expose spam and malware activity such as hack attempts, script injection, and xss exploit attempts.&sup1;
44
 
45
  WassUp works with two anti-spam functions to detect and omit (if you want) referrers spammers and comment spammers. It can also detect and omit malware activity such as unauthorized users' login attempts, script injection, and xss exploit attempts.
46
 
@@ -69,7 +69,7 @@ For people with database size limitations, WassUp has a few options to manage th
69
  * usage chart (Google!chart)
70
  * top stats lists with aggregate data (top queries, requests, os, browsers)
71
 
72
- = There are many options to customize how WassUp tracks and displays data: =
73
  * Enable/Disable recording (tracking)
74
  * Screen refresh frequency (minutes)
75
  * Screen resolution (browser width)
@@ -82,14 +82,21 @@ For people with database size limitations, WassUp has a few options to manage th
82
  * Record or not referrer spammers
83
  * registered users to exclude from recording
84
  * IP or hostname to exclude from recording
85
- * Email alert for table growth
86
- * Auto delete of old records
 
 
 
 
 
 
87
 
88
  = _____________________________________ =
89
  = IMPORTANT NOTICES =
90
- * To run Wassup in Wordpress 2.2 - 3.7, you must install the full copy of Wassup with backward-compatibility feature available at [http://github.com/michelem09/wassup/](http://github.com/michelem09/wassup/)
 
91
  * WassUp is incompatible with static page caching plugins such as "WP Super-Cache"
92
- * &sup1;WassUp is NOT a security plugin. It does not block unwanted visitors nor protect your site from malware attempts. You need a separate security plugin for that
93
 
94
  == Frequently Asked Questions ==
95
 
@@ -222,63 +229,61 @@ When you activate this plugin (as described in "Installation"), it works "as is"
222
  * WassUp is incompatible with the following static page caching plugins: [WP Super Cache], [WP Cache] and [WP Hyper Cache].
223
 
224
  == Upgrade Notice ==
225
- = 1.9.1 =
226
- * Critical security, compatibility and bugfix upgrade.
227
- 64MB memory is now required for Wassup! See [codex document "Editing wp-config.php"](https://codex.wordpress.org/Editing_wp-config.php#Increasing_memory_allocated_to_PHP) to increase memory allocated to Wordpress before upgrading.
228
- DO NOT UPGRADE when your site busy! Read [installation instructions](http://wordpress.org/plugins/wassup/installation/) for safe upgrade instructions.
229
 
230
  == Changelog ==
231
- = 1.9.1 =
 
 
 
 
 
 
 
 
 
 
 
 
232
  = Critical security, compatibility, and bugfix upgrade =
233
- * patched security loopholes (xss vulnerability) in the 'Top stats' widget and in `wassupURI::add_siteurl` method
234
- * revised plugin code to improve prevention of XSS attacks via it's interface and widgets
235
- * revised plugin code to comply with the latest requirements for inclusion in Wordpress.org plugin repository
236
- * revised 'readme.txt' to comply with Wordpress.org plugin repository guidelines.
237
  * new module, 'wassupadmin.php' for WassUp admin panels and dashboard widget
238
  * new module, 'compatibility.php' to check for Wordpress and PHP compatibility and to load compatibility modules from `/lib/compat-lib/` subfolder when available
239
- * removed backward compatibility folder, modules, and javascripts from Wordpress's copy of Wassup package to comply with Wordpress plugin repository requirements.
240
  Wassup's backward-compatibility feature remains in the full copy of Wassup available at [http://github.com/michelem09/wassup/](http://github.com/michelem09/wassup/)
241
- * removed obsolete files 'badhosts.txt', 'badhosts-intl.txt'
242
  * updated Google!Maps API link to use a common API key for Wassup-Spy (required by Google since 2016-06-22).
243
  * updated WassUp 'wp-cron' scheduled tasks to terminate (and restart) at reset-to-default, recording stop/start, and at plugin deactivate/reactivate events.
244
  * updated Wassup table export to omit all known spam/malware records from export by default...to avoid propagation of malware code when exported records are imported into other applications.
245
- * updated `wassup_Akismet` class to abort remote requests with timeout error after 5 seconds to avoid plugin slowdown due to slow server response.
246
- * updated 'UADetector' and 'wDetector' classes to improve browser and os detection (Microsoft Edge, Win10).
247
  * updated translation template, 'wassup.pot'.
248
  * fixed problem with login page hits not being recorded.
249
  * fixed errors caused by disabled 'set_time_limit' function in some configurations.
250
- * fixed a 'preg_match' error that affected 404 and spam detection.
251
- * fixed a "script timeout" calculation/test error in Visitor-details.
252
- * fixed incorrect Wassup menu "href" values in network admin panels.
253
- * fixed a MySQL timezone/offset calculation error in some queries.
254
- * fixed a scheduled task validation error that caused some wp-cron tasks to fail.
255
- * miscellaneous minor bugfixes.
256
- * miscellaneous minor text changes
257
  * minor css changes for small screen devices.
258
 
259
  = v1.9 =
260
  = Important compatibility and feature improvement upgrade =
261
- * new caching of MySQL expensive queries to improve plugin performance
262
- * new options for improved MySQL table management
263
- * new multisite network compatibility feature added
264
- * new and improved aside widgets with multi-widget capability
265
- * new tracking filters to exclude some automated requests and to add wildcard filtering by hostnames and ip
266
  * new "FAQ" and "Donate" panels in Wassup-Options submenu
267
  * new "top stats" popup-window in Visitor Details panel
268
- * updated code for Wordpress 4.x, PHP 5.6-mysqli compatibility, and Akismet 3.0 plugin compatibility
269
- * updated plugin security with more input validation, deprecated functions removal, and escaped output
270
- * updated javascripts libraries, `jquery.js`,`jquery-ui.js` and added jquery-migrate.js and wassup.js
271
  * updated css and validated as 100% W3C CSS3 compliant
272
  * updated browser and os detection for new agents (Win10)
273
  * updated translation template (wassup.pot)
274
  * updated "readme.txt"
275
- * fixed search engine referrer data to substitute "not provided" for missing keywords from secure searches (https-to-http omission)
276
- * fixed a fatal error in Wassup-options caused by disabled PHP functions in some host configurations
277
- * fixed a bug in Wassup-options that caused table export to fail
278
- * fixed an activation failure problem in `upgrade.php` that occurred in some host configurations
279
  * 3 new classes added to code: `wassupDb` for MySQL table operations and caching, `wassupURI` to format and clean urls/links for safe output, and `Wassup_Widget` a base widget for building Wassup widgets
280
- * minor text changes
281
- * minor bugfixes
282
 
283
  = v1.8.6 =
284
  * Removed deprecated Wordpress methods, minor text changes.
2
  Contributors: michelem, helened
3
  Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_xclick&business=michele%40befree%2eit&item_name=WassUp&no_shipping=0&no_note=1&tax=0&currency_code=EUR&lc=IT&bn=PP%2dDonationsBF&charset=UTF%2d8
4
  Tags: analytics, counter, online, seo, statistics, stats, tracker, traffic, trends, user, visitor, web
5
+ Requires at least: 4.0
6
  Tested up to: 4.6.1
7
+ Stable tag: 1.9.2
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
40
  * Identify and label new browsers, robots, and feed readers, heuristically.
41
  * Track page requests that generate 404 (not found) redirects.
42
  * Detect some spiders that pretend to be regular visitors/browsers.
43
+ * Expose spam and malware activity such as hack attempts, script injection, and xss exploit attempts.
44
 
45
  WassUp works with two anti-spam functions to detect and omit (if you want) referrers spammers and comment spammers. It can also detect and omit malware activity such as unauthorized users' login attempts, script injection, and xss exploit attempts.
46
 
69
  * usage chart (Google!chart)
70
  * top stats lists with aggregate data (top queries, requests, os, browsers)
71
 
72
+ = There are many options to customize how data is tracked and displayed: =
73
  * Enable/Disable recording (tracking)
74
  * Screen refresh frequency (minutes)
75
  * Screen resolution (browser width)
82
  * Record or not referrer spammers
83
  * registered users to exclude from recording
84
  * IP or hostname to exclude from recording
85
+
86
+ = There are tools to monitor and control Wassup's table growth: =
87
+ * Empty table, manually
88
+ * Delete old records, manually
89
+ * Setup automatic delete of old records
90
+ * Send an e-mail notice when table exceeds a preset size limit
91
+ * Export table in SQL format
92
+ * Database and server settings infos.
93
 
94
  = _____________________________________ =
95
  = IMPORTANT NOTICES =
96
+ * Wassup is compatible with Wordpress 4.0+ and PHP 5.2+
97
+ * To run Wassup with Wordpress 2.2 - 3.9 or with PHP 4.3 - 5.1, you must install the full copy of Wassup with backward-compatibility feature available at [http://github.com/michelem09/wassup/](http://github.com/michelem09/wassup/)
98
  * WassUp is incompatible with static page caching plugins such as "WP Super-Cache"
99
+ * WassUp is NOT a security plugin. It does not block unwanted visitors nor protect your site from malware attempts. You need a separate security plugin for that
100
 
101
  == Frequently Asked Questions ==
102
 
229
  * WassUp is incompatible with the following static page caching plugins: [WP Super Cache], [WP Cache] and [WP Hyper Cache].
230
 
231
  == Upgrade Notice ==
232
+ = 1.9.2 =
233
+ * Urgent bugfix upgrade. DO NOT UPGRADE when your site busy! Read [installation instructions](http://wordpress.org/plugins/wassup/installation/) for safe upgrade instructions.
 
 
234
 
235
  == Changelog ==
236
+ = v1.9.2 =
237
+ = Urgent bugfix upgrade =
238
+ * fixed fatal error on `wassup_options::is_recording_active` that occurred in some configurations
239
+ * fixed erroneous 'hack attempt' labels that occurred on sites without permalinks
240
+ * fixed a refresh timer bug that disabled dropdown selections in Visitor Details when refresh setting is 0.
241
+ * fixed a debug_mode bug that caused error notices to show as output for Wassup ajax action
242
+ * new functions(2) to reset error display in debug_mode
243
+ * improved spider detection.
244
+ * updated "compatibility.php" module for multisite compatibility tests
245
+ * miscellaneous minor bug fixes
246
+ * miscellaneous minor code changes.
247
+
248
+ = v1.9.1 =
249
  = Critical security, compatibility, and bugfix upgrade =
250
+ * patched security loopholes (xss vulnerability) in the 'Top stats' widget and in `wassupURI::add_siteurl` method (in Visitor Details/Online)
251
+ * improved security against xss attacks on interface and widgets.
252
+ * improved compliance with the latest Wordpress.org plugin repository guidelines.
253
+ * improved browser/os detection.
254
  * new module, 'wassupadmin.php' for WassUp admin panels and dashboard widget
255
  * new module, 'compatibility.php' to check for Wordpress and PHP compatibility and to load compatibility modules from `/lib/compat-lib/` subfolder when available
256
+ * removed backward compatibility modules ('/lib/compat-lib/') and features from Wordpress repository.
257
  Wassup's backward-compatibility feature remains in the full copy of Wassup available at [http://github.com/michelem09/wassup/](http://github.com/michelem09/wassup/)
258
+ * deleted obsolete files ('badhosts.txt','badhosts-intl.txt') and javascripts
259
  * updated Google!Maps API link to use a common API key for Wassup-Spy (required by Google since 2016-06-22).
260
  * updated WassUp 'wp-cron' scheduled tasks to terminate (and restart) at reset-to-default, recording stop/start, and at plugin deactivate/reactivate events.
261
  * updated Wassup table export to omit all known spam/malware records from export by default...to avoid propagation of malware code when exported records are imported into other applications.
 
 
262
  * updated translation template, 'wassup.pot'.
263
  * fixed problem with login page hits not being recorded.
264
  * fixed errors caused by disabled 'set_time_limit' function in some configurations.
265
+ * miscellaneous bugfixes.
266
+ * miscellaneous text changes
 
 
 
 
 
267
  * minor css changes for small screen devices.
268
 
269
  = v1.9 =
270
  = Important compatibility and feature improvement upgrade =
271
+ * improved MySQL performance and table management
272
+ * improved tracking filters.
273
+ * improved security with more input validation, deprecated function removal and escaped output.
274
+ * new multisite network capability.
275
+ * new multi-widget capability in widgets.
276
  * new "FAQ" and "Donate" panels in Wassup-Options submenu
277
  * new "top stats" popup-window in Visitor Details panel
278
+ * updated code for Wordpress 4/PHP 5.6-mysqli compatibility
279
+ * updated internal javascripts libaries.
 
280
  * updated css and validated as 100% W3C CSS3 compliant
281
  * updated browser and os detection for new agents (Win10)
282
  * updated translation template (wassup.pot)
283
  * updated "readme.txt"
 
 
 
 
284
  * 3 new classes added to code: `wassupDb` for MySQL table operations and caching, `wassupURI` to format and clean urls/links for safe output, and `Wassup_Widget` a base widget for building Wassup widgets
285
+ * miscellaneous minor text changes
286
+ * miscellaneous minor bugfixes
287
 
288
  = v1.8.6 =
289
  * Removed deprecated Wordpress methods, minor text changes.
wassup.php CHANGED
@@ -3,7 +3,7 @@
3
  Plugin Name: WassUp Real Time Analytics
4
  Plugin URI: http://www.wpwp.org
5
  Description: Analyze your website traffic with accurate, real-time stats, live views, visitor counts, top stats, IP geolocation, customizable tracking, and more. For Wordpress 2.2+
6
- Version: 1.9.1
7
  Author: Michele Marcucci, Helene Duncker
8
  Author URI: http://www.michelem.org/
9
  Text Domain: wassup
@@ -24,23 +24,22 @@ Disclaimer:
24
  //# No direct requests for plugin file "wassup.php"
25
  $wassupfile=preg_replace('/\\\\/','/',__FILE__); //for windows
26
  //abort if this is direct request for file
27
- if((!empty($_SERVER['PHP_SELF']) && preg_match('#'.preg_quote($_SERVER['PHP_SELF']).'$#',$wassupfile)>0) ||
28
- (!empty($_SERVER['SCRIPT_FILENAME']) && realpath($_SERVER['SCRIPT_FILENAME'])===realpath($wassupfile))){
29
  //try track this uri request for "wassup.php"
30
  if(!headers_sent()){
31
  //can't track 403-forbidden, so use 404 instead
32
  //location value triggers redirect to WordPress' 404 error page so Wassup can track this attempt to access itself (original uri request is lost)
33
- header('Location: /?p=404page&err=wassup403'.'&wf='.basename($wassupfile));
34
  exit;
35
  }else{
36
  //'wp_die' is undefined here
37
  die('<strong>Sorry. Unable to display requested page.</strong>');
38
  }
39
- exit;
40
  //abort if no WordPress
41
  }elseif(!defined('ABSPATH') || empty($GLOBALS['wp_version'])){
42
  //'wp_die' is undefined here
43
- die("Bad Request: ".htmlspecialchars(preg_replace('/(&#0?37;|&amp;#0?37;|&#0?38;#0?37;|%)(?:[01][0-9A-F]|7F)/i','',$_SERVER['REQUEST_URI'])));
44
  }
45
  //-------------------------------------------------
46
  //### Setup and startup functions
@@ -51,13 +50,27 @@ if((!empty($_SERVER['PHP_SELF']) && preg_match('#'.preg_quote($_SERVER['PHP_SELF
51
  function wassup_init($init_settings=false){
52
  global $wp_version,$wassup_options,$wdebug_mode;
53
  //define wassup globals & constants
54
- define('WASSUPVERSION','1.9.1');
55
- define('WASSUPDIR', dirname(preg_replace('/\\\\/','/',__FILE__)));
 
 
56
  //turn on debugging (global)...Use cautiously! Will display errors from all plugins, not just WassUp
57
- if(!isset($GLOBALS['wdebug_mode'])) $wdebug_mode=false;
58
  if(defined('WP_DEBUG') && WP_DEBUG==true) $wdebug_mode=true;
 
 
 
 
 
 
 
 
 
 
 
 
 
59
  //load language translation
60
- //v1.9.1 bugfix: current_locale now defined before referenced
61
  if(empty($GLOBALS['locale']) || strlen($GLOBALS['locale'])>5) $current_locale=get_locale();
62
  else $current_locale=$GLOBALS['locale'];
63
  if(!empty($current_locale)){
@@ -93,7 +106,15 @@ function wassup_init($init_settings=false){
93
  }else{
94
  //Load existing wassup wp_option settings, if any
95
  $wassup_settings=get_option('wassup_settings');
96
- if(count($wassup_settings)>1 && !empty($wassup_settings['wassup_version'])) $wassup_options=new wassupOptions;
 
 
 
 
 
 
 
 
97
  }
98
  }else{
99
  if(function_exists('is_network_admin') && is_network_admin()){
@@ -102,6 +123,10 @@ function wassup_init($init_settings=false){
102
  add_action('admin_notices','wassup_show_compat_message');
103
  }
104
  }
 
 
 
 
105
  return $is_compatible;
106
  } //end wassup_init
107
 
@@ -118,9 +143,12 @@ function wassup_init($init_settings=false){
118
  */
119
  function wassup_install($network_wide=false) {
120
  global $wpdb,$wp_version,$wassup_options;
121
- //first check Wordpress compatibility
 
 
 
122
  if(!defined('WASSUPURL')){
123
- if(!wassup_init()){
124
  wassup_show_compat_message();
125
  exit(1);
126
  }
@@ -133,23 +161,17 @@ function wassup_install($network_wide=false) {
133
  exit(1);
134
  }
135
  //initialize/update wassup_settings in wp_options
136
- $wassup_settings=get_option('wassup_settings');
137
- $wassup_options=new wassupOptions(true);
138
- $wassup_network_settings=array();
 
139
  if(is_multisite()){
140
- //WassUp works only in WP3.1 or higher for multisite
141
- if(version_compare($wp_version,'3.1','<')){
142
- echo __("Sorry, WassUp requires WordPress 3.1 or higher to work in multisite setups","wassup");
143
- exit(1);
144
- }
145
- //network-wide settings for multisite @since v1.9
146
  if(is_network_admin()){
147
  $network_wide=true;
148
- //For multisite..no network activation in subdomain networks, subdomain sites must activate Wassup separately @TODO
149
  if(is_subdomain_install()){
150
- //New in v1.9.1: echoed long message is NOT showing in network activation error message since Wordpress 4.6.1
151
- //echo $err;
152
- //exit(1);
153
  $err = __("Sorry! \"Network Activation\" is DISABLED for subdomain networks.","wassup");
154
  $err .= ' '.sprintf(__("%s must be activated on each subdomain site separately.","wassup"),'<strong>Wassup Plugin</strong>');
155
  $err .=' <br/>'.__("Activate plugin on your parent domain (main site) to set default options for your network.","wassup");
@@ -169,7 +191,7 @@ function wassup_install($network_wide=false) {
169
  //set table names
170
  //reset Wassup table name if wpdb prefix has changed @since v1.9
171
  if(empty($wassup_options->wassup_table) || !wassupDb::table_exists($wassup_options->wassup_table)){
172
- if($network_wide){ //v1.9.1 bugfix
173
  if(empty($wassup_network_settings['wassup_table']) || !wassupDb::table_exists($wassup_network_settings['wassup_table'])) $wassup_table=$wpdb->base_prefix . "wassup";
174
  else $wassup_table= $wassup_network_settings['wassup_table'];
175
  }else{
@@ -180,15 +202,16 @@ function wassup_install($network_wide=false) {
180
  }
181
  $wassup_meta_table=$wassup_table."_meta";
182
  $wassup_options->wassup_table=$wassup_table;
183
- //v1.9.1 bugfix: for upgrade, temporarily turn off Wassup recording ('wassup_active'=0)
 
184
  $active_status=1;
185
  if(!empty($wassup_settings)){
186
  //save current 'wassup_active' setting prior to upgrade for later restore
187
  $active_status=$wassup_settings['wassup_active'];
188
- if($network_wide && !empty($wassup_network_settings['wassup_active'])){ //v1.9.1 multisite bugfix
189
  $wassup_network_settings['wassup_active']="0";
190
  update_site_option('wassup_network_settings',$wassup_network_settings);
191
- }elseif(!empty($active_status)){ //v1.9.1 bugfix
192
  $wassup_options->wassup_active="0";
193
  $wassup_options->saveSettings();
194
  }
@@ -205,7 +228,7 @@ function wassup_install($network_wide=false) {
205
  //increase script timeout to 16 minutes to prevent activation failure due to script timeout (browser timeout can still occur)
206
  $stimeout=ini_get("max_execution_time");
207
  if(is_numeric($stimeout) && $stimeout>0 && $stimeout < 990){
208
- //v1.9.1 bugfix: check for 'set_time_limit' in disabled functions before changing script timeout
209
  $disabled_funcs=ini_get('disable_functions');
210
  if((empty($disabled_funcs) || strpos($disabled_funcs,'set_time_limit')===false) && !ini_get('safe_mode')){
211
  @set_time_limit(990);
@@ -241,7 +264,7 @@ function wassup_install($network_wide=false) {
241
  update_site_option('wassup_network_settings',$wassup_network_settings);
242
  }
243
  //update site settings
244
- //New in v1.9.1: check the upgrade timestamp to prevent repeat of 'wassup_settings_install()' (runs in 'upgrade.php')
245
  if(empty($wassup_options->wassup_upgraded) || ((int)time() - (int)$wassup_options->wassup_upgraded) >180){
246
  wassup_settings_install($wassup_table);
247
  }
@@ -307,7 +330,7 @@ function wassup_uninstall($network_wide=false){
307
  foreach($subsite_ids as $subsite_id){
308
  if($network_wide) switch_to_blog($subsite_id);
309
  $wassup_settings = get_option('wassup_settings');
310
- //first, stop recording (when plugin still running)
311
  if(!$network_wide && !empty($wassup_settings['wassup_active'])){
312
  $wassup_settings['wassup_active']="0";
313
  update_option('wassup_settings',$wassup_settings);
@@ -359,7 +382,9 @@ function wassup_uninstall($network_wide=false){
359
  $dropped=$wpdb->query("DROP TABLE IF EXISTS $table_meta_name");
360
  $dropped=$wpdb->query("DROP TABLE IF EXISTS $table_tmp_name");
361
  $dropped=$wpdb->query("DROP TABLE IF EXISTS $wassup_table");
362
- }else{
 
 
363
  //"if exists" in wpdb::query caused error in early versions of Wordpress
364
  if($wpdb->get_var(sprintf("SHOW TABLES LIKE '%s'",like_escape($table_meta_name)))==$table_meta_name){
365
  $dropped=$wpdb->query("DROP TABLE $table_meta_name");
@@ -367,9 +392,7 @@ function wassup_uninstall($network_wide=false){
367
  if($wpdb->get_var(sprintf("SHOW TABLES LIKE '%s'",like_escape($table_tmp_name)))==$table_tmp_name){
368
  $dropped=$wpdb->query("DROP TABLE $table_tmp_name");
369
  }
370
- if($wpdb->get_var(sprintf("SHOW TABLES LIKE '%s'",like_escape($wassup_table)))==$wassup_table){
371
- $dropped=$wpdb->query("DROP TABLE $wassup_table");
372
- }
373
  }
374
  //delete settings from wp_option and wp_usermeta tables
375
  delete_option('wassup_settings');
@@ -391,7 +414,7 @@ function wassup_uninstall($network_wide=false){
391
  }
392
  } //end wassup_uninstall
393
 
394
- /** Stop Wassup wp-ajax and wp-cron on deactivation. @since v1.9 */
395
  function wassup_deactivate(){
396
  global $wp_version;
397
  //wp-ajax action may persist, so remove it
@@ -420,43 +443,43 @@ function wassup_deactivate(){
420
  function wassup_start(){
421
  //startup wassup
422
  add_action('init','wassup_preload',11);
423
- add_action('login_init','wassup_preload',11); //separate action needed
424
  add_action('admin_init','wassup_admin_preload',11);
425
  add_action('plugins_loaded','wassup_load');
426
  }
427
 
428
  /**
429
  * Perform plugin tasks for before http headers are sent.
430
- * -block obvious sql injection attempts on Wassup
431
  * -initialize new network subsite settings (via 'wassup_init'), if any
432
  * -add hooks for wp_ajax, wp_login, and wp_cron actions
433
  * -start wassup tracking
434
  */
435
  function wassup_preload(){
436
- global $wp_version,$wassup_options,$wdebug_mode;
437
-
438
  //block any obvious sql injection attempts involving WassUp
439
  $request_uri=$_SERVER['REQUEST_URI'];
440
  if(!$request_uri) $request_uri=$_SERVER['SCRIPT_NAME']; // IIS
441
- if(strstr($request_uri,'&err=wassup403')===false && (stristr($request_uri,'wassup')!==false || (isset($_SERVER['HTTP_REFERER']) && stristr($_SERVER['HTTP_REFERER'],'wassup')!==false))){
 
442
  $error_msg="";
443
- if((empty($wassup_options) || !$wassup_options->is_admin_login()) && preg_match('/[&?].+\=(\-(1|9)+|.*(select|update|delete|alter|drop|union|create)[ %&].*(?:from)?.*wp_\w+)/i',str_replace(array('\\','&#92;','"','%22','&#34;','&quot;','&#39;','\'','`','&#96;'),'',$request_uri))>0){
444
- $error_msg=__('Bad request!','wassup');
445
- if($wdebug_mode) $error_msg .=" special chars not allowed.";
446
- }elseif(preg_match('/(<|&lt;|&#60;|%3C)script[^a-z0-9]/i',$request_uri)>0){
447
- $error_msg=__('Bad request!','wassup');
448
- if($wdebug_mode) $error_msg .=" xss scripts not allowed.";
449
- }elseif(empty($_SERVER['HTTP_USER_AGENT'])){
450
- $error_msg=__('Bad request!','wassup');
451
- if($wdebug_mode) $error_msg .=" empty user-agent.";
452
  }
453
  //abort bad requests
454
  if(!empty($error_msg)){
455
  if($wdebug_mode){
456
- wp_die($error_msg.' :'.esc_attr(preg_replace('/(&#0?37;|&amp;#0?37;|&#0?38;#0?37;|%)(?:[01][0-9A-F]|7F)/i','---',$_SERVER['REQUEST_URI'])));
457
  }
458
  //redirect bad requests to 404 error page
459
- if(!headers_sent()) header('Location: /?p=404page&err=wassup403');
460
  else wp_die($error_msg);
461
  exit;
462
  }
@@ -470,9 +493,19 @@ function wassup_preload(){
470
  return;
471
  }
472
  }
 
 
 
 
 
 
 
 
 
 
473
  //reset wassup user settings at login @since v1.9
474
  add_action('wp_login',array($wassup_options,'resetUserSettings'),9,2);
475
- //New in v1.9.1: assign action handler for wp-ajax operations
476
  if(!function_exists('wassup_action_handler')){
477
  require_once(WASSUPDIR .'/lib/action.php');
478
  }
@@ -483,7 +516,7 @@ function wassup_preload(){
483
  wassup_compat_preload();
484
  }
485
  //Start visitor tracking
486
- if($wassup_options->is_recording_active()){ //v1.9.1 bugfix for multisite
487
  //add actions for wp-cron scheduled tasks - @since v1.9
488
  if(!has_action('wassup_scheduled_dbtasks')) add_action('wassup_scheduled_dbtasks',array('wassupDb','scheduled_dbtask'),10,1);
489
  if(!is_multisite() || is_main_site() || !$wassup_options->network_activated_plugin()){
@@ -496,6 +529,10 @@ function wassup_preload(){
496
  }
497
  wassupPrepend();
498
  }
 
 
 
 
499
  } // end wassup_preload
500
 
501
  /**
@@ -509,20 +546,23 @@ function wassup_load() {
509
  if(!wassup_init()) return; //nothing to do
510
  }
511
  //load widgets and visitor tracking footer scripts
512
- if ($wassup_options->is_recording_active()) {
513
- add_action("widgets_init",'wassup_widget_init',9);
514
- if(is_admin()) add_action('admin_footer','wassup_foot');
515
- else add_action('wp_footer','wassup_foot');
516
- }
517
- //load admin interface
518
- if(is_admin()){
519
- if(!function_exists('wassup_admin_load')){
520
- require_once(WASSUPDIR.'/lib/wassupadmin.php');
 
521
  }
522
- wassup_admin_load();
523
  }
524
- }
 
525
  //-------------------------------------------------
 
 
526
  /**
527
  * Perform plugin admin tasks for before http headers are sent.
528
  * - run 'initialize settings' for new network subsites, if needed
@@ -564,9 +604,6 @@ function wassup_admin_preload() {
564
  add_action('admin_enqueue_scripts','wassup_add_scripts',12);
565
  } //end wassup_admin_preload
566
 
567
- //* New in v1.9.1: new admin module 'wassupadmin.php'
568
- //* wassup_admin_load() function moved to 'wassupadmin.php' module
569
-
570
  /**
571
  * Loads javascript and css files for Wassup admin pages.
572
  * - Enqueues "spia.js", "jquery-ui.js" (various), "jquery-migrate.js" (also queues "jquery.js")
@@ -666,7 +703,7 @@ function export_wassup(){
666
  }elseif(!empty($multisite_whereis)){
667
  $wherecondition="WHERE `id`>0 ".$multisite_whereis;
668
  }
669
- //New in v1.9.1: omit `spam` records from export
670
  if(empty($wassup_options->export_spam)){
671
  if(empty($wherecondition)) $wherecondition="WHERE `spam`='0'";
672
  else $wherecondition .=" AND `spam`='0'";
@@ -677,7 +714,6 @@ function export_wassup(){
677
  $exportdata=false;
678
  $numrecords=$wpdb->get_var(sprintf("SELECT COUNT(`wassup_id`) FROM `%s` %s",esc_attr($wassup_table),$wherecondition));
679
  if(!is_numeric($numrecords)) $numrecords=0;
680
- //$result=$wpdb->get_var(sprintf("SELECT MAX(`id`) FROM `%s` %s",esc_attr($wassup_table),$wherecondition)); //last id not used here
681
  if($numrecords > 0){
682
  //save "failed export" message beforehand in case of script interruption @since v1.9
683
  $wassup_user_settings['ualert_message']=__("Export failed due to script interruption or timeout error!","wassup");
@@ -685,7 +721,7 @@ function export_wassup(){
685
  if($numrecords > 10000){
686
  //Could take a long time, so increase script execution time-limit to 11 min
687
  //TODO 'safe_mode' deprecated in PHP 5.3
688
- if(!@ini_get('safe_mode')){
689
  $timeout=ini_get('max_execution_time');
690
  if(is_numeric($timeout) && $stimeout>0 && $timeout<(11*60)) @set_time_limit(11*60);
691
  }
@@ -714,6 +750,29 @@ function export_wassup(){
714
  }
715
  } //end export_wassup
716
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
717
  if (!function_exists('microtime_float')) {
718
  function microtime_float() { //replicates microtime(true) from PHP5
719
  list($usec, $sec) = explode(" ", microtime());
@@ -727,7 +786,7 @@ function wassupPrepend() {
727
  global $wpdb,$wp_version,$wassup_options,$current_user,$wscreen_res,$wdebug_mode;
728
  if(empty($wassup_options)) $wassup_options=new wassupOptions;
729
  //wassup must be active for recording to begin
730
- if(!$wassup_options->is_recording_active()){ //do nothing
731
  return;
732
  }
733
  $wassup_table=$wassup_options->wassup_table;
@@ -799,7 +858,7 @@ function wassupPrepend() {
799
  $timenow=current_time('timestamp');
800
  //check if user is logged-in
801
  $logged_user="";
802
- if(empty($current_user->user_login)) wp_get_current_user();
803
  if(!empty($current_user->user_login)){
804
  $logged_user=$current_user->user_login;
805
  //for recent successful login.. undo hack attempt label
@@ -810,47 +869,57 @@ function wassupPrepend() {
810
  //retroactively undo "hack attempt" label
811
  $wassup_dbtask[]=sprintf("UPDATE `$wassup_table` SET `username`='%s', `spam`='0' WHERE `wassup_id`='%s' AND `spam`!='0' AND `timestamp`>'%d'",$logged_user,$wsession_id,$timenow-90);
812
  }
 
 
 
 
 
 
813
  }
814
  //Track visitor
815
- //New in v1.9.1: NO admin exclusions here so that logged-in users can be included in online counts
816
- //use 'send_headers' hook for media, downloads, and feed tracking...except when request is wp-admin which doesn't run this hook
817
- if(preg_match("#([^?\#&]+\.([a-z]{1,4}))(?:[?&\#]|$)#i",$urlRequested)>0 && basename($urlRequested)!="robots.txt"){
818
- //this is a multimedia or general file request
819
- if(!is_admin()){
820
- add_action('send_headers','wassupAppend');
821
- }else{
822
- wassupAppend($req_code);
823
- }
824
- }elseif(preg_match("/(\.(3gp|7z|f4[pv]|mp[34])(?:[?&\#]|$))|[=\/](feed|atom)/i",$urlRequested)>0){
825
- //this is an audio, archive, or feed request
826
- if(!is_admin()){
827
- add_action('send_headers','wassupAppend');
828
- }else{
829
- wassupAppend($req_code);
830
- }
831
- //use 'send_headers' hook for cookie write
832
- }elseif(empty($wassup_id) || $session_timeout || $req_code!=200){
833
- if(!headers_sent() && !is_admin()){
834
- add_action('send_headers','wassupAppend',15);
 
 
 
835
  }elseif(!is_admin()){
836
- add_action('shutdown','wassupAppend',1);
 
 
 
 
 
 
 
 
 
837
  }else{
838
- //New in v1.9.1: 'admin_footer' replaces direct 'wassupAppend' calls and calls via 'shutdown' hook for admin hits
839
  add_action('admin_footer','wassupAppend',15);
840
  }
841
- }else{
842
- //use 'admin_footer' or 'shutdown' hook for tracking
843
- if(is_admin()){
844
- add_action('admin_footer','wassupAppend',15);
845
- }else{
846
- //'shutdown' is 1-priority so runs before other shutdown actions
847
- add_action('shutdown','wassupAppend',1);
848
  }
849
- }
850
- //New in v1.9.1: add tracking to login page separately since 'shutdown' hook doesn't appear to run on login page
851
- if(empty($logged_user) && stristr($urlRequested,'login.php')!==FALSE){
852
- add_action('login_footer','wassupAppend',15);
853
- }
854
  //do retroactive update, if any
855
  if(!empty($wassup_dbtask)){
856
  $args=array('dbtasks'=>$wassup_dbtask);
@@ -868,7 +937,7 @@ function wassupAppend($req_code=0) {
868
  if(!wassup_init()) return; //nothing to do
869
  }
870
  //wassup must be active for recording to begin
871
- if(!$wassup_options->is_recording_active()){ //nothing to do
872
  return;
873
  }
874
  //load additional wassup modules as needed
@@ -885,34 +954,24 @@ function wassupAppend($req_code=0) {
885
  $fileRequested="";
886
  if(preg_match("#(^/[0-9a-z\-/\._]+\.(3gp|avi|bmp|flv|gif|gifv|ico|img|jpe?g|mkv|mov|mpa|mpe?g|mp[234]|ogg|oma|omg|png|pdf|pp[st]x?|psd|svg|swf|tiff|vob|wav|webm|wma|wmv))(?:[?\#&]|$)#i",$_SERVER['REQUEST_URI'],$pcs)>0){
887
  $is_media=true;
888
- if(@ini_get('allow_url_fopen')) $fileRequested=$blogurl.$pcs[1];
889
  }
890
  $debug_output="";
891
- if ($wdebug_mode) {
892
- //turn off debug mode for media and non-html requests
893
- if($is_media || (!is_page() && !is_home() && !is_single() && !is_archive())){
894
  $wdebug_mode=false;
 
895
  }else{
896
- $mode_reset=ini_get('display_errors');
897
- $debug_reset=$wdebug_mode;
898
- //don't check for 'strict' php5 standards (part of E_ALL since PHP 5.4)
899
- if (defined('PHP_VERSION') && version_compare(PHP_VERSION, 5.4, '<')) @error_reporting(E_ALL);
900
- else @error_reporting(E_ALL ^ E_STRICT); //E_STRICT=php5 only
901
- @ini_set('display_errors','On');
902
- //Debug: Output open comment tag to hide PHP errors from visitors
903
- if(headers_sent()){
904
- echo "\n<!-- *WassUp DEBUG On\n"; //hide errors
905
  echo date('H:i:s');
906
  }else{
907
- $debug_output="\n<!-- *WassUp DEBUG On\n"; //hide errors
908
- $debug_output.=date('H:i:s');
909
  }
 
910
  }
911
- } else {
912
- //do only fatal error reporting
913
- // note: this won't work if PHP in safe mode
914
- $errlvl = @error_reporting();
915
- if (!empty($errlvl)) @error_reporting(E_ERROR);
916
  } //end if $wdebug_mode
917
  $error_msg="";
918
  $wassup_table = $wassup_options->wassup_table;
@@ -993,7 +1052,7 @@ function wassupAppend($req_code=0) {
993
  }
994
  } //end else agenttype
995
  $os=$ua->os;
996
- //v1.9.1 bugfix: check for value before assignment
997
  if(empty($wscreen_res) && !empty($ua->resolution)){
998
  if(preg_match('/^\d+x\d+$/',$ua->resolution)>0){
999
  $wscreen_res=str_replace('x',' x ',$ua->resolution);
@@ -1005,8 +1064,16 @@ function wassupAppend($req_code=0) {
1005
  $language=$ua->language;
1006
  }
1007
  if($wdebug_mode){
1008
- if(headers_sent()) echo "\nUAdetecter results: \$ua=".serialize($ua);
1009
- else $debug_output .= "\nUAdetecter results: \$ua=".serialize($ua);
 
 
 
 
 
 
 
 
1010
  }
1011
  } //end if $ua->name
1012
  //Set visitor identifier fields: username, wassup_id, ipAddress, hostname
@@ -1069,8 +1136,8 @@ function wassupAppend($req_code=0) {
1069
  if (empty($ipAddress)) $ipAddress = $_SERVER['REMOTE_ADDR'];
1070
  if (empty($IP)) $IP = wassup_clientIP($ipAddress);
1071
  if (empty($hostname)) $hostname = "unknown";
1072
- if (empty($logged_user)){
1073
- //v1.9.1 bugfix: cookieUser used only to omit admin logout requests
1074
  //$logged_user=$cookieUser;
1075
  if(!empty($cookieUser) && strpos($urlRequested,'loggedout')>0){
1076
  $logged_user=$cookieUser;
@@ -1100,7 +1167,7 @@ function wassupAppend($req_code=0) {
1100
  }
1101
  //assign a wassup_id for visit and write cookie
1102
  if(empty($wassup_id) || $session_timeout || (!empty($wscreen_res) && empty($cookie_data[2]))){
1103
- //v1.9.1 bugfix: reset wassup_id for timeout/new visit only
1104
  if(empty($wassup_id) || $session_timeout){
1105
  $args=array('ipAddress'=>$ipAddress,
1106
  'hostname'=>$hostname,
@@ -1123,7 +1190,7 @@ function wassupAppend($req_code=0) {
1123
  //this must be done before headers sent
1124
  if(!headers_sent()){
1125
  if (defined('COOKIE_DOMAIN')) {
1126
- $cookiedomain = preg_replace('#(https?\://)?(www\.)?#','',strtolower(COOKIE_DOMAIN));
1127
  if(defined('COOKIEPATH')){
1128
  $cookiepath=COOKIEPATH;
1129
  }else{
@@ -1131,7 +1198,7 @@ function wassupAppend($req_code=0) {
1131
  }
1132
  } else {
1133
  $cookieurl = parse_url(get_option('home'));
1134
- $cookiedomain = preg_replace('/^www\./i','',$cookieurl['host']);
1135
  $cookiepath = $cookieurl['path'];
1136
  }
1137
  if(!empty($logged_user)) $cookieUser=$logged_user;
@@ -1162,14 +1229,18 @@ function wassupAppend($req_code=0) {
1162
  if(ini_get('allow_url_fopen')) $fileRequested=$blogurl.$pcs[1];
1163
  }
1164
  if($wdebug_mode){
1165
- if(headers_sent()){
1166
- echo "\n\$req_code=";
1167
- print_r($req_code);
 
 
 
 
1168
  }
1169
  }
1170
  $hackercheck=true; //for malware checking
1171
- //New in v1.9.1: do early check for xss code on url and label as spam/malware for temp record...even if spam detection is disabled
1172
- if(preg_match('/(document\.write|<script|[0t;];script|[ +;0]src=|[ +;]href=|%20href=)([^0-9a-z]|http[:s]|ftp[:s])/',$urlRequested)>0){
1173
  $spam=3;
1174
  $hackercheck=false;
1175
  //no malware checks on logged-in users unless 404 activity
@@ -1189,7 +1260,7 @@ function wassupAppend($req_code=0) {
1189
  if ((!is_admin() && stristr($urlRequested,"/wp-admin/")===false && stristr($urlRequested,"/wp-includes/")===false) || $req_code!=200 || $hackercheck){
1190
  //Get single post/page id, if archive has only 1 post
1191
  if(empty($article_id) && isset($GLOBALS['posts'])){
1192
- if((is_archive() || is_search()) && count($GLOBALS['posts'])==1 && !empty($GLOBALS['posts'][0]->ID)){ //v1.9.1 bugfix
1193
  $article_id=$GLOBALS['posts'][0]->ID;
1194
  }
1195
  }
@@ -1199,7 +1270,7 @@ function wassupAppend($req_code=0) {
1199
  //TODO: exclude page requests by post_id
1200
  //#5 Exclude urls on exclusion list
1201
  if (empty($wassup_options->wassup_exclude_url) || preg_match('#(?:^|\s*,)\s*((?:'.str_replace('#','\#',preg_quote($blogurl)).')?'.str_replace('#','\#',preg_quote($urlRequested)).')\s*(?:,|$)#i',$wassup_options->wassup_exclude_url)==0){
1202
- //url matching may be affected by html-encoding, url-encoding, query parameters, and labels on the url - so exclude for each
1203
  $exclude_visit = false;
1204
  if (!empty($wassup_options->wassup_exclude_url)) {
1205
  $exclude_list = explode(',',str_replace(', ',',',$wassup_options->wassup_exclude_url));
@@ -1259,8 +1330,12 @@ function wassupAppend($req_code=0) {
1259
  if (stristr($urlRequested,"/wp-content/themes") === FALSE || stristr($urlRequested,"comment") !== FALSE || $req_code==404) {
1260
  //#10 Exclude for logged-in users
1261
  if ($wassup_options->wassup_loggedin == 1 || !is_user_logged_in()) {
1262
- //#11 Exclude for wassup_attack (libwww-perl)
1263
- if ($wassup_options->wassup_attack == 1 || stristr($userAgent,"libwww-perl") === FALSE ) {
 
 
 
 
1264
  // Check for duplicates, previous spam check, and screen resolution and get previous settings to prevent redundant checks on same visitor.
1265
  // Dup==same wassup_id and URL, and timestamp<180 secs
1266
  $wpageviews=0;
@@ -1273,8 +1348,16 @@ function wassupAppend($req_code=0) {
1273
  }
1274
  $wpdb->query("SET wait_timeout=7");
1275
  if($wdebug_mode){
1276
- if(headers_sent()) echo "\nSet MySQL wait_timeout=7 from ".$mtimeout;
1277
- else $debug_output .="\nSet MySQL wait_timeout=7 from ".$mtimeout;
 
 
 
 
 
 
 
 
1278
  }
1279
  //get recent hits with same wassup_id
1280
  $recent_hit=$wpdb->get_results(sprintf("SELECT SQL_NO_CACHE `wassup_id`, `ip`, `timestamp`, `urlrequested`, `screen_res`, `username`, `browser`, `os`, `spider`, `feed`, `spam`, `language`, `agent`, `referrer` FROM `$wassup_tmp_table` WHERE `wassup_id`='%s' AND `timestamp` >'%d' %s ORDER BY `timestamp` DESC",esc_sql($wassup_id),$timenow-183,$multisite_whereis));
@@ -1293,7 +1376,7 @@ function wassupAppend($req_code=0) {
1293
  }
1294
  //retrieve previous spam check results
1295
  $spamresult=$recent_hit[0]->spam;
1296
- //v1.9.1 bugfix: don't use hack-attempt label from recent hit when user is logged-in
1297
  if((int)$spamresult==3 && !empty($logged_user)){
1298
  //if(strpos($recent_hit[0]->urlrequested,'wp-login.php')>0 || (!empty($_SERVER['HTTP_REFERER']) && strpos($_SERVER['HTTP_REFERER'],'wp-login.php')>0))){
1299
  $spamresult=0;
@@ -1302,40 +1385,17 @@ function wassupAppend($req_code=0) {
1302
  //retroactively update screen_res
1303
  //...queue the update because of "delayed insert"
1304
  if (empty($recent_hit[0]->screen_res) && !empty($wscreen_res)) {
1305
- $wassup_dbtask[]=sprintf("UPDATE `$wassup_table` SET `screen_res`='%s' WHERE `wassup_id`='%s'",$wscreen_res,$recent_hit[0]->wassup_id); //v1.9.1 bugfix
1306
  }
1307
  }else{
1308
  $recent_hit=array();
1309
  } //end if recent_hit
1310
- if($wdebug_mode){ //debug
1311
- if(empty($recent_hit)) {
1312
- if(headers_sent()) echo "\nNo Recent visit data found in wassup_tmp.";
1313
- else $debug_output .= "<br />\nNo Recent visit data found in wassup_tmp.\n"; //debug
1314
- }else{
1315
- $safe_debug=array_map('htmlentities',(array)$recent_hit[0]);
1316
- if(headers_sent()){
1317
- echo "\n".date('H:i:s').' Recent data lookup results: $recent_hit[0]=';
1318
- print_r($safe_debug);
1319
- if($dup_urlrequest==1) echo "\nDuplicate record!";
1320
- }else{
1321
- $debug_output .="\n".date('H:i:s').' Recent data lookup results: $recent_hit[0]=';
1322
- $debug_output .=print_r($safe_debug,true);
1323
- if($dup_urlrequest==1) $debug_output .="\nDuplicate record!\n";
1324
- if($recent_hit[0]->agent != $userAgent){
1325
- $debug_output .="\nUser Agents NOT Identical:";
1326
- $debug_output .="\n\tCurrent user agent: ".strip_tags(esc_attr(htmlspecialchars(html_entity_decode($userAgent))));
1327
- $debug_output .="\n\tPrevious user agent:".strip_tags(esc_attr(htmlspecialchars(html_entity_decode($recent_hit[0]->agent))))."\n";
1328
- }
1329
- }
1330
- }
1331
- } //end if debug_mode
1332
  //done duplicate check...restore normal timeout
1333
  if(!empty($mtimeout)){
1334
  $wpdb->query("SET wait_timeout=$mtimeout");
1335
  }else{
1336
  $wpdb->query("SET wait_timeout=90");
1337
  }
1338
-
1339
  //#12 Exclude duplicates
1340
  if($dup_urlrequest == 0){
1341
  //get previously recorded settings for this visitor to avoid redundant tests
@@ -1358,27 +1418,28 @@ function wassupAppend($req_code=0) {
1358
  }
1359
  //#13 Exclude admin (ajax?) requests with same session cookie as recent hit but does not show as a logged user request (ex: /wp-admin/post.php hit from edit link in website page?)
1360
  if((!is_admin() && stristr($urlRequested,"/wp-admin/")===false) || empty($recent_hit) || ((empty($recent_hit[0]->username) || $recent_hit[0]->username != $cookieUser) && stristr($recent_hit[0]->urlrequested,"/wp-admin/")===false)){
1361
- //check for xss attempts
1362
- if($hackercheck && !$is_admin_login){
1363
- if(wassupURI::is_xss($urlRequested)){
1364
- $spam=3;
1365
- }elseif(!empty($referrer) && empty($logged_user)){
1366
  if(wassupURI::is_xss($referrer)){
1367
  $spam=3;
1368
  }
1369
  }
1370
  }
1371
  //#14 Exclude 404 hits unless 1st visit or malware attempt
1372
- if($req_code == 200 || empty($recent_hit) || ($hackercheck && (stristr($urlRequested,"/wp-")!==FALSE || wassupURI::is_xss($urlRequested) || preg_match('#\.(php\d?|aspx?|bat|cgi|dll|exe|ini|js|jsp|msi|sh)([^0-9a-z.\-_]|$)|([\\\.]{2}|\/\.|root[^a-z0-9\-_]|[^a-z0-9\-_]passw|\=admin[^a-z0-9\-_]|(?:user|author|admin|id)\=\-?\d+|\=\-\d+|(bin|etc)\/)|[\*\,\'"\:\(\)$`]|[^0-9a-z]src[ +]?=|(administrator|base64|bin|code|config|cookie|delete|document|drop|drupal|eval|exec|exit|function|iframe|insert|install|joomla|root|script|select|setting|setup|table|union\sallupgrade|update|upload|where|window|wordpress)#i',$urlRequested)>0))){
1373
  //identify hackers/malware
1374
  if($hackercheck && $spam==0){
1375
  $pcs=array();
 
 
 
1376
  //non-admin users trying to access root files, password or ids or upgrade script are up to no good
1377
- if(!$is_admin_login){
1378
  $pcs=array();
1379
  if(preg_match('#\.\./\.\./(etc/passwd|\.\./\.\./)#i',$urlRequested)>0){
1380
  $spam=3;
1381
- }elseif(preg_match('#[\[&\?/\-_](code|dir|document_root\]?|id|page|thisdir)\=(https?\://.+)?#i',$urlRequested,$pcs)>0){
1382
  if(!empty($pcs[2])) $spam=3;
1383
  elseif($req_code==404) $spam=3;
1384
  }elseif(preg_match('#\/wp\-admin.*[^0-9a-z_](install(\-helper)?|update(\-core)?|upgrade)\.php([^0-9a-z\-_]|$)#i',$urlRequested)>0){
@@ -1442,31 +1503,23 @@ function wassupAppend($req_code=0) {
1442
  elseif(wIsAttack($urlRequested)) $spam=3;
1443
  //regular visitor querying userid/author or other non-page item by id number is likely malware
1444
  }elseif(preg_match('#[?&]([0-9a-z\-_]+)\=(\-)?\d+$#i',$urlRequested,$pcs)>0){
1445
- if($req_code == 404){
1446
- $spam=3;
1447
- }elseif(!empty($pcs[2])){
1448
- $spam=3;
1449
- }elseif(preg_match('#(code|dir|document_root|id|path|thisdir)#',$pcs[1])>0){
1450
- $spam=3;
1451
- }elseif(wIsAttack($urlRequested)){
1452
  $spam=3;
 
 
 
 
 
 
1453
  }
1454
  //regular visitor attempts to access "upload" page is likely malware
1455
  }elseif(preg_match('#[?&][0-9a-z\-_]*(page\=upload)(?:[^0-9a-z\-_]|$)#i',$urlRequested)>0){
1456
  $spam=3;
1457
- }elseif(wIsAttack($urlRequested)){
1458
- if($req_code == 404) $spam=3;
1459
- }
1460
- //lastly check referrer and user-agents strings for obvious attack codes
1461
- if(empty($spam)){
1462
- if(!empty($referrer) && $referrer != $blogurl.$urlRequested){
1463
- if(wIsAttack($referrer)){
1464
- $spam=3;
1465
- }
1466
- }
1467
- //TODO check userAgent string for attack codes
1468
- //if(empty($spam) && !empty($userAgent)){
1469
- //}
1470
  }
1471
  } //end if empty logged_user
1472
  //retroactively update recent visitor records as spam/malware
@@ -1484,8 +1537,16 @@ function wassupAppend($req_code=0) {
1484
  list($browser,$os)=wGetBrowser($userAgent);
1485
  if(!empty($browser)) $agent=$browser;
1486
  if ($wdebug_mode){
1487
- if(headers_sent()) echo "\n".date('H:i:s.u').' wGetBrowser results: $browser='.$browser.' $os='.$os;
1488
- else $debug_output .= "\n".date('H:i:s.u').' wGetBrowser results: $browser='.$browser.' $os='.$os;
 
 
 
 
 
 
 
 
1489
  }
1490
  }
1491
  }
@@ -1495,8 +1556,16 @@ function wassupAppend($req_code=0) {
1495
  if(empty($agent) || preg_match($spider_hosts,$hostname)>0 || stristr($agent,'unknown')!==false){
1496
  list($spider,$spidertype,$feed) = wGetSpider($userAgent,$hostname,$browser);
1497
  if($wdebug_mode){
1498
- if(headers_sent()) echo "\n".date('H:i:s.u').' wGetSpider results: $spider='.$spider.' $spidertype='.$spidertype.' $feed='.$feed;
1499
- else $debug_output .= "\n".date('H:i:s.u').' wGetSpider results: $spider='.$spider.' $spidertype='.$spidertype.' $feed='.$feed;
 
 
 
 
 
 
 
 
1500
  }
1501
  //it's a browser
1502
  if($spidertype == "B" && $urlRequested != "/robots.txt"){
@@ -1517,13 +1586,24 @@ function wassupAppend($req_code=0) {
1517
  if(strlen($agent)<5 || empty($os) || preg_match("#\s?([a-z]+(?:bot|crawler|google|spider|reader|agent))[^a-z]#i",$userAgent)>0 || strstr($urlRequested,"robots.txt")!==FALSE || is_feed()){
1518
  list($spider,$spidertype,$feed) = wGetSpider($userAgent,$hostname,$browser);
1519
  if($wdebug_mode){
1520
- if(headers_sent()) echo "\n".date('H:i:s.u').' wGetSpider results: $spider='.$spider.' $spidertype='.$spidertype.' $feed='.$feed;
1521
- else $debug_output .= "\n".date('H:i:s.u').' wGetSpider results: $spider='.$spider.' $spidertype='.$spidertype.' $feed='.$feed;
 
 
 
 
 
 
 
 
1522
  }
1523
- }elseif(preg_match('#(msie|firefox|chrome)[\/ ](\d+)#',strtolower($userAgent),$pcs)>0){
 
 
 
1524
  //obsolete browser is likely a spider
1525
  if($pcs[2]<8 || ($pcs[2]<30 && $pcs[1]!="msie")){
1526
- list($spider,$spidertype,$feed) = wGetSpider($userAgent,$hostname,$browser);
1527
  }
1528
  }
1529
  //it's a browser
@@ -1657,22 +1737,38 @@ function wassupAppend($req_code=0) {
1657
  //get language/locale
1658
  if(empty($language) && !empty($recent_hit[0]->language)) $language=$recent_hit[0]->language;
1659
  if($wdebug_mode){
1660
- if(headers_sent()) echo "\n language=$language";
1661
- else $debug_output .= "\n language=$language";
 
 
 
 
 
 
 
 
1662
  }
1663
  if(preg_match('/\.[a-z]{2,3}$/i',$hostname) >0 || preg_match('/[a-z\-_]+\.[a-z]{2,3}[^a-z]/i',$referrer) >0 || strlen($language)>2){
1664
  //get language/locale info from hostname or referrer data
1665
  $language=wGetLocale($language,$hostname,$referrer);
1666
  }
1667
  if($wdebug_mode){
1668
- if(headers_sent()) echo "\n...language=$language (after geoip/wgetlocale)";
1669
- else $debug_output .= " ...language=$language (after geoip/wgetlocale)";
 
 
 
 
 
 
 
 
1670
  }
1671
  // get search engine and search keywords from referrer
1672
  $searchengine="";
1673
  $search_phrase="";
1674
  $searchpage="";
1675
- $searchlocale=""; //v1.9.1 bugfix
1676
  //don't check own blog for search engine data
1677
  if (!empty($referrer) && $spam == "0" && stristr($referrer,$blogurl)!=$referrer && !$wdebug_mode) {
1678
  $ref=(is_string($referrer)?$referrer:mb_convert_encoding(strip_tags($_SERVER['HTTP_REFERER']),"HTML-ENTITIES","auto"));
@@ -1684,7 +1780,7 @@ function wassupAppend($req_code=0) {
1684
  $searchengine="Google";
1685
  if($pcs[2]!="com" && $pcs[2]!="co"){
1686
  $searchlocale=$pcs[2];
1687
- $searchengine .=" ".strtoupper($searchlocale); //v1.9.1 bugfix
1688
  }
1689
  //get the query keywords - will always be empty, until Google changes its policy
1690
  if(empty($pcs[4])) $search_phrase="_notprovided_";
@@ -1824,7 +1920,12 @@ function wassupAppend($req_code=0) {
1824
  }
1825
  }
1826
  if($wdebug_mode){
1827
- if(headers_sent()){
 
 
 
 
 
1828
  if(!empty($wassup_recid)){
1829
  echo "\nWassUp record data:";
1830
  print_r($wassup_rec);
@@ -1844,72 +1945,72 @@ function wassupAppend($req_code=0) {
1844
  }
1845
  } //end if prefetch
1846
  }elseif($wdebug_mode){
1847
- if(headers_sent()) echo "\n #18 Excluded by: wp-content/plugins (after 404)";
1848
  else $debug_output .="\n #18 Excluded by: wp-content/plugins (after 404)";
1849
  } //end if !wp-content/plugins
1850
  }elseif($wdebug_mode){
1851
- if(headers_sent()) echo "\n #17 Excluded by: wassup_spam";
1852
  else $debug_output .="\n #17 Excluded by: wassup_spam";
1853
  } //end if $spam == 0
1854
  }elseif($wdebug_mode){
1855
- if(headers_sent()) echo "\n #16 Excluded by: wassup_spider";
1856
  else $debug_output .="\n #16 Excluded by: wassup_spider";
1857
  } //end if wassup_spider
1858
  }elseif($wdebug_mode){
1859
- if(headers_sent()) echo "\n #15 Excluded by: wassup_hack";
1860
  else $debug_output .="\n #15 Excluded by: wassup_hack";
1861
  } //end if wassup_hack
1862
  }elseif($wdebug_mode){
1863
- if(headers_sent()) echo "\n #14 Excluded by: is_404";
1864
  else $debug_output .="\n #14 Excluded by: is_404";
1865
  } //end if !is_404
1866
  }elseif($wdebug_mode){
1867
- if(headers_sent()) echo "\n #13 Excluded by: !wp-admin (ajax)";
1868
  else $debug_output .="\n #13 Excluded by: !wp_admin (ajax)";
1869
  } //end if !wp_admin (ajax) && recent_hit
1870
  }elseif($wdebug_mode){
1871
- if(headers_sent()) echo "\n #12 Excluded by: dup_urlrequest";
1872
  else $debug_output .="\n #12 Excluded by: dup_urlrequest";
1873
  } //end if dup_urlrequest == 0
1874
  }elseif($wdebug_mode){
1875
- if(headers_sent()) echo "\n #11 Excluded by: wassup_attack";
1876
  else $debug_output .="\n #11 Excluded by: wassup_attack";
1877
  } //end if wassup_attack
1878
  }elseif($wdebug_mode){
1879
- if(headers_sent()) echo "\n #10 Excluded by: wassup_loggedin";
1880
  else $debug_output .="\n #10 Excluded by: wassup_loggedin";
1881
  } //end if wassup_loggedin
1882
  }elseif($wdebug_mode){
1883
- if(headers_sent()) echo "\n #9 Excluded by: wp-content/themes";
1884
  else $debug_output .="\n #9 Excluded by: wp-content/themes";
1885
  } //end if !themes
1886
  }elseif($wdebug_mode){
1887
- if(headers_sent()) echo "\n #8 Excluded by: wp-content/plugins (or hostname wildcard)";
1888
  else $debug_output .="\n #8 Excluded by: wp-content/plugins (or hostname wildcard)";
1889
  } //end if !plugins
1890
  }elseif($wdebug_mode){
1891
- if(headers_sent()) echo "\n #7 Excluded by: exclude_host (or IP wilcard)";
1892
  else $debug_output .="\n #7 Excluded by: exclude_host (or IP wildcard)";
1893
  } //end if wassup_exclude_host
1894
  }elseif($wdebug_mode){
1895
- if(headers_sent()) echo "\n #6 Excluded by: wassup_exclude";
1896
  else $debug_output .="\n #6 Excluded by: wassup_exclude";
1897
  } //end if wassup_exclude
1898
  }elseif($wdebug_mode){
1899
- if(headers_sent()) echo "\n #5 Excluded by: exclude_url";
1900
  else $debug_output .="\n #5 Excluded by: exclude_url";
1901
  } //end if wassup_exclude_url
1902
  }elseif($wdebug_mode){
1903
- if(headers_sent()) echo "\n #4 Excluded by: exclude_user";
1904
  else $debug_output .="\n #4 Excluded by: exclude_user";
1905
  } //end if wassup_exclude_user
1906
  }elseif($wdebug_mode){
1907
- if(headers_sent()) echo "\n #3 Excluded by: is_admin";
1908
  else $debug_output .="\n #3 Excluded by: is_admin";
1909
  } //end if !is_admin
1910
  } //end if wp-cron.php?doing_wp_cron===FALSE //#2
1911
  }elseif($wdebug_mode){
1912
- if(headers_sent()) echo "\n #1 Excluded by: is_admin_login";
1913
  else $debug_output .="\n #1 Excluded by: is_admin_login";
1914
  } //end if !is_admin_login
1915
 
@@ -1925,7 +2026,7 @@ function wassupAppend($req_code=0) {
1925
  }
1926
  if(is_numeric($result)) $in_temp=(int)$result;
1927
  if($wdebug_mode){
1928
- if(headers_sent()) echo "\nin_temp=".$result;
1929
  else $debug_output .="\nin_temp=".$result;
1930
  }
1931
  //add new temp record
@@ -2018,7 +2119,7 @@ function wassupAppend($req_code=0) {
2018
  if(((int)$timestamp)%141 == 0 && (!is_multisite() || is_main_site() || !$wassup_options->network_activated_plugin())){
2019
  //Optimize table when optimize timestamp is older than current time
2020
  if(!empty($wassup_options->wassup_optimize) && is_numeric($wassup_options->wassup_optimize) && $now >(int)$wassup_options->wassup_optimize){
2021
- $optimize_sql=sprintf("OPTIMIZE TABLE `%s`",$wassup_table); //v1.9.1 bugfix
2022
  if(version_compare($wp_version,'3.0','<')){
2023
  $wassup_dbtask[]=$optimize_sql;
2024
  }else{
@@ -2039,21 +2140,21 @@ function wassupAppend($req_code=0) {
2039
  wp_schedule_single_event(time()+40,'wassup_scheduled_dbtasks',$args);
2040
  }
2041
  if($wdebug_mode){
2042
- if(headers_sent()){
2043
  echo "\nWassup scheduled tasks:";
2044
  print_r($wassup_dbtask);
2045
  }
2046
  }
2047
  }
2048
  if($wdebug_mode){ //close comment tag to hide debug data from visitors
2049
- if(headers_sent()){
2050
  echo "\n--> \n";
2051
  }else{
2052
  $debug_output .= "<br />\n--> \n";
2053
  //add debug output to wp_footer output - TODO
2054
  $expire=time()+180;
2055
  $wassup_key=wassup_clientIP($_SERVER['REMOTE_ADDR']);
2056
- update_wassupmeta($wassup_key,'_debug_output',$expire,$debug_output);
2057
  }
2058
  //restore normal mode
2059
  @ini_set('display_errors',$mode_reset);
@@ -2086,7 +2187,7 @@ function wassup_insert_rec($wTable,$wassup_rec,$delayed=false){
2086
  }else{
2087
  if(!empty($wassup_options->delayed_insert)) $delayed=true;
2088
  $insert_id=wassupDb::table_insert($wTable,$wassup_rec,$delayed);
2089
- //v1.9.1: bugfix...try regular insert when delayed insert fails on MySql server
2090
  if(!empty($insert_id) && is_wp_error($insert_id) && $delayed){
2091
  $insert_id=wassupDb::table_insert($wTable,$wassup_rec,false);
2092
  //always bypass delayed insert
@@ -2191,16 +2292,16 @@ function wGetQueryVars($urlstring){
2191
  if (!empty($urlstring)) {
2192
  $wtab=parse_url($urlstring);
2193
  if(key_exists("query",$wtab)){
2194
- //new in v1.9.1: use 'parse_str' when possible
2195
  parse_str($wtab["query"],$qvar);
2196
  }else{ //for partial urls
2197
- //new in v1.9.1: remove any anchor links from end of url
2198
  if(preg_match('/([^#]+)#.*/',$urlstring,$pcs)>0) $query=$pcs[1];
2199
  else $query=$urlstring;
2200
  $i=0;
2201
  while($query){
2202
  $pcs=array();
2203
- //v1.9.1 bugfix: exclude 1st part of url up to and including the "?"
2204
  if(preg_match('/(?:[^?]*\?)?([^=&]+)(=[^&]+)?/',$query,$pcs)>0){
2205
  $name=$pcs[1];
2206
  if(empty($pcs[2])) $qvar[$name]=true;
@@ -3797,7 +3898,7 @@ function wassup_foot() {
3797
  $sessionhash=$wassup_options->whash;
3798
  if(empty($wscreen_res) && !isset($_COOKIE['wassup_screen_res'.$sessionhash])){
3799
  $ua=(!empty($_SERVER['HTTP_USER_AGENT'])?$_SERVER['HTTP_USER_AGENT']:"");
3800
- if(strpos($ua,'MSIE')>0 || strpos($ua,'rv:11')>0 || strpos($ua,'Edge/')>0 || stristr($_SERVER['REQUEST_URI'],'login.php')!==false){ //v1.9.1 bugfix
3801
  echo "\n";?>
3802
  <script language=javascript>
3803
  //<![CDATA[
@@ -3811,7 +3912,7 @@ function wassup_foot() {
3811
  //Output a comment with a current timestamp to verify that page is not cached (i.e. visit is being recorded).
3812
  echo "\n<!-- <p class=\"small\"> WassUp ".WASSUPVERSION." ".__("timestamp","wassup").": ".date('Y-m-d h:i:sA T')." (".gmdate('h:iA',time()+(get_option('gmt_offset')*3600)).")<br />\n";
3813
  echo __("If above timestamp is not current time, this page is cached","wassup").".</p> -->\n";
3814
- //New in v1.9.1: output debug_output stored in wassup_meta, if any
3815
  if($wdebug_mode){
3816
  $wassup_key=wassup_clientIP($_SERVER['REMOTE_ADDR']);
3817
  $debug_output=wassupDb::get_wassupmeta($wassup_key,'_debug_output');
@@ -3874,7 +3975,7 @@ function wassup_temp_cleanup($dbtasks=array()){
3874
  if(!defined('WASSUPURL')){
3875
  if(!wassup_init()) return; //nothing to do
3876
  }
3877
- if($wassup_options->is_recording_active()){ //v1.9.1 bugfix
3878
  //do scheduled cleanup
3879
  if(empty($dbtasks)){
3880
  wassupDb::temp_cleanup();
@@ -3891,7 +3992,7 @@ function wassup_auto_cleanup(){
3891
  if(!wassup_init()) return; //nothing to do
3892
  }
3893
  //check that user can do auto delete
3894
- if($wassup_options->is_recording_active()){ //v1.9.1 bugfix
3895
  if(!empty($wassup_options->delete_auto) && $wassup_options->delete_auto!="never"){
3896
  //check last auto delete timestamp to ensure purge occurs only once a day
3897
  $wassup_table=$wassup_options->wassup_table;
@@ -3982,15 +4083,15 @@ function wassup_sidebar($before_widget='',$after_widget='',$before_title='',$aft
3982
  if(!function_exists('wassup_widget_get_cache')){
3983
  include_once(WASSUPDIR.'/widgets/widget_functions.php');
3984
  }
3985
- if(empty($before_widget)|| empty($after_widget)|| strpos($before_widget,'>')===false || strpos($after_widget,'</')===false){
3986
  $before_widget='<div id="wassup_sidebar" class="widget wassup-widget">';
3987
  $after_widget='</div>';
3988
  }
3989
- if(empty($before_title)|| empty($after_title)|| strpos($before_title,'>')===false || strpos($after_title,'</')===false){
3990
  $before_title='<h2 class="widget-title wassup-widget-title">';
3991
  $after_title='</h2>';
3992
  }
3993
- if($wtitle!="")$title=$wtitle;
3994
  else $title=__("Visitors Online","wassup");
3995
  if($wulclass!="" && preg_match('/([^a-z0-9\-_]+)/',$wulclass)>0) $wulclass=""; //no special chars allowed
3996
  if($wulclass!="") $ulclass=' class="'.$wulclass.'"';
@@ -4000,18 +4101,20 @@ function wassup_sidebar($before_widget='',$after_widget='',$before_title='',$aft
4000
  //check for cached 'wassup_sidebar' html
4001
  $widget_html=wassup_widget_get_cache('wassup_sidebar',$cache_key);
4002
  if(empty($widget_html)){
4003
- //calculate stats only when WassUp is active
4004
- if(!$wassup_options->is_recording_active()){
4005
- $widget_html="\n".$before_widget;
4006
- if(!empty($title))$widget_html.='
 
 
 
4007
  '.$before_title.$title.$after_title;
4008
- $widget_html.='
4009
  <p class="small">'.__("No Data","wassup").'</p>'.wassup_widget_foot_meta().$after_widget;
4010
- }else{
4011
- $widget_html="";
4012
- $online_html="";
4013
- $top_html="";
4014
- $instance=array(
4015
  'title'=>"",
4016
  'ulclass'=>$wulclass,
4017
  'chars'=>$chars,
@@ -4024,61 +4127,60 @@ function wassup_sidebar($before_widget='',$after_widget='',$before_title='',$aft
4024
  'top_referrers'=>(int)$wreflimit,
4025
  'top_browsers'=>(int)$wtopbrlimit,
4026
  'top_os'=>(int)$wtoposlimit,
4027
- );
4028
- //get online counts
4029
- $html=wassup_widget_get_online_counts($instance);
4030
- if(!empty($html)){
4031
- $online_html= "\n".$before_widget;
4032
- if(!empty($title))$online_html.='
4033
  '.$before_title.$title.$after_title;
4034
- $online_html.='
4035
  <ul'.$ulclass.'>
4036
  '.$html.'
4037
  </ul>'.wassup_widget_foot_meta().$after_widget;
4038
- }
4039
- //get top stats
4040
- if($instance['top_searches']>0 || $instance['top_referrers']>0 || $instance['top_browsers']>0 || $instance['top_os']>0){
4041
- $to_date=current_time('timestamp');
4042
- $from_date=$to_date-24*60*60;
4043
- $i=0;
4044
- foreach(array('searches','referrers','browsers','os') AS $item){
4045
- $html="";
4046
- $limit=$instance['top_'.$item];
4047
- if($limit >0) $html=wassup_widget_get_topstat($item,$limit,$chars,$from_date);
4048
- if(!empty($html)){
4049
- $title=$before_title.wassup_widget_stat_gettext($item).$after_title;
4050
- if($i>0) $top_html.="\n".$after_widget;
4051
- $top_html.="\n".$before_widget;
4052
- $top_html.='
4053
  '.$title.'
4054
  <ul'.$ulclass.'>'.$html.'
4055
  </ul>';
4056
- $i++;
4057
- }
4058
- } //end foreach
4059
- //append footer meta to end of widget
4060
- if(!empty($top_html)) $top_html.=wassup_widget_foot_meta().$after_widget;
4061
- } //end if top_searches>0
4062
- //cache the sidebar widget
4063
- $widget_html .=$top_html.$online_html;
4064
- if(!empty($widget_html)){
4065
- $refresh=1;
4066
- $cacheid=wassup_widget_save_cache($widget_html,'wassup_sidebar',$cache_key,$refresh);
4067
- }
4068
- } //end else is_recording_active
4069
- }
4070
- if(!empty($widget_html)){
4071
- echo "\n".'<div class="wassup_sidebar">'."\n";
4072
- echo wassup_widget_css(true); //embed widget styles
4073
- echo $widget_html;
4074
- echo "\n".'</div>';
4075
- }
4076
  } //end wassup_sidebar
4077
  //-------------------------------------------------
4078
  //## Add essential hooks after functions have been defined
4079
  //uninstall hook for complete plugin removal from WordPress
4080
  register_activation_hook($wassupfile,'wassup_install');
4081
- if(function_exists('register_uninstall_hook')) register_uninstall_hook($wassupfile,'wassup_uninstall');
 
 
4082
  unset($wassupfile); //to free memory
4083
  wassup_start(); //start WassUp
4084
  ?>
3
  Plugin Name: WassUp Real Time Analytics
4
  Plugin URI: http://www.wpwp.org
5
  Description: Analyze your website traffic with accurate, real-time stats, live views, visitor counts, top stats, IP geolocation, customizable tracking, and more. For Wordpress 2.2+
6
+ Version: 1.9.2
7
  Author: Michele Marcucci, Helene Duncker
8
  Author URI: http://www.michelem.org/
9
  Text Domain: wassup
24
  //# No direct requests for plugin file "wassup.php"
25
  $wassupfile=preg_replace('/\\\\/','/',__FILE__); //for windows
26
  //abort if this is direct request for file
27
+ if((!empty($_SERVER['SCRIPT_FILENAME']) && realpath($_SERVER['SCRIPT_FILENAME'])===realpath($wassupfile)) ||
28
+ (!empty($_SERVER['PHP_SELF']) && preg_match('#'.str_replace('#','\#',preg_quote($_SERVER['PHP_SELF'])).'$#',$wassupfile)>0)){
29
  //try track this uri request for "wassup.php"
30
  if(!headers_sent()){
31
  //can't track 403-forbidden, so use 404 instead
32
  //location value triggers redirect to WordPress' 404 error page so Wassup can track this attempt to access itself (original uri request is lost)
33
+ header('Location: /?p=404page&werr=wassup403'.'&wf='.basename($wassupfile));
34
  exit;
35
  }else{
36
  //'wp_die' is undefined here
37
  die('<strong>Sorry. Unable to display requested page.</strong>');
38
  }
 
39
  //abort if no WordPress
40
  }elseif(!defined('ABSPATH') || empty($GLOBALS['wp_version'])){
41
  //'wp_die' is undefined here
42
+ die("Bad Request: ".htmlspecialchars(preg_replace('/(&#0*37;?|&amp;?#0*37;?|&#0*38;?#0*37;?|%)(?:[01][0-9A-F]|7F)/i','',$_SERVER['REQUEST_URI'])));
43
  }
44
  //-------------------------------------------------
45
  //### Setup and startup functions
50
  function wassup_init($init_settings=false){
51
  global $wp_version,$wassup_options,$wdebug_mode;
52
  //define wassup globals & constants
53
+ if(!defined('WASSUPVERSION')){ //v1.9.2 bugfix
54
+ define('WASSUPVERSION','1.9.2');
55
+ define('WASSUPDIR',dirname(preg_replace('/\\\\/','/',__FILE__)));
56
+ }
57
  //turn on debugging (global)...Use cautiously! Will display errors from all plugins, not just WassUp
58
+ $wdebug_mode=false;
59
  if(defined('WP_DEBUG') && WP_DEBUG==true) $wdebug_mode=true;
60
+ if($wdebug_mode){
61
+ //New in v1.9.2: turn off debug mode if this is ajax action request
62
+ if((!empty($_REQUEST['action']) && isset($_REQUEST['wajax'])) || (defined('DOING_AJAX') && DOING_AJAX)){
63
+ $wdebug_mode=false;
64
+ @wassup_disable_errors();
65
+ }else{
66
+ if(headers_sent()){
67
+ //an error was likely displayed to screen
68
+ echo "\n".'<!-- wassup_init start -->';
69
+ }
70
+ wassup_enable_errors();
71
+ }
72
+ }
73
  //load language translation
 
74
  if(empty($GLOBALS['locale']) || strlen($GLOBALS['locale'])>5) $current_locale=get_locale();
75
  else $current_locale=$GLOBALS['locale'];
76
  if(!empty($current_locale)){
106
  }else{
107
  //Load existing wassup wp_option settings, if any
108
  $wassup_settings=get_option('wassup_settings');
109
+ if(count($wassup_settings)>1 && !empty($wassup_settings['wassup_version']) && $wassup_settings['wassup_version']==WASSUPVERSION){
110
+ $wassup_options=new wassupOptions;
111
+ }else{ //v1.9.2 bugfix
112
+ //'else' shouldn't happen unless 'wassup_settings' wp_option record is corrupted or deleted/locked by another application
113
+ $wassup_options=new wassupOptions(true);
114
+ //New in v1.9.2: corruption maybe caused by a 'wassup_install' interrupt or time out before update is done, so try re-save settings
115
+ //$wassup_options->wassup_version=WASSUPVERSION;
116
+ $wassup_options->saveSettings();
117
+ }
118
  }
119
  }else{
120
  if(function_exists('is_network_admin') && is_network_admin()){
123
  add_action('admin_notices','wassup_show_compat_message');
124
  }
125
  }
126
+ if($wdebug_mode && headers_sent()){
127
+ //an error message was likely displayed to screen
128
+ echo "\n".'<!-- wassup_init end -->'."\n";
129
+ }
130
  return $is_compatible;
131
  } //end wassup_init
132
 
143
  */
144
  function wassup_install($network_wide=false) {
145
  global $wpdb,$wp_version,$wassup_options;
146
+
147
+ $wassup_settings=get_option('wassup_settings'); //save old settings
148
+ $wassup_network_settings=array();
149
+ //first check Wordpress compatibility via 'wassup_init'
150
  if(!defined('WASSUPURL')){
151
+ if(!wassup_init(true)){
152
  wassup_show_compat_message();
153
  exit(1);
154
  }
161
  exit(1);
162
  }
163
  //initialize/update wassup_settings in wp_options
164
+ if(empty($wassup_options) || empty($wassup_options->wassup_version) || $wassup_options->wassup_version != WASSUPVERSION){
165
+ $wassup_options=new wassupOptions(true);
166
+ }
167
+ //network-wide settings for multisite @since v1.9
168
  if(is_multisite()){
169
+ //New in v1.9.2: moved multisite compatibility check to 'compatibility.php' module
 
 
 
 
 
170
  if(is_network_admin()){
171
  $network_wide=true;
172
+ //no network activation in subdomain networks, subdomain sites must activate Wassup separately @TODO
173
  if(is_subdomain_install()){
174
+ //long error message is NOT displaying for network activation error in WordPress 4.6.1, so use 'wp_die' instead of 'echo/exit' @since v1.9.1
 
 
175
  $err = __("Sorry! \"Network Activation\" is DISABLED for subdomain networks.","wassup");
176
  $err .= ' '.sprintf(__("%s must be activated on each subdomain site separately.","wassup"),'<strong>Wassup Plugin</strong>');
177
  $err .=' <br/>'.__("Activate plugin on your parent domain (main site) to set default options for your network.","wassup");
191
  //set table names
192
  //reset Wassup table name if wpdb prefix has changed @since v1.9
193
  if(empty($wassup_options->wassup_table) || !wassupDb::table_exists($wassup_options->wassup_table)){
194
+ if($network_wide){
195
  if(empty($wassup_network_settings['wassup_table']) || !wassupDb::table_exists($wassup_network_settings['wassup_table'])) $wassup_table=$wpdb->base_prefix . "wassup";
196
  else $wassup_table= $wassup_network_settings['wassup_table'];
197
  }else{
202
  }
203
  $wassup_meta_table=$wassup_table."_meta";
204
  $wassup_options->wassup_table=$wassup_table;
205
+
206
+ //turn off 'wassup_active' setting and cancel all scheduled Wassup wp-cron jobs for upgrades only
207
  $active_status=1;
208
  if(!empty($wassup_settings)){
209
  //save current 'wassup_active' setting prior to upgrade for later restore
210
  $active_status=$wassup_settings['wassup_active'];
211
+ if($network_wide && !empty($wassup_network_settings['wassup_active'])){
212
  $wassup_network_settings['wassup_active']="0";
213
  update_site_option('wassup_network_settings',$wassup_network_settings);
214
+ }elseif(!empty($active_status)){
215
  $wassup_options->wassup_active="0";
216
  $wassup_options->saveSettings();
217
  }
228
  //increase script timeout to 16 minutes to prevent activation failure due to script timeout (browser timeout can still occur)
229
  $stimeout=ini_get("max_execution_time");
230
  if(is_numeric($stimeout) && $stimeout>0 && $stimeout < 990){
231
+ //check for 'set_time_limit' in disabled functions before changing script timeout
232
  $disabled_funcs=ini_get('disable_functions');
233
  if((empty($disabled_funcs) || strpos($disabled_funcs,'set_time_limit')===false) && !ini_get('safe_mode')){
234
  @set_time_limit(990);
264
  update_site_option('wassup_network_settings',$wassup_network_settings);
265
  }
266
  //update site settings
267
+ //check the upgrade timestamp to prevent repeat of 'wassup_settings_install()' (runs in 'upgrade.php')
268
  if(empty($wassup_options->wassup_upgraded) || ((int)time() - (int)$wassup_options->wassup_upgraded) >180){
269
  wassup_settings_install($wassup_table);
270
  }
330
  foreach($subsite_ids as $subsite_id){
331
  if($network_wide) switch_to_blog($subsite_id);
332
  $wassup_settings = get_option('wassup_settings');
333
+ //first, stop recording (when plugin is still running)
334
  if(!$network_wide && !empty($wassup_settings['wassup_active'])){
335
  $wassup_settings['wassup_active']="0";
336
  update_option('wassup_settings',$wassup_settings);
382
  $dropped=$wpdb->query("DROP TABLE IF EXISTS $table_meta_name");
383
  $dropped=$wpdb->query("DROP TABLE IF EXISTS $table_tmp_name");
384
  $dropped=$wpdb->query("DROP TABLE IF EXISTS $wassup_table");
385
+ }
386
+ //New in v1.9.2: make sure tables were dropped (for backward compatibility)
387
+ if($wpdb->get_var(sprintf("SHOW TABLES LIKE '%s'",like_escape($wassup_table)))==$wassup_table){
388
  //"if exists" in wpdb::query caused error in early versions of Wordpress
389
  if($wpdb->get_var(sprintf("SHOW TABLES LIKE '%s'",like_escape($table_meta_name)))==$table_meta_name){
390
  $dropped=$wpdb->query("DROP TABLE $table_meta_name");
392
  if($wpdb->get_var(sprintf("SHOW TABLES LIKE '%s'",like_escape($table_tmp_name)))==$table_tmp_name){
393
  $dropped=$wpdb->query("DROP TABLE $table_tmp_name");
394
  }
395
+ $dropped=$wpdb->query("DROP TABLE $wassup_table");
 
 
396
  }
397
  //delete settings from wp_option and wp_usermeta tables
398
  delete_option('wassup_settings');
414
  }
415
  } //end wassup_uninstall
416
 
417
+ /** Stop Wassup wp-cron and wp-ajax on deactivation. @since v1.9 */
418
  function wassup_deactivate(){
419
  global $wp_version;
420
  //wp-ajax action may persist, so remove it
443
  function wassup_start(){
444
  //startup wassup
445
  add_action('init','wassup_preload',11);
446
+ add_action('login_init','wassup_preload',11); //separate action
447
  add_action('admin_init','wassup_admin_preload',11);
448
  add_action('plugins_loaded','wassup_load');
449
  }
450
 
451
  /**
452
  * Perform plugin tasks for before http headers are sent.
453
+ * -block obvious xss and sql injection attempts on Wassup itself
454
  * -initialize new network subsite settings (via 'wassup_init'), if any
455
  * -add hooks for wp_ajax, wp_login, and wp_cron actions
456
  * -start wassup tracking
457
  */
458
  function wassup_preload(){
459
+ global $wp_version,$current_user,$wassup_options,$wdebug_mode;
 
460
  //block any obvious sql injection attempts involving WassUp
461
  $request_uri=$_SERVER['REQUEST_URI'];
462
  if(!$request_uri) $request_uri=$_SERVER['SCRIPT_NAME']; // IIS
463
+ //v1.9.2 bugfix: removed referrer from test..could cause non-wassup request redirect
464
+ if(stristr($request_uri,'wassup')!==false && strstr($request_uri,'err=wassup403')===false){
465
  $error_msg="";
466
+ //v1.9.2 bugfix: don't test logged-in user requests
467
+ if(!is_user_logged_in()){
468
+ if(preg_match('/(<|&lt;?|&#0*60;?|%3C)scr(ipt|[^0-9a-z\-_])/i',$request_uri)>0){
469
+ $error_msg=__('Bad request!','wassup');
470
+ if($wdebug_mode) $error_msg .=" xss not allowed.";
471
+ }elseif(preg_match('/[&?][^=]+=\-[19]+|(select|update|delete|alter|drop|union|create)[ %&][^w]+wp_/i',str_replace(array('\\','&#92;','"','%22','&#34;','&quot;','&#39;','\'','`','&#96;'),'',$request_uri))>0){
472
+ $error_msg=__('Bad request!','wassup');
473
+ if($wdebug_mode) $error_msg .=" special chars not allowed.";
474
+ }
475
  }
476
  //abort bad requests
477
  if(!empty($error_msg)){
478
  if($wdebug_mode){
479
+ wp_die($error_msg.' :'.esc_attr(preg_replace('/(&#0*37;?|&amp;?#0*37;?|&#0*38;?#0*37;?|%)(?:[01][0-9A-F]|7F)/i','---',$_SERVER['REQUEST_URI'])));
480
  }
481
  //redirect bad requests to 404 error page
482
+ if(!headers_sent()) header('Location: /?p=404page&werr=wassup403');
483
  else wp_die($error_msg);
484
  exit;
485
  }
493
  return;
494
  }
495
  }
496
+ if($wdebug_mode && headers_sent()){
497
+ //an error message was likely displayed to screen
498
+ echo "\n".'<!-- wassup_preload start -->';
499
+ }
500
+ //v1.9.2 bugfix: fix for object error seen in support forum, but redundant to fix already in 'wassup_init'
501
+ if(empty($wassup_options)){
502
+ if(!class_exists('wassupOptions')) require_once(WASSUPDIR.'/lib/wassup.class.php');
503
+ $wassup_options=new wassupOptions;
504
+ if(empty($wassup_options)) return; //nothing to do
505
+ }
506
  //reset wassup user settings at login @since v1.9
507
  add_action('wp_login',array($wassup_options,'resetUserSettings'),9,2);
508
+ //assign action handler for wp-ajax operations @since v1.9.1
509
  if(!function_exists('wassup_action_handler')){
510
  require_once(WASSUPDIR .'/lib/action.php');
511
  }
516
  wassup_compat_preload();
517
  }
518
  //Start visitor tracking
519
+ if(!empty($wassup_options) && $wassup_options->is_recording_active()){
520
  //add actions for wp-cron scheduled tasks - @since v1.9
521
  if(!has_action('wassup_scheduled_dbtasks')) add_action('wassup_scheduled_dbtasks',array('wassupDb','scheduled_dbtask'),10,1);
522
  if(!is_multisite() || is_main_site() || !$wassup_options->network_activated_plugin()){
529
  }
530
  wassupPrepend();
531
  }
532
+ if($wdebug_mode && headers_sent()){
533
+ //an error message was likely displayed to screen
534
+ echo "\n".'<!-- wassup_preload end -->'."\n";
535
+ }
536
  } // end wassup_preload
537
 
538
  /**
546
  if(!wassup_init()) return; //nothing to do
547
  }
548
  //load widgets and visitor tracking footer scripts
549
+ if(!empty($wassup_options)){ //v1.9.2 bugfix
550
+ if($wassup_options->is_recording_active()){
551
+ add_action("widgets_init",'wassup_widget_init',9);
552
+ if(is_admin()) add_action('admin_footer','wassup_foot');
553
+ else add_action('wp_footer','wassup_foot');
554
+ }
555
+ //load admin interface
556
+ if(is_admin()){
557
+ if(!function_exists('wassup_admin_load')) require_once(WASSUPDIR.'/lib/wassupadmin.php');
558
+ wassup_admin_load();
559
  }
 
560
  }
561
+ } //end wassup_load
562
+
563
  //-------------------------------------------------
564
+ //### Admin functions
565
+ // WassUp admin panels and menus display functions are in a separate module, "wassupadmin.php" @since v1.9.1
566
  /**
567
  * Perform plugin admin tasks for before http headers are sent.
568
  * - run 'initialize settings' for new network subsites, if needed
604
  add_action('admin_enqueue_scripts','wassup_add_scripts',12);
605
  } //end wassup_admin_preload
606
 
 
 
 
607
  /**
608
  * Loads javascript and css files for Wassup admin pages.
609
  * - Enqueues "spia.js", "jquery-ui.js" (various), "jquery-migrate.js" (also queues "jquery.js")
703
  }elseif(!empty($multisite_whereis)){
704
  $wherecondition="WHERE `id`>0 ".$multisite_whereis;
705
  }
706
+ //omit spam records from export @since v1.9.1
707
  if(empty($wassup_options->export_spam)){
708
  if(empty($wherecondition)) $wherecondition="WHERE `spam`='0'";
709
  else $wherecondition .=" AND `spam`='0'";
714
  $exportdata=false;
715
  $numrecords=$wpdb->get_var(sprintf("SELECT COUNT(`wassup_id`) FROM `%s` %s",esc_attr($wassup_table),$wherecondition));
716
  if(!is_numeric($numrecords)) $numrecords=0;
 
717
  if($numrecords > 0){
718
  //save "failed export" message beforehand in case of script interruption @since v1.9
719
  $wassup_user_settings['ualert_message']=__("Export failed due to script interruption or timeout error!","wassup");
721
  if($numrecords > 10000){
722
  //Could take a long time, so increase script execution time-limit to 11 min
723
  //TODO 'safe_mode' deprecated in PHP 5.3
724
+ if(!ini_get('safe_mode')){
725
  $timeout=ini_get('max_execution_time');
726
  if(is_numeric($timeout) && $stimeout>0 && $timeout<(11*60)) @set_time_limit(11*60);
727
  }
750
  }
751
  } //end export_wassup
752
 
753
+ /** Turns off all error notices except fatal errors. */
754
+ function wassup_disable_errors(){
755
+ ini_set('error_reporting',E_ERROR);
756
+ //error_reporting(0); //same as above
757
+ ini_set('display_errors','Off');
758
+ }
759
+ /** Turns on all error notices */
760
+ function wassup_enable_errors(){
761
+ global $wp_version;
762
+ ini_set('display_errors','On');
763
+ //don't use 'strict standards' in old Wordpress versions (part of E_ALL since PHP 5.4)
764
+ $php_vers=phpversion();
765
+ if(version_compare($php_vers,'5.0','>=')){
766
+ if(version_compare($wp_version,'4.0','>=')){
767
+ ini_set('error_reporting',E_ALL);
768
+ }else{
769
+ ini_set('error_reporting',E_ALL & ~E_STRICT & ~E_DEPRECATED);
770
+ }
771
+ }else{
772
+ ini_set('error_reporting',E_ALL);
773
+ }
774
+ } //end wassup_enable_errors
775
+
776
  if (!function_exists('microtime_float')) {
777
  function microtime_float() { //replicates microtime(true) from PHP5
778
  list($usec, $sec) = explode(" ", microtime());
786
  global $wpdb,$wp_version,$wassup_options,$current_user,$wscreen_res,$wdebug_mode;
787
  if(empty($wassup_options)) $wassup_options=new wassupOptions;
788
  //wassup must be active for recording to begin
789
+ if(empty($wassup_options) || !$wassup_options->is_recording_active()){ //do nothing
790
  return;
791
  }
792
  $wassup_table=$wassup_options->wassup_table;
858
  $timenow=current_time('timestamp');
859
  //check if user is logged-in
860
  $logged_user="";
861
+ if(empty($current_user->user_login)) $user=wp_get_current_user();
862
  if(!empty($current_user->user_login)){
863
  $logged_user=$current_user->user_login;
864
  //for recent successful login.. undo hack attempt label
869
  //retroactively undo "hack attempt" label
870
  $wassup_dbtask[]=sprintf("UPDATE `$wassup_table` SET `username`='%s', `spam`='0' WHERE `wassup_id`='%s' AND `spam`!='0' AND `timestamp`>'%d'",$logged_user,$wsession_id,$timenow-90);
871
  }
872
+ //New in v1.9.2: timeout logged-in users after 10 mins to trigger save into temp for online counts
873
+ if($wassup_timer > 5361){ //for 1st save/cookie reset
874
+ $session_timeout=true;
875
+ }elseif($wassup_timer < 4801){ //timeout after ~10 mins
876
+ $session_timeout=true; //...for save to temp
877
+ }
878
  }
879
  //Track visitor
880
+ //New in v1.9.2: Exclude for logged-in user in admin area (unless session_timeout is set)
881
+ if(!is_admin() || empty($logged_user) || $session_timeout || $req_code !=200 || empty($wassup_id)){
882
+ //use 'send_headers' hook for feed, media, and files except when request is wp-admin which doesn't run this hook
883
+ if(is_feed() || preg_match('#[=/?&](feed|atom)#',$urlRequested)>0){
884
+ if(is_feed() && !headers_sent()){
885
+ add_action('send_headers','wassupAppend');
886
+ }else{
887
+ wassupAppend($req_code);
888
+ }
889
+ }elseif(preg_match("/(\.(3gp|7z|f4[pv]|mp[34])(?:[?&#]|$))/i",$urlRequested)>0){
890
+ //this is audio, video, or archive file request
891
+ if(!is_admin() && !headers_sent()){
892
+ add_action('send_headers','wassupAppend');
893
+ }else{
894
+ wassupAppend($req_code);
895
+ }
896
+ }elseif(preg_match("/([^?#&]+\.([a-z]{1,4}))(?:[?&#]|$)/i",$urlRequested)>0 && basename($urlRequested)!="robots.txt"){
897
+ //this is multimedia or specific file request
898
+ if(!is_admin() && !headers_sent()){
899
+ add_action('send_headers','wassupAppend');
900
+ }else{
901
+ wassupAppend($req_code);
902
+ }
903
  }elseif(!is_admin()){
904
+ //use 'send_headers' hook for cookie write or 404 and shutdown hook for all others
905
+ if(empty($wassup_id) || $session_timeout || $req_code!=200){
906
+ if(!headers_sent()){
907
+ add_action('send_headers','wassupAppend',15);
908
+ }else{
909
+ add_action('shutdown','wassupAppend',1);
910
+ }
911
+ }else{
912
+ add_action('shutdown','wassupAppend',1);
913
+ }
914
  }else{
915
+ //use 'admin_footer' hook for admin area hits @since v1.9.1
916
  add_action('admin_footer','wassupAppend',15);
917
  }
918
+ //add tracking for login page separately since 'shutdown' hook doesn't seem to run on login page @since v1.9.1
919
+ if(empty($logged_user) && stristr($urlRequested,'login.php')!==FALSE){
920
+ add_action('login_footer','wassupAppend',15);
 
 
 
 
921
  }
922
+ } //end if !is_admin
 
 
 
 
923
  //do retroactive update, if any
924
  if(!empty($wassup_dbtask)){
925
  $args=array('dbtasks'=>$wassup_dbtask);
937
  if(!wassup_init()) return; //nothing to do
938
  }
939
  //wassup must be active for recording to begin
940
+ if(empty($wassup_options) || !$wassup_options->is_recording_active()){ //nothing to do
941
  return;
942
  }
943
  //load additional wassup modules as needed
954
  $fileRequested="";
955
  if(preg_match("#(^/[0-9a-z\-/\._]+\.(3gp|avi|bmp|flv|gif|gifv|ico|img|jpe?g|mkv|mov|mpa|mpe?g|mp[234]|ogg|oma|omg|png|pdf|pp[st]x?|psd|svg|swf|tiff|vob|wav|webm|wma|wmv))(?:[?\#&]|$)#i",$_SERVER['REQUEST_URI'],$pcs)>0){
956
  $is_media=true;
957
+ if(ini_get('allow_url_fopen')) $fileRequested=$blogurl.$pcs[1];
958
  }
959
  $debug_output="";
960
+ if($wdebug_mode){
961
+ if($is_media || is_feed() || (!is_page() && !is_home() && !is_single() && !is_archive())){
962
+ //turn off error display for media, feed, and any non-html requests
963
  $wdebug_mode=false;
964
+ @wassup_disable_errors();
965
  }else{
966
+ if(is_admin() || headers_sent()){
967
+ echo "\n".'<!-- *WassUp DEBUG On '."\n"; //hide errors
 
 
 
 
 
 
 
968
  echo date('H:i:s');
969
  }else{
970
+ $debug_output="\n".'<!-- *WassUp DEBUG On '."\n"; //hide errors
971
+ $debug_output .=date('H:i:s');
972
  }
973
+ wassup_enable_errors();
974
  }
 
 
 
 
 
975
  } //end if $wdebug_mode
976
  $error_msg="";
977
  $wassup_table = $wassup_options->wassup_table;
1052
  }
1053
  } //end else agenttype
1054
  $os=$ua->os;
1055
+ //check for screen resolution
1056
  if(empty($wscreen_res) && !empty($ua->resolution)){
1057
  if(preg_match('/^\d+x\d+$/',$ua->resolution)>0){
1058
  $wscreen_res=str_replace('x',' x ',$ua->resolution);
1064
  $language=$ua->language;
1065
  }
1066
  if($wdebug_mode){
1067
+ if(is_admin() || headers_sent()){
1068
+ if(!empty($debug_output)){
1069
+ echo $debug_output;
1070
+ echo "\nwassupappend-debug#1";
1071
+ $debug_output="";
1072
+ }
1073
+ echo "\nUAdetecter results: \$ua=".serialize($ua);
1074
+ }else{
1075
+ $debug_output .="\nUAdetecter results: \$ua=".serialize($ua);
1076
+ }
1077
  }
1078
  } //end if $ua->name
1079
  //Set visitor identifier fields: username, wassup_id, ipAddress, hostname
1136
  if (empty($ipAddress)) $ipAddress = $_SERVER['REMOTE_ADDR'];
1137
  if (empty($IP)) $IP = wassup_clientIP($ipAddress);
1138
  if (empty($hostname)) $hostname = "unknown";
1139
+ if(empty($logged_user)){
1140
+ //only one use for username in cookie...to omit admin logout information
1141
  //$logged_user=$cookieUser;
1142
  if(!empty($cookieUser) && strpos($urlRequested,'loggedout')>0){
1143
  $logged_user=$cookieUser;
1167
  }
1168
  //assign a wassup_id for visit and write cookie
1169
  if(empty($wassup_id) || $session_timeout || (!empty($wscreen_res) && empty($cookie_data[2]))){
1170
+ //reset wassup_id for timeout/new visit only
1171
  if(empty($wassup_id) || $session_timeout){
1172
  $args=array('ipAddress'=>$ipAddress,
1173
  'hostname'=>$hostname,
1190
  //this must be done before headers sent
1191
  if(!headers_sent()){
1192
  if (defined('COOKIE_DOMAIN')) {
1193
+ $cookiedomain = preg_replace('#^(https?\://)?(www\d?\.)?#','',strtolower(COOKIE_DOMAIN));
1194
  if(defined('COOKIEPATH')){
1195
  $cookiepath=COOKIEPATH;
1196
  }else{
1198
  }
1199
  } else {
1200
  $cookieurl = parse_url(get_option('home'));
1201
+ $cookiedomain = preg_replace('/^www\d?\./i','',$cookieurl['host']);
1202
  $cookiepath = $cookieurl['path'];
1203
  }
1204
  if(!empty($logged_user)) $cookieUser=$logged_user;
1229
  if(ini_get('allow_url_fopen')) $fileRequested=$blogurl.$pcs[1];
1230
  }
1231
  if($wdebug_mode){
1232
+ if(is_admin() || headers_sent()){
1233
+ if(!empty($debug_output)){
1234
+ echo $debug_output;
1235
+ echo "\nwassupappend-debug#2";
1236
+ $debug_output="";
1237
+ }
1238
+ echo "\n\$req_code=$req_code";
1239
  }
1240
  }
1241
  $hackercheck=true; //for malware checking
1242
+ //do early check for xss code on url and label as spam/malware for temp record, even if spam detection is disabled @since v1.9.1
1243
+ if(preg_match('/(document\.write(?:ln)?|(?:<|&lt;|&#0*60;?|%3C)scr(?:ipt|[^0-9a-z\-_])|[0t;];script|[ +;0]src=|[ +;]href=|%20href=)([^0-9a-z]|http[:s]|ftp[:s])/',$urlRequested)>0){
1244
  $spam=3;
1245
  $hackercheck=false;
1246
  //no malware checks on logged-in users unless 404 activity
1260
  if ((!is_admin() && stristr($urlRequested,"/wp-admin/")===false && stristr($urlRequested,"/wp-includes/")===false) || $req_code!=200 || $hackercheck){
1261
  //Get single post/page id, if archive has only 1 post
1262
  if(empty($article_id) && isset($GLOBALS['posts'])){
1263
+ if((is_archive() || is_search()) && count($GLOBALS['posts'])==1 && !empty($GLOBALS['posts'][0]->ID)){
1264
  $article_id=$GLOBALS['posts'][0]->ID;
1265
  }
1266
  }
1270
  //TODO: exclude page requests by post_id
1271
  //#5 Exclude urls on exclusion list
1272
  if (empty($wassup_options->wassup_exclude_url) || preg_match('#(?:^|\s*,)\s*((?:'.str_replace('#','\#',preg_quote($blogurl)).')?'.str_replace('#','\#',preg_quote($urlRequested)).')\s*(?:,|$)#i',$wassup_options->wassup_exclude_url)==0){
1273
+ //url matching may be affected by html-encoding, url-encoding, query parameters, and labels on the url - so do those exclusions separately
1274
  $exclude_visit = false;
1275
  if (!empty($wassup_options->wassup_exclude_url)) {
1276
  $exclude_list = explode(',',str_replace(', ',',',$wassup_options->wassup_exclude_url));
1330
  if (stristr($urlRequested,"/wp-content/themes") === FALSE || stristr($urlRequested,"comment") !== FALSE || $req_code==404) {
1331
  //#10 Exclude for logged-in users
1332
  if ($wassup_options->wassup_loggedin == 1 || !is_user_logged_in()) {
1333
+ //check user agent string for attack code
1334
+ if($spam==0 && wassupURI::is_xss($userAgent)){
1335
+ $spam=3;
1336
+ }
1337
+ //#11 Exclude for wassup_attack (via libwww-perl or xss in user agent)
1338
+ if ($wassup_options->wassup_attack==1 || (stristr($userAgent,"libwww-perl")===FALSE && $spam==0)) {
1339
  // Check for duplicates, previous spam check, and screen resolution and get previous settings to prevent redundant checks on same visitor.
1340
  // Dup==same wassup_id and URL, and timestamp<180 secs
1341
  $wpageviews=0;
1348
  }
1349
  $wpdb->query("SET wait_timeout=7");
1350
  if($wdebug_mode){
1351
+ if(is_admin() || headers_sent()){
1352
+ if(!empty($debug_output)){
1353
+ echo $debug_output;
1354
+ echo "\nwassupappend-debug#3";
1355
+ $debug_output="";
1356
+ }
1357
+ echo "\nSet MySQL wait_timeout=7 from ".$mtimeout;
1358
+ }else{
1359
+ $debug_output .="\nSet MySQL wait_timeout=7 from ".$mtimeout;
1360
+ }
1361
  }
1362
  //get recent hits with same wassup_id
1363
  $recent_hit=$wpdb->get_results(sprintf("SELECT SQL_NO_CACHE `wassup_id`, `ip`, `timestamp`, `urlrequested`, `screen_res`, `username`, `browser`, `os`, `spider`, `feed`, `spam`, `language`, `agent`, `referrer` FROM `$wassup_tmp_table` WHERE `wassup_id`='%s' AND `timestamp` >'%d' %s ORDER BY `timestamp` DESC",esc_sql($wassup_id),$timenow-183,$multisite_whereis));
1376
  }
1377
  //retrieve previous spam check results
1378
  $spamresult=$recent_hit[0]->spam;
1379
+ //don't use hack-attempt label from recent hit when user is logged-in
1380
  if((int)$spamresult==3 && !empty($logged_user)){
1381
  //if(strpos($recent_hit[0]->urlrequested,'wp-login.php')>0 || (!empty($_SERVER['HTTP_REFERER']) && strpos($_SERVER['HTTP_REFERER'],'wp-login.php')>0))){
1382
  $spamresult=0;
1385
  //retroactively update screen_res
1386
  //...queue the update because of "delayed insert"
1387
  if (empty($recent_hit[0]->screen_res) && !empty($wscreen_res)) {
1388
+ $wassup_dbtask[]=sprintf("UPDATE `$wassup_table` SET `screen_res`='%s' WHERE `wassup_id`='%s'",$wscreen_res,$recent_hit[0]->wassup_id);
1389
  }
1390
  }else{
1391
  $recent_hit=array();
1392
  } //end if recent_hit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1393
  //done duplicate check...restore normal timeout
1394
  if(!empty($mtimeout)){
1395
  $wpdb->query("SET wait_timeout=$mtimeout");
1396
  }else{
1397
  $wpdb->query("SET wait_timeout=90");
1398
  }
 
1399
  //#12 Exclude duplicates
1400
  if($dup_urlrequest == 0){
1401
  //get previously recorded settings for this visitor to avoid redundant tests
1418
  }
1419
  //#13 Exclude admin (ajax?) requests with same session cookie as recent hit but does not show as a logged user request (ex: /wp-admin/post.php hit from edit link in website page?)
1420
  if((!is_admin() && stristr($urlRequested,"/wp-admin/")===false) || empty($recent_hit) || ((empty($recent_hit[0]->username) || $recent_hit[0]->username != $cookieUser) && stristr($recent_hit[0]->urlrequested,"/wp-admin/")===false)){
1421
+ //check for xss attempts on referrer
1422
+ if($spam==0 && $hackercheck && empty($logged_user)){
1423
+ if(!empty($referrer) && $referrer != $blogurl.$urlRequested){
 
 
1424
  if(wassupURI::is_xss($referrer)){
1425
  $spam=3;
1426
  }
1427
  }
1428
  }
1429
  //#14 Exclude 404 hits unless 1st visit or malware attempt
1430
+ if($req_code == 200 || empty($recent_hit) || ($hackercheck && $spam==0 && (stristr($urlRequested,"/wp-")!==FALSE || preg_match('#\.(php\d?|aspx?|bat|cgi|dll|exe|ini|js|jsp|msi|sh)([^0-9a-z.\-_]|$)|([\\\.]{2}|\/\.|root[^a-z0-9\-_]|[^a-z0-9\-_]passw|\=admin[^a-z0-9\-_]|\=\-\d+|(bin|etc)\/)|[\*\,\'"\:\(\)$`]|[^0-9a-z](src|href|style)[ +]?=|&\#?([0-9]{2,4}|lt|gt|quot);|(?:<|%3c|&lt;?|&#0*60;?|&#x0*3c;?)[jpsv]|(?:user|author|admin|id)\=\-?\d+|(administrator|base64|bin|code|config|cookie|delete|document|drop|drupal|eval|exec|exit|function|iframe|insert|install|java|joomla|load|null|repair|script|select|setting|setup|shell|system|table|union|upgrade|update|upload|where|window|wordpress)#i',$urlRequested)>0))){
1431
  //identify hackers/malware
1432
  if($hackercheck && $spam==0){
1433
  $pcs=array();
1434
+ //xss attempt
1435
+ if(!empty($logged_user) && wassupURI::is_xss($urlRequested)){
1436
+ $spam=3;
1437
  //non-admin users trying to access root files, password or ids or upgrade script are up to no good
1438
+ }elseif(!$is_admin_login){
1439
  $pcs=array();
1440
  if(preg_match('#\.\./\.\./(etc/passwd|\.\./\.\./)#i',$urlRequested)>0){
1441
  $spam=3;
1442
+ }elseif(preg_match('#[\[&\?/\-_](code|dir|document_root\]?|id|page|thisdir)\=([a-t]+tp\://.+|[/\\\\\'"\-&\#%]|0+[e\+\-\*x]|[a-z]:)#i',$urlRequested,$pcs)>0){
1443
  if(!empty($pcs[2])) $spam=3;
1444
  elseif($req_code==404) $spam=3;
1445
  }elseif(preg_match('#\/wp\-admin.*[^0-9a-z_](install(\-helper)?|update(\-core)?|upgrade)\.php([^0-9a-z\-_]|$)#i',$urlRequested)>0){
1503
  elseif(wIsAttack($urlRequested)) $spam=3;
1504
  //regular visitor querying userid/author or other non-page item by id number is likely malware
1505
  }elseif(preg_match('#[?&]([0-9a-z\-_]+)\=(\-)?\d+$#i',$urlRequested,$pcs)>0){
1506
+ if(!empty($pcs[2])){
 
 
 
 
 
 
1507
  $spam=3;
1508
+ }elseif($req_code == 404){
1509
+ if(preg_match('#(code|dir|document_root|path|thisdir)#',$pcs[1])>0){
1510
+ $spam=3;
1511
+ }elseif(wIsAttack($urlRequested)){
1512
+ $spam=3;
1513
+ }
1514
  }
1515
  //regular visitor attempts to access "upload" page is likely malware
1516
  }elseif(preg_match('#[?&][0-9a-z\-_]*(page\=upload)(?:[^0-9a-z\-_]|$)#i',$urlRequested)>0){
1517
  $spam=3;
1518
+ }elseif($req_code==404 && wIsAttack($urlRequested)){
1519
+ $spam=3;
1520
+ //lastly check for attack in referrer string
1521
+ }elseif(!empty($referrer) && $referrer != $blogurl.$urlRequested){
1522
+ if(wIsAttack($referrer)) $spam=3;
 
 
 
 
 
 
 
 
1523
  }
1524
  } //end if empty logged_user
1525
  //retroactively update recent visitor records as spam/malware
1537
  list($browser,$os)=wGetBrowser($userAgent);
1538
  if(!empty($browser)) $agent=$browser;
1539
  if ($wdebug_mode){
1540
+ if(is_admin() || headers_sent()){
1541
+ if(!empty($debug_output)){
1542
+ echo $debug_output;
1543
+ echo "\nwassupappend-debug#4";
1544
+ $debug_output="";
1545
+ }
1546
+ echo "\n".date('H:i:s.u').' wGetBrowser results: $browser='.$browser.' $os='.$os;
1547
+ }else{
1548
+ $debug_output .= "\n".date('H:i:s.u').' wGetBrowser results: $browser='.$browser.' $os='.$os;
1549
+ }
1550
  }
1551
  }
1552
  }
1556
  if(empty($agent) || preg_match($spider_hosts,$hostname)>0 || stristr($agent,'unknown')!==false){
1557
  list($spider,$spidertype,$feed) = wGetSpider($userAgent,$hostname,$browser);
1558
  if($wdebug_mode){
1559
+ if(is_admin() || headers_sent()){
1560
+ if(!empty($debug_output)){
1561
+ echo $debug_output;
1562
+ echo "\nwassupappend-debug#5";
1563
+ $debug_output="";
1564
+ }
1565
+ echo "\n".date('H:i:s.u').' wGetSpider results: $spider='.$spider.' $spidertype='.$spidertype.' $feed='.$feed;
1566
+ }else{
1567
+ $debug_output .= "\n".date('H:i:s.u').' wGetSpider results: $spider='.$spider.' $spidertype='.$spidertype.' $feed='.$feed;
1568
+ }
1569
  }
1570
  //it's a browser
1571
  if($spidertype == "B" && $urlRequested != "/robots.txt"){
1586
  if(strlen($agent)<5 || empty($os) || preg_match("#\s?([a-z]+(?:bot|crawler|google|spider|reader|agent))[^a-z]#i",$userAgent)>0 || strstr($urlRequested,"robots.txt")!==FALSE || is_feed()){
1587
  list($spider,$spidertype,$feed) = wGetSpider($userAgent,$hostname,$browser);
1588
  if($wdebug_mode){
1589
+ if(is_admin() || headers_sent()){
1590
+ if(!empty($debug_output)){
1591
+ echo $debug_output;
1592
+ echo "\nwassupappend-debug#6";
1593
+ $debug_output="";
1594
+ }
1595
+ echo "\n".date('H:i:s.u').' wGetSpider results: $spider='.$spider.' $spidertype='.$spidertype.' $feed='.$feed;
1596
+ }else{
1597
+ $debug_output .="\n".date('H:i:s.u').' wGetSpider results: $spider='.$spider.' $spidertype='.$spidertype.' $feed='.$feed;
1598
+ }
1599
  }
1600
+ }elseif(!empty($browser) && preg_match('#^(Google Chrome|Netscape|Mozilla|Mozilla Firefox)([0-9./ ]|$)#i',$browser)>0){
1601
+ //New in v1.9.2: old browser name is likely spider
1602
+ list($spider,$spidertype,$feed)=wGetSpider($userAgent,$hostname,$browser);
1603
+ }elseif(preg_match('#(msie|firefox|chrome)[\/ ](\d+)#i',$userAgent,$pcs)>0){
1604
  //obsolete browser is likely a spider
1605
  if($pcs[2]<8 || ($pcs[2]<30 && $pcs[1]!="msie")){
1606
+ list($spider,$spidertype,$feed)=wGetSpider($userAgent,$hostname,$browser);
1607
  }
1608
  }
1609
  //it's a browser
1737
  //get language/locale
1738
  if(empty($language) && !empty($recent_hit[0]->language)) $language=$recent_hit[0]->language;
1739
  if($wdebug_mode){
1740
+ if(is_admin() || headers_sent()){
1741
+ if(!empty($debug_output)){
1742
+ echo $debug_output;
1743
+ echo "\nwassupappend-debug#7";
1744
+ $debug_output="";
1745
+ }
1746
+ echo "\n language=$language";
1747
+ }else{
1748
+ $debug_output .= "\n language=$language";
1749
+ }
1750
  }
1751
  if(preg_match('/\.[a-z]{2,3}$/i',$hostname) >0 || preg_match('/[a-z\-_]+\.[a-z]{2,3}[^a-z]/i',$referrer) >0 || strlen($language)>2){
1752
  //get language/locale info from hostname or referrer data
1753
  $language=wGetLocale($language,$hostname,$referrer);
1754
  }
1755
  if($wdebug_mode){
1756
+ if(is_admin() || headers_sent()){
1757
+ if(!empty($debug_output)){
1758
+ echo $debug_output;
1759
+ echo "\nwassupappend-debug#8";
1760
+ $debug_output="";
1761
+ }
1762
+ echo "\n...language=$language (after geoip/wgetlocale)";
1763
+ }else{
1764
+ $debug_output .= " ...language=$language (after geoip/wgetlocale)";
1765
+ }
1766
  }
1767
  // get search engine and search keywords from referrer
1768
  $searchengine="";
1769
  $search_phrase="";
1770
  $searchpage="";
1771
+ $searchlocale="";
1772
  //don't check own blog for search engine data
1773
  if (!empty($referrer) && $spam == "0" && stristr($referrer,$blogurl)!=$referrer && !$wdebug_mode) {
1774
  $ref=(is_string($referrer)?$referrer:mb_convert_encoding(strip_tags($_SERVER['HTTP_REFERER']),"HTML-ENTITIES","auto"));
1780
  $searchengine="Google";
1781
  if($pcs[2]!="com" && $pcs[2]!="co"){
1782
  $searchlocale=$pcs[2];
1783
+ $searchengine .=" ".strtoupper($searchlocale);
1784
  }
1785
  //get the query keywords - will always be empty, until Google changes its policy
1786
  if(empty($pcs[4])) $search_phrase="_notprovided_";
1920
  }
1921
  }
1922
  if($wdebug_mode){
1923
+ if(is_admin() || headers_sent()){
1924
+ if(!empty($debug_output)){
1925
+ echo $debug_output;
1926
+ echo "\nwassupappend-debug#9";
1927
+ $debug_output="";
1928
+ }
1929
  if(!empty($wassup_recid)){
1930
  echo "\nWassUp record data:";
1931
  print_r($wassup_rec);
1945
  }
1946
  } //end if prefetch
1947
  }elseif($wdebug_mode){
1948
+ if(is_admin() || headers_sent()) echo "\n #18 Excluded by: wp-content/plugins (after 404)";
1949
  else $debug_output .="\n #18 Excluded by: wp-content/plugins (after 404)";
1950
  } //end if !wp-content/plugins
1951
  }elseif($wdebug_mode){
1952
+ if(is_admin() || headers_sent()) echo "\n #17 Excluded by: wassup_spam";
1953
  else $debug_output .="\n #17 Excluded by: wassup_spam";
1954
  } //end if $spam == 0
1955
  }elseif($wdebug_mode){
1956
+ if(is_admin() || headers_sent()) echo "\n #16 Excluded by: wassup_spider";
1957
  else $debug_output .="\n #16 Excluded by: wassup_spider";
1958
  } //end if wassup_spider
1959
  }elseif($wdebug_mode){
1960
+ if(is_admin() || headers_sent()) echo "\n #15 Excluded by: wassup_hack";
1961
  else $debug_output .="\n #15 Excluded by: wassup_hack";
1962
  } //end if wassup_hack
1963
  }elseif($wdebug_mode){
1964
+ if(is_admin() || headers_sent()) echo "\n #14 Excluded by: is_404";
1965
  else $debug_output .="\n #14 Excluded by: is_404";
1966
  } //end if !is_404
1967
  }elseif($wdebug_mode){
1968
+ if(is_admin() || headers_sent()) echo "\n #13 Excluded by: !wp-admin (ajax)";
1969
  else $debug_output .="\n #13 Excluded by: !wp_admin (ajax)";
1970
  } //end if !wp_admin (ajax) && recent_hit
1971
  }elseif($wdebug_mode){
1972
+ if(is_admin() || headers_sent()) echo "\n #12 Excluded by: dup_urlrequest";
1973
  else $debug_output .="\n #12 Excluded by: dup_urlrequest";
1974
  } //end if dup_urlrequest == 0
1975
  }elseif($wdebug_mode){
1976
+ if(is_admin() || headers_sent()) echo "\n #11 Excluded by: wassup_attack";
1977
  else $debug_output .="\n #11 Excluded by: wassup_attack";
1978
  } //end if wassup_attack
1979
  }elseif($wdebug_mode){
1980
+ if(is_admin() || headers_sent()) echo "\n #10 Excluded by: wassup_loggedin";
1981
  else $debug_output .="\n #10 Excluded by: wassup_loggedin";
1982
  } //end if wassup_loggedin
1983
  }elseif($wdebug_mode){
1984
+ if(is_admin() || headers_sent()) echo "\n #9 Excluded by: wp-content/themes";
1985
  else $debug_output .="\n #9 Excluded by: wp-content/themes";
1986
  } //end if !themes
1987
  }elseif($wdebug_mode){
1988
+ if(is_admin() || headers_sent()) echo "\n #8 Excluded by: wp-content/plugins (or hostname wildcard)";
1989
  else $debug_output .="\n #8 Excluded by: wp-content/plugins (or hostname wildcard)";
1990
  } //end if !plugins
1991
  }elseif($wdebug_mode){
1992
+ if(is_admin() || headers_sent()) echo "\n #7 Excluded by: exclude_host (or IP wilcard)";
1993
  else $debug_output .="\n #7 Excluded by: exclude_host (or IP wildcard)";
1994
  } //end if wassup_exclude_host
1995
  }elseif($wdebug_mode){
1996
+ if(is_admin() || headers_sent()) echo "\n #6 Excluded by: wassup_exclude";
1997
  else $debug_output .="\n #6 Excluded by: wassup_exclude";
1998
  } //end if wassup_exclude
1999
  }elseif($wdebug_mode){
2000
+ if(is_admin() || headers_sent()) echo "\n #5 Excluded by: exclude_url";
2001
  else $debug_output .="\n #5 Excluded by: exclude_url";
2002
  } //end if wassup_exclude_url
2003
  }elseif($wdebug_mode){
2004
+ if(is_admin() || headers_sent()) echo "\n #4 Excluded by: exclude_user";
2005
  else $debug_output .="\n #4 Excluded by: exclude_user";
2006
  } //end if wassup_exclude_user
2007
  }elseif($wdebug_mode){
2008
+ if(is_admin() || headers_sent()) echo "\n #3 Excluded by: is_admin";
2009
  else $debug_output .="\n #3 Excluded by: is_admin";
2010
  } //end if !is_admin
2011
  } //end if wp-cron.php?doing_wp_cron===FALSE //#2
2012
  }elseif($wdebug_mode){
2013
+ if(is_admin() || headers_sent()) echo "\n #1 Excluded by: is_admin_login";
2014
  else $debug_output .="\n #1 Excluded by: is_admin_login";
2015
  } //end if !is_admin_login
2016
 
2026
  }
2027
  if(is_numeric($result)) $in_temp=(int)$result;
2028
  if($wdebug_mode){
2029
+ if(is_admin() || headers_sent()) echo "\nin_temp=".$result;
2030
  else $debug_output .="\nin_temp=".$result;
2031
  }
2032
  //add new temp record
2119
  if(((int)$timestamp)%141 == 0 && (!is_multisite() || is_main_site() || !$wassup_options->network_activated_plugin())){
2120
  //Optimize table when optimize timestamp is older than current time
2121
  if(!empty($wassup_options->wassup_optimize) && is_numeric($wassup_options->wassup_optimize) && $now >(int)$wassup_options->wassup_optimize){
2122
+ $optimize_sql=sprintf("OPTIMIZE TABLE `%s`",$wassup_table);
2123
  if(version_compare($wp_version,'3.0','<')){
2124
  $wassup_dbtask[]=$optimize_sql;
2125
  }else{
2140
  wp_schedule_single_event(time()+40,'wassup_scheduled_dbtasks',$args);
2141
  }
2142
  if($wdebug_mode){
2143
+ if(is_admin() || headers_sent()){
2144
  echo "\nWassup scheduled tasks:";
2145
  print_r($wassup_dbtask);
2146
  }
2147
  }
2148
  }
2149
  if($wdebug_mode){ //close comment tag to hide debug data from visitors
2150
+ if(is_admin() || headers_sent()){
2151
  echo "\n--> \n";
2152
  }else{
2153
  $debug_output .= "<br />\n--> \n";
2154
  //add debug output to wp_footer output - TODO
2155
  $expire=time()+180;
2156
  $wassup_key=wassup_clientIP($_SERVER['REMOTE_ADDR']);
2157
+ wassupDb::update_wassupmeta($wassup_key,'_debug_output',$expire,$debug_output); //v1.9.2 bugfix
2158
  }
2159
  //restore normal mode
2160
  @ini_set('display_errors',$mode_reset);
2187
  }else{
2188
  if(!empty($wassup_options->delayed_insert)) $delayed=true;
2189
  $insert_id=wassupDb::table_insert($wTable,$wassup_rec,$delayed);
2190
+ //try regular insert when delayed insert fails on MySql server
2191
  if(!empty($insert_id) && is_wp_error($insert_id) && $delayed){
2192
  $insert_id=wassupDb::table_insert($wTable,$wassup_rec,false);
2193
  //always bypass delayed insert
2292
  if (!empty($urlstring)) {
2293
  $wtab=parse_url($urlstring);
2294
  if(key_exists("query",$wtab)){
2295
+ //use 'parse_str' when possible
2296
  parse_str($wtab["query"],$qvar);
2297
  }else{ //for partial urls
2298
+ //remove any anchor links from end of url
2299
  if(preg_match('/([^#]+)#.*/',$urlstring,$pcs)>0) $query=$pcs[1];
2300
  else $query=$urlstring;
2301
  $i=0;
2302
  while($query){
2303
  $pcs=array();
2304
+ //exclude 1st part of url up to and including the "?"
2305
  if(preg_match('/(?:[^?]*\?)?([^=&]+)(=[^&]+)?/',$query,$pcs)>0){
2306
  $name=$pcs[1];
2307
  if(empty($pcs[2])) $qvar[$name]=true;
3898
  $sessionhash=$wassup_options->whash;
3899
  if(empty($wscreen_res) && !isset($_COOKIE['wassup_screen_res'.$sessionhash])){
3900
  $ua=(!empty($_SERVER['HTTP_USER_AGENT'])?$_SERVER['HTTP_USER_AGENT']:"");
3901
+ if(strpos($ua,'MSIE')>0 || strpos($ua,'rv:11')>0 || strpos($ua,'Edge/')>0 || stristr($_SERVER['REQUEST_URI'],'login.php')!==false){
3902
  echo "\n";?>
3903
  <script language=javascript>
3904
  //<![CDATA[
3912
  //Output a comment with a current timestamp to verify that page is not cached (i.e. visit is being recorded).
3913
  echo "\n<!-- <p class=\"small\"> WassUp ".WASSUPVERSION." ".__("timestamp","wassup").": ".date('Y-m-d h:i:sA T')." (".gmdate('h:iA',time()+(get_option('gmt_offset')*3600)).")<br />\n";
3914
  echo __("If above timestamp is not current time, this page is cached","wassup").".</p> -->\n";
3915
+ //output any debug_output stored in wassup_meta @since v1.9.1
3916
  if($wdebug_mode){
3917
  $wassup_key=wassup_clientIP($_SERVER['REMOTE_ADDR']);
3918
  $debug_output=wassupDb::get_wassupmeta($wassup_key,'_debug_output');
3975
  if(!defined('WASSUPURL')){
3976
  if(!wassup_init()) return; //nothing to do
3977
  }
3978
+ if(!empty($wassup_options) && $wassup_options->is_recording_active()){
3979
  //do scheduled cleanup
3980
  if(empty($dbtasks)){
3981
  wassupDb::temp_cleanup();
3992
  if(!wassup_init()) return; //nothing to do
3993
  }
3994
  //check that user can do auto delete
3995
+ if(!empty($wassup_options) && $wassup_options->is_recording_active()){
3996
  if(!empty($wassup_options->delete_auto) && $wassup_options->delete_auto!="never"){
3997
  //check last auto delete timestamp to ensure purge occurs only once a day
3998
  $wassup_table=$wassup_options->wassup_table;
4083
  if(!function_exists('wassup_widget_get_cache')){
4084
  include_once(WASSUPDIR.'/widgets/widget_functions.php');
4085
  }
4086
+ if(empty($before_widget) || empty($after_widget) || strpos($before_widget,'>')===false || strpos($after_widget,'</')===false){
4087
  $before_widget='<div id="wassup_sidebar" class="widget wassup-widget">';
4088
  $after_widget='</div>';
4089
  }
4090
+ if(empty($before_title) || empty($after_title) || strpos($before_title,'>')===false || strpos($after_title,'</')===false){
4091
  $before_title='<h2 class="widget-title wassup-widget-title">';
4092
  $after_title='</h2>';
4093
  }
4094
+ if($wtitle!="") $title=$wtitle;
4095
  else $title=__("Visitors Online","wassup");
4096
  if($wulclass!="" && preg_match('/([^a-z0-9\-_]+)/',$wulclass)>0) $wulclass=""; //no special chars allowed
4097
  if($wulclass!="") $ulclass=' class="'.$wulclass.'"';
4101
  //check for cached 'wassup_sidebar' html
4102
  $widget_html=wassup_widget_get_cache('wassup_sidebar',$cache_key);
4103
  if(empty($widget_html)){
4104
+ //show widget stats only when WassUp is active
4105
+ if(empty($wassup_options) || !$wassup_options->is_recording_active()){
4106
+ return; //nothing to do
4107
+ }
4108
+ //base widget info
4109
+ $widget_html="\n".$before_widget;
4110
+ if(!empty($title)) $widget_html.='
4111
  '.$before_title.$title.$after_title;
4112
+ $widget_html .='
4113
  <p class="small">'.__("No Data","wassup").'</p>'.wassup_widget_foot_meta().$after_widget;
4114
+ //calculate widget users online and top stats data
4115
+ $online_html="";
4116
+ $top_html="";
4117
+ $instance=array(
 
4118
  'title'=>"",
4119
  'ulclass'=>$wulclass,
4120
  'chars'=>$chars,
4127
  'top_referrers'=>(int)$wreflimit,
4128
  'top_browsers'=>(int)$wtopbrlimit,
4129
  'top_os'=>(int)$wtoposlimit,
4130
+ );
4131
+ //get online counts
4132
+ $html=wassup_widget_get_online_counts($instance);
4133
+ if(!empty($html)){
4134
+ $online_html= "\n".$before_widget;
4135
+ if(!empty($title)) $online_html.='
4136
  '.$before_title.$title.$after_title;
4137
+ $online_html .='
4138
  <ul'.$ulclass.'>
4139
  '.$html.'
4140
  </ul>'.wassup_widget_foot_meta().$after_widget;
4141
+ }
4142
+ //get top stats
4143
+ if($instance['top_searches']>0 || $instance['top_referrers']>0 || $instance['top_browsers']>0 || $instance['top_os']>0){
4144
+ $to_date=current_time('timestamp');
4145
+ $from_date=$to_date-24*60*60;
4146
+ $i=0;
4147
+ foreach(array('searches','referrers','browsers','os') AS $item){
4148
+ $html="";
4149
+ $limit=$instance['top_'.$item];
4150
+ if($limit >0) $html=wassup_widget_get_topstat($item,$limit,$chars,$from_date);
4151
+ if(!empty($html)){
4152
+ $title=$before_title.wassup_widget_stat_gettext($item).$after_title;
4153
+ if($i>0) $top_html .="\n".$after_widget;
4154
+ $top_html .="\n".$before_widget;
4155
+ $top_html .='
4156
  '.$title.'
4157
  <ul'.$ulclass.'>'.$html.'
4158
  </ul>';
4159
+ $i++;
4160
+ }
4161
+ } //end foreach
4162
+ //append footer meta to end of widget
4163
+ if(!empty($top_html)) $top_html .=wassup_widget_foot_meta().$after_widget;
4164
+ } //end if top_searches>0
4165
+ //cache the new sidebar widget data
4166
+ if(!empty($top_html) || !empty($online_html)){
4167
+ $widget_html=$top_html.$online_html;
4168
+ $refresh=1;
4169
+ $cacheid=wassup_widget_save_cache($widget_html,'wassup_sidebar',$cache_key,$refresh);
4170
+ }
4171
+ } //end if widget_html
4172
+ echo "\n".'<div class="wassup_sidebar">'."\n";
4173
+ echo wassup_widget_css(true); //true==embed widget style
4174
+ echo $widget_html;
4175
+ echo "\n".'</div>';
 
 
 
4176
  } //end wassup_sidebar
4177
  //-------------------------------------------------
4178
  //## Add essential hooks after functions have been defined
4179
  //uninstall hook for complete plugin removal from WordPress
4180
  register_activation_hook($wassupfile,'wassup_install');
4181
+ if(function_exists('register_uninstall_hook')){
4182
+ register_uninstall_hook($wassupfile,'wassup_uninstall');
4183
+ }
4184
  unset($wassupfile); //to free memory
4185
  wassup_start(); //start WassUp
4186
  ?>
widgets/widget_functions.php CHANGED
@@ -7,29 +7,22 @@
7
  * @since: v1.9
8
  * @author: Helene D. <http://helenesit.com>
9
  */
10
- //-------------------------------------------------
11
- //# No direct requests for this plugin module
12
- $wfile=preg_replace('/\\\\/','/',__FILE__); //for windows
13
  //abort if this is direct uri request for file
14
- if((!empty($_SERVER['PHP_SELF']) && preg_match('#'.preg_quote($_SERVER['PHP_SELF']).'$#',$wfile)>0) ||
15
- (!empty($_SERVER['SCRIPT_FILENAME']) && realpath($_SERVER['SCRIPT_FILENAME'])===realpath($wfile))){
16
  //try track this uri request
17
  if(!headers_sent()){
18
  //triggers redirect to 404 error page so Wassup can track this attempt to access itself (original request_uri is lost)
19
- header('Location: /?p=404page&err=wassup403'.'&wf='.basename($wfile));
20
  exit;
21
  }else{
22
  //'wp_die' may be undefined here
23
  die('<strong>Sorry. Unable to display requested page.</strong>');
24
  }
25
- exit;
26
  //abort if no WordPress
27
  }elseif(!defined('ABSPATH') || empty($GLOBALS['wp_version'])){
28
  //show escaped bad request on exit
29
- die("Bad Request: ".htmlspecialchars(preg_replace('/(&#0*37;|&amp;#0*37;|&#0*38;#0*37;|%)(?:[01][0-9A-F]|7F)/i','',$_SERVER['REQUEST_URI'])));
30
  }
31
- unset($wfile); //to free memory
32
-
33
  //-------------------------------------------------
34
  /**
35
  * Retrieve widget html from Wassup cache using widget_id as 'wassup key' indentifier.
@@ -101,9 +94,9 @@ function wassup_widget_css($embed=false){
101
 
102
  /** Embeds form styles in admin head for widget control styling */
103
  function wassup_widget_form_css(){
104
- global $wp_version,$wdebug_mode;
105
- $vers=WASSUPVERSION;
106
- if($wdebug_mode) $vers.='b'.rand(0,9999);
107
  }
108
 
109
  /** Returns html for wassup tag line to add to widget footer. */
7
  * @since: v1.9
8
  * @author: Helene D. <http://helenesit.com>
9
  */
 
 
 
10
  //abort if this is direct uri request for file
11
+ if(!empty($_SERVER['SCRIPT_FILENAME']) && realpath($_SERVER['SCRIPT_FILENAME'])===realpath(preg_replace('/\\\\/','/',__FILE__))){
 
12
  //try track this uri request
13
  if(!headers_sent()){
14
  //triggers redirect to 404 error page so Wassup can track this attempt to access itself (original request_uri is lost)
15
+ header('Location: /?p=404page&werr=wassup403'.'&wf='.basename(__FILE__));
16
  exit;
17
  }else{
18
  //'wp_die' may be undefined here
19
  die('<strong>Sorry. Unable to display requested page.</strong>');
20
  }
 
21
  //abort if no WordPress
22
  }elseif(!defined('ABSPATH') || empty($GLOBALS['wp_version'])){
23
  //show escaped bad request on exit
24
+ die("Bad Request: ".htmlspecialchars(preg_replace('/(&#0*37;?|&amp;?#0*37;?|&#0*38;?#0*37;?|%)(?:[01][0-9A-F]|7F)/i','',$_SERVER['REQUEST_URI'])));
25
  }
 
 
26
  //-------------------------------------------------
27
  /**
28
  * Retrieve widget html from Wassup cache using widget_id as 'wassup key' indentifier.
94
 
95
  /** Embeds form styles in admin head for widget control styling */
96
  function wassup_widget_form_css(){
97
+ if(function_exists('wassup_compat_widget_form_css')){
98
+ wassup_compat_widget_form_css(); //@since v1.9.1
99
+ }
100
  }
101
 
102
  /** Returns html for wassup tag line to add to widget footer. */
widgets/widgets.php CHANGED
@@ -7,29 +7,22 @@
7
  * @since: v1.9
8
  * @author: Helene D. <http://helenesit.com>
9
  */
10
- //-------------------------------------------------
11
- //# No direct requests for this plugin module
12
- $wfile=preg_replace('/\\\\/','/',__FILE__); //for windows
13
  //abort if this is direct uri request for file
14
- if((!empty($_SERVER['PHP_SELF']) && preg_match('#'.preg_quote($_SERVER['PHP_SELF']).'$#',$wfile)>0) ||
15
- (!empty($_SERVER['SCRIPT_FILENAME']) && realpath($_SERVER['SCRIPT_FILENAME'])===realpath($wfile))){
16
  //try track this uri request
17
  if(!headers_sent()){
18
  //triggers redirect to 404 error page so Wassup can track this attempt to access itself (original request_uri is lost)
19
- header('Location: /?p=404page&err=wassup403'.'&wf='.basename($wfile));
20
  exit;
21
  }else{
22
  //'wp_die' may be undefined here
23
  die('<strong>Sorry. Unable to display requested page.</strong>');
24
  }
25
- exit;
26
  //abort if no WordPress
27
  }elseif(!defined('ABSPATH') || empty($GLOBALS['wp_version'])){
28
  //show escaped bad request on exit
29
- die("Bad Request: ".htmlspecialchars(preg_replace('/(&#0*37;|&amp;#0*37;|&#0*38;#0*37;|%)(?:[01][0-9A-F]|7F)/i','',$_SERVER['REQUEST_URI'])));
30
  }
31
- unset($wfile); //to free memory
32
-
33
  //-------------------------------------------------
34
  if(!defined('WASSUPURL')){
35
  if(!wassup_init()) exit; //nothing to do
7
  * @since: v1.9
8
  * @author: Helene D. <http://helenesit.com>
9
  */
 
 
 
10
  //abort if this is direct uri request for file
11
+ if(!empty($_SERVER['SCRIPT_FILENAME']) && realpath($_SERVER['SCRIPT_FILENAME'])===realpath(preg_replace('/\\\\/','/',__FILE__))){
 
12
  //try track this uri request
13
  if(!headers_sent()){
14
  //triggers redirect to 404 error page so Wassup can track this attempt to access itself (original request_uri is lost)
15
+ header('Location: /?p=404page&werr=wassup403'.'&wf='.basename(__FILE__));
16
  exit;
17
  }else{
18
  //'wp_die' may be undefined here
19
  die('<strong>Sorry. Unable to display requested page.</strong>');
20
  }
 
21
  //abort if no WordPress
22
  }elseif(!defined('ABSPATH') || empty($GLOBALS['wp_version'])){
23
  //show escaped bad request on exit
24
+ die("Bad Request: ".htmlspecialchars(preg_replace('/(&#0*37;?|&amp;?#0*37;?|&#0*38;?#0*37;?|%)(?:[01][0-9A-F]|7F)/i','',$_SERVER['REQUEST_URI'])));
25
  }
 
 
26
  //-------------------------------------------------
27
  if(!defined('WASSUPURL')){
28
  if(!wassup_init()) exit; //nothing to do