WassUp Real Time Analytics - Version 1.9.4

Version Description

  • Important feature & 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.4
Comparing to
See all releases

Code changes from version 1.9.3 to 1.9.4

css/jquery-ui/jquery-ui.css ADDED
@@ -0,0 +1,1225 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*! jQuery UI - v1.11.4 - 2015-03-11
2
+ * http://jqueryui.com
3
+ * Includes: core.css, accordion.css, autocomplete.css, button.css, datepicker.css, dialog.css, draggable.css, menu.css, progressbar.css, resizable.css, selectable.css, selectmenu.css, slider.css, sortable.css, spinner.css, tabs.css, tooltip.css, theme.css
4
+ * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana%2CArial%2Csans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=highlight_soft&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=flat&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=glass&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=glass&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=glass&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=glass&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px
5
+ * Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */
6
+
7
+ /* Layout helpers
8
+ ----------------------------------*/
9
+ .ui-helper-hidden {
10
+ display: none;
11
+ }
12
+ .ui-helper-hidden-accessible {
13
+ border: 0;
14
+ clip: rect(0 0 0 0);
15
+ height: 1px;
16
+ margin: -1px;
17
+ overflow: hidden;
18
+ padding: 0;
19
+ position: absolute;
20
+ width: 1px;
21
+ }
22
+ .ui-helper-reset {
23
+ margin: 0;
24
+ padding: 0;
25
+ border: 0;
26
+ outline: 0;
27
+ line-height: 1.3;
28
+ text-decoration: none;
29
+ font-size: 100%;
30
+ list-style: none;
31
+ }
32
+ .ui-helper-clearfix:before,
33
+ .ui-helper-clearfix:after {
34
+ content: "";
35
+ display: table;
36
+ border-collapse: collapse;
37
+ }
38
+ .ui-helper-clearfix:after {
39
+ clear: both;
40
+ }
41
+ .ui-helper-clearfix {
42
+ min-height: 0; /* support: IE7 */
43
+ }
44
+ .ui-helper-zfix {
45
+ width: 100%;
46
+ height: 100%;
47
+ top: 0;
48
+ left: 0;
49
+ position: absolute;
50
+ opacity: 0;
51
+ filter:Alpha(Opacity=0); /* support: IE8 */
52
+ }
53
+
54
+ .ui-front {
55
+ z-index: 100;
56
+ }
57
+
58
+
59
+ /* Interaction Cues
60
+ ----------------------------------*/
61
+ .ui-state-disabled {
62
+ cursor: default !important;
63
+ }
64
+
65
+
66
+ /* Icons
67
+ ----------------------------------*/
68
+
69
+ /* states and images */
70
+ .ui-icon {
71
+ display: block;
72
+ text-indent: -99999px;
73
+ overflow: hidden;
74
+ background-repeat: no-repeat;
75
+ }
76
+
77
+
78
+ /* Misc visuals
79
+ ----------------------------------*/
80
+
81
+ /* Overlays */
82
+ .ui-widget-overlay {
83
+ position: fixed;
84
+ top: 0;
85
+ left: 0;
86
+ width: 100%;
87
+ height: 100%;
88
+ }
89
+ .ui-accordion .ui-accordion-header {
90
+ display: block;
91
+ cursor: pointer;
92
+ position: relative;
93
+ margin: 2px 0 0 0;
94
+ padding: .5em .5em .5em .7em;
95
+ min-height: 0; /* support: IE7 */
96
+ font-size: 100%;
97
+ }
98
+ .ui-accordion .ui-accordion-icons {
99
+ padding-left: 2.2em;
100
+ }
101
+ .ui-accordion .ui-accordion-icons .ui-accordion-icons {
102
+ padding-left: 2.2em;
103
+ }
104
+ .ui-accordion .ui-accordion-header .ui-accordion-header-icon {
105
+ position: absolute;
106
+ left: .5em;
107
+ top: 50%;
108
+ margin-top: -8px;
109
+ }
110
+ .ui-accordion .ui-accordion-content {
111
+ padding: 1em 2.2em;
112
+ border-top: 0;
113
+ overflow: auto;
114
+ }
115
+ .ui-autocomplete {
116
+ position: absolute;
117
+ top: 0;
118
+ left: 0;
119
+ cursor: default;
120
+ }
121
+ .ui-button {
122
+ display: inline-block;
123
+ position: relative;
124
+ padding: 0;
125
+ line-height: normal;
126
+ margin-right: .1em;
127
+ cursor: pointer;
128
+ vertical-align: middle;
129
+ text-align: center;
130
+ overflow: visible; /* removes extra width in IE */
131
+ }
132
+ .ui-button,
133
+ .ui-button:link,
134
+ .ui-button:visited,
135
+ .ui-button:hover,
136
+ .ui-button:active {
137
+ text-decoration: none;
138
+ }
139
+ /* to make room for the icon, a width needs to be set here */
140
+ .ui-button-icon-only {
141
+ width: 2.2em;
142
+ }
143
+ /* button elements seem to need a little more width */
144
+ button.ui-button-icon-only {
145
+ width: 2.4em;
146
+ }
147
+ .ui-button-icons-only {
148
+ width: 3.4em;
149
+ }
150
+ button.ui-button-icons-only {
151
+ width: 3.7em;
152
+ }
153
+
154
+ /* button text element */
155
+ .ui-button .ui-button-text {
156
+ display: block;
157
+ line-height: normal;
158
+ }
159
+ .ui-button-text-only .ui-button-text {
160
+ padding: .4em 1em;
161
+ }
162
+ .ui-button-icon-only .ui-button-text,
163
+ .ui-button-icons-only .ui-button-text {
164
+ padding: .4em;
165
+ text-indent: -9999999px;
166
+ }
167
+ .ui-button-text-icon-primary .ui-button-text,
168
+ .ui-button-text-icons .ui-button-text {
169
+ padding: .4em 1em .4em 2.1em;
170
+ }
171
+ .ui-button-text-icon-secondary .ui-button-text,
172
+ .ui-button-text-icons .ui-button-text {
173
+ padding: .4em 2.1em .4em 1em;
174
+ }
175
+ .ui-button-text-icons .ui-button-text {
176
+ padding-left: 2.1em;
177
+ padding-right: 2.1em;
178
+ }
179
+ /* no icon support for input elements, provide padding by default */
180
+ input.ui-button {
181
+ padding: .4em 1em;
182
+ }
183
+
184
+ /* button icon element(s) */
185
+ .ui-button-icon-only .ui-icon,
186
+ .ui-button-text-icon-primary .ui-icon,
187
+ .ui-button-text-icon-secondary .ui-icon,
188
+ .ui-button-text-icons .ui-icon,
189
+ .ui-button-icons-only .ui-icon {
190
+ position: absolute;
191
+ top: 50%;
192
+ margin-top: -8px;
193
+ }
194
+ .ui-button-icon-only .ui-icon {
195
+ left: 50%;
196
+ margin-left: -8px;
197
+ }
198
+ .ui-button-text-icon-primary .ui-button-icon-primary,
199
+ .ui-button-text-icons .ui-button-icon-primary,
200
+ .ui-button-icons-only .ui-button-icon-primary {
201
+ left: .5em;
202
+ }
203
+ .ui-button-text-icon-secondary .ui-button-icon-secondary,
204
+ .ui-button-text-icons .ui-button-icon-secondary,
205
+ .ui-button-icons-only .ui-button-icon-secondary {
206
+ right: .5em;
207
+ }
208
+
209
+ /* button sets */
210
+ .ui-buttonset {
211
+ margin-right: 7px;
212
+ }
213
+ .ui-buttonset .ui-button {
214
+ margin-left: 0;
215
+ margin-right: -.3em;
216
+ }
217
+
218
+ /* workarounds */
219
+ /* reset extra padding in Firefox, see h5bp.com/l */
220
+ input.ui-button::-moz-focus-inner,
221
+ button.ui-button::-moz-focus-inner {
222
+ border: 0;
223
+ padding: 0;
224
+ }
225
+ .ui-datepicker {
226
+ width: 17em;
227
+ padding: .2em .2em 0;
228
+ display: none;
229
+ }
230
+ .ui-datepicker .ui-datepicker-header {
231
+ position: relative;
232
+ padding: .2em 0;
233
+ }
234
+ .ui-datepicker .ui-datepicker-prev,
235
+ .ui-datepicker .ui-datepicker-next {
236
+ position: absolute;
237
+ top: 2px;
238
+ width: 1.8em;
239
+ height: 1.8em;
240
+ }
241
+ .ui-datepicker .ui-datepicker-prev-hover,
242
+ .ui-datepicker .ui-datepicker-next-hover {
243
+ top: 1px;
244
+ }
245
+ .ui-datepicker .ui-datepicker-prev {
246
+ left: 2px;
247
+ }
248
+ .ui-datepicker .ui-datepicker-next {
249
+ right: 2px;
250
+ }
251
+ .ui-datepicker .ui-datepicker-prev-hover {
252
+ left: 1px;
253
+ }
254
+ .ui-datepicker .ui-datepicker-next-hover {
255
+ right: 1px;
256
+ }
257
+ .ui-datepicker .ui-datepicker-prev span,
258
+ .ui-datepicker .ui-datepicker-next span {
259
+ display: block;
260
+ position: absolute;
261
+ left: 50%;
262
+ margin-left: -8px;
263
+ top: 50%;
264
+ margin-top: -8px;
265
+ }
266
+ .ui-datepicker .ui-datepicker-title {
267
+ margin: 0 2.3em;
268
+ line-height: 1.8em;
269
+ text-align: center;
270
+ }
271
+ .ui-datepicker .ui-datepicker-title select {
272
+ font-size: 1em;
273
+ margin: 1px 0;
274
+ }
275
+ .ui-datepicker select.ui-datepicker-month,
276
+ .ui-datepicker select.ui-datepicker-year {
277
+ width: 45%;
278
+ }
279
+ .ui-datepicker table {
280
+ width: 100%;
281
+ font-size: .9em;
282
+ border-collapse: collapse;
283
+ margin: 0 0 .4em;
284
+ }
285
+ .ui-datepicker th {
286
+ padding: .7em .3em;
287
+ text-align: center;
288
+ font-weight: bold;
289
+ border: 0;
290
+ }
291
+ .ui-datepicker td {
292
+ border: 0;
293
+ padding: 1px;
294
+ }
295
+ .ui-datepicker td span,
296
+ .ui-datepicker td a {
297
+ display: block;
298
+ padding: .2em;
299
+ text-align: right;
300
+ text-decoration: none;
301
+ }
302
+ .ui-datepicker .ui-datepicker-buttonpane {
303
+ background-image: none;
304
+ margin: .7em 0 0 0;
305
+ padding: 0 .2em;
306
+ border-left: 0;
307
+ border-right: 0;
308
+ border-bottom: 0;
309
+ }
310
+ .ui-datepicker .ui-datepicker-buttonpane button {
311
+ float: right;
312
+ margin: .5em .2em .4em;
313
+ cursor: pointer;
314
+ padding: .2em .6em .3em .6em;
315
+ width: auto;
316
+ overflow: visible;
317
+ }
318
+ .ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
319
+ float: left;
320
+ }
321
+
322
+ /* with multiple calendars */
323
+ .ui-datepicker.ui-datepicker-multi {
324
+ width: auto;
325
+ }
326
+ .ui-datepicker-multi .ui-datepicker-group {
327
+ float: left;
328
+ }
329
+ .ui-datepicker-multi .ui-datepicker-group table {
330
+ width: 95%;
331
+ margin: 0 auto .4em;
332
+ }
333
+ .ui-datepicker-multi-2 .ui-datepicker-group {
334
+ width: 50%;
335
+ }
336
+ .ui-datepicker-multi-3 .ui-datepicker-group {
337
+ width: 33.3%;
338
+ }
339
+ .ui-datepicker-multi-4 .ui-datepicker-group {
340
+ width: 25%;
341
+ }
342
+ .ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
343
+ .ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
344
+ border-left-width: 0;
345
+ }
346
+ .ui-datepicker-multi .ui-datepicker-buttonpane {
347
+ clear: left;
348
+ }
349
+ .ui-datepicker-row-break {
350
+ clear: both;
351
+ width: 100%;
352
+ font-size: 0;
353
+ }
354
+
355
+ /* RTL support */
356
+ .ui-datepicker-rtl {
357
+ direction: rtl;
358
+ }
359
+ .ui-datepicker-rtl .ui-datepicker-prev {
360
+ right: 2px;
361
+ left: auto;
362
+ }
363
+ .ui-datepicker-rtl .ui-datepicker-next {
364
+ left: 2px;
365
+ right: auto;
366
+ }
367
+ .ui-datepicker-rtl .ui-datepicker-prev:hover {
368
+ right: 1px;
369
+ left: auto;
370
+ }
371
+ .ui-datepicker-rtl .ui-datepicker-next:hover {
372
+ left: 1px;
373
+ right: auto;
374
+ }
375
+ .ui-datepicker-rtl .ui-datepicker-buttonpane {
376
+ clear: right;
377
+ }
378
+ .ui-datepicker-rtl .ui-datepicker-buttonpane button {
379
+ float: left;
380
+ }
381
+ .ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
382
+ .ui-datepicker-rtl .ui-datepicker-group {
383
+ float: right;
384
+ }
385
+ .ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
386
+ .ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
387
+ border-right-width: 0;
388
+ border-left-width: 1px;
389
+ }
390
+ .ui-dialog {
391
+ overflow: hidden;
392
+ position: absolute;
393
+ top: 0;
394
+ left: 0;
395
+ padding: .2em;
396
+ outline: 0;
397
+ }
398
+ .ui-dialog .ui-dialog-titlebar {
399
+ padding: .4em 1em;
400
+ position: relative;
401
+ }
402
+ .ui-dialog .ui-dialog-title {
403
+ float: left;
404
+ margin: .1em 0;
405
+ white-space: nowrap;
406
+ width: 90%;
407
+ overflow: hidden;
408
+ text-overflow: ellipsis;
409
+ }
410
+ .ui-dialog .ui-dialog-titlebar-close {
411
+ position: absolute;
412
+ right: .3em;
413
+ top: 50%;
414
+ width: 20px;
415
+ margin: -10px 0 0 0;
416
+ padding: 1px;
417
+ height: 20px;
418
+ }
419
+ .ui-dialog .ui-dialog-content {
420
+ position: relative;
421
+ border: 0;
422
+ padding: .5em 1em;
423
+ background: none;
424
+ overflow: auto;
425
+ }
426
+ .ui-dialog .ui-dialog-buttonpane {
427
+ text-align: left;
428
+ border-width: 1px 0 0 0;
429
+ background-image: none;
430
+ margin-top: .5em;
431
+ padding: .3em 1em .5em .4em;
432
+ }
433
+ .ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
434
+ float: right;
435
+ }
436
+ .ui-dialog .ui-dialog-buttonpane button {
437
+ margin: .5em .4em .5em 0;
438
+ cursor: pointer;
439
+ }
440
+ .ui-dialog .ui-resizable-se {
441
+ width: 12px;
442
+ height: 12px;
443
+ right: -5px;
444
+ bottom: -5px;
445
+ background-position: 16px 16px;
446
+ }
447
+ .ui-draggable .ui-dialog-titlebar {
448
+ cursor: move;
449
+ }
450
+ .ui-draggable-handle {
451
+ -ms-touch-action: none;
452
+ touch-action: none;
453
+ }
454
+ .ui-menu {
455
+ list-style: none;
456
+ padding: 0;
457
+ margin: 0;
458
+ display: block;
459
+ outline: none;
460
+ }
461
+ .ui-menu .ui-menu {
462
+ position: absolute;
463
+ }
464
+ .ui-menu .ui-menu-item {
465
+ position: relative;
466
+ margin: 0;
467
+ padding: 3px 1em 3px .4em;
468
+ cursor: pointer;
469
+ min-height: 0; /* support: IE7 */
470
+ /* support: IE10, see #8844 */
471
+ list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");
472
+ }
473
+ .ui-menu .ui-menu-divider {
474
+ margin: 5px 0;
475
+ height: 0;
476
+ font-size: 0;
477
+ line-height: 0;
478
+ border-width: 1px 0 0 0;
479
+ }
480
+ .ui-menu .ui-state-focus,
481
+ .ui-menu .ui-state-active {
482
+ margin: -1px;
483
+ }
484
+
485
+ /* icon support */
486
+ .ui-menu-icons {
487
+ position: relative;
488
+ }
489
+ .ui-menu-icons .ui-menu-item {
490
+ padding-left: 2em;
491
+ }
492
+
493
+ /* left-aligned */
494
+ .ui-menu .ui-icon {
495
+ position: absolute;
496
+ top: 0;
497
+ bottom: 0;
498
+ left: .2em;
499
+ margin: auto 0;
500
+ }
501
+
502
+ /* right-aligned */
503
+ .ui-menu .ui-menu-icon {
504
+ left: auto;
505
+ right: 0;
506
+ }
507
+ .ui-progressbar {
508
+ height: 2em;
509
+ text-align: left;
510
+ overflow: hidden;
511
+ }
512
+ .ui-progressbar .ui-progressbar-value {
513
+ margin: -1px;
514
+ height: 100%;
515
+ }
516
+ .ui-progressbar .ui-progressbar-overlay {
517
+ background: url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");
518
+ height: 100%;
519
+ filter: alpha(opacity=25); /* support: IE8 */
520
+ opacity: 0.25;
521
+ }
522
+ .ui-progressbar-indeterminate .ui-progressbar-value {
523
+ background-image: none;
524
+ }
525
+ .ui-resizable {
526
+ position: relative;
527
+ }
528
+ .ui-resizable-handle {
529
+ position: absolute;
530
+ font-size: 0.1px;
531
+ display: block;
532
+ -ms-touch-action: none;
533
+ touch-action: none;
534
+ }
535
+ .ui-resizable-disabled .ui-resizable-handle,
536
+ .ui-resizable-autohide .ui-resizable-handle {
537
+ display: none;
538
+ }
539
+ .ui-resizable-n {
540
+ cursor: n-resize;
541
+ height: 7px;
542
+ width: 100%;
543
+ top: -5px;
544
+ left: 0;
545
+ }
546
+ .ui-resizable-s {
547
+ cursor: s-resize;
548
+ height: 7px;
549
+ width: 100%;
550
+ bottom: -5px;
551
+ left: 0;
552
+ }
553
+ .ui-resizable-e {
554
+ cursor: e-resize;
555
+ width: 7px;
556
+ right: -5px;
557
+ top: 0;
558
+ height: 100%;
559
+ }
560
+ .ui-resizable-w {
561
+ cursor: w-resize;
562
+ width: 7px;
563
+ left: -5px;
564
+ top: 0;
565
+ height: 100%;
566
+ }
567
+ .ui-resizable-se {
568
+ cursor: se-resize;
569
+ width: 12px;
570
+ height: 12px;
571
+ right: 1px;
572
+ bottom: 1px;
573
+ }
574
+ .ui-resizable-sw {
575
+ cursor: sw-resize;
576
+ width: 9px;
577
+ height: 9px;
578
+ left: -5px;
579
+ bottom: -5px;
580
+ }
581
+ .ui-resizable-nw {
582
+ cursor: nw-resize;
583
+ width: 9px;
584
+ height: 9px;
585
+ left: -5px;
586
+ top: -5px;
587
+ }
588
+ .ui-resizable-ne {
589
+ cursor: ne-resize;
590
+ width: 9px;
591
+ height: 9px;
592
+ right: -5px;
593
+ top: -5px;
594
+ }
595
+ .ui-selectable {
596
+ -ms-touch-action: none;
597
+ touch-action: none;
598
+ }
599
+ .ui-selectable-helper {
600
+ position: absolute;
601
+ z-index: 100;
602
+ border: 1px dotted black;
603
+ }
604
+ .ui-selectmenu-menu {
605
+ padding: 0;
606
+ margin: 0;
607
+ position: absolute;
608
+ top: 0;
609
+ left: 0;
610
+ display: none;
611
+ }
612
+ .ui-selectmenu-menu .ui-menu {
613
+ overflow: auto;
614
+ /* Support: IE7 */
615
+ overflow-x: hidden;
616
+ padding-bottom: 1px;
617
+ }
618
+ .ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup {
619
+ font-size: 1em;
620
+ font-weight: bold;
621
+ line-height: 1.5;
622
+ padding: 2px 0.4em;
623
+ margin: 0.5em 0 0 0;
624
+ height: auto;
625
+ border: 0;
626
+ }
627
+ .ui-selectmenu-open {
628
+ display: block;
629
+ }
630
+ .ui-selectmenu-button {
631
+ display: inline-block;
632
+ overflow: hidden;
633
+ position: relative;
634
+ text-decoration: none;
635
+ cursor: pointer;
636
+ }
637
+ .ui-selectmenu-button span.ui-icon {
638
+ right: 0.5em;
639
+ left: auto;
640
+ margin-top: -8px;
641
+ position: absolute;
642
+ top: 50%;
643
+ }
644
+ .ui-selectmenu-button span.ui-selectmenu-text {
645
+ text-align: left;
646
+ padding: 0.4em 2.1em 0.4em 1em;
647
+ display: block;
648
+ line-height: 1.4;
649
+ overflow: hidden;
650
+ text-overflow: ellipsis;
651
+ white-space: nowrap;
652
+ }
653
+ .ui-slider {
654
+ position: relative;
655
+ text-align: left;
656
+ }
657
+ .ui-slider .ui-slider-handle {
658
+ position: absolute;
659
+ z-index: 2;
660
+ width: 1.2em;
661
+ height: 1.2em;
662
+ cursor: default;
663
+ -ms-touch-action: none;
664
+ touch-action: none;
665
+ }
666
+ .ui-slider .ui-slider-range {
667
+ position: absolute;
668
+ z-index: 1;
669
+ font-size: .7em;
670
+ display: block;
671
+ border: 0;
672
+ background-position: 0 0;
673
+ }
674
+
675
+ /* support: IE8 - See #6727 */
676
+ .ui-slider.ui-state-disabled .ui-slider-handle,
677
+ .ui-slider.ui-state-disabled .ui-slider-range {
678
+ filter: inherit;
679
+ }
680
+
681
+ .ui-slider-horizontal {
682
+ height: .8em;
683
+ }
684
+ .ui-slider-horizontal .ui-slider-handle {
685
+ top: -.3em;
686
+ margin-left: -.6em;
687
+ }
688
+ .ui-slider-horizontal .ui-slider-range {
689
+ top: 0;
690
+ height: 100%;
691
+ }
692
+ .ui-slider-horizontal .ui-slider-range-min {
693
+ left: 0;
694
+ }
695
+ .ui-slider-horizontal .ui-slider-range-max {
696
+ right: 0;
697
+ }
698
+
699
+ .ui-slider-vertical {
700
+ width: .8em;
701
+ height: 100px;
702
+ }
703
+ .ui-slider-vertical .ui-slider-handle {
704
+ left: -.3em;
705
+ margin-left: 0;
706
+ margin-bottom: -.6em;
707
+ }
708
+ .ui-slider-vertical .ui-slider-range {
709
+ left: 0;
710
+ width: 100%;
711
+ }
712
+ .ui-slider-vertical .ui-slider-range-min {
713
+ bottom: 0;
714
+ }
715
+ .ui-slider-vertical .ui-slider-range-max {
716
+ top: 0;
717
+ }
718
+ .ui-sortable-handle {
719
+ -ms-touch-action: none;
720
+ touch-action: none;
721
+ }
722
+ .ui-spinner {
723
+ position: relative;
724
+ display: inline-block;
725
+ overflow: hidden;
726
+ padding: 0;
727
+ vertical-align: middle;
728
+ }
729
+ .ui-spinner-input {
730
+ border: none;
731
+ background: none;
732
+ color: inherit;
733
+ padding: 0;
734
+ margin: .2em 0;
735
+ vertical-align: middle;
736
+ margin-left: .4em;
737
+ margin-right: 22px;
738
+ }
739
+ .ui-spinner-button {
740
+ width: 16px;
741
+ height: 50%;
742
+ font-size: .5em;
743
+ padding: 0;
744
+ margin: 0;
745
+ text-align: center;
746
+ position: absolute;
747
+ cursor: default;
748
+ display: block;
749
+ overflow: hidden;
750
+ right: 0;
751
+ }
752
+ /* more specificity required here to override default borders */
753
+ .ui-spinner a.ui-spinner-button {
754
+ border-top: none;
755
+ border-bottom: none;
756
+ border-right: none;
757
+ }
758
+ /* vertically center icon */
759
+ .ui-spinner .ui-icon {
760
+ position: absolute;
761
+ margin-top: -8px;
762
+ top: 50%;
763
+ left: 0;
764
+ }
765
+ .ui-spinner-up {
766
+ top: 0;
767
+ }
768
+ .ui-spinner-down {
769
+ bottom: 0;
770
+ }
771
+
772
+ /* TR overrides */
773
+ .ui-spinner .ui-icon-triangle-1-s {
774
+ /* need to fix icons sprite */
775
+ background-position: -65px -16px;
776
+ }
777
+ .ui-tabs {
778
+ position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
779
+ padding: .2em;
780
+ }
781
+ .ui-tabs .ui-tabs-nav {
782
+ margin: 0;
783
+ padding: .2em .2em 0;
784
+ }
785
+ .ui-tabs .ui-tabs-nav li {
786
+ list-style: none;
787
+ float: left;
788
+ position: relative;
789
+ top: 0;
790
+ margin: 1px .2em 0 0;
791
+ border-bottom-width: 0;
792
+ padding: 0;
793
+ white-space: nowrap;
794
+ }
795
+ .ui-tabs .ui-tabs-nav .ui-tabs-anchor {
796
+ float: left;
797
+ padding: .5em 1em;
798
+ text-decoration: none;
799
+ }
800
+ .ui-tabs .ui-tabs-nav li.ui-tabs-active {
801
+ margin-bottom: -1px;
802
+ padding-bottom: 1px;
803
+ }
804
+ .ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,
805
+ .ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,
806
+ .ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor {
807
+ cursor: text;
808
+ }
809
+ .ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {
810
+ cursor: pointer;
811
+ }
812
+ .ui-tabs .ui-tabs-panel {
813
+ display: block;
814
+ border-width: 0;
815
+ padding: 1em 1.4em;
816
+ background: none;
817
+ }
818
+ .ui-tooltip {
819
+ padding: 8px;
820
+ position: absolute;
821
+ z-index: 9999;
822
+ max-width: 300px;
823
+ -webkit-box-shadow: 0 0 5px #aaa;
824
+ box-shadow: 0 0 5px #aaa;
825
+ }
826
+ body .ui-tooltip {
827
+ border-width: 2px;
828
+ }
829
+
830
+ /* Component containers
831
+ ----------------------------------*/
832
+ .ui-widget {
833
+ font-family:"Open Sans","Lucida Grande",Verdana,Arial,sans-serif;
834
+ font-size: 1.1em;
835
+ }
836
+ .ui-widget .ui-widget {
837
+ font-size: 1em;
838
+ }
839
+ .ui-widget input,
840
+ .ui-widget select,
841
+ .ui-widget textarea,
842
+ .ui-widget button {
843
+ font-family: Verdana,Arial,sans-serif;
844
+ font-size: 1em;
845
+ }
846
+ .ui-widget-content {
847
+ border: 1px solid #aaaaaa;
848
+ background: #ffffff url("images/ui-bg_flat_75_ffffff_40x100.png") 50% 50% repeat-x;
849
+ color: #222222;
850
+ }
851
+ .ui-widget-content a {
852
+ color: #222222;
853
+ }
854
+ .ui-widget-header {
855
+ border: 1px solid #aaaaaa;
856
+ background: #cccccc url("images/ui-bg_highlight-soft_75_cccccc_1x100.png") 50% 50% repeat-x;
857
+ color: #222222;
858
+ font-weight: bold;
859
+ }
860
+ .ui-widget-header a {
861
+ color: #222222;
862
+ }
863
+
864
+ /* Interaction states
865
+ ----------------------------------*/
866
+ .ui-state-default,
867
+ .ui-widget-content .ui-state-default,
868
+ .ui-widget-header .ui-state-default {
869
+ border: 1px solid #d3d3d3;
870
+ background: #e6e6e6 url("images/ui-bg_glass_75_e6e6e6_1x400.png") 50% 50% repeat-x;
871
+ font-weight: normal;
872
+ color: #555555;
873
+ }
874
+ .ui-state-default a,
875
+ .ui-state-default a:link,
876
+ .ui-state-default a:visited {
877
+ color: #555555;
878
+ text-decoration: none;
879
+ }
880
+ .ui-state-hover,
881
+ .ui-widget-content .ui-state-hover,
882
+ .ui-widget-header .ui-state-hover,
883
+ .ui-state-focus,
884
+ .ui-widget-content .ui-state-focus,
885
+ .ui-widget-header .ui-state-focus {
886
+ border: 1px solid #999999;
887
+ background: #dadada url("images/ui-bg_glass_75_dadada_1x400.png") 50% 50% repeat-x;
888
+ font-weight: normal;
889
+ color: #212121;
890
+ }
891
+ .ui-state-hover a,
892
+ .ui-state-hover a:hover,
893
+ .ui-state-hover a:link,
894
+ .ui-state-hover a:visited,
895
+ .ui-state-focus a,
896
+ .ui-state-focus a:hover,
897
+ .ui-state-focus a:link,
898
+ .ui-state-focus a:visited {
899
+ color: #212121;
900
+ text-decoration: none;
901
+ }
902
+ .ui-state-active,
903
+ .ui-widget-content .ui-state-active,
904
+ .ui-widget-header .ui-state-active {
905
+ border: 1px solid #aaaaaa;
906
+ background: #ffffff url("images/ui-bg_glass_65_ffffff_1x400.png") 50% 50% repeat-x;
907
+ font-weight: normal;
908
+ color: #212121;
909
+ }
910
+ .ui-state-active a,
911
+ .ui-state-active a:link,
912
+ .ui-state-active a:visited {
913
+ color: #212121;
914
+ text-decoration: none;
915
+ }
916
+
917
+ /* Interaction Cues
918
+ ----------------------------------*/
919
+ .ui-state-highlight,
920
+ .ui-widget-content .ui-state-highlight,
921
+ .ui-widget-header .ui-state-highlight {
922
+ border: 1px solid #fcefa1;
923
+ background: #fbf9ee url("images/ui-bg_glass_55_fbf9ee_1x400.png") 50% 50% repeat-x;
924
+ color: #363636;
925
+ }
926
+ .ui-state-highlight a,
927
+ .ui-widget-content .ui-state-highlight a,
928
+ .ui-widget-header .ui-state-highlight a {
929
+ color: #363636;
930
+ }
931
+ .ui-state-error,
932
+ .ui-widget-content .ui-state-error,
933
+ .ui-widget-header .ui-state-error {
934
+ border: 1px solid #cd0a0a;
935
+ background: #fef1ec url("images/ui-bg_glass_95_fef1ec_1x400.png") 50% 50% repeat-x;
936
+ color: #cd0a0a;
937
+ }
938
+ .ui-state-error a,
939
+ .ui-widget-content .ui-state-error a,
940
+ .ui-widget-header .ui-state-error a {
941
+ color: #cd0a0a;
942
+ }
943
+ .ui-state-error-text,
944
+ .ui-widget-content .ui-state-error-text,
945
+ .ui-widget-header .ui-state-error-text {
946
+ color: #cd0a0a;
947
+ }
948
+ .ui-priority-primary,
949
+ .ui-widget-content .ui-priority-primary,
950
+ .ui-widget-header .ui-priority-primary {
951
+ font-weight: bold;
952
+ }
953
+ .ui-priority-secondary,
954
+ .ui-widget-content .ui-priority-secondary,
955
+ .ui-widget-header .ui-priority-secondary {
956
+ opacity: .7;
957
+ filter:Alpha(Opacity=70); /* support: IE8 */
958
+ font-weight: normal;
959
+ }
960
+ .ui-state-disabled,
961
+ .ui-widget-content .ui-state-disabled,
962
+ .ui-widget-header .ui-state-disabled {
963
+ opacity: .35;
964
+ filter:Alpha(Opacity=35); /* support: IE8 */
965
+ background-image: none;
966
+ }
967
+ .ui-state-disabled .ui-icon {
968
+ filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */
969
+ }
970
+
971
+ /* Icons
972
+ ----------------------------------*/
973
+
974
+ /* states and images */
975
+ .ui-icon {
976
+ width: 16px;
977
+ height: 16px;
978
+ }
979
+ .ui-icon,
980
+ .ui-widget-content .ui-icon {
981
+ background-image: url("images/ui-icons_222222_256x240.png");
982
+ }
983
+ .ui-widget-header .ui-icon {
984
+ background-image: url("images/ui-icons_222222_256x240.png");
985
+ }
986
+ .ui-state-default .ui-icon {
987
+ background-image: url("images/ui-icons_888888_256x240.png");
988
+ }
989
+ .ui-state-hover .ui-icon,
990
+ .ui-state-focus .ui-icon {
991
+ background-image: url("images/ui-icons_454545_256x240.png");
992
+ }
993
+ .ui-state-active .ui-icon {
994
+ background-image: url("images/ui-icons_454545_256x240.png");
995
+ }
996
+ .ui-state-highlight .ui-icon {
997
+ background-image: url("images/ui-icons_2e83ff_256x240.png");
998
+ }
999
+ .ui-state-error .ui-icon,
1000
+ .ui-state-error-text .ui-icon {
1001
+ background-image: url("images/ui-icons_cd0a0a_256x240.png");
1002
+ }
1003
+
1004
+ /* positioning */
1005
+ .ui-icon-blank { background-position: 16px 16px; }
1006
+ .ui-icon-carat-1-n { background-position: 0 0; }
1007
+ .ui-icon-carat-1-ne { background-position: -16px 0; }
1008
+ .ui-icon-carat-1-e { background-position: -32px 0; }
1009
+ .ui-icon-carat-1-se { background-position: -48px 0; }
1010
+ .ui-icon-carat-1-s { background-position: -64px 0; }
1011
+ .ui-icon-carat-1-sw { background-position: -80px 0; }
1012
+ .ui-icon-carat-1-w { background-position: -96px 0; }
1013
+ .ui-icon-carat-1-nw { background-position: -112px 0; }
1014
+ .ui-icon-carat-2-n-s { background-position: -128px 0; }
1015
+ .ui-icon-carat-2-e-w { background-position: -144px 0; }
1016
+ .ui-icon-triangle-1-n { background-position: 0 -16px; }
1017
+ .ui-icon-triangle-1-ne { background-position: -16px -16px; }
1018
+ .ui-icon-triangle-1-e { background-position: -32px -16px; }
1019
+ .ui-icon-triangle-1-se { background-position: -48px -16px; }
1020
+ .ui-icon-triangle-1-s { background-position: -64px -16px; }
1021
+ .ui-icon-triangle-1-sw { background-position: -80px -16px; }
1022
+ .ui-icon-triangle-1-w { background-position: -96px -16px; }
1023
+ .ui-icon-triangle-1-nw { background-position: -112px -16px; }
1024
+ .ui-icon-triangle-2-n-s { background-position: -128px -16px; }
1025
+ .ui-icon-triangle-2-e-w { background-position: -144px -16px; }
1026
+ .ui-icon-arrow-1-n { background-position: 0 -32px; }
1027
+ .ui-icon-arrow-1-ne { background-position: -16px -32px; }
1028
+ .ui-icon-arrow-1-e { background-position: -32px -32px; }
1029
+ .ui-icon-arrow-1-se { background-position: -48px -32px; }
1030
+ .ui-icon-arrow-1-s { background-position: -64px -32px; }
1031
+ .ui-icon-arrow-1-sw { background-position: -80px -32px; }
1032
+ .ui-icon-arrow-1-w { background-position: -96px -32px; }
1033
+ .ui-icon-arrow-1-nw { background-position: -112px -32px; }
1034
+ .ui-icon-arrow-2-n-s { background-position: -128px -32px; }
1035
+ .ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
1036
+ .ui-icon-arrow-2-e-w { background-position: -160px -32px; }
1037
+ .ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
1038
+ .ui-icon-arrowstop-1-n { background-position: -192px -32px; }
1039
+ .ui-icon-arrowstop-1-e { background-position: -208px -32px; }
1040
+ .ui-icon-arrowstop-1-s { background-position: -224px -32px; }
1041
+ .ui-icon-arrowstop-1-w { background-position: -240px -32px; }
1042
+ .ui-icon-arrowthick-1-n { background-position: 0 -48px; }
1043
+ .ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
1044
+ .ui-icon-arrowthick-1-e { background-position: -32px -48px; }
1045
+ .ui-icon-arrowthick-1-se { background-position: -48px -48px; }
1046
+ .ui-icon-arrowthick-1-s { background-position: -64px -48px; }
1047
+ .ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
1048
+ .ui-icon-arrowthick-1-w { background-position: -96px -48px; }
1049
+ .ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
1050
+ .ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
1051
+ .ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
1052
+ .ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
1053
+ .ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
1054
+ .ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
1055
+ .ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
1056
+ .ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
1057
+ .ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
1058
+ .ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
1059
+ .ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
1060
+ .ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
1061
+ .ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
1062
+ .ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
1063
+ .ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
1064
+ .ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
1065
+ .ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
1066
+ .ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
1067
+ .ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
1068
+ .ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
1069
+ .ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
1070
+ .ui-icon-arrow-4 { background-position: 0 -80px; }
1071
+ .ui-icon-arrow-4-diag { background-position: -16px -80px; }
1072
+ .ui-icon-extlink { background-position: -32px -80px; }
1073
+ .ui-icon-newwin { background-position: -48px -80px; }
1074
+ .ui-icon-refresh { background-position: -64px -80px; }
1075
+ .ui-icon-shuffle { background-position: -80px -80px; }
1076
+ .ui-icon-transfer-e-w { background-position: -96px -80px; }
1077
+ .ui-icon-transferthick-e-w { background-position: -112px -80px; }
1078
+ .ui-icon-folder-collapsed { background-position: 0 -96px; }
1079
+ .ui-icon-folder-open { background-position: -16px -96px; }
1080
+ .ui-icon-document { background-position: -32px -96px; }
1081
+ .ui-icon-document-b { background-position: -48px -96px; }
1082
+ .ui-icon-note { background-position: -64px -96px; }
1083
+ .ui-icon-mail-closed { background-position: -80px -96px; }
1084
+ .ui-icon-mail-open { background-position: -96px -96px; }
1085
+ .ui-icon-suitcase { background-position: -112px -96px; }
1086
+ .ui-icon-comment { background-position: -128px -96px; }
1087
+ .ui-icon-person { background-position: -144px -96px; }
1088
+ .ui-icon-print { background-position: -160px -96px; }
1089
+ .ui-icon-trash { background-position: -176px -96px; }
1090
+ .ui-icon-locked { background-position: -192px -96px; }
1091
+ .ui-icon-unlocked { background-position: -208px -96px; }
1092
+ .ui-icon-bookmark { background-position: -224px -96px; }
1093
+ .ui-icon-tag { background-position: -240px -96px; }
1094
+ .ui-icon-home { background-position: 0 -112px; }
1095
+ .ui-icon-flag { background-position: -16px -112px; }
1096
+ .ui-icon-calendar { background-position: -32px -112px; }
1097
+ .ui-icon-cart { background-position: -48px -112px; }
1098
+ .ui-icon-pencil { background-position: -64px -112px; }
1099
+ .ui-icon-clock { background-position: -80px -112px; }
1100
+ .ui-icon-disk { background-position: -96px -112px; }
1101
+ .ui-icon-calculator { background-position: -112px -112px; }
1102
+ .ui-icon-zoomin { background-position: -128px -112px; }
1103
+ .ui-icon-zoomout { background-position: -144px -112px; }
1104
+ .ui-icon-search { background-position: -160px -112px; }
1105
+ .ui-icon-wrench { background-position: -176px -112px; }
1106
+ .ui-icon-gear { background-position: -192px -112px; }
1107
+ .ui-icon-heart { background-position: -208px -112px; }
1108
+ .ui-icon-star { background-position: -224px -112px; }
1109
+ .ui-icon-link { background-position: -240px -112px; }
1110
+ .ui-icon-cancel { background-position: 0 -128px; }
1111
+ .ui-icon-plus { background-position: -16px -128px; }
1112
+ .ui-icon-plusthick { background-position: -32px -128px; }
1113
+ .ui-icon-minus { background-position: -48px -128px; }
1114
+ .ui-icon-minusthick { background-position: -64px -128px; }
1115
+ .ui-icon-close { background-position: -80px -128px; }
1116
+ .ui-icon-closethick { background-position: -96px -128px; }
1117
+ .ui-icon-key { background-position: -112px -128px; }
1118
+ .ui-icon-lightbulb { background-position: -128px -128px; }
1119
+ .ui-icon-scissors { background-position: -144px -128px; }
1120
+ .ui-icon-clipboard { background-position: -160px -128px; }
1121
+ .ui-icon-copy { background-position: -176px -128px; }
1122
+ .ui-icon-contact { background-position: -192px -128px; }
1123
+ .ui-icon-image { background-position: -208px -128px; }
1124
+ .ui-icon-video { background-position: -224px -128px; }
1125
+ .ui-icon-script { background-position: -240px -128px; }
1126
+ .ui-icon-alert { background-position: 0 -144px; }
1127
+ .ui-icon-info { background-position: -16px -144px; }
1128
+ .ui-icon-notice { background-position: -32px -144px; }
1129
+ .ui-icon-help { background-position: -48px -144px; }
1130
+ .ui-icon-check { background-position: -64px -144px; }
1131
+ .ui-icon-bullet { background-position: -80px -144px; }
1132
+ .ui-icon-radio-on { background-position: -96px -144px; }
1133
+ .ui-icon-radio-off { background-position: -112px -144px; }
1134
+ .ui-icon-pin-w { background-position: -128px -144px; }
1135
+ .ui-icon-pin-s { background-position: -144px -144px; }
1136
+ .ui-icon-play { background-position: 0 -160px; }
1137
+ .ui-icon-pause { background-position: -16px -160px; }
1138
+ .ui-icon-seek-next { background-position: -32px -160px; }
1139
+ .ui-icon-seek-prev { background-position: -48px -160px; }
1140
+ .ui-icon-seek-end { background-position: -64px -160px; }
1141
+ .ui-icon-seek-start { background-position: -80px -160px; }
1142
+ /* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
1143
+ .ui-icon-seek-first { background-position: -80px -160px; }
1144
+ .ui-icon-stop { background-position: -96px -160px; }
1145
+ .ui-icon-eject { background-position: -112px -160px; }
1146
+ .ui-icon-volume-off { background-position: -128px -160px; }
1147
+ .ui-icon-volume-on { background-position: -144px -160px; }
1148
+ .ui-icon-power { background-position: 0 -176px; }
1149
+ .ui-icon-signal-diag { background-position: -16px -176px; }
1150
+ .ui-icon-signal { background-position: -32px -176px; }
1151
+ .ui-icon-battery-0 { background-position: -48px -176px; }
1152
+ .ui-icon-battery-1 { background-position: -64px -176px; }
1153
+ .ui-icon-battery-2 { background-position: -80px -176px; }
1154
+ .ui-icon-battery-3 { background-position: -96px -176px; }
1155
+ .ui-icon-circle-plus { background-position: 0 -192px; }
1156
+ .ui-icon-circle-minus { background-position: -16px -192px; }
1157
+ .ui-icon-circle-close { background-position: -32px -192px; }
1158
+ .ui-icon-circle-triangle-e { background-position: -48px -192px; }
1159
+ .ui-icon-circle-triangle-s { background-position: -64px -192px; }
1160
+ .ui-icon-circle-triangle-w { background-position: -80px -192px; }
1161
+ .ui-icon-circle-triangle-n { background-position: -96px -192px; }
1162
+ .ui-icon-circle-arrow-e { background-position: -112px -192px; }
1163
+ .ui-icon-circle-arrow-s { background-position: -128px -192px; }
1164
+ .ui-icon-circle-arrow-w { background-position: -144px -192px; }
1165
+ .ui-icon-circle-arrow-n { background-position: -160px -192px; }
1166
+ .ui-icon-circle-zoomin { background-position: -176px -192px; }
1167
+ .ui-icon-circle-zoomout { background-position: -192px -192px; }
1168
+ .ui-icon-circle-check { background-position: -208px -192px; }
1169
+ .ui-icon-circlesmall-plus { background-position: 0 -208px; }
1170
+ .ui-icon-circlesmall-minus { background-position: -16px -208px; }
1171
+ .ui-icon-circlesmall-close { background-position: -32px -208px; }
1172
+ .ui-icon-squaresmall-plus { background-position: -48px -208px; }
1173
+ .ui-icon-squaresmall-minus { background-position: -64px -208px; }
1174
+ .ui-icon-squaresmall-close { background-position: -80px -208px; }
1175
+ .ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
1176
+ .ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
1177
+ .ui-icon-grip-solid-vertical { background-position: -32px -224px; }
1178
+ .ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
1179
+ .ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
1180
+ .ui-icon-grip-diagonal-se { background-position: -80px -224px; }
1181
+
1182
+
1183
+ /* Misc visuals
1184
+ ----------------------------------*/
1185
+
1186
+ /* Corner radius */
1187
+ .ui-corner-all,
1188
+ .ui-corner-top,
1189
+ .ui-corner-left,
1190
+ .ui-corner-tl {
1191
+ border-top-left-radius: 4px;
1192
+ }
1193
+ .ui-corner-all,
1194
+ .ui-corner-top,
1195
+ .ui-corner-right,
1196
+ .ui-corner-tr {
1197
+ border-top-right-radius: 4px;
1198
+ }
1199
+ .ui-corner-all,
1200
+ .ui-corner-bottom,
1201
+ .ui-corner-left,
1202
+ .ui-corner-bl {
1203
+ border-bottom-left-radius: 4px;
1204
+ }
1205
+ .ui-corner-all,
1206
+ .ui-corner-bottom,
1207
+ .ui-corner-right,
1208
+ .ui-corner-br {
1209
+ border-bottom-right-radius: 4px;
1210
+ }
1211
+
1212
+ /* Overlays */
1213
+ .ui-widget-overlay {
1214
+ background: #aaaaaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;
1215
+ opacity: .3;
1216
+ filter: Alpha(Opacity=30); /* support: IE8 */
1217
+ }
1218
+ .ui-widget-shadow {
1219
+ margin: -8px 0 0 -8px;
1220
+ padding: 8px;
1221
+ background: #aaaaaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;
1222
+ opacity: .3;
1223
+ filter: Alpha(Opacity=30); /* support: IE8 */
1224
+ border-radius: 8px;
1225
+ }
css/jquery-ui/jquery-ui.min.css ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ /*! jQuery UI - v1.11.4 - 2015-03-11
2
+ * http://jqueryui.com
3
+ * Includes: core.css, accordion.css, autocomplete.css, button.css, datepicker.css, dialog.css, draggable.css, menu.css, progressbar.css, resizable.css, selectable.css, selectmenu.css, slider.css, sortable.css, spinner.css, tabs.css, tooltip.css, theme.css
4
+ * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana%2CArial%2Csans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=highlight_soft&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=flat&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=glass&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=glass&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=glass&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=glass&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px
5
+ * Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */
6
+
7
+ .ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin:2px 0 0 0;padding:.5em .5em .5em .7em;min-height:0;font-size:100%}.ui-accordion .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-icons .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-header .ui-accordion-header-icon{position:absolute;left:.5em;top:50%;margin-top:-8px}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-button{display:inline-block;position:relative;padding:0;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2.2em}button.ui-button-icon-only{width:2.4em}.ui-button-icons-only{width:3.4em}button.ui-button-icons-only{width:3.7em}.ui-button .ui-button-text{display:block;line-height:normal}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em}input.ui-button{padding:.4em 1em}.ui-button-icon-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon{position:absolute;top:50%;margin-top:-8px}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary{left:.5em}.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-buttonset{margin-right:7px}.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:45%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-dialog{overflow:hidden;position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:20px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-se{width:12px;height:12px;right:-5px;bottom:-5px;background-position:16px 16px}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-draggable-handle{-ms-touch-action:none;touch-action:none}.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:none}.ui-menu .ui-menu{position:absolute}.ui-menu .ui-menu-item{position:relative;margin:0;padding:3px 1em 3px .4em;cursor:pointer;min-height:0;list-style-image:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")}.ui-menu .ui-menu-divider{margin:5px 0;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-state-focus,.ui-menu .ui-state-active{margin:-1px}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item{padding-left:2em}.ui-menu .ui-icon{position:absolute;top:0;bottom:0;left:.2em;margin:auto 0}.ui-menu .ui-menu-icon{left:auto;right:0}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");height:100%;filter:alpha(opacity=25);opacity:0.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:0.1px;display:block;-ms-touch-action:none;touch-action:none}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-selectable{-ms-touch-action:none;touch-action:none}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted black}.ui-selectmenu-menu{padding:0;margin:0;position:absolute;top:0;left:0;display:none}.ui-selectmenu-menu .ui-menu{overflow:auto;overflow-x:hidden;padding-bottom:1px}.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup{font-size:1em;font-weight:bold;line-height:1.5;padding:2px 0.4em;margin:0.5em 0 0 0;height:auto;border:0}.ui-selectmenu-open{display:block}.ui-selectmenu-button{display:inline-block;overflow:hidden;position:relative;text-decoration:none;cursor:pointer}.ui-selectmenu-button span.ui-icon{right:0.5em;left:auto;margin-top:-8px;position:absolute;top:50%}.ui-selectmenu-button span.ui-selectmenu-text{text-align:left;padding:0.4em 2.1em 0.4em 1em;display:block;line-height:1.4;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default;-ms-touch-action:none;touch-action:none}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-sortable-handle{-ms-touch-action:none;touch-action:none}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:none;background:none;color:inherit;padding:0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:22px}.ui-spinner-button{width:16px;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top:none;border-bottom:none;border-right:none}.ui-spinner .ui-icon{position:absolute;margin-top:-8px;top:50%;left:0}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-spinner .ui-icon-triangle-1-s{background-position:-65px -16px}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav .ui-tabs-anchor{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor{cursor:text}.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px;-webkit-box-shadow:0 0 5px #aaa;box-shadow:0 0 5px #aaa}body .ui-tooltip{border-width:2px}.ui-widget{font-family:"Open Sans","Lucida Grande",Verdana,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Verdana,Arial,sans-serif;font-size:1em}.ui-widget-content{border:1px solid #aaa;background:#fff url("images/ui-bg_flat_75_ffffff_40x100.png") 50% 50% repeat-x;color:#222}.ui-widget-content a{color:#222}.ui-widget-header{border:1px solid #aaa;background:#ccc url("images/ui-bg_highlight-soft_75_cccccc_1x100.png") 50% 50% repeat-x;color:#222;font-weight:bold}.ui-widget-header a{color:#222}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #d3d3d3;background:#e6e6e6 url("images/ui-bg_glass_75_e6e6e6_1x400.png") 50% 50% repeat-x;font-weight:normal;color:#555}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#555;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #999;background:#dadada url("images/ui-bg_glass_75_dadada_1x400.png") 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited{color:#212121;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #aaa;background:#fff url("images/ui-bg_glass_65_ffffff_1x400.png") 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#212121;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fcefa1;background:#fbf9ee url("images/ui-bg_glass_55_fbf9ee_1x400.png") 50% 50% repeat-x;color:#363636}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#fef1ec url("images/ui-bg_glass_95_fef1ec_1x400.png") 50% 50% repeat-x;color:#cd0a0a}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#cd0a0a}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#cd0a0a}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url("images/ui-icons_222222_256x240.png")}.ui-widget-header .ui-icon{background-image:url("images/ui-icons_222222_256x240.png")}.ui-state-default .ui-icon{background-image:url("images/ui-icons_888888_256x240.png")}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url("images/ui-icons_454545_256x240.png")}.ui-state-active .ui-icon{background-image:url("images/ui-icons_454545_256x240.png")}.ui-state-highlight .ui-icon{background-image:url("images/ui-icons_2e83ff_256x240.png")}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url("images/ui-icons_cd0a0a_256x240.png")}.ui-icon-blank{background-position:16px 16px}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:4px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:4px}.ui-widget-overlay{background:#aaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30)}.ui-widget-shadow{margin:-8px 0 0 -8px;padding:8px;background:#aaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30);border-radius:8px}
css/jquery-ui/jquery.ui.core.css DELETED
@@ -1,5 +0,0 @@
1
- /*! jQuery UI - v1.10.3 - 2013-05-03
2
- * http://jqueryui.com
3
- * Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
4
-
5
- .ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}
 
 
 
 
 
css/jquery-ui/jquery.ui.tabs.css DELETED
@@ -1,54 +0,0 @@
1
- /*!
2
- * jQuery UI Tabs 1.10.3
3
- * http://jqueryui.com
4
- *
5
- * Copyright 2013 jQuery Foundation and other contributors
6
- * Released under the MIT license.
7
- * http://jquery.org/license
8
- *
9
- * http://docs.jquery.com/UI/Tabs#theming
10
- */
11
- @import url("jquery.ui.core.css");
12
-
13
- .ui-tabs {
14
- position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
15
- padding: .2em;
16
- }
17
- .ui-tabs .ui-tabs-nav {
18
- margin: 0;
19
- padding: .2em .2em 0;
20
- }
21
- .ui-tabs .ui-tabs-nav li {
22
- list-style: none;
23
- float: left;
24
- position: relative;
25
- top: 0;
26
- margin: 1px .2em 0 0;
27
- border-bottom-width: 0;
28
- padding: 0;
29
- white-space: nowrap;
30
- }
31
- .ui-tabs .ui-tabs-nav li a {
32
- float: left;
33
- padding: .5em 1em;
34
- text-decoration: none;
35
- }
36
- .ui-tabs .ui-tabs-nav li.ui-tabs-active {
37
- margin-bottom: -1px;
38
- padding-bottom: 1px;
39
- }
40
- .ui-tabs .ui-tabs-nav li.ui-tabs-active a,
41
- .ui-tabs .ui-tabs-nav li.ui-state-disabled a,
42
- .ui-tabs .ui-tabs-nav li.ui-tabs-loading a {
43
- cursor: text;
44
- }
45
- .ui-tabs .ui-tabs-nav li a, /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
46
- .ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a {
47
- cursor: pointer;
48
- }
49
- .ui-tabs .ui-tabs-panel {
50
- display: block;
51
- border-width: 0;
52
- padding: 1em 1.4em;
53
- background: none;
54
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
css/jquery-ui/jquery.ui.theme.css DELETED
@@ -1,5 +0,0 @@
1
- /*! jQuery UI - v1.10.3 - 2013-05-03
2
- * http://jqueryui.com
3
- * Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
4
-
5
- .ui-widget{font-family:Verdana,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Verdana,Arial,sans-serif;font-size:1em}.ui-widget-content{border:1px solid #aaa;background:#fff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x;color:#222}.ui-widget-content a{color:#222}.ui-widget-header{border:1px solid #aaa;background:#ccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x;color:#222;font-weight:700}.ui-widget-header a{color:#222}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #d3d3d3;background:#e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x;font-weight:400;color:#555}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#555;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #999;background:#dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x;font-weight:400;color:#212121}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited{color:#212121;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #aaa;background:#fff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x;font-weight:400;color:#212121}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#212121;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fcefa1;background:#fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x;color:#363636}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x;color:#cd0a0a}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#cd0a0a}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#cd0a0a}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:700}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:400}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url(images/ui-icons_222222_256x240.png)}.ui-widget-header .ui-icon{background-image:url(images/ui-icons_222222_256x240.png)}.ui-state-default .ui-icon{background-image:url(images/ui-icons_888888_256x240.png)}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url(images/ui-icons_454545_256x240.png)}.ui-state-active .ui-icon{background-image:url(images/ui-icons_454545_256x240.png)}.ui-state-highlight .ui-icon{background-image:url(images/ui-icons_2e83ff_256x240.png)}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url(images/ui-icons_cd0a0a_256x240.png)}.ui-icon-blank{background-position:16px 16px}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:4px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:4px}.ui-widget-overlay{background:#aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30)}.ui-widget-shadow{margin:-8px 0 0 -8px;padding:8px;background:#aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30);border-radius:8px}
 
 
 
 
 
css/wassup-widget.css CHANGED
@@ -14,7 +14,8 @@
14
  .wassup-widget strong{font-size:1.1em;text-shadow:-1px 1px 0 #efe;}
15
  .wassup-widget p{text-indent:0 !important;}
16
  .wassup-widget .nobullet li p,.wassup-widget .nobullet li div{max-width:90%;margin:1em 0 0;padding:2px 2px 3px 5px;word-wrap:normal;}
17
- .wassup-widget li a{}
 
18
  .wassup-widget .online-count{min-width:25px;margin:0 2px 5px 7px;padding:2px 3px 0;font-family:"Lucida Console",Monaco,monospace;display:inline;display:inline-block;line-height:1.2em;color:#223;font-size:1.1em;text-align:center;background-color:#ddf0ff;border:1px solid #bbb;border-radius:3px;}
19
  .wassup-widget .online-total{min-width:30px;margin-left:5px;padding:2px 4px 0;font-size:1.3em;}
20
  .wassup-widget p img {margin:0 2px;padding:0;vertical-align:middle;}
@@ -23,7 +24,8 @@
23
  .wassup-widget .online-spider{background-color:#f6ecce;}
24
  .wassup-widget .online-loggedin{background-color:#dfffcc;}
25
  .wassup-widget p.online-loggedin{color:#223;background-color:#efffe0;border:1px solid #eee;border-radius:7px;}
26
- .wassup-widget .wassup-flag img,.wassup-widget .icon{margin-left:3px;padding:0;border:1px solid #eee;}
 
27
  .wassup-widget li.stat-count .top-item,.wassup-widget li .top-url{max-width:95%;display:inline-block;float:none;}
28
  .wassup-widget ul li.stat-count .top-item,.wassup-widget ul li.stat-count .top-url{max-width:83%;vertical-align:top;}
29
  .wassup-widget ul li .top-url a{display:block;line-height:1em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
14
  .wassup-widget strong{font-size:1.1em;text-shadow:-1px 1px 0 #efe;}
15
  .wassup-widget p{text-indent:0 !important;}
16
  .wassup-widget .nobullet li p,.wassup-widget .nobullet li div{max-width:90%;margin:1em 0 0;padding:2px 2px 3px 5px;word-wrap:normal;}
17
+ .wassup-widget li a{text-decoration:none;}
18
+ .wassup-widget li a:hover {text-decoration:underline;}
19
  .wassup-widget .online-count{min-width:25px;margin:0 2px 5px 7px;padding:2px 3px 0;font-family:"Lucida Console",Monaco,monospace;display:inline;display:inline-block;line-height:1.2em;color:#223;font-size:1.1em;text-align:center;background-color:#ddf0ff;border:1px solid #bbb;border-radius:3px;}
20
  .wassup-widget .online-total{min-width:30px;margin-left:5px;padding:2px 4px 0;font-size:1.3em;}
21
  .wassup-widget p img {margin:0 2px;padding:0;vertical-align:middle;}
24
  .wassup-widget .online-spider{background-color:#f6ecce;}
25
  .wassup-widget .online-loggedin{background-color:#dfffcc;}
26
  .wassup-widget p.online-loggedin{color:#223;background-color:#efffe0;border:1px solid #eee;border-radius:7px;}
27
+ .wassup-widget .wassup-flag img,.wassup-widget .icon{margin-left:3px;margin-right:2px;padding:0;border:1px solid #eee; display:inline;display:inline-block;}
28
+ .wassup-widget .topstats img {float:left;margin:3px 3px 3px 0;}
29
  .wassup-widget li.stat-count .top-item,.wassup-widget li .top-url{max-width:95%;display:inline-block;float:none;}
30
  .wassup-widget ul li.stat-count .top-item,.wassup-widget ul li.stat-count .top-url{max-width:83%;vertical-align:top;}
31
  .wassup-widget ul li .top-url a{display:block;line-height:1em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
css/wassup.css CHANGED
@@ -29,20 +29,23 @@
29
  .wassup-nowrap{white-space:nowrap;text-overflow:ellipsis;}
30
  #wassup-wrap .indent-text,#wassup-wrap li.indent-text{text-indent:10px;}
31
  #wassup-wrap .scrolltop{position:absolute;bottom:0;right:0;width:50px;padding:5px 10px 5px 5px;text-align:right;}
32
- #wassup-message{font-size:13px;color:#447;padding:10px;}
33
- #wassup-message.error{color:#d00;}
34
- #wassup-message.notice-warning{color:#447;}
35
- #wassup-message.updated{color:#040;}
36
  /* Form fields */
37
  #wassup-wrap input,#wassup-wrap select,#wassup-wrap textarea,#wassup-wrap text{font-size:13px;background-color:#fdfdfd;border-color:#d6d6d3;}
38
  #wassup-wrap input[type="checkbox"]:disabled, #wassup-wrap input.disabled[type="checkbox"], #wassup-wrap input[type="radio"]:disabled, #wassup-wrap input.disabled[type="radio"], #wassup-wrap input[type="checkbox"]:disabled:checked::before, #wassup-wrap input.disabled[type="checkbox"]:checked::before, #wassup-wrap input[type="radio"]:disabled:checked::before, #wassup-wrap input.disabled[type="radio"]:checked::before {opacity:0.9;}
39
  /* Wassup buttons */
40
- #wassup-wrap button,#wassup-wrap .button,#wassup-wrap input[type="button"],#wassup-wrap input[type="reset"],#wassup-wrap input[type="submit"] {display:inline;display:inline-block;height:auto;min-height:25px;margin-left:5px;margin-right:5px;padding:2px 10px;font-size:13px;font-weight:normal;line-height:1.7em;text-align:center;color:#123;text-shadow:0 1px 2px #fff;text-decoration:none;white-space:nowrap;vertical-align:baseline;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;background-image:none;background-color:#ececec;box-sizing:border-box;border:1px solid #bcbcbc;border-bottom-color:#999;-moz-border-radius:5px;-webkit-border-radius:5px;-khtml-border-radius:5px;border-radius:5px;-moz-box-shadow:0 1px 0 rgba(0,0,0,0.25);-webkit-box-shadow:0 1px 0 #fff inset,0 1px 0 rgba(0,0,0,0.25);box-shadow:0 1px 0 #fff inset,0 1px 0 rgba(0,0,0,0.25);}
41
- #wassup-wrap .button:hover,#wassup-wrap .button:focus,#wassup-wrap .button:active {background-color:#d9d9d9;border-color:#9f9f9f;border-bottom-color:#888;-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;}
42
- #wassup-wrap .button-primary{color:#fefff9 !important;text-shadow:0 1px 3px rgba(0,20,40,.25) !important;font-weight:bold !important;background-color:#0555aa !important;border-color:#7b97bb #557faa #315070 !important;-moz-box-shadow:0 1px 0 rgba(0,0,0,0.25) !important;-webkit-box-shadow:0 1px 0 #9dcdfd inset,0 1px 0 rgba(0,0,0,0.25) !important;box-shadow:0 1px 0 #056eee inset,0 1px 0 rgba(0,0,0,0.5) !important;}
43
- #wassup-wrap .button-primary:hover,#wassup-wrap .button-primary:focus,#wassup-wrap .button-primary:active {background-color:#056eee !important;border-color:#315070 #557faa #7b97bb !important;-moz-box-shadow:none !important;-webkit-box-shadow:none !important;box-shadow:none !important;}
44
- #wassup-wrap .button-danger{font-weight:bold !important;background-color:#faaa33 !important;border-color:#baaa9a #baaa9a #b19c6c !important;-moz-box-shadow:0 1px 0 rgba(0,0,0,0.5) !important;-webkit-box-shadow:0 1px 0 #ffee66 inset,0 1px 0 rgba(0,0,0,0.5) !important;box-shadow:0 1px 0 #ffee66 inset,0 1px 0 rgba(0,0,0,0.5) !important;}
45
- #wassup-wrap .button-danger:hover,#wassup-wrap .button-danger:focus,#wassup-wrap .button-danger:active {color:#fefff9 !important;text-shadow:0 1px 3px rgba(0,20,40,.25) !important;background-color:#f93939 !important;border-color:#976769 !important;-moz-box-shadow:none !important;-webkit-box-shadow:none !important;box-shadow:none !important;}
 
 
 
 
 
 
 
46
  /* ------------------------------------------------------------------
47
  * Wassup topmenu */
48
  #wassup-screen-links{position:relative;top:0;margin:0 25px 0 0;padding:0;}
@@ -62,7 +65,10 @@
62
  #wassup-menu li:first-child {margin-right:20px;}
63
  .wassup-wp-legacy #screen-meta #contextual-help-link,.wassup-wp-legacy #screen-meta #contextual-help-link.show-settings{display:none;}
64
  @media (max-width: 639px) {
65
- #wassup-menu #donate-link{display:none;}
 
 
 
66
  }
67
  /* ------------------------------------------------------------------
68
  * Visitor/Detail View */
@@ -91,43 +97,45 @@ div.main-tabs{margin:10px auto 3px;padding:3px;color:#445;background-color:#e1df
91
  #wassup-wrap .delbut a{text-decoration:none;}
92
  #wassup-wrap .delbut img{float:right;margin-right:17px;}
93
  #wassup-wrap .sum-footer{margin:0 !important;padding:0;height:7px;clear:both;background-color:#2e3e5e;border-top:1px solid #79a;}
94
- #wassup-wrap .sum-det,#wassup-wrap .sum-det-spy{margin:0 0 0 180px;padding:0;line-height:1.3em;display:block;clear:right;position:relative;}
95
- #wassup-wrap .det1,#wassup-wrap .det2{padding-left:5px;line-height:1.5em;display:block;}
96
  #wassup-wrap.wassup .det1{margin-right:90px;}
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;}
103
  #wassup-wrap .det2 strong{color:#001616;font-weight:normal;text-shadow:none;}
104
- #wassup-wrap .sum-box{float:left;display:block;width:180px;min-height:50px;margin:5px 0 3px 0;padding:0;color:#00284a;text-align:center;}
105
  #wassup-wrap .sum-box span{display:block;margin:0 auto;padding:0;}
106
- #wassup-wrap .sum-box-ip{width:140px;height:25px;padding:5px 0 0 0 !important;font-family:tahoma,verdana,arial,sans-serif;font-weight:bold;text-shadow:rgba(255,253,240,0.7) 0 -1px 0;background:#dde url("images/sum-box.png") bottom left;border:1px solid #b6c6cf;border-radius:3px;}
 
107
  #wassup-wrap .sum-det-spy span{margin:0;padding:0;margin:0 3px 0 2px;padding:0;}
108
- #wassup-wrap .sum-box-log{background-color:#dfa;border-color:#bda;}
109
  #wassup-wrap .sum-box-spider2{background-color:#dcbc9c;border-color:#d6c6bb !important;}
110
- #wassup-wrap .sum-box-spam{background-color:#fbbf77;border-color:#cba !important;}
111
- #wassup-wrap .sum-box-spider{background-color:#dcbc9c;border-color:#cba !important;}
112
  #wassup-wrap .sum-box-aut{background-color:#fafaaa;border-color:#eede6e;}
113
- #wassup-wrap .sum-box-ip a,#wassup-wrap .sum-box-ip a:link {color:#336 !important;border-bottom:1px solid #279 !important;}
114
  #wassup-wrap .sum-box-spider a,#wassup-wrap .sum-box-spider a:link {border-color:#977 !important;}
115
  #wassup-wrap .sum-box-ip a:hover{color:#c64 !important;border-color:#c64 !important;}
116
- #wassup-wrap .sum-date{width:175px;margin:5px auto 0 !important;line-height:1.1em;}
117
  #wassup-wrap .sum-rec ul{border-top:1px solid #999;}
118
  #wassup-wrap .detail-data{margin:0 auto !important;clear:both;border:0 none;color:#445;}
119
  #wassup-wrap .detail-data a,#wassup-wrap .detail-data a:link {color:#02a;}
120
  #wassup-wrap .detail-data a:hover {color:#c64;}
121
  #wassup-wrap .detail-data ul{list-style-type:none;width:100%;min-height:28px;margin:0;padding:0;clear:left;border-top:1px solid #ccc;overflow:hidden;}
122
  #wassup-wrap .detail-data li{list-style-type:none;min-height:27px;margin:0;padding:0;line-height:1.4em;display:block;display:inline-block;float:left;}
123
- #wassup-wrap .detail-data li span{display:inline;display:inline-block;padding:3px 0 0;}
 
124
  #wassup-wrap .detail-data li.agent >span{min-width:165px;}
125
  #wassup-wrap .detail-data li.agent >.indent-li-agent{width:165px;}
126
  #wassup-wrap ul.searcheng{background-color:#abdbff;border-color:#9cd;}
127
  #wassup-wrap .searchmedia{background-color:#abbbff !important;border-color:#9b9bff !important;}
128
  #wassup-wrap ul.useragent{background-color:#46a;border-bottom:2px solid #67a;}
129
  #wassup-wrap .togglenavi li.useragent{width:100%;display:block;float:none;color:#fcfcff;text-align:center;}
130
- #wassup-wrap .detail-data li.spider,#wassup-wrap .detail-data li.spam{width:100%;padding:0 6px 0 0;display:block;float:none;}
131
  #wassup-wrap li.useragent strong{color:#fff;}
132
  #wassup-wrap ul.spam{background-color:#f23;border-color:#e21e21;}
133
  #wassup-wrap li.spam{color:#ffffef;font-weight:bold;}
@@ -149,10 +157,9 @@ div.main-tabs{margin:10px auto 3px;padding:3px;color:#445;background-color:#e1df
149
  #wassup-wrap ul.url li{width:100%;display:block;background:#fffdfe url("images/list-bg3.png") repeat-x;border-top:1px solid #c0cfcf;}
150
  #wassup-wrap .url a,#wassup-wrap .url a:link {border-bottom:1px solid !important;}
151
  #wassup-wrap .indent-li{padding-left:12px;}
152
- #wassup-wrap .detail-data li >.indent-li-agent{padding:3px 5px 0;display:block;float:left;}
153
  #wassup-wrap .detail-data li.users >.indent-li-agent{padding:3px 10px 0;}
154
  #wassup-wrap .detail-data li.url span{color:#00284a;}
155
- #wassup-wrap .detail-data li .request-time{width:180px;margin:0;padding-left:0;padding-right:0;text-align:right;}
156
  #wassup-wrap .detail-data li .request-uri{padding-left:5px !important;text-align:left;}
157
  #wassup-wrap .detail-data .time{padding-right:2px;text-align:right;}
158
  #wassup-wrap .box-log{margin:0;padding:0;background-color:#e7f1c8;border:1px #bbb solid;}
@@ -188,6 +195,8 @@ div.main-tabs{margin:10px auto 3px;padding:3px;color:#445;background-color:#e1df
188
  }
189
  @media (max-width: 767px) {
190
  #wassup-wrap .detail-data .url >li >.request-time{width:115px;}
 
 
191
  }
192
  /* ------------------------------------------------------------------
193
  * Chart and Map */
@@ -263,24 +272,29 @@ div.main-tabs{margin:10px auto 3px;padding:3px;color:#445;background-color:#e1df
263
  #wassup-wrap .donate-block{margin:10px auto;padding:0;text-align:center;display:block;display:table;}
264
  #wassup-wrap .donate-box{width:370px;float:left;margin:15px 0;padding-right:15px;}
265
  #wassup-wrap .bc-addr{min-width:300px;max-width:300px;width:300px;}
266
- #wassup-overlay{position:fixed;width:100%;height:100%;z-index:999;top:0;left:0;background-color:#000;display:none;}
267
- #wassup-wrap .faq-question,#wassup-wrap .faq-answer{display:inline-block;width:90%;margin-left:8px;text-indent:-3px;vertical-align:top;}
268
- #wassup-wrap #tabcontainer .faq-question{font-style:italic;font-weight:600;}
269
  /* changes some jqueryui-only style elements */
270
- #wassup-wrap .ui-widget{font-family:"Open Sans","Lucida Grande",Verdana,Arial,"Bitstream Vera Sans",sans-serif;}
271
  #wassup-wrap #tabcontainer .ui-tabs-nav{height:33px;border:0 none;border-bottom-left-radius:0 !important;border-bottom-right-radius:0 !important;list-style:none;}
272
  #tabcontainer .ui-tabs-nav li{min-width:75px;height:33px;max-height:33px;margin-bottom:0;list-style:none;line-height:1em;font-size:1.2em;text-align:center;text-indent:-3px;float:left;border-color:#9f9f9f;border-bottom:0 none;background-color:#ece9ed;background-image:none !important;-moz-border-radius-topleft:4px;-moz-border-radius-topright:4px;-webkit-border-top-left-radius:4px;-webkit-border-top-right-radius:4px;border-top-left-radius:4px;border-top-right-radius:4px;-webkit-box-shadow:0 3px 0 #efefef inset,0 -1px 3px rgba(0,0,0,0.15);box-shadow:0 3px 0 #efefef inset,0 -1px 3px rgba(0,0,0,0.15);}
273
  #wassup-wrap #tabcontainer .ui-tabs-nav li a{padding:0.5em 0.7em;color:#999;}
274
- #wassup-wrap #tabcontainer .ui-widget-header{background-image:none;background-color:#ddd;border-bottom:0 none;}
275
  #wassup-wrap .ui-tabs-panel{background-color:#f9f9f9 !important;} /* removes wide color-stripe */
276
  #wassup-wrap #tabcontainer li.ui-tabs-active,#wassup-wrap .ui-tabs-nav li.ui-tabs-active{height:34px;max-height:35px;margin-bottom:-2px;background-image:none;background-color:#f9f9f9 !important;-webkit-box-shadow:0 2px 0 #fff inset,0 -2px 2px rgba(0,0,0,0.25);box-shadow:0 2px 0 #fff inset,0 -2px 2px rgba(0,0,0,0.25);}
277
  #wassup-wrap #tabcontainer li.ui-tabs-active a:focus,#wassup-wrap #tabcontainer li.ui-tabs-active a:active {outline:none;}
278
  #wassup-wrap #tabcontainer .ui-state-active a,#wassup-wrap li.ui-tabs-active a{color:#212121 !important;}
279
  #wassup-wrap #tabcontainer .ui-tabs-nav a:hover {color:#212121;}
 
 
 
280
  @media (max-width: 639px) {
281
  #wassup-wrap p.description,#wassup-wrap p.opt-note{display:none;}
282
  #wassup-wrap #info-sysinfo{display:none;}
283
  }
 
 
 
 
 
284
  /* ------------------------------------------------------------------
285
  * Dashboard Widget */
286
  #wassup-dashwidget1{border-color:#ddd;}
29
  .wassup-nowrap{white-space:nowrap;text-overflow:ellipsis;}
30
  #wassup-wrap .indent-text,#wassup-wrap li.indent-text{text-indent:10px;}
31
  #wassup-wrap .scrolltop{position:absolute;bottom:0;right:0;width:50px;padding:5px 10px 5px 5px;text-align:right;}
 
 
 
 
32
  /* Form fields */
33
  #wassup-wrap input,#wassup-wrap select,#wassup-wrap textarea,#wassup-wrap text{font-size:13px;background-color:#fdfdfd;border-color:#d6d6d3;}
34
  #wassup-wrap input[type="checkbox"]:disabled, #wassup-wrap input.disabled[type="checkbox"], #wassup-wrap input[type="radio"]:disabled, #wassup-wrap input.disabled[type="radio"], #wassup-wrap input[type="checkbox"]:disabled:checked::before, #wassup-wrap input.disabled[type="checkbox"]:checked::before, #wassup-wrap input[type="radio"]:disabled:checked::before, #wassup-wrap input.disabled[type="radio"]:checked::before {opacity:0.9;}
35
  /* Wassup buttons */
36
+ #wassup-wrap button,#wassup-wrap .button,#wassup-wrap input[type="button"],#wassup-wrap input[type="reset"],#wassup-wrap input[type="submit"] {display:inline;display:inline-block;height:auto;min-height:28px;margin-left:5px;margin-right:5px;padding:2px 10px;font-size:13px;font-weight:normal;line-height:1.8em;text-align:center;color:#123;text-shadow:0 1px 2px #fff;text-decoration:none;white-space:nowrap;vertical-align:baseline;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;background-image:none;background-color:#d9d9d9;box-sizing:border-box;border:1px solid #999;border-top-color:#bcbcbc;-moz-border-radius:5px;-webkit-border-radius:5px;-khtml-border-radius:5px;border-radius:5px;-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:0 1px 2px #f9f9f9 inset;}
37
+ #wassup-wrap a.button{border-bottom:1px solid #999;}
38
+ #wassup-wrap .button:hover,#wassup-wrap .button:focus,.button-pressed {background-color:#ececec;border-color:#999;border-bottom-color:#ddd;box-shadow:0 1px 1px #999 inset;}
39
+ #wassup-wrap .button-primary{color:#fefff9 !important;text-shadow:0 1px 3px rgba(0,20,40,.25) !important;font-weight:bold !important;background-color:#0555aa !important;border-color:#557faa #557faa #315070 !important;}
40
+ #wassup-wrap .button-primary:hover,#wassup-wrap .button-primary:focus,#wassup-wrap .button-primary:active {background-color:#056eee !important;border-color:#315070 #557faa #557faa #7b97bb !important;}
41
+ #wassup-wrap .button-danger{font-weight:bold !important;background-color:#faaa33 !important;border-color:#baaa9a #baaa9a #b19c6c !important;box-shadow:0 1px 2px #ffee66 inset !important;}
42
+ #wassup-wrap .button-danger:hover,#wassup-wrap .button-danger:focus,#wassup-wrap .button-danger:active {color:#fefff9 !important;text-shadow:0 1px 3px rgba(0,20,40,.25) !important;background-color:#f93939 !important;border-color:#976769 !important;}
43
+ /* override some notification styles */
44
+ #wassup-message{font-size:13px;color:#447;padding:10px;}
45
+ #wassup-message.error{color:#d00;}
46
+ #wassup-message.notice-warning{color:#447;}
47
+ #wassup-message.updated{color:#040;}
48
+ #wassup-message >button,#wassup-message >button:hover {background-color:transparent;border:0 none;-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;}
49
  /* ------------------------------------------------------------------
50
  * Wassup topmenu */
51
  #wassup-screen-links{position:relative;top:0;margin:0 25px 0 0;padding:0;}
65
  #wassup-menu li:first-child {margin-right:20px;}
66
  .wassup-wp-legacy #screen-meta #contextual-help-link,.wassup-wp-legacy #screen-meta #contextual-help-link.show-settings{display:none;}
67
  @media (max-width: 639px) {
68
+ #wassup-wrap{margin-right:5px;padding:1px 2px;}
69
+ #wassup-screen-links{margin-right:5px;}
70
+ #wassup-menu >#donate-link,#wassup-menu >#menu-link-5,#wassup-menu >#menu-link-4{display:none;}
71
+ #wassup-screen-links >#wassup-menu >.current{display:block;}
72
  }
73
  /* ------------------------------------------------------------------
74
  * Visitor/Detail View */
97
  #wassup-wrap .delbut a{text-decoration:none;}
98
  #wassup-wrap .delbut img{float:right;margin-right:17px;}
99
  #wassup-wrap .sum-footer{margin:0 !important;padding:0;height:7px;clear:both;background-color:#2e3e5e;border-top:1px solid #79a;}
100
+ #wassup-wrap .sum-det,#wassup-wrap .sum-det-spy{margin:0 0 0 230px;padding:0;line-height:1.3em;display:block;clear:right;position:relative;}
101
+ #wassup-wrap .det1,#wassup-wrap .det2{line-height:1.5em;display:block;}
102
  #wassup-wrap.wassup .det1{margin-right:90px;}
103
+ #wassup-wrap .sum-det .det1{padding-left:5px;text-indent:-5px;font-size:14px;}
104
+ #wassup-wrap .det3{padding-left:15px;}
105
  #wassup-wrap .det1 span{color:#00284a;}
106
  #wassup-wrap .det1 a{font-weight:bold;border-bottom:1px solid !important;}
107
  #wassup-wrap .det2 a,#wassup-wrap .det2 a:link, #wassup-wrap .sum-det span.det2 a{color:#02a !important;}
108
  #wassup-wrap .det2 a:hover, #wassup-wrap .sum-det span.det2 a:hover {color:#d54d22 !important;}
109
  #wassup-wrap .det2 strong{color:#001616;font-weight:normal;text-shadow:none;}
110
+ #wassup-wrap .sum-box{float:left;display:block;width:225px;min-height:50px;margin:5px 0 3px 0;padding:0;color:#00284a;text-align:center;overflow:hidden;}
111
  #wassup-wrap .sum-box span{display:block;margin:0 auto;padding:0;}
112
+ #wassup-wrap .sum-box .sum-box-ip{width:200px;height:25px;padding:5px 0 0 0;white-space:nowrap;text-overflow:ellipsis;white-space:nowrap;text-overflow:ellipsis;font-family:tahoma,verdana,arial,sans-serif;font-weight:bold;text-shadow:rgba(255,253,240,0.7) 0 -1px 0;background:#dde url("images/sum-box.png") bottom left;border:1px solid #b6c6cf;border-radius:3px;}
113
+ #wassup-wrap .sum-box .sum-box-ipv6{width:220px;margin:0 0 0 2px;font-size:11px;}
114
  #wassup-wrap .sum-det-spy span{margin:0;padding:0;margin:0 3px 0 2px;padding:0;}
115
+ #wassup-wrap .sum-box .sum-box-log{background-color:#dfa;border-color:#bda;}
116
  #wassup-wrap .sum-box-spider2{background-color:#dcbc9c;border-color:#d6c6bb !important;}
117
+ #wassup-wrap .sum-box .sum-box-spam{background-color:#fbbf77;border-color:#cba !important;}
118
+ #wassup-wrap .sum-box .sum-box-spider{background-color:#dcbc9c;border-color:#cba !important;}
119
  #wassup-wrap .sum-box-aut{background-color:#fafaaa;border-color:#eede6e;}
120
+ #wassup-wrap .sum-box .sum-box-ip a,#wassup-wrap .sum-box >.sum-box-ip a:link {color:#336 !important;border-bottom:1px solid #279 !important;}
121
  #wassup-wrap .sum-box-spider a,#wassup-wrap .sum-box-spider a:link {border-color:#977 !important;}
122
  #wassup-wrap .sum-box-ip a:hover{color:#c64 !important;border-color:#c64 !important;}
123
+ #wassup-wrap .sum-box >.sum-date{width:175px;line-height:1.1em;}
124
  #wassup-wrap .sum-rec ul{border-top:1px solid #999;}
125
  #wassup-wrap .detail-data{margin:0 auto !important;clear:both;border:0 none;color:#445;}
126
  #wassup-wrap .detail-data a,#wassup-wrap .detail-data a:link {color:#02a;}
127
  #wassup-wrap .detail-data a:hover {color:#c64;}
128
  #wassup-wrap .detail-data ul{list-style-type:none;width:100%;min-height:28px;margin:0;padding:0;clear:left;border-top:1px solid #ccc;overflow:hidden;}
129
  #wassup-wrap .detail-data li{list-style-type:none;min-height:27px;margin:0;padding:0;line-height:1.4em;display:block;display:inline-block;float:left;}
130
+ #wassup-wrap .detail-data li >span{display:inline;display:inline-block;padding:2px 0 0;}
131
+ #wassup-wrap .detail-data li >.indent-li-agent{display:block;float:left;}
132
  #wassup-wrap .detail-data li.agent >span{min-width:165px;}
133
  #wassup-wrap .detail-data li.agent >.indent-li-agent{width:165px;}
134
  #wassup-wrap ul.searcheng{background-color:#abdbff;border-color:#9cd;}
135
  #wassup-wrap .searchmedia{background-color:#abbbff !important;border-color:#9b9bff !important;}
136
  #wassup-wrap ul.useragent{background-color:#46a;border-bottom:2px solid #67a;}
137
  #wassup-wrap .togglenavi li.useragent{width:100%;display:block;float:none;color:#fcfcff;text-align:center;}
138
+ #wassup-wrap .detail-data li.spider,#wassup-wrap .detail-data li.spam{width:100%;padding:0 6px 0 5px;display:block;float:none;}
139
  #wassup-wrap li.useragent strong{color:#fff;}
140
  #wassup-wrap ul.spam{background-color:#f23;border-color:#e21e21;}
141
  #wassup-wrap li.spam{color:#ffffef;font-weight:bold;}
157
  #wassup-wrap ul.url li{width:100%;display:block;background:#fffdfe url("images/list-bg3.png") repeat-x;border-top:1px solid #c0cfcf;}
158
  #wassup-wrap .url a,#wassup-wrap .url a:link {border-bottom:1px solid !important;}
159
  #wassup-wrap .indent-li{padding-left:12px;}
 
160
  #wassup-wrap .detail-data li.users >.indent-li-agent{padding:3px 10px 0;}
161
  #wassup-wrap .detail-data li.url span{color:#00284a;}
162
+ #wassup-wrap .detail-data li .request-time{width:210px;margin:0;padding-left:7px;padding-right:3px;text-align:right;}
163
  #wassup-wrap .detail-data li .request-uri{padding-left:5px !important;text-align:left;}
164
  #wassup-wrap .detail-data .time{padding-right:2px;text-align:right;}
165
  #wassup-wrap .box-log{margin:0;padding:0;background-color:#e7f1c8;border:1px #bbb solid;}
195
  }
196
  @media (max-width: 767px) {
197
  #wassup-wrap .detail-data .url >li >.request-time{width:115px;}
198
+ #wassup-wrap .sum-box{width:180px;overflow:hidden;}
199
+ #wassup-wrap .sum-box >.sum-box-ip{width:170px;white-space:nowrap;text-overflow:ellipsis;}
200
  }
201
  /* ------------------------------------------------------------------
202
  * Chart and Map */
272
  #wassup-wrap .donate-block{margin:10px auto;padding:0;text-align:center;display:block;display:table;}
273
  #wassup-wrap .donate-box{width:370px;float:left;margin:15px 0;padding-right:15px;}
274
  #wassup-wrap .bc-addr{min-width:300px;max-width:300px;width:300px;}
275
+ /* #wassup-wrap.ui-widget-overlay{background:#777;} */
 
 
276
  /* changes some jqueryui-only style elements */
277
+ #wassup-wrap .ui-widget{font-family:"Open Sans","Lucida Grande",Verdana,Arial,sans-serif;}
278
  #wassup-wrap #tabcontainer .ui-tabs-nav{height:33px;border:0 none;border-bottom-left-radius:0 !important;border-bottom-right-radius:0 !important;list-style:none;}
279
  #tabcontainer .ui-tabs-nav li{min-width:75px;height:33px;max-height:33px;margin-bottom:0;list-style:none;line-height:1em;font-size:1.2em;text-align:center;text-indent:-3px;float:left;border-color:#9f9f9f;border-bottom:0 none;background-color:#ece9ed;background-image:none !important;-moz-border-radius-topleft:4px;-moz-border-radius-topright:4px;-webkit-border-top-left-radius:4px;-webkit-border-top-right-radius:4px;border-top-left-radius:4px;border-top-right-radius:4px;-webkit-box-shadow:0 3px 0 #efefef inset,0 -1px 3px rgba(0,0,0,0.15);box-shadow:0 3px 0 #efefef inset,0 -1px 3px rgba(0,0,0,0.15);}
280
  #wassup-wrap #tabcontainer .ui-tabs-nav li a{padding:0.5em 0.7em;color:#999;}
 
281
  #wassup-wrap .ui-tabs-panel{background-color:#f9f9f9 !important;} /* removes wide color-stripe */
282
  #wassup-wrap #tabcontainer li.ui-tabs-active,#wassup-wrap .ui-tabs-nav li.ui-tabs-active{height:34px;max-height:35px;margin-bottom:-2px;background-image:none;background-color:#f9f9f9 !important;-webkit-box-shadow:0 2px 0 #fff inset,0 -2px 2px rgba(0,0,0,0.25);box-shadow:0 2px 0 #fff inset,0 -2px 2px rgba(0,0,0,0.25);}
283
  #wassup-wrap #tabcontainer li.ui-tabs-active a:focus,#wassup-wrap #tabcontainer li.ui-tabs-active a:active {outline:none;}
284
  #wassup-wrap #tabcontainer .ui-state-active a,#wassup-wrap li.ui-tabs-active a{color:#212121 !important;}
285
  #wassup-wrap #tabcontainer .ui-tabs-nav a:hover {color:#212121;}
286
+ .wassup .ui-dialog-titlebar .ui-button >.ui-button-text{display:none;}
287
+ #wassup-dialog{display:none;}
288
+ #wassup-dialog.ui-dialog{display:block;}
289
  @media (max-width: 639px) {
290
  #wassup-wrap p.description,#wassup-wrap p.opt-note{display:none;}
291
  #wassup-wrap #info-sysinfo{display:none;}
292
  }
293
+ /* FAQ */
294
+ #wassup-wrap.wassup-faq{font-size:15px;line-height:1.3em;}
295
+ #wassup-wrap.wassup-faq li{padding-bottom:10px;}
296
+ #wassup-wrap .faq-question,#wassup-wrap .faq-answer{display:inline-block;width:90%;margin-left:8px;text-indent:-3px;vertical-align:top;}
297
+ #wassup-wrap .faq-question{font-style:italic;font-weight:600;}
298
  /* ------------------------------------------------------------------
299
  * Dashboard Widget */
300
  #wassup-dashwidget1{border-color:#ddd;}
js/wassup.js CHANGED
@@ -6,10 +6,12 @@ var actionparam=""; //for Wassup ajax actions
6
  var _countDowncontainer="0"; //for Detail/Online refresh countdown
7
  var _currentSeconds=0;
8
  var tickerID=0;
 
9
  function ActivateCountDown(strContainerID, initialValue){
10
  _countDowncontainer=document.getElementById(strContainerID);
11
  SetCountdownText(initialValue);
12
  tickerID=window.setInterval("CountDownTick()",1000);
 
13
  }
14
  function CountDownTick(){
15
  if(_currentSeconds >0){SetCountdownText(_currentSeconds-1);}
6
  var _countDowncontainer="0"; //for Detail/Online refresh countdown
7
  var _currentSeconds=0;
8
  var tickerID=0;
9
+ var selftimerID=0;
10
  function ActivateCountDown(strContainerID, initialValue){
11
  _countDowncontainer=document.getElementById(strContainerID);
12
  SetCountdownText(initialValue);
13
  tickerID=window.setInterval("CountDownTick()",1000);
14
+ selftimerID=setTimeout('wSelfRefresh()',initialValue*1000+2000);
15
  }
16
  function CountDownTick(){
17
  if(_currentSeconds >0){SetCountdownText(_currentSeconds-1);}
language/wassup.pot CHANGED
@@ -1,14 +1,14 @@
1
  # LANGUAGE translation for WassUp Real-time Analytics plugin
2
- # Copyright (C) 2009-2016
3
  # This file is distributed under the same license as WassUp plugin.
4
  # Michele Marcucci <michele(at)befree.it>, 2009.
5
  #
6
  #, fuzzy
7
  msgid ""
8
  msgstr ""
9
- "Project-Id-Version: WassUp 1.9.2\n"
10
  "Report-Msgid-Bugs-To: michele@befree.it\n"
11
- "POT-Creation-Date: 2016-11-14 19:54-0600\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,201 +17,197 @@ msgstr ""
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:174
26
  msgid "Sorry! \"Network Activation\" is DISABLED for subdomain networks."
27
  msgstr ""
28
 
29
- #: wassup.php:175
30
  #, php-format
31
  msgid "%s must be activated on each subdomain site separately."
32
  msgstr ""
33
 
34
- #: wassup.php:176
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:177
41
  msgid "Back to Plugins"
42
  msgstr ""
43
 
44
- #: wassup.php:240 lib/upgrade.php:710
45
  msgid "Database created/upgraded successfully"
46
  msgstr ""
47
 
48
- #: wassup.php:242
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:246
55
  msgid "activation successful"
56
  msgstr ""
57
 
58
- #: wassup.php:248
59
  msgid "activation successful. No upgrade necessary."
60
  msgstr ""
61
 
62
- #: wassup.php:275
63
  #, php-format
64
  msgid "%s: database upgrade failed!"
65
  msgstr ""
66
 
67
- #: wassup.php:286
68
  #, php-format
69
  msgid "%s: plugin install/upgrade failed!"
70
  msgstr ""
71
 
72
- #: wassup.php:468 wassup.php:471 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:3315 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:1664
102
  msgid "Spoofer bot"
103
  msgstr ""
104
 
105
- #: wassup.php:2098
106
  #, php-format
107
  msgid "%s WassUp Plugin table has reached maximum size!"
108
  msgstr ""
109
 
110
- #: wassup.php:2098
111
  msgid "ALERT"
112
  msgstr ""
113
 
114
- #: wassup.php:2099
115
  msgid "Hi"
116
  msgstr ""
117
 
118
- #: wassup.php:2099
119
  msgid ""
120
  "you have received this email because your WassUp Database table at your "
121
  "Wordpress blog"
122
  msgstr ""
123
 
124
- #: wassup.php:2099
125
  msgid "has reached the maximum value set in the options menu"
126
  msgstr ""
127
 
128
- #: wassup.php:2100
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:2100
135
  msgid "This alert now will be removed and you will be able to set a new one"
136
  msgstr ""
137
 
138
- #: wassup.php:2101
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:2101
145
  msgid "Have a nice day!"
146
  msgstr ""
147
 
148
- #: wassup.php:2342 wassup.php:2786
149
  msgid "encrypted search"
150
  msgstr ""
151
 
152
- #: wassup.php:3302 wassup.php:3309
153
  msgid "Feed Reader"
154
  msgstr ""
155
 
156
- #: wassup.php:3310
157
  msgid "feed reader"
158
  msgstr ""
159
 
160
- #: wassup.php:3917
161
  msgid "timestamp"
162
  msgstr ""
163
 
164
- #: wassup.php:3918
165
  msgid "If above timestamp is not current time, this page is cached"
166
  msgstr ""
167
 
168
- #: wassup.php:4099
169
  msgid "Visitors Online"
170
  msgstr ""
171
 
172
- #: wassup.php:4117 lib/compat-lib/compat_widget.php:151
173
- #: widgets/widgets.php:144 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
 
@@ -231,1090 +227,1454 @@ msgstr ""
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
 
238
- #: lib/compatibility.php:85
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
349
- #: widgets/widgets.php:98 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,631 +1683,283 @@ msgid ""
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 "
1615
- "into your theme's \"Sidebar\" or \"Footer\" area on the right or use the "
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 "
1702
- "Network admin dashboard, navigate to %s tab and Uncheck the box for \"Enable "
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 "
1710
- "main site/parent domain admin dashboard, navigate to %s tab, then Uncheck "
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 "
1750
- "command %s to repair and release any locks on wassup table. Note that wassup "
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 "
1771
- "and/or check the box to receive an email alert when the table size limit is "
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 "
1785
- "Cache, and Hyper Cache. To fix, uninstall your cache plugin or switch to a "
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 "
1846
- "website to it's \"Top sites\" window (Safari). WassUp tracks these because "
1847
- "they are valid requests from the browser and are sometimes indistinguishable "
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 "
1859
- "recording manually under %s tab, then do the plugin upgrade, and afterwards "
1860
- "re-enable recording manually when the upgrade is complete and the plugin is "
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 "
1872
- "your browser timing out, not an upgrade failure. WassUp continues it's "
1873
- "upgrade in the background and will activate automatically when it is done. "
1874
- "After a few minutes (5-10) has passed, revisit Wordpress admin Plugins panel "
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\", "
1893
- "navigate to the main site/parent domain Plugins panel and deactivate Wassup "
1894
- "plugin there, then return to Network admin Plugins panel. Click the \"delete"
1895
- "\" link below WassUp name. This deletes both data and files permanently from "
1896
- "the main site/parent domain and deletes Wassup data from all the subsites in "
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 "
1904
- "for \"Permanently remove WassUp data and settings\" and save. Next, go to "
1905
- "the subsite's Plugins panel and deactivate WassUp plugin. This deletes the "
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 "
1913
- "\"Permanently remove WassUp data and settings\" and save. Next, go to "
1914
- "Wordpress Plugins panel and deactivate WassUp plugin. This deletes the data "
1915
- "permanently. To delete the plugin files from Wordpress 2.x, use an ftp "
1916
- "client software on your PC or login to your host server's \"cpanel\" and use "
1917
- "\"File Manager\" to delete the folder \"wassup\" from the %s directory on "
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
 
@@ -1997,968 +2009,970 @@ msgstr ""
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
2276
- #: lib/wassupadmin.php:1770 lib/compat-lib/compat_php.php:2284
2277
- #: lib/compat-lib/compat_php.php:2317
2278
  msgid "direct hit"
2279
  msgstr ""
2280
 
2281
- #: lib/wassup.class.php:2287 lib/wassup.class.php:2290
2282
- #: lib/compat-lib/compat_php.php:2295 lib/compat-lib/compat_php.php:2298
 
2283
  msgid "from your site"
2284
  msgstr ""
2285
 
2286
- #: lib/wassupadmin.php:152
2287
  msgid "paused"
2288
  msgstr ""
2289
 
2290
- #: lib/wassupadmin.php:193
2291
  msgid "Sorry, delete failed!"
2292
  msgstr ""
2293
 
2294
- #: lib/wassupadmin.php:196
2295
  msgid "Delete record failed!"
2296
  msgstr ""
2297
 
2298
- #: lib/wassupadmin.php:206 lib/wassupadmin.php:213 lib/wassupadmin.php:1568
2299
  msgid "Hide Search"
2300
  msgstr ""
2301
 
2302
- #: lib/wassupadmin.php:218 lib/wassupadmin.php:262
2303
  msgid "Collapse All"
2304
  msgstr ""
2305
 
2306
- #: lib/wassupadmin.php:220 lib/wassupadmin.php:264 lib/wassupadmin.php:979
2307
- #: lib/wassupadmin.php:1609
2308
  msgid "Expand All"
2309
  msgstr ""
2310
 
2311
- #: lib/wassupadmin.php:223
2312
  msgid "Expand Chronology"
2313
  msgstr ""
2314
 
2315
- #: lib/wassupadmin.php:225 lib/wassupadmin.php:1610
2316
  msgid "Collapse Chronology"
2317
  msgstr ""
2318
 
2319
- #: lib/wassupadmin.php:451 lib/wassupadmin.php:540 lib/wassupadmin.php:883
 
 
 
 
2320
  msgid "Visitor Details"
2321
  msgstr ""
2322
 
2323
- #: lib/wassupadmin.php:452
2324
  msgid "Spy Visitors"
2325
  msgstr ""
2326
 
2327
- #: lib/wassupadmin.php:453 lib/wassupadmin.php:523 lib/wassupadmin.php:538
2328
- #: lib/wassupadmin.php:886
2329
  msgid "Current Visitors Online"
2330
  msgstr ""
2331
 
2332
- #: lib/wassupadmin.php:460
2333
  msgid "WassUp Stats"
2334
  msgstr ""
2335
 
2336
- #: lib/wassupadmin.php:480 lib/wassupadmin.php:482
2337
  msgid "Settings"
2338
  msgstr ""
2339
 
2340
- #: lib/wassupadmin.php:718
2341
  msgid "Nothing to do! Check a \"Delete\" option and try again"
2342
  msgstr ""
2343
 
2344
- #: lib/wassupadmin.php:722
2345
  #, php-format
2346
  msgid "%d records DELETED permanently!"
2347
  msgstr ""
2348
 
2349
- #: lib/wassupadmin.php:740
2350
  msgid "0 records deleted!"
2351
  msgstr ""
2352
 
2353
- #: lib/wassupadmin.php:767
2354
  msgid "Wassup uninstall option updated successfully"
2355
  msgstr ""
2356
 
2357
- #: lib/wassupadmin.php:775
2358
  msgid "Wassup options reset successfully"
2359
  msgstr ""
2360
 
2361
- #: lib/wassupadmin.php:782 lib/wassupadmin.php:796
2362
  msgid "Sorry! You're not allowed to do that."
2363
  msgstr ""
2364
 
2365
- #: lib/wassupadmin.php:793
2366
  msgid "Wassup spam options updated successfully"
2367
  msgstr ""
2368
 
2369
- #: lib/wassupadmin.php:833
2370
  msgid "records deleted"
2371
  msgstr ""
2372
 
2373
- #: lib/wassupadmin.php:835
2374
  msgid "Sorry! You're not allowed to delete records."
2375
  msgstr ""
2376
 
2377
- #: lib/wassupadmin.php:848
2378
  msgid "WARNING: WassUp is NOT recording new statistics."
2379
  msgstr ""
2380
 
2381
- #: lib/wassupadmin.php:851
2382
  msgid ""
2383
  "To collect visitor data you must check \"Enable statistics recording\" in "
2384
  "\"WassUp-Options: General Setup\" tab"
2385
  msgstr ""
2386
 
2387
- #: lib/wassupadmin.php:853
2388
  msgid ""
2389
  "To collect visitor data you must check \"Enable Statistics Recording for "
2390
  "network\" in \"WassUp-Options: General Setup\" tab"
2391
  msgstr ""
2392
 
2393
- #: lib/wassupadmin.php:855 lib/wassupadmin.php:861
2394
  msgid ""
2395
  "Contact your site administrator about enabling statistics recording for the "
2396
  "network."
2397
  msgstr ""
2398
 
2399
- #: lib/wassupadmin.php:859
2400
  msgid "Contact your site administrator about enabling statistics recording."
2401
  msgstr ""
2402
 
2403
- #: lib/wassupadmin.php:883
2404
  msgid "Latest Hits"
2405
  msgstr ""
2406
 
2407
- #: lib/wassupadmin.php:900
 
 
 
 
2408
  msgid "Donations are really welcome"
2409
  msgstr ""
2410
 
2411
- #: lib/wassupadmin.php:902
2412
  #, php-format
2413
  msgid "Check the %s for updates, bug reports and your hints to improve it"
2414
  msgstr ""
2415
 
2416
- #: lib/wassupadmin.php:902
2417
  msgid "Official WassUp page"
2418
  msgstr ""
2419
 
2420
- #: lib/wassupadmin.php:903
2421
  msgid "WassUp Support"
2422
  msgstr ""
2423
 
2424
- #: lib/wassupadmin.php:903
2425
  msgid "Wassup Support"
2426
  msgstr ""
2427
 
2428
- #: lib/wassupadmin.php:904
2429
  msgid "Exec time"
2430
  msgstr ""
2431
 
2432
- #: lib/wassupadmin.php:1010 lib/wassupadmin.php:1197
2433
  msgid "Legend"
2434
  msgstr ""
2435
 
2436
- #: lib/wassupadmin.php:1010 lib/wassupadmin.php:1039 lib/wassupadmin.php:1197
2437
  msgid "Logged-in Users"
2438
  msgstr ""
2439
 
2440
- #: lib/wassupadmin.php:1010
2441
  msgid "Comment Authors"
2442
  msgstr ""
2443
 
2444
- #: lib/wassupadmin.php:1010 lib/wassupadmin.php:1197
2445
  msgid "Spiders/bots"
2446
  msgstr ""
2447
 
2448
- #: lib/wassupadmin.php:1038 lib/wassupadmin.php:2082
2449
- #: lib/compat-lib/compat_php.php:2586 widgets/widget_functions.php:201
 
2450
  msgid "Visitors online"
2451
  msgstr ""
2452
 
2453
- #: lib/wassupadmin.php:1066
2454
  msgid "From your site"
2455
  msgstr ""
2456
 
2457
- #: lib/wassupadmin.php:1088 lib/wassupadmin.php:1679
2458
  msgid "LOGGED IN USER"
2459
  msgstr ""
2460
 
2461
- #: lib/wassupadmin.php:1093 lib/wassupadmin.php:1686
2462
  msgid "ADMINISTRATOR"
2463
  msgstr ""
2464
 
2465
- #: lib/wassupadmin.php:1108 lib/wassupadmin.php:1707
2466
  msgid "COMMENT AUTHOR"
2467
  msgstr ""
2468
 
2469
- #: lib/wassupadmin.php:1129 lib/wassupadmin.php:1762
2470
  msgid "show raw table"
2471
  msgstr ""
2472
 
2473
- #: lib/wassupadmin.php:1129 lib/wassupadmin.php:1762
2474
  msgid "Show the items as raw table"
2475
  msgstr ""
2476
 
2477
- #: lib/wassupadmin.php:1197
2478
  msgid "Comments Authors"
2479
  msgstr ""
2480
 
2481
- #: lib/wassupadmin.php:1201
2482
  msgid "Pause"
2483
  msgstr ""
2484
 
2485
- #: lib/wassupadmin.php:1202
2486
  msgid "Play"
2487
  msgstr ""
2488
 
2489
- #: lib/wassupadmin.php:1213
2490
  msgid "Show map"
2491
  msgstr ""
2492
 
2493
- #: lib/wassupadmin.php:1213
2494
  msgid "Show ip geo location on map"
2495
  msgstr ""
2496
 
2497
- #: lib/wassupadmin.php:1219
2498
  msgid "Spy items by"
2499
  msgstr ""
2500
 
2501
- #: lib/wassupadmin.php:1266
2502
  msgid "WassUp recording is disabled"
2503
  msgstr ""
2504
 
2505
- #: lib/wassupadmin.php:1268
2506
  msgid "WassUp recording is disabled for network."
2507
  msgstr ""
2508
 
2509
- #: lib/wassupadmin.php:1465
2510
  msgid "Show details from the last"
2511
  msgstr ""
2512
 
2513
- #: lib/wassupadmin.php:1474
2514
  msgid "Items per page"
2515
  msgstr ""
2516
 
2517
- #: lib/wassupadmin.php:1484
2518
  msgid "Filter items for"
2519
  msgstr ""
2520
 
2521
- #: lib/wassupadmin.php:1498
2522
  msgid "Visits"
2523
  msgstr ""
2524
 
2525
- #: lib/wassupadmin.php:1499
2526
  msgid "Pageviews"
2527
  msgstr ""
2528
 
2529
- #: lib/wassupadmin.php:1500
2530
  msgid "Pages/Visits"
2531
  msgstr ""
2532
 
2533
- #: lib/wassupadmin.php:1516
2534
  msgid "Spams"
2535
  msgstr ""
2536
 
2537
- #: lib/wassupadmin.php:1526
2538
  msgid "Spam/Malware Options"
2539
  msgstr ""
2540
 
2541
- #: lib/wassupadmin.php:1532
2542
  msgid "Enable Spam and Malware Check on Records"
2543
  msgstr ""
2544
 
2545
- #: lib/wassupadmin.php:1535
2546
  msgid "Record attack/exploit attempts (libwww-perl agent)"
2547
  msgstr ""
2548
 
2549
- #: lib/wassupadmin.php:1544
2550
  msgid "refresh screen"
2551
  msgstr ""
2552
 
2553
- #: lib/wassupadmin.php:1546
2554
  #, php-format
2555
  msgid "Auto refresh in %s seconds"
2556
  msgstr ""
2557
 
2558
- #: lib/wassupadmin.php:1551
2559
  msgid "hide chart"
2560
  msgstr ""
2561
 
2562
- #: lib/wassupadmin.php:1551
2563
  msgid "Hide the chart"
2564
  msgstr ""
2565
 
2566
- #: lib/wassupadmin.php:1551
2567
  msgid "Hide chart"
2568
  msgstr ""
2569
 
2570
- #: lib/wassupadmin.php:1553
2571
  msgid "show chart"
2572
  msgstr ""
2573
 
2574
- #: lib/wassupadmin.php:1553
2575
  msgid "Show the chart"
2576
  msgstr ""
2577
 
2578
- #: lib/wassupadmin.php:1553
2579
  msgid "Show chart"
2580
  msgstr ""
2581
 
2582
- #: lib/wassupadmin.php:1564
2583
  #, php-format
2584
  msgid "Top Stats for %s"
2585
  msgstr ""
2586
 
2587
- #: lib/wassupadmin.php:1564
2588
  msgid "Show top stats"
2589
  msgstr ""
2590
 
2591
- #: lib/wassupadmin.php:1566
2592
  #, php-format
2593
  msgid "Top stats for %s in popup"
2594
  msgstr ""
2595
 
2596
- #: lib/wassupadmin.php:1574
2597
  #, php-format
2598
  msgid "%s matches found for search"
2599
  msgstr ""
2600
 
2601
- #: lib/wassupadmin.php:1578
2602
  #, php-format
2603
  msgid "%s items marked for IP"
2604
  msgstr ""
2605
 
2606
- #: lib/wassupadmin.php:1579
2607
  msgid "Filter by marked IP"
2608
  msgstr ""
2609
 
2610
- #: lib/wassupadmin.php:1643
2611
  msgid "Records display interrupted."
2612
  msgstr ""
2613
 
2614
- #: lib/wassupadmin.php:1646
2615
  msgid "Unable to display records."
2616
  msgstr ""
2617
 
2618
- #: lib/wassupadmin.php:1713
2619
  msgid "FEEDREADER"
2620
  msgstr ""
2621
 
2622
- #: lib/wassupadmin.php:1715
2623
  msgid "SUBSCRIBER(S)"
2624
  msgstr ""
2625
 
2626
- #: lib/wassupadmin.php:1718
2627
  msgid "SPIDER"
2628
  msgstr ""
2629
 
2630
- #: lib/wassupadmin.php:1752 lib/wassupadmin.php:1757
2631
  msgid "delete"
2632
  msgstr ""
2633
 
2634
- #: lib/wassupadmin.php:1752
2635
  msgid "Delete ALL marked records with this IP"
2636
  msgstr ""
2637
 
2638
- #: lib/wassupadmin.php:1754
2639
  msgid "unmark"
2640
  msgstr ""
2641
 
2642
- #: lib/wassupadmin.php:1754
2643
  msgid "UnMark IP"
2644
  msgstr ""
2645
 
2646
- #: lib/wassupadmin.php:1757
2647
  msgid "Delete this record"
2648
  msgstr ""
2649
 
2650
- #: lib/wassupadmin.php:1759
2651
  msgid "mark"
2652
  msgstr ""
2653
 
2654
- #: lib/wassupadmin.php:1759
2655
  msgid "Mark IP"
2656
  msgstr ""
2657
 
2658
- #: lib/wassupadmin.php:1802
2659
  msgid "SEARCH ENGINE"
2660
  msgstr ""
2661
 
2662
- #: lib/wassupadmin.php:1802
2663
  msgid "page"
2664
  msgstr ""
2665
 
2666
- #: lib/wassupadmin.php:1803
2667
  msgid "KEYWORDS"
2668
  msgstr ""
2669
 
2670
- #: lib/wassupadmin.php:1826
2671
  msgid "Probably SPAM!"
2672
  msgstr ""
2673
 
2674
- #: lib/wassupadmin.php:1828
2675
  msgid "Referer Spam"
2676
  msgstr ""
2677
 
2678
- #: lib/wassupadmin.php:1832
2679
  msgid "Comment Spam"
2680
  msgstr ""
2681
 
2682
- #: lib/wassupadmin.php:1840
2683
  msgid "Probably hack/malware attempt!"
2684
  msgstr ""
2685
 
2686
- #: lib/wassupadmin.php:1867
2687
  msgid "BROWSER"
2688
  msgstr ""
2689
 
2690
- #: lib/wassupadmin.php:1870
2691
  msgid "RESOLUTION"
2692
  msgstr ""
2693
 
2694
- #: lib/wassupadmin.php:1940
2695
- msgid "Graph of visitor hits"
2696
  msgstr ""
2697
 
2698
- #: lib/wassupadmin.php:1942
2699
- msgid "Too few records to print chart"
2700
  msgstr ""
2701
 
2702
- #: lib/wassupadmin.php:1951
2703
  #, php-format
2704
  msgid "Invalid page request %s"
2705
  msgstr ""
2706
 
2707
- #: lib/wassupadmin.php:2016 lib/compat-lib/compat_php.php:2520
2708
  msgid "Stats"
2709
  msgstr ""
2710
 
2711
- #: lib/wassupadmin.php:2016 lib/compat-lib/compat_php.php:2520
2712
  msgid "More"
2713
  msgstr ""
2714
 
2715
- #: lib/wassupadmin.php:2018 lib/wassupadmin.php:2053
2716
- #: lib/compat-lib/compat_php.php:2522 lib/compat-lib/compat_php.php:2557
 
2717
  msgid "visitor stats chart"
2718
  msgstr ""
2719
 
2720
- #: lib/wassupadmin.php:2048 lib/compat-lib/compat_php.php:2552
2721
  msgid "More Stats"
2722
  msgstr ""
2723
 
2724
- #: lib/wassupadmin.php:2129 lib/compat-lib/compat_php.php:2633
2725
  msgid "Registered users"
2726
  msgstr ""
2727
 
2728
- #: lib/wassupadmin.php:2139 lib/compat-lib/compat_php.php:2643
2729
- #: widgets/widget_functions.php:200
2730
  msgid "Visitor online"
2731
  msgstr ""
2732
 
2733
- #: lib/wassupadmin.php:2144 lib/compat-lib/compat_php.php:2648
2734
  msgid "No online data!"
2735
  msgstr ""
2736
 
2737
- #: lib/wassupadmin.php:2148 lib/compat-lib/compat_php.php:2652
2738
- #: widgets/widget_functions.php:105
2739
  msgid "powered by"
2740
  msgstr ""
2741
 
2742
- #: lib/wassupadmin.php:2148 lib/compat-lib/compat_php.php:2652
2743
- #: widgets/widget_functions.php:105
2744
  msgid "Real Time Visitors Tracking"
2745
  msgstr ""
2746
 
2747
- #: lib/compat-lib/compat_widget.php:105 widgets/widgets.php:101
2748
- #: widgets/widgets.php:249 widgets/widgets.php:463
 
 
 
 
2749
  msgid "Widget style options"
2750
  msgstr ""
2751
 
2752
- #: lib/compat-lib/compat_widget.php:107 widgets/widgets.php:103
2753
- #: widgets/widgets.php:251 widgets/widgets.php:465
2754
  #, php-format
2755
  msgid "Class attribute for %s list:"
2756
  msgstr ""
2757
 
2758
- #: lib/compat-lib/compat_widget.php:109 widgets/widgets.php:105
2759
- #: widgets/widgets.php:253 widgets/widgets.php:467
2760
  msgid "Max. chars to display from left"
2761
  msgstr ""
2762
 
2763
- #: lib/compat-lib/compat_widget.php:110 widgets/widgets.php:106
2764
- #: widgets/widgets.php:254 widgets/widgets.php:468
2765
  msgid "enter \"0\" for theme default/line wrap of long texts"
2766
  msgstr ""
2767
 
2768
- #: widgets/widgets.php:57
2769
- msgid "base widget"
2770
- msgstr ""
2771
-
2772
- #: widgets/widgets.php:201
2773
  msgid "Online"
2774
  msgstr ""
2775
 
2776
- #: widgets/widgets.php:202
2777
  msgid "Show counts of your site's visitors who are currently online."
2778
  msgstr ""
2779
 
2780
- #: widgets/widgets.php:212
2781
  msgid "Online Now"
2782
  msgstr ""
2783
 
2784
- #: widgets/widgets.php:232
2785
  msgid "Show online counts for:"
2786
  msgstr ""
2787
 
2788
- #: widgets/widgets.php:234
2789
  msgid "All current visitors"
2790
  msgstr ""
2791
 
2792
- #: widgets/widgets.php:235 widgets/widget_functions.php:211
2793
  msgid "Logged-in users"
2794
  msgstr ""
2795
 
2796
- #: widgets/widgets.php:237 widgets/widget_functions.php:231
2797
  msgid "Regular visitors"
2798
  msgstr ""
2799
 
2800
- #: widgets/widgets.php:238 widgets/widget_functions.php:241
2801
  msgid "Others"
2802
  msgstr ""
2803
 
2804
- #: widgets/widgets.php:242
2805
  msgid "Online Users Details"
2806
  msgstr ""
2807
 
2808
- #: widgets/widgets.php:244
2809
  msgid "Show online usernames to registered users"
2810
  msgstr ""
2811
 
2812
- #: widgets/widgets.php:245
2813
  msgid "Show country flags of users online"
2814
  msgstr ""
2815
 
2816
- #: widgets/widgets.php:258
2817
  msgid "online counts are automatically cached for 1 minute."
2818
  msgstr ""
2819
 
2820
- #: widgets/widgets.php:259 widgets/widgets.php:473
2821
  msgid "empty results are not displayed."
2822
  msgstr ""
2823
 
2824
- #: widgets/widgets.php:370
2825
  msgid "Top Stats"
2826
  msgstr ""
2827
 
2828
- #: widgets/widgets.php:371
2829
  msgid ""
2830
  "List your site's most popular or trending items from Wassup's latest stats "
2831
  "data."
2832
  msgstr ""
2833
 
2834
- #: widgets/widgets.php:404
2835
  msgid "of first checked item below"
2836
  msgstr ""
2837
 
2838
- #: widgets/widgets.php:406
2839
  msgid "List Top Results for"
2840
  msgstr ""
2841
 
2842
- #: widgets/widgets.php:410
2843
  msgid "Stat item"
2844
  msgstr ""
2845
 
2846
- #: widgets/widgets.php:411
2847
  msgid "max limit"
2848
  msgstr ""
2849
 
2850
- #: widgets/widgets.php:413
2851
  msgid "Titles of posts and pages"
2852
  msgstr ""
2853
 
2854
- #: widgets/widgets.php:413
2855
  msgid "Latest articles"
2856
  msgstr ""
2857
 
2858
- #: widgets/widgets.php:419
2859
  msgid "Search engine searches"
2860
  msgstr ""
2861
 
2862
- #: widgets/widgets.php:419
2863
  msgid "Latest searches"
2864
  msgstr ""
2865
 
2866
- #: widgets/widgets.php:425
2867
  msgid "External links that generated referrals to your site"
2868
  msgstr ""
2869
 
2870
- #: widgets/widgets.php:425
2871
  msgid "Latest referrers"
2872
  msgstr ""
2873
 
2874
- #: widgets/widgets.php:431
2875
  msgid "Latest URL requests"
2876
  msgstr ""
2877
 
2878
- #: widgets/widgets.php:437
2879
  msgid "Client browser software"
2880
  msgstr ""
2881
 
2882
- #: widgets/widgets.php:437
2883
  msgid "Latest browsers"
2884
  msgstr ""
2885
 
2886
- #: widgets/widgets.php:443
2887
  msgid "Client device/operating software"
2888
  msgstr ""
2889
 
2890
- #: widgets/widgets.php:443
2891
  msgid "Latest OS"
2892
  msgstr ""
2893
 
2894
- #: widgets/widgets.php:449
2895
  msgid "Visitors country/language"
2896
  msgstr ""
2897
 
2898
- #: widgets/widgets.php:449
2899
  msgid "Latest locale"
2900
  msgstr ""
2901
 
2902
- #: widgets/widgets.php:456
2903
  msgid "Show counts for each item"
2904
  msgstr ""
2905
 
2906
- #: widgets/widgets.php:457
2907
  msgid "Statistics timeframe"
2908
  msgstr ""
2909
 
2910
- #: widgets/widgets.php:458
2911
  msgid ""
2912
  "select 1-30 days for latest top results, 1-12 hours for trending results"
2913
  msgstr ""
2914
 
2915
- #: widgets/widgets.php:459
2916
  msgid "Refresh statistics every:"
2917
  msgstr ""
2918
 
2919
- #: widgets/widgets.php:472
2920
  msgid "known spammers and spiders are excluded from results."
2921
  msgstr ""
2922
 
2923
- #: widgets/widgets.php:576
2924
- msgid "Trending"
2925
  msgstr ""
2926
 
2927
  #: widgets/widget_functions.php:240
2928
  msgid "Other"
2929
  msgstr ""
2930
 
2931
- #: widgets/widget_functions.php:397
2932
  #, php-format
2933
  msgid "%s articles"
2934
  msgstr ""
2935
 
2936
- #: widgets/widget_functions.php:398
2937
  #, php-format
2938
  msgid "%s searches"
2939
  msgstr ""
2940
 
2941
- #: widgets/widget_functions.php:399
2942
  #, php-format
2943
  msgid "%s referrers"
2944
  msgstr ""
2945
 
2946
- #: widgets/widget_functions.php:400
2947
  #, php-format
2948
  msgid "%s requests"
2949
  msgstr ""
2950
 
2951
- #: widgets/widget_functions.php:401
2952
  #, php-format
2953
  msgid "%s browsers"
2954
  msgstr ""
2955
 
2956
- #: widgets/widget_functions.php:402
2957
  #, php-format
2958
  msgid "%s OS"
2959
  msgstr ""
2960
 
2961
- #: widgets/widget_functions.php:403
 
 
 
 
2962
  #, php-format
2963
  msgid "%s locale"
2964
  msgstr ""
1
  # LANGUAGE translation for WassUp Real-time Analytics plugin
2
+ # Copyright (C) 2009-2017
3
  # This file is distributed under the same license as WassUp plugin.
4
  # Michele Marcucci <michele(at)befree.it>, 2009.
5
  #
6
  #, fuzzy
7
  msgid ""
8
  msgstr ""
9
+ "Project-Id-Version: WassUp 1.9.4\n"
10
  "Report-Msgid-Bugs-To: michele@befree.it\n"
11
+ "POT-Creation-Date: 2017-07-08 16:29-0500\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:175
21
  #, php-format
22
  msgid "File %s does not exist!"
23
  msgstr ""
24
 
25
+ #: wassup.php:189
26
  msgid "Sorry! \"Network Activation\" is DISABLED for subdomain networks."
27
  msgstr ""
28
 
29
+ #: wassup.php:190
30
  #, php-format
31
  msgid "%s must be activated on each subdomain site separately."
32
  msgstr ""
33
 
34
+ #: wassup.php:191
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:192
41
  msgid "Back to Plugins"
42
  msgstr ""
43
 
44
+ #: wassup.php:255 lib/upgrade.php:723
45
  msgid "Database created/upgraded successfully"
46
  msgstr ""
47
 
48
+ #: wassup.php:257
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:261
55
  msgid "activation successful"
56
  msgstr ""
57
 
58
+ #: wassup.php:263
59
  msgid "activation successful. No upgrade necessary."
60
  msgstr ""
61
 
62
+ #: wassup.php:290
63
  #, php-format
64
  msgid "%s: database upgrade failed!"
65
  msgstr ""
66
 
67
+ #: wassup.php:302
68
  #, php-format
69
  msgid "%s: plugin install/upgrade failed!"
70
  msgstr ""
71
 
72
+ #: wassup.php:483 wassup.php:486 lib/action.php:53
73
  msgid "Bad request!"
74
  msgstr ""
75
 
76
+ #: wassup.php:691
77
  msgid "Export ERROR: nonce failure!"
78
  msgstr ""
79
 
80
+ #: wassup.php:694
81
  msgid "Export ERROR: login required!"
82
  msgstr ""
83
 
84
+ #: wassup.php:731
85
+ msgid "Too much data for Wassup export! Use a separate MySQL Db tool instead."
86
  msgstr ""
87
 
88
+ #: wassup.php:751
89
  msgid "ERROR: Nothing to Export."
90
  msgstr ""
91
 
92
+ #: wassup.php:1069 wassup.php:3342 lib/uadetector.class.php:600
93
  #: lib/uadetector.class.php:1431
94
  msgid "Unknown Spider"
95
  msgstr ""
96
 
97
+ #: wassup.php:1070
98
  msgid "Unknown Browser"
99
  msgstr ""
100
 
101
+ #: wassup.php:1702
102
  msgid "Spoofer bot"
103
  msgstr ""
104
 
105
+ #: wassup.php:2121
106
  #, php-format
107
  msgid "%s WassUp Plugin table has reached maximum size!"
108
  msgstr ""
109
 
110
+ #: wassup.php:2121
111
  msgid "ALERT"
112
  msgstr ""
113
 
114
+ #: wassup.php:2122
115
  msgid "Hi"
116
  msgstr ""
117
 
118
+ #: wassup.php:2122
119
  msgid ""
120
  "you have received this email because your WassUp Database table at your "
121
  "Wordpress blog"
122
  msgstr ""
123
 
124
+ #: wassup.php:2122
125
  msgid "has reached the maximum value set in the options menu"
126
  msgstr ""
127
 
128
+ #: wassup.php:2123
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:2123
135
  msgid "This alert now will be removed and you will be able to set a new one"
136
  msgstr ""
137
 
138
+ #: wassup.php:2124
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:2124
145
  msgid "Have a nice day!"
146
  msgstr ""
147
 
148
+ #: wassup.php:2365 wassup.php:2809
149
  msgid "encrypted search"
150
  msgstr ""
151
 
152
+ #: wassup.php:3329 wassup.php:3336
153
  msgid "Feed Reader"
154
  msgstr ""
155
 
156
+ #: wassup.php:3337
157
  msgid "feed reader"
158
  msgstr ""
159
 
160
+ #: wassup.php:3812
161
  msgid "timestamp"
162
  msgstr ""
163
 
164
+ #: wassup.php:3813
165
  msgid "If above timestamp is not current time, this page is cached"
166
  msgstr ""
167
 
168
+ #: wassup.php:3994
169
  msgid "Visitors Online"
170
  msgstr ""
171
 
172
+ #: wassup.php:4012 widgets/widgets.php:143 widgets/widgets.php:334
173
+ #: widgets/widgets.php:548 lib/compat-lib/compat_widget.php:152
174
  msgid "No Data"
175
  msgstr ""
176
 
177
+ #: lib/action.php:44 lib/action.php:60
178
+ msgid "Missing or invalid parameter!"
179
  msgstr ""
180
 
181
  #: lib/action.php:56
182
  msgid "Login required!"
183
  msgstr ""
184
 
 
 
 
 
185
  #: lib/action.php:70
186
+ msgid "invalid parameter!"
187
  msgstr ""
188
 
189
  #: lib/action.php:74
190
  msgid "Nothing to do"
191
  msgstr ""
192
 
193
+ #: lib/action.php:89
194
  msgid "An error occurred during delete of"
195
  msgstr ""
196
 
197
+ #: lib/action.php:94 lib/action.php:105 lib/action.php:108 lib/action.php:111
198
  msgid "Error"
199
  msgstr ""
200
 
201
+ #: lib/action.php:98
202
  #, php-format
203
  msgid "%d records deleted!"
204
  msgstr ""
205
 
206
+ #: lib/action.php:155
207
  msgid "ERROR: bad date parameter"
208
  msgstr ""
209
 
210
+ #: lib/action.php:208
211
  msgid "Error: Nothing to do!"
212
  msgstr ""
213
 
227
  msgid "Your Akismet API key is not valid."
228
  msgstr ""
229
 
230
+ #: lib/compatibility.php:96
231
  msgid "Sorry, WassUp requires WordPress 2.2 or higher to work"
232
  msgstr ""
233
 
234
+ #: lib/compatibility.php:103
235
  msgid "WARNING! WassUp's backward compatibility modules are missing."
236
  msgstr ""
237
 
238
+ #: lib/compatibility.php:104 lib/compatibility.php:113
239
  #, php-format
240
  msgid ""
241
  "Download and install the full version of Wassup with compatibility library "
242
  "included directly from %s."
243
  msgstr ""
244
 
245
+ #: lib/compatibility.php:109
246
  msgid ""
247
  "Sorry, WassUp requires WordPress 3.1 or higher to work in multisite setups"
248
  msgstr ""
249
 
250
+ #: lib/compatibility.php:112
251
+ msgid "WARNING! WassUp's PHP compatibility modules are missing."
252
  msgstr ""
253
 
254
+ #: lib/faq.php:36
255
+ msgid "How do I add WassUp's chart to my admin dashboard?"
 
 
 
 
 
 
256
  msgstr ""
257
 
258
+ #: lib/faq.php:37
259
  #, php-format
260
+ msgid ""
261
+ "Check the box for \"Enable widget/small chart in admin dashboard\" under %s "
262
+ "tab."
263
  msgstr ""
264
 
265
+ #: lib/faq.php:37 lib/faq.php:43 lib/faq.php:47 lib/faq.php:49 lib/faq.php:51
266
+ #: lib/faq.php:53 lib/faq.php:54 lib/faq.php:57 lib/faq.php:58 lib/faq.php:59
267
+ #: lib/faq.php:64 lib/faq.php:70 lib/faq.php:72 lib/faq.php:76 lib/faq.php:80
268
+ #: lib/faq.php:86 lib/faq.php:87 lib/wassupadmin.php:525
269
+ #: lib/wassupadmin.php:984
270
+ msgid "Options"
271
  msgstr ""
272
 
273
+ #: lib/faq.php:37 lib/faq.php:43 lib/faq.php:47 lib/faq.php:51 lib/faq.php:53
274
+ #: lib/faq.php:54 lib/faq.php:57 lib/faq.php:58 lib/faq.php:76 lib/faq.php:80
275
+ #: lib/settings.php:147
276
+ msgid "General Setup"
277
  msgstr ""
278
 
279
+ #: lib/faq.php:38
280
+ msgid "How do I display WassUp widgets on my site?"
281
  msgstr ""
282
 
283
+ #: lib/faq.php:39
284
+ msgid ""
285
+ "From Wordpress widgets panel, drag the \"WassUp Online\" widget or the "
286
+ "\"Wassup Top Stats\" widget from the list of available widgets on the left "
287
+ "into your theme's \"Sidebar\" or \"Footer\" area on the right or use the "
288
+ "Customizer to add Wassup widgets interactively."
289
  msgstr ""
290
 
291
+ #: lib/faq.php:40
292
+ msgid ""
293
+ "My Wordpress theme is not widget ready. Is it possible to display WassUp "
294
+ "widgets on my site?"
295
  msgstr ""
296
 
297
+ #: lib/faq.php:41
298
+ msgid ""
299
+ "Yes. Insert the template tag \"wassup_sidebar()\" into your theme's "
300
+ "\"sidebar.php\" file to display Wassup widgets as a single combined widget "
301
+ "on your site."
302
  msgstr ""
303
 
304
+ #: lib/faq.php:42
305
+ msgid "How do I view the real-time visitor geolocation map in WassUp?"
306
  msgstr ""
307
 
308
+ #: lib/faq.php:43
309
+ #, php-format
310
+ msgid ""
311
+ "Check the box for \"Display a GEO IP Map in spy visitors view\" in %s and "
312
+ "save, then navigate to %s panel to see the map."
313
  msgstr ""
314
 
315
+ #: lib/faq.php:43 lib/wassupadmin.php:522 lib/wassupadmin.php:627
316
+ #: lib/wassupadmin.php:981
317
+ msgid "SPY Visitors"
318
  msgstr ""
319
 
320
+ #: lib/faq.php:44
321
+ msgid ""
322
+ "The map has vanished and I get a message like: \"Oops, something went wrong"
323
+ "\" or \"Google has disabled use of the Maps API for this application\". How "
324
+ "do I fix this?"
325
  msgstr ""
326
 
327
+ #: lib/faq.php:46
328
+ #, php-format
329
+ msgid ""
330
+ "Try upgrading to the latest version of Wassup, or go to Wassup-Options and "
331
+ "click the Reset-to-Default button if you have already upgraded, or sign up "
332
+ "for your own %s and enter it under \"Spy Visitors settings\" in %s tab."
333
  msgstr ""
334
 
335
+ #: lib/faq.php:48
336
+ msgid "How do I exclude a visitor from being recorded?"
 
 
337
  msgstr ""
338
 
339
+ #: lib/faq.php:49
340
+ #, php-format
341
+ msgid ""
342
+ "Navigate to %s tab and enter a visitor's username, IP address, or hostname "
343
+ "into the appropriate text area for that \"Recording Exclusion\" type."
344
  msgstr ""
345
 
346
+ #: lib/faq.php:49 lib/faq.php:72 lib/settings.php:148
347
+ msgid "Filters & Exclusions"
348
  msgstr ""
349
 
350
+ #: lib/faq.php:50
351
+ msgid ""
352
+ "How do I stop (temporarily) WassUp from recording new visits on my site?"
353
  msgstr ""
354
 
355
+ #: lib/faq.php:51
356
+ #, php-format
357
+ msgid "Uncheck the box for \"Enable statistics recording\" under %s tab."
358
  msgstr ""
359
 
360
+ #: lib/faq.php:52
361
+ msgid ""
362
+ "In Wordpress multisite, how do I stop (temporarily) WassUp from recording "
363
+ "new visits on all sites in the network?"
364
  msgstr ""
365
 
366
+ #: lib/faq.php:53
367
+ #, php-format
368
+ msgid ""
369
+ "If plugin is \"network activated\", login as network admin, go to the "
370
+ "Network admin dashboard, navigate to %s tab and Uncheck the box for \"Enable "
371
+ "Statistics Recording for network\" and save."
372
  msgstr ""
373
 
374
+ #: lib/faq.php:54
375
+ #, php-format
376
+ msgid ""
377
+ "If plugin is NOT \"network activated\", login as network admin, go to the "
378
+ "main site/parent domain admin dashboard, navigate to %s tab, then Uncheck "
379
+ "the box for \"Enable Statistics Recording for network\" and save."
380
  msgstr ""
381
 
382
+ #: lib/faq.php:56
383
+ msgid ""
384
+ "No data is being displayed; or \"Visitor Details\" panel show 0 records for "
385
+ "the last 24 hours. How do I fix this?"
386
  msgstr ""
387
 
388
+ #: lib/faq.php:57
389
+ #, php-format
390
+ msgid ""
391
+ "Check the box for \"Enable statistics recording\" setting under %s tab and "
392
+ "save."
393
  msgstr ""
394
 
395
+ #: lib/faq.php:58
396
+ #, php-format
397
+ msgid "Click the [Reset to Default] button under %s tab."
398
  msgstr ""
399
 
400
+ #: lib/faq.php:59
401
+ #, php-format
402
+ msgid ""
403
+ "Navigate to %s tab and uncheck the \"MySQL Delayed Insert\" setting and save."
404
  msgstr ""
405
 
406
+ #: lib/faq.php:59 lib/faq.php:64 lib/faq.php:70
407
+ msgid "Manage File & Data"
408
  msgstr ""
409
 
410
+ #: lib/faq.php:60
411
+ msgid "Deactivate and Re-activate Wassup from Wordpress Plugins panel."
412
  msgstr ""
413
 
414
+ #: lib/faq.php:61
415
+ #, php-format
416
+ msgid ""
417
+ "If you have access to MySql/phpMyAdmin on your host server, run the MySql "
418
+ "command %s to repair and release any locks on wassup table. Note that wassup "
419
+ "table name may be different in other Wordpress setups."
420
  msgstr ""
421
 
422
+ #: lib/faq.php:62
423
+ msgid ""
424
+ "As a last resort, uninstall WassUp cleanly (delete data and files) and "
425
+ "reinstall it."
426
  msgstr ""
427
 
428
+ #: lib/faq.php:63
429
+ msgid ""
430
+ "My popular web site is hosted on a shared server with restrictive database "
431
+ "size limits. How do I prevent WassUp's table from growing too big for my "
432
+ "allocated quota?"
433
  msgstr ""
434
 
435
+ #: lib/faq.php:64
436
+ #, php-format
437
+ msgid ""
438
+ "Navigate to %s tab and enable the setting for \"Auto Delete\" of old records "
439
+ "and/or check the box to receive an email alert when the table size limit is "
440
+ "exceeded."
441
  msgstr ""
442
 
443
+ #: lib/faq.php:65
444
+ msgid ""
445
+ "WassUp visitor counts are much lower than actual for my website. Why is "
446
+ "there a discrepancy and how do I fix it?"
447
  msgstr ""
448
 
449
+ #: lib/faq.php:66
450
+ msgid ""
451
+ "Low visitor count is likely caused by page caching on your website. WassUp "
452
+ "is incompatible with static page caching plugins such as WP Supercache, WP "
453
+ "Cache, and Hyper Cache. To fix, uninstall your cache plugin or switch to a "
454
+ "different (javascript-based) statistics plugin."
455
  msgstr ""
456
 
457
+ #: lib/faq.php:67
458
+ msgid "Is there any caching plugin that works with WassUp?"
459
  msgstr ""
460
 
461
+ #: lib/faq.php:68
462
+ #, php-format
463
+ msgid ""
464
+ "There are no known caching plugins that are 100% compatible with WassUp at "
465
+ "this time."
466
  msgstr ""
467
 
468
+ #: lib/faq.php:69
469
+ msgid "How can I make Wassup run faster?"
470
  msgstr ""
471
 
472
+ #: lib/faq.php:70
473
+ #, php-format
474
+ msgid ""
475
+ "Keep Wassup table size small by setting automatic delete of old records or "
476
+ "do manual delete periodically under %s tab."
477
  msgstr ""
478
 
479
+ #: lib/faq.php:71
480
+ msgid ""
481
+ "If using the \"Top Stats\" widget on your site, set refresh frequency to 15 "
482
+ "minutes or higher."
483
  msgstr ""
484
 
485
+ #: lib/faq.php:72
486
+ #, php-format
487
+ msgid ""
488
+ "Reduce the number of recording exclusions (by ip/hostname/username/url) "
489
+ "under %s tab."
490
  msgstr ""
491
 
492
+ #: lib/faq.php:75
493
+ #, php-format
494
+ msgid ""
495
+ "Delete the file(s) %s from the plugin subfolder 'lib' to stop Wassup from "
496
+ "doing remote server queries for spam identification."
 
 
 
 
 
497
  msgstr ""
498
 
499
+ #: lib/faq.php:76
500
  #, php-format
501
+ msgid ""
502
+ "As a last resort, stop all spam/malware detection on new hits by unchecking "
503
+ "\"Enable Spam and malware detection on records\" under %s tab."
504
  msgstr ""
505
 
506
+ #: lib/faq.php:77
507
+ msgid ""
508
+ "Why does WassUp stats sometimes show more page views than actual pages "
509
+ "clicked by a person?"
510
  msgstr ""
511
 
512
+ #: lib/faq.php:78
513
+ msgid ""
514
+ "\"Phantom\" page views can occur when a user's browser does automatic feed "
515
+ "retrieval, link pre-fetching, a page refresh, or automatically adds your "
516
+ "website to it's \"Top sites\" window (Safari). WassUp tracks these because "
517
+ "they are valid requests from the browser and are sometimes indistinguishable "
518
+ "from user link clicks."
519
  msgstr ""
520
 
521
+ #: lib/faq.php:79
522
+ msgid "How do I upgrade WassUp safely when my site has frequent visitors?"
523
  msgstr ""
524
 
525
+ #: lib/faq.php:80
526
+ #, php-format
527
+ msgid ""
528
+ "To upgrade WassUp when your site is busy, you must first disable statistics "
529
+ "recording manually under %s tab, then do the plugin upgrade, and afterwards "
530
+ "re-enable recording manually when the upgrade is complete and the plugin is "
531
+ "active."
532
  msgstr ""
533
 
534
+ #: lib/faq.php:81
535
+ msgid "An unspecified error occurred during plugin upgrade. What do I do next?"
536
  msgstr ""
537
 
538
+ #: lib/faq.php:82
539
+ msgid ""
540
+ "Wait a few minutes. Do NOT re-attempt to upgrade nor try to activate the "
541
+ "plugin again! An activation error with no explanation is probably due to "
542
+ "your browser timing out, not an upgrade failure. WassUp continues it's "
543
+ "upgrade in the background and will activate automatically when it is done. "
544
+ "After a few minutes (5-10) has passed, revisit Wordpress admin Plugins panel "
545
+ "and verify that Wassup plugin has activated."
546
  msgstr ""
547
 
548
+ #: lib/faq.php:83
549
+ msgid "How do I uninstall WassUp cleanly?"
550
  msgstr ""
551
 
552
+ #: lib/faq.php:84
553
+ msgid ""
554
+ "From a single Wordpress site: navigate to Wordpress Plugins panel and "
555
+ "deactivate WassUp plugin. Then, on the same page, click the \"delete\" link "
556
+ "below WassUp name. This deletes both data and files permanently."
557
  msgstr ""
558
 
559
+ #: lib/faq.php:85
560
+ msgid ""
561
+ "From Wordpress multisite Network admin panel: navigate to Plugins panel and "
562
+ "deactivate WassUp plugin. If the plugin is not \"network activated\", "
563
+ "navigate to the main site/parent domain Plugins panel and deactivate Wassup "
564
+ "plugin there, then return to Network admin Plugins panel. Click the \"delete"
565
+ "\" link below WassUp name. This deletes both data and files permanently from "
566
+ "the main site/parent domain and deletes Wassup data from all the subsites in "
567
+ "the network."
568
  msgstr ""
569
 
570
+ #: lib/faq.php:86
 
571
  #, php-format
572
+ msgid ""
573
+ "From a subsite in Wordpress multisite: navigate to %s tab and check the box "
574
+ "for \"Permanently remove WassUp data and settings\" and save. Next, go to "
575
+ "the subsite's Plugins panel and deactivate WassUp plugin. This deletes the "
576
+ "subsite's data permanently. No files are deleted (not needed)."
577
  msgstr ""
578
 
579
+ #: lib/faq.php:86 lib/faq.php:87 lib/settings.php:152
580
+ msgid "Uninstall"
581
  msgstr ""
582
 
583
+ #: lib/faq.php:87
584
+ #, php-format
585
+ msgid ""
586
+ "From a Wordpress 2.x site: navigate to %s tab and check the box for "
587
+ "\"Permanently remove WassUp data and settings\" and save. Next, go to "
588
+ "Wordpress Plugins panel and deactivate WassUp plugin. This deletes the data "
589
+ "permanently. To delete the plugin files from Wordpress 2.x, use an ftp "
590
+ "client software on your PC or login to your host server's \"cpanel\" and use "
591
+ "\"File Manager\" to delete the folder \"wassup\" from the %s directory on "
592
+ "your host server."
593
  msgstr ""
594
 
595
+ #: lib/faq.php:89
596
  #, php-format
597
+ msgid "Visit the %s to find more answers to your WassUp questions."
598
  msgstr ""
599
 
600
+ #: lib/faq.php:89
601
+ msgid "Plugin Forum"
602
  msgstr ""
603
 
604
+ #: lib/main.php:56 lib/settings.php:314 lib/settings.php:374
605
+ #: lib/settings.php:1021 lib/settings.php:1037 lib/settings.php:1059
606
+ msgid "Next"
607
  msgstr ""
608
 
609
+ #: lib/main.php:58
610
+ msgid "Previous"
611
  msgstr ""
612
 
613
+ #: lib/main.php:112
614
+ #, php-format
615
+ msgid "You must specify the %s"
616
  msgstr ""
617
 
618
+ #: lib/main.php:112
619
+ msgid "number of pages"
620
  msgstr ""
621
 
622
+ #: lib/main.php:116
623
+ #, php-format
624
+ msgid "You must specify the %s to show per page"
625
  msgstr ""
626
 
627
+ #: lib/main.php:116
628
+ msgid "limit of items"
629
  msgstr ""
630
 
631
+ #: lib/main.php:165
632
+ msgid "Pages"
633
+ msgstr ""
634
+
635
+ #: lib/main.php:409
636
+ msgid "Raw data"
637
+ msgstr ""
638
+
639
+ #: lib/main.php:410
640
+ msgid "Visitor type"
641
+ msgstr ""
642
+
643
+ #: lib/main.php:422 widgets/widget_functions.php:210
644
+ msgid "Logged-in user"
645
+ msgstr ""
646
+
647
+ #: lib/main.php:424
648
+ msgid "Spammer/Hacker"
649
+ msgstr ""
650
+
651
+ #: lib/main.php:426 lib/main.php:591
652
+ msgid "Spammer"
653
+ msgstr ""
654
+
655
+ #: lib/main.php:428 lib/main.php:611 widgets/widget_functions.php:220
656
+ msgid "Comment author"
657
+ msgstr ""
658
+
659
+ #: lib/main.php:430 lib/main.php:481 lib/main.php:483
660
+ msgid "Feed"
661
+ msgstr ""
662
+
663
+ #: lib/main.php:432 lib/main.php:486 lib/main.php:598 lib/wassup.class.php:480
664
+ #: lib/wassup.class.php:536 lib/compat-lib/compat_wassup.class.php:482
665
+ #: lib/compat-lib/compat_wassup.class.php:538
666
+ msgid "Spider"
667
+ msgstr ""
668
+
669
+ #: lib/main.php:434 lib/main.php:570 widgets/widget_functions.php:230
670
+ msgid "Regular visitor"
671
+ msgstr ""
672
+
673
+ #: lib/main.php:437
674
+ msgid "IP"
675
+ msgstr ""
676
+
677
+ #: lib/main.php:438 lib/wassupadmin.php:1883
678
+ msgid "Hostname"
679
+ msgstr ""
680
+
681
+ #: lib/main.php:439
682
+ msgid "Url Requested"
683
+ msgstr ""
684
+
685
+ #: lib/main.php:446
686
+ msgid "Post/page ID"
687
+ msgstr ""
688
+
689
+ #: lib/main.php:450
690
+ msgid "none or deleted post"
691
+ msgstr ""
692
+
693
+ #: lib/main.php:452 widgets/widgets.php:97 widgets/widgets.php:228
694
+ #: widgets/widgets.php:402 lib/compat-lib/compat_widget.php:103
695
+ msgid "Title"
696
+ msgstr ""
697
+
698
+ #: lib/main.php:454 lib/wassupadmin.php:1875 lib/wassupadmin.php:2225
699
+ #: lib/compat-lib/compat_wassup.class.php:2926
700
+ msgid "Referrer"
701
+ msgstr ""
702
+
703
+ #: lib/main.php:457
704
+ msgid "Search Engine"
705
+ msgstr ""
706
+
707
+ #: lib/main.php:458 lib/wassupadmin.php:195 lib/wassupadmin.php:198
708
+ #: lib/wassupadmin.php:1677 lib/wassupadmin.php:1709
709
+ msgid "Search"
710
+ msgstr ""
711
+
712
+ #: lib/main.php:459
713
+ msgid "Page"
714
+ msgstr ""
715
+
716
+ #: lib/main.php:461 lib/wassupadmin.php:1952
717
+ msgid "User Agent"
718
+ msgstr ""
719
+
720
+ #: lib/main.php:464
721
+ msgid "Browser"
722
+ msgstr ""
723
+
724
+ #: lib/main.php:466 lib/wassupadmin.php:1973
725
+ msgid "OS"
726
+ msgstr ""
727
+
728
+ #: lib/main.php:467
729
+ msgid "Locale/Language"
730
+ msgstr ""
731
+
732
+ #: lib/main.php:468
733
+ msgid "Screen Resolution"
734
+ msgstr ""
735
+
736
+ #: lib/main.php:471
737
+ msgid "Username"
738
+ msgstr ""
739
+
740
+ #: lib/main.php:475
741
+ msgid "Comment Author"
742
+ msgstr ""
743
+
744
+ #: lib/main.php:489 lib/wassup.class.php:482 lib/wassup.class.php:537
745
+ #: lib/wassupadmin.php:1937 lib/compat-lib/compat_wassup.class.php:484
746
+ #: lib/compat-lib/compat_wassup.class.php:539
747
+ msgid "Spam"
748
+ msgstr ""
749
+
750
+ #: lib/main.php:490
751
+ msgid "comment spam"
752
+ msgstr ""
753
+
754
+ #: lib/main.php:491
755
+ msgid "referrer spam"
756
+ msgstr ""
757
+
758
+ #: lib/main.php:492
759
+ msgid "hack/malware attempt"
760
+ msgstr ""
761
+
762
+ #: lib/main.php:493
763
+ msgid "not spam"
764
+ msgstr ""
765
+
766
+ #: lib/main.php:497
767
+ msgid "End timestamp"
768
+ msgstr ""
769
+
770
+ #: lib/main.php:498
771
+ msgid "Timestamp"
772
+ msgstr ""
773
+
774
+ #: lib/main.php:506 lib/main.php:584 lib/main.php:733 lib/main.php:735
775
+ #: lib/main.php:744 lib/main.php:746 lib/settings.php:548 lib/settings.php:552
776
+ #: lib/settings.php:630 lib/settings.php:648 lib/settings.php:659
777
+ #: lib/settings.php:716 lib/settings.php:726 lib/settings.php:742
778
+ #: lib/settings.php:745 lib/settings.php:857 lib/settings.php:866
779
+ #: lib/settings.php:874 lib/settings.php:891 lib/settings.php:926
780
+ #: lib/settings.php:936 lib/settings.php:944 lib/settings.php:954
781
+ #: lib/settings.php:960 lib/settings.php:986 lib/settings.php:991
782
+ #: lib/wassupadmin.php:1161 lib/wassupadmin.php:1765
783
+ msgid "unknown"
784
+ msgstr ""
785
+
786
+ #: lib/main.php:510
787
+ #, php-format
788
+ msgid "%d URLs visited in session"
789
+ msgstr ""
790
+
791
+ #: lib/main.php:571 lib/wassupadmin.php:1170
792
+ msgid "Direct hit"
793
+ msgstr ""
794
+
795
+ #: lib/main.php:593
796
+ msgid "Spam/Malware"
797
+ msgstr ""
798
+
799
+ #: lib/main.php:597
800
+ msgid "Feedreader"
801
+ msgstr ""
802
+
803
+ #: lib/main.php:606 lib/main.php:655 lib/main.php:656
804
+ msgid "Logged user"
805
+ msgstr ""
806
+
807
+ #: lib/main.php:635 lib/main.php:636
808
+ msgid "Country"
809
+ msgstr ""
810
+
811
+ #: lib/main.php:646 lib/settings.php:570 lib/wassupadmin.php:1966
812
+ msgid "Language"
813
+ msgstr ""
814
+
815
+ #: lib/main.php:659
816
+ msgid "Country:"
817
+ msgstr ""
818
+
819
+ #: lib/main.php:659
820
+ msgid "URL Request:"
821
+ msgstr ""
822
+
823
+ #: lib/main.php:702
824
+ msgid "No visitor activity"
825
+ msgstr ""
826
+
827
+ #: lib/main.php:729 lib/main.php:733 lib/main.php:735 lib/main.php:740
828
+ #: lib/main.php:744 lib/main.php:746
829
+ #, php-format
830
+ msgid "City: %s"
831
+ msgstr ""
832
+
833
+ #: lib/main.php:749
834
+ msgid "Country: unknown, City: unknown"
835
+ msgstr ""
836
+
837
+ #: lib/main.php:1021
838
+ msgid "Print"
839
+ msgstr ""
840
+
841
+ #: lib/main.php:1023
842
+ #, php-format
843
+ msgid "Top Stats for Period: %s"
844
+ msgstr ""
845
+
846
+ #: lib/main.php:1058
847
+ msgid "TOP QUERY"
848
+ msgstr ""
849
+
850
+ #: lib/main.php:1066 lib/wassupadmin.php:1904
851
+ msgid "not provided"
852
+ msgstr ""
853
+
854
+ #: lib/main.php:1094
855
+ msgid "TOP REFERRER"
856
+ msgstr ""
857
+
858
+ #: lib/main.php:1133
859
+ msgid "TOP REQUEST"
860
+ msgstr ""
861
+
862
+ #: lib/main.php:1172
863
+ msgid "TOP BROWSER"
864
+ msgstr ""
865
+
866
+ #: lib/main.php:1205
867
+ msgid "TOP OS"
868
+ msgstr ""
869
+
870
+ #: lib/main.php:1237
871
+ msgid "TOP LOCALE"
872
+ msgstr ""
873
+
874
+ #: lib/main.php:1271
875
+ msgid "TOP VISITOR"
876
  msgstr ""
877
 
878
+ #: lib/main.php:1309
879
  msgid "TOP ARTICLE"
880
  msgstr ""
881
 
882
+ #: lib/main.php:1332
883
  msgid "This report excludes spam and spider records"
884
  msgstr ""
885
 
886
+ #: lib/main.php:1334
887
  msgid "This report excludes spider records"
888
  msgstr ""
889
 
890
+ #: lib/main.php:1336
891
  msgid "This report excludes spam records"
892
  msgstr ""
893
 
894
+ #: lib/main.php:1804
895
  msgid "Last 1 Hour"
896
  msgstr ""
897
 
898
+ #: lib/main.php:1813
899
  msgid "Last 6 Hours"
900
  msgstr ""
901
 
902
+ #: lib/main.php:1822
903
  msgid "Last 12 Hours"
904
  msgstr ""
905
 
906
+ #: lib/main.php:1831
907
  msgid "Last 7 Days"
908
  msgstr ""
909
 
910
+ #: lib/main.php:1845
911
  msgid "Last 2 Weeks"
912
  msgstr ""
913
 
914
+ #: lib/main.php:1864
915
  msgid "Last Month"
916
  msgstr ""
917
 
918
+ #: lib/main.php:1878
919
  msgid "Last 3 Months"
920
  msgstr ""
921
 
922
+ #: lib/main.php:1892
923
  msgid "Last 6 Months"
924
  msgstr ""
925
 
926
+ #: lib/main.php:1900
927
  msgid "Last Year"
928
  msgstr ""
929
 
930
+ #: lib/main.php:1908 lib/main.php:1924
931
  msgid "All Time"
932
  msgstr ""
933
 
934
+ #: lib/main.php:1915
935
  msgid "Last 24 Hours"
936
  msgstr ""
937
 
938
+ #: lib/settings.php:83
939
  msgid ""
940
  "ATTENTION! Your WassUp table have reached the maximum value you set, I "
941
  "disabled the alert, you can re-enable it here."
942
  msgstr ""
943
 
944
+ #: lib/settings.php:104 lib/settings.php:439
945
  msgid "IMPORTANT"
946
  msgstr ""
947
 
948
+ #: lib/settings.php:104
949
  msgid "table empty or does not exist!"
950
  msgstr ""
951
 
952
+ #: lib/settings.php:106
953
  msgid "Visitors Online or Top Stats"
954
  msgstr ""
955
 
956
+ #: lib/settings.php:107
957
  msgid "Widgets menu"
958
  msgstr ""
959
 
960
+ #: lib/settings.php:109
961
  #, php-format
962
  msgid ""
963
  "You can add a sidebar Widget with some useful statistics information by "
964
  "activating the %s widget from the %s."
965
  msgstr ""
966
 
967
+ #: lib/settings.php:110
968
  msgid "Select the options you want for WassUp plugin"
969
  msgstr ""
970
 
971
+ #: lib/settings.php:149
 
 
 
 
 
 
 
 
 
 
 
972
  msgid "Manage Files & Data"
973
  msgstr ""
974
 
975
+ #: lib/settings.php:156 lib/wassupadmin.php:641 lib/wassupadmin.php:996
 
 
 
 
976
  msgid "Donate"
977
  msgstr ""
978
 
979
+ #: lib/settings.php:163
980
  msgid "Networkwide Settings"
981
  msgstr ""
982
 
983
+ #: lib/settings.php:164
984
  msgid "Multisite settings that applies to all subsites in the network."
985
  msgstr ""
986
 
987
+ #: lib/settings.php:166
988
  msgid "Network Statistics Recording"
989
  msgstr ""
990
 
991
+ #: lib/settings.php:167
992
  msgid ""
993
  "Enables Wassup visitor tracking on all subsites in network. Do NOT disable "
994
  "unless upgrading plugin."
995
  msgstr ""
996
 
997
+ #: lib/settings.php:168
998
  msgid "Enable Statistics Recording for network."
999
  msgstr ""
1000
 
1001
+ #: lib/settings.php:169
1002
  msgid ""
1003
  "Can be overridden on individual subsites to disable statistics recording."
1004
  msgstr ""
1005
 
1006
+ #: lib/settings.php:171
1007
  msgid "Network Subsites Options"
1008
  msgstr ""
1009
 
1010
+ #: lib/settings.php:172
1011
  msgid "Show Wassup's Main menu and options panel to subsite administrators."
1012
  msgstr ""
1013
 
1014
+ #: lib/settings.php:173
1015
  msgid ""
1016
  "Uncheck to hide Wassup Main menu and options panel from all users except "
1017
  "Network administrator (super-admin). Dashboard submenu \"Wassup-stats\" and "
1018
  "dashboard widget display are unaffected."
1019
  msgstr ""
1020
 
1021
+ #: lib/settings.php:176
1022
  msgid "Site Settings"
1023
  msgstr ""
1024
 
1025
+ #: lib/settings.php:177
1026
  msgid "Main site settings / Default settings for new network subsites."
1027
  msgstr ""
1028
 
1029
+ #: lib/settings.php:180
1030
  msgid "Statistics Recording"
1031
  msgstr ""
1032
 
1033
+ #: lib/settings.php:181
1034
  msgid ""
1035
  "By default, Wassup collects and stores incoming visitor hits and checks each "
1036
  "new record for spam and malware activity."
1037
  msgstr ""
1038
 
1039
+ #: lib/settings.php:182
1040
  msgid "Enable statistics recording"
1041
  msgstr ""
1042
 
1043
+ #: lib/settings.php:184
1044
  msgid "Do NOT disable unless upgrading or troubleshooting plugin problems."
1045
  msgstr ""
1046
 
1047
+ #: lib/settings.php:185
1048
  msgid "Do NOT disable unless troubleshooting plugin problems."
1049
  msgstr ""
1050
 
1051
+ #: lib/settings.php:188
1052
  msgid "Enable spam and malware detection on new records"
1053
  msgstr ""
1054
 
1055
+ #: lib/settings.php:189
1056
  msgid ""
1057
  "For identification of incoming spam/malware hits only. Does NOT stop attacks "
1058
  "nor protect your site."
1059
  msgstr ""
1060
 
1061
+ #: lib/settings.php:193
1062
  msgid "User Permissions"
1063
  msgstr ""
1064
 
1065
+ #: lib/settings.php:194
1066
  msgid ""
1067
+ "Gives selected users view-only access to Wassup's stats dashboard menu, some "
1068
+ "submenu panels, and the dashboard widget."
1069
  msgstr ""
1070
 
1071
+ #: lib/settings.php:195
1072
  msgid ""
1073
+ "Only administrators can access Wassup's main menu and all it's submenu "
1074
+ "panels including the options panel to delete data and edit plugin settings."
1075
  msgstr ""
1076
 
1077
+ #: lib/settings.php:196
1078
  msgid "Set minimum user level that can view WassUp stats"
1079
  msgstr ""
1080
 
1081
+ #: lib/settings.php:200
1082
  msgid "default administrator"
1083
  msgstr ""
1084
 
1085
+ #: lib/settings.php:205
1086
  msgid "Screen resolution"
1087
  msgstr ""
1088
 
1089
+ #: lib/settings.php:206
1090
  msgid ""
1091
  "Adjusts chart size and resets the max-width/truncation point of long texts."
1092
  msgstr ""
1093
 
1094
+ #: lib/settings.php:207
1095
  msgid "Your default screen resolution (in pixels)"
1096
  msgstr ""
1097
 
1098
+ #: lib/settings.php:212
1099
  msgid "Dashboard Widget"
1100
  msgstr ""
1101
 
1102
+ #: lib/settings.php:213
1103
  msgid "Enable widget/small chart in admin dashboard"
1104
  msgstr ""
1105
 
1106
+ #: lib/settings.php:215
1107
  msgid "Spy Visitors Settings"
1108
  msgstr ""
1109
 
1110
+ #: lib/settings.php:230
1111
  msgid "Display a GEO IP Map in the spy visitors view"
1112
  msgstr ""
1113
 
1114
+ #: lib/settings.php:231
1115
  msgid "key"
1116
  msgstr ""
1117
 
1118
+ #: lib/settings.php:231
1119
+ msgid "signup for your free key"
1120
  msgstr ""
1121
 
1122
+ #: lib/settings.php:232
1123
+ msgid "An API key is required to view the map."
 
 
1124
  msgstr ""
1125
 
1126
+ #: lib/settings.php:238
1127
  msgid "Visitor Detail Settings"
1128
  msgstr ""
1129
 
1130
+ #: lib/settings.php:239
1131
  msgid "Show visitor details from the last"
1132
  msgstr ""
1133
 
1134
+ #: lib/settings.php:244
1135
  msgid "Time format 12/24 Hour"
1136
  msgstr ""
1137
 
1138
+ #: lib/settings.php:248
1139
  msgid "Filter visitor details for"
1140
  msgstr ""
1141
 
1142
+ #: lib/settings.php:253
1143
  msgid "Display line chart in detail view"
1144
  msgstr ""
1145
 
1146
+ #: lib/settings.php:254
1147
  msgid "Line chart type - how many axes?"
1148
  msgstr ""
1149
 
1150
+ #: lib/settings.php:255
1151
  msgid "Set how many minutes wait for automatic page refresh"
1152
  msgstr ""
1153
 
1154
+ #: lib/settings.php:256 lib/settings.php:979 widgets/widgets.php:458
1155
  msgid "minutes"
1156
  msgstr ""
1157
 
1158
+ #: lib/settings.php:257
1159
  msgid "default 3, 0=no refresh"
1160
  msgstr ""
1161
 
1162
+ #: lib/settings.php:259
1163
  msgid "Number of items per page"
1164
  msgstr ""
1165
 
1166
+ #: lib/settings.php:264
1167
  msgid "Top Stats Lists"
1168
  msgstr ""
1169
 
1170
+ #: lib/settings.php:265
1171
  msgid "Customize Top stats by selected criteria below."
1172
  msgstr ""
1173
 
1174
+ #: lib/settings.php:265
1175
  msgid ""
1176
  "Stats are in descending order from highest count and known spam and malware "
1177
  "attempts are excluded from counts."
1178
  msgstr ""
1179
 
1180
+ #: lib/settings.php:272
1181
  msgid "List limit of top items"
1182
  msgstr ""
1183
 
1184
+ #: lib/settings.php:274
1185
  msgid "default 10"
1186
  msgstr ""
1187
 
1188
+ #: lib/settings.php:276
1189
  msgid "Choose one or more items to list in Top Stats"
1190
  msgstr ""
1191
 
1192
+ #: lib/settings.php:276
1193
  msgid "over 5 selections may cause horizontal scrolling"
1194
  msgstr ""
1195
 
1196
+ #: lib/settings.php:279 widgets/widget_functions.php:420
1197
  msgid "Top Searches"
1198
  msgstr ""
1199
 
1200
+ #: lib/settings.php:280 widgets/widget_functions.php:428
1201
  msgid "Top Referrers"
1202
  msgstr ""
1203
 
1204
+ #: lib/settings.php:281 widgets/widget_functions.php:412
1205
  msgid "Top Articles"
1206
  msgstr ""
1207
 
1208
+ #: lib/settings.php:284 widgets/widget_functions.php:436
1209
  msgid "Top Requests"
1210
  msgstr ""
1211
 
1212
+ #: lib/settings.php:285 widgets/widget_functions.php:444
1213
  msgid "Top Browsers"
1214
  msgstr ""
1215
 
1216
+ #: lib/settings.php:286 widgets/widget_functions.php:452
1217
  msgid "Top OS"
1218
  msgstr ""
1219
 
1220
+ #: lib/settings.php:289 widgets/widget_functions.php:460
1221
  msgid "Top Locales"
1222
  msgstr ""
1223
 
1224
+ #: lib/settings.php:290
1225
  msgid "Top Visitors"
1226
  msgstr ""
1227
 
1228
+ #: lib/settings.php:295
1229
  msgid "Exclude the following website domains from Top Referrers"
1230
  msgstr ""
1231
 
1232
+ #: lib/settings.php:295 lib/settings.php:303
1233
  msgid "applies to top stats view and widgets"
1234
  msgstr ""
1235
 
1236
+ #: lib/settings.php:298
1237
  msgid "comma separated value"
1238
  msgstr ""
1239
 
1240
+ #: lib/settings.php:298
1241
  msgid "List whole domains only. Wildcards and partial domains will be ignored."
1242
  msgstr ""
1243
 
1244
+ #: lib/settings.php:299
1245
  msgid "Don't list your website domain defined in WordPress"
1246
  msgstr ""
1247
 
1248
+ #: lib/settings.php:303
1249
  msgid "Exclude site front page from Top Articles"
1250
  msgstr ""
1251
 
1252
+ #: lib/settings.php:310
1253
  msgid "Exclude all spider records from Top Stats"
1254
  msgstr ""
1255
 
1256
+ #: lib/settings.php:313 lib/settings.php:373 lib/settings.php:537
1257
+ #: lib/settings.php:1036 lib/wassupadmin.php:1639
1258
  msgid "Save Settings"
1259
  msgstr ""
1260
 
1261
+ #: lib/settings.php:313 lib/settings.php:373 lib/settings.php:537
1262
+ #: lib/settings.php:1036
1263
  msgid "Reset"
1264
  msgstr ""
1265
 
1266
+ #: lib/settings.php:313 lib/settings.php:373 lib/settings.php:537
1267
+ #: lib/settings.php:1036
1268
  msgid "Reset to Default"
1269
  msgstr ""
1270
 
1271
+ #: lib/settings.php:314 lib/settings.php:374 lib/settings.php:1021
1272
+ #: lib/settings.php:1037 lib/settings.php:1059 lib/wassupadmin.php:1087
1273
+ #: widgets/widgets.php:576 widgets/widget_functions.php:409
 
1274
  msgid "Top"
1275
  msgstr ""
1276
 
1277
+ #: lib/settings.php:318
1278
  msgid "Recording Filters and Exclusions"
1279
  msgstr ""
1280
 
1281
+ #: lib/settings.php:319
1282
  msgid ""
1283
  "Use the filter checkboxes and exclusion input fields below to customize "
1284
  "Wassup's statistics recording so that only the data that you need for your "
1285
  "site analyses are stored."
1286
  msgstr ""
1287
 
1288
+ #: lib/settings.php:321
1289
  msgid "Visitor Type Filters:"
1290
  msgstr ""
1291
 
1292
+ #: lib/settings.php:322
1293
  msgid "Checkbox to enable recording by type of \"visitor\""
1294
  msgstr ""
1295
 
1296
+ #: lib/settings.php:324
1297
  msgid "Record regular visitors"
1298
  msgstr ""
1299
 
1300
+ #: lib/settings.php:325
1301
  msgid "Record logged in users"
1302
  msgstr ""
1303
 
1304
+ #: lib/settings.php:326
1305
  msgid "Record logged in administrators"
1306
  msgstr ""
1307
 
1308
+ #: lib/settings.php:327
1309
  msgid "Record spiders and bots"
1310
  msgstr ""
1311
 
1312
+ #: lib/settings.php:330
1313
  msgid "Spam and Malware Filters:"
1314
  msgstr ""
1315
 
1316
+ #: lib/settings.php:331
1317
  msgid "Checkbox to enable recording of each type of \"spam\""
1318
  msgstr ""
1319
 
1320
+ #: lib/settings.php:333 lib/wassupadmin.php:1635
1321
  msgid "Record Akismet comment spam attempts"
1322
  msgstr ""
1323
 
1324
+ #: lib/settings.php:333
1325
  msgid "checks IP for previous spam comments"
1326
  msgstr ""
1327
 
1328
+ #: lib/settings.php:334 lib/wassupadmin.php:1636
1329
  msgid "Record referrer spam attempts"
1330
  msgstr ""
1331
 
1332
+ #: lib/settings.php:335 lib/wassupadmin.php:1638
1333
  msgid "Record admin break-in/hacker attempts"
1334
  msgstr ""
1335
 
1336
+ #: lib/settings.php:336
1337
  msgid "Record attack/exploit attempts"
1338
  msgstr ""
1339
 
1340
+ #: lib/settings.php:336
1341
  msgid "or"
1342
  msgstr ""
1343
 
1344
+ #: lib/settings.php:339
1345
+ msgid "Referrer spam whitelist"
1346
+ msgstr ""
1347
+
1348
+ #: lib/settings.php:340
1349
+ msgid ""
1350
+ "Enter referrer domains that were incorrectly labeled as \"Referrer Spam\" in "
1351
+ "\"Visitor Detals\":"
1352
  msgstr ""
1353
 
1354
  #: lib/settings.php:342
1355
  msgid ""
1356
+ "comma separated value. Enter whole domains only. Wildcards will be ignored."
1357
+ msgstr ""
1358
+
1359
+ #: lib/settings.php:345
1360
+ msgid "Recording Exceptions"
1361
+ msgstr ""
1362
+
1363
+ #: lib/settings.php:346
1364
+ msgid ""
1365
  "You can exclude a single visitor (by IP, hostname or username) or you can "
1366
  "exclude a specific URL request from being stored in WassUp records."
1367
  msgstr ""
1368
 
1369
+ #: lib/settings.php:347
1370
  msgid ""
1371
  "Note that recording exceptions lower overall statistics counts and excessive "
1372
  "exclusions can affect page load speed on slow host servers."
1373
  msgstr ""
1374
 
1375
+ #: lib/settings.php:349
1376
  msgid "Exclude by IP"
1377
  msgstr ""
1378
 
1379
+ #: lib/settings.php:350
1380
  msgid "Enter source IPs to omit from recording"
1381
  msgstr ""
1382
 
1383
+ #: lib/settings.php:353
1384
  msgid "comma separated value (ex: 127.0.0.1, 10.0.0.1, etc...)."
1385
  msgstr ""
1386
 
1387
+ #: lib/settings.php:353
1388
  msgid ""
1389
  "A single wildcard (*) can be placed after the last '.' in the IP ('::' in "
1390
  "IPv6) for range exclusions (ex: 10.10.100.*, 192.168.*)."
1391
  msgstr ""
1392
 
1393
+ #: lib/settings.php:355
1394
  msgid "Exclude by Hostname"
1395
  msgstr ""
1396
 
1397
+ #: lib/settings.php:356
1398
  msgid "Enter source hostnames to omit from recording"
1399
  msgstr ""
1400
 
1401
+ #: lib/settings.php:359
1402
  msgid "comma separated value (ex: host1.domain.com, host2.domain.net, etc...)."
1403
  msgstr ""
1404
 
1405
+ #: lib/settings.php:359
1406
  msgid ""
1407
  "A single wildcard (*) can be placed before the first '.' for domain network "
1408
  "exclusions (ex: *.spamdomain.com, *.hackers.malware.net)."
1409
  msgstr ""
1410
 
1411
+ #: lib/settings.php:361
1412
  msgid "Exclude by Username"
1413
  msgstr ""
1414
 
1415
+ #: lib/settings.php:362
1416
  msgid "Enter usernames to omit from recording"
1417
  msgstr ""
1418
 
1419
+ #: lib/settings.php:365
1420
  msgid ""
1421
  "comma separated value, enter a registered user's login name (ex: bobmarley, "
1422
  "enyabrennan, etc.)"
1423
  msgstr ""
1424
 
1425
+ #: lib/settings.php:367
1426
  msgid "Exclude by URL request"
1427
  msgstr ""
1428
 
1429
+ #: lib/settings.php:368
1430
  msgid "Enter URLs of page/post/feed to omit from recording"
1431
  msgstr ""
1432
 
1433
+ #: lib/settings.php:371
1434
  msgid ""
1435
  "comma separated value, don't enter entire url, only the last path or some "
1436
  "word to exclude (ex: /category/wordpress, 2007, etc...)"
1437
  msgstr ""
1438
 
1439
+ #: lib/settings.php:374 lib/settings.php:1021 lib/settings.php:1037
1440
+ #: lib/settings.php:1059
1441
  msgid "Prev"
1442
  msgstr ""
1443
 
1444
+ #: lib/settings.php:378
1445
  msgid "Table Management Options"
1446
  msgstr ""
1447
 
1448
+ #: lib/settings.php:385
1449
  msgid "Select actions for table growth"
1450
  msgstr ""
1451
 
1452
+ #: lib/settings.php:386
1453
  msgid ""
1454
  "WassUp table grows very fast, especially if your site is frequently visited. "
1455
  "I recommend you delete old records sometimes."
1456
  msgstr ""
1457
 
1458
+ #: lib/settings.php:387
1459
  msgid ""
1460
  "You can delete all Wassup records now (Empty Table), you can set an "
1461
  "automatic delete option to delete selected old records daily, and you can "
1462
  "manually delete selected old records once (Delete NOW)."
1463
  msgstr ""
1464
 
1465
+ #: lib/settings.php:388
1466
  msgid "If you haven't database space problems, you can leave the table as is."
1467
  msgstr ""
1468
 
1469
+ #: lib/settings.php:389
1470
  msgid "Current WassUp table usage is"
1471
  msgstr ""
1472
 
1473
+ #: lib/settings.php:392
1474
  msgid "records"
1475
  msgstr ""
1476
 
1477
+ #: lib/settings.php:395
1478
  msgid "Alert me"
1479
  msgstr ""
1480
 
1481
+ #: lib/settings.php:395
1482
  msgid "email to"
1483
  msgstr ""
1484
 
1485
+ #: lib/settings.php:395
1486
  msgid "when table reaches"
1487
  msgstr ""
1488
 
1489
+ #: lib/settings.php:396
1490
  msgid "Delete old records"
1491
  msgstr ""
1492
 
1493
+ #: lib/settings.php:398
 
1494
  msgid ""
1495
+ "Before deleting, you can backup Wassup table by clicking the \"Export SQL\" "
1496
+ "button below."
1497
  msgstr ""
1498
 
1499
+ #: lib/settings.php:399
 
 
 
 
 
 
 
 
1500
  msgid "Automatically delete"
1501
  msgstr ""
1502
 
1503
+ #: lib/settings.php:401 lib/settings.php:406
1504
  msgid "records older than"
1505
  msgstr ""
1506
 
1507
+ #: lib/settings.php:402
1508
  msgid "daily"
1509
  msgstr ""
1510
 
1511
+ #: lib/settings.php:404
1512
  msgid "Manually delete"
1513
  msgstr ""
1514
 
1515
+ #: lib/settings.php:407
1516
  msgid "once"
1517
  msgstr ""
1518
 
1519
+ #: lib/settings.php:414
1520
  msgid "Delete all records up to record ID#"
1521
  msgstr ""
1522
 
1523
+ #: lib/settings.php:415
1524
+ msgid "Last SQL export record ID#:"
1525
  msgstr ""
1526
 
1527
+ #: lib/settings.php:417
1528
  msgid "Empty table"
1529
  msgstr ""
1530
 
1531
+ #: lib/settings.php:418
1532
  msgid "export table in SQL format"
1533
  msgstr ""
1534
 
1535
+ #: lib/settings.php:421
1536
  msgid "Delete NOW"
1537
  msgstr ""
1538
 
1539
+ #: lib/settings.php:422
1540
  msgid "Action is NOT undoable!"
1541
  msgstr ""
1542
 
1543
+ #: lib/settings.php:425
1544
+ msgid "Table Export"
1545
  msgstr ""
1546
 
1547
+ #: lib/settings.php:427
1548
+ msgid "Wassup can export table records in SQL or CSV format."
 
 
 
1549
  msgstr ""
1550
 
1551
+ #: lib/settings.php:428
1552
+ msgid ""
1553
+ "An automatic file download will start after table data is retrieved "
1554
+ "successfully."
1555
  msgstr ""
1556
 
1557
+ #: lib/settings.php:429
1558
  msgid ""
1559
+ "By default, exported records excludes known spam/malware to prevent "
1560
+ "propagation of malware."
1561
  msgstr ""
1562
 
1563
+ #: lib/settings.php:431
1564
+ msgid "Include spam records in exported data"
1565
+ msgstr ""
1566
+
1567
+ #: lib/settings.php:432
1568
  msgid ""
1569
  "Security NOTICE: Enabling this could expose your computer or website to "
1570
  "malware when spam records are imported."
1571
  msgstr ""
1572
 
1573
+ #: lib/settings.php:434
1574
  msgid "Omit record ID from exported fields"
1575
  msgstr ""
1576
 
1577
+ #: lib/settings.php:435
1578
  msgid ""
1579
+ "Check this box when importing SQL data into another Wassup table that "
1580
+ "already has records (appending data)."
1581
  msgstr ""
1582
 
1583
+ #: lib/settings.php:439
1584
+ msgid "Click \"Save Settings\" to apply option changes before export."
1585
+ msgstr ""
1586
+
1587
+ #: lib/settings.php:440
1588
+ msgid "Export SQL"
1589
+ msgstr ""
1590
+
1591
+ #: lib/settings.php:441
1592
+ msgid "Export CSV"
1593
+ msgstr ""
1594
+
1595
+ #: lib/settings.php:443
1596
+ msgid "Export of large datasets may be truncated."
1597
+ msgstr ""
1598
+
1599
+ #: lib/settings.php:446
1600
+ msgid "Export"
1601
+ msgstr ""
1602
+
1603
+ #: lib/settings.php:446 lib/wassupadmin.php:306
1604
+ msgid "Retrieving data for export. Download will start soon. Please wait."
1605
+ msgstr ""
1606
+
1607
+ #: lib/settings.php:448
1608
  msgid "Table Optimization"
1609
  msgstr ""
1610
 
1611
+ #: lib/settings.php:453
1612
  msgid ""
1613
  "By default, WassUp tables are automatically optimized weekly and after each "
1614
  "bulk deletion. This helps keep WassUp running fast, but it can sometimes "
1615
  "cause slowdowns especially when there is a corrupt record in the table."
1616
  msgstr ""
1617
 
1618
+ #: lib/settings.php:462
1619
  msgid "You can cancel automatic optimization by unchecking the box below."
1620
  msgstr ""
1621
 
1622
+ #: lib/settings.php:464
1623
  msgid "Login as network admin to cancel automatic optimization below."
1624
  msgstr ""
1625
 
1626
+ #: lib/settings.php:465
1627
  msgid "Login as network admin to enable automatic optimization below."
1628
  msgstr ""
1629
 
1630
+ #: lib/settings.php:467
1631
  msgid "Your table engine does NOT support the \"optimize\" command."
1632
  msgstr ""
1633
 
1634
+ #: lib/settings.php:477
1635
  msgid "Enable automatic table optimization"
1636
  msgstr ""
1637
 
1638
+ #: lib/settings.php:485
1639
  msgid "is overdue"
1640
  msgstr ""
1641
 
1642
+ #: lib/settings.php:487
1643
  msgid "today"
1644
  msgstr ""
1645
 
1646
+ #: lib/settings.php:490
1647
  #, php-format
1648
  msgid "%d days"
1649
  msgstr ""
1650
 
1651
+ #: lib/settings.php:491
1652
  msgid "1 week"
1653
  msgstr ""
1654
 
1655
+ #: lib/settings.php:497
1656
  #, php-format
1657
  msgid "Next scheduled optimization is: %s (approximately)"
1658
  msgstr ""
1659
 
1660
+ #: lib/settings.php:499
1661
  #, php-format
1662
  msgid "Next scheduled optimization is: %s"
1663
  msgstr ""
1664
 
1665
+ #: lib/settings.php:499
1666
  msgid "never"
1667
  msgstr ""
1668
 
1669
+ #: lib/settings.php:503
1670
  msgid "Data Storage Methods"
1671
  msgstr ""
1672
 
1673
+ #: lib/settings.php:506
1674
  msgid "Delayed Insert"
1675
  msgstr ""
1676
 
1677
+ #: lib/settings.php:508
1678
  msgid ""
1679
  "When possible, WassUp uses the \"Delayed insert\" method of saving records "
1680
  "in MySQL to store new visitor records. This method helps keep Wassup running "
1683
  "disable it on shared servers."
1684
  msgstr ""
1685
 
1686
+ #: lib/settings.php:509
1687
  msgid "You can turn off \"delayed insert\" by unchecking the box below."
1688
  msgstr ""
1689
 
1690
+ #: lib/settings.php:513
1691
  msgid "This method is unavailable for your storage engine type."
1692
  msgstr ""
1693
 
1694
+ #: lib/settings.php:525
1695
  msgid "This method is disabled on your host server."
1696
  msgstr ""
1697
 
1698
+ #: lib/settings.php:534
1699
  msgid "Store new visitor records with \"delayed insert\""
1700
  msgstr ""
1701
 
1702
+ #: lib/settings.php:541
1703
  msgid "Server Settings and Memory Resources"
1704
  msgstr ""
1705
 
1706
+ #: lib/settings.php:542
1707
  #, php-format
1708
  msgid ""
1709
  "For information only. Some values may be adjustable in startup files: %s"
1710
  msgstr ""
1711
 
1712
+ #: lib/settings.php:542
1713
  msgid "\"wp_config.php\", \"php.ini\" and \"my.ini\""
1714
  msgstr ""
1715
 
1716
+ #: lib/settings.php:543 lib/settings.php:554 lib/settings.php:662
1717
+ #: lib/settings.php:857
1718
  msgid "Version"
1719
  msgstr ""
1720
 
1721
+ #: lib/settings.php:545
1722
  msgid "Table name"
1723
  msgstr ""
1724
 
1725
+ #: lib/settings.php:546
1726
  msgid "Table Charset/collation"
1727
  msgstr ""
1728
 
1729
+ #: lib/settings.php:550
1730
  msgid "Table engine"
1731
  msgstr ""
1732
 
1733
+ #: lib/settings.php:552
1734
  msgid "Upgrade date"
1735
  msgstr ""
1736
 
1737
+ #: lib/settings.php:560
1738
  msgid "network"
1739
  msgstr ""
1740
 
1741
+ #: lib/settings.php:563 lib/settings.php:576 lib/settings.php:672
1742
+ #: lib/settings.php:683 lib/settings.php:687 lib/settings.php:967
1743
  msgid "on"
1744
  msgstr ""
1745
 
1746
+ #: lib/settings.php:565 lib/settings.php:674 lib/settings.php:681
1747
+ #: lib/settings.php:688 lib/settings.php:965
1748
  msgid "off"
1749
  msgstr ""
1750
 
1751
+ #: lib/settings.php:569
1752
  msgid "Character set"
1753
  msgstr ""
1754
 
1755
+ #: lib/settings.php:573 lib/settings.php:750
1756
  msgid "not set"
1757
  msgstr ""
1758
 
1759
+ #: lib/settings.php:581 lib/settings.php:702
1760
  msgid "Memory Allocation"
1761
  msgstr ""
1762
 
1763
+ #: lib/settings.php:606
1764
  msgid "no limit/unknown"
1765
  msgstr ""
1766
 
1767
+ #: lib/settings.php:610 lib/settings.php:766 lib/settings.php:993
1768
  msgid "Timezone"
1769
  msgstr ""
1770
 
1771
+ #: lib/settings.php:611 lib/settings.php:769
1772
  msgid "Time Offset"
1773
  msgstr ""
1774
 
1775
+ #: lib/settings.php:623 lib/settings.php:772 lib/settings.php:774
1776
+ msgid "hours"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1777
  msgstr ""
1778
 
1779
+ #: lib/settings.php:624
1780
+ msgid "Host Timezone"
 
1781
  msgstr ""
1782
 
1783
+ #: lib/settings.php:632
1784
+ msgid "Host Server"
 
 
1785
  msgstr ""
1786
 
1787
+ #: lib/settings.php:650
1788
+ msgid "Browser Client"
 
 
 
 
1789
  msgstr ""
1790
 
1791
+ #: lib/settings.php:668
1792
+ msgid "Safe Mode"
 
 
 
 
1793
  msgstr ""
1794
 
1795
+ #: lib/settings.php:678
1796
+ msgid "File Open Restrictions"
 
 
1797
  msgstr ""
1798
 
1799
+ #: lib/settings.php:685
1800
+ msgid "URL File Open"
 
 
 
1801
  msgstr ""
1802
 
1803
+ #: lib/settings.php:690
1804
+ msgid "Disabled functions"
 
1805
  msgstr ""
1806
 
1807
+ #: lib/settings.php:697
1808
+ msgid "none"
 
 
1809
  msgstr ""
1810
 
1811
+ #: lib/settings.php:699
1812
+ msgid "not applicable/safe mode set"
1813
  msgstr ""
1814
 
1815
+ #: lib/settings.php:713 lib/settings.php:888
1816
+ msgid "unlimited/up to server maximum"
1817
  msgstr ""
1818
 
1819
+ #: lib/settings.php:721
1820
+ msgid "Memory Usage"
 
 
 
 
1821
  msgstr ""
1822
 
1823
+ #: lib/settings.php:728
1824
+ msgid "Script Timeout Limit"
 
 
1825
  msgstr ""
1826
 
1827
+ #: lib/settings.php:733 lib/settings.php:734 lib/settings.php:735
1828
+ #: lib/settings.php:737 lib/settings.php:958 lib/settings.php:981
1829
+ msgid "seconds"
 
 
1830
  msgstr ""
1831
 
1832
+ #: lib/settings.php:740
1833
+ msgid "unlimited"
 
 
 
 
1834
  msgstr ""
1835
 
1836
+ #: lib/settings.php:748
1837
+ msgid "Browser Capabilities File"
 
 
1838
  msgstr ""
1839
 
1840
+ #: lib/settings.php:754
1841
+ msgid "not installed"
 
 
 
 
1842
  msgstr ""
1843
 
1844
+ #: lib/settings.php:755
1845
+ msgid "installed"
1846
  msgstr ""
1847
 
1848
+ #: lib/settings.php:777
1849
+ msgid "as modified in Wordpress"
 
1850
  msgstr ""
1851
 
1852
+ #: lib/settings.php:859
1853
+ msgid "Storage Engine"
1854
  msgstr ""
1855
 
1856
+ #: lib/settings.php:868
1857
+ msgid "Charset/collation"
 
 
 
1858
  msgstr ""
1859
 
1860
+ #: lib/settings.php:877
1861
+ msgid "Max User Connections"
 
 
1862
  msgstr ""
1863
 
1864
+ #: lib/settings.php:883
1865
+ msgid "possibly too small"
 
 
 
1866
  msgstr ""
1867
 
1868
+ #: lib/settings.php:893
1869
+ msgid "Allocation"
 
 
 
1870
  msgstr ""
1871
 
1872
+ #: lib/settings.php:899
1873
+ msgid "possibly too big, reduces available RAM."
 
 
 
1874
  msgstr ""
1875
 
1876
+ #: lib/settings.php:906
1877
+ msgid "on demand"
 
 
1878
  msgstr ""
1879
 
1880
+ #: lib/settings.php:908
1881
+ msgid "Cached Query Limit"
 
 
 
 
 
1882
  msgstr ""
1883
 
1884
+ #: lib/settings.php:911 lib/settings.php:914 lib/settings.php:924
1885
+ #: lib/settings.php:934 lib/settings.php:942 lib/settings.php:951
1886
+ #: lib/settings.php:972 lib/settings.php:990
1887
+ msgid "disabled"
1888
  msgstr ""
1889
 
1890
+ #: lib/settings.php:956
1891
+ msgid "Wait Timeout"
 
 
 
 
 
1892
  msgstr ""
1893
 
1894
+ #: lib/settings.php:975
1895
+ msgid "rows"
1896
  msgstr ""
1897
 
1898
+ #: lib/settings.php:989
1899
+ msgid "not available"
 
 
 
 
 
 
1900
  msgstr ""
1901
 
1902
+ #: lib/settings.php:1016
1903
+ msgid "may be different from PHP offset"
1904
  msgstr ""
1905
 
1906
+ #: lib/settings.php:1026
1907
+ msgid "Want to uninstall WassUp?"
 
 
 
1908
  msgstr ""
1909
 
1910
+ #: lib/settings.php:1027
1911
  msgid ""
1912
+ "No problem. Before you deactivate this plugin, check the box below to "
1913
+ "cleanup any data that was collected by WassUp that could be left behind."
 
 
 
 
 
1914
  msgstr ""
1915
 
1916
+ #: lib/settings.php:1028
1917
+ msgid "Permanently remove WassUp data and settings."
 
 
 
 
 
1918
  msgstr ""
1919
 
1920
+ #: lib/settings.php:1030
1921
+ msgid "WARNING"
1922
+ msgstr ""
1923
+
1924
+ #: lib/settings.php:1030
1925
  msgid ""
1926
+ "All WassUp data and settings will be DELETED upon deactivation of this "
1927
+ "plugin."
 
 
 
 
 
1928
  msgstr ""
1929
 
1930
+ #: lib/settings.php:1032
1931
  #, php-format
1932
+ msgid ""
1933
+ "This action cannot be undone. Before uninstalling WassUp, you should backup "
1934
+ "your Wordpress database first. WassUp data is stored in the table %s."
1935
  msgstr ""
1936
 
1937
+ #: lib/settings.php:1034
1938
+ #, php-format
1939
+ msgid "To help improve this plugin, we would appreciate your feedback at %s."
1940
  msgstr ""
1941
 
1942
+ #: lib/settings.php:1042
1943
  msgid "How you can donate"
1944
  msgstr ""
1945
 
1946
+ #: lib/settings.php:1043
1947
  msgid ""
1948
  "If you like this plugin, please consider making a donation to help keep it's "
1949
  "development active."
1950
  msgstr ""
1951
 
1952
+ #: lib/settings.php:1045
1953
  #, php-format
1954
  msgid "Donate by %s"
1955
  msgstr ""
1956
 
1957
+ #: lib/settings.php:1046
1958
  #, php-format
1959
  msgid "Donate %s"
1960
  msgstr ""
1961
 
1962
+ #: lib/settings.php:1048
1963
  msgid "Send your bitcoin donation to this address"
1964
  msgstr ""
1965
 
2009
  msgid "IMPORTANT: Wassup Widget has changed and must be re-installed."
2010
  msgstr ""
2011
 
2012
+ #: lib/upgrade.php:335
2013
  msgid "Welcome to WassUP"
2014
  msgstr ""
2015
 
2016
+ #: lib/upgrade.php:355 lib/upgrade.php:398
2017
  #, php-format
2018
  msgid "An error occurred during the install of table %s."
2019
  msgstr ""
2020
 
2021
+ #: lib/wassup.class.php:448 lib/compat-lib/compat_wassup.class.php:450
2022
  msgid "Administrator"
2023
  msgstr ""
2024
 
2025
+ #: lib/wassup.class.php:449 lib/compat-lib/compat_wassup.class.php:451
2026
  msgid "Editor"
2027
  msgstr ""
2028
 
2029
+ #: lib/wassup.class.php:450 lib/compat-lib/compat_wassup.class.php:452
2030
  msgid "Author"
2031
  msgstr ""
2032
 
2033
+ #: lib/wassup.class.php:451 lib/compat-lib/compat_wassup.class.php:453
2034
  msgid "Contributor"
2035
  msgstr ""
2036
 
2037
+ #: lib/wassup.class.php:452 lib/compat-lib/compat_wassup.class.php:454
2038
  msgid "Subscriber"
2039
  msgstr ""
2040
 
2041
+ #: lib/wassup.class.php:458 lib/compat-lib/compat_wassup.class.php:460
2042
  msgid "One - 2 lines chart 1 axis"
2043
  msgstr ""
2044
 
2045
+ #: lib/wassup.class.php:459 lib/compat-lib/compat_wassup.class.php:461
2046
  msgid "Two - 2 lines chart 2 axes"
2047
  msgstr ""
2048
 
2049
+ #: lib/wassup.class.php:479 lib/compat-lib/compat_wassup.class.php:481
2050
  msgid "Everything"
2051
  msgstr ""
2052
 
2053
+ #: lib/wassup.class.php:481 lib/compat-lib/compat_wassup.class.php:483
2054
  msgid "No spider"
2055
  msgstr ""
2056
 
2057
+ #: lib/wassup.class.php:483 lib/compat-lib/compat_wassup.class.php:485
2058
  msgid "No Spam"
2059
  msgstr ""
2060
 
2061
+ #: lib/wassup.class.php:484 lib/compat-lib/compat_wassup.class.php:486
2062
  msgid "No Spam, No Spider"
2063
  msgstr ""
2064
 
2065
+ #: lib/wassup.class.php:485 lib/compat-lib/compat_wassup.class.php:487
2066
  msgid "Users logged in"
2067
  msgstr ""
2068
 
2069
+ #: lib/wassup.class.php:486 lib/wassupadmin.php:1146 lib/wassupadmin.php:2241
2070
+ #: widgets/widgets.php:235 widgets/widget_functions.php:221
2071
+ #: lib/compat-lib/compat_wassup.class.php:488
2072
+ #: lib/compat-lib/compat_wassup.class.php:2942
2073
  msgid "Comment authors"
2074
  msgstr ""
2075
 
2076
+ #: lib/wassup.class.php:487 lib/compat-lib/compat_wassup.class.php:489
2077
  msgid "Referrer from search engine"
2078
  msgstr ""
2079
 
2080
+ #: lib/wassup.class.php:488 lib/compat-lib/compat_wassup.class.php:490
2081
  msgid "Referrer from ext link"
2082
  msgstr ""
2083
 
2084
+ #: lib/wassup.class.php:521 lib/compat-lib/compat_wassup.class.php:523
2085
  msgid "Don't delete anything"
2086
  msgstr ""
2087
 
2088
+ #: lib/wassup.class.php:522 lib/wassup.class.php:558
2089
+ #: lib/compat-lib/compat_wassup.class.php:524
2090
+ #: lib/compat-lib/compat_wassup.class.php:560
2091
  msgid "24 hours"
2092
  msgstr ""
2093
 
2094
+ #: lib/wassup.class.php:523 lib/wassup.class.php:559
2095
+ #: lib/compat-lib/compat_wassup.class.php:525
2096
+ #: lib/compat-lib/compat_wassup.class.php:561
2097
  msgid "7 days"
2098
  msgstr ""
2099
 
2100
+ #: lib/wassup.class.php:524 lib/wassup.class.php:560
2101
+ #: lib/compat-lib/compat_wassup.class.php:526
2102
+ #: lib/compat-lib/compat_wassup.class.php:562
2103
  msgid "2 weeks"
2104
  msgstr ""
2105
 
2106
+ #: lib/wassup.class.php:525 lib/wassup.class.php:561
2107
+ #: lib/compat-lib/compat_wassup.class.php:527
2108
+ #: lib/compat-lib/compat_wassup.class.php:563
2109
  msgid "1 month"
2110
  msgstr ""
2111
 
2112
+ #: lib/wassup.class.php:526 lib/wassup.class.php:562
2113
+ #: lib/compat-lib/compat_wassup.class.php:528
2114
+ #: lib/compat-lib/compat_wassup.class.php:564
2115
  msgid "3 months"
2116
  msgstr ""
2117
 
2118
+ #: lib/wassup.class.php:527 lib/wassup.class.php:563
2119
+ #: lib/compat-lib/compat_wassup.class.php:529
2120
+ #: lib/compat-lib/compat_wassup.class.php:565
2121
  msgid "6 months"
2122
  msgstr ""
2123
 
2124
+ #: lib/wassup.class.php:528 lib/wassup.class.php:564
2125
+ #: lib/compat-lib/compat_wassup.class.php:530
2126
+ #: lib/compat-lib/compat_wassup.class.php:566
2127
  msgid "1 year"
2128
  msgstr ""
2129
 
2130
+ #: lib/wassup.class.php:535 lib/compat-lib/compat_wassup.class.php:537
2131
  msgid "All"
2132
  msgstr ""
2133
 
2134
+ #: lib/wassup.class.php:538 lib/compat-lib/compat_wassup.class.php:540
2135
  msgid "Spider and spam"
2136
  msgstr ""
2137
 
2138
+ #: lib/wassup.class.php:548 lib/compat-lib/compat_wassup.class.php:550
2139
  msgid "IP Address"
2140
  msgstr ""
2141
 
2142
+ #: lib/wassup.class.php:549 lib/compat-lib/compat_wassup.class.php:551
2143
  msgid "URL Request"
2144
  msgstr ""
2145
 
2146
+ #: lib/wassup.class.php:555 lib/compat-lib/compat_wassup.class.php:557
2147
  msgid "1 hour"
2148
  msgstr ""
2149
 
2150
+ #: lib/wassup.class.php:556 lib/compat-lib/compat_wassup.class.php:558
2151
  msgid "6 hours"
2152
  msgstr ""
2153
 
2154
+ #: lib/wassup.class.php:557 lib/compat-lib/compat_wassup.class.php:559
2155
  msgid "12 hours"
2156
  msgstr ""
2157
 
2158
+ #: lib/wassup.class.php:565 lib/compat-lib/compat_wassup.class.php:567
2159
  msgid "all time"
2160
  msgstr ""
2161
 
2162
+ #: lib/wassup.class.php:659 lib/compat-lib/compat_wassup.class.php:661
2163
  msgid ""
2164
  "Permission denied! Sorry, you must be an 'administrator' to change settings."
2165
  msgstr ""
2166
 
2167
+ #: lib/wassup.class.php:662 lib/compat-lib/compat_wassup.class.php:664
2168
  msgid "Nothing to do!"
2169
  msgstr ""
2170
 
2171
+ #: lib/wassup.class.php:792 lib/wassupadmin.php:761
2172
+ #: lib/compat-lib/compat_wassup.class.php:794
 
 
 
 
2173
  msgid "Wassup options updated successfully"
2174
  msgstr ""
2175
 
2176
+ #: lib/wassup.class.php:1116 lib/compat-lib/compat_wassup.class.php:1118
2177
  msgid "error"
2178
  msgstr ""
2179
 
2180
+ #: lib/wassup.class.php:1117 lib/compat-lib/compat_wassup.class.php:1119
2181
  msgid "warning"
2182
  msgstr ""
2183
 
2184
+ #: lib/wassup.class.php:1118 lib/compat-lib/compat_wassup.class.php:1120
2185
  msgid "updated"
2186
  msgstr ""
2187
 
2188
+ #: lib/wassup.class.php:1119 lib/compat-lib/compat_wassup.class.php:1121
2189
  msgid "upgraded"
2190
  msgstr ""
2191
 
2192
+ #: lib/wassup.class.php:1120 lib/compat-lib/compat_wassup.class.php:1122
2193
  msgid "deleted"
2194
  msgstr ""
2195
 
2196
+ #: lib/wassup.class.php:1795 lib/compat-lib/compat_wassup.class.php:1794
2197
  msgid "ERROR"
2198
  msgstr ""
2199
 
2200
+ #: lib/wassup.class.php:1855 lib/compat-lib/compat_wassup.class.php:1854
2201
  #, php-format
2202
  msgid "%s error!"
2203
  msgstr ""
2204
 
2205
+ #: lib/wassup.class.php:1856 lib/compat-lib/compat_wassup.class.php:1855
2206
  #, php-format
2207
  msgid "%s encountered an error."
2208
  msgstr ""
2209
 
2210
+ #: lib/wassup.class.php:1963 lib/compat-lib/compat_wassup.class.php:1962
2211
  msgid "Wassup auto-delete notice"
2212
  msgstr ""
2213
 
2214
+ #: lib/wassup.class.php:1964 lib/compat-lib/compat_wassup.class.php:1963
2215
  #, php-format
2216
  msgid "Auto-delete deleted %d old %s records today."
2217
  msgstr ""
2218
 
2219
+ #: lib/wassup.class.php:1978 lib/compat-lib/compat_wassup.class.php:1977
2220
+ msgid "Missing or incorrect table name"
 
 
 
 
 
 
 
 
 
 
 
2221
  msgstr ""
2222
 
2223
+ #: lib/wassup.class.php:2031 lib/compat-lib/compat_wassup.class.php:2030
2224
+ msgid "Export ERROR: Invalid Export request"
 
2225
  msgstr ""
2226
 
2227
+ #: lib/wassup.class.php:2047 lib/compat-lib/compat_wassup.class.php:2046
2228
  #, php-format
2229
+ msgid "Export ERROR: TABLE %s not found!"
2230
  msgstr ""
2231
 
2232
+ #: lib/wassup.class.php:2069 lib/compat-lib/compat_wassup.class.php:2068
2233
  #, php-format
2234
+ msgid "Export ERROR: Unable to get TABLE %s structure!"
2235
  msgstr ""
2236
 
2237
+ #: lib/wassup.class.php:2085 lib/compat-lib/compat_wassup.class.php:2084
2238
  #, php-format
2239
+ msgid "Error with \"SHOW CREATE TABLE\" for %s."
2240
  msgstr ""
2241
 
2242
+ #: lib/wassup.class.php:2090 lib/compat-lib/compat_wassup.class.php:2089
2243
  #, php-format
2244
+ msgid "Table structure of table %s"
2245
  msgstr ""
2246
 
2247
+ #: lib/wassup.class.php:2092 lib/compat-lib/compat_wassup.class.php:2091
2248
  #, php-format
2249
+ msgid "Data contents of table %s"
2250
  msgstr ""
2251
 
2252
+ #: lib/wassup.class.php:2133 lib/compat-lib/compat_wassup.class.php:2132
2253
  #, php-format
2254
+ msgid "%s Export ERROR: %s"
2255
  msgstr ""
2256
 
2257
+ #: lib/wassup.class.php:2140 lib/compat-lib/compat_wassup.class.php:2139
2258
  #, php-format
2259
+ msgid "%s Export ERROR: No data"
2260
  msgstr ""
2261
 
2262
+ #: lib/wassup.class.php:2239 lib/compat-lib/compat_wassup.class.php:2238
2263
+ msgid "records exported!"
 
2264
  msgstr ""
2265
 
2266
+ #: lib/wassup.class.php:2240 lib/compat-lib/compat_wassup.class.php:2239
2267
+ msgid "Last export record id"
 
 
2268
  msgstr ""
2269
 
2270
+ #: lib/wassup.class.php:2262 lib/compat-lib/compat_wassup.class.php:2261
2271
+ msgid "Export failed!"
 
 
2272
  msgstr ""
2273
 
2274
+ #: lib/wassup.class.php:2413 lib/wassup.class.php:2446
2275
+ #: lib/wassupadmin.php:1877 lib/compat-lib/compat_wassup.class.php:2410
2276
+ #: lib/compat-lib/compat_wassup.class.php:2443
2277
  msgid "direct hit"
2278
  msgstr ""
2279
 
2280
+ #: lib/wassup.class.php:2424 lib/wassup.class.php:2427
2281
+ #: lib/compat-lib/compat_wassup.class.php:2421
2282
+ #: lib/compat-lib/compat_wassup.class.php:2424
2283
  msgid "from your site"
2284
  msgstr ""
2285
 
2286
+ #: lib/wassupadmin.php:150
2287
  msgid "paused"
2288
  msgstr ""
2289
 
2290
+ #: lib/wassupadmin.php:180
2291
  msgid "Sorry, delete failed!"
2292
  msgstr ""
2293
 
2294
+ #: lib/wassupadmin.php:183
2295
  msgid "Delete record failed!"
2296
  msgstr ""
2297
 
2298
+ #: lib/wassupadmin.php:193 lib/wassupadmin.php:200 lib/wassupadmin.php:1676
2299
  msgid "Hide Search"
2300
  msgstr ""
2301
 
2302
+ #: lib/wassupadmin.php:205 lib/wassupadmin.php:249
2303
  msgid "Collapse All"
2304
  msgstr ""
2305
 
2306
+ #: lib/wassupadmin.php:207 lib/wassupadmin.php:251 lib/wassupadmin.php:1085
2307
+ #: lib/wassupadmin.php:1717
2308
  msgid "Expand All"
2309
  msgstr ""
2310
 
2311
+ #: lib/wassupadmin.php:210
2312
  msgid "Expand Chronology"
2313
  msgstr ""
2314
 
2315
+ #: lib/wassupadmin.php:212 lib/wassupadmin.php:1718
2316
  msgid "Collapse Chronology"
2317
  msgstr ""
2318
 
2319
+ #: lib/wassupadmin.php:272
2320
+ msgid "timed out!"
2321
+ msgstr ""
2322
+
2323
+ #: lib/wassupadmin.php:521 lib/wassupadmin.php:628 lib/wassupadmin.php:975
2324
  msgid "Visitor Details"
2325
  msgstr ""
2326
 
2327
+ #: lib/wassupadmin.php:522
2328
  msgid "Spy Visitors"
2329
  msgstr ""
2330
 
2331
+ #: lib/wassupadmin.php:523 lib/wassupadmin.php:608 lib/wassupadmin.php:626
2332
+ #: lib/wassupadmin.php:978
2333
  msgid "Current Visitors Online"
2334
  msgstr ""
2335
 
2336
+ #: lib/wassupadmin.php:530
2337
  msgid "WassUp Stats"
2338
  msgstr ""
2339
 
2340
+ #: lib/wassupadmin.php:550 lib/wassupadmin.php:552
2341
  msgid "Settings"
2342
  msgstr ""
2343
 
2344
+ #: lib/wassupadmin.php:806
2345
  msgid "Nothing to do! Check a \"Delete\" option and try again"
2346
  msgstr ""
2347
 
2348
+ #: lib/wassupadmin.php:810
2349
  #, php-format
2350
  msgid "%d records DELETED permanently!"
2351
  msgstr ""
2352
 
2353
+ #: lib/wassupadmin.php:828
2354
  msgid "0 records deleted!"
2355
  msgstr ""
2356
 
2357
+ #: lib/wassupadmin.php:855
2358
  msgid "Wassup uninstall option updated successfully"
2359
  msgstr ""
2360
 
2361
+ #: lib/wassupadmin.php:863
2362
  msgid "Wassup options reset successfully"
2363
  msgstr ""
2364
 
2365
+ #: lib/wassupadmin.php:874 lib/wassupadmin.php:888
2366
  msgid "Sorry! You're not allowed to do that."
2367
  msgstr ""
2368
 
2369
+ #: lib/wassupadmin.php:885
2370
  msgid "Wassup spam options updated successfully"
2371
  msgstr ""
2372
 
2373
+ #: lib/wassupadmin.php:925
2374
  msgid "records deleted"
2375
  msgstr ""
2376
 
2377
+ #: lib/wassupadmin.php:927
2378
  msgid "Sorry! You're not allowed to delete records."
2379
  msgstr ""
2380
 
2381
+ #: lib/wassupadmin.php:940
2382
  msgid "WARNING: WassUp is NOT recording new statistics."
2383
  msgstr ""
2384
 
2385
+ #: lib/wassupadmin.php:943
2386
  msgid ""
2387
  "To collect visitor data you must check \"Enable statistics recording\" in "
2388
  "\"WassUp-Options: General Setup\" tab"
2389
  msgstr ""
2390
 
2391
+ #: lib/wassupadmin.php:945
2392
  msgid ""
2393
  "To collect visitor data you must check \"Enable Statistics Recording for "
2394
  "network\" in \"WassUp-Options: General Setup\" tab"
2395
  msgstr ""
2396
 
2397
+ #: lib/wassupadmin.php:947 lib/wassupadmin.php:953
2398
  msgid ""
2399
  "Contact your site administrator about enabling statistics recording for the "
2400
  "network."
2401
  msgstr ""
2402
 
2403
+ #: lib/wassupadmin.php:951
2404
  msgid "Contact your site administrator about enabling statistics recording."
2405
  msgstr ""
2406
 
2407
+ #: lib/wassupadmin.php:975
2408
  msgid "Latest Hits"
2409
  msgstr ""
2410
 
2411
+ #: lib/wassupadmin.php:988
2412
+ msgid "Frequently Asked Questions"
2413
+ msgstr ""
2414
+
2415
+ #: lib/wassupadmin.php:996
2416
  msgid "Donations are really welcome"
2417
  msgstr ""
2418
 
2419
+ #: lib/wassupadmin.php:998
2420
  #, php-format
2421
  msgid "Check the %s for updates, bug reports and your hints to improve it"
2422
  msgstr ""
2423
 
2424
+ #: lib/wassupadmin.php:998
2425
  msgid "Official WassUp page"
2426
  msgstr ""
2427
 
2428
+ #: lib/wassupadmin.php:999
2429
  msgid "WassUp Support"
2430
  msgstr ""
2431
 
2432
+ #: lib/wassupadmin.php:999
2433
  msgid "Wassup Support"
2434
  msgstr ""
2435
 
2436
+ #: lib/wassupadmin.php:1000
2437
  msgid "Exec time"
2438
  msgstr ""
2439
 
2440
+ #: lib/wassupadmin.php:1116 lib/wassupadmin.php:1302
2441
  msgid "Legend"
2442
  msgstr ""
2443
 
2444
+ #: lib/wassupadmin.php:1116 lib/wassupadmin.php:1145 lib/wassupadmin.php:1302
2445
  msgid "Logged-in Users"
2446
  msgstr ""
2447
 
2448
+ #: lib/wassupadmin.php:1116
2449
  msgid "Comment Authors"
2450
  msgstr ""
2451
 
2452
+ #: lib/wassupadmin.php:1116 lib/wassupadmin.php:1302
2453
  msgid "Spiders/bots"
2454
  msgstr ""
2455
 
2456
+ #: lib/wassupadmin.php:1144 lib/wassupadmin.php:2188
2457
+ #: widgets/widget_functions.php:201
2458
+ #: lib/compat-lib/compat_wassup.class.php:2889
2459
  msgid "Visitors online"
2460
  msgstr ""
2461
 
2462
+ #: lib/wassupadmin.php:1172
2463
  msgid "From your site"
2464
  msgstr ""
2465
 
2466
+ #: lib/wassupadmin.php:1192 lib/wassupadmin.php:1785
2467
  msgid "LOGGED IN USER"
2468
  msgstr ""
2469
 
2470
+ #: lib/wassupadmin.php:1197 lib/wassupadmin.php:1792
2471
  msgid "ADMINISTRATOR"
2472
  msgstr ""
2473
 
2474
+ #: lib/wassupadmin.php:1212 lib/wassupadmin.php:1813
2475
  msgid "COMMENT AUTHOR"
2476
  msgstr ""
2477
 
2478
+ #: lib/wassupadmin.php:1234 lib/wassupadmin.php:1869
2479
  msgid "show raw table"
2480
  msgstr ""
2481
 
2482
+ #: lib/wassupadmin.php:1234 lib/wassupadmin.php:1869
2483
  msgid "Show the items as raw table"
2484
  msgstr ""
2485
 
2486
+ #: lib/wassupadmin.php:1302
2487
  msgid "Comments Authors"
2488
  msgstr ""
2489
 
2490
+ #: lib/wassupadmin.php:1306
2491
  msgid "Pause"
2492
  msgstr ""
2493
 
2494
+ #: lib/wassupadmin.php:1307
2495
  msgid "Play"
2496
  msgstr ""
2497
 
2498
+ #: lib/wassupadmin.php:1318
2499
  msgid "Show map"
2500
  msgstr ""
2501
 
2502
+ #: lib/wassupadmin.php:1318
2503
  msgid "Show ip geo location on map"
2504
  msgstr ""
2505
 
2506
+ #: lib/wassupadmin.php:1324
2507
  msgid "Spy items by"
2508
  msgstr ""
2509
 
2510
+ #: lib/wassupadmin.php:1371
2511
  msgid "WassUp recording is disabled"
2512
  msgstr ""
2513
 
2514
+ #: lib/wassupadmin.php:1373
2515
  msgid "WassUp recording is disabled for network."
2516
  msgstr ""
2517
 
2518
+ #: lib/wassupadmin.php:1523
2519
  msgid "Show details from the last"
2520
  msgstr ""
2521
 
2522
+ #: lib/wassupadmin.php:1532
2523
  msgid "Items per page"
2524
  msgstr ""
2525
 
2526
+ #: lib/wassupadmin.php:1542
2527
  msgid "Filter items for"
2528
  msgstr ""
2529
 
2530
+ #: lib/wassupadmin.php:1600
2531
  msgid "Visits"
2532
  msgstr ""
2533
 
2534
+ #: lib/wassupadmin.php:1601
2535
  msgid "Pageviews"
2536
  msgstr ""
2537
 
2538
+ #: lib/wassupadmin.php:1602
2539
  msgid "Pages/Visits"
2540
  msgstr ""
2541
 
2542
+ #: lib/wassupadmin.php:1618
2543
  msgid "Spams"
2544
  msgstr ""
2545
 
2546
+ #: lib/wassupadmin.php:1628
2547
  msgid "Spam/Malware Options"
2548
  msgstr ""
2549
 
2550
+ #: lib/wassupadmin.php:1634
2551
  msgid "Enable Spam and Malware Check on Records"
2552
  msgstr ""
2553
 
2554
+ #: lib/wassupadmin.php:1637
2555
  msgid "Record attack/exploit attempts (libwww-perl agent)"
2556
  msgstr ""
2557
 
2558
+ #: lib/wassupadmin.php:1646
2559
  msgid "refresh screen"
2560
  msgstr ""
2561
 
2562
+ #: lib/wassupadmin.php:1648
2563
  #, php-format
2564
  msgid "Auto refresh in %s seconds"
2565
  msgstr ""
2566
 
2567
+ #: lib/wassupadmin.php:1653
2568
  msgid "hide chart"
2569
  msgstr ""
2570
 
2571
+ #: lib/wassupadmin.php:1653
2572
  msgid "Hide the chart"
2573
  msgstr ""
2574
 
2575
+ #: lib/wassupadmin.php:1653
2576
  msgid "Hide chart"
2577
  msgstr ""
2578
 
2579
+ #: lib/wassupadmin.php:1655
2580
  msgid "show chart"
2581
  msgstr ""
2582
 
2583
+ #: lib/wassupadmin.php:1655
2584
  msgid "Show the chart"
2585
  msgstr ""
2586
 
2587
+ #: lib/wassupadmin.php:1655
2588
  msgid "Show chart"
2589
  msgstr ""
2590
 
2591
+ #: lib/wassupadmin.php:1672
2592
  #, php-format
2593
  msgid "Top Stats for %s"
2594
  msgstr ""
2595
 
2596
+ #: lib/wassupadmin.php:1672
2597
  msgid "Show top stats"
2598
  msgstr ""
2599
 
2600
+ #: lib/wassupadmin.php:1674
2601
  #, php-format
2602
  msgid "Top stats for %s in popup"
2603
  msgstr ""
2604
 
2605
+ #: lib/wassupadmin.php:1682
2606
  #, php-format
2607
  msgid "%s matches found for search"
2608
  msgstr ""
2609
 
2610
+ #: lib/wassupadmin.php:1686
2611
  #, php-format
2612
  msgid "%s items marked for IP"
2613
  msgstr ""
2614
 
2615
+ #: lib/wassupadmin.php:1687
2616
  msgid "Filter by marked IP"
2617
  msgstr ""
2618
 
2619
+ #: lib/wassupadmin.php:1748
2620
  msgid "Records display interrupted."
2621
  msgstr ""
2622
 
2623
+ #: lib/wassupadmin.php:1750
2624
  msgid "Unable to display records."
2625
  msgstr ""
2626
 
2627
+ #: lib/wassupadmin.php:1819
2628
  msgid "FEEDREADER"
2629
  msgstr ""
2630
 
2631
+ #: lib/wassupadmin.php:1821
2632
  msgid "SUBSCRIBER(S)"
2633
  msgstr ""
2634
 
2635
+ #: lib/wassupadmin.php:1824
2636
  msgid "SPIDER"
2637
  msgstr ""
2638
 
2639
+ #: lib/wassupadmin.php:1859 lib/wassupadmin.php:1864
2640
  msgid "delete"
2641
  msgstr ""
2642
 
2643
+ #: lib/wassupadmin.php:1859
2644
  msgid "Delete ALL marked records with this IP"
2645
  msgstr ""
2646
 
2647
+ #: lib/wassupadmin.php:1861
2648
  msgid "unmark"
2649
  msgstr ""
2650
 
2651
+ #: lib/wassupadmin.php:1861
2652
  msgid "UnMark IP"
2653
  msgstr ""
2654
 
2655
+ #: lib/wassupadmin.php:1864
2656
  msgid "Delete this record"
2657
  msgstr ""
2658
 
2659
+ #: lib/wassupadmin.php:1866
2660
  msgid "mark"
2661
  msgstr ""
2662
 
2663
+ #: lib/wassupadmin.php:1866
2664
  msgid "Mark IP"
2665
  msgstr ""
2666
 
2667
+ #: lib/wassupadmin.php:1909
2668
  msgid "SEARCH ENGINE"
2669
  msgstr ""
2670
 
2671
+ #: lib/wassupadmin.php:1909
2672
  msgid "page"
2673
  msgstr ""
2674
 
2675
+ #: lib/wassupadmin.php:1910
2676
  msgid "KEYWORDS"
2677
  msgstr ""
2678
 
2679
+ #: lib/wassupadmin.php:1933
2680
  msgid "Probably SPAM!"
2681
  msgstr ""
2682
 
2683
+ #: lib/wassupadmin.php:1935
2684
  msgid "Referer Spam"
2685
  msgstr ""
2686
 
2687
+ #: lib/wassupadmin.php:1939
2688
  msgid "Comment Spam"
2689
  msgstr ""
2690
 
2691
+ #: lib/wassupadmin.php:1947
2692
  msgid "Probably hack/malware attempt!"
2693
  msgstr ""
2694
 
2695
+ #: lib/wassupadmin.php:1974
2696
  msgid "BROWSER"
2697
  msgstr ""
2698
 
2699
+ #: lib/wassupadmin.php:1977
2700
  msgid "RESOLUTION"
2701
  msgstr ""
2702
 
2703
+ #: lib/wassupadmin.php:2040
2704
+ msgid "Too few records to print chart"
2705
  msgstr ""
2706
 
2707
+ #: lib/wassupadmin.php:2048
2708
+ msgid "Graph of visitor hits"
2709
  msgstr ""
2710
 
2711
+ #: lib/wassupadmin.php:2057
2712
  #, php-format
2713
  msgid "Invalid page request %s"
2714
  msgstr ""
2715
 
2716
+ #: lib/wassupadmin.php:2122 lib/compat-lib/compat_wassup.class.php:2823
2717
  msgid "Stats"
2718
  msgstr ""
2719
 
2720
+ #: lib/wassupadmin.php:2122 lib/compat-lib/compat_wassup.class.php:2823
2721
  msgid "More"
2722
  msgstr ""
2723
 
2724
+ #: lib/wassupadmin.php:2124 lib/wassupadmin.php:2159
2725
+ #: lib/compat-lib/compat_wassup.class.php:2825
2726
+ #: lib/compat-lib/compat_wassup.class.php:2860
2727
  msgid "visitor stats chart"
2728
  msgstr ""
2729
 
2730
+ #: lib/wassupadmin.php:2154 lib/compat-lib/compat_wassup.class.php:2855
2731
  msgid "More Stats"
2732
  msgstr ""
2733
 
2734
+ #: lib/wassupadmin.php:2235 lib/compat-lib/compat_wassup.class.php:2936
2735
  msgid "Registered users"
2736
  msgstr ""
2737
 
2738
+ #: lib/wassupadmin.php:2245 widgets/widget_functions.php:200
2739
+ #: lib/compat-lib/compat_wassup.class.php:2946
2740
  msgid "Visitor online"
2741
  msgstr ""
2742
 
2743
+ #: lib/wassupadmin.php:2250 lib/compat-lib/compat_wassup.class.php:2951
2744
  msgid "No online data!"
2745
  msgstr ""
2746
 
2747
+ #: lib/wassupadmin.php:2254 widgets/widget_functions.php:105
2748
+ #: lib/compat-lib/compat_wassup.class.php:2955
2749
  msgid "powered by"
2750
  msgstr ""
2751
 
2752
+ #: lib/wassupadmin.php:2254 widgets/widget_functions.php:105
2753
+ #: lib/compat-lib/compat_wassup.class.php:2955
2754
  msgid "Real Time Visitors Tracking"
2755
  msgstr ""
2756
 
2757
+ #: widgets/widgets.php:56 lib/compat-lib/compat_widget.php:65
2758
+ msgid "base widget"
2759
+ msgstr ""
2760
+
2761
+ #: widgets/widgets.php:100 widgets/widgets.php:248 widgets/widgets.php:462
2762
+ #: lib/compat-lib/compat_widget.php:106
2763
  msgid "Widget style options"
2764
  msgstr ""
2765
 
2766
+ #: widgets/widgets.php:102 widgets/widgets.php:250 widgets/widgets.php:464
2767
+ #: lib/compat-lib/compat_widget.php:108
2768
  #, php-format
2769
  msgid "Class attribute for %s list:"
2770
  msgstr ""
2771
 
2772
+ #: widgets/widgets.php:104 widgets/widgets.php:252 widgets/widgets.php:466
2773
+ #: lib/compat-lib/compat_widget.php:110
2774
  msgid "Max. chars to display from left"
2775
  msgstr ""
2776
 
2777
+ #: widgets/widgets.php:105 widgets/widgets.php:253 widgets/widgets.php:467
2778
+ #: lib/compat-lib/compat_widget.php:111
2779
  msgid "enter \"0\" for theme default/line wrap of long texts"
2780
  msgstr ""
2781
 
2782
+ #: widgets/widgets.php:200
 
 
 
 
2783
  msgid "Online"
2784
  msgstr ""
2785
 
2786
+ #: widgets/widgets.php:201
2787
  msgid "Show counts of your site's visitors who are currently online."
2788
  msgstr ""
2789
 
2790
+ #: widgets/widgets.php:211
2791
  msgid "Online Now"
2792
  msgstr ""
2793
 
2794
+ #: widgets/widgets.php:231
2795
  msgid "Show online counts for:"
2796
  msgstr ""
2797
 
2798
+ #: widgets/widgets.php:233
2799
  msgid "All current visitors"
2800
  msgstr ""
2801
 
2802
+ #: widgets/widgets.php:234 widgets/widget_functions.php:211
2803
  msgid "Logged-in users"
2804
  msgstr ""
2805
 
2806
+ #: widgets/widgets.php:236 widgets/widget_functions.php:231
2807
  msgid "Regular visitors"
2808
  msgstr ""
2809
 
2810
+ #: widgets/widgets.php:237 widgets/widget_functions.php:241
2811
  msgid "Others"
2812
  msgstr ""
2813
 
2814
+ #: widgets/widgets.php:241
2815
  msgid "Online Users Details"
2816
  msgstr ""
2817
 
2818
+ #: widgets/widgets.php:243
2819
  msgid "Show online usernames to registered users"
2820
  msgstr ""
2821
 
2822
+ #: widgets/widgets.php:244
2823
  msgid "Show country flags of users online"
2824
  msgstr ""
2825
 
2826
+ #: widgets/widgets.php:257
2827
  msgid "online counts are automatically cached for 1 minute."
2828
  msgstr ""
2829
 
2830
+ #: widgets/widgets.php:258 widgets/widgets.php:472
2831
  msgid "empty results are not displayed."
2832
  msgstr ""
2833
 
2834
+ #: widgets/widgets.php:369
2835
  msgid "Top Stats"
2836
  msgstr ""
2837
 
2838
+ #: widgets/widgets.php:370
2839
  msgid ""
2840
  "List your site's most popular or trending items from Wassup's latest stats "
2841
  "data."
2842
  msgstr ""
2843
 
2844
+ #: widgets/widgets.php:403
2845
  msgid "of first checked item below"
2846
  msgstr ""
2847
 
2848
+ #: widgets/widgets.php:405
2849
  msgid "List Top Results for"
2850
  msgstr ""
2851
 
2852
+ #: widgets/widgets.php:409
2853
  msgid "Stat item"
2854
  msgstr ""
2855
 
2856
+ #: widgets/widgets.php:410
2857
  msgid "max limit"
2858
  msgstr ""
2859
 
2860
+ #: widgets/widgets.php:412
2861
  msgid "Titles of posts and pages"
2862
  msgstr ""
2863
 
2864
+ #: widgets/widgets.php:412 widgets/widget_functions.php:414
2865
  msgid "Latest articles"
2866
  msgstr ""
2867
 
2868
+ #: widgets/widgets.php:418
2869
  msgid "Search engine searches"
2870
  msgstr ""
2871
 
2872
+ #: widgets/widgets.php:418 widgets/widget_functions.php:422
2873
  msgid "Latest searches"
2874
  msgstr ""
2875
 
2876
+ #: widgets/widgets.php:424
2877
  msgid "External links that generated referrals to your site"
2878
  msgstr ""
2879
 
2880
+ #: widgets/widgets.php:424 widgets/widget_functions.php:430
2881
  msgid "Latest referrers"
2882
  msgstr ""
2883
 
2884
+ #: widgets/widgets.php:430 widgets/widget_functions.php:438
2885
  msgid "Latest URL requests"
2886
  msgstr ""
2887
 
2888
+ #: widgets/widgets.php:436
2889
  msgid "Client browser software"
2890
  msgstr ""
2891
 
2892
+ #: widgets/widgets.php:436 widgets/widget_functions.php:446
2893
  msgid "Latest browsers"
2894
  msgstr ""
2895
 
2896
+ #: widgets/widgets.php:442
2897
  msgid "Client device/operating software"
2898
  msgstr ""
2899
 
2900
+ #: widgets/widgets.php:442 widgets/widget_functions.php:454
2901
  msgid "Latest OS"
2902
  msgstr ""
2903
 
2904
+ #: widgets/widgets.php:448
2905
  msgid "Visitors country/language"
2906
  msgstr ""
2907
 
2908
+ #: widgets/widgets.php:448
2909
  msgid "Latest locale"
2910
  msgstr ""
2911
 
2912
+ #: widgets/widgets.php:455
2913
  msgid "Show counts for each item"
2914
  msgstr ""
2915
 
2916
+ #: widgets/widgets.php:456
2917
  msgid "Statistics timeframe"
2918
  msgstr ""
2919
 
2920
+ #: widgets/widgets.php:457
2921
  msgid ""
2922
  "select 1-30 days for latest top results, 1-12 hours for trending results"
2923
  msgstr ""
2924
 
2925
+ #: widgets/widgets.php:458
2926
  msgid "Refresh statistics every:"
2927
  msgstr ""
2928
 
2929
+ #: widgets/widgets.php:471
2930
  msgid "known spammers and spiders are excluded from results."
2931
  msgstr ""
2932
 
2933
+ #: widgets/widgets.php:575
2934
+ msgid "Latest"
2935
  msgstr ""
2936
 
2937
  #: widgets/widget_functions.php:240
2938
  msgid "Other"
2939
  msgstr ""
2940
 
2941
+ #: widgets/widget_functions.php:416
2942
  #, php-format
2943
  msgid "%s articles"
2944
  msgstr ""
2945
 
2946
+ #: widgets/widget_functions.php:424
2947
  #, php-format
2948
  msgid "%s searches"
2949
  msgstr ""
2950
 
2951
+ #: widgets/widget_functions.php:432
2952
  #, php-format
2953
  msgid "%s referrers"
2954
  msgstr ""
2955
 
2956
+ #: widgets/widget_functions.php:440
2957
  #, php-format
2958
  msgid "%s requests"
2959
  msgstr ""
2960
 
2961
+ #: widgets/widget_functions.php:448
2962
  #, php-format
2963
  msgid "%s browsers"
2964
  msgstr ""
2965
 
2966
+ #: widgets/widget_functions.php:456
2967
  #, php-format
2968
  msgid "%s OS"
2969
  msgstr ""
2970
 
2971
+ #: widgets/widget_functions.php:462
2972
+ msgid "Latest locales"
2973
+ msgstr ""
2974
+
2975
+ #: widgets/widget_functions.php:464
2976
  #, php-format
2977
  msgid "%s locale"
2978
  msgstr ""
lib/action.php CHANGED
@@ -41,7 +41,7 @@ function wassup_action_handler($action=""){
41
  //check for invalid Wassup action requests
42
  if(empty($action)){
43
  if($_REQUEST['action']=="wassup_action_handler"){
44
- $msg=__("Missing or invalid action parameter!","wassup");
45
  die($msg);
46
  }else{
47
  //return not exit, in case is Wordpress action
@@ -56,8 +56,8 @@ function wassup_action_handler($action=""){
56
  if(!is_user_logged_in()) die(__("Login required!","wassup"));
57
 
58
  // check for valid hash
59
- if(!isset($_REQUEST['whash'])){
60
- die(__('Missing or invalid whash parameter!','wassup'));
61
  }
62
  $whash=$_REQUEST['whash'];
63
  $wassup_settings=get_option('wassup_settings');
@@ -66,8 +66,8 @@ function wassup_action_handler($action=""){
66
  }else{
67
  $hashfail=true;
68
  }
69
- if($hashfail){
70
- die(__('invalid hash parameter!','wassup'));
71
  }
72
  if(empty($current_user->ID)) $user=wp_get_current_user();
73
  if(!class_exists('wassupOptions')){
@@ -75,11 +75,6 @@ function wassup_action_handler($action=""){
75
  }
76
  if(empty($wassup_options->wassup_table)) $wassup_options=new wassupOptions;
77
  //#Ajax action / no output (unless error)
78
- //ACTION: export request
79
- if($action=="exportSQL"){
80
- export_wassup();
81
- exit;
82
- }
83
  // ACTION: DELETE ON THE FLY FROM VISITOR DETAILS VIEW
84
  if($action=="deleteID"){
85
  if(!empty($_REQUEST['id'])){
@@ -116,6 +111,17 @@ function wassup_action_handler($action=""){
116
  die(__("Error","wassup").": missing id parameter");
117
  }
118
  exit;
 
 
 
 
 
 
 
 
 
 
 
119
  }
120
  //#Ajax action with html output
121
  $vers='?ver='.WASSUPVERSION;
41
  //check for invalid Wassup action requests
42
  if(empty($action)){
43
  if($_REQUEST['action']=="wassup_action_handler"){
44
+ $msg=__("Missing or invalid parameter!","wassup");
45
  die($msg);
46
  }else{
47
  //return not exit, in case is Wordpress action
56
  if(!is_user_logged_in()) die(__("Login required!","wassup"));
57
 
58
  // check for valid hash
59
+ if(!isset($_REQUEST['whash'])){ //don't reveal 'whash' name
60
+ die(__('Missing or invalid parameter!','wassup'));
61
  }
62
  $whash=$_REQUEST['whash'];
63
  $wassup_settings=get_option('wassup_settings');
66
  }else{
67
  $hashfail=true;
68
  }
69
+ if($hashfail){ //don't reveal 'hash'
70
+ die(__('invalid parameter!','wassup'));
71
  }
72
  if(empty($current_user->ID)) $user=wp_get_current_user();
73
  if(!class_exists('wassupOptions')){
75
  }
76
  if(empty($wassup_options->wassup_table)) $wassup_options=new wassupOptions;
77
  //#Ajax action / no output (unless error)
 
 
 
 
 
78
  // ACTION: DELETE ON THE FLY FROM VISITOR DETAILS VIEW
79
  if($action=="deleteID"){
80
  if(!empty($_REQUEST['id'])){
111
  die(__("Error","wassup").": missing id parameter");
112
  }
113
  exit;
114
+
115
+ // ACTION: RETURN MESSAGE FROM AN EXPORT
116
+ }elseif($action=="exportmessage"){
117
+ $msg="";
118
+ $msgid='0';
119
+ if(isset($_REQUEST['mid'])) $msgid=$_REQUEST['mid'];
120
+ if(!empty($msgid)){
121
+ $msg=wassupDb::get_wassupmeta($msgid,'_export_msg');
122
+ }
123
+ echo $msg;
124
+ exit;
125
  }
126
  //#Ajax action with html output
127
  $vers='?ver='.WASSUPVERSION;
lib/compatibility.php CHANGED
@@ -29,44 +29,62 @@ if(!empty($_SERVER['SCRIPT_FILENAME']) && realpath($_SERVER['SCRIPT_FILENAME'])=
29
  }
30
  //-------------------------------------------------
31
  /**
32
- * Load Wassup compatibility modules if needed and return true if this Wordpress version is compatible with this copy of Wassup
33
- * @since v1.9.1
34
  */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
35
  function wassup_load_compat_modules(){
36
  global $wp_version;
 
37
  $is_compatible=true;
38
- if(version_compare($wp_version,'2.2','<')){
 
 
 
39
  $is_compatible=false;
40
  }else{
41
- $wassup_compatlib=WASSUPDIR.'/lib/compat-lib';
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
- //multisite compatibility check @since v1.9.2
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')){
56
  include_once($wassup_compatlib.'/compat_functions.php');
57
  }
58
  }
59
- $php_vers=phpversion();
60
  if(version_compare($php_vers,'5.2','<')){
61
- if(file_exists($wassup_compatlib.'/compat_php.php')){
62
- require_once($wassup_compatlib.'/compat_php.php');
63
- }else{
64
- $is_compatible=false;
65
  }
66
  }
67
  }
68
  return $is_compatible;
69
- }
70
  /**
71
  * Show a message if this Wordpress version is incompatible with this copy of Wassup
72
  * @since v1.9.1
@@ -90,8 +108,8 @@ function wassup_show_compat_message(){
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);
96
  }
97
  }
29
  }
30
  //-------------------------------------------------
31
  /**
32
+ * Return true if this Wordpress version is compatible with this Wassup
33
+ * @since v1.9.4
34
  */
35
+ function wassup_check_compatibility(){
36
+ global $wp_version;
37
+ $php_vers=phpversion();
38
+ $wassup_compatlib=WASSUPDIR.'/lib/compat-lib';
39
+ $is_compatible=true;
40
+ //check for minimum Wordpress compatibility
41
+ if(version_compare($wp_version,'4.5','<') || version_compare($php_vers,'5.2','<')){
42
+ if(version_compare($wp_version,'2.2','<')){
43
+ $is_compatible=false;
44
+ }elseif(version_compare($wp_version,'3.1','<') && function_exists('is_multisite') && is_multisite()){
45
+ $is_compatible=false;
46
+ }else{
47
+ $is_compatible=wassup_load_compat_modules();
48
+ }
49
+ }
50
+ return $is_compatible;
51
+ }
52
+ /** Load compatibility modules for Wordpress and PHP - @since v1.9.1 */
53
  function wassup_load_compat_modules(){
54
  global $wp_version;
55
+ $php_vers=phpversion();
56
  $is_compatible=true;
57
+ $wassup_compatlib=WASSUPDIR.'/lib/compat-lib';
58
+ if(!file_exists($wassup_compatlib.'/compat_wp.php') && version_compare($wp_version,'3.1','<')){
59
+ $is_compatible=false;
60
+ }elseif(!file_exists($wassup_compatlib.'/compat_wassup.class.php') && version_compare($php_vers,'5.2','<')){
61
  $is_compatible=false;
62
  }else{
63
+ //Wordpress 2.8-3.1 & PHP 4.1-5.2 compatibility
64
  if(version_compare($wp_version,'3.1','<')){
65
+ require_once($wassup_compatlib.'/compat_wp.php');
66
+ include_once($wassup_compatlib.'/compat_functions.php');
67
+ //load 'Wassup_Widget' base widget without the 'WP_Widget' parent class
68
+ if(version_compare($wp_version,'2.8','<')){
69
+ if(!class_exists('Wassup_Widget')){
70
+ include_once($wassup_compatlib.'/compat_widget.php');
 
71
  }
 
 
72
  }
73
+ //Wordpress 3.1-4.5 & PHP 4.1-5.2 compatibility
74
+ }elseif(version_compare($wp_version,'4.5','<') || version_compare($php_vers,'5.2','<')){
75
  if(file_exists($wassup_compatlib.'/compat_functions.php')){
76
  include_once($wassup_compatlib.'/compat_functions.php');
77
  }
78
  }
79
+ //PHP 4.1-5.2 compatibility
80
  if(version_compare($php_vers,'5.2','<')){
81
+ if(!class_exists('wassupOptions')){
82
+ include_once($wassup_compatlib.'/compat_wassup.class.php');
 
 
83
  }
84
  }
85
  }
86
  return $is_compatible;
87
+ } //end wassup_load_compat_modules
88
  /**
89
  * Show a message if this Wordpress version is incompatible with this copy of Wassup
90
  * @since v1.9.1
108
  if(function_exists('is_multisite') && is_multisite()){
109
  $msg =__("Sorry, WassUp requires WordPress 3.1 or higher to work in multisite setups","wassup");
110
  }
111
+ }elseif(version_compare($php_vers,'5.2','<') && !file_exists($wassup_compatlib.'/compat_wassup.class.php')){
112
+ $msg= __("WARNING! WassUp's PHP compatibility modules are missing.","wassup");
113
  $msg .= ' '.sprintf(__('Download and install the full version of Wassup with compatibility library included directly from %s.','wassup'),$download_link);
114
  }
115
  }
lib/faq.php ADDED
@@ -0,0 +1,94 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Displays a list of frequently asked questions related to Wassup
4
+ *
5
+ * @package WassUp Real-time Analytics
6
+ * @subpackage faq.php
7
+ * @author helened (http://helenesit.com)
8
+ * @since v.1.9.3
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
+ /** Display a list of questions and answers about WassUp @since v1.9.4 */
27
+ function wassup_faq(){
28
+ global $wassup_options;
29
+ $GMapsAPI_signup="https://developers.google.com/maps/documentation/javascript/get-api-key#key"; //v3 key signup
30
+ //wassup-options menu link
31
+ if(is_network_admin()) $options_link=network_admin_url('admin.php?page=wassup-options');
32
+ else $options_link=admin_url('admin.php?page=wassup-options');
33
+ ?>
34
+ <div id="wassup_faq-1" class="optionspanel">
35
+ <ol>
36
+ <li><strong>Q:</strong> <span class="faq-question"><?php echo __("How do I add WassUp's chart to my admin dashboard?","wassup");?></span><br/>
37
+ <strong>A:</strong> <span class="faq-answer"><?php echo sprintf(__("Check the box for \"Enable widget/small chart in admin dashboard\" under %s tab.","wassup"),'<span class="code">WassUp >> '.__("Options","wassup").' >><nobr>[<a href="'.$options_link.'">'.__("General Setup","wassup").'</a>]</nobr></span>');?></span></li>
38
+ <li><strong>Q:</strong> <span class="faq-question"><?php echo __("How do I display WassUp widgets on my site?","wassup");?></span><br/>
39
+ <strong>A:</strong> <span class="faq-answer"><?php echo __("From Wordpress widgets panel, drag the \"WassUp Online\" widget or the \"Wassup Top Stats\" widget from the list of available widgets on the left into your theme's \"Sidebar\" or \"Footer\" area on the right or use the Customizer to add Wassup widgets interactively.","wassup");?></span></li>
40
+ <li><strong>Q:</strong> <span class="faq-question"><?php echo __("My Wordpress theme is not widget ready. Is it possible to display WassUp widgets on my site?","wassup");?></span><br/>
41
+ <strong>A:</strong> <span class="faq-answer"><?php echo __("Yes. Insert the template tag \"wassup_sidebar()\" into your theme's \"sidebar.php\" file to display Wassup widgets as a single combined widget on your site.","wassup");?></span></li>
42
+ <li><strong>Q:</strong> <span class="faq-question"><?php echo __("How do I view the real-time visitor geolocation map in WassUp?","wassup");?></span><br/>
43
+ <strong>A:</strong> <span class="faq-answer"><?php echo sprintf(__("Check the box for \"Display a GEO IP Map in spy visitors view\" in %s and save, then navigate to %s panel to see the map.","wassup"),'<span class="code">WassUp >> '.__("Options","wassup").' >><nobr>[<a href="'.$options_link.'">'.__("General Setup","wassup").'</a>]</nobr></span>','<span class="code">WassUp >><nobr>'.__("SPY Visitors","wassup").'</nobr></span>');?></span></li>
44
+ <li><strong>Q:</strong> <span class="faq-question"><?php echo __("The map has vanished and I get a message like: \"Oops, something went wrong\" or \"Google has disabled use of the Maps API for this application\". How do I fix this?","wassup");?></span><br/>
45
+ <strong>A:</strong> <span class="faq-answer"><?php
46
+ echo sprintf(__("Try upgrading to the latest version of Wassup, or go to Wassup-Options and click the Reset-to-Default button if you have already upgraded, or sign up for your own %s and enter it under \"Spy Visitors settings\" in %s tab.","wassup"),
47
+ '<a href='.$GMapsAPI_signup.'>Google!Maps API key</a>','<span class="code">WassUp >>'.__("Options","wassup").' >><nobr>[<a href="'.$options_link.'">'.__("General Setup","wassup").'</a>]</nobr></span>');?></span></li>
48
+ <li><strong>Q:</strong> <span class="faq-question"><?php echo __("How do I exclude a visitor from being recorded?","wassup");?></span><br/>
49
+ <strong>A:</strong> <span class="faq-answer"><?php echo sprintf(__("Navigate to %s tab and enter a visitor's username, IP address, or hostname into the appropriate text area for that \"Recording Exclusion\" type.","wassup"),'<span class="code">WassUp >>'.__("Options","wassup").' >><nobr>[<a href="'.$options_link.'&tab=2">'.__("Filters & Exclusions","wassup").'</a>]</nobr></span>');?></span></li>
50
+ <li><strong>Q:</strong> <span class="faq-question"><?php echo __("How do I stop (temporarily) WassUp from recording new visits on my site?","wassup");?></span><br/>
51
+ <strong>A:</strong> <span class="faq-answer"><?php echo sprintf(__("Uncheck the box for \"Enable statistics recording\" under %s tab.","wassup"),'<span class="code">WassUp >>'.__("Options","wassup").' >><nobr>[<a href="'.$options_link.'">'.__("General Setup","wassup").'</a>]</nobr></span>');?></span></li>
52
+ <li><strong>Q:</strong> <span class="faq-question"><?php echo __("In Wordpress multisite, how do I stop (temporarily) WassUp from recording new visits on all sites in the network?","wassup");?></span><br/>
53
+ <strong>A#1:</strong> <span class="faq-answer"><?php echo sprintf(__("If plugin is \"network activated\", login as network admin, go to the Network admin dashboard, navigate to %s tab and Uncheck the box for \"Enable Statistics Recording for network\" and save.","wassup"),'<span class="code">WassUp >>'.__("Options","wassup").' >>[<a href="'.$options_link.'">'.__("General Setup","wassup").'</a>]</span>');?></span><br/>
54
+ <strong>A#2:</strong> <span class="faq-answer"><?php echo sprintf(__("If plugin is NOT \"network activated\", login as network admin, go to the main site/parent domain admin dashboard, navigate to %s tab, then Uncheck the box for \"Enable Statistics Recording for network\" and save.","wassup"),'<span class="code">WassUp >>'.__("Options","wassup").' >><nobr>[<a href="'.$options_link.'">'.__("General Setup","wassup").'</a>]</nobr></span>');?></span>
55
+ </li>
56
+ <li><strong>Q:</strong> <span class="faq-question"><?php echo __("No data is being displayed; or \"Visitor Details\" panel show 0 records for the last 24 hours. How do I fix this?","wassup");?></span><br/>
57
+ <strong>A #1:</strong> <span class="faq-answer"><?php echo sprintf(__("Check the box for \"Enable statistics recording\" setting under %s tab and save.","wassup"),'<span class="code">WassUp >>'.__("Options","wassup").' >><nobr>[<a href="'.$options_link.'">'.__("General Setup","wassup").'</a>]</nobr></span>');?></span><br/>
58
+ <strong>A #2:</strong> <span class="faq-answer"><?php echo sprintf(__("Click the [Reset to Default] button under %s tab.","wassup"),'<span class="code">WassUp >>'.__("Options","wassup").' >><nobr>[<a href="'.$options_link.'">'.__("General Setup","wassup").'</a>]</nobr></span>');?></span><br/>
59
+ <strong>A #3:</strong> <span class="faq-answer"><?php echo sprintf(__("Navigate to %s tab and uncheck the \"MySQL Delayed Insert\" setting and save.","wassup"),'<span class="code">WassUp >>'.__("Options","wassup").' >><nobr>[<a href="'.$options_link.'&tab=3">'.__("Manage File & Data","wassup").'</a>]</nobr></span>');?></span><br/>
60
+ <strong>A #4:</strong> <span class="faq-answer"><?php echo __("Deactivate and Re-activate Wassup from Wordpress Plugins panel.","wassup");?></span><br/>
61
+ <strong>A #5:</strong> <span class="faq-answer"><?php echo sprintf(__("If you have access to MySql/phpMyAdmin on your host server, run the MySql command %s to repair and release any locks on wassup table. Note that wassup table name may be different in other Wordpress setups.","wassup"),'<code>REPAIR TABLE '.$wassup_options->wassup_table.'</code>');?></span><br/>
62
+ <strong>A #6:</strong> <span class="faq-answer"><?php echo __("As a last resort, uninstall WassUp cleanly (delete data and files) and reinstall it.","wassup");?></span></li>
63
+ <li><strong>Q:</strong> <span class="faq-question"><?php echo __("My popular web site is hosted on a shared server with restrictive database size limits. How do I prevent WassUp's table from growing too big for my allocated quota?","wassup");?></span><br/>
64
+ <strong>A:</strong> <span class="faq-answer"><?php echo sprintf(__("Navigate to %s tab and enable the setting for \"Auto Delete\" of old records and/or check the box to receive an email alert when the table size limit is exceeded.","wassup"),'<span class="code">WassUp >>'.__("Options","wassup").' >><nobr>[<a href="'.$options_link.'&tab=3">'.__("Manage File & Data","wassup").'</a>]</nobr></span>');?></span></li>
65
+ <li><strong>Q:</strong> <span class="faq-question"><?php echo __("WassUp visitor counts are much lower than actual for my website. Why is there a discrepancy and how do I fix it?","wassup");?></span><br/>
66
+ <strong>A:</strong> <span class="faq-answer"><?php echo __("Low visitor count is likely caused by page caching on your website. WassUp is incompatible with static page caching plugins such as WP Supercache, WP Cache, and Hyper Cache. To fix, uninstall your cache plugin or switch to a different (javascript-based) statistics plugin.","wassup");?></span></li>
67
+ <li><strong>Q:</strong> <span class="faq-question"><?php echo __("Is there any caching plugin that works with WassUp?","wassup");?></span><br/>
68
+ <strong>A:</strong> <span class="faq-answer"><?php echo __("There are no known caching plugins that are 100% compatible with WassUp at this time.","wassup");?></span></li>
69
+ <li><strong>Q:</strong> <span class="faq-question"><?php echo __("How can I make Wassup run faster?","wassup");?></span><br/>
70
+ <strong>A #1:</strong> <span class="faq-answer"><?php echo sprintf(__("Keep Wassup table size small by setting automatic delete of old records or do manual delete periodically under %s tab.","wassup"),'<span class="code">WassUp >>'.__("Options","wassup").' >><nobr>[<a href="'.$options_link.'&tab=3">'.__("Manage File & Data","wassup").'</a>]</nobr></span>');?></span><br/>
71
+ <strong>A #2:</strong> <span class="faq-answer"><?php echo __("If using the \"Top Stats\" widget on your site, set refresh frequency to 15 minutes or higher.","wassup");?></span><br/>
72
+ <strong>A #3:</strong> <span class="faq-answer"><?php echo sprintf(__("Reduce the number of recording exclusions (by ip/hostname/username/url) under %s tab.","wassup"),'<span class="code">WassUp >>'.__("Options","wassup").' >><nobr>[<a href="'.$options_link.'&tab=2">'.__("Filters & Exclusions","wassup").'</a>]</nobr></span>');?></span><br/>
73
+ <strong>A #4:</strong> <span class="faq-answer"><?php
74
+ $files='<span class="code"> akismet.class.php</span>';
75
+ echo sprintf(__("Delete the file(s) %s from the plugin subfolder 'lib' to stop Wassup from doing remote server queries for spam identification.","wassup"),$files);?></span><br/>
76
+ <strong>A #5:</strong> <span class="faq-answer"><?php echo sprintf(__("As a last resort, stop all spam/malware detection on new hits by unchecking \"Enable Spam and malware detection on records\" under %s tab.","wassup"),'<span class="code">WassUp >>'.__("Options","wassup").' >><nobr>['.__("General Setup","wassup").']</nobr></span>');?></span></li>
77
+ <li><strong>Q:</strong> <span class="faq-question"><?php echo __("Why does WassUp stats sometimes show more page views than actual pages clicked by a person?","wassup");?></span><br/>
78
+ <strong>A:</strong> <span class="faq-answer"><?php echo __("\"Phantom\" page views can occur when a user's browser does automatic feed retrieval, link pre-fetching, a page refresh, or automatically adds your website to it's \"Top sites\" window (Safari). WassUp tracks these because they are valid requests from the browser and are sometimes indistinguishable from user link clicks.","wassup");?></span></li>
79
+ <li><strong>Q:</strong> <span class="faq-question"><?php echo __("How do I upgrade WassUp safely when my site has frequent visitors?","wassup");?></span><br/>
80
+ <strong>A:</strong> <span class="faq-answer"><?php echo sprintf(__("To upgrade WassUp when your site is busy, you must first disable statistics recording manually under %s tab, then do the plugin upgrade, and afterwards re-enable recording manually when the upgrade is complete and the plugin is active.","wassup"),'<span class="code">WassUp >>'.__("Options","wassup").' >><nobr>[<a href="'.$options_link.'">'.__("General Setup","wassup").'</a>]</nobr></span>');?></span></li>
81
+ <li><strong>Q:</strong> <span class="faq-question"><?php echo __("An unspecified error occurred during plugin upgrade. What do I do next?","wassup");?></span><br/>
82
+ <strong>A:</strong> <span class="faq-answer"><?php echo __("Wait a few minutes. Do NOT re-attempt to upgrade nor try to activate the plugin again! An activation error with no explanation is probably due to your browser timing out, not an upgrade failure. WassUp continues it's upgrade in the background and will activate automatically when it is done. After a few minutes (5-10) has passed, revisit Wordpress admin Plugins panel and verify that Wassup plugin has activated.","wassup");?></span></li>
83
+ <li><strong>Q:</strong> <span class="faq-question"><?php echo __("How do I uninstall WassUp cleanly?","wassup");?></span><br/>
84
+ <strong>A #1:</strong> <span class="faq-answer"><?php echo __("From a single Wordpress site: navigate to Wordpress Plugins panel and deactivate WassUp plugin. Then, on the same page, click the \"delete\" link below WassUp name. This deletes both data and files permanently.","wassup");?></span><br/>
85
+ <strong>A #2:</strong> <span class="faq-answer"><?php echo __("From Wordpress multisite Network admin panel: navigate to Plugins panel and deactivate WassUp plugin. If the plugin is not \"network activated\", navigate to the main site/parent domain Plugins panel and deactivate Wassup plugin there, then return to Network admin Plugins panel. Click the \"delete\" link below WassUp name. This deletes both data and files permanently from the main site/parent domain and deletes Wassup data from all the subsites in the network.","wassup");?></span><br/>
86
+ <strong>A #3:</strong> <span class="faq-answer"><?php echo sprintf(__("From a subsite in Wordpress multisite: navigate to %s tab and check the box for \"Permanently remove WassUp data and settings\" and save. Next, go to the subsite's Plugins panel and deactivate WassUp plugin. This deletes the subsite's data permanently. No files are deleted (not needed).","wassup"),'<span class="code">WassUp >>'.__("Options","wassup").' >><nobr>[<a href="'.$options_link.'&tab=4">'.__("Uninstall","wassup").'</a>]</nobr></span>');?></span><br/>
87
+ <strong>A #4:</strong> <span class="faq-answer"><?php echo sprintf(__("From a Wordpress 2.x site: navigate to %s tab and check the box for \"Permanently remove WassUp data and settings\" and save. Next, go to Wordpress Plugins panel and deactivate WassUp plugin. This deletes the data permanently. To delete the plugin files from Wordpress 2.x, use an ftp client software on your PC or login to your host server's \"cpanel\" and use \"File Manager\" to delete the folder \"wassup\" from the %s directory on your host server.","wassup"),'<span class="code">WassUp >>'.__("Options","wassup").' >>[<a href="'.$options_link.'&tab=4">'.__("Uninstall","wassup").'</a>]</span>','<code>/wordpress/wp-content/plugins/</code>');?></span></li>
88
+ </ol>
89
+ <p class="legend"><?php echo sprintf(__("Visit the %s to find more answers to your WassUp questions.","wassup"),'<a href="http://wordpress.org/support/plugin/wassup">'.__("Plugin Forum","wassup").'</a>');?></p>
90
+ <br />
91
+ </div>
92
+ <?php
93
+ }
94
+ ?>
lib/main.php CHANGED
@@ -349,16 +349,19 @@ class wassup_checkComment{
349
  } //end if !class_exists('wDetector')
350
 
351
  /** Truncate $input string to a length of $max */
352
- function stringShortener($input, $max=0, $separator="(...)", $exceedFromEnd=0){
353
- if(!$input || !is_string($input)){
354
- return false;
 
 
355
  }
356
  //temporarily replace all %-hex chars with literals and trim the input string of whitespaces...re-encoded after truncation
357
- $instring=trim(stripslashes(rawurldecode(html_entity_decode(wassupURI::disarm_attack($input))))," +\t");
 
358
  $inputlen=strlen($instring);
359
  $max=(is_numeric($max))?(integer)$max:$inputlen;
360
  if($max <$inputlen){
361
- $separator=($separator)?$separator:"(...)";
362
  $modulus=(($max%2));
363
  $halfMax=floor($max/2);
364
  $begin="";
@@ -373,7 +376,7 @@ function stringShortener($input, $max=0, $separator="(...)", $exceedFromEnd=0){
373
  }else{
374
  $end=($exceedFromEnd)? substr($instring,$inputlen-$halfMax-1) :substr($instring,$inputlen-$halfMax);
375
  }
376
- $extracted=substr($instring, strpos($instring,$begin)+strlen($begin), $inputlen-$max );
377
  $outstring=$begin.$separator.$end;
378
  if(strlen($outstring) >= $inputlen){ //Because "Fir(...)fox" is longer than "Firefox"
379
  $outstring=$instring;
@@ -812,11 +815,12 @@ function wGeolocateIP($ip) {
812
  * Return an associative array containing the top statistics results from MySql query
813
  * parameters are: stat_type, limit, from-condition (mysql)
814
  * return array keys('top_count','top_item','visit_timestamp",["top_group","top_link"])
815
- * @author Helene D. 2009-03-04
 
816
  * @param string, integer, string
817
  * @return array
818
  */
819
- function wGetStats($stat_type, $stat_limit=10, $stat_condition="",$return_sql=false) {
820
  global $wpdb, $wassup_options, $wdebug_mode;
821
  if(!class_exists('wassupOptions')){
822
  if(!wassup_init()) return; //nothing to do
@@ -866,7 +870,7 @@ function wGetStats($stat_type, $stat_limit=10, $stat_condition="",$return_sql=fa
866
  foreach ($exclude_array as $exclude_domain) {
867
  $www='www\\.';
868
  if(preg_match('#^(www\d?\.)(.+)#i',$exclude_domain,$pcs)>0){
869
- if(!empty($pcs[1]))$www=str_replace('.','\\.',$pcs[1]);
870
  $exclude_domain=$pcs[2];
871
  }
872
  //wildcard(*) allowed in domain @since v1.9
@@ -941,7 +945,7 @@ function wGetStats($stat_type, $stat_limit=10, $stat_condition="",$return_sql=fa
941
  if($wdebug_mode)echo "\n<!-- ".__FUNCTION__." ERROR: ".$error_msg." -->";
942
  }
943
  return false;
944
- } //end function wGetStats
945
 
946
  /**
947
  * Display the top 10 stats in table columns
@@ -970,7 +974,7 @@ function wassup_top10view ($from_date="",$to_date="",$res="",$top_limit=0,$title
970
  $wassup_table=$wassup_options->wassup_table;
971
  $blogurl=wassupURI::get_sitehome();
972
  $url=parse_url($blogurl);
973
- $sitedomain=preg_replace('/^www\./i','',$url['host']);
974
 
975
  //extend php script timeout length for large tables
976
  $stimeout=ini_get("max_execution_time");
@@ -1042,7 +1046,7 @@ function wassup_top10view ($from_date="",$to_date="",$res="",$top_limit=0,$title
1042
 
1043
  //#output top 10 searches
1044
  if ($top_ten['topsearch'] == 1) {
1045
- $top_results = wGetStats("searches",$top_limit,$top_condition);
1046
  ?>
1047
  <td<?php
1048
  if($cols==0) echo ' class="firstcol"';
@@ -1078,7 +1082,7 @@ function wassup_top10view ($from_date="",$to_date="",$res="",$top_limit=0,$title
1078
  if ($top_ten['topreferrer'] == 1) {
1079
  //to prevent browser timeouts, send <!--heartbeat--> output
1080
  echo "\n<!--heartbeat-->";
1081
- $top_results = wGetStats("referrers",$top_limit,$top_condition);
1082
  ?>
1083
  <td<?php
1084
  if($cols==0) echo ' class="firstcol"';
@@ -1117,7 +1121,7 @@ function wassup_top10view ($from_date="",$to_date="",$res="",$top_limit=0,$title
1117
  $top_results=array();
1118
  if($top_ten['toprequest']==1){
1119
  echo "\n<!--heartbeat-->\n";
1120
- $top_results=wGetStats("urlrequested",$top_limit,$top_condition);
1121
  ?>
1122
  <td<?php
1123
  if($cols==0) echo ' class="firstcol"';
@@ -1155,7 +1159,7 @@ function wassup_top10view ($from_date="",$to_date="",$res="",$top_limit=0,$title
1155
  $top_results=array();
1156
  if($top_ten['topbrowser']==1){
1157
  echo "\n<!--heartbeat-->\n";
1158
- $top_results=wGetStats("browser",$top_limit,$top_condition);
1159
  ?>
1160
  <td<?php
1161
  if($cols==0) echo ' class="firstcol"';
@@ -1188,7 +1192,7 @@ function wassup_top10view ($from_date="",$to_date="",$res="",$top_limit=0,$title
1188
  $top_results=array();
1189
  if($top_ten['topos']==1){
1190
  echo "\n<!--heartbeat-->\n";
1191
- $top_results=wGetStats("os",$top_limit,$top_condition);
1192
  ?>
1193
  <td<?php
1194
  if($cols==0) echo ' class="firstcol"';
@@ -1220,7 +1224,7 @@ function wassup_top10view ($from_date="",$to_date="",$res="",$top_limit=0,$title
1220
  $top_results=array();
1221
  if($top_ten['toplocale']==1){
1222
  echo "\n<!--heartbeat-->\n";
1223
- $top_results=wGetStats("language",$top_limit,$top_condition);
1224
  ?>
1225
  <td<?php
1226
  if($cols==0) echo ' class="firstcol"';
@@ -1254,7 +1258,7 @@ function wassup_top10view ($from_date="",$to_date="",$res="",$top_limit=0,$title
1254
  $top_results=array();
1255
  if($top_ten['topvisitor']==1){
1256
  echo "\n<!--heartbeat-->\n";
1257
- $top_results=wGetStats("visitor",$top_limit,$top_condition);
1258
  ?>
1259
  <td<?php
1260
  if($cols==0) echo ' class="firstcol"';
@@ -1292,7 +1296,7 @@ function wassup_top10view ($from_date="",$to_date="",$res="",$top_limit=0,$title
1292
  $top_results=array();
1293
  if($top_ten['toppostid']==1){
1294
  echo "\n<!--heartbeat-->\n";
1295
- $top_results=wGetStats("postid",$top_limit,$top_condition);
1296
  ?>
1297
  <td<?php
1298
  if($cols==0) echo ' class="firstcol"';
@@ -1580,7 +1584,10 @@ class WassupItems {
1580
  }
1581
  // Function to show main query and count items
1582
  function calc_tot($Type,$Search="",$specific_where_clause=null,$distinct_type=null){
1583
- global $wpdb,$wdebug_mode;
 
 
 
1584
  $this->ItemsType=$Type;
1585
  $this->searchString=$Search;
1586
  $ss="";
@@ -1592,37 +1599,50 @@ class WassupItems {
1592
  }else{
1593
  $whereis= $this->_whereis . $ss;
1594
  }
1595
- $buffered="";
1596
  //abort if there is nothing in totrecords var
1597
  if(empty($this->totrecords) || !is_numeric($this->totrecords)){
1598
  return;
1599
  }
1600
- //use "sql_buffer_result" to help speed up retrieval of large datasets
1601
- if($this->totrecords >5000) $buffered="SQL_BUFFER_RESULT";
1602
  // Switch by every (global) items type (visits, pageviews, spams, etc...)
1603
  switch ($Type) {
1604
  // This is the MAIN query to show the chronology
1605
  case "main":
1606
- //extend PHP and MySql timeouts to prevent script hangs
1607
- $stimeout=ini_get("max_execution_time");
1608
- if(is_numeric($stimeout) && $stimeout >0 && $stimeout <180){
1609
- $disabled_funcs=ini_get('disable_functions');
1610
- if((empty($disabled_funcs) || strpos($disabled_funcs,'set_time_limit')===false) && !ini_get('safe_mode')){
1611
- @set_time_limit(3*60);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1612
  }
1613
  }
1614
- $mtimeout=$wpdb->get_var("SELECT @@session.wait_timeout AS mtimeout FROM dual");
1615
- if(is_numeric($mtimeout) && $mtimeout<160) $result=$wpdb->query("SET wait_timeout=160");
1616
- //main query
1617
- // "sql_buffer_result" select option helps in cases where it takes a long time to retrieve results.
1618
- $qry = sprintf("SELECT $buffered `id`, `wassup_id`, max(`timestamp`) as max_timestamp, min(`timestamp`) as min_timestamp, count(`wassup_id`) as page_hits, `ip`, `hostname`, `urlrequested`, `referrer`, GROUP_CONCAT(DISTINCT `username` ORDER BY `username` SEPARATOR ', ') AS login_name, `comment_author`, `agent`, `browser`, `os`, `spider`, `feed`, max(`spam`) AS malware_type, max(`screen_res`) as resolution, `language`, `search`, `searchengine`, `searchpage`, `url_wpid` FROM `%s` WHERE %s GROUP BY `wassup_id` ORDER BY max_timestamp DESC %s",
1619
- $this->tableName,
1620
- $whereis,
1621
- $this->Limit);
1622
- $results = $wpdb->get_results($qry);
1623
- //try without buffer
1624
- if ((is_wp_error($results) || empty($results) || !is_array($results)) && !empty($this->totrecords) && !empty($buffered)) {
1625
- $qry = sprintf("SELECT `id`, `wassup_id`, max(`timestamp`) as max_timestamp, min(`timestamp`) as min_timestamp, count(`wassup_id`) as page_hits, `ip`, `hostname`, `urlrequested`, `referrer`, GROUP_CONCAT(DISTINCT `username` ORDER BY `username` SEPARATOR ', ') AS login_name, `comment_author`, `agent`, `browser`, `os`, `spider`, `feed`, max(`spam`) AS malware_type, max(`screen_res`) as resolution, `language`, `search`, `searchengine`, `searchpage`, `url_wpid` FROM `%s` WHERE %s GROUP BY `wassup_id` ORDER BY max_timestamp DESC %s",
1626
  $this->tableName,
1627
  $whereis,
1628
  $this->Limit);
@@ -1686,6 +1706,12 @@ class WassupItems {
1686
  if(!empty($wip)&& $Search==$wip){
1687
  //for IP-only search
1688
  $ss=sprintf(" AND `ip`='%s'",$searchParam);
 
 
 
 
 
 
1689
  }else{ //for general search
1690
  $ss = sprintf(" AND (`ip` LIKE '%%%s%%' OR `hostname` LIKE '%%%s%%' OR `urlrequested` LIKE '%%%s%%' OR `agent` LIKE '%%%s%%' OR `referrer` LIKE '%%%s%%' OR `username` LIKE '%s%%' OR `comment_author` LIKE '%s%%')",
1691
  $searchParam,
349
  } //end if !class_exists('wDetector')
350
 
351
  /** Truncate $input string to a length of $max */
352
+ function stringShortener($input,$max=0,$sep='(...)',$exceedFromEnd=0){
353
+ //check for valid input
354
+ $strng=rtrim($input);
355
+ if(empty($strng) || !is_string($input)){
356
+ return esc_attr($input); //v1.9.4 bugfix
357
  }
358
  //temporarily replace all %-hex chars with literals and trim the input string of whitespaces...re-encoded after truncation
359
+ $instring=rtrim(stripslashes(rawurldecode(html_entity_decode(wassupURI::disarm_attack($input))))," +\t");
360
+ if(empty($instring)) $instring=$input; //v1.9.4 bugfix
361
  $inputlen=strlen($instring);
362
  $max=(is_numeric($max))?(integer)$max:$inputlen;
363
  if($max <$inputlen){
364
+ $separator=($sep)?$sep:'(...)';
365
  $modulus=(($max%2));
366
  $halfMax=floor($max/2);
367
  $begin="";
376
  }else{
377
  $end=($exceedFromEnd)? substr($instring,$inputlen-$halfMax-1) :substr($instring,$inputlen-$halfMax);
378
  }
379
+ //$extracted=substr($instring, strpos($instring,$begin)+strlen($begin),$inputlen-$max); //not used here
380
  $outstring=$begin.$separator.$end;
381
  if(strlen($outstring) >= $inputlen){ //Because "Fir(...)fox" is longer than "Firefox"
382
  $outstring=$instring;
815
  * Return an associative array containing the top statistics results from MySql query
816
  * parameters are: stat_type, limit, from-condition (mysql)
817
  * return array keys('top_count','top_item','visit_timestamp",["top_group","top_link"])
818
+ * function renamed from 'wGetStats' to avoid name conflicts
819
+ * @author Helene D. 2009-03-0$hostname=@gethostbyaddr($IP);4
820
  * @param string, integer, string
821
  * @return array
822
  */
823
+ function get_wassupstat($stat_type, $stat_limit=10, $stat_condition="",$return_sql=false) {
824
  global $wpdb, $wassup_options, $wdebug_mode;
825
  if(!class_exists('wassupOptions')){
826
  if(!wassup_init()) return; //nothing to do
870
  foreach ($exclude_array as $exclude_domain) {
871
  $www='www\\.';
872
  if(preg_match('#^(www\d?\.)(.+)#i',$exclude_domain,$pcs)>0){
873
+ if(!empty($pcs[1])) $www=str_replace('.','\\.',$pcs[1]);
874
  $exclude_domain=$pcs[2];
875
  }
876
  //wildcard(*) allowed in domain @since v1.9
945
  if($wdebug_mode)echo "\n<!-- ".__FUNCTION__." ERROR: ".$error_msg." -->";
946
  }
947
  return false;
948
+ } //end function get_wassupstat
949
 
950
  /**
951
  * Display the top 10 stats in table columns
974
  $wassup_table=$wassup_options->wassup_table;
975
  $blogurl=wassupURI::get_sitehome();
976
  $url=parse_url($blogurl);
977
+ $sitedomain=preg_replace('/^www?[0-9a-z]\./i','',$url['host']);
978
 
979
  //extend php script timeout length for large tables
980
  $stimeout=ini_get("max_execution_time");
1046
 
1047
  //#output top 10 searches
1048
  if ($top_ten['topsearch'] == 1) {
1049
+ $top_results=get_wassupstat("searches",$top_limit,$top_condition);
1050
  ?>
1051
  <td<?php
1052
  if($cols==0) echo ' class="firstcol"';
1082
  if ($top_ten['topreferrer'] == 1) {
1083
  //to prevent browser timeouts, send <!--heartbeat--> output
1084
  echo "\n<!--heartbeat-->";
1085
+ $top_results = get_wassupstat("referrers",$top_limit,$top_condition);
1086
  ?>
1087
  <td<?php
1088
  if($cols==0) echo ' class="firstcol"';
1121
  $top_results=array();
1122
  if($top_ten['toprequest']==1){
1123
  echo "\n<!--heartbeat-->\n";
1124
+ $top_results=get_wassupstat("urlrequested",$top_limit,$top_condition);
1125
  ?>
1126
  <td<?php
1127
  if($cols==0) echo ' class="firstcol"';
1159
  $top_results=array();
1160
  if($top_ten['topbrowser']==1){
1161
  echo "\n<!--heartbeat-->\n";
1162
+ $top_results=get_wassupstat("browser",$top_limit,$top_condition);
1163
  ?>
1164
  <td<?php
1165
  if($cols==0) echo ' class="firstcol"';
1192
  $top_results=array();
1193
  if($top_ten['topos']==1){
1194
  echo "\n<!--heartbeat-->\n";
1195
+ $top_results=get_wassupstat("os",$top_limit,$top_condition);
1196
  ?>
1197
  <td<?php
1198
  if($cols==0) echo ' class="firstcol"';
1224
  $top_results=array();
1225
  if($top_ten['toplocale']==1){
1226
  echo "\n<!--heartbeat-->\n";
1227
+ $top_results=get_wassupstat("language",$top_limit,$top_condition);
1228
  ?>
1229
  <td<?php
1230
  if($cols==0) echo ' class="firstcol"';
1258
  $top_results=array();
1259
  if($top_ten['topvisitor']==1){
1260
  echo "\n<!--heartbeat-->\n";
1261
+ $top_results=get_wassupstat("visitor",$top_limit,$top_condition);
1262
  ?>
1263
  <td<?php
1264
  if($cols==0) echo ' class="firstcol"';
1296
  $top_results=array();
1297
  if($top_ten['toppostid']==1){
1298
  echo "\n<!--heartbeat-->\n";
1299
+ $top_results=get_wassupstat("postid",$top_limit,$top_condition);
1300
  ?>
1301
  <td<?php
1302
  if($cols==0) echo ' class="firstcol"';
1584
  }
1585
  // Function to show main query and count items
1586
  function calc_tot($Type,$Search="",$specific_where_clause=null,$distinct_type=null){
1587
+ global $wpdb,$current_user,$wdebug_mode;
1588
+ //get/set user-specific wassup_settings
1589
+ if(!is_object($current_user) || empty($current_user->ID)) wp_get_current_user();
1590
+ $wassup_user_settings=get_user_option('_wassup_settings',$current_user->ID);
1591
  $this->ItemsType=$Type;
1592
  $this->searchString=$Search;
1593
  $ss="";
1599
  }else{
1600
  $whereis= $this->_whereis . $ss;
1601
  }
 
1602
  //abort if there is nothing in totrecords var
1603
  if(empty($this->totrecords) || !is_numeric($this->totrecords)){
1604
  return;
1605
  }
 
 
1606
  // Switch by every (global) items type (visits, pageviews, spams, etc...)
1607
  switch ($Type) {
1608
  // This is the MAIN query to show the chronology
1609
  case "main":
1610
+ //New in v1.9.4: use temporary table to help speed up retrieval of large datasets
1611
+ $bigdata=false;
1612
+ $totrecords=$wpdb->get_var("SELECT COUNT(*) FROM $this->tableName");
1613
+ if($totrecords >50000) $bigdata=true;
1614
+ //main query
1615
+ if($bigdata){
1616
+ //extend PHP and MySql timeouts to prevent script hangs
1617
+ $stimeout=ini_get("max_execution_time");
1618
+ if(is_numeric($stimeout) && $stimeout >0 && $stimeout <180){
1619
+ $disabled_funcs=ini_get('disable_functions');
1620
+ if((empty($disabled_funcs) || strpos($disabled_funcs,'set_time_limit')===false) && !ini_get('safe_mode')){
1621
+ @set_time_limit(3*60);
1622
+ }
1623
+ }
1624
+ $mtimeout=$wpdb->get_var("SELECT @@session.wait_timeout AS mtimeout FROM dual");
1625
+ if(is_numeric($mtimeout) && $mtimeout<160) $result=$wpdb->query("SET wait_timeout=160");
1626
+ //use a temporary table for large datasets
1627
+ $tmptable='_wassup_'.$current_user->user_login.rand();
1628
+ //create temp table of records
1629
+ $qry1 = sprintf("CREATE TEMPORARY TABLE IF NOT EXISTS %s AS (SELECT `wassup_id`, max(`timestamp`) as max_timestamp, min(`timestamp`) as min_timestamp, count(`wassup_id`) as page_hits, GROUP_CONCAT(DISTINCT `username` ORDER BY `username` SEPARATOR '| ') AS login_name, max(`spam`) AS malware_type, max(`screen_res`) as resolution FROM %s WHERE %s GROUP BY `wassup_id` ORDER BY max_timestamp DESC %s); ",
1630
+ $tmptable,
1631
+ $this->tableName,
1632
+ $whereis,
1633
+ $this->Limit);
1634
+ $results = $wpdb->query($qry1);
1635
+ //get detail data using temp table
1636
+ if(!is_wp_error($results)){
1637
+ $qry2 = sprintf("SELECT a1.*, b1.id, b1.timestamp, b1.ip, b1.hostname, b1.referrer, b1.comment_author, b1.agent, b1.browser, b1.os, b1.spider, b1.feed, b1.language, b1.search, b1.searchengine, b1.searchpage, c1.urlrequested, c1.url_wpid FROM %1\$s a1, %2\$s b1, %2\$s c1 WHERE b1.wassup_id = a1.wassup_id AND b1.timestamp = (SELECT MIN(b2.timestamp) FROM %2\$s b2 WHERE b2.wassup_id = b1.wassup_id) AND c1.wassup_id = a1.wassup_id AND c1.timestamp = (SELECT MAX(c2.timestamp) FROM %2\$s c2 WHERE c2.wassup_id = c1.wassup_id); ",
1638
+ $tmptable,
1639
+ $this->tableName);
1640
+ $results = $wpdb->get_results($qry2);
1641
  }
1642
  }
1643
+ //old query fall back for small dataset or if error
1644
+ if(!$bigdata || is_wp_error($results) || empty($results) || !is_array($results)){
1645
+ $qry = sprintf("SELECT `wassup_id`, max(`timestamp`) as max_timestamp, min(`timestamp`) as min_timestamp, count(`wassup_id`) as page_hits, GROUP_CONCAT(DISTINCT `username` ORDER BY `username` SEPARATOR '| ') AS login_name, max(`spam`) AS malware_type, `id`, `ip`, `hostname`, `urlrequested`, `referrer`, `comment_author`, `agent`, `browser`, `os`, `spider`, `feed`, max(`screen_res`) as resolution, `language`, `search`, `searchengine`, `searchpage`, `url_wpid` FROM `%s` WHERE %s GROUP BY `wassup_id` ORDER BY max_timestamp DESC %s",
 
 
 
 
 
 
 
 
 
1646
  $this->tableName,
1647
  $whereis,
1648
  $this->Limit);
1706
  if(!empty($wip)&& $Search==$wip){
1707
  //for IP-only search
1708
  $ss=sprintf(" AND `ip`='%s'",$searchParam);
1709
+ //New in v1.9.4: separate url searches
1710
+ }elseif(strpos($Search,'/')!==FALSE){
1711
+ $ss = sprintf(" AND (`urlrequested` LIKE '%%%s%%' OR `agent` LIKE '%%%s%%' OR `referrer` LIKE '%%%s%%')",
1712
+ $searchParam,
1713
+ $searchParam,
1714
+ $searchParam);
1715
  }else{ //for general search
1716
  $ss = sprintf(" AND (`ip` LIKE '%%%s%%' OR `hostname` LIKE '%%%s%%' OR `urlrequested` LIKE '%%%s%%' OR `agent` LIKE '%%%s%%' OR `referrer` LIKE '%%%s%%' OR `username` LIKE '%s%%' OR `comment_author` LIKE '%s%%')",
1717
  $searchParam,
lib/settings.php CHANGED
@@ -1,6 +1,6 @@
1
  <?php
2
  /**
3
- * Displays settings form, Wassup wp_options values, and Wassup FAQ
4
  *
5
  * @package WassUp Real-time Analytics
6
  * @subpackage settings.php
@@ -27,7 +27,6 @@ if(!empty($_SERVER['SCRIPT_FILENAME']) && realpath($_SERVER['SCRIPT_FILENAME'])=
27
  * Form to change Wassup's wp_option settings and to show plugin info.
28
  * - Shows both single site and network settings where applicable
29
  * - Shows server settings that may affect plugin performance
30
- * - Shows plugin support FAQ
31
  * - Shows ways to donate $ towards continued plugin development
32
  *
33
  * @param integer
@@ -109,7 +108,7 @@ function wassup_optionsView($tab=0) {
109
  ?>
110
  <p><?php echo sprintf(__("You can add a sidebar Widget with some useful statistics information by activating the %s widget from the %s.","wassup"), $wwidgets,$wwidgets_link);?></p>
111
  <p style="padding:10px 0 10px 0;"><?php _e('Select the options you want for WassUp plugin','wassup'); ?></p><?php
112
- if(empty($tab) || (!is_numeric($tab) && $tab!="donate" && $tab!="faq")){
113
  if(isset($_POST['delete_now'])) $tab=3;
114
  elseif(isset($_POST['submit-options'])) $tab=1;
115
  elseif(isset($_POST['submit-options2'])) $tab=2;
@@ -119,7 +118,7 @@ function wassup_optionsView($tab=0) {
119
  $tab=1;
120
  if(!empty($_REQUEST['tab'])){
121
  if (is_numeric($_REQUEST['tab']) && $_REQUEST['tab']>0 && $_REQUEST['tab']<7) $tab = (int)$_REQUEST['tab'];
122
- elseif($_REQUEST['tab']=="donate" || $_REQUEST['tab']=="faq") $tab=$_REQUEST['tab'];
123
  }
124
  }
125
  }
@@ -152,10 +151,9 @@ function wassup_optionsView($tab=0) {
152
  echo "\n";?>
153
  <li id="opt-tab4" class="optionstab <?php if($tab=="4")echo ' ui-tabs-active';?>"><a href="#wassup_opt_frag-4"><span><?php _e("Uninstall","wassup");?></span></a></li><?php
154
  }
155
- //"donate" and "faq" tabs @since v1.9
156
  echo "\n";?>
157
- <li id="opt-tab-faq" class="optionstab faqtab<?php if($tab=="faq" || $tab=="5")echo ' ui-tabs-active';?>"><a href="#wassup_opt_frag-5"><span>F.A.Q.&nbsp;</span></a></li>
158
- <li id="opt-tab-donate" class="optionstab donatetab<?php if($tab=="donate" || $tab=="6")echo ' ui-tabs-active';?>"><a href="#wassup_opt_frag-6"><span><?php _e("Donate","wassup");?></span></a></li>
159
  </ul>
160
 
161
  <div id="wassup_opt_frag-1" class="optionspanel<?php if ($tab == "1") echo ' tabselected'; ?>"><br/><?php
@@ -193,8 +191,8 @@ function wassup_optionsView($tab=0) {
193
  <?php
194
  if(version_compare($wp_version,'2.7','>=')){ ?>
195
  <h3><?php _e('User Permissions'); ?></h3>
196
- <p class="description"><?php echo __("Gives selected users read-only access to Wassup-stats dashboard submenu panels and the ability to view the dashboard widget.","wassup")." ";
197
- echo __("Only administrators have full access to Wassup main admin menu and Wassup-options panels to delete data and edit plugin settings.","wassup");?></p>
198
  <p><strong><?php _e('Set minimum user level that can view WassUp stats','wassup'); ?></strong>:
199
  <select name="wassup_userlevel">
200
  <?php $wassup_options->showFieldOptions("wassup_userlevel"); ?>
@@ -230,8 +228,8 @@ function wassup_optionsView($tab=0) {
230
  ?>
231
  <p class="indent-opt"> <input type="checkbox" name="wassup_geoip_map" value="1" <?php echo $checked; ?> />
232
  <strong><?php _e('Display a GEO IP Map in the spy visitors view','wassup'); ?></strong></p>
233
- <p class="checkbox-indent"><strong>Google Maps API <?php _e("key","wassup");?>:</strong> <input type="text" name="wassup_googlemaps_key" id="wassup_googlemaps_key" size="40" value=<?php echo '"'.esc_attr($api_key).'"'.$disabled;?> /> - <a href="<?php echo $GMapsAPI_signup;?>" target="_blank"><?php _e("signup for your key","wassup");?></a>
234
- <br/><?php echo __('Use your own key to avoid map denial when Wassup API total usage exceeds Google!Maps limits.','wassup');?>
235
  </p><br/>
236
  <?php
237
  $checked='checked="CHECKED"';
@@ -337,7 +335,13 @@ function wassup_optionsView($tab=0) {
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>
342
  <p class="description"><?php _e("You can exclude a single visitor (by IP, hostname or username) or you can exclude a specific URL request from being stored in WassUp records.","wassup");
343
  echo " ".__("Note that recording exceptions lower overall statistics counts and excessive exclusions can affect page load speed on slow host servers.","wassup");?>
@@ -346,25 +350,25 @@ function wassup_optionsView($tab=0) {
346
  <p style="padding-top:0;padding-bottom:0;"><strong><?php echo __('Enter source IPs to omit from recording','wassup');?></strong>:
347
  <br /><span style="padding-left:10px;display:block;clear:left;">
348
  <textarea name="wassup_exclude" rows="2" style="width:60%;"><?php echo esc_url($wassup_options->wassup_exclude);?></textarea></span>
349
- <span class="opt-note"><?php echo __("comma separated value (ex: 127.0.0.1, 10.0.0.1, etc...).","wassup")." ".__("A single wildcard (*) can be placed after the last '.' in the IP ('::' in IPv6) for range exclusions (ex: 10.10.100.*, 192.168.*).","wassup");?></span>
350
  </p><br/>
351
  <h3 class="indent-opt"><?php echo __("Exclude by Hostname","wassup");?></h3>
352
  <p style="padding-top:0;padding-bottom:0;"><strong><?php echo __('Enter source hostnames to omit from recording','wassup');?></strong>:
353
  <br /><span style="padding-left:10px;display:block;clear:left;">
354
  <textarea name="wassup_exclude_host" rows="2" style="width:60%;"><?php echo esc_attr($wassup_options->wassup_exclude_host);?></textarea></span>
355
- <span class="opt-note"><?php echo __("comma separated value (ex: host1.domain.com, host2.domain.net, etc...).", "wassup")." ".__("A single wildcard (*) can be placed before the first '.' for domain network exclusions (ex: *.spamdomain.com, *.hackers.malware.net).","wassup");?></span>
356
  </p><br/>
357
  <h3 class="indent-opt"><?php echo __("Exclude by Username","wassup");?></h3>
358
  <p style="padding-top:0;"><strong><?php echo __('Enter usernames to omit from recording','wassup');?></strong>:
359
  <br /><span style="padding-left:10px;display:block;clear:left;">
360
  <textarea name="wassup_exclude_user" rows="2" style="width:60%;"><?php echo esc_attr($wassup_options->wassup_exclude_user);?></textarea></span>
361
- <span class="opt-note"><?php _e("comma separated value, enter a registered user's login name (ex: bobmarley, enyabrennan, etc.)", "wassup");?></span>
362
  </p><br/>
363
  <h3 class="indent-opt"><?php echo __("Exclude by URL request","wassup");?></h3>
364
  <p style="padding-top:0;"><strong><?php echo __('Enter URLs of page/post/feed to omit from recording','wassup');?></strong>:
365
  <br /><span style="padding-left:10px;display:block;clear:left;">
366
  <textarea name="wassup_exclude_url" rows="2" style="width:60%;"><?php echo esc_url($wassup_options->wassup_exclude_url);?></textarea></span>
367
- <span class="opt-note"><?php _e("comma separated value, don't enter entire url, only the last path or some word to exclude (ex: /category/wordpress, 2007, etc...)", "wassup");?></span>
368
  </p><br />
369
  <p class="submit"><input type="submit" name="submit-options2" id="submit-options2" class="submit-opt button button-left button-primary" value="<?php _e('Save Settings','wassup');?>" onclick="jQuery('#submit-options2').val('Saving...');" />&nbsp;<input type="reset" name="reset" class="reset-opt button button-secondary" value="<?php _e('Reset','wassup');?>" /> - <input type="submit" name="reset-to-default" class="default-opt button button-caution wassup-button" value="<?php _e("Reset to Default", "wassup");?>" /></p>
370
  <p class="opt-prev-next"><a href="<?php echo $options_link.'&tab=1';?>"><?php echo '&larr;'.__("Prev","wassup");?></a> &nbsp; &nbsp; <a href="<?php echo $options_link.'&tab=3';?>"><?php echo __("Next","wassup").'&rarr;';?></a> &nbsp; &nbsp; <a href="#wassupsettings" onclick="wScrollTop();return false;"><?php echo __("Top","wassup").'&uarr;';?></a></p><br />
@@ -389,12 +393,9 @@ function wassup_optionsView($tab=0) {
389
  <?php print $alert_msg; ?>
390
  <p class="indent-opt"><input type="checkbox" name="wassup_remind_flag" value="1" <?php if($wassup_options->wassup_remind_flag==1) echo $checked;?>>
391
  <strong><?php _e('Alert me','wassup'); ?></strong> (<?php _e('email to','wassup'); ?>: <strong><?php print $adminemail; ?></strong>) <?php _e('when table reaches','wassup'); ?> <input type="text" name="wassup_remind_mb" size="3" value="<?php echo (int)$wassup_options->wassup_remind_mb; ?>"> Mb</p>
392
- <h3 class="indent-opt"><?php _e("Delete old records","wassup");?>:</h3><?php
393
- $exporturl=wp_nonce_url($options_link.'&tab=3&export=1','wassupexport-'.$current_user->ID);
394
- echo "\n";?>
395
  <p class="indent-opt description"><?php
396
- echo sprintf(__("Before deleting, you can save Wassup data in SQL 'export' format onto your local computer by clicking %s below.","wassup"), '<a class="export-wassup" href="'.$exporturl.'">'.__('export table','wassup').'</a>');
397
- echo " ".__("Reload this screen after export to view export messages.", "wassup");?></p>
398
  <p> &nbsp;<label for="do_delete_auto"><input type="checkbox" name="do_delete_auto" id="do_delete_auto" value="1" <?php if ($wassup_options->delete_auto!="never") echo $checked;?>/> <strong><?php _e("Automatically delete","wassup");?></strong>: </label>
399
  <select name="delete_filter"><?php $wassup_options->showFieldOptions("delete_filter"); ?></select>
400
  <nobr><?php _e("records older than", "wassup"); ?>
@@ -406,27 +407,43 @@ function wassup_optionsView($tab=0) {
406
  <select name="delete_manual"><?php $wassup_options->showFieldOptions("delete_auto","never");?></select>&nbsp; <?php _e("once","wassup");?></nobr>
407
  </p><?php
408
  //Delete by record ID# - for use with export @since v1.9
 
409
  $last_export_id=wassupDb::get_wassupmeta($wassup_table,'_export_recid-'.$current_user->ID);
410
  if (empty($last_export_id) || !is_numeric($last_export_id))
411
  $last_export_id=0;?>
412
  <p> &nbsp;<label for="do_delete_recid"><input type="checkbox" name="do_delete_recid" id="do_delete_recid" value="1" /> <strong><?php _e("Delete all records up to record ID#","wassup");?></strong>:</label>
413
- <input type="text" name="delete_recid" id="delete_recid" value="<?php if (!empty($_POST['delete_recid']) && is_numeric($_POST['delete_recid'])) echo $_POST['delete_recid']; else echo '0';?>" /> <nobr>(<?php echo __("Last exported record ID#:","wassup")." ".$last_export_id;?>)</nobr>
414
  </p>
415
  <p class="indent-opt"> &nbsp;<label for="do_delete_empty"><input type="checkbox" name="do_delete_empty" id="do_delete_empty" value="1"/> <strong><?php _e('Empty table','wassup');?></strong></label>
416
  (<a class="export-wassup" href="<?php echo $exporturl;?>"><?php _e('export table in SQL format','wassup');?></a>)
417
  </p>
418
  <p style="margin-top:20px;">
419
- <input type="button" name="delete_now" class="submit-opt button button-danger wassup-hot-button" value="<?php _e('Delete NOW','wassup'); ?>" onclick="submit();"/><br/><span>&nbsp;<nobr><?php _e("Action is NOT undoable!", "wassup");?></nobr></span>
 
420
  </p>
421
  <br/>
422
- <h3><?php _e("Table Export Options","wassup");?>:</h3>
423
  <p class="indent-opt description"><?php
424
- echo __("By default, known spam/malware records are omitted from Wassup's export data to reduce the risk of malware code becoming active and causing damage when records are imported into other applications.","wassup");?></p>
 
 
 
425
  <p class="indent-opt"><label for="export_spam"> <input type="checkbox" name="export_spam" value="1" <?php if(!empty($wassup_options->export_spam)) echo $checked;?>/> <strong><?php echo __("Include spam records in exported data","wassup");?></strong></label><br>
426
- <span class="opt-note"><?php if(empty($wassup_options->wassup_spamcheck)) echo __("Security NOTICE: Wassup is not configured to identify spam/malware, so all records are exported, including spam.","wassup");
427
- else echo __("Security NOTICE: Enabling this could expose your computer or website to malware when spam records are imported.","wassup");?></span></p><br/>
428
  <p class="indent-opt"><label for="export_omit_recid"> <input type="checkbox" name="export_omit_recid" value="1" <?php if(!empty($wassup_options->export_omit_recid)) echo $checked;?>/> <strong><?php echo __("Omit record ID from exported fields","wassup");?></strong></label><br/>
429
- <span class="opt-note"><?php echo __("Check this box when importing data into another Wassup table that already has records (appending data).","wassup");?></span></p>
 
 
 
 
 
 
 
 
 
 
 
430
  <br/>
431
  <h3><?php _e("Table Optimization","wassup");?>:</h3>
432
  <input type="hidden" name="wassup_dbengine" value="<?php echo $table_engine;?>"/>
@@ -589,10 +606,10 @@ function wassup_optionsView($tab=0) {
589
  echo __("no limit/unknown","wassup");
590
  }?></li>
591
  <li><strong>WordPress <?php
592
- $WPtimezone = get_option('timezone_string');
593
- if (!empty($WPtimezone))echo __('Timezone');
594
- else echo __('Time Offset','wassup');?></strong>: <?php
595
- if (!empty($WPtimezone)) {
596
  echo $WPtimezone;
597
  $wpoffset = (current_time('timestamp') - time())/3600;
598
  }else{
@@ -1001,7 +1018,7 @@ function wassup_optionsView($tab=0) {
1001
  </ul>
1002
  <br />
1003
  </div><!-- /sysinfo -->
1004
- <p class="opt-prev-next"><a href="<?php echo $options_link.'&tab=2';?>"><?php echo '&larr;'.__("Prev","wassup");?></a> &nbsp; &nbsp; <a href="<?php if($has_uninstall_tab) echo $options_link.'&tab=4';else echo $options_link.'&tab=faq';?>"><?php echo __("Next","wassup").'&rarr;';?></a> &nbsp; &nbsp; <a href="#wassupsettings" onclick="wScrollTop();return false;"><?php echo __("Top","wassup").'&uarr;';?></a></p><br />
1005
  </div>
1006
  <?php
1007
  if($has_uninstall_tab){?>
@@ -1017,70 +1034,11 @@ function wassup_optionsView($tab=0) {
1017
  <br /><p><?php echo sprintf(__("To help improve this plugin, we would appreciate your feedback at %s.","wassup"),'<a href="http://www.wpwp.org">www.wpwp.org</a>');?></p>
1018
  <br /><br />
1019
  <p class="submit"><input type="submit" name="submit-options4" id="submit-options4" class="submit-opt button button-left button-primary" value="<?php _e('Save Settings','wassup');?>" onclick="jQuery('#submit-options4').val('Saving...');"/>&nbsp;<input type="reset" name="reset" value="<?php _e('Reset','wassup');?>" class="reset-opt button button-secondary" /> - <input type="submit" name="reset-to-default" class="default-opt button button-caution wassup-button" value="<?php _e("Reset to Default", "wassup");?>" /></p>
1020
- <p class="opt-prev-next"><a href="<?php echo $options_link.'&tab=3';?>"><?php echo '&larr;'.__("Prev","wassup");?></a> &nbsp; &nbsp; <a href="<?php echo $options_link.'&tab=faq';?>"><?php echo __("Next","wassup").'&larr;';?></a> &nbsp; &nbsp; <a href="#wassupsettings" onclick="wScrollTop();return false;"><?php echo __("Top","wassup").'&uarr;';?></a></p><br />
1021
  </div><?php
1022
  } //if has_uninstall_tab
1023
  ?>
1024
- <div id="wassup_opt_frag-5" class="optionspanel faqpanel<?php if($tab=="faq" || $tab=="5") echo ' tabselected';?>">
1025
- <h3><?php echo __("Frequently Asked Questions","wassup");?></h3>
1026
- <ol>
1027
- <li><strong>Q:</strong> <span class="faq-question"><?php echo __("How do I add WassUp's chart to my admin dashboard?","wassup");?></span><br/>
1028
- <strong>A:</strong> <span class="faq-answer"><?php echo sprintf(__("Check the box for \"Enable widget/small chart in admin dashboard\" under %s tab.","wassup"),'<span class="code">WassUp >> '.__("Options","wassup").' >><nobr>['.__("General Setup","wassup").']</nobr></span>');?></span></li>
1029
- <li><strong>Q:</strong> <span class="faq-question"><?php echo __("How do I display WassUp widgets on my site?","wassup");?></span><br/>
1030
- <strong>A:</strong> <span class="faq-answer"><?php echo __("From Wordpress widgets panel, drag the \"WassUp Online\" widget or the \"Wassup Top Stats\" widget from the list of available widgets on the left into your theme's \"Sidebar\" or \"Footer\" area on the right or use the Customizer to add Wassup widgets interactively.","wassup");?></span></li>
1031
- <li><strong>Q:</strong> <span class="faq-question"><?php echo __("My Wordpress theme is not widget ready. Is it possible to display WassUp widgets on my site?","wassup");?></span><br/>
1032
- <strong>A:</strong> <span class="faq-answer"><?php echo __("Yes. Insert the template tag \"wassup_sidebar()\" into your theme's \"sidebar.php\" file to display Wassup widgets as a single combined widget on your site.","wassup");?></span></li>
1033
- <li><strong>Q:</strong> <span class="faq-question"><?php echo __("How do I view the real-time visitor geolocation map in WassUp?","wassup");?></span><br/>
1034
- <strong>A:</strong> <span class="faq-answer"><?php echo sprintf(__("Check the box for \"Display a GEO IP Map in spy visitors view\" in %s tab and save, then navigate to %s panel to see the map.","wassup"),'<span class="code">WassUp >> '.__("Options","wassup").' >><nobr>['.__("General Setup","wassup").']</nobr></span>','<span class="code">WassUp >><nobr>'.__("SPY Visitors","wassup").'</nobr></span>');?></span></li>
1035
- <li><strong>Q:</strong> <span class="faq-question"><?php echo __("The map has vanished and I get a message like: \"Google has disabled use of the Maps API for this application\". How do I fix this?","wassup");?></span><br/>
1036
- <strong>A:</strong> <span class="faq-answer"><?php echo __("Wassup-spy total daily map views has likely exceeded the Google!maps usage limit for Wassup plugin.","wassup").' ';
1037
- echo sprintf(__("To fix, sign up for a free %s for your site's sole usage and enter the key under \"Spy Visitors settings\" in %s tab.","wassup"),'<a href="'.$GMapsAPI_signup.'">Google!Maps API '.__("Key","wassup").'</a>','<span class="code">WassUp >>'.__("Options","wassup").' >><nobr>['.__("General Setup","wassup").']</nobr></span>');?></span></li>
1038
- <li><strong>Q:</strong> <span class="faq-question"><?php echo __("How do I exclude a visitor from being recorded?","wassup");?></span><br/>
1039
- <strong>A:</strong> <span class="faq-answer"><?php echo sprintf(__("Navigate to %s tab and enter a visitor's username, IP address, or hostname into the appropriate text area for that \"Recording Exclusion\" type.","wassup"),'<span class="code">WassUp >>'.__("Options","wassup").' >><nobr>['.__("Filters & Exclusions","wassup").']</nobr></span>');?></span></li>
1040
- <li><strong>Q:</strong> <span class="faq-question"><?php echo __("How do I stop (temporarily) WassUp from recording new visits on my site?","wassup");?></span><br/>
1041
- <strong>A:</strong> <span class="faq-answer"><?php echo sprintf(__("Uncheck the box for \"Enable statistics recording\" under %s tab.","wassup"),'<span class="code">WassUp >>'.__("Options","wassup").' >><nobr>['.__("General Setup","wassup").']</nobr></span>');?></span></li>
1042
- <li><strong>Q:</strong> <span class="faq-question"><?php echo __("In Wordpress multisite, how do I stop (temporarily) WassUp from recording new visits on all sites in the network?","wassup");?></span><br/>
1043
- <strong>A#1:</strong> <span class="faq-answer"><?php echo sprintf(__("If plugin is \"network activated\", login as network admin, go to the Network admin dashboard, navigate to %s tab and Uncheck the box for \"Enable Statistics Recording for network\" and save.","wassup"),'<span class="code">WassUp >>'.__("Options","wassup").' >>['.__("General Setup","wassup").']</span>');?></span><br/>
1044
- <strong>A#2:</strong> <span class="faq-answer"><?php echo sprintf(__("If plugin is NOT \"network activated\", login as network admin, go to the main site/parent domain admin dashboard, navigate to %s tab, then Uncheck the box for \"Enable Statistics Recording for network\" and save.","wassup"),'<span class="code">WassUp >>'.__("Options","wassup").' >><nobr>['.__("General Setup","wassup").']</nobr></span>');?></span>
1045
- </li>
1046
- <li><strong>Q:</strong> <span class="faq-question"><?php echo __("No data is being displayed; or \"Visitor Details\" panel show 0 records for the last 24 hours. How do I fix this?","wassup");?></span><br/>
1047
- <strong>A #1:</strong> <span class="faq-answer"><?php echo sprintf(__("Check the box for \"Enable statistics recording\" setting under %s tab and save.","wassup"),'<span class="code">WassUp >>'.__("Options","wassup").' >><nobr>['.__("General Setup","wassup").']</nobr></span>');?></span><br/>
1048
- <strong>A #2:</strong> <span class="faq-answer"><?php echo sprintf(__("Click the [Reset to Default] button under %s tab.","wassup"),'<span class="code">WassUp >>'.__("Options","wassup").' >><nobr>['.__("General Setup","wassup").']</nobr></span>');?></span><br/>
1049
- <strong>A #3:</strong> <span class="faq-answer"><?php echo sprintf(__("Navigate to %s tab and uncheck the \"MySQL Delayed Insert\" setting and save.","wassup"),'<span class="code">WassUp >>'.__("Options","wassup").' >><nobr>['.__("Manage File & Data","wassup").']</nobr></span>');?></span><br/>
1050
- <strong>A #4:</strong> <span class="faq-answer"><?php echo __("Deactivate and Re-activate Wassup from Wordpress Plugins panel.","wassup");?></span><br/>
1051
- <strong>A #5:</strong> <span class="faq-answer"><?php echo sprintf(__("If you have access to MySql/phpMyAdmin on your host server, run the MySql command %s to repair and release any locks on wassup table. Note that wassup table name may be different in other Wordpress setups.","wassup"),'<code>REPAIR TABLE '.$wassup_options->wassup_table.'</code>');?></span><br/>
1052
- <strong>A #6:</strong> <span class="faq-answer"><?php echo __("As a last resort, uninstall WassUp cleanly (delete data and files) and reinstall it.","wassup");?></span></li>
1053
- <li><strong>Q:</strong> <span class="faq-question"><?php echo __("My popular web site is hosted on a shared server with restrictive database size limits. How do I prevent WassUp's table from growing too big for my allocated quota?","wassup");?></span><br/>
1054
- <strong>A:</strong> <span class="faq-answer"><?php echo sprintf(__("Navigate to %s tab and enable the setting for \"Auto Delete\" of old records and/or check the box to receive an email alert when the table size limit is exceeded.","wassup"),'<span class="code">WassUp >>'.__("Options","wassup").' >><nobr>['.__("Manage File & Data","wassup").']</nobr></span>');?></span></li>
1055
- <li><strong>Q:</strong> <span class="faq-question"><?php echo __("WassUp visitor counts are much lower than actual for my website. Why is there a discrepancy and how do I fix it?","wassup");?></span><br/>
1056
- <strong>A:</strong> <span class="faq-answer"><?php echo __("Low visitor count is likely caused by page caching on your website. WassUp is incompatible with static page caching plugins such as WP Supercache, WP Cache, and Hyper Cache. To fix, uninstall your cache plugin or switch to a different (javascript-based) statistics plugin.","wassup");?></span></li>
1057
- <li><strong>Q:</strong> <span class="faq-question"><?php echo __("Is there any caching plugin that works with WassUp?","wassup");?></span><br/>
1058
- <strong>A:</strong> <span class="faq-answer"><?php echo sprintf(__("%s is the only caching plugin verified to work with WassUp.","wassup"),'<a href="http://wordpress.org/extend/plugins/wp-widget-cache/">WP Widget Cache</a>');?></span></li>
1059
- <li><strong>Q:</strong> <span class="faq-question"><?php echo __("How can I make Wassup run faster?","wassup");?></span><br/>
1060
- <strong>A #1:</strong> <span class="faq-answer"><?php echo sprintf(__("Keep Wassup table size small by setting automatic delete of old records or do manual delete periodically under %s tab.","wassup"),'<span class="code">WassUp >>'.__("Options","wassup").' >><nobr>['.__("Manage File & Data","wassup").']</nobr></span>');?></span><br/>
1061
- <strong>A #2:</strong> <span class="faq-answer"><?php echo __("If using the \"Top Stats\" widget on your site, set refresh frequency to 15 minutes or higher.","wassup");?></span><br/>
1062
- <strong>A #3:</strong> <span class="faq-answer"><?php echo sprintf(__("Reduce the number of recording exclusions (by ip/hostname/username/url) under %s tab.","wassup"),'<span class="code">WassUp >>'.__("Options","wassup").' >><nobr>['.__("Filters & Exclusions","wassup").']</nobr></span>');?></span><br/>
1063
- <strong>A #4:</strong> <span class="faq-answer"><?php
1064
- $files='<span class="code"> akismet.class.php</span>';
1065
- echo sprintf(__("Delete the file(s) %s from the plugin subfolder 'lib' to stop Wassup from doing remote server queries for spam identification.","wassup"),$files);?></span><br/>
1066
- <strong>A #5:</strong> <span class="faq-answer"><?php echo sprintf(__("As a last resort, stop all spam/malware detection on new hits by unchecking \"Enable Spam and malware detection on records\" under %s tab.","wassup"),'<span class="code">WassUp >>'.__("Options","wassup").' >><nobr>['.__("General Setup","wassup").']</nobr></span>');?></span></li>
1067
- <li><strong>Q:</strong> <span class="faq-question"><?php echo __("Why does WassUp stats sometimes show more page views than actual pages clicked by a person?","wassup");?></span><br/>
1068
- <strong>A:</strong> <span class="faq-answer"><?php echo __("\"Phantom\" page views can occur when a user's browser does automatic feed retrieval, link pre-fetching, a page refresh, or automatically adds your website to it's \"Top sites\" window (Safari). WassUp tracks these because they are valid requests from the browser and are sometimes indistinguishable from user link clicks.","wassup");?></span></li>
1069
- <li><strong>Q:</strong> <span class="faq-question"><?php echo __("How do I upgrade WassUp safely when my site has frequent visitors?","wassup");?></span><br/>
1070
- <strong>A:</strong> <span class="faq-answer"><?php echo sprintf(__("To upgrade WassUp when your site is busy, you must first disable statistics recording manually under %s tab, then do the plugin upgrade, and afterwards re-enable recording manually when the upgrade is complete and the plugin is active.","wassup"),'<span class="code">WassUp >>'.__("Options","wassup").' >><nobr>['.__("General Setup","wassup").']</nobr></span>');?></span></li>
1071
- <li><strong>Q:</strong> <span class="faq-question"><?php echo __("An unspecified error occurred during plugin upgrade. What do I do next?","wassup");?></span><br/>
1072
- <strong>A:</strong> <span class="faq-answer"><?php echo __("Wait a few minutes. Do NOT re-attempt to upgrade nor try to activate the plugin again! An activation error with no explanation is probably due to your browser timing out, not an upgrade failure. WassUp continues it's upgrade in the background and will activate automatically when it is done. After a few minutes (5-10) has passed, revisit Wordpress admin Plugins panel and verify that Wassup plugin has activated.","wassup");?></span></li>
1073
- <li><strong>Q:</strong> <span class="faq-question"><?php echo __("How do I uninstall WassUp cleanly?","wassup");?></span><br/>
1074
- <strong>A #1:</strong> <span class="faq-answer"><?php echo __("From a single Wordpress site: navigate to Wordpress Plugins panel and deactivate WassUp plugin. Then, on the same page, click the \"delete\" link below WassUp name. This deletes both data and files permanently.","wassup");?></span><br/>
1075
- <strong>A #2:</strong> <span class="faq-answer"><?php echo __("From Wordpress multisite Network admin panel: navigate to Plugins panel and deactivate WassUp plugin. If the plugin is not \"network activated\", navigate to the main site/parent domain Plugins panel and deactivate Wassup plugin there, then return to Network admin Plugins panel. Click the \"delete\" link below WassUp name. This deletes both data and files permanently from the main site/parent domain and deletes Wassup data from all the subsites in the network.","wassup");?></span><br/>
1076
- <strong>A #3:</strong> <span class="faq-answer"><?php echo sprintf(__("From a subsite in Wordpress multisite: navigate to %s tab and check the box for \"Permanently remove WassUp data and settings\" and save. Next, go to the subsite's Plugins panel and deactivate WassUp plugin. This deletes the subsite's data permanently. No files are deleted (not needed).","wassup"),'<span class="code">WassUp >>'.__("Options","wassup").' >><nobr>['.__("Uninstall","wassup").']</nobr></span>');?></span><br/>
1077
- <strong>A #4:</strong> <span class="faq-answer"><?php echo sprintf(__("From a Wordpress 2.x site: navigate to %s tab and check the box for \"Permanently remove WassUp data and settings\" and save. Next, go to Wordpress Plugins panel and deactivate WassUp plugin. This deletes the data permanently. To delete the plugin files from Wordpress 2.x, use an ftp client software on your PC or login to your host server's \"cpanel\" and use \"File Manager\" to delete the folder \"wassup\" from the %s directory on your host server.","wassup"),'<span class="code">WassUp >>'.__("Options","wassup").' >>['.__("Uninstall","wassup").']</span>','<code>/wordpress/wp-content/plugins/</code>');?></span></li>
1078
- </ol>
1079
- <p class="legend"><?php echo sprintf(__("Visit the %s to find more answers to your WassUp questions.","wassup"),'<a href="http://wordpress.org/support/plugin/wassup">'.__("Plugin Forum","wassup").'</a>');?></p>
1080
- <br />
1081
- <p class="opt-prev-next"><a href="<?php if($has_uninstall_tab) echo $options_link.'&tab=4';else echo $options_link.'&tab=3';?>"><?php echo '&larr;'.__("Prev","wassup");?></a> &nbsp; &nbsp; <a href="<?php echo $options_link.'&tab=donate';?>"><?php echo __("Next","wassup").'&rarr;';?></a> &nbsp; &nbsp; <a href="#wassupsettings" onclick="wScrollTop();return false;"><?php echo __("Top","wassup").'&uarr;';?></a></p><br />
1082
- </div>
1083
- <div id="wassup_opt_frag-6" class="optionspanel donatepanel<?php if($tab=="donate" || $tab=="6") echo ' tabselected';?>">
1084
  <h3><?php _e("How you can donate","wassup"); ?></h3>
1085
  <p><?php echo __("If you like this plugin, please consider making a donation to help keep it's development active.","wassup");?></p>
1086
  <div class="donate-block">
@@ -1098,12 +1056,11 @@ function wassup_optionsView($tab=0) {
1098
  if (file_exists(WASSUPDIR."/lib/donate.php")) include_once(WASSUPDIR."/lib/donate.php");?>
1099
  </div>
1100
  <br />
1101
- <p class="opt-prev-next"><a href="<?php echo $options_link.'&tab=faq';?>"><?php echo '&larr;'.__("Prev","wassup");?></a> &nbsp; &nbsp; <a href="<?php echo $options_link.'&tab=1';?>"><?php echo __("Next","wassup").'&rarr;';?></a> &nbsp; &nbsp; <a href="#wassupsettings" onclick="wScrollTop();return false;"><?php echo __("Top","wassup").'&uarr;';?></a></p><br />
1102
  </div>
1103
  </div><!-- /#tabcontainer -->
1104
  </form>
1105
  <br />
1106
- <script type="text/javascript">jQuery("a#BCdonate").toggle(function(){jQuery('div#bc_placeholder').slideDown("slow");},function(){jQuery('div#bc_placeholder').slideUp("slow");return false;});</script>
1107
  <?php
1108
  echo "\n";
1109
  } //end wassup_optionsView
1
  <?php
2
  /**
3
+ * Displays settings form, Wassup wp_options values, and donate buttons
4
  *
5
  * @package WassUp Real-time Analytics
6
  * @subpackage settings.php
27
  * Form to change Wassup's wp_option settings and to show plugin info.
28
  * - Shows both single site and network settings where applicable
29
  * - Shows server settings that may affect plugin performance
 
30
  * - Shows ways to donate $ towards continued plugin development
31
  *
32
  * @param integer
108
  ?>
109
  <p><?php echo sprintf(__("You can add a sidebar Widget with some useful statistics information by activating the %s widget from the %s.","wassup"), $wwidgets,$wwidgets_link);?></p>
110
  <p style="padding:10px 0 10px 0;"><?php _e('Select the options you want for WassUp plugin','wassup'); ?></p><?php
111
+ if(empty($tab) || (!is_numeric($tab) && $tab!="donate")){
112
  if(isset($_POST['delete_now'])) $tab=3;
113
  elseif(isset($_POST['submit-options'])) $tab=1;
114
  elseif(isset($_POST['submit-options2'])) $tab=2;
118
  $tab=1;
119
  if(!empty($_REQUEST['tab'])){
120
  if (is_numeric($_REQUEST['tab']) && $_REQUEST['tab']>0 && $_REQUEST['tab']<7) $tab = (int)$_REQUEST['tab'];
121
+ elseif($_REQUEST['tab']=="donate") $tab=$_REQUEST['tab'];
122
  }
123
  }
124
  }
151
  echo "\n";?>
152
  <li id="opt-tab4" class="optionstab <?php if($tab=="4")echo ' ui-tabs-active';?>"><a href="#wassup_opt_frag-4"><span><?php _e("Uninstall","wassup");?></span></a></li><?php
153
  }
154
+ //"donate" tab @since v1.9 (separate faq submenu in v1.9.4)
155
  echo "\n";?>
156
+ <li id="opt-tab-donate" class="optionstab donatetab<?php if($tab=="donate" || $tab=="5")echo ' ui-tabs-active';?>"><a href="#wassup_opt_frag-5"><span><?php _e("Donate","wassup");?></span></a></li>
 
157
  </ul>
158
 
159
  <div id="wassup_opt_frag-1" class="optionspanel<?php if ($tab == "1") echo ' tabselected'; ?>"><br/><?php
191
  <?php
192
  if(version_compare($wp_version,'2.7','>=')){ ?>
193
  <h3><?php _e('User Permissions'); ?></h3>
194
+ <p class="description"><?php echo __("Gives selected users view-only access to Wassup's stats dashboard menu, some submenu panels, and the dashboard widget.","wassup")." ";
195
+ echo __("Only administrators can access Wassup's main menu and all it's submenu panels including the options panel to delete data and edit plugin settings.","wassup");?></p>
196
  <p><strong><?php _e('Set minimum user level that can view WassUp stats','wassup'); ?></strong>:
197
  <select name="wassup_userlevel">
198
  <?php $wassup_options->showFieldOptions("wassup_userlevel"); ?>
228
  ?>
229
  <p class="indent-opt"> <input type="checkbox" name="wassup_geoip_map" value="1" <?php echo $checked; ?> />
230
  <strong><?php _e('Display a GEO IP Map in the spy visitors view','wassup'); ?></strong></p>
231
+ <p class="checkbox-indent"><strong>Google Maps API <?php _e("key","wassup");?>:</strong> <input type="text" name="wassup_googlemaps_key" id="wassup_googlemaps_key" size="40" value=<?php echo '"'.esc_attr($api_key).'"'.$disabled;?> /> - <a href="<?php echo $GMapsAPI_signup;?>" target="_blank"><?php _e("signup for your free key","wassup");?></a>
232
+ <br/><?php echo __('An API key is required to view the map.','wassup');?>
233
  </p><br/>
234
  <?php
235
  $checked='checked="CHECKED"';
335
  <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 />
336
  <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 />
337
  </span>
338
+ </p>
339
+ <p class="opt-note" style="display:block;"><strong> &nbsp; <?php echo __('Referrer spam whitelist','wassup');?></strong><br/>
340
+ <span style="padding-left:15px;"><?php _e('Enter referrer domains that were incorrectly labeled as "Referrer Spam" in "Visitor Detals":','wassup');?><br/>
341
+ <textarea name="refspam_whitelist" rows="1" style="width:66%;margin-left:15px;"><?php if(!empty($wassup_options->refspam_whitelist)) echo esc_attr($wassup_options->refspam_whitelist); ?></textarea><br/>
342
+ <span style="padding-left:15px;"> &nbsp;<?php echo __("comma separated value. Enter whole domains only. Wildcards will be ignored.","wassup")." (ex: referrer.net, referrer.domain.com). ";?></span>
343
  </p><br />
344
+ <hr/>
345
  <h3><?php _e('Recording Exceptions','wassup');?></h3>
346
  <p class="description"><?php _e("You can exclude a single visitor (by IP, hostname or username) or you can exclude a specific URL request from being stored in WassUp records.","wassup");
347
  echo " ".__("Note that recording exceptions lower overall statistics counts and excessive exclusions can affect page load speed on slow host servers.","wassup");?>
350
  <p style="padding-top:0;padding-bottom:0;"><strong><?php echo __('Enter source IPs to omit from recording','wassup');?></strong>:
351
  <br /><span style="padding-left:10px;display:block;clear:left;">
352
  <textarea name="wassup_exclude" rows="2" style="width:60%;"><?php echo esc_url($wassup_options->wassup_exclude);?></textarea></span>
353
+ <span class="opt-note"> <?php echo __("comma separated value (ex: 127.0.0.1, 10.0.0.1, etc...).","wassup")." ".__("A single wildcard (*) can be placed after the last '.' in the IP ('::' in IPv6) for range exclusions (ex: 10.10.100.*, 192.168.*).","wassup");?></span>
354
  </p><br/>
355
  <h3 class="indent-opt"><?php echo __("Exclude by Hostname","wassup");?></h3>
356
  <p style="padding-top:0;padding-bottom:0;"><strong><?php echo __('Enter source hostnames to omit from recording','wassup');?></strong>:
357
  <br /><span style="padding-left:10px;display:block;clear:left;">
358
  <textarea name="wassup_exclude_host" rows="2" style="width:60%;"><?php echo esc_attr($wassup_options->wassup_exclude_host);?></textarea></span>
359
+ <span class="opt-note"> <?php echo __("comma separated value (ex: host1.domain.com, host2.domain.net, etc...).", "wassup")." ".__("A single wildcard (*) can be placed before the first '.' for domain network exclusions (ex: *.spamdomain.com, *.hackers.malware.net).","wassup");?></span>
360
  </p><br/>
361
  <h3 class="indent-opt"><?php echo __("Exclude by Username","wassup");?></h3>
362
  <p style="padding-top:0;"><strong><?php echo __('Enter usernames to omit from recording','wassup');?></strong>:
363
  <br /><span style="padding-left:10px;display:block;clear:left;">
364
  <textarea name="wassup_exclude_user" rows="2" style="width:60%;"><?php echo esc_attr($wassup_options->wassup_exclude_user);?></textarea></span>
365
+ <span class="opt-note"> <?php _e("comma separated value, enter a registered user's login name (ex: bobmarley, enyabrennan, etc.)", "wassup");?></span>
366
  </p><br/>
367
  <h3 class="indent-opt"><?php echo __("Exclude by URL request","wassup");?></h3>
368
  <p style="padding-top:0;"><strong><?php echo __('Enter URLs of page/post/feed to omit from recording','wassup');?></strong>:
369
  <br /><span style="padding-left:10px;display:block;clear:left;">
370
  <textarea name="wassup_exclude_url" rows="2" style="width:60%;"><?php echo esc_url($wassup_options->wassup_exclude_url);?></textarea></span>
371
+ <span class="opt-note"> <?php _e("comma separated value, don't enter entire url, only the last path or some word to exclude (ex: /category/wordpress, 2007, etc...)", "wassup");?></span>
372
  </p><br />
373
  <p class="submit"><input type="submit" name="submit-options2" id="submit-options2" class="submit-opt button button-left button-primary" value="<?php _e('Save Settings','wassup');?>" onclick="jQuery('#submit-options2').val('Saving...');" />&nbsp;<input type="reset" name="reset" class="reset-opt button button-secondary" value="<?php _e('Reset','wassup');?>" /> - <input type="submit" name="reset-to-default" class="default-opt button button-caution wassup-button" value="<?php _e("Reset to Default", "wassup");?>" /></p>
374
  <p class="opt-prev-next"><a href="<?php echo $options_link.'&tab=1';?>"><?php echo '&larr;'.__("Prev","wassup");?></a> &nbsp; &nbsp; <a href="<?php echo $options_link.'&tab=3';?>"><?php echo __("Next","wassup").'&rarr;';?></a> &nbsp; &nbsp; <a href="#wassupsettings" onclick="wScrollTop();return false;"><?php echo __("Top","wassup").'&uarr;';?></a></p><br />
393
  <?php print $alert_msg; ?>
394
  <p class="indent-opt"><input type="checkbox" name="wassup_remind_flag" value="1" <?php if($wassup_options->wassup_remind_flag==1) echo $checked;?>>
395
  <strong><?php _e('Alert me','wassup'); ?></strong> (<?php _e('email to','wassup'); ?>: <strong><?php print $adminemail; ?></strong>) <?php _e('when table reaches','wassup'); ?> <input type="text" name="wassup_remind_mb" size="3" value="<?php echo (int)$wassup_options->wassup_remind_mb; ?>"> Mb</p>
396
+ <h3 class="indent-opt"><?php _e("Delete old records","wassup");?>:</h3>
 
 
397
  <p class="indent-opt description"><?php
398
+ echo __("Before deleting, you can backup Wassup table by clicking the \"Export SQL\" button below.","wassup");?></p>
 
399
  <p> &nbsp;<label for="do_delete_auto"><input type="checkbox" name="do_delete_auto" id="do_delete_auto" value="1" <?php if ($wassup_options->delete_auto!="never") echo $checked;?>/> <strong><?php _e("Automatically delete","wassup");?></strong>: </label>
400
  <select name="delete_filter"><?php $wassup_options->showFieldOptions("delete_filter"); ?></select>
401
  <nobr><?php _e("records older than", "wassup"); ?>
407
  <select name="delete_manual"><?php $wassup_options->showFieldOptions("delete_auto","never");?></select>&nbsp; <?php _e("once","wassup");?></nobr>
408
  </p><?php
409
  //Delete by record ID# - for use with export @since v1.9
410
+ $exporturl=wp_nonce_url($options_link.'&tab=3&export=1','wassupexport-'.$current_user->ID);
411
  $last_export_id=wassupDb::get_wassupmeta($wassup_table,'_export_recid-'.$current_user->ID);
412
  if (empty($last_export_id) || !is_numeric($last_export_id))
413
  $last_export_id=0;?>
414
  <p> &nbsp;<label for="do_delete_recid"><input type="checkbox" name="do_delete_recid" id="do_delete_recid" value="1" /> <strong><?php _e("Delete all records up to record ID#","wassup");?></strong>:</label>
415
+ <input type="text" name="delete_recid" id="delete_recid" value="<?php if (!empty($_POST['delete_recid']) && is_numeric($_POST['delete_recid'])) echo $_POST['delete_recid']; else echo '0';?>" /> <nobr>(<?php echo __("Last SQL export record ID#:","wassup")." ".$last_export_id;?>)</nobr>
416
  </p>
417
  <p class="indent-opt"> &nbsp;<label for="do_delete_empty"><input type="checkbox" name="do_delete_empty" id="do_delete_empty" value="1"/> <strong><?php _e('Empty table','wassup');?></strong></label>
418
  (<a class="export-wassup" href="<?php echo $exporturl;?>"><?php _e('export table in SQL format','wassup');?></a>)
419
  </p>
420
  <p style="margin-top:20px;">
421
+ <input type="button" name="delete_now" class="submit-opt button button-danger wassup-hot-button" value="<?php _e('Delete NOW','wassup'); ?>" onclick="submit();"/><br/>
422
+ <span>&nbsp;<nobr><?php _e("Action is NOT undoable!", "wassup");?></nobr></span>
423
  </p>
424
  <br/>
425
+ <h3><?php _e("Table Export","wassup");?>:</h3>
426
  <p class="indent-opt description"><?php
427
+ echo __("Wassup can export table records in SQL or CSV format.","wassup").' ';
428
+ echo __("An automatic file download will start after table data is retrieved successfully.","wassup").' ';
429
+ echo __("By default, exported records excludes known spam/malware to prevent propagation of malware.","wassup").' ';
430
+ ?></p>
431
  <p class="indent-opt"><label for="export_spam"> <input type="checkbox" name="export_spam" value="1" <?php if(!empty($wassup_options->export_spam)) echo $checked;?>/> <strong><?php echo __("Include spam records in exported data","wassup");?></strong></label><br>
432
+ <span class="opt-note"><?php if(!empty($wassup_options->wassup_spamcheck)) echo __("Security NOTICE: Enabling this could expose your computer or website to malware when spam records are imported.","wassup"); //v1.9.4 bugfix
433
+ ?></span></p><br/>
434
  <p class="indent-opt"><label for="export_omit_recid"> <input type="checkbox" name="export_omit_recid" value="1" <?php if(!empty($wassup_options->export_omit_recid)) echo $checked;?>/> <strong><?php echo __("Omit record ID from exported fields","wassup");?></strong></label><br/>
435
+ <span class="opt-note"><?php echo __("Check this box when importing SQL data into another Wassup table that already has records (appending data).","wassup");?></span><br/>
436
+ </p>
437
+ <p style="margin-top:15px;margin-left:-5px;">
438
+ <span style="padding-top:3px;display:block;"> &nbsp;<?php
439
+ echo __('IMPORTANT','wassup').':'.__("Click \"Save Settings\" to apply option changes before export.","wassup").' ';?></span><br/>
440
+ <a id="<?php $sqlid='sql'.sprintf('%06d',rand(1,999999));echo $sqlid;?>" class="export-link button button-secondary" href="<?php echo wp_nonce_url($options_link.'&tab=3&export=sql&mid='.$sqlid,'wassupexport-'.$current_user->ID);?>"><?php _e('Export SQL','wassup');?></a> &nbsp;
441
+ <a id="<?php $csvid='csv'.sprintf('%06d',rand(1,999999));echo $csvid;?>" class="export-link button button-secondary" href="<?php echo wp_nonce_url($options_link.'&tab=3&export=csv&mid='.$csvid,'wassupexport-'.$current_user->ID);?>"><?php _e('Export CSV','wassup');?></a><br/>
442
+ <span style="padding-top:3px;display:block;"> &nbsp;<?php
443
+ echo __("Export of large datasets may be truncated.","wassup").' ';
444
+ ?></span><br/>
445
+ </p>
446
+ <div id="wassup-dialog" class="ui-dialog" title="WassUp <?php echo __('Export','wassup');?>"><p><?php echo __("Retrieving data for export. Download will start soon. Please wait.","wassup");?> </p></div>
447
  <br/>
448
  <h3><?php _e("Table Optimization","wassup");?>:</h3>
449
  <input type="hidden" name="wassup_dbengine" value="<?php echo $table_engine;?>"/>
606
  echo __("no limit/unknown","wassup");
607
  }?></li>
608
  <li><strong>WordPress <?php
609
+ $WPtimezone=get_option('timezone_string');
610
+ if(!empty($WPtimezone)) echo __('Timezone');
611
+ else echo __('Time Offset','wassup');?></strong>:<?php
612
+ if(!empty($WPtimezone)){
613
  echo $WPtimezone;
614
  $wpoffset = (current_time('timestamp') - time())/3600;
615
  }else{
1018
  </ul>
1019
  <br />
1020
  </div><!-- /sysinfo -->
1021
+ <p class="opt-prev-next"><a href="<?php echo $options_link.'&tab=2';?>"><?php echo '&larr;'.__("Prev","wassup");?></a> &nbsp; &nbsp; <a href="<?php if($has_uninstall_tab) echo $options_link.'&tab=4';else echo $options_link.'&tab=donate';?>"><?php echo __("Next","wassup").'&rarr;';?></a> &nbsp; &nbsp; <a href="#wassupsettings" onclick="wScrollTop();return false;"><?php echo __("Top","wassup").'&uarr;';?></a></p><br />
1022
  </div>
1023
  <?php
1024
  if($has_uninstall_tab){?>
1034
  <br /><p><?php echo sprintf(__("To help improve this plugin, we would appreciate your feedback at %s.","wassup"),'<a href="http://www.wpwp.org">www.wpwp.org</a>');?></p>
1035
  <br /><br />
1036
  <p class="submit"><input type="submit" name="submit-options4" id="submit-options4" class="submit-opt button button-left button-primary" value="<?php _e('Save Settings','wassup');?>" onclick="jQuery('#submit-options4').val('Saving...');"/>&nbsp;<input type="reset" name="reset" value="<?php _e('Reset','wassup');?>" class="reset-opt button button-secondary" /> - <input type="submit" name="reset-to-default" class="default-opt button button-caution wassup-button" value="<?php _e("Reset to Default", "wassup");?>" /></p>
1037
+ <p class="opt-prev-next"><a href="<?php echo $options_link.'&tab=3';?>"><?php echo '&larr;'.__("Prev","wassup");?></a> &nbsp; &nbsp; <a href="<?php echo $options_link.'&tab=donate';?>"><?php echo __("Next","wassup").'&larr;';?></a> &nbsp; &nbsp; <a href="#wassupsettings" onclick="wScrollTop();return false;"><?php echo __("Top","wassup").'&uarr;';?></a></p><br />
1038
  </div><?php
1039
  } //if has_uninstall_tab
1040
  ?>
1041
+ <div id="wassup_opt_frag-5" class="optionspanel donatepanel<?php if($tab=="donate" || $tab=="5") echo ' tabselected';?>">
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1042
  <h3><?php _e("How you can donate","wassup"); ?></h3>
1043
  <p><?php echo __("If you like this plugin, please consider making a donation to help keep it's development active.","wassup");?></p>
1044
  <div class="donate-block">
1056
  if (file_exists(WASSUPDIR."/lib/donate.php")) include_once(WASSUPDIR."/lib/donate.php");?>
1057
  </div>
1058
  <br />
1059
+ <p class="opt-prev-next"><a href="<?php if($has_uninstall_tab) echo $options_link.'&tab=4';else echo $options_link.'&tab=3';?>"><?php echo '&larr;'.__("Prev","wassup");?></a> &nbsp; &nbsp; <a href="<?php echo $options_link.'&tab=1';?>"><?php echo __("Next","wassup").'&rarr;';?></a> &nbsp; &nbsp; <a href="#wassupsettings" onclick="wScrollTop();return false;"><?php echo __("Top","wassup").'&uarr;';?></a></p><br />
1060
  </div>
1061
  </div><!-- /#tabcontainer -->
1062
  </form>
1063
  <br />
 
1064
  <?php
1065
  echo "\n";
1066
  } //end wassup_optionsView
lib/upgrade.php CHANGED
@@ -155,8 +155,6 @@ function wassup_settings_install($wassup_table=""){
155
  }
156
  }
157
  } //!is_multisite
158
- //clear table status cache for table upgrade
159
- //$result=wassupDb::clear_cache('_table_status'); //-redundant...all cache is cleared in wassup_updateTable() function
160
  } //end if wassup_alert_message
161
  $wassup_options->wassup_table= $wassup_table;
162
  $wassup_options->wassup_upgraded= time();
@@ -478,6 +476,16 @@ function wassup_updateTable($wtable=""){
478
  //Do the upgrades
479
  $dbtasks=array();
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
@@ -661,10 +669,6 @@ function wassup_updateTable($wtable=""){
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);
668
  //For upgrade from < v1.8:
669
  // -retroactively fix incorrect OS "win2008" (="win7") in table
670
  if(version_compare($from_version,"1.8","<")){
@@ -692,6 +696,15 @@ function wassup_updateTable($wtable=""){
692
  $dbtasks[]=sprintf("UPDATE $low_priority `$wassup_table` SET `browser`='IE 11' WHERE `timestamp`>='%d' AND `browser`='' AND (`os` LIKE 'Win10%%' OR `os` LIKE 'WinNT 10%%') AND `agent` LIKE '%% Edge%%'",strtotime("1 January 2015"));
693
  } //end if 1.9
694
 
 
 
 
 
 
 
 
 
 
695
  //Queue the retroactive updates
696
  //schedule retroactive updates via cron so it dosen't slow down activation
697
  if(count($dbtasks)>0){
@@ -702,10 +715,10 @@ function wassup_updateTable($wtable=""){
702
  wassupDb::scheduled_dbtask($arg);
703
  }
704
  }
 
705
  //Lastly, check for browser timeout..may not work because of output redirection in Wordpress during plugin install, so also use timer.
706
- //...1 min is normal http request keepAlive time
707
- //echo chr(0); //send null to check if browser is still alive
708
- //run 'wassup_settings_install' on browser abort and save settings
709
  if(connection_aborted() || (time() - $stimer_start) > 57){
710
  $wassup_options->wassup_alert_message="Wassup ".WASSUPVERSION.": ".__("Database created/upgraded successfully","wassup");
711
  wassup_settings_install($wassup_table);
155
  }
156
  }
157
  } //!is_multisite
 
 
158
  } //end if wassup_alert_message
159
  $wassup_options->wassup_table= $wassup_table;
160
  $wassup_options->wassup_upgraded= time();
476
  //Do the upgrades
477
  $dbtasks=array();
478
  $dbtask_keys=array();
479
+ //create wp-cron action for background updates
480
+ //Note that 'LOW_PRIORITY' is strictly for separate cron/ajax processes only..otherwise it will cause long waits when site is busy
481
+ $low_priority="";
482
+ if(version_compare($wp_version,'3.0','>')){
483
+ $low_priority="LOW_PRIORITY";
484
+ add_action('wassup_upgrade_dbtasks',array('wassupDb','scheduled_dbtask'),10,1);
485
+ if(empty($wassup_options->wassup_googlemaps_key)){
486
+ add_action('wassup_scheduled_api_upg',array('wassupOptions','lookup_apikey'),10,1);
487
+ }
488
+ }
489
  //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
490
  //Do table structure upgrades
491
  //skip some upgrade checks when script timeout is small number @since v1.9.1
669
 
670
  //Do retroactive data updates by version#
671
  //Retroactive data updates are run separately from table structure upgrades (via wp_cron). @since v1.9
 
 
 
 
672
  //For upgrade from < v1.8:
673
  // -retroactively fix incorrect OS "win2008" (="win7") in table
674
  if(version_compare($from_version,"1.8","<")){
696
  $dbtasks[]=sprintf("UPDATE $low_priority `$wassup_table` SET `browser`='IE 11' WHERE `timestamp`>='%d' AND `browser`='' AND (`os` LIKE 'Win10%%' OR `os` LIKE 'WinNT 10%%') AND `agent` LIKE '%% Edge%%'",strtotime("1 January 2015"));
697
  } //end if 1.9
698
 
699
+ //For all upgrades:
700
+ // New in v1.9.4: get a new api key
701
+ if(empty($wassup_options->wassup_googlemaps_key)){
702
+ if(!empty($low_priority)){
703
+ wp_schedule_single_event(time()+600,'wassup_scheduled_api_upg');
704
+ }else{
705
+ $key=wassupOptions::lookup_apikey();
706
+ }
707
+ }
708
  //Queue the retroactive updates
709
  //schedule retroactive updates via cron so it dosen't slow down activation
710
  if(count($dbtasks)>0){
715
  wassupDb::scheduled_dbtask($arg);
716
  }
717
  }
718
+
719
  //Lastly, check for browser timeout..may not work because of output redirection in Wordpress during plugin install, so also use timer.
720
+ //'echo chr(0);' to send null to browser to check if it is still alive - doesn't work
721
+ //...after 1 minute (normal http request keepAlive time) or browser abort, run 'wassup_settings_install' and save settings
 
722
  if(connection_aborted() || (time() - $stimer_start) > 57){
723
  $wassup_options->wassup_alert_message="Wassup ".WASSUPVERSION.": ".__("Database created/upgraded successfully","wassup");
724
  wassup_settings_install($wassup_table);
lib/wassup.class.php CHANGED
@@ -63,6 +63,7 @@ class wassupOptions {
63
  var $wassup_refspam = "1";
64
  var $wassup_attack = "1";
65
  var $wassup_hack = "1";
 
66
 
67
  /* table/file management settings */
68
  var $wassup_table;
@@ -171,6 +172,7 @@ class wassupOptions {
171
  'wassup_spamcheck' =>"1",
172
  'wassup_spam' =>"1",
173
  'wassup_refspam' =>"1",
 
174
  'wassup_exclude' =>"",
175
  'wassup_exclude_host' =>"",
176
  'wassup_exclude_url' =>"",
@@ -636,8 +638,9 @@ class wassupOptions {
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
  }
643
  /** strip bad characters from a text or textarea input for URLs. @since v1.9 */
@@ -684,9 +687,7 @@ class wassupOptions {
684
  $this->wassup_dashboard_chart=(!empty($_POST['wassup_dashboard_chart'])?"1":"0");
685
  $this->wassup_geoip_map=(!empty($_POST['wassup_geoip_map'])?"1":"0");
686
  if(!empty($_POST['wassup_googlemaps_key'])){
687
- $not_required=__("not required","wassup");
688
- if(strpos($_POST['wassup_googlemaps_key'],$not_required)===false) $this->wassup_googlemaps_key=$this->cleanFormText($_POST['wassup_googlemaps_key']);
689
- else $this->wassup_googlemaps_key="";
690
  }else{
691
  $this->wassup_googlemaps_key="";
692
  }
@@ -723,6 +724,8 @@ class wassupOptions {
723
  $this->wassup_spider=(!empty($_POST['wassup_spider'])?"1":"0");
724
  $this->wassup_spam=(!empty($_POST['wassup_spam'])?"1":"0");
725
  $this->wassup_refspam=(!empty($_POST['wassup_refspam'])?"1":"0");
 
 
726
  $this->wassup_hack=(!empty($_POST['wassup_hack'])?"1":"0");
727
  $this->wassup_attack=(!empty($_POST['wassup_attack'])?"1":"0");
728
  if($_POST['wassup_exclude'] != $this->wassup_exclude)
@@ -952,6 +955,86 @@ class wassupOptions {
952
  $wassuphash=wp_hash($hashkey);
953
  return $wassuphash;
954
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
955
  /**
956
  * Return a PHP command that can execute an external program via the server shell ('shell_exec' or 'exec').
957
  * @since v1.9.1
@@ -1018,6 +1101,7 @@ class wassupOptions {
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();
@@ -1044,8 +1128,13 @@ class wassupOptions {
1044
  else $mclass="notice notice-info is-dismissible";
1045
  }
1046
  //preface message with version # when not wassup page
1047
- if(empty($_GET['page']) || strpos($_GET['page'],'wassup')===false) $notice_html ='<div id="wassup-message" class="'.$mclass.'">WassUp '.WASSUPVERSION.' '.esc_attr($message).'</div>';
1048
- else $notice_html='<div id="wassup-message" class="'.$mclass.'">'.esc_attr($message).'</div>';
 
 
 
 
 
1049
  //show alert message
1050
  echo $notice_html."\n";
1051
  //clear displayed alert message from settings
@@ -1881,123 +1970,29 @@ class wassupDb{
1881
  }
1882
  } //end auto_cleanup
1883
 
1884
- /**
1885
- * Retrieve raw data from wassup table in SQL format for export.
1886
- * - taken partially from wp-db-backup plugin by Alain Wolf, Zurich, SW - http://www.ilfilosofo.com/blog/wp-db-backup/
1887
- * - a partial export is returned if script execution timelimit of 15 minutes is exceeded
1888
- * - the record id of last record exported (last_recid) is cached to 'wassup_meta' table.
1889
- * - spam records are omitted from export, by default @since v1.9.1
1890
- *
1891
- * @param string(3) $table, $condition, $segment
1892
- * @return string ($sql)
1893
- */
1894
- static function backup_table($table,$condition="",$segment='none'){
1895
- global $wpdb,$current_user,$wassup_options,$wdebug_mode;
1896
- define('ROWS_PER_SEGMENT', 600);
1897
- if(!is_object($current_user) || empty($current_user->ID)){
1898
- $user=wp_get_current_user();
1899
- }
1900
- if(!empty($current_user->ID)){
1901
- $wassup_user_settings=get_user_option('_wassup_settings',$current_user->ID);
1902
- }else{
1903
- $err_msg=__("Export ERROR: login required!","wassup");
1904
- $wassup_options->wassup_alert_message=$err_msg;
1905
- $wassup_options->saveSettings();
1906
- return false;
1907
- }
1908
- if(empty($table))$table=$wassup_options->wassup_table;
1909
- $sql_table_name=$wpdb->get_var(sprintf("SHOW TABLES LIKE '%s'",self::esc_like(esc_attr($table))));
1910
- if(empty($sql_table_name) || $sql_table_name!=$table || is_wp_error($sql_table_name)){
1911
- $err_msg=sprintf(__('Error with TABLE %s: Not found','wassup'), esc_attr($table));
1912
- $wassup_user_settings['ualert_message']=$err_msg;
1913
- update_user_option($current_user->ID,'_wassup_settings',$wassup_user_settings);
1914
- return FALSE;
1915
  }
1916
- $sql="";
1917
- $err_msg=false;
1918
- $did_export=false;
1919
- $timelimit=15*60;
1920
  $mtimeout=60;
1921
  $stimeout=ini_get('max_execution_time');
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'";
1936
- }
1937
- if(!empty($_REQUEST['expid']) && is_numeric($_REQUEST['expid'])){
1938
- $backup_id=(int)$_REQUEST['expid'];
1939
- }else{
1940
- $backup_id=date('YmdH',current_time('timestamp'));
1941
- }
1942
- //Add comments to each section of export file
1943
- if($segment=='none' || $segment==0){
1944
- $result=$wpdb->get_results(sprintf("SHOW CREATE TABLE `%s`",esc_attr($table)),ARRAY_N);
1945
- if(empty($result[0][1]) || is_wp_error($result)) {
1946
- $err_msg=sprintf(__('Error with "SHOW CREATE TABLE" for %s.','wassup'), esc_attr($table));
1947
- }else{
1948
- $table_create=$result[0][1];
1949
- $first_recid=$wpdb->get_var(sprintf("SELECT MIN(`id`) FROM %s %s",esc_attr($table),$condition));
1950
- if(!is_numeric($first_recid)) $first_recid=0;
1951
- //add comments for table structure section
1952
- $sql .="\n#\n";
1953
- $sql .="# " . sprintf(__('Table structure of table %s','wassup'),esc_attr($table))."\n#\n";
1954
- //replace "CREATE TABLE" with "CREATE TABLE IF NOT EXISTS" and remove AUTO_INCREMENT=NNN value from $table_create
1955
- $sql .=preg_replace(array('/^CREATE\sTABLE\s(IF\sNOT\sEXISTS\s)?/i', '/AUTO_INCREMENT\=\d+\s/i'),array('CREATE TABLE IF NOT EXISTS ',''),$table_create).' ;';
1956
- $sql .="\n#\n";
1957
- //add comments for data section
1958
- $sql .="# Start time: ".date('r',current_time('timestamp'))." 1st exported ID: $first_recid \n";
1959
- $sql .='# ' . sprintf(__('Data contents of table %s','wassup'),esc_attr($table))."\n#\n";
1960
- }
1961
- }
1962
- //Check for table records
1963
- if(empty($err_msg)){
1964
- $table_structure=$wpdb->get_results(sprintf("SHOW COLUMNS FROM `%s`",esc_attr($table)));
1965
- if(is_wp_error($table_structure)){
1966
- $errno=$table_structure->get_error_code();
1967
- $err_msg=sprintf(__('Error getting table structure of %s: %s','wassup'), esc_attr($table),$errno.' '.$table_structure->get_error_message());
1968
- $table_structure=false;
1969
- }elseif(false == $table_structure){
1970
- $err_msg=sprintf(__('Error getting table structure of %s','wassup'), esc_attr($table));
1971
- }
1972
- $numrecords=$wpdb->get_var(sprintf("SELECT COUNT(*) FROM `%s` %s",esc_attr($table), $condition));
1973
- if(empty($numrecords) || !is_numeric($numrecords)){
1974
- if(is_wp_error($numrecords)){
1975
- $errno=$numrecords->get_error_code();
1976
- $err_msg=sprintf(__('Error with table %s: %s','wassup'), esc_attr($table),$errno.' '.$numrecords->get_error_message());
1977
- }else{
1978
- $err_msg=sprintf(__('Error with table %s: No data','wassup'), esc_attr($table));
1979
- }
1980
- $numrecords=0;
1981
- }
1982
- }
1983
- //ABORT due to table error
1984
- if(!empty($err_msg)){
1985
- $wassup_user_settings['ualert_message']=$err_msg;
1986
- update_user_option($current_user->ID,'_wassup_settings',$wassup_user_settings);
1987
- return FALSE;
1988
- }
1989
- //Extend php script timeout to 10 minutes
1990
  if(is_numeric($stimeout) && $stimeout>0 && $stimeout < 990){
1991
  $disabled_funcs=ini_get('disable_functions');
1992
  if((empty($disabled_funcs) || strpos($disabled_funcs,'set_time_limit')===false) && !ini_get('safe_mode')){
1993
  $stimeout=10*60;
1994
  @set_time_limit($stimeout);
1995
  }
1996
-
1997
  }elseif($stimeout===0){
1998
  $stimeout=10*60;
1999
  }
2000
  //set mysql wait timeout to 15 minutes
 
2001
  $mtimeout=$wpdb->get_var("SELECT @@session.wait_timeout AS mtimeout FROM DUAL");
2002
  if(!empty($mtimeout) && !is_wp_error($mtimeout)){
2003
  if(!is_numeric($mtimeout) || $mtimeout < $timelimit){
@@ -2010,131 +2005,264 @@ class wassupDb{
2010
  }else{
2011
  $results=$wpdb->query(sprintf("SET wait_timeout = %d",($timelimit+60)));
2012
  }
2013
- $defs=array();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2014
  $ints=array();
2015
- $cols="";
2016
- $fields="";
2017
- $i=0;
2018
- foreach($table_structure as $col){
2019
- //differentiate numeric fields from char fields
2020
  if((0===strpos(strtolower($col->Type),'tinyint')) ||
2021
  (0===strpos(strtolower($col->Type),'smallint')) ||
2022
  (0===strpos(strtolower($col->Type),'mediumint')) ||
2023
  (0===strpos(strtolower($col->Type),'int')) ||
2024
  (0===strpos(strtolower($col->Type),'bigint')) ||
2025
  (0===strpos(strtolower($col->Type),'timestamp'))){
2026
- $defs[$col->Field]=$col->Default;
2027
  $ints[$col->Field]="1";
2028
  }
2029
- if($i==0) $cols .='`'.$col->Field.'`';
2030
- else $cols .=', `'.$col->Field.'`';
2031
- //omit id field from export
2032
- if($exclude_id && $col->Field!="id"){
2033
- if($i==0) $fields .='`'.$col->Field.'`';
2034
- else $fields .=', `'.$col->Field.'`';
2035
- }
2036
- $i++;
2037
- } //end foreach $table_structure
2038
- if(!$exclude_id) $fields=$cols;
2039
-
2040
- // Batch by $row_inc
2041
- if($segment=='none'){
2042
- $row_start=0;$row_inc=ROWS_PER_SEGMENT;
2043
  }else{
2044
- $row_start=$segment*ROWS_PER_SEGMENT;
2045
- $row_inc=ROWS_PER_SEGMENT;
 
2046
  }
2047
- $i=1;
2048
- $entries="INSERT INTO `".esc_attr($table)."` ($fields) VALUES ";
2049
- $search=array("\x00", "\x0a", "\x0d", "\x1a");
2050
- $replace=array('\0','\n','\r','\Z');
2051
- $export_count=0;
2052
- $err_msg="";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2053
  do{
2054
- $row_count=0;
2055
- $qry=sprintf("SELECT SQL_BUFFER_RESULT $cols FROM `%s` %s ORDER BY `id` LIMIT %d, %d",esc_attr($table),$condition,$row_start,$row_inc);
2056
- $table_data=$wpdb->get_results($qry);
2057
- if(is_wp_error($table_data)) {
2058
- $errno=$table_data->get_error_code();
2059
- $err_msg=sprintf(__('Error exporting data from table %s: %s','wassup'), esc_attr($table),$errno.' '.$table_data->get_error_message());
2060
- }elseif(is_array($table_data)){
2061
- $row_count=count($table_data);
2062
- }
2063
- if($row_count>0){
2064
- $j=0;
2065
- foreach($table_data AS $row){
2066
- $values="";$row_sql="";$n=0;
2067
- foreach($row AS $key=>$value){
2068
- //track last id exported
2069
- if($key=='id'){
2070
- $last_recid=$value;
2071
- //omit 'id' from export
2072
- if($exclude_id) continue;
 
 
2073
  }
2074
- if(isset($ints[$key])){
2075
- $val=(''===$value)?"''":$value;
 
 
 
 
 
 
 
 
 
2076
  }else{
2077
- $val="'".str_replace($search,$replace,esc_sql($value))."'";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2078
  }
2079
- if($n==0) $values=$val;
2080
- else $values .=','.$val;
2081
- $n++;
2082
- } //end foreach row
2083
- //new "insert" statement every 50 rows
2084
- if($j==0){
2085
- $row_sql="\n".$entries."\n";
2086
- }elseif($j%50==0){
2087
- $row_sql .=";\n".$entries."\n";
 
2088
  }else{
2089
- $row_sql .=",\n";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2090
  }
2091
- $row_sql .='('.$values.')';
2092
- $sql .=$row_sql;
2093
- $j++;
2094
- } //end foreach table_data
2095
- //add ending semi-colon
2096
- if(!empty($sql)) $sql .=";\n";
2097
- $row_start +=$row_count; //$row_start += $row_inc;
2098
- $export_count=$export_count+$row_count;
2099
- $did_export=true;
2100
- } //end if row_count >0
2101
- $i++;
2102
- //stop export if near script timeout limit
2103
- if((time()-$stimer_start) > $stimeout-10 || !empty($err_msg)){
2104
- $did_export=false;
2105
- break;
2106
- }
2107
- }while($row_count >0 &&($segment=='none'));
2108
- //reset mysql wait timeout to default
2109
- if(empty($mtimeout)|| !is_numeric($mtimeout)) $mtimeout=60;
2110
- $wpdb->query("SET wait_timeout=$mtimeout");
2111
- // Create footer/closing comment in SQL-file
2112
- if($segment=='none' || $segment<0){
2113
- $sql .="\n";
2114
- if($did_export){
2115
- $sql .="# ".sprintf(__('End of data contents of table %s','wassup'),$table)."\n";
2116
- }else{
2117
- $sql .="# ".sprintf(__('Interrupted data contents of table %s','wassup'),$table)."\n";
2118
- if(!empty($err_msg)) $sql .="# $errmsg\n";
2119
- }
2120
- $sql .="# --------------------------------------------------------\n";
2121
- if($wdebug_mode){
2122
- $elapsed_time=time()-$stimer_start;
2123
- $sql .="# Timeout length=$timelimit seconds. Elapsed time=$elapsed_time seconds\n";
2124
- $sql .="# --------------------------------------------------------\n";
2125
- }
2126
- $sql .="#\n# ".sprintf(__("End time: %d","wassup"),date('r',current_time('timestamp')))." \n";
2127
- $sql .="# ".sprintf(__("%d out of %d records exported.","wassup"),$export_count,$numrecords)." ".sprintf(__("Last record ID: %d","wassup"),$last_recid)." \n";
2128
- $sql .="\n";
2129
- }
2130
- //save export success message for admin alert notice
2131
- if(!empty($sql)){
2132
- $wassup_user_settings['ualert_message']=sprintf(__("%d out of %d records exported.","wassup"),$export_count,$numrecords)." ".sprintf(__("Last record ID: %d","wassup"),$last_recid);
2133
- update_user_option($current_user->ID,'_wassup_settings',$wassup_user_settings);
2134
- $saved=self::update_wassupmeta($table,'_export_recid-'.$current_user->ID,$last_recid,0);
2135
  }
2136
- return $sql;
2137
- } // end backup_table
2138
 
2139
  } //end class wassupDb
2140
  } //end if !class_exists
@@ -2188,26 +2316,40 @@ class wassupURI {
2188
  }
2189
  /** Return the url and "path" for wordpress site's "home". */
2190
  static function get_sitehome(){
2191
- $sitehome=get_option('siteurl');
2192
  if(is_multisite() && is_network_admin()){
2193
  $sitehome=network_home_url();
2194
- }elseif(empty($sitehome)){
2195
- $sitehome=get_option('home');
2196
  }
 
2197
  return $sitehome;
2198
- } //end get_homeurl
2199
 
2200
  //** Return the url and "path" for wordpress admin. */
2201
  static function get_wphome(){
2202
- $wphome=admin_url();
2203
  if(is_multisite() && is_network_admin()){
2204
  $wphome=network_admin_url();
2205
- }elseif(empty($wphome)){
2206
- $wphome=get_option('wpurl');
2207
  }
 
2208
  return $wphome;
2209
  } //end get_wphome
2210
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2211
  /**
2212
  * Return request url in a link tag or span tag if it is suspicious or 404.
2213
  * Security Note: returned href, tooltip, and tag contents are escaped within 'add_siteurl' or 'disarm_attack methods, or by 'stringShortener' function
@@ -2227,22 +2369,15 @@ class wassupURI {
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));
2234
- else $urllink .=self::cleanURL("$urlrequested");
2235
- $urllink .='</span>';
2236
  }elseif(preg_match('/\/wp\-(?:admin|content|includes)\/|\/wp\-login\.php|^\[[0-9]{3}\]/',$urlrequested)>0){
2237
- $urllink='<span'.$tooltip.'>';
2238
- if($chars >0) $urllink .=stringShortener("$urlrequested",round($chars*.9,0));
2239
- else $urllink .=self::cleanURL("$urlrequested");
2240
- $urllink .='</span>';
2241
  }else{
2242
- $urllink='<a href="'.self::add_siteurl($request).'" target="_BLANK">';
2243
- if($chars>0) $urllink .=stringShortener("$urlrequested",$chars);
2244
- else $urllink=self::cleanURL("$urlrequested");
2245
- $urllink .='</a>';
2246
  }
2247
  return $urllink;
2248
  }
@@ -2269,6 +2404,8 @@ class wassupURI {
2269
  $tooltip="";
2270
  $ref=strtolower($referer);
2271
  if(strlen($ref)>60) $tooltip=' title="'.self::cleanURL($ref).'" ';
 
 
2272
  //referrer from site or site-admin
2273
  if(stristr($referer,$wpurl)==$referer || stristr($referer,$siteurl)==$referer){
2274
  //direct hit when referrer == request
@@ -2276,13 +2413,13 @@ class wassupURI {
2276
  $referrerlink='<span>'.__("direct hit","wassup").'</span>';
2277
  }elseif($spam==2 || self::is_xss($ref)){
2278
  //show spam referrers w/o link
2279
- $referrerlink='<span class="malware"'.$tooltip.'>'.stringShortener("$referer",round($chars*.9,0)).'</span>';
2280
  }elseif($spam >0){
2281
- $referrerlink='<span'.$tooltip.'>'.stringShortener("$referer",round($chars*.9,0)).'</span>';
2282
  }elseif(is_user_logged_in()){
2283
  //show 'wp-login', 'wp-includes', and 'wp-content' referrers to logged-in users
2284
  if(strpos($ref,'wp-login.php')>0 || strpos($ref,'/wp-includes/')>0 || strpos($ref,'/wp-content/')>0){
2285
- $referrerlink='<a href="'.self::cleanURL($referer).'" target=_"BLANK"'.$tooltip.'>'.stringShortener($referer,round($chars*.9,0)).'</a>';
2286
  }else{
2287
  $referrerlink="<span{$tooltip}>".__("from your site","wassup")."</span>";
2288
  }
@@ -2294,15 +2431,15 @@ class wassupURI {
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){
2299
- $referrerlink='<span'.$tooltip.'>'.stringShortener($referer,round($chars*.9,0)).'</span>';
2300
  }else{
2301
  $rurl=parse_url($referer);
2302
  if(!empty($rurl['host']) && preg_match('/\.[a-z]{2,4}$/',$rurl['host'])>0){
2303
  $favicon_img='<img src="http://www.google.com/s2/favicons?domain='.$rurl['host'].'" class="favicon"> ';
2304
  }
2305
- $referrerlink=$favicon_img.'<a href="'.self::cleanURL($referer).'" target=_"BLANK"'.$tooltip.'>'.stringShortener($referer,round($chars*.9,0)).'</a>';
2306
  }
2307
  }
2308
  }else{
@@ -2397,17 +2534,25 @@ class wassupURI {
2397
  * @return string
2398
  */
2399
  static function get_menu_arg(){
2400
- $menuarg=false;
2401
  if(isset($_GET['page'])) $menuarg=$_GET['page'];
2402
  if(stristr($menuarg,"wassup")!==false){
2403
- $wassupfolder=basename(WASSUPDIR);
2404
- if($menuarg=="wassup-stats"){
2405
- if(!empty($_GET['ml'])) $menuarg=$_GET['ml'];
2406
- else $menuarg="wassup";
2407
- }elseif($menuarg=="wassup-spia"){
2408
- $menuarg="wassup-spy";
2409
- }elseif($menuarg==$wassupfolder){
2410
- $menuarg="wassup";
 
 
 
 
 
 
 
 
2411
  }
2412
  }
2413
  return $menuarg;
@@ -2451,9 +2596,178 @@ class wassupURI {
2451
  $ajaxurl=admin_url('index.php?page=wassup-stats');
2452
  }elseif($action=="Topstats"){
2453
  $ajaxurl=self::get_admin_url('index.php?page=wassup-stats');
 
 
2454
  }
2455
  return $ajaxurl;
2456
  }
2457
  } //end Class wassupURI
2458
  } //end if !class_exists
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2459
  ?>
63
  var $wassup_refspam = "1";
64
  var $wassup_attack = "1";
65
  var $wassup_hack = "1";
66
+ var $refspam_whitelist=""; //new in v1.9.4: for incorrectly labeled referrer spam
67
 
68
  /* table/file management settings */
69
  var $wassup_table;
172
  'wassup_spamcheck' =>"1",
173
  'wassup_spam' =>"1",
174
  'wassup_refspam' =>"1",
175
+ 'refspam_whitelist' =>"",
176
  'wassup_exclude' =>"",
177
  'wassup_exclude_host' =>"",
178
  'wassup_exclude_url' =>"",
638
  if(function_exists('sanitize_text_field')) $text=sanitize_text_field($input);
639
  else $text=strip_tags(html_entity_decode(wp_kses($input,array())));
640
  //only alphanumeric chars allowed with few exceptions
641
+ //since v1.9.3 allow '@' char for email searches
642
+ //v1.9.4 bugfix: allow '/?&=' chars for url searches
643
+ $cleantext=preg_replace('#([^0-9a-z\-_\.,\:\*\#/&\?=@\'" ]+)#i','',$text);
644
  return $cleantext;
645
  }
646
  /** strip bad characters from a text or textarea input for URLs. @since v1.9 */
687
  $this->wassup_dashboard_chart=(!empty($_POST['wassup_dashboard_chart'])?"1":"0");
688
  $this->wassup_geoip_map=(!empty($_POST['wassup_geoip_map'])?"1":"0");
689
  if(!empty($_POST['wassup_googlemaps_key'])){
690
+ $this->wassup_googlemaps_key=$this->cleanFormText($_POST['wassup_googlemaps_key']);
 
 
691
  }else{
692
  $this->wassup_googlemaps_key="";
693
  }
724
  $this->wassup_spider=(!empty($_POST['wassup_spider'])?"1":"0");
725
  $this->wassup_spam=(!empty($_POST['wassup_spam'])?"1":"0");
726
  $this->wassup_refspam=(!empty($_POST['wassup_refspam'])?"1":"0");
727
+ if($_POST['refspam_whitelist'] != $this->refspam_whitelist)
728
+ $this->refspam_whitelist=$this->cleanFormText($_POST['refspam_whitelist']);
729
  $this->wassup_hack=(!empty($_POST['wassup_hack'])?"1":"0");
730
  $this->wassup_attack=(!empty($_POST['wassup_attack'])?"1":"0");
731
  if($_POST['wassup_exclude'] != $this->wassup_exclude)
955
  $wassuphash=wp_hash($hashkey);
956
  return $wassuphash;
957
  }
958
+ /** Retrieve or query a Google!Map API key @since v1.9.4 */
959
+ public function get_apikey(){
960
+ $apikey="";
961
+ //try user's own api key
962
+ if(!empty($this->wassup_googlemaps_key)){
963
+ $apikey=$this->wassup_googlemaps_key;
964
+ }else{
965
+ //check for a builtin api key, if exist
966
+ $meta_key="_googlemaps_key";
967
+ if(is_multisite()) $sitehome=network_home_url();
968
+ else $sitehome=get_option('home');
969
+ $homedomain=wassupURI::get_urldomain($sitehome);
970
+ $apikey=wassupDb::get_wassupmeta($homedomain,$meta_key);
971
+ }
972
+ return $apikey;
973
+ }
974
+ /** Do a remote lookup of Google!Map API key @since v1.9.4 */
975
+ static function lookup_apikey(){
976
+ global $wdebug_mode;
977
+ $error_msg="";
978
+ $apikey=false;
979
+ //no lookup key if key is already in settings
980
+ $wassup_settings=get_option('wassup_settings');
981
+ if(!empty($wassup_settings['wassup_googlemaps_key'])){
982
+ return;
983
+ }
984
+ $ip=0;
985
+ //for computers behind proxy servers:
986
+ if(isset($_SERVER['SERVER_ADDR'])){
987
+ $ip=wassupIP::validIP($_SERVER['SERVER_ADDR']);
988
+ }
989
+ if(empty($ip) && !empty($_SERVER['HTTP_X_FORWARDED_HOST'])){
990
+ $ip=wassupIP::validIP($_SERVER['HTTP_X_FORWARDED_HOST']);
991
+ }
992
+ if(empty($ip) && !empty($_SERVER['HTTP_X_FORWARDED_SERVER'])){
993
+ $ip=wassupIP::validIP($_SERVER['HTTP_X_FORWARDED_SERVER']);
994
+ }
995
+ if(empty($ip)){
996
+ $ipAddress=wassupIP::get_clientAddr();
997
+ $ip=wassupIP::clientIP($ipAddress);
998
+ }
999
+ //do lookup
1000
+ $api_url="http://helenesit.com/utils/wassup-webservice/?ws=mk&ip=".$ip;
1001
+ if($wdebug_mode) $api_url .='&debug_mode=1';
1002
+ if(!function_exists('wFetchAPIData')){
1003
+ include_once(WASSUPDIR."/lib/main.php");
1004
+ }
1005
+ $jsondata=wFetchAPIData($api_url);
1006
+ if(!empty($jsondata)){
1007
+ if(strpos($jsondata,'{')!==false) $apidata=json_decode($jsondata,true);
1008
+ else $apidata=$jsondata;
1009
+ if(is_array($apidata) && !empty($apidata['wassup_googlemaps_key'])){
1010
+ $apikey=$apidata['wassup_googlemaps_key'];
1011
+ }elseif(is_string($apidata) && preg_match('/[^0-9a-z\-_]/',$apidata)==0){
1012
+ $apikey=$apidata;
1013
+ }else{
1014
+ if(is_wp_error($apidata)){
1015
+ $error_msg=__FUNCTION__." googlemaps key lookup error ".$apidata->get_error_code().": ".$apidata->get_error_message();
1016
+ }else{
1017
+ $error_msg=__FUNCTION__." googlemaps key lookup error: Non-json data returned";
1018
+ $error_msg .= maybe_serialize($apidata);
1019
+ }
1020
+ }
1021
+ }else{
1022
+ $error_msg=__FUNCTION__." googlemaps key lookup for ".$api_url." failed";
1023
+ }
1024
+ //save apikey
1025
+ if(!empty($apikey)){
1026
+ $meta_key="_googlemaps_key";
1027
+ if(is_multisite()) $sitehome=network_home_url();
1028
+ else $sitehome=get_option('home');
1029
+ $homedomain=wassupURI::get_urldomain($sitehome);
1030
+ $updated=wassupDb::update_wassupmeta($homedomain,$meta_key,$apikey,0);
1031
+ }elseif(!empty($error_msg)){ //debug
1032
+ if($wdebug_mode){
1033
+ return $error_msg;
1034
+ }
1035
+ }
1036
+ } //end lookup_apikey
1037
+
1038
  /**
1039
  * Return a PHP command that can execute an external program via the server shell ('shell_exec' or 'exec').
1040
  * @since v1.9.1
1101
  /** display a system notice or user message in admin panel. */
1102
  public function showMessage($message="") {
1103
  global $wp_version,$current_user;
1104
+ $notice_html="";
1105
  if(empty($message)){
1106
  //prioritize user alerts and show anytime
1107
  if(!is_object($current_user) || empty($current_user->ID)) $user=wp_get_current_user();
1128
  else $mclass="notice notice-info is-dismissible";
1129
  }
1130
  //preface message with version # when not wassup page
1131
+ if(empty($_GET['page'])){
1132
+ $notice_html ='<div id="wassup-message" class="'.$mclass.'">WassUp '.WASSUPVERSION.' '.esc_attr($message).'</div>';
1133
+ }elseif(strpos($_GET['page'],'wassup')===false){
1134
+ $notice_html ='<div id="wassup-message" class="'.$mclass.'">WassUp '.WASSUPVERSION.' '.esc_attr($message).'</div>';
1135
+ }else{
1136
+ $notice_html='<div id="wassup-message" class="'.$mclass.'">'.esc_attr($message).'</div>';
1137
+ }
1138
  //show alert message
1139
  echo $notice_html."\n";
1140
  //clear displayed alert message from settings
1970
  }
1971
  } //end auto_cleanup
1972
 
1973
+ /** Retrieve records from a table by record id @since v1.9.4 */
1974
+ static function get_records($table,$startid=0,$condition="",$limit=0){
1975
+ global $wpdb,$wdebug_mode;
1976
+
1977
+ if(empty($table) || !self::table_exists($table)){
1978
+ $error_msg=__("Missing or incorrect table name","wassup").' '.$table;
1979
+ $error=new WP_Error('1',$error_msg);
1980
+ return $error;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1981
  }
1982
+ //Extend php script timeout to 10 minutes
 
 
 
1983
  $mtimeout=60;
1984
  $stimeout=ini_get('max_execution_time');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1985
  if(is_numeric($stimeout) && $stimeout>0 && $stimeout < 990){
1986
  $disabled_funcs=ini_get('disable_functions');
1987
  if((empty($disabled_funcs) || strpos($disabled_funcs,'set_time_limit')===false) && !ini_get('safe_mode')){
1988
  $stimeout=10*60;
1989
  @set_time_limit($stimeout);
1990
  }
 
1991
  }elseif($stimeout===0){
1992
  $stimeout=10*60;
1993
  }
1994
  //set mysql wait timeout to 15 minutes
1995
+ $timelimit=15*60;
1996
  $mtimeout=$wpdb->get_var("SELECT @@session.wait_timeout AS mtimeout FROM DUAL");
1997
  if(!empty($mtimeout) && !is_wp_error($mtimeout)){
1998
  if(!is_numeric($mtimeout) || $mtimeout < $timelimit){
2005
  }else{
2006
  $results=$wpdb->query(sprintf("SET wait_timeout = %d",($timelimit+60)));
2007
  }
2008
+ //@TODO - check table for autoincrement field name and use it for recid field
2009
+ $recid='id';
2010
+ // do mysql query and return results
2011
+ if(!is_numeric($startid)) $startid=0;
2012
+ if(stristr($condition,' WHERE ')===false){
2013
+ $qry=sprintf("SELECT * FROM `%s` WHERE `id` > %d %s",esc_attr($table),$startid,$condition);
2014
+ }elseif($startid >0){
2015
+ $qry=sprintf("SELECT * FROM `%s` %s AND `id` > %d",esc_attr($table),$condition,$startid);
2016
+ }else{
2017
+ $qry=sprintf("SELECT * FROM `%s` %s",esc_attr($table),$condition);
2018
+ }
2019
+ if(!empty($limit) && is_numeric($limit) && $limit >0 && stristr($qry,' LIMIT ')===false){
2020
+ $qry .= sprintf(" LIMIT %d",$limit);
2021
+ }
2022
+ $table_records=$wpdb->get_results($qry);
2023
+ return($table_records);
2024
+ } //end get_records
2025
+
2026
+ /** Export Wassup records in SQL or CSV format @since v1.9.4 */
2027
+ static function export_records($table,$start_id,$wherecondition,$dtype="sql"){
2028
+ global $wpdb,$current_user,$wassup_options,$wdebug_mode;
2029
+ //#1st verify that export request is valid
2030
+ if(!isset($_REQUEST['export']) || !is_user_logged_in()){
2031
+ $err_msg =__("Export ERROR: Invalid Export request","wassup");
2032
+ $wassup_options->wassup_alert_message=$err_msg;
2033
+ $wassup_options->saveSettings();
2034
+ return false;
2035
+ }
2036
+ //start script timer
2037
+ $stimer_start=time();
2038
+ $msg="";
2039
+ $err_msg=false;
2040
+ if(!is_object($current_user) || empty($current_user->ID)){
2041
+ $user=wp_get_current_user();
2042
+ }
2043
+ $wassup_user_settings=get_user_option('_wassup_settings',$current_user->ID);
2044
+ if(empty($table)) $table=$wassup_options->wassup_table;
2045
+ $sql_table_name=$wpdb->get_var(sprintf("SHOW TABLES LIKE '%s'",wassupDb::esc_like(esc_attr($table))));
2046
+ if(empty($sql_table_name) || $sql_table_name!=$table || is_wp_error($sql_table_name)){
2047
+ $err_msg=sprintf(__('Export ERROR: TABLE %s not found!','wassup'), esc_attr($table));
2048
+ wassup_log_message($err_msg);
2049
+ return false;
2050
+ }
2051
+ //for validating field data in export
2052
+ $search=array("\x00", "\x0a", "\x0d", "\x1a");
2053
+ $replace=array('\0','\n','\r','\Z');
2054
  $ints=array();
2055
+ $table_structure=$wpdb->get_results(sprintf("SHOW COLUMNS FROM `%s`",esc_attr($table)));
2056
+ if(!is_wp_error($table_structure) && false != $table_structure){
2057
+ foreach($table_structure as $col){
2058
+ //differentiate numeric from char fields
 
2059
  if((0===strpos(strtolower($col->Type),'tinyint')) ||
2060
  (0===strpos(strtolower($col->Type),'smallint')) ||
2061
  (0===strpos(strtolower($col->Type),'mediumint')) ||
2062
  (0===strpos(strtolower($col->Type),'int')) ||
2063
  (0===strpos(strtolower($col->Type),'bigint')) ||
2064
  (0===strpos(strtolower($col->Type),'timestamp'))){
 
2065
  $ints[$col->Field]="1";
2066
  }
2067
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
2068
  }else{
2069
+ $err_msg=sprintf(__('Export ERROR: Unable to get TABLE %s structure!','wassup'), esc_attr($table));
2070
+ wassup_log_message($err_msg);
2071
+ return false;
2072
  }
2073
+ $SEG_LIMIT=1000; //1000 records per write block
2074
+ //only sql or csv export formats supported
2075
+ if($dtype=="csv" || $dtype=="CSV"){
2076
+ $dtype="csv";
2077
+ }else{
2078
+ $dtype="sql";
2079
+ $sql_header="";
2080
+ $sql_fields="";
2081
+ $sql_data="";
2082
+ //create SQL header from table structure
2083
+ $result=$wpdb->get_results(sprintf("SHOW CREATE TABLE `%s`",esc_attr($table)),ARRAY_N);
2084
+ if(empty($result[0][1]) || is_wp_error($result)){
2085
+ $err_msg=sprintf(__('Error with "SHOW CREATE TABLE" for %s.','wassup'), esc_attr($table));
2086
+ wassup_log_message($err_msg);
2087
+ } else {
2088
+ $table_create=$result[0][1];
2089
+ $sql_header="#\n# " . sprintf(__('Table structure of table %s','wassup'),esc_attr($table))."\n#\n";
2090
+ $sql_header .= preg_replace(array('/^CREATE\sTABLE\s(IF\sNOT\sEXISTS\s)?/i', '/AUTO_INCREMENT\=\d+\s/i'),array('CREATE TABLE IF NOT EXISTS ',''),$table_create).' ;';
2091
+ $sql_header .= "\n#\n# ".sprintf(__('Data contents of table %s','wassup'),esc_attr($table))."\n#\n";
2092
+ }
2093
+ }
2094
+ //set starting rec id of export query
2095
+ if(empty($start_id) || !is_numeric($start_id)){
2096
+ $start_id=0;
2097
+ if(isset($_REQUEST['startid']) && is_numeric($_REQUEST['startid'])){
2098
+ $start_id=(int)$_REQUEST['startid'];
2099
+ }
2100
+ }
2101
+ $lastexported_id=0;
2102
+ $row_count=0;
2103
+ $exporttot=0;
2104
+ $n=0;
2105
+ //open output stream for export
2106
+ $output=false;
2107
+ $outfile=$table.gmdate('Y-m-d').'.'.$dtype;
2108
+ $output=fopen('php://output','w');
2109
+ if($output){
2110
+ //Extend php script timeout to 10 minutes
2111
+ $stimeout=ini_get('max_execution_time');
2112
+ if(is_numeric($stimeout) && $stimeout>0 && $stimeout < 600){
2113
+ $disabled_funcs=ini_get('disable_functions');
2114
+ if((empty($disabled_funcs) || strpos($disabled_funcs,'set_time_limit')===false) && !ini_get('safe_mode')){
2115
+ $stimeout=10*60;
2116
+ @set_time_limit($stimeout);
2117
+ }
2118
+ }elseif($stimeout===0){
2119
+ $stimeout=10*60;
2120
+ }else{
2121
+ $stimeout=60; //assume 1 minute
2122
+ }
2123
+ //extend mysql timeout
2124
+ $mtimeout=$wpdb->get_var("SELECT @@session.wait_timeout AS mtimeout FROM DUAL");
2125
+ if(!empty($mtimeout) && !is_wp_error($mtimeout) && is_numeric($mtimeout) && $mtimeout< 900){
2126
+ $result=$wpdb->query("SET wait_timeout=900");
2127
+ }
2128
  do{
2129
+ //get records
2130
+ $exportrecs=wassupDb::get_records($table,$start_id,"$wherecondition",$SEG_LIMIT);
2131
+ if(is_wp_error($exportrecs)){
2132
+ $errno=$exportrecs->get_error_code();
2133
+ $err_msg=sprintf(__("%s Export ERROR: %s","wassup"),strtoupper($dtype),$errno.' '.$exportrecs->get_error_message());
2134
+ $exportrecs=array();
2135
+ break;
2136
+ }
2137
+ $rec_count=count($exportrecs);
2138
+ if($rec_count ==0){
2139
+ //nothing to do
2140
+ $err_msg=sprintf(__("%s Export ERROR: No data","wassup"),strtoupper($dtype));
2141
+ break;
2142
+ }
2143
+ //get header info by export type
2144
+ if($n==0){
2145
+ //get field names from 1st record
2146
+ $wassup_rec=(array)$exportrecs[0];
2147
+ //omit record id field, if specified
2148
+ if(!empty($wassup_options->export_omit_recid)){
2149
+ unset($wassup_rec['id']);
2150
  }
2151
+ if(!is_multisite()) unset($wassup_rec['subsite_id']);
2152
+ $fields=array_keys($wassup_rec);
2153
+ //start download
2154
+ header('Content-Disposition: attachment; filename='.$outfile);
2155
+ header('Pragma: no-cache');
2156
+ header('Expires: 0');
2157
+ header('Content-Type: text/'.$dtype.'; charset=utf-8');
2158
+ //header infos
2159
+ if($dtype == "csv"){
2160
+ //CSV header is a single row of column names
2161
+ fputcsv($output,$fields);
2162
  }else{
2163
+ //write sql header
2164
+ fwrite($output,$sql_header);
2165
+ $i=0;
2166
+ //field list for sql-insert
2167
+ $sql_fields="INSERT INTO `".esc_attr($table).'` (';
2168
+ foreach($fields AS $col){
2169
+ if(empty($wassup_options->export_omit_recid) || $col != 'id'){
2170
+ if($i >0) $sql_fields .=',';
2171
+ $sql_fields .='`'.$col.'`';
2172
+ $i++;
2173
+ }
2174
+ }
2175
+ $sql_fields .= ') VALUES';
2176
+ }
2177
+ }
2178
+ $exp_n=0;
2179
+ $sql_data="";
2180
+ //output records
2181
+ foreach($exportrecs AS $wassup_obj){
2182
+ $wassup_rec=(array)$wassup_obj;
2183
+ //track record id #
2184
+ if($wassup_rec['id'] > $start_id){
2185
+ $lastexported_id=$wassup_rec['id'];
2186
  }
2187
+ //omit rec id + subsite fields from data
2188
+ if(!empty($wassup_options->export_omit_recid)){
2189
+ unset($wassup_rec['id']);
2190
+ }
2191
+ if(!is_multisite()) unset($wassup_rec['subsite_id']);
2192
+ if($dtype == "csv"){
2193
+ //convert timestamp
2194
+ $date24time=gmdate('Y-m-d H:i:s',$wassup_rec['timestamp']);
2195
+ $wassup_rec['timestamp']=$date24time;
2196
+ fputcsv($output,$wassup_rec);
2197
  }else{
2198
+ //output sql-insert statement
2199
+ if($exp_n == 0){
2200
+ $sql_data =$sql_fields;
2201
+ }elseif($exp_n%100==0){
2202
+ //write completed stmt
2203
+ $sql_data .=';';
2204
+ fwrite($output,$sql_data);
2205
+ $sql_data ="\n$sql_fields";
2206
+ }else{
2207
+ $sql_data .=',';
2208
+ }
2209
+ //the data
2210
+ $sql_data .="\n(";
2211
+ $i=0;
2212
+ foreach($wassup_rec AS $key =>$val){
2213
+ if($i >0) $sql_data .= ",";
2214
+ if(isset($ints[$key])){
2215
+ $sql_data .=(''===$val)?"''":$val;
2216
+ }else{
2217
+ $sql_data .="'".esc_sql(str_replace($search,$replace,$val))."'";
2218
+ }
2219
+ $i++;
2220
+ } //end foreach
2221
+ $sql_data .=")";
2222
  }
2223
+ $exp_n +=1;
2224
+ } //end foreach exportrec
2225
+ $exporttot +=$exp_n;
2226
+ if($lastexported_id > $start_id) $start_id=$lastexported_id;
2227
+ //output last sql statement
2228
+ if(!empty($sql_data)){
2229
+ $sql_data .=';'."\n";
2230
+ fwrite($output,$sql_data);
2231
+ }
2232
+ //stop export when stimeout limit is reached
2233
+ $time_passed = time() - $stimer_start;
2234
+ $n+=1;
2235
+ } while($rec_count >0 && $time_passed < $stimeout);
2236
+ //add msg, close stream and flush buffer
2237
+ //show last record id # in message
2238
+ if(!empty($lastexported_id)){
2239
+ $msg = $exporttot." ".strtoupper($dtype)." ".__("records exported!","wassup");
2240
+ $msg .= " ".__("Last export record id","wassup").": ".$lastexported_id;
2241
+ }
2242
+ //output footer @TODO
2243
+ $sql_footer="";
2244
+ //save export message
2245
+ if(isset($_REQUEST['mid'])) $msgkey=$_REQUEST['mid'];
2246
+ else $msgkey="0";
2247
+ if(!empty($msg)){
2248
+ wassup_log_message($msg,"_export_msg",$msgkey);
2249
+ }elseif(!empty($err_msg)){
2250
+ wassup_log_message($err_msg,"_export_msg",$msgkey);
2251
+ }
2252
+ //close export stream, flush buffer
2253
+ fclose($output);
2254
+ if($n >0) die();
2255
+ }else{
2256
+ $err_msg=strtoupper($dtype).' Export ERROR: Cannot open stream php://output';
2257
+ } //end if output
2258
+ //export failed if get here, so save error and return
2259
+ if(!empty($err_msg)){
2260
+ wassup_log_message($err_msg." ".$msg);
2261
+ }else{
2262
+ $err_msg=__("Export failed!","wassup")." ".$msg;
2263
+ wassup_log_message($err_msg);
 
 
 
2264
  }
2265
+ } //end export_records
 
2266
 
2267
  } //end class wassupDb
2268
  } //end if !class_exists
2316
  }
2317
  /** Return the url and "path" for wordpress site's "home". */
2318
  static function get_sitehome(){
 
2319
  if(is_multisite() && is_network_admin()){
2320
  $sitehome=network_home_url();
2321
+ }else{
2322
+ $sitehome=get_option('siteurl');
2323
  }
2324
+ if(empty($sitehome)) $sitehome=get_option('home');
2325
  return $sitehome;
2326
+ } //end get_sitehome
2327
 
2328
  //** Return the url and "path" for wordpress admin. */
2329
  static function get_wphome(){
 
2330
  if(is_multisite() && is_network_admin()){
2331
  $wphome=network_admin_url();
2332
+ }else{
2333
+ $wphome=admin_url();
2334
  }
2335
+ if(empty($wphome)) $wphome=get_option('wpurl');
2336
  return $wphome;
2337
  } //end get_wphome
2338
 
2339
+ /** Return the "domain" part of a url/this site @since v1.9.4 */
2340
+ static function get_urldomain($urlparam=""){
2341
+ $domain=false;
2342
+ $url=array();
2343
+ //default param is this site's url
2344
+ if(empty($urlparam)) $urlparam=self::get_sitehome();
2345
+ if(strpos($urlparam,'//')!==false) $url=parse_url($urlparam);
2346
+ if(!empty($url['host'])){
2347
+ $domain=preg_replace('/^(w{2,3}\d?\.)/','',$url['host']);
2348
+ }elseif(preg_match('#(?://|ww[0-9w]\.|^)([^?.\# %/=&]+\.(?:[^?\# %/=&]+))(?:[?\# /]|$)#',$urlparam,$pcs)>0){
2349
+ $domain=preg_replace('/^(w{2,3}\d?\.)/','',$pcs[1]);
2350
+ }
2351
+ return $domain;
2352
+ }
2353
  /**
2354
  * Return request url in a link tag or span tag if it is suspicious or 404.
2355
  * Security Note: returned href, tooltip, and tag contents are escaped within 'add_siteurl' or 'disarm_attack methods, or by 'stringShortener' function
2369
  $request=strtolower($urlrequested);
2370
  if(strlen($request)>60) $tooltip=' title="'.self::cleanURL($request).'" ';
2371
  else $tooltip="";
2372
+ if($chars >0) $cleaned_uri=stringShortener("$urlrequested",round($chars*.9,0));
2373
+ else $cleaned_uri=self::cleanURL("$urlrequested");
2374
  //no link for spam, 404, wp-admin, wp-login or any possible unidentified spam @since v1.9.1
2375
  if(!empty($spam) || self::is_xss($urlrequested)){
2376
+ $urllink='<span class="malware"'.$tooltip.'>'.$cleaned_uri.'</span>';
 
 
 
2377
  }elseif(preg_match('/\/wp\-(?:admin|content|includes)\/|\/wp\-login\.php|^\[[0-9]{3}\]/',$urlrequested)>0){
2378
+ $urllink='<span'.$tooltip.'>'.$cleaned_uri.'</span>';
 
 
 
2379
  }else{
2380
+ $urllink='<a href="'.self::add_siteurl($request).'" target="_BLANK">'.$cleaned_uri.'</a>';
 
 
 
2381
  }
2382
  return $urllink;
2383
  }
2404
  $tooltip="";
2405
  $ref=strtolower($referer);
2406
  if(strlen($ref)>60) $tooltip=' title="'.self::cleanURL($ref).'" ';
2407
+ if($chars >0) $cleaned_uri=stringShortener("$referer",round($chars*.9,0)); //v1.9.4 bugfix
2408
+ else $cleaned_uri=self::cleanURL("$referer");
2409
  //referrer from site or site-admin
2410
  if(stristr($referer,$wpurl)==$referer || stristr($referer,$siteurl)==$referer){
2411
  //direct hit when referrer == request
2413
  $referrerlink='<span>'.__("direct hit","wassup").'</span>';
2414
  }elseif($spam==2 || self::is_xss($ref)){
2415
  //show spam referrers w/o link
2416
+ $referrerlink='<span class="malware"'.$tooltip.'>'.$cleaned_uri.'</span>';
2417
  }elseif($spam >0){
2418
+ $referrerlink='<span'.$tooltip.'>'.$cleaned_uri.'</span>';
2419
  }elseif(is_user_logged_in()){
2420
  //show 'wp-login', 'wp-includes', and 'wp-content' referrers to logged-in users
2421
  if(strpos($ref,'wp-login.php')>0 || strpos($ref,'/wp-includes/')>0 || strpos($ref,'/wp-content/')>0){
2422
+ $referrerlink='<a href="'.self::cleanURL($referer).'" target=_"BLANK"'.$tooltip.'>'.$cleaned_uri.'</a>';
2423
  }else{
2424
  $referrerlink="<span{$tooltip}>".__("from your site","wassup")."</span>";
2425
  }
2431
  $favicon_img="";
2432
  //no link for spam or wp-admin
2433
  if($spam==2 || self::is_xss($ref)){
2434
+ $referrerlink='<span class="malware"'.$tooltip.'>'.$cleaned_uri.'</span>';
2435
  }elseif($spam >0 || strpos($ref,'http')===false || strpos($ref,'http')>0 || preg_match('/\/wp\-(?:admin|content|includes)\/|\/wp\-login\.php/i',$ref)>0){
2436
+ $referrerlink='<span'.$tooltip.'>'.$cleaned_uri.'</span>';
2437
  }else{
2438
  $rurl=parse_url($referer);
2439
  if(!empty($rurl['host']) && preg_match('/\.[a-z]{2,4}$/',$rurl['host'])>0){
2440
  $favicon_img='<img src="http://www.google.com/s2/favicons?domain='.$rurl['host'].'" class="favicon"> ';
2441
  }
2442
+ $referrerlink=$favicon_img.'<a href="'.self::cleanURL($referer).'" target=_"BLANK"'.$tooltip.'>'.$cleaned_uri.'</a>';
2443
  }
2444
  }
2445
  }else{
2534
  * @return string
2535
  */
2536
  static function get_menu_arg(){
2537
+ $menuarg="wassup";
2538
  if(isset($_GET['page'])) $menuarg=$_GET['page'];
2539
  if(stristr($menuarg,"wassup")!==false){
2540
+ if(isset($_GET['ml'])){
2541
+ $menuarg=$_GET['ml'];
2542
+ }else{
2543
+ $wassupfolder=basename(WASSUPDIR);
2544
+ if($menuarg=="wassup-stats"){
2545
+ $menuarg="wassup";
2546
+ }elseif($menuarg=="wassup-spia"){
2547
+ $menuarg="wassup-spy";
2548
+ }elseif($menuarg==$wassupfolder){
2549
+ $menuarg="wassup";
2550
+ }elseif($menuarg=="wassup-options"){
2551
+ if(isset($_GET['tab'])){
2552
+ if($_GET['tab']=="donate") $menuarg="wassup-donate";
2553
+ elseif($_GET['tab']=="faq") $menuarg="wassup-faq";
2554
+ }
2555
+ }
2556
  }
2557
  }
2558
  return $menuarg;
2596
  $ajaxurl=admin_url('index.php?page=wassup-stats');
2597
  }elseif($action=="Topstats"){
2598
  $ajaxurl=self::get_admin_url('index.php?page=wassup-stats');
2599
+ }elseif($action=="Export"){
2600
+ $ajaxurl=self::get_admin_url('index.php?page=wassup-options&tab=3');
2601
  }
2602
  return $ajaxurl;
2603
  }
2604
  } //end Class wassupURI
2605
  } //end if !class_exists
2606
+
2607
+ if(!class_exists('wassupIP')){
2608
+ /**
2609
+ * class containing methods to detect and display ip addresses and doains on the internet.
2610
+ * @since v1.9.4
2611
+ * @author helened <http://helenesit.com>
2612
+ */
2613
+ class wassupIP {
2614
+ /** Return a single ip (the client IP) from a comma-separated IP address with no ip validation. @since v1.9 */
2615
+ static function clientIP($ipAddress){
2616
+ $IP=false;
2617
+ if(!empty($ipAddress)){
2618
+ $ip_proxy=strpos($ipAddress,",");
2619
+ //if proxy, get 2nd ip...
2620
+ if($ip_proxy!==false){
2621
+ $IP=substr($ipAddress,(int)$ip_proxy+1);
2622
+ }else{
2623
+ $IP=$ipAddress;
2624
+ }
2625
+ }
2626
+ return $IP;
2627
+ }
2628
+
2629
+ /** return 1st valid IP address in a comma-separated list of IP addresses -Helene D. 2009-03-01 */
2630
+ static function validIP($multiIP) {
2631
+ //in case of multiple forwarding
2632
+ $ips=explode(",",$multiIP);
2633
+ $goodIP=false;
2634
+ //look through forwarded list for a good IP
2635
+ foreach ($ips as $ipa) {
2636
+ $IP=trim(strtolower($ipa));
2637
+ //exclude badly formatted ip's @since v1.9.3
2638
+ if(!empty($IP)){
2639
+ //exclude dummy IPv4 addresses
2640
+ if(preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/',$IP)>0){
2641
+ if($IP!="0.0.0.0" && $IP!="127.0.0.1" && substr($IP,0,8)!="192.168." && substr($IP,0,3)!="10." && substr($IP,0,4)!="172." && substr($IP,0,7)!='192.18.' && substr($IP,0,4)!='255.' && substr($IP,-4)!='.255'){
2642
+ $goodIP=$IP;
2643
+ }elseif(substr($IP,0,4)=="172." && preg_match('/172\.(1[6-9]|2[0-9]|3[0-1])\./',$IP)===false){
2644
+ $goodIP=$IP;
2645
+ }
2646
+ //exclude dummy IPv6 addresses
2647
+ }elseif(preg_match('/^(?:((?:[0-9a-f]{1,4}\:){1,}(?:\:?[0-9a-f]{1,4}){1,})|(\:\:(?:[0-9a-f]{1,4})?))$/i',$IP)>0){
2648
+ $ipv6=str_replace("0000","0",$IP);
2649
+ if($ipv6!='::' && $ipv6!='0:0:0:0:0:0:0:0' && $ipv6!='::1' && $ipv6!='0:0:0:0:0:0:0:1' && substr($ipv6,0,2)!='fd' && substr($ipv6,0,5)!='ff01:' && substr($ipv6,0,5)!='ff02:' && substr($ipv6,0,5)!='2001:'){
2650
+ $goodIP=$IP;
2651
+ }
2652
+ }
2653
+ if(!empty($goodIP)) break;
2654
+ }
2655
+ } //end foreach
2656
+ return $goodIP;
2657
+ } //end function validIP
2658
+ /**
2659
+ * return a validated ip address from http header
2660
+ * @since v1.9
2661
+ * @param string
2662
+ * @return string
2663
+ */
2664
+ static function get_clientAddr($ipAddress=""){
2665
+ $proxy="";
2666
+ $hostname="";
2667
+ $IP="";
2668
+ //Get the visitor IP from Http_header
2669
+ if(empty($ipAddress)){
2670
+ $ipAddress=(isset($_SERVER['REMOTE_ADDR'])?$_SERVER['REMOTE_ADDR']:"");
2671
+ }
2672
+ $IPlist=$ipAddress;
2673
+ $proxylist=$ipAddress;
2674
+ $serverAddr=(isset($_SERVER['SERVER_ADDR'])?$_SERVER['SERVER_ADDR']:"");
2675
+ //for computers behind proxy servers:
2676
+ //if(!empty($_SERVER['HTTP_X_FORWARDED_HOST'])) $serverAddr=$_SERVER['HTTP_X_FORWARDED_HOST'];
2677
+ //elseif(!empty($_SERVER['HTTP_X_FORWARDED_SERVER'])) $serverAddr=$_SERVER['HTTP_X_FORWARDED_SERVER'];
2678
+ //
2679
+ //check that the client IP is not equal to the host server IP
2680
+ if(isset($_SERVER['HTTP_CLIENT_IP']) && $serverAddr!=$_SERVER['HTTP_CLIENT_IP'] && $ipAddress!=$_SERVER['HTTP_CLIENT_IP']){
2681
+ if(strpos($proxylist,$_SERVER["HTTP_CLIENT_IP"])===false){
2682
+ $IPlist=$_SERVER['HTTP_CLIENT_IP'].",".$proxylist;
2683
+ $proxylist=$IPlist;
2684
+ }
2685
+ $ipAddress=$_SERVER['HTTP_CLIENT_IP'];
2686
+ }
2687
+ if(isset($_SERVER['HTTP_X_REAL_IP']) && $serverAddr!=$_SERVER['HTTP_X_REAL_IP'] && $ipAddress!=$_SERVER['HTTP_X_REAL_IP']){
2688
+ if(strpos($proxylist,$_SERVER["HTTP_X_REAL_IP"])===false){
2689
+ $IPlist=$_SERVER['HTTP_X_REAL_IP'].",".$proxylist;
2690
+ $proxylist=$IPlist;
2691
+ }
2692
+ $ipAddress=$_SERVER['HTTP_X_REAL_IP'];
2693
+ }
2694
+ //check for IP addresses from Cloudflare CDN-hosted sites
2695
+ if(isset($_SERVER['HTTP_CF_CONNECTING_IP']) && $serverAddr!=$_SERVER['HTTP_CF_CONNECTING_IP'] && $ipAddress!=$_SERVER['HTTP_CF_CONNECTING_IP']){
2696
+ if(strpos($proxylist,$_SERVER["HTTP_CF_CONNECTING_IP"])===false){
2697
+ $IPlist=$_SERVER['HTTP_CF_CONNECTING_IP'].",".$proxylist;
2698
+ $proxylist=$IPlist;
2699
+ }
2700
+ $ipAddress=$_SERVER['HTTP_CF_CONNECTING_IP'];
2701
+ }
2702
+ //check for proxy addresses
2703
+ if(!empty($_SERVER["HTTP_X_FORWARDED_FOR"]) && $serverAddr!=$_SERVER['HTTP_X_FORWARDED_FOR'] && $ipAddress!=$_SERVER['HTTP_X_FORWARDED_FOR']){
2704
+ if(strpos($proxylist,$_SERVER['HTTP_X_FORWARDED_FOR'])===false){
2705
+ $IPlist=$_SERVER['HTTP_X_FORWARDED_FOR'].",".$proxylist;
2706
+ $proxylist=$IPlist;
2707
+ }
2708
+ $ipAddress=$_SERVER['HTTP_X_FORWARDED_FOR'];
2709
+ }
2710
+ if(!empty($_SERVER["HTTP_X_FORWARDED"]) && $serverAddr!=$_SERVER["HTTP_X_FORWARDED"] && $ipAddress!=$_SERVER['HTTP_X_FORWARDED']){
2711
+ if(strpos($proxylist,$_SERVER['HTTP_X_FORWARDED'])===false){
2712
+ $IPlist=$_SERVER['HTTP_X_FORWARDED'].",".$proxylist;
2713
+ $proxylist=$IPlist;
2714
+ }
2715
+ $ipAddress=$_SERVER['HTTP_X_FORWARDED'];
2716
+ }
2717
+ //try get valid IP
2718
+ $IP = self::validIP($ipAddress);
2719
+ if(empty($IP) && $ipAddress!=$proxylist){
2720
+ $proxylist=preg_replace('/(^|[^0-9\.])'.preg_quote($ipAddress).'($|[^0-9\.])/','',$IPlist);
2721
+ $IP=self::validIP($proxylist);
2722
+ }
2723
+ if(!empty($IP)){
2724
+ $p=strpos($IPlist,$IP)+strlen($IP)+1;
2725
+ if($p < strlen($IPlist)) $proxylist=substr($IPlist,$p);
2726
+ else $proxylist="";
2727
+ }
2728
+ //check client hostname for known proxy gateways
2729
+ if(!empty($IP)){
2730
+ $hostname=self::get_hostname($IP);
2731
+ if(preg_match('/(cloudflare\.|cache|gateway|proxy|unknown$|localhost$|\.local(?:domain)?$)/',$hostname)>0){
2732
+ $ip1=$IP;
2733
+ if(!empty($proxylist)) $IP=self::validIP($proxylist);
2734
+ if(!empty($IP)){
2735
+ $p=strpos($IPlist,$IP)+strlen($IP)+1;
2736
+ if($p < strlen($IPlist)) $proxylist=substr($IPlist,$p);
2737
+ else $proxylist="";
2738
+ }else{
2739
+ $IP=$ip1;
2740
+ }
2741
+ }
2742
+ if(!empty($proxylist)) $proxy=self::validIP($proxylist);
2743
+ if(!empty($proxy)) $ipAddress=$proxy.','.$IP;
2744
+ else $ipAddress=$IP;
2745
+ }
2746
+ return $ipAddress;
2747
+ } //end get_clientAddr
2748
+
2749
+ /** lookup the hostname from an ip address via cache or via gethostbyaddr command @since v1.9 */
2750
+ static function get_hostname($IP=""){
2751
+ if(empty($IP)) $IP=self::clientIP($_SERVER['REMOTE_ADDR']);
2752
+ //first check for cached hostname
2753
+ $hostname=wassupDb::get_wassupmeta($IP,'hostname');
2754
+ if(empty($hostname)){
2755
+ if($IP=="127.0.0.1" || $IP=='::1' || $IP=='0:0:0:0:0:0:0:1'){
2756
+ $hostname="localhost";
2757
+ }elseif($IP=="0.0.0.0" || $IP=='::' || $IP=='0:0:0:0:0:0:0:0'){
2758
+ $hostname="unknown";
2759
+ }else{
2760
+ $hostname=@gethostbyaddr($IP);
2761
+ if(!empty($hostname) && $hostname!=$IP && $hostname!="localhost" && $hostname!="unknown"){
2762
+ $meta_key='hostname';
2763
+ $meta_value=$hostname;
2764
+ $expire=time()+48*3600; //cache for 2 days
2765
+ $cache_id=wassupDb::update_wassupmeta($IP,$meta_key,$meta_value,$expire);
2766
+ }
2767
+ }
2768
+ }
2769
+ return $hostname;
2770
+ } //end get_hostname
2771
+ } //end Class
2772
+ } //end if !class_exists
2773
  ?>
lib/wassupadmin.php CHANGED
@@ -130,10 +130,8 @@ function wassup_embeded_scripts($wassuppage="") {
130
  if(empty($URLQuery) && preg_match('/[^\?]+\?([A-Za-z\-_]+.*)/',html_entity_decode($_SERVER['REQUEST_URI']),$pcs)>0) $URLQuery=$pcs[1];
131
  if(!empty($URLQuery)){
132
  $refresh_loc='location.href="?'.wassupURI::cleanURL($URLQuery).'"';
133
- //remove "delete","search", and "chart" query parameters from url for auto-refresh @since v1.9
134
  if(isset($_GET['deleteMARKED']) || isset($_GET['chart']) || isset($_GET['dip']) || isset($_GET['mark']) || isset($_GET['search-submit'])){
135
  $remove_args=array('deleteMARKED','dip','chart','mark','submit-search');
136
- //$newQuery=preg_replace(array('/&deleteMARKED=[^&]+/','/&dip=[^&]+/','/&chart=[^&]+/','/&mark=[^&]+/','/&submit\-search=[^&]+/'),"",$URLQuery);
137
  $newURL=remove_query_arg($remove_args);
138
  if(!empty($newURL) && $newURL != $_SERVER['REQUEST_URI']){
139
  $refresh_loc='location.href="'.wassupURI::cleanURL($newURL).'"';
@@ -150,19 +148,8 @@ function wassup_embeded_scripts($wassuppage="") {
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
- //check 'wrefresh' value after 'wassupReload' is defined @since v1.9.2
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
164
- } //end if $wrefresh > 0
165
- ?>
166
  jQuery(document).ready(function($){
167
  $("a.showhide").click(function(){var id=$(this).attr('id');$("div.navi"+id).toggle("slow");return false;});
168
  $("a.toggleagent").click(function(){var id=$(this).attr('id');$("div.naviagent"+id).slideToggle("slow");return false;});
@@ -255,7 +242,7 @@ function wassup_embeded_scripts($wassuppage="") {
255
  <script type="text/javascript">
256
  //<![CDATA[
257
  function wSelfRefresh(){location.reload(true)}
258
- var selftimerID=setTimeout('wSelfRefresh()',<?php echo ($wrefresh*60000)+2000;?>);
259
  jQuery(document).ready(function($){
260
  $("a.showhide").click(function(){var id=$(this).attr('id');$("div.navi"+id).toggle("slow");return false;});
261
  $("a.toggle-all").toggle(function(){
@@ -267,16 +254,96 @@ function wassup_embeded_scripts($wassuppage="") {
267
  //]]>
268
  </script><?php
269
  echo "\n";
270
- }elseif($wassuppage == "wassup-options"){
271
  ?>
272
  <script type="text/javascript">
273
- //<![CDATA[
274
- jQuery(document).ready(function($) {
275
- var tabs=$('#tabcontainer').tabs();
276
- $('.submit-opt').click(function(){$(this).css("background-color","#d71");});
277
- $('.default-opt').click(function(){$(this).css("background-color","#d71");});
278
- });
279
- //]]>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
280
  </script><?php
281
  echo "\n";
282
  }elseif($wassuppage=="wassup-spia" || $wassuppage=="wassup-spy"){
@@ -284,8 +351,7 @@ function wassup_embeded_scripts($wassuppage="") {
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=base64_decode(urldecode("QUl6YVN5Q3VfcGxpbjk3VGx0WThaazZLdWFsR0NtUmpkRi1PWERv"));
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
291
  //add 'action_param' query params to ajaxurl
@@ -310,10 +376,12 @@ jQuery(document).ready(function($){
310
  $('#spy-pause').click(function(){
311
  $(this).css("background-color","#ebb");$("#spy-play").css("background-color","#eae9e9");<?php
312
  if(!empty($wassup_user_settings['spy_map']) || !empty($_GET['map'])) echo '$("div#spia_map").css({"opacity":"0.7","background":"none"});';?>
 
313
  });
314
  $('#spy-play').click(function(){
315
  $(this).css("background-color","#cdc");$("#spy-pause").css("background-color","#eae9e9");<?php
316
  if(!empty($wassup_user_settings['spy_map']) || !empty($_GET['map'])) echo '$("div#spia_map").css("opacity","1");';?>
 
317
  });
318
  });
319
  <?php
@@ -357,27 +425,29 @@ function showMarkerinfo(mmap,mlat,mlon,marker,markerwin){
357
  * -assign an admin body class (wassup, wassup-wp-legacy) for wassup page styling
358
  */
359
  function wassup_add_css() {
360
- global $wassup_options;
361
  //jqueryui-css and thickbox.css to wassup pages
362
  $wassuppage=wassupURI::get_menu_arg();
363
  if(!empty($wassuppage) && strpos($wassuppage,'wassup')!==FALSE){
364
  //TODO: Add a WassUp favicon to wassup pages
365
  //output the stylesheet links
366
  //always use Wassup's jquery-ui.css in Wassup-options
367
- if($wassuppage=="wassup-options"){?>
368
- <link href="<?php echo WASSUPURL;?>/css/jquery-ui/jquery.ui.theme.css" rel="stylesheet" type="text/css" />
369
- <link href="<?php echo WASSUPURL;?>/css/jquery-ui/jquery.ui.tabs.css" rel="stylesheet" type="text/css" /><?php
370
  echo "\n";
 
 
 
 
 
371
  }
372
  //always use Wassup's thickbox.css in Wassup panels
373
  if($wassuppage=="wassup" || $wassuppage=="wassup-online"){?>
374
  <link rel="stylesheet" href="<?php echo WASSUPURL.'/js/thickbox/thickbox.css';?>" type="text/css" /><?php
375
  echo "\n";
376
  }
377
- // Override some Wordpress css and Wassup default css settings on Wassup pages- TODO: check against latest version of ozh drop-down plugin
378
  ?>
379
  <style type="text/css">
380
- #ozh_menu_wrap{margin-top:-3px !important;} /* ozh drop-down plugin */
381
  #contextual-help-link{display:none;}
382
  .update-nag{display:none;} /* nag messes up tab menus, so hide it */
383
  </style>
@@ -488,7 +558,7 @@ function wassup_plugin_links($links, $file){
488
  * Add a horizontal navigation (tab) menu to Wassup pages.
489
  * - automatically adds tab links for each submenu in Wassup's main menu when available (admin users only)
490
  * - adds tab links to Wassup-stats dashboard submenu using the 'ml' query parameter
491
- * - appends a "Donate" tab to menu
492
  * @author helened
493
  * @since v1.9
494
  */
@@ -520,25 +590,44 @@ function wassup_menu_links($selected=""){
520
  $menu_class=" current";
521
  }
522
  if(current_user_can($menu_access)){
523
- if($menu_page=="wassup-online") $menu_name =__("Current Visitors Online","wassup");
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
524
  echo "\n";?>
525
- <li class="wassup-menu-link<?php echo $menu_class;?>"><a href="<?php echo wassupURI::get_admin_url('admin.php?page='.$menu_page);?>"><?php echo $menu_name;?></a></li><?php
526
  }
527
  }//end for
 
 
528
  $donate_link_url="";
529
  if(is_multisite() && is_network_admin()){
530
  $donate_link_url=network_admin_url('admin.php?page=wassup-options&tab=donate');
531
  }elseif(current_user_can('manage_options')){
532
  $donate_link_url=admin_url('admin.php?page=wassup-options&tab=donate');
533
  }
534
- wassup_donate_link($donate_link_url);
535
  }else{
536
  if (($selected=="wassup-stats" || $selected=="wassup") && !empty($_GET['ml'])) $selected=$_GET['ml'];
537
  echo "\n";?>
538
- <li class="wassup-menu-link<?php if($selected=='wassup-online') echo ' current';?>"><a href="<?php echo wassupURI::get_admin_url('index.php?page=wassup-stats&ml=wassup-online');?>"><?php _e('Current Visitors Online','wassup');?></a></li>
539
- <li class="wassup-menu-link<?php if($selected=='wassup-spia' || $selected=='wassup-spy') echo ' current';?>"><a href="<?php echo wassupURI::get_admin_url('index.php?page=wassup-stats&ml=wassup-spia');?>"><?php _e('SPY Visitors','wassup');?></a></li>
540
- <li class="wassup-menu-link<?php if($selected=='wassup' || $selected==$wassupfolder || $selected=='wassup-stats') echo ' current';?>"><a href="<?php echo wassupURI::get_admin_url('index.php?page=wassup-stats');?>"><?php _e('Visitor Details','wassup');?></a></li><?php
541
- wassup_donate_link();
 
542
  } //end if submenu
543
  echo "\n";?>
544
  </ul><div style="clear:right;"></div>
@@ -547,9 +636,7 @@ function wassup_menu_links($selected=""){
547
 
548
  function wassup_donate_link($link_url=""){
549
  global $wdebug_mode;
550
- //add menu tab for donate link to Paypal
551
- echo "\n";?>
552
- <li id="donate-link" class="wassup-menu-link"><?php
553
  if(!empty($link_url) && strpos($link_url,'//')!==false){
554
  echo '<a href="'.$link_url.'"><img src="'.WASSUPURL.'/img/donate-button-sm.png" alt="'.__("Donate","wassup").'"/></a>';
555
  }else{
@@ -569,7 +656,7 @@ function wassup_donate_link($link_url=""){
569
  echo "\n";?>
570
  </form>
571
  <?php
572
- }?></li><?php
573
  } //end wassup_donate_link
574
 
575
  /**
@@ -600,6 +687,7 @@ function WassUp() {
600
  if(!is_object($current_user) || empty($current_user->ID)) wp_get_current_user();
601
  $wassup_user_settings = get_user_option('_wassup_settings',$current_user->ID);
602
  $tab=0;
 
603
  $admin_message="";
604
  $wassup_table = $wassup_options->wassup_table;
605
  $network_settings=array();
@@ -622,8 +710,8 @@ function WassUp() {
622
  // RUN THE DELETE/SAVE/RESET FORM OPTIONS
623
  // Processed here so that any resulting "admin_message" or errors will display with page
624
  //DELETE NOW options...
625
- if(!empty($_POST) && ($wassuppage== "wassup-options" || $wassuppage == "wassup" || $wassuppage=="wassup-stats")){
626
- if($wassuppage=="wassup-options"){
627
  //check user capability and verify admin referer/wp nonce before processing form changes and delete requests @since v1.9
628
  if(current_user_can('manage_options') && wassupURI::is_valid_admin_referer('wassupsettings-'.$current_user->ID)){
629
  //workaround code for Google Chrome's empty 'onclick=submit()' "delete NOW" value @since v1.9
@@ -775,6 +863,10 @@ function WassUp() {
775
  $admin_message = __("Wassup options reset successfully","wassup")."." ;
776
  $wassup_user_settings=$wassup_options->resetUserSettings();
777
  if($wassup_options->is_recording_active()) wassup_cron_startup(); //restart wp-cron
 
 
 
 
778
  }
779
  }
780
  } //end if !delete_now
@@ -888,10 +980,14 @@ function WassUp() {
888
  }elseif ($wassuppage == "wassup-spia" || $wassuppage == "wassup-spy"){?>
889
  <h2>WassUp - <?php _e("SPY Visitors", "wassup"); ?></h2><?php
890
  wassup_page_contents(array('wassuppage'=>$wassuppage,'tab'=>$tab));
891
- }elseif ($wassuppage == "wassup-options"){?>
892
  <h2>WassUp - <?php _e('Options','wassup'); ?></h2><?php
893
  if (!function_exists('wassup_optionsView')) include_once(WASSUPDIR.'/lib/settings.php');
894
  wassup_optionsView($tab);
 
 
 
 
895
  }else{
896
  return;
897
  }
@@ -904,6 +1000,16 @@ function WassUp() {
904
  <nobr><span class="separator">|</span> <?php echo __('Exec time','wassup').": $totaltime"; ?></nobr>
905
  </small></p>
906
  </div> <!-- end wassup-wrap --><?php
 
 
 
 
 
 
 
 
 
 
907
  } //end WassUp
908
 
909
  /**
@@ -1024,7 +1130,7 @@ function wassup_page_contents($args=array()){
1024
  if ($currenttot > 0) {
1025
  $currentlogged = $TotOnline->calc_tot("count",null,"AND `username`!=''","DISTINCT");
1026
  $currentauth = $TotOnline->calc_tot("count",null,"AND `comment_author`!='' AND `username`=''","DISTINCT");
1027
- $sql=sprintf("SELECT SQL_NO_CACHE `id`, wassup_id, count(wassup_id) as numurl, max(`timestamp`) as max_timestamp, `ip`, `hostname`, `searchengine`, `search`, `searchpage`, `urlrequested`, `referrer`, `agent`, `browser`, `spider`, `feed`, `os`, `screen_res`, GROUP_CONCAT(DISTINCT `username` ORDER BY `username` SEPARATOR ', ') AS login_name, `comment_author`, `language`, `spam` AS malware_type, `url_wpid` FROM $wassup_tmp_table WHERE %s GROUP BY `wassup_id` ORDER BY max_timestamp DESC",$whereis);
1028
  $qryC=$wpdb->get_results($sql);
1029
  if(!empty($qryC) && is_wp_error($qryC)){
1030
  $errno=$qryC->get_error_code();
@@ -1070,19 +1176,17 @@ function wassup_page_contents($args=array()){
1070
  $Ousername="";
1071
  $ulclass="users";
1072
  $unclass="";
 
1073
  // User is logged in or is a comment's author
1074
  if($cv->login_name != "" || $cv->comment_author !=""){
1075
  $utype="";
1076
- $logged_user="";
1077
- if($cv->login_name != ""){
1078
- $logged_user=trim($cv->login_name,', ');
1079
- if(strpos($logged_user,',')!==false){
1080
- $loginnames=explode(',',$logged_user);
1081
  foreach($loginnames AS $name){
1082
  $logged_user=trim($name);
1083
- if(!empty($logged_user)){
1084
- break;
1085
- }
1086
  }
1087
  }
1088
  $utype=__("LOGGED IN USER","wassup");
@@ -1100,7 +1204,7 @@ function wassup_page_contents($args=array()){
1100
  $Ousername='<li class="users"><span class="indent-li-agent">'.$utype.': <strong>'.esc_attr($logged_user).'</strong></span></li>';
1101
  }
1102
  }else{
1103
- $Ousername='<li class="users"><span class="indent-li-agent">'.$utype.': <strong>'.esc_attr($cv->login_name).'</strong></span></li>';
1104
  }
1105
  $unclass="sum-box-log";
1106
  }
@@ -1112,6 +1216,7 @@ function wassup_page_contents($args=array()){
1112
  }
1113
  if(!empty($cv->spider)) $unclass="sum-box-spider";
1114
  if(!empty($cv->malware_type)) $unclass="sum-box-spam";
 
1115
  echo "\n";?>
1116
  <div class="sum-rec"><?php
1117
  // Visitor Record - raw data (hidden)
@@ -1396,54 +1501,7 @@ function wassup_page_contents($args=array()){
1396
  $wwhereis .=" AND `ip`='$wip'";
1397
  }
1398
  update_user_option($current_user->ID,'_wassup_settings',$wassup_user_settings);
1399
- //to prevent browser timeouts, send <!--heartbeat--> output
1400
- echo "<!--heartbeat-->\n";
1401
- // Instantiate class to count items
1402
- $wTot = New WassupItems($wassup_table,$from_date,$to_date,$wwhereis,$wlimit);
1403
- $wTot->WpUrl=$wpurl;
1404
- $witemstot=0;
1405
- $wpagestot=0;
1406
- $wspamtot=0;
1407
- $markedtot=0;
1408
- $searchtot=0;
1409
- $wmain=array();
1410
- $ipsearch="";
1411
- //don't apply "search" for marked ip (in whereis)
1412
- if(!empty($wsearch) && $wsearch==$wip){
1413
- $ipsearch=$wsearch;
1414
- $wsearch="";
1415
- }
1416
- echo "\n<!--heartbeat-->";
1417
- // MAIN QUERY
1418
- if(!empty($wTot->totrecords)){
1419
- $wmain=$wTot->calc_tot("main",$wsearch);
1420
- echo "\n<!--heartbeat-->";
1421
- $witemstot=$wTot->calc_tot("count",$wsearch,null,"DISTINCT");
1422
- echo "\n<!--heartbeat-->";
1423
- if(!empty($wsearch))$wpagestot=$wTot->calc_tot("count",$wsearch);
1424
- else $wpagestot=(int)$wTot->totrecords;
1425
- echo "\n<!--heartbeat-->";
1426
- $wspamtot=$wTot->calc_tot("count",$wsearch,"AND `spam`>'0'");
1427
- // Check if some records were marked
1428
- if (!empty($wip)){
1429
- if (empty($ipsearch)){
1430
- echo "\n<!--heartbeat-->";
1431
- $markedtot=$wTot->calc_tot("count",$wsearch," AND `ip`='".$wip."'","DISTINCT");
1432
- }else{
1433
- //avoid redundant calculations when search and mark/wip are the same
1434
- $markedtot=$witemstot;
1435
- }
1436
- }
1437
- // Check if some records were searched
1438
- if(!empty($wsearch)) {
1439
- //searchtot is the same query as witemstot above and shouldn't be re-calculated (visitor detail fix)
1440
- //$searchtot=$wTot->calc_tot("count",$wsearch,null,"DISTINCT");
1441
- $searchtot=$witemstot;
1442
- }elseif(!empty($ipsearch)){
1443
- $searchtot=$markedtot;
1444
- }
1445
- }
1446
- if(!empty($ipsearch)) $wsearch=$ipsearch;
1447
  //Clear non-sticky filter parameters from URL before applying new filters
1448
  $URLQuery=trim(html_entity_decode($_SERVER['QUERY_STRING']));
1449
  //'remove_query_arg' function replaces "preg_replace" to remove args from query string @since v1.9.1
@@ -1491,6 +1549,50 @@ function wassup_page_contents($args=array()){
1491
  </td></tr>
1492
  </tbody></table>
1493
  </form><?php
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1494
  // Print Site Usage summary
1495
  echo "\n";?>
1496
  <div class='centered'>
@@ -1498,7 +1600,7 @@ function wassup_page_contents($args=array()){
1498
  <ul><li><span style="border-bottom:2px solid #0077CC;"><?php echo (int)$witemstot;?></span> <?php _e('Visits','wassup');?></li>
1499
  <li><span style="border-bottom:2px dashed #FF6D06;"><?php echo (int)$wpagestot;?></span> <?php _e('Pageviews','wassup');?></li>
1500
  <li><span><?php echo @number_format(($wpagestot/$witemstot),2);?></span> <?php _e('Pages/Visits','wassup');?></li>
1501
- <li><span class="spamtoggle"><?php
1502
  //add spam form overlay when spamcheck is enabled and user is admin or can 'manage_options'
1503
  $hidden_spam_form=false;
1504
  if($wassup_options->wassup_spamcheck == 1 && ($wassup_options->is_admin_login() || current_user_can('manage_options'))){
@@ -1513,7 +1615,7 @@ function wassup_page_contents($args=array()){
1513
  }
1514
  echo '%)</span>';
1515
  if($hidden_spam_form) echo '</a>';
1516
- echo '</span> '.__('Spams','wassup');?></li>
1517
  </ul><br/>
1518
  <div id="chart_placeholder" class="placeholder" align="center"></div>
1519
  </div>
@@ -1534,7 +1636,7 @@ function wassup_page_contents($args=array()){
1534
  <p class="indent-opt"><input type="checkbox" name="wassup_refspam" value="1" <?php if($wassup_options->wassup_refspam==1) echo $checked;?>/> <?php _e('Record referrer spam attempts','wassup');?></p>
1535
  <p class="indent-opt"><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");?></p>
1536
  <p class="indent-opt"><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");?></p>
1537
- <p><input type="submit" name="submit-spam" value="<?php _e('Save Settings','wassup'); ?>" /></p>
1538
  </form>
1539
  </div> <!-- /hiddenspam --><?php
1540
  }
@@ -1553,6 +1655,12 @@ function wassup_page_contents($args=array()){
1553
  <a href="?<?php echo esc_attr($URLQuery.'&chart=1');?>" class="icon"><img src="<?php echo WASSUPURL.'/img/chart_add.png" alt="'.__('show chart','wassup').'" title="'.__('Show the chart','wassup'); ?>"/></a><a href="?<?php echo esc_attr($URLQuery.'&chart=1');?>"><?php _e("Show chart","wassup");?></a><?php
1554
  }?> <span class="separator">|</span>
1555
  <?php
 
 
 
 
 
 
1556
  $wdformat = get_option("date_format");
1557
  if(($to_date - $from_date)>24*3600){
1558
  $stats_range=gmdate("$wdformat",$from_date)." - ".gmdate("$wdformat",$to_date);
@@ -1625,27 +1733,23 @@ function wassup_page_contents($args=array()){
1625
  <div id="pag" align="center"><?php $p->show();?></div><?php
1626
  }
1627
  //# Detailed List of Wassup Records...
 
 
1628
  $error_msg="";
1629
  $data_error="";
1630
  if($witemstot>0 && is_array($wmain) && count($wmain)>0){
1631
  $rkcount=0;
1632
  foreach($wmain as $rk){
1633
  //monitor for script timeout limit and extend, if needed @since v1.9
1634
- if((time()-$stimer_start) >($stimeout-7)){
1635
- //extend timeout if more than 80% done
1636
- if($witems > $witemstot) $percen=($rkcount/$witemstot)*100;
1637
- else $percen=($rkcount/$witems)*100;
1638
- if($rkcount>0 && $percen >80 && $stimeout >=180 && $can_set_timelimit){
1639
- @set_time_limit($stimeout);
1640
- $stimer_start=time();
1641
- }elseif($rkcount>0){
1642
  //report is hung, so terminate here
1643
  $data_error=__("Records display interrupted.","wassup")." - script timeout/partial data.";
1644
- break;
1645
  }else{ //no data, database problem
1646
  $data_error=__("Unable to display records.","wassup")." - script timeout/no data.";
1647
- break;
1648
  }
 
1649
  }
1650
  $rkcount++;
1651
  $dateF = gmdate("d M Y", $rk->max_timestamp);
@@ -1664,11 +1768,13 @@ function wassup_page_contents($args=array()){
1664
  $ulclass="users";
1665
  $Ouser="";
1666
  $Ospider="";
 
 
1667
  //for logged-in user/administrator in ul list
1668
- if($rk->login_name != ""){
1669
- $logged_user=trim($rk->login_name,', ');
1670
- if(strpos($logged_user,',')!==false){
1671
- $loginnames=explode(',',$logged_user);
1672
  foreach($loginnames AS $name){
1673
  $logged_user=trim($name);
1674
  if(!empty($logged_user)){
@@ -1691,7 +1797,7 @@ function wassup_page_contents($args=array()){
1691
  if($show_avatars) $Ouser='<li class="users"><span class="indent-li-agent">'.$utype.': <strong>'.get_avatar($udata->ID,'20').' '.esc_attr($logged_user).'</strong></span></li>';
1692
  else $Ouser='<li class="users"><span class="indent-li-agent">'.$utype.': <strong>'.esc_attr($logged_user).'</strong></span></li>';
1693
  }else{
1694
- $Ouser='<li class="users"><span class="indent-li-agent">'.$utype.': <strong>'.esc_attr($rk->login_name).'</strong></span></li>';
1695
  }
1696
  $unclass="sum-box-log";
1697
  if($wdebug_mode){
@@ -1723,6 +1829,7 @@ function wassup_page_contents($args=array()){
1723
  if(!empty($rk->malware_type)){
1724
  $unclass="sum-box-spam";
1725
  }
 
1726
  echo "\n";?>
1727
  <div id="delID<?php echo esc_attr($rk->wassup_id);?>" class="sum-rec <?php if($wassup_user_settings['umark']==1 && $wassup_user_settings['uip']==$ip) echo 'sum-mark';?>"> <?php
1728
  // Visitor Record - raw data (hidden)
@@ -1930,6 +2037,7 @@ function wassup_page_contents($args=array()){
1930
  if (!empty($wassup_user_settings['detail_chart']) || (!empty($_GET['chart']) && "1" == $_GET['chart'])) {
1931
  $chart_type = (!empty($wassup_options->wassup_chart_type))? $wassup_options->wassup_chart_type: "2";
1932
  //show Google!Charts image
 
1933
  if ($wpagestot > 12) {
1934
  //extend script timeout for chart
1935
  if($can_set_timelimit && (time()-$stimer_start)>$stimeout-30){
@@ -1938,8 +2046,6 @@ function wassup_page_contents($args=array()){
1938
  }
1939
  $chart_url=$wTot->TheChart($wlast,$res,"180",$wsearch,$chart_type,"bg,s,e9e9ea|c,lg,90,deeeff,0,e9e9ea,0.8","page",$wtype);
1940
  $html='<img src="'.$chart_url.'" alt="'.__("Graph of visitor hits","wassup").'" class="chart" width="'.$res.'" />';
1941
- } else {
1942
- $html='<p style="padding-top:10px;">'.__("Too few records to print chart","wassup").'...</p>';
1943
  }
1944
  } else {
1945
  $html='<p style="padding-top:10px">&nbsp;</p>';
130
  if(empty($URLQuery) && preg_match('/[^\?]+\?([A-Za-z\-_]+.*)/',html_entity_decode($_SERVER['REQUEST_URI']),$pcs)>0) $URLQuery=$pcs[1];
131
  if(!empty($URLQuery)){
132
  $refresh_loc='location.href="?'.wassupURI::cleanURL($URLQuery).'"';
 
133
  if(isset($_GET['deleteMARKED']) || isset($_GET['chart']) || isset($_GET['dip']) || isset($_GET['mark']) || isset($_GET['search-submit'])){
134
  $remove_args=array('deleteMARKED','dip','chart','mark','submit-search');
 
135
  $newURL=remove_query_arg($remove_args);
136
  if(!empty($newURL) && $newURL != $_SERVER['REQUEST_URI']){
137
  $refresh_loc='location.href="'.wassupURI::cleanURL($newURL).'"';
148
  <script type='text/javascript'>
149
  //<![CDATA[
150
  var paused=" *<?php _e('paused','wassup'); ?>* ";
151
+ function wassupReload<?php echo $wnonce;?>(wassuploc){if(wassuploc!=="") location.href=wassuploc;else location.reload(true);}
 
152
  function wSelfRefresh(){<?php echo $refresh_loc;?>}
 
 
 
 
 
 
 
 
 
 
153
  jQuery(document).ready(function($){
154
  $("a.showhide").click(function(){var id=$(this).attr('id');$("div.navi"+id).toggle("slow");return false;});
155
  $("a.toggleagent").click(function(){var id=$(this).attr('id');$("div.naviagent"+id).slideToggle("slow");return false;});
242
  <script type="text/javascript">
243
  //<![CDATA[
244
  function wSelfRefresh(){location.reload(true)}
245
+ var refreshID=setTimeout('wSelfRefresh()',<?php echo ($wrefresh*60000)+2000;?>);
246
  jQuery(document).ready(function($){
247
  $("a.showhide").click(function(){var id=$(this).attr('id');$("div.navi"+id).toggle("slow");return false;});
248
  $("a.toggle-all").toggle(function(){
254
  //]]>
255
  </script><?php
256
  echo "\n";
257
+ }elseif($wassuppage=="wassup-options" || $wassuppage=="wassup-donate"){
258
  ?>
259
  <script type="text/javascript">
260
+ //<![CDATA[
261
+ <?php
262
+ //New in v1.9.4: ajax script to check download status of dynamically generated export file
263
+ ?>
264
+ var exportID="";
265
+ var exportTimerCount=0;
266
+ var exportTimerID=0;
267
+ function checkExportstatus(msgID){
268
+ if(exportID == "") exportID=msgID;
269
+ exportTimerCount +=1;
270
+ jQuery(function($){
271
+ if(exportTimerCount >30){ //stop timer after 1 min
272
+ var msg="<?php echo __('timed out!','wassup');?>";
273
+ $("#wassup-dialog >p").append(msg);
274
+ stopExportTimer();
275
+ }
276
+ var request = $.ajax({
277
+ url: ajaxurl,
278
+ method: "POST",
279
+ dataType: "html",
280
+ data: {'type':"exportmessage",'mid':exportID,<?php
281
+ //format 'action_param' for ajax post data
282
+ $postparams="";
283
+ foreach($action_param AS $key => $value){
284
+ if(preg_match('/[0-9a-z\-_ ]/i',$key)>0) {
285
+ $postparams .= "'".$key."':'".preg_replace('/\'/','\\\'',esc_attr($value))."',";
286
+ }
287
+ }
288
+ echo $postparams;?>},
289
+ });
290
+ request.done(function(msg){
291
+ if(msg == ""){
292
+ $("#wassup-dialog >p").append("..");
293
+ }else{
294
+ $("#wassup-dialog >p").html(msg);
295
+ exportTimerCount=0;
296
+ stopExportTimer();
297
+ }
298
+ });
299
+ });
300
+ }
301
+ function startExportTimer(msgID){
302
+ exportTimerID=setInterval("checkExportstatus()",2000,msgID);
303
+ exportTimerCount=0;
304
+ jQuery(function($){
305
+ $("#wassup-overlay").addClass("ui-widget-overlay");
306
+ $("#wassup-dialog >p").html("<?php echo __('Retrieving data for export. Download will start soon. Please wait.','wassup');?> ");
307
+ $("#wassup-dialog").dialog("open");
308
+ $("#wassup-dialog").on("dialogclose",function(event,ui){
309
+ stopExportTimer();
310
+ });
311
+ });
312
+ }
313
+ function stopExportTimer(){
314
+ if(exportTimerID >0) clearInterval(exportTimerID);
315
+ if(exportTimerCount==0) exportTimerID=0;
316
+ jQuery(function($){
317
+ $("#wassup-overlay").removeClass("ui-widget-overlay");
318
+ });
319
+ }
320
+ jQuery(document).ready(function($) {
321
+ //initialize tabs
322
+ var tabs=$('#tabcontainer').tabs();
323
+ $('.submit-opt').click(function(){$(this).css("background-color","#d71");});
324
+ $('.default-opt').click(function(){$(this).css("background-color","#d71");});
325
+ $("a#BCdonate").toggle(function(){$('div#bc_placeholder').slideDown("slow");},function(){$('div#bc_placeholder').slideUp("slow");return false;});
326
+ <?php
327
+ //new in v1.9.4: dialog and javascripts for export action
328
+ ?>
329
+ $('#wassup-dialog').dialog({
330
+ modal:true,
331
+ autoOpen:false,
332
+ draggable:false,
333
+ resizable:false,
334
+ });
335
+ $(".export-link").click(function(e){
336
+ e.preventDefault();
337
+ e.returnValue=false;
338
+ //only 1 instance of "export" allowed at a time
339
+ if(exportTimerID==0){
340
+ exportID=$(this).attr('id');
341
+ startExportTimer(exportID);
342
+ location.href=$(this).attr('href');
343
+ }
344
+ });
345
+ });
346
+ //]]>
347
  </script><?php
348
  echo "\n";
349
  }elseif($wassuppage=="wassup-spia" || $wassuppage=="wassup-spy"){
351
  //google!Maps map init and marker javascripts in document head @since v1.9
352
  if($wassup_user_settings['spy_map']== 1 || !empty($_GET['map'])){
353
  //check for api key for Google!maps
354
+ $apikey=$wassup_options->get_apikey();
 
355
  echo '<script src="https://maps.googleapis.com/maps/api/js?key='.esc_attr($apikey).'" type="text/javascript"></script>';
356
  } //end if spy_map
357
  //add 'action_param' query params to ajaxurl
376
  $('#spy-pause').click(function(){
377
  $(this).css("background-color","#ebb");$("#spy-play").css("background-color","#eae9e9");<?php
378
  if(!empty($wassup_user_settings['spy_map']) || !empty($_GET['map'])) echo '$("div#spia_map").css({"opacity":"0.7","background":"none"});';?>
379
+ if(spyRunning==1) spyRunning=0;
380
  });
381
  $('#spy-play').click(function(){
382
  $(this).css("background-color","#cdc");$("#spy-pause").css("background-color","#eae9e9");<?php
383
  if(!empty($wassup_user_settings['spy_map']) || !empty($_GET['map'])) echo '$("div#spia_map").css("opacity","1");';?>
384
+ if(spyRunning==0) spyRunning=1;
385
  });
386
  });
387
  <?php
425
  * -assign an admin body class (wassup, wassup-wp-legacy) for wassup page styling
426
  */
427
  function wassup_add_css() {
428
+ global $wassup_options,$wdebug_mode;
429
  //jqueryui-css and thickbox.css to wassup pages
430
  $wassuppage=wassupURI::get_menu_arg();
431
  if(!empty($wassuppage) && strpos($wassuppage,'wassup')!==FALSE){
432
  //TODO: Add a WassUp favicon to wassup pages
433
  //output the stylesheet links
434
  //always use Wassup's jquery-ui.css in Wassup-options
435
+ if($wassuppage=="wassup-options"){
 
 
436
  echo "\n";
437
+ if(!$wdebug_mode){
438
+ echo '<link href="'.WASSUPURL.'/css/jquery-ui/jquery-ui.min.css" rel="stylesheet" type="text/css" />'."\n";
439
+ }else{
440
+ echo '<link href="'.WASSUPURL.'/css/jquery-ui/jquery-ui.css" rel="stylesheet" type="text/css" />'."\n";
441
+ }
442
  }
443
  //always use Wassup's thickbox.css in Wassup panels
444
  if($wassuppage=="wassup" || $wassuppage=="wassup-online"){?>
445
  <link rel="stylesheet" href="<?php echo WASSUPURL.'/js/thickbox/thickbox.css';?>" type="text/css" /><?php
446
  echo "\n";
447
  }
448
+ // Override some Wordpress css and Wassup default css settings on Wassup pages
449
  ?>
450
  <style type="text/css">
 
451
  #contextual-help-link{display:none;}
452
  .update-nag{display:none;} /* nag messes up tab menus, so hide it */
453
  </style>
558
  * Add a horizontal navigation (tab) menu to Wassup pages.
559
  * - automatically adds tab links for each submenu in Wassup's main menu when available (admin users only)
560
  * - adds tab links to Wassup-stats dashboard submenu using the 'ml' query parameter
561
+ * - appends a "Donate" and "FAQ" tab to menu
562
  * @author helened
563
  * @since v1.9
564
  */
590
  $menu_class=" current";
591
  }
592
  if(current_user_can($menu_access)){
593
+ //add extra tab for faq next-to options
594
+ if($menu_page=="wassup-options"){
595
+ $menu_class="";
596
+ if($selected == "wassup-faq"){
597
+ $menu_class=" current";
598
+ }
599
+ $menu_name ="FAQ";
600
+ echo "\n";?>
601
+ <li id="faq-link" class="wassup-menu-link<?php echo $menu_class;?>"><a href="<?php echo wassupURI::get_admin_url('admin.php?page='.$menu_page.'&ml=wassup-faq');?>"><?php echo $menu_name;?></a></li><?php
602
+ $menu_class="";
603
+ if($selected =="wassup-options"){
604
+ $menu_class=" current";
605
+ }
606
+ $menu_name="Options";
607
+ }elseif($menu_page=="wassup-online"){
608
+ $menu_name =__("Current Visitors Online","wassup");
609
+ }
610
  echo "\n";?>
611
+ <li id="options-link" class="wassup-menu-link<?php echo $menu_class;?>"><a href="<?php echo wassupURI::get_admin_url('admin.php?page='.$menu_page);?>"><?php echo $menu_name;?></a></li><?php
612
  }
613
  }//end for
614
+ echo "\n";?>
615
+ <li id="donate-link" class="wassup-menu-link"><?php
616
  $donate_link_url="";
617
  if(is_multisite() && is_network_admin()){
618
  $donate_link_url=network_admin_url('admin.php?page=wassup-options&tab=donate');
619
  }elseif(current_user_can('manage_options')){
620
  $donate_link_url=admin_url('admin.php?page=wassup-options&tab=donate');
621
  }
622
+ wassup_donate_link($donate_link_url);?></li><?php
623
  }else{
624
  if (($selected=="wassup-stats" || $selected=="wassup") && !empty($_GET['ml'])) $selected=$_GET['ml'];
625
  echo "\n";?>
626
+ <li id="menu-link-3" class="wassup-menu-link<?php if($selected=='wassup-online') echo ' current';?>"><a href="<?php echo wassupURI::get_admin_url('index.php?page=wassup-stats&ml=wassup-online');?>"><?php _e('Current Visitors Online','wassup');?></a></li>
627
+ <li id="menu-link-2" class="wassup-menu-link<?php if($selected=='wassup-spia' || $selected=='wassup-spy') echo ' current';?>"><a href="<?php echo wassupURI::get_admin_url('index.php?page=wassup-stats&ml=wassup-spia');?>"><?php _e('SPY Visitors','wassup');?></a></li>
628
+ <li id="menu-link-1" class="wassup-menu-link<?php if($selected=='wassup' || $selected==$wassupfolder || $selected=='wassup-stats') echo ' current';?>"><a href="<?php echo wassupURI::get_admin_url('index.php?page=wassup-stats');?>"><?php _e('Visitor Details','wassup');?></a></li><?php
629
+ echo "\n";?>
630
+ <li id="donate-link" class="wassup-menu-link"><?php wassup_donate_link();?></li><?php
631
  } //end if submenu
632
  echo "\n";?>
633
  </ul><div style="clear:right;"></div>
636
 
637
  function wassup_donate_link($link_url=""){
638
  global $wdebug_mode;
639
+ //display Paypal link/form for donate tab
 
 
640
  if(!empty($link_url) && strpos($link_url,'//')!==false){
641
  echo '<a href="'.$link_url.'"><img src="'.WASSUPURL.'/img/donate-button-sm.png" alt="'.__("Donate","wassup").'"/></a>';
642
  }else{
656
  echo "\n";?>
657
  </form>
658
  <?php
659
+ }
660
  } //end wassup_donate_link
661
 
662
  /**
687
  if(!is_object($current_user) || empty($current_user->ID)) wp_get_current_user();
688
  $wassup_user_settings = get_user_option('_wassup_settings',$current_user->ID);
689
  $tab=0;
690
+ if(isset($_GET['tab'])) $tab=esc_attr($_GET['tab']);
691
  $admin_message="";
692
  $wassup_table = $wassup_options->wassup_table;
693
  $network_settings=array();
710
  // RUN THE DELETE/SAVE/RESET FORM OPTIONS
711
  // Processed here so that any resulting "admin_message" or errors will display with page
712
  //DELETE NOW options...
713
+ if(!empty($_POST) && ($wassuppage== "wassup-options" || $wassuppage == "wassup" || $wassuppage=="wassup-stats" || $wassuppage=="wassup-donate")){
714
+ if($wassuppage=="wassup-options" || $wassuppage=="wassup-donate"){
715
  //check user capability and verify admin referer/wp nonce before processing form changes and delete requests @since v1.9
716
  if(current_user_can('manage_options') && wassupURI::is_valid_admin_referer('wassupsettings-'.$current_user->ID)){
717
  //workaround code for Google Chrome's empty 'onclick=submit()' "delete NOW" value @since v1.9
863
  $admin_message = __("Wassup options reset successfully","wassup")."." ;
864
  $wassup_user_settings=$wassup_options->resetUserSettings();
865
  if($wassup_options->is_recording_active()) wassup_cron_startup(); //restart wp-cron
866
+ //New in v1.9.4: reset-to-default updates Wassup's map apikey
867
+ if(empty($wassup_options->wassup_googlemaps_key)){
868
+ $key=$wassup_options->lookup_apikey();
869
+ }
870
  }
871
  }
872
  } //end if !delete_now
980
  }elseif ($wassuppage == "wassup-spia" || $wassuppage == "wassup-spy"){?>
981
  <h2>WassUp - <?php _e("SPY Visitors", "wassup"); ?></h2><?php
982
  wassup_page_contents(array('wassuppage'=>$wassuppage,'tab'=>$tab));
983
+ }elseif ($wassuppage=="wassup-options" || $wassuppage=="wassup-donate"){?>
984
  <h2>WassUp - <?php _e('Options','wassup'); ?></h2><?php
985
  if (!function_exists('wassup_optionsView')) include_once(WASSUPDIR.'/lib/settings.php');
986
  wassup_optionsView($tab);
987
+ }elseif ($wassuppage=="wassup-faq"){ ?>
988
+ <h2>WassUp - <?php _e('Frequently Asked Questions','wassup'); ?></h2><?php
989
+ if (!function_exists('wassup_faq')) include_once(WASSUPDIR.'/lib/faq.php');
990
+ wassup_faq();
991
  }else{
992
  return;
993
  }
1000
  <nobr><span class="separator">|</span> <?php echo __('Exec time','wassup').": $totaltime"; ?></nobr>
1001
  </small></p>
1002
  </div> <!-- end wassup-wrap --><?php
1003
+
1004
+ //New in v1.9.4: start the refresh timer at end of page render
1005
+ if($wassuppage == "wassup"){
1006
+ $wrefresh = (int)$wassup_options->wassup_refresh;
1007
+ if($wrefresh >0){
1008
+ echo "\n";?>
1009
+ <script type="text/javascript">ActivateCountDown("CountDownPanel",<?php echo ($wrefresh*60);?>);</script><?php
1010
+ }
1011
+ }
1012
+ echo "\n";
1013
  } //end WassUp
1014
 
1015
  /**
1130
  if ($currenttot > 0) {
1131
  $currentlogged = $TotOnline->calc_tot("count",null,"AND `username`!=''","DISTINCT");
1132
  $currentauth = $TotOnline->calc_tot("count",null,"AND `comment_author`!='' AND `username`=''","DISTINCT");
1133
+ $sql=sprintf("SELECT SQL_NO_CACHE `id`, wassup_id, count(wassup_id) as numurl, max(`timestamp`) as max_timestamp, `ip`, `hostname`, `searchengine`, `search`, `searchpage`, `urlrequested`, `referrer`, `agent`, `browser`, `spider`, `feed`, `os`, `screen_res`, GROUP_CONCAT(DISTINCT `username` ORDER BY `username` SEPARATOR '| ') AS login_name, `comment_author`, `language`, `spam` AS malware_type, `url_wpid` FROM $wassup_tmp_table WHERE %s GROUP BY `wassup_id` ORDER BY max_timestamp DESC",$whereis);
1134
  $qryC=$wpdb->get_results($sql);
1135
  if(!empty($qryC) && is_wp_error($qryC)){
1136
  $errno=$qryC->get_error_code();
1176
  $Ousername="";
1177
  $ulclass="users";
1178
  $unclass="";
1179
+ $logged_user="";
1180
  // User is logged in or is a comment's author
1181
  if($cv->login_name != "" || $cv->comment_author !=""){
1182
  $utype="";
1183
+ $logged_user=trim($cv->login_name,'| ');
1184
+ if($logged_user != ""){
1185
+ if(strpos($logged_user,'|')!==false){
1186
+ $loginnames=explode('|',$logged_user);
 
1187
  foreach($loginnames AS $name){
1188
  $logged_user=trim($name);
1189
+ if(!empty($logged_user)) break;
 
 
1190
  }
1191
  }
1192
  $utype=__("LOGGED IN USER","wassup");
1204
  $Ousername='<li class="users"><span class="indent-li-agent">'.$utype.': <strong>'.esc_attr($logged_user).'</strong></span></li>';
1205
  }
1206
  }else{
1207
+ $Ousername='<li class="users"><span class="indent-li-agent">'.$utype.': <strong>'.esc_attr($logged_user).'</strong></span></li>';
1208
  }
1209
  $unclass="sum-box-log";
1210
  }
1216
  }
1217
  if(!empty($cv->spider)) $unclass="sum-box-spider";
1218
  if(!empty($cv->malware_type)) $unclass="sum-box-spam";
1219
+ if(strlen($ip)>20) $unclass .=" sum-box-ipv6";
1220
  echo "\n";?>
1221
  <div class="sum-rec"><?php
1222
  // Visitor Record - raw data (hidden)
1501
  $wwhereis .=" AND `ip`='$wip'";
1502
  }
1503
  update_user_option($current_user->ID,'_wassup_settings',$wassup_user_settings);
1504
+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1505
  //Clear non-sticky filter parameters from URL before applying new filters
1506
  $URLQuery=trim(html_entity_decode($_SERVER['QUERY_STRING']));
1507
  //'remove_query_arg' function replaces "preg_replace" to remove args from query string @since v1.9.1
1549
  </td></tr>
1550
  </tbody></table>
1551
  </form><?php
1552
+ // Instantiate class to count items
1553
+ $wTot = New WassupItems($wassup_table,$from_date,$to_date,$wwhereis,$wlimit);
1554
+ $wTot->WpUrl=$wpurl;
1555
+ $witemstot=0;
1556
+ $wpagestot=0;
1557
+ $wspamtot=0;
1558
+ $markedtot=0;
1559
+ $searchtot=0;
1560
+ $ipsearch="";
1561
+ //don't apply "search" for marked ip (in whereis)
1562
+ if(!empty($wsearch) && $wsearch==$wip){
1563
+ $ipsearch=$wsearch;
1564
+ $wsearch="";
1565
+ }
1566
+ //to prevent browser timeouts, send <!--heartbeat-->
1567
+ echo "\n<!--heartbeat-->";
1568
+ // MAIN QUERY
1569
+ if(!empty($wTot->totrecords)){
1570
+ $witemstot=$wTot->calc_tot("count",$wsearch,null,"DISTINCT");
1571
+ echo "\n<!--heartbeat-->";
1572
+ if(!empty($wsearch))$wpagestot=$wTot->calc_tot("count",$wsearch);
1573
+ else $wpagestot=(int)$wTot->totrecords;
1574
+ echo "\n<!--heartbeat-->";
1575
+ $wspamtot=$wTot->calc_tot("count",$wsearch,"AND `spam`>'0'");
1576
+ // Check if some records were marked
1577
+ if (!empty($wip)){
1578
+ if (empty($ipsearch)){
1579
+ echo "\n<!--heartbeat-->";
1580
+ $markedtot=$wTot->calc_tot("count",$wsearch," AND `ip`='".$wip."'","DISTINCT");
1581
+ }else{
1582
+ //avoid redundant calculations when search and mark/wip are the same
1583
+ $markedtot=$witemstot;
1584
+ }
1585
+ }
1586
+ // Check if some records were searched
1587
+ if(!empty($wsearch)) {
1588
+ //searchtot is the same query as witemstot above and shouldn't be re-calculated (visitor detail fix)
1589
+ //$searchtot=$wTot->calc_tot("count",$wsearch,null,"DISTINCT");
1590
+ $searchtot=$witemstot;
1591
+ }elseif(!empty($ipsearch)){
1592
+ $searchtot=$markedtot;
1593
+ }
1594
+ }
1595
+ if(!empty($ipsearch)) $wsearch=$ipsearch;
1596
  // Print Site Usage summary
1597
  echo "\n";?>
1598
  <div class='centered'>
1600
  <ul><li><span style="border-bottom:2px solid #0077CC;"><?php echo (int)$witemstot;?></span> <?php _e('Visits','wassup');?></li>
1601
  <li><span style="border-bottom:2px dashed #FF6D06;"><?php echo (int)$wpagestot;?></span> <?php _e('Pageviews','wassup');?></li>
1602
  <li><span><?php echo @number_format(($wpagestot/$witemstot),2);?></span> <?php _e('Pages/Visits','wassup');?></li>
1603
+ <li><span class="spamtoggle"><nobr><?php
1604
  //add spam form overlay when spamcheck is enabled and user is admin or can 'manage_options'
1605
  $hidden_spam_form=false;
1606
  if($wassup_options->wassup_spamcheck == 1 && ($wassup_options->is_admin_login() || current_user_can('manage_options'))){
1615
  }
1616
  echo '%)</span>';
1617
  if($hidden_spam_form) echo '</a>';
1618
+ echo '</span> '.__('Spams','wassup');?></nobr></li>
1619
  </ul><br/>
1620
  <div id="chart_placeholder" class="placeholder" align="center"></div>
1621
  </div>
1636
  <p class="indent-opt"><input type="checkbox" name="wassup_refspam" value="1" <?php if($wassup_options->wassup_refspam==1) echo $checked;?>/> <?php _e('Record referrer spam attempts','wassup');?></p>
1637
  <p class="indent-opt"><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");?></p>
1638
  <p class="indent-opt"><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");?></p>
1639
+ <p><input type="submit" name="submit-spam" class="button" value="<?php _e('Save Settings','wassup'); ?>" /></p>
1640
  </form>
1641
  </div> <!-- /hiddenspam --><?php
1642
  }
1655
  <a href="?<?php echo esc_attr($URLQuery.'&chart=1');?>" class="icon"><img src="<?php echo WASSUPURL.'/img/chart_add.png" alt="'.__('show chart','wassup').'" title="'.__('Show the chart','wassup'); ?>"/></a><a href="?<?php echo esc_attr($URLQuery.'&chart=1');?>"><?php _e("Show chart","wassup");?></a><?php
1656
  }?> <span class="separator">|</span>
1657
  <?php
1658
+ //Top Stats window/popup params
1659
+ //v1.9.4 bugfix: topstats from_date cannot be "0"
1660
+ if($from_date==0 && $wlast==0){
1661
+ $from_date=$wpdb->get_var(sprintf("SELECT MIN(`timestamp`) FROM `$wassup_table` WHERE `timestamp` < '%d'",$to_date));
1662
+ }
1663
+ //for date range shown in topstats report
1664
  $wdformat = get_option("date_format");
1665
  if(($to_date - $from_date)>24*3600){
1666
  $stats_range=gmdate("$wdformat",$from_date)." - ".gmdate("$wdformat",$to_date);
1733
  <div id="pag" align="center"><?php $p->show();?></div><?php
1734
  }
1735
  //# Detailed List of Wassup Records...
1736
+ $wmain=$wTot->calc_tot("main",$wsearch);
1737
+ echo "\n<!--heartbeat-->";
1738
  $error_msg="";
1739
  $data_error="";
1740
  if($witemstot>0 && is_array($wmain) && count($wmain)>0){
1741
  $rkcount=0;
1742
  foreach($wmain as $rk){
1743
  //monitor for script timeout limit and extend, if needed @since v1.9
1744
+ $time_passed=time() - $stimer_start;
1745
+ if($time_passed > ($stimeout-10)){
1746
+ if($rkcount>0){
 
 
 
 
 
1747
  //report is hung, so terminate here
1748
  $data_error=__("Records display interrupted.","wassup")." - script timeout/partial data.";
 
1749
  }else{ //no data, database problem
1750
  $data_error=__("Unable to display records.","wassup")." - script timeout/no data.";
 
1751
  }
1752
+ break;
1753
  }
1754
  $rkcount++;
1755
  $dateF = gmdate("d M Y", $rk->max_timestamp);
1768
  $ulclass="users";
1769
  $Ouser="";
1770
  $Ospider="";
1771
+ $referrer="";
1772
+ $urlrequested="";
1773
  //for logged-in user/administrator in ul list
1774
+ $logged_user=trim($rk->login_name,'| ');
1775
+ if($logged_user != ""){
1776
+ if(strpos($logged_user,'|')!==false){
1777
+ $loginnames=explode('|',$logged_user);
1778
  foreach($loginnames AS $name){
1779
  $logged_user=trim($name);
1780
  if(!empty($logged_user)){
1797
  if($show_avatars) $Ouser='<li class="users"><span class="indent-li-agent">'.$utype.': <strong>'.get_avatar($udata->ID,'20').' '.esc_attr($logged_user).'</strong></span></li>';
1798
  else $Ouser='<li class="users"><span class="indent-li-agent">'.$utype.': <strong>'.esc_attr($logged_user).'</strong></span></li>';
1799
  }else{
1800
+ $Ouser='<li class="users"><span class="indent-li-agent">'.$utype.': <strong>'.esc_attr($logged_user).'</strong></span></li>';
1801
  }
1802
  $unclass="sum-box-log";
1803
  if($wdebug_mode){
1829
  if(!empty($rk->malware_type)){
1830
  $unclass="sum-box-spam";
1831
  }
1832
+ if(strlen($ip)>20) $unclass .=" sum-box-ipv6";
1833
  echo "\n";?>
1834
  <div id="delID<?php echo esc_attr($rk->wassup_id);?>" class="sum-rec <?php if($wassup_user_settings['umark']==1 && $wassup_user_settings['uip']==$ip) echo 'sum-mark';?>"> <?php
1835
  // Visitor Record - raw data (hidden)
2037
  if (!empty($wassup_user_settings['detail_chart']) || (!empty($_GET['chart']) && "1" == $_GET['chart'])) {
2038
  $chart_type = (!empty($wassup_options->wassup_chart_type))? $wassup_options->wassup_chart_type: "2";
2039
  //show Google!Charts image
2040
+ $html='<p style="padding-top:10px;">'.__("Too few records to print chart","wassup").'...</p>';
2041
  if ($wpagestot > 12) {
2042
  //extend script timeout for chart
2043
  if($can_set_timelimit && (time()-$stimer_start)>$stimeout-30){
2046
  }
2047
  $chart_url=$wTot->TheChart($wlast,$res,"180",$wsearch,$chart_type,"bg,s,e9e9ea|c,lg,90,deeeff,0,e9e9ea,0.8","page",$wtype);
2048
  $html='<img src="'.$chart_url.'" alt="'.__("Graph of visitor hits","wassup").'" class="chart" width="'.$res.'" />';
 
 
2049
  }
2050
  } else {
2051
  $html='<p style="padding-top:10px">&nbsp;</p>';
readme.txt CHANGED
@@ -3,8 +3,8 @@ 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.3
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
@@ -95,7 +95,7 @@ For people with database size limitations, WassUp has a few options to manage th
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 ==
@@ -106,46 +106,23 @@ Check the box for "Enable widget/small chart in admin dashboard" under WassUp >>
106
  = How do I display WassUp widgets on my site? =
107
  From the Wordpress widgets panel, drag the "WassUp Online" widget or the "Wassup Top Stats" widget from the list of available widgets on the left into your theme's "Sidebar" or "Footer" area on the right.
108
 
109
- = My Wordpress theme is not widget ready. Is it possible to display WassUp widget on my site? =
110
- Yes. Insert the template tag `wassup_sidebar()` into your theme's "sidebar.php" file to display Wassup widgets as a single combined widget on your site.
111
-
112
  = How do I view the real-time visitor geolocation map in WassUp? =
113
- Check the box for "Display a GEO IP Map in spy visitors view" under WassUp >>Options >>[General Setup] tab and save, then navigate to WassUp >>SPY Visitors panel to see the map.
114
 
115
- = Can Wassup record visits on a web site that is not Wordpress? =
116
- No. Wassup is a Wordpress-only plugin and requires at least Wordpress 2.2 to work.
117
 
118
  = How do I exclude a visitor from being recorded? =
119
- Navigate to WassUp >>Options >>[Filters & Exclusions] tab and enter a visitor's username, IP address, or hostname into the appropriate text area for that "Recording Exclusion" type.
120
 
121
  = How do I stop (temporarily) WassUp from recording new visits on my site? =
122
  Uncheck the box for "Enable statistics recording" under WassUp >>Options >>[General Setup] tab.
123
 
124
- = In Wordpress multisite, how do I stop (temporarily) WassUp from recording new visitors on all sites in the network? =
125
- Answer #1: If plugin is "network activated", login as network admin, go to the Network admin dashboard, navigate to WassUp >>Options >>[General Setup] tab and uncheck the box for "Enable Statistics Recording for network" and save.
126
-
127
- Answer #2: If plugin is NOT "network activated", login as network admin, go to the main site/parent domain admin dashboard, navigate to WassUp >>Options >>[General Setup] tab, then uncheck the box for "Enable Statistics Recording for network" and save.
128
-
129
- = No data is displayed; or the "Visitor Details" panel show 0 records for the last 24 hours. How do I fix this? =
130
- Answer #1: Check the box for "Enable statistics recording" setting under WassUp >>Options >>[General Setup] tab and save.
131
-
132
- Answer #2: Click the [Reset to Default] button under WassUp >>Options >>[General Setup] tab.
133
-
134
- Answer #3: Navigate to WassUp >>Options >>[Manage File & Data] tab and uncheck the "MySQL Delayed Insert" setting and save.
135
-
136
- Answer #4: Deactivate and Re-activate Wassup from Wordpress plugins panel.
137
-
138
  = My popular web site is hosted on a shared server with restrictive database size limits. How do I prevent WassUp's table from growing too big for my allocated quota? =
139
  Navigate to Wassup >> Options >> [Manage Files & Data] tab and enable the setting for "Auto Delete" of old records and/or check the box to receive an email alert when the table size limit is exceeded.
140
 
141
  = WassUp visitor counts are much lower than actual for my website. Why is there a discrepancy and how do I fix it? =
142
- Low visitor count is likely caused by page caching on your website. WassUp is incompatible with static page caching plugins such as WP Supercache, WP Cache, and Hyper Cache. To fix, uninstall your cache plugin or switch to a different (javascript-based) statistics plugin.
143
-
144
- = Is there any caching plugin that works with WassUp? =
145
- [WP Widget Cache](http://wordpress.org/extend/plugins/wp-widget-cache/) is the only caching plugin verified to work with WassUp.
146
-
147
- = Why does WassUp stats sometimes show more page views than actual pages clicked by a person? =
148
- "Phantom" page views can occur when a user's browser does automatic feed retrieval, link pre-fetching, a page refresh, or automatically adds your website to it's "Top sites" window (Safari). WassUp tracks these because they are valid requests from the browser and are sometimes indistinguishable from user link clicks.
149
 
150
  = How do I upgrade WassUp safely when my site has frequent visitors? =
151
  Read the "IMPORTANT safe upgrade instructions" in the [installation section](http://wordpress.org/extend/plugins/wassup/installation/) of this plugin's README.txt file.
@@ -226,14 +203,40 @@ To safely upgrade WassUp when your site is busy, you must manually stop visitor
226
  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)
227
 
228
  = Compatibility Notice =
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.3 =
233
- * Important 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.3 =
 
237
  * fixed an 'unknown modifier' preg_match error in 'wassup.php' module.
238
  * fixed an IP validation loophole that could cause invalid/malformed forwarding IPs in client's http_header to be stored as client IP.
239
  * fixed code to stop recording of front-end ajax requests ('/wp-admin/admin-ajax.php' url) as "possible spam/malware" hits.
@@ -337,6 +340,7 @@ When you activate this plugin (as described in "Installation"), it works "as is"
337
  ...
338
 
339
  == Infos ==
 
340
  = Plugin Home =
341
  * [http://www.wpwp.org](http://www.wpwp.org "http://www.wpwp.org")
342
 
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.8
7
+ Stable tag: 1.9.4
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
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 html 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 ==
106
  = How do I display WassUp widgets on my site? =
107
  From the Wordpress widgets panel, drag the "WassUp Online" widget or the "Wassup Top Stats" widget from the list of available widgets on the left into your theme's "Sidebar" or "Footer" area on the right.
108
 
 
 
 
109
  = How do I view the real-time visitor geolocation map in WassUp? =
110
+ Check the box for "Display a GEO IP Map in spy visitors view" under WassUp >>Options >>[General Setup] and save, then navigate to WassUp >>SPY Visitors panel to see the map.
111
 
112
+ = The map has vanished and I get a message like: "Oops, something went wrong" or "Google has disabled use of the Maps API for this application". How do I fix this?" =
113
+ Try upgrading to the latest version of Wassup, or go to Wassup-Options and click the Reset-to-Default button if you have already upgraded, or sign up for your own Google!Maps API key at https://developers.google.com/maps/documentation/javascript/get-api-key#key then enter the key under \"Spy Visitors settings\" in Wassup >>Options >>General Settings tab.
114
 
115
  = How do I exclude a visitor from being recorded? =
116
+ Navigate to WassUp >>Options >>[Filters & Exclusions] tab and enter a visitor's username, IP address, or hostname into the appropriate field and save.
117
 
118
  = How do I stop (temporarily) WassUp from recording new visits on my site? =
119
  Uncheck the box for "Enable statistics recording" under WassUp >>Options >>[General Setup] tab.
120
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
121
  = My popular web site is hosted on a shared server with restrictive database size limits. How do I prevent WassUp's table from growing too big for my allocated quota? =
122
  Navigate to Wassup >> Options >> [Manage Files & Data] tab and enable the setting for "Auto Delete" of old records and/or check the box to receive an email alert when the table size limit is exceeded.
123
 
124
  = WassUp visitor counts are much lower than actual for my website. Why is there a discrepancy and how do I fix it? =
125
+ Low visitor count is likely caused by page caching on your website. WassUp is incompatible with static html caching plugins such as WP Supercache, WP Cache, WP Fastest Cache, and Hyper Cache. To fix, uninstall your cache plugin or switch to a different (javascript-based) statistics plugin.
 
 
 
 
 
 
126
 
127
  = How do I upgrade WassUp safely when my site has frequent visitors? =
128
  Read the "IMPORTANT safe upgrade instructions" in the [installation section](http://wordpress.org/extend/plugins/wassup/installation/) of this plugin's README.txt file.
203
  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)
204
 
205
  = Compatibility Notice =
206
+ * WassUp is incompatible with the following static page caching plugins: WP Super Cache, WP Cache, WP Fastest Cache, and WP Hyper Cache.
207
 
208
  == Upgrade Notice ==
209
+ = 1.9.4 =
210
+ * Important feature & bugfix upgrade. DO NOT upgrade when your site busy! Read [installation instructions](http://wordpress.org/plugins/wassup/installation/) for safe upgrade instructions.
211
 
212
  == Changelog ==
213
+ = v1.9.4 =
214
+ = Important feature improvement & bugfix upgrade =
215
+ * new option to whitelist referrers that are mislabeled as spam in WassUp (ex: Rx or sexy words in domain name)
216
+ * new option to export data in Excel-compatible CSV format
217
+ * improved export speed and added a dialog window
218
+ * improved queries on big data by using temporary tables as subsets in "wassupItems" class
219
+ * updated visitor detail code to speed up output display
220
+ * updated plugin FAQ section and added a FAQ link to top menu tabs
221
+ * updated css files, wassup.css and jquery-ui.css for widgets & dialog
222
+ * updated translation template "wassup.pot"
223
+ * fixed a compatibility issue with Woocommerce plugin AJAX requests
224
+ * fixed a search field validation issue with URL special characters
225
+ * fixed a bug in "stringShortener" function that caused empty results
226
+ * fixed a bug in Top Stats widget that caused blank lines to display
227
+ * fixed some Top Stats widget translations
228
+ * removed Google!maps API key from Wassup source due to Google's TOS limitations
229
+ * miscellaneous minor bugfixes
230
+
231
+ = v1.9.3.1 =
232
+ = Important bugfix upgrade =
233
+ * fixed various preg_match regexes to improve matching
234
+ * fixed a parenthesis error in tracking/exclusion code for 404 hits
235
+ * fixed bug that caused duplicate country code in searchengine name
236
+ * minor code changes.
237
+
238
  = v1.9.3 =
239
+ = Important bugfix upgrade =
240
  * fixed an 'unknown modifier' preg_match error in 'wassup.php' module.
241
  * fixed an IP validation loophole that could cause invalid/malformed forwarding IPs in client's http_header to be stored as client IP.
242
  * fixed code to stop recording of front-end ajax requests ('/wp-admin/admin-ajax.php' url) as "possible spam/malware" hits.
340
  ...
341
 
342
  == Infos ==
343
+
344
  = Plugin Home =
345
  * [http://www.wpwp.org](http://www.wpwp.org "http://www.wpwp.org")
346
 
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.3
7
  Author: Michele Marcucci, Helene Duncker
8
  Author URI: http://www.michelem.org/
9
  Text Domain: wassup
@@ -49,25 +49,30 @@ if((!empty($_SERVER['SCRIPT_FILENAME']) && realpath($_SERVER['SCRIPT_FILENAME'])
49
  */
50
  function wassup_init($init_settings=false){
51
  global $wp_version,$wassup_options,$wdebug_mode;
 
52
  //define wassup globals & constants
53
  if(!defined('WASSUPVERSION')){
54
- define('WASSUPVERSION','1.9.3');
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
  //turn off debug mode if this is ajax action request @since v1.9.2
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
@@ -78,7 +83,7 @@ function wassup_init($init_settings=false){
78
  if(@is_readable($moFile)){
79
  load_textdomain('wassup',$moFile);
80
  }elseif(strlen($current_locale)<6){
81
- //new in v1.9.3: try load translation file with language code x2 as locale
82
  $lang_only=substr($current_locale,0,2).'_'.strtoupper(substr($current_locale,0,2));
83
  if($lang_only != $current_locale && preg_match('/^[a-z]{2}_[A-Z]{2}$/',$lang_only)>0){
84
  $moFile=WASSUPDIR."/language/".$lang_only."mo";
@@ -93,7 +98,7 @@ function wassup_init($init_settings=false){
93
  $is_compatible=true;
94
  if(version_compare($wp_version,'4.5','<') || version_compare($php_vers,'5.2','<')){
95
  include_once(WASSUPDIR.'/lib/compatibility.php');
96
- $is_compatible=wassup_load_compat_modules();
97
  }
98
  if($is_compatible){
99
  if(!class_exists('wassupOptions')) require_once(WASSUPDIR.'/lib/wassup.class.php');
@@ -289,6 +294,7 @@ function wassup_install($network_wide=false) {
289
  }
290
  $wassup_options->wassup_active=$active_status;
291
  $wassup_options->saveSettings();
 
292
  //schedule regular cleanup of temp recs @since v1.9
293
  if(!empty($active_status)) wassup_cron_startup();
294
  }else{
@@ -412,7 +418,7 @@ function wassup_uninstall($network_wide=false){
412
  delete_usermeta($current_user->ID,$wpdb->prefix.'_wassup_settings');
413
  }
414
  } //end foreach
415
- //lastly, delete network settings & all user-specific settings
416
  if($network_wide){
417
  restore_current_blog();
418
  delete_site_option('wassup_network_settings');
@@ -461,7 +467,7 @@ function wassup_start(){
461
  * Perform plugin tasks for before http headers are sent.
462
  * -block obvious xss and sql injection attempts on Wassup itself
463
  * -initialize new network subsite settings (via 'wassup_init'), if any
464
- * -add hooks for wp_ajax, wp_login, and wp_cron actions
465
  * -start wassup tracking
466
  */
467
  function wassup_preload(){
@@ -469,10 +475,9 @@ function wassup_preload(){
469
  //block any obvious sql injection attempts involving WassUp
470
  $request_uri=$_SERVER['REQUEST_URI'];
471
  if(!$request_uri) $request_uri=$_SERVER['SCRIPT_NAME']; // IIS
472
- //don't test referrer for Wassup..could cause non-wassup request redirect @since v1.9.2
473
  if(stristr($request_uri,'wassup')!==false && strstr($request_uri,'err=wassup403')===false){
474
  $error_msg="";
475
- //don't test logged-in user requests @since v1.9.2
476
  if(!is_user_logged_in()){
477
  if(preg_match('/(<|&lt;?|&#0*60;?|%3C)scr(ipt|[^0-9a-z\-_])/i',$request_uri)>0){
478
  $error_msg=__('Bad request!','wassup');
@@ -524,7 +529,7 @@ function wassup_preload(){
524
  if(function_exists('wassup_compat_preload')){
525
  wassup_compat_preload();
526
  }
527
- //Start visitor tracking
528
  if(!empty($wassup_options) && $wassup_options->is_recording_active()){
529
  //add actions for wp-cron scheduled tasks - @since v1.9
530
  if(!has_action('wassup_scheduled_dbtasks')) add_action('wassup_scheduled_dbtasks',array('wassupDb','scheduled_dbtask'),10,1);
@@ -536,6 +541,8 @@ function wassup_preload(){
536
  if(!empty($wassup_options->delete_auto) && $wassup_options->delete_auto !="never"){
537
  if(!has_action('wassup_scheduled_purge')) add_action('wassup_scheduled_purge','wassup_auto_cleanup');
538
  }
 
 
539
  wassupPrepend();
540
  }
541
  if($wdebug_mode && headers_sent()){
@@ -631,13 +638,14 @@ function wassup_add_scripts(){
631
  }elseif($wassuppage == "wassup-options"){
632
  //use Wordpress' jquery-ui.js only when current
633
  if(version_compare($wp_version,'4.5','>=') || !function_exists('wassup_compat_add_scripts')){
634
- wp_enqueue_script('jquery-ui-widget');
635
- wp_enqueue_script('jquery-ui-tabs');
636
  wp_enqueue_script('jquery-ui-dialog');
 
637
  }
638
  //never use Wordpress' jquery-ui.css
639
  wp_dequeue_style('jquery-ui-tabs.css');
640
  wp_dequeue_style('jquery-ui-theme.css');
 
 
641
  wp_dequeue_style('jquery-ui.css');
642
  }
643
  //use Wassup's custom copy of thickbox.js always
@@ -667,6 +675,7 @@ function export_wassup(){
667
  global $wpdb, $current_user, $wassup_options, $wdebug_mode;
668
 
669
  //#1st verify that export request is valid
 
670
  $exportdata=false;
671
  $badrequest=false;
672
  $err_msg="";
@@ -689,8 +698,7 @@ function export_wassup(){
689
  if(empty($current_user->ID)){
690
  wp_die($err_msg);
691
  }else{
692
- $wassup_user_settings['ualert_message']=$err_msg;
693
- update_user_option($current_user->ID,'_wassup_settings',$wassup_user_settings);
694
  wp_safe_redirect(wassupURI::get_admin_url('admin.php?page=wassup-options&tab=3'));
695
  }
696
  exit;
@@ -698,67 +706,79 @@ function export_wassup(){
698
  $err_msg="";
699
  $wassup_table=$wassup_options->wassup_table;
700
  $wherecondition="";
 
 
 
 
701
  //for multisite compatibility
702
- $multisite_whereis="";
703
  if($wassup_options->network_activated_plugin()){
704
- if(!is_network_admin() && !empty($GLOBALS['current_blog']->blog_id)) $multisite_whereis = sprintf(" AND `subsite_id`=%d",(int)$GLOBALS['current_blog']->blog_id);
705
  }
706
- $start_recid=0;
 
 
707
  if(isset($_REQUEST['startid']) && is_numeric($_REQUEST['startid'])){
708
- $start_recid=(int)$_REQUEST['startid'];
709
- }
710
- if(!empty($start_recid)){
711
- $wherecondition="WHERE `id`>".(int)$start_recid.$multisite_whereis;
712
- }elseif(!empty($multisite_whereis)){
713
- $wherecondition="WHERE `id`>0 ".$multisite_whereis;
714
- }
715
- //omit spam records from export @since v1.9.1
716
- if(empty($wassup_options->export_spam)){
717
- if(empty($wherecondition)) $wherecondition="WHERE `spam`='0'";
718
- else $wherecondition .=" AND `spam`='0'";
719
  }
720
  //# check for records before exporting...
721
- $filename='wassup.'.gmdate('Y-m-d').'.sql';
722
  $numrecords=0;
723
  $exportdata=false;
724
- $numrecords=$wpdb->get_var(sprintf("SELECT COUNT(`wassup_id`) FROM `%s` %s",esc_attr($wassup_table),$wherecondition));
725
  if(!is_numeric($numrecords)) $numrecords=0;
726
  if($numrecords > 0){
727
- //save "failed export" message beforehand in case of script interruption @since v1.9
728
- $wassup_user_settings['ualert_message']=__("Export failed due to script interruption or timeout error!","wassup");
729
- update_user_option($current_user->ID,'_wassup_settings',$wassup_user_settings);
730
- if($numrecords > 10000){
731
  //Could take a long time, so increase script execution time-limit to 11 min
732
- //TODO 'safe_mode' deprecated in PHP 5.3
733
- if(!ini_get('safe_mode')){
734
- $timeout=ini_get('max_execution_time');
735
- if(is_numeric($timeout) && $stimeout>0 && $timeout<(11*60)) @set_time_limit(11*60);
 
 
 
 
 
 
 
 
 
736
  }
737
  }
738
- //get the data
739
- $exportdata=wassupDb::backup_table("$wassup_table","$wherecondition");
740
  }else{
741
  //failed export message
742
- $wassup_user_settings['ualert_message']=__("ERROR: Nothing to Export.","wassup");
743
- update_user_option($current_user->ID,'_wassup_settings',$wassup_user_settings);
744
  } //end if numrecords > 0
745
- if (!empty($exportdata)) {
746
- //TODO: use compressed file transfer when zlib available
747
- header('Content-Description: File Transfer');
748
- header("Content-Disposition: attachment; filename=$filename");
749
- header('Content-Type: text/plain charset=' . get_option('blog_charset'), true);
 
 
 
 
750
 
751
- echo $exportdata;
752
- die(); //sends output and flushes buffer
 
 
 
 
 
 
 
 
753
  }else{
754
- //something went wrong with export, reload screen to show error message
755
- //$reload_uri=preg_replace(array('/&export(?:[^&]+|$)/','/&whash=[^&]+/'),'',$_SERVER["REQUEST_URI"]);
756
- $reload_uri=remove_query_arg(array('export','whash'));
757
- wp_safe_redirect($reload_uri);
758
- exit;
 
759
  }
760
- } //end export_wassup
761
-
762
  /** Turns off all error notices except fatal errors. */
763
  function wassup_disable_errors(){
764
  ini_set('error_reporting',E_ERROR);
@@ -798,11 +818,17 @@ function wassupPrepend() {
798
  if(empty($wassup_options) || !$wassup_options->is_recording_active()){ //do nothing
799
  return;
800
  }
 
 
 
 
 
 
801
  $wassup_table=$wassup_options->wassup_table;
802
  $wassup_tmp_table=$wassup_table."_tmp";
803
  $wscreen_res="";
804
  //session tracking with cookie
805
- $session_timeout=false; //v1.9.3 bugfix
806
  $wassup_timer=0;
807
  $wassup_id="";
808
  $subsite_id=(!empty($GLOBALS['current_blog']->blog_id)?$GLOBALS['current_blog']->blog_id:0);
@@ -823,7 +849,7 @@ function wassupPrepend() {
823
  //username in wassup cookie @since v1.8.3
824
  if(!empty($cookie_data[5])) $cookieUser=$cookie_data[5];
825
  if($wassup_timer <= 0 || $wassup_timer > 86400){
826
- $session_timeout=true; //v1.9.3 bugfix
827
  }
828
  //don't reuse wassup_id when subsite changed
829
  if(is_multisite()){
@@ -890,20 +916,20 @@ function wassupPrepend() {
890
  //Exclude for logged-in user in admin area (unless session_timeout is set)
891
  if(!is_admin() || empty($logged_user) || $session_timeout || $req_code !=200 || empty($wassup_id)){
892
  //use 'send_headers' hook for feed, media, and files except when request is wp-admin which doesn't run this hook
893
- if(is_feed() || preg_match('#[=/\?&](feed|atom)#',$urlRequested)>0){ //v1.9.3 bugfix
894
  if(is_feed() && !headers_sent()){
895
  add_action('send_headers','wassupAppend');
896
  }else{
897
  wassupAppend($req_code);
898
  }
899
- }elseif(preg_match('/(\.(3gp|7z|f4[pv]|mp[34])(?:[\?#]|$))/i',$urlRequested)>0){ //v1.9.3 bugfix
900
  //this is audio, video, or archive file request
901
  if(!is_admin() && !headers_sent()){
902
  add_action('send_headers','wassupAppend');
903
  }else{
904
  wassupAppend($req_code);
905
  }
906
- }elseif(preg_match('/([^\?#&]+\.([a-z]{1,4}))(?:[\?#]|$)/i',$urlRequested)>0 && basename($urlRequested)!="robots.txt"){ //v1.9.3 bugfix
907
  //this is multimedia or specific file request
908
  if(!is_admin() && !headers_sent()){
909
  add_action('send_headers','wassupAppend');
@@ -966,7 +992,7 @@ function wassupAppend($req_code=0) {
966
  //identify media requests
967
  $is_media=false;
968
  $fileRequested="";
969
- 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))|(?:[0-9a-z.\-\/_]+(?:zoom(?:in|out)\.cur)))(?:[?\#&]|$)#i",$_SERVER['REQUEST_URI'],$pcs)>0){ //v1.9.3 bugfix
970
  $is_media=true;
971
  if(ini_get('allow_url_fopen')) $fileRequested=$blogurl.$pcs[1];
972
  }
@@ -1121,7 +1147,6 @@ function wassupAppend($req_code=0) {
1121
  if(!empty($cookie_data[5])) $cookieUser = $cookie_data[5];
1122
  }
1123
  }
1124
- //if(!empty($wassup_id)){ - test moved below
1125
  //Get visitor ip/hostname from http_header
1126
  if(!empty($cookieIP)){
1127
  $ipAddress = $_SERVER['REMOTE_ADDR'];
@@ -1237,7 +1262,7 @@ function wassupAppend($req_code=0) {
1237
  if($req_code==200 && !empty($fileRequested) && !file_exists($fileRequested)){
1238
  $req_code=404;
1239
  }
1240
- }elseif(preg_match("#(^/[0-9a-z\-/\._]+\.([a-z]{1,4}))(?:[?&\#]|$)#i",$urlRequested,$pcs)>0 && basename($urlRequested)!="robots.txt"){
1241
  //identify file requests
1242
  if(ini_get('allow_url_fopen')) $fileRequested=$blogurl.$pcs[1];
1243
  }
@@ -1280,7 +1305,7 @@ function wassupAppend($req_code=0) {
1280
  //#4 Exclude users on exclusion list
1281
  if (empty($wassup_options->wassup_exclude_user) || empty($logged_user) || preg_match('/(?:^|\s*,)\s*('.preg_quote($logged_user).')\s*(?:,|$)/',$wassup_options->wassup_exclude_user)==0){
1282
  //'preg_match' replaces 'explode' for faster matching of users, url requests, and ip addresses @since v1.9
1283
- //TODO: exclude page requests by post_id
1284
  //#5 Exclude urls on exclusion list
1285
  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){
1286
  //url matching may be affected by html-encoding, url-encoding, query parameters, and labels on the url - so do those exclusions separately
@@ -1382,7 +1407,7 @@ function wassupAppend($req_code=0) {
1382
  if($recent_hit[0]->agent == $userAgent || empty($recent_hit[0]->agent)){
1383
  if($recent_hit[0]->urlrequested == $urlRequested || $recent_hit[0]->urlrequested == '[404] '.$urlRequested){
1384
  $dup_urlrequest=1;
1385
- }elseif($is_media && $req_code == 200 && preg_match("/\.(gif|ico|jpe?g|png|tiff)$/i",$fileRequested) >0){
1386
  //exclude images/photos only after confirmation of other valid page hit by visitor
1387
  $dup_urlrequest=1;
1388
  }
@@ -1443,8 +1468,8 @@ function wassupAppend($req_code=0) {
1443
  }
1444
  }
1445
  //#14 Exclude 404 hits unless 1st visit or malware attempt
1446
- 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))){ //v1.9.3 bugfix
1447
- //New in v1.9.3: omit 'admin-ajax.php' and 'wp-login.php' from malware checks
1448
  if($hackercheck && $spam==0 && $urlRequested !='/wp-login.php' && $urlRequested !='/wp-admin/admin-ajax.php'){
1449
  $pcs=array();
1450
  //identify malware
@@ -1533,11 +1558,10 @@ function wassupAppend($req_code=0) {
1533
  }
1534
  }
1535
  //regular visitor attempts to access "upload" page is likely malware
1536
- }elseif(preg_match('#[?&][0-9a-z\-_]*(page\=upload)(?:[^0-9a-z\-_]|$)#i',$urlRequested)>0){
1537
  $spam=3;
1538
  }elseif($req_code==404 && wIsAttack($urlRequested)){
1539
  $spam=3;
1540
- //v1.9.3 bugfix: moved referrer 'attack' test to #13 above..some referrer attacks were missed here
1541
  }
1542
  } //end if empty logged_user
1543
  //retroactively update recent visitor records as spam/malware
@@ -1569,7 +1593,7 @@ function wassupAppend($req_code=0) {
1569
  }
1570
  }
1571
  //# Some spiders, such as Yahoo and MSN, don't always give a unique useragent, so test against known hostnames/IP to identify these spiders
1572
- $spider_hosts='/^((65\.55|207\.46)\.\d{3}.\d{1,3}|.*\.(crawl|yse)\.yahoo\.net|ycar\d+\.mobile\.[a-z0-9]{3}\.yahoo\.com|msnbot.*\.search\.msn\.com|crawl[0-9\-]+\.googlebot\.com|baiduspider[0-9\-]+\.crawl\.baidu\.com|(crawl(?:er)?|spider|robot)\-?\d*\..*)$/';
1573
  //#Identify spiders from known spider domains
1574
  if(empty($agent) || preg_match($spider_hosts,$hostname)>0 || stristr($agent,'unknown')!==false){
1575
  list($spider,$spidertype,$feed) = wGetSpider($userAgent,$hostname,$browser);
@@ -1601,7 +1625,7 @@ function wassupAppend($req_code=0) {
1601
  //no userAgent == spider
1602
  $spider=$unknown_spider;
1603
  }else{
1604
- 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()){
1605
  list($spider,$spidertype,$feed) = wGetSpider($userAgent,$hostname,$browser);
1606
  if($wdebug_mode){
1607
  if(is_admin() || headers_sent()){
@@ -1674,9 +1698,8 @@ function wassupAppend($req_code=0) {
1674
  } //end if empty($spider)
1675
  //identify spoofers of Google/Yahoo
1676
  if(!empty($spider)){
1677
- if(!empty($hostname) && preg_match('/^(googlebot|yahoo\!\ slurp)/i',$spider)>0 && preg_match('/\.(googlebot|yahoo)\./i',$hostname)==0){
1678
  $spider= __("Spoofer bot","wassup");
1679
- //if($spam == "0") $spam=3;
1680
  }
1681
  //for late spider identification, update previous records
1682
  if($wpageviews >1 && empty($recent_hit[0]->spider)){
@@ -1694,24 +1717,30 @@ function wassupAppend($req_code=0) {
1694
  //## Check for referrer spam...
1695
  if($wassup_options->wassup_spamcheck == 1 && $spam == 0 && !$goodbot){
1696
  $spamComment = New wassup_checkComment;
1697
- //...skip if referrer is own blog
1698
- if(!empty($referrer) && !$is_admin_login && stristr($referrer,$wpurl)!=$referrer && stristr($referrer,$blogurl)!=$referrer && $referrer!=$blogurl.$urlRequested){
1699
- if($wassup_options->wassup_refspam == 1){
1700
- //check if referrer is a previous comment spammer
1701
- if($spamComment->isRefSpam($referrer)>0){
1702
- $spam=2;
1703
- }else{
1704
- //check for known referer spammer
1705
- $isspam=wGetSpamRef($referrer,$hostname);
1706
- if ($isspam) $spam = 2;
1707
- }
 
 
 
 
1708
  }
1709
- }
 
 
1710
  //## Check for comment spammer...
1711
  // No spam check on spiders unless there is a comment or forum page request...
1712
  if ($spam == 0 && (empty($spider) || stristr($urlRequested,"comment")!== FALSE || stristr($urlRequested,"forum")!== FALSE || !empty($comment_user))) {
1713
  //check for previous spammer detected by anti-spam plugin
1714
- $spammerIP = $spamComment->isSpammer($IP); //TODO: IP or ipAddress?
1715
  if($spammerIP > 0) $spam=1;
1716
  //set as spam if both URL and referrer are "comment" and browser is obsolete or Opera
1717
  if ($spam== 0 && $wassup_options->wassup_spam==1 && stristr($urlRequested,"comment")!== FALSE && stristr($referrer,"#comment")!==FALSE && (stristr($browser,"opera")!==FALSE || preg_match('/^(AOL|Netscape|IE)\s[1-6]$/',$browser)>0)) {
@@ -1755,32 +1784,16 @@ function wassupAppend($req_code=0) {
1755
  //get language/locale
1756
  if(empty($language) && !empty($recent_hit[0]->language)) $language=$recent_hit[0]->language;
1757
  if($wdebug_mode){
1758
- if(is_admin() || headers_sent()){
1759
- if(!empty($debug_output)){
1760
- echo $debug_output;
1761
- echo "\nwassupappend-debug#7";
1762
- $debug_output="";
1763
- }
1764
- echo "\n language=$language";
1765
- }else{
1766
- $debug_output .= "\n language=$language";
1767
- }
1768
  }
1769
  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){
1770
  //get language/locale info from hostname or referrer data
1771
  $language=wGetLocale($language,$hostname,$referrer);
1772
  }
1773
  if($wdebug_mode){
1774
- if(is_admin() || headers_sent()){
1775
- if(!empty($debug_output)){
1776
- echo $debug_output;
1777
- echo "\nwassupappend-debug#8";
1778
- $debug_output="";
1779
- }
1780
- echo "\n...language=$language (after geoip/wgetlocale)";
1781
- }else{
1782
- $debug_output .= " ...language=$language (after geoip/wgetlocale)";
1783
- }
1784
  }
1785
  // get search engine and search keywords from referrer
1786
  $searchengine="";
@@ -1860,7 +1873,8 @@ function wassupAppend($req_code=0) {
1860
  $searchcountry=$match[3];
1861
  }
1862
  if(!empty($searchcountry) && $searchcountry!="us"){
1863
- $searchengine .=" ".strtoupper($searchcountry);
 
1864
  if($language == "us" || empty($language) || $language=="en"){
1865
  //make tld consistent with language
1866
  if($searchcountry=="uk") $searchcountry="gb";
@@ -1938,12 +1952,7 @@ function wassupAppend($req_code=0) {
1938
  }
1939
  }
1940
  if($wdebug_mode){
1941
- if(is_admin() || headers_sent()){
1942
- if(!empty($debug_output)){
1943
- echo $debug_output;
1944
- echo "\nwassupappend-debug#9";
1945
- $debug_output="";
1946
- }
1947
  if(!empty($wassup_recid)){
1948
  echo "\nWassUp record data:";
1949
  print_r($wassup_rec);
@@ -1963,72 +1972,72 @@ function wassupAppend($req_code=0) {
1963
  }
1964
  } //end if prefetch
1965
  }elseif($wdebug_mode){
1966
- if(is_admin() || headers_sent()) echo "\n #18 Excluded by: wp-content/plugins (after 404)";
1967
  else $debug_output .="\n #18 Excluded by: wp-content/plugins (after 404)";
1968
  } //end if !wp-content/plugins
1969
  }elseif($wdebug_mode){
1970
- if(is_admin() || headers_sent()) echo "\n #17 Excluded by: wassup_spam";
1971
  else $debug_output .="\n #17 Excluded by: wassup_spam";
1972
  } //end if $spam == 0
1973
  }elseif($wdebug_mode){
1974
- if(is_admin() || headers_sent()) echo "\n #16 Excluded by: wassup_spider";
1975
  else $debug_output .="\n #16 Excluded by: wassup_spider";
1976
  } //end if wassup_spider
1977
  }elseif($wdebug_mode){
1978
- if(is_admin() || headers_sent()) echo "\n #15 Excluded by: wassup_hack";
1979
  else $debug_output .="\n #15 Excluded by: wassup_hack";
1980
  } //end if wassup_hack
1981
  }elseif($wdebug_mode){
1982
- if(is_admin() || headers_sent()) echo "\n #14 Excluded by: is_404";
1983
  else $debug_output .="\n #14 Excluded by: is_404";
1984
  } //end if !is_404
1985
  }elseif($wdebug_mode){
1986
- if(is_admin() || headers_sent()) echo "\n #13 Excluded by: !wp-admin (ajax)";
1987
  else $debug_output .="\n #13 Excluded by: !wp_admin (ajax)";
1988
  } //end if !wp_admin (ajax) && recent_hit
1989
  }elseif($wdebug_mode){
1990
- if(is_admin() || headers_sent()) echo "\n #12 Excluded by: dup_urlrequest";
1991
  else $debug_output .="\n #12 Excluded by: dup_urlrequest";
1992
  } //end if dup_urlrequest == 0
1993
  }elseif($wdebug_mode){
1994
- if(is_admin() || headers_sent()) echo "\n #11 Excluded by: wassup_attack";
1995
  else $debug_output .="\n #11 Excluded by: wassup_attack";
1996
  } //end if wassup_attack
1997
  }elseif($wdebug_mode){
1998
- if(is_admin() || headers_sent()) echo "\n #10 Excluded by: wassup_loggedin";
1999
  else $debug_output .="\n #10 Excluded by: wassup_loggedin";
2000
  } //end if wassup_loggedin
2001
  }elseif($wdebug_mode){
2002
- if(is_admin() || headers_sent()) echo "\n #9 Excluded by: wp-content/themes";
2003
  else $debug_output .="\n #9 Excluded by: wp-content/themes";
2004
  } //end if !themes
2005
  }elseif($wdebug_mode){
2006
- if(is_admin() || headers_sent()) echo "\n #8 Excluded by: wp-content/plugins (or hostname wildcard)";
2007
  else $debug_output .="\n #8 Excluded by: wp-content/plugins (or hostname wildcard)";
2008
  } //end if !plugins
2009
  }elseif($wdebug_mode){
2010
- if(is_admin() || headers_sent()) echo "\n #7 Excluded by: exclude_host (or IP wilcard)";
2011
  else $debug_output .="\n #7 Excluded by: exclude_host (or IP wildcard)";
2012
  } //end if wassup_exclude_host
2013
  }elseif($wdebug_mode){
2014
- if(is_admin() || headers_sent()) echo "\n #6 Excluded by: wassup_exclude";
2015
  else $debug_output .="\n #6 Excluded by: wassup_exclude";
2016
  } //end if wassup_exclude
2017
  }elseif($wdebug_mode){
2018
- if(is_admin() || headers_sent()) echo "\n #5 Excluded by: exclude_url";
2019
  else $debug_output .="\n #5 Excluded by: exclude_url";
2020
  } //end if wassup_exclude_url
2021
  }elseif($wdebug_mode){
2022
- if(is_admin() || headers_sent()) echo "\n #4 Excluded by: exclude_user";
2023
  else $debug_output .="\n #4 Excluded by: exclude_user";
2024
  } //end if wassup_exclude_user
2025
  }elseif($wdebug_mode){
2026
- if(is_admin() || headers_sent()) echo "\n #3 Excluded by: is_admin";
2027
  else $debug_output .="\n #3 Excluded by: is_admin";
2028
  } //end if !is_admin
2029
  } //end if wp-cron.php?doing_wp_cron===FALSE //#2
2030
  }elseif($wdebug_mode){
2031
- if(is_admin() || headers_sent()) echo "\n #1 Excluded by: is_admin_login";
2032
  else $debug_output .="\n #1 Excluded by: is_admin_login";
2033
  } //end if !is_admin_login
2034
 
@@ -2044,7 +2053,7 @@ function wassupAppend($req_code=0) {
2044
  }
2045
  if(is_numeric($result)) $in_temp=(int)$result;
2046
  if($wdebug_mode){
2047
- if(is_admin() || headers_sent()) echo "\nin_temp=".$result;
2048
  else $debug_output .="\nin_temp=".$result;
2049
  }
2050
  //add new temp record
@@ -2158,18 +2167,18 @@ function wassupAppend($req_code=0) {
2158
  wp_schedule_single_event(time()+40,'wassup_scheduled_dbtasks',$args);
2159
  }
2160
  if($wdebug_mode){
2161
- if(is_admin() || headers_sent()){
2162
  echo "\nWassup scheduled tasks:";
2163
  print_r($wassup_dbtask);
2164
  }
2165
  }
2166
  }
2167
  if($wdebug_mode){ //close comment tag to hide debug data from visitors
2168
- if(is_admin() || headers_sent()){
2169
  echo "\n--> \n";
2170
  }else{
2171
  $debug_output .= "<br />\n--> \n";
2172
- //add debug output to wp_footer output - TODO
2173
  $expire=time()+180;
2174
  $wassup_key=wassup_clientIP($_SERVER['REMOTE_ADDR']);
2175
  wassupDb::update_wassupmeta($wassup_key,'_debug_output',$expire,$debug_output);
@@ -2350,7 +2359,7 @@ function wSeReferer($ref = false) {
2350
  return false;
2351
  }
2352
  //Check against Google, Yahoo, MSN, Ask and others
2353
- if(preg_match("#^https?://([^/]+).*[&\?](prev|q|p|s|search|searchfor|as_q|as_epq|query|keywords|term|encquery)=([^&]+)#i",$SeReferer,$pcs) > 0){
2354
  $SeDomain = trim(strtolower($pcs[1]));
2355
  if ($pcs[2] == "encquery") {
2356
  $SeQuery = " *".__("encrypted search","wassup")."* ";
@@ -2359,14 +2368,14 @@ function wSeReferer($ref = false) {
2359
  }
2360
 
2361
  //Check for search engines that show query as a url with 'search' and keywords in path (ex: Dogpile.com)
2362
- } elseif (preg_match("#^https?://([^/]+).*/(results|search)/web/([^/]+)/(\d+)?#i", $SeReferer,$pcs)>0){
2363
  $SeDomain = trim(strtolower($pcs[1]));
2364
  $SeQuery = $pcs[3];
2365
  if (!empty($pcs[4])) {
2366
  $SePos=(int)$pcs[4];
2367
  }
2368
  //Check for search engines that show query as a url with 'search' in domain and keywords in path (ex: twitnitsearch.appspot.com)
2369
- } elseif (preg_match("#^https?://([a-z0-9_\-\.]*(search)(?:[a-z0-9_\-\.]*\.(?:[a-z]{2,4})))/([^/]+)(?:[a-z_\-=/]+)?/(\d+)?#i",$SeReferer."/",$pcs)>0) {
2370
  $SeDomain = trim(strtolower($pcs[1]));
2371
  $SeQuery = $pcs[3];
2372
  if (!empty($pcs[4])) {
@@ -2386,7 +2395,7 @@ function wSeReferer($ref = false) {
2386
  }
2387
  }
2388
  if (!isset($SePos)) {
2389
- if (preg_match("#[&\?](start|startpage|b|cd|first|stq|pi|page)[=/](\d+)#i",$SeReferer,$pcs)) {
2390
  $SePos = $pcs[2];
2391
  } else {
2392
  $SePos = 1;
@@ -2794,7 +2803,7 @@ function wGetSE($referrer = null){
2794
  //search engine or key is not in list, so check for search phrase instead
2795
  if (empty($search_phrase) && !empty($referrer)) {
2796
  //Check for general search phrases
2797
- if (preg_match("#^https?://([^/]+).*[&?](q|search|searchfor|as_q|as_epq|query|keywords?|term|text|encquery)=([^&]+)#i",$referrer,$pcs) > 0) {
2798
  if (empty($searchengine)) $searchengine=trim(strtolower($pcs[1]));
2799
  if ($pcs[2] =="encquery"){
2800
  $search_phrase=" *".__("encrypted search","wassup")."* ";
@@ -2802,14 +2811,14 @@ function wGetSE($referrer = null){
2802
  $search_phrase = $pcs[3];
2803
  }
2804
  //Check separately for queries that use nonstandard search variable to avoid retrieving values like "p=parameter" when "q=query" exists
2805
- } elseif(preg_match("#^https?://([^/]+).*(?:results|search|query).*[&?](aq|as|p|su|s|kw|k|qo|qp|qs|string)=([^&]+)#i",$referrer,$pcs) > 0) {
2806
  if (empty($searchengine)) $searchengine = trim(strtolower($pcs[1]));
2807
  $search_phrase = $pcs[3];
2808
  }
2809
  } //end if search_phrase
2810
  //do a separate check for page number, if not found above
2811
  if (!empty($search_phrase)) {
2812
- if (empty($searchpage) && preg_match("#[&\?](start|startpage|b|cd|first|stq|p|pi|page)[=/](\d+)#i",$referrer,$pcs)>0) {
2813
  $searchpage = $pcs[2];
2814
  }
2815
  }
@@ -2909,13 +2918,14 @@ function wGetSpider($agent="",$hostname="", $browser=""){
2909
  $pcs=array();
2910
  //identify obvious script injection bots
2911
  if(!empty($ua)){
 
2912
  if(stristr($ua,'location.href')!==FALSE){
2913
  $crawlertype="H";
2914
  $crawler="Script Injection bot";
2915
- }elseif(preg_match('/(<|&lt;|&#60;)a(\s|%20|&#32;|\+)href/i',$ua)>0){
2916
  $crawlertype="H";
2917
  $crawler="Script Injection bot";
2918
- }elseif(preg_match('/(<|&lt;|&#60;)script/i',$ua)>0){
2919
  $crawlertype="H";
2920
  $crawler="Script Injection bot";
2921
  }elseif(preg_match('/select.*(\s|%20|\+|%#32;)from(\s|%20|\+|%#32;)wp_/i',$ua)>0){
@@ -2952,13 +2962,16 @@ function wGetSpider($agent="",$hostname="", $browser=""){
2952
  $crawler="Baiduspider";
2953
  $crawlertype="R";
2954
 
 
 
 
2955
  }
2956
  } //end if $hostname
2957
  $pcs=array();
2958
  $pcs2=array();
2959
  if(empty($crawler)){
2960
  // check for crawlers that identify themselves clearly in their user agent string with words like bot, spider, and crawler
2961
- if ((!empty($ua) && preg_match("#(\w+[ \-_]?(bot|crawl|google|reader|seeker|spider|feed|indexer|parser))[0-9/ -:_.;\)]#",$ua,$pcs) >0) || preg_match("#(crawl|feed|google|indexer|parser|reader|robot|seeker|spider)#",$hostname,$pcs2) >0){
2962
  if(!empty($pcs[1])) $crawler=$pcs[1];
2963
  elseif(!empty($pcs2[1])) $crawler="unknown_spider";
2964
  $crawlertype="R";
@@ -2988,7 +3001,7 @@ function wGetSpider($agent="",$hostname="", $browser=""){
2988
  }
2989
  }
2990
  //get crawler info. from a known list of bots and feedreaders that don't list their names first in UA string.
2991
- //Note: spaces are removed from UA string for this bot comparison
2992
  $crawler=trim($crawler);
2993
  if(empty($crawler) || $crawler=="unknown_spider"){
2994
  $uagent=str_replace(" ","",$ua);
@@ -3300,7 +3313,7 @@ function wGetSpider($agent="",$hostname="", $browser=""){
3300
  if(empty($crawler)){
3301
  $pcs=array();
3302
  //Assume first word in useragent is crawler name
3303
- if(preg_match("/^(\w+)[\/ \-\:_\.;]/",$ua,$pcs) > 0){
3304
  if(strlen($pcs[1])>1 && $pcs[1]!="Mozilla"){
3305
  $crawler=$pcs[1];
3306
  }
@@ -3309,7 +3322,7 @@ function wGetSpider($agent="",$hostname="", $browser=""){
3309
  //if (empty($crawler) && !empty($browser)) $crawler = $browser;
3310
  }
3311
  //#do a feed check and get feed subcribers, if available
3312
- if(preg_match("/([0-9]{1,10})\s?subscriber/i",$ua,$subscriber) > 0){
3313
  // It's a feedreader with some subscribers
3314
  $feed=$subscriber[1];
3315
  if(empty($crawler) && empty($browser)){
@@ -3349,7 +3362,7 @@ function wGetLocale($language="",$hostname="",$referrer="") {
3349
  list($language)=explode(";",$langarray[0]);
3350
  }
3351
  //use 2-digit top-level domains (TLD) for country code, if any
3352
- if (strlen($hostname)>2 && preg_match("/\.[a-z]{2}$/i", $hostname)>0){
3353
  $country=strtolower(substr($hostname,-2));
3354
  //ignore domains commonly used for media
3355
  if($country == "tv" || $country == "fm") $country="";
@@ -3404,24 +3417,23 @@ function wGetLocale($language="",$hostname="",$referrer="") {
3404
  }
3405
  //Replace language with locale for widely spoken languages
3406
  if(!empty($country)){
3407
- if(empty($language) || $language=="us" || preg_match("/^([a-z]{2})$/",$language)==0){
3408
  $language=$country;
3409
  }elseif($language=="es"){
3410
  //for Central/South American locales
3411
  $language=$country;
3412
  }
3413
  }
3414
- if(!empty($language) && preg_match("/^[a-z]{2}$/",$language)>0){
3415
  $clocale=$language;
3416
  }
3417
  return $clocale;
3418
  } //end function wGetLocale
3419
 
3420
  /**
3421
- * Check referrer string and referrer host (or hostname) for referrer spam
3422
- *
3423
- * -checks referer host against know list of spammer
3424
- * -checks referrer string for spammer content (faked referrer).
3425
  * @param string $referrer, string $hostname
3426
  * @return boolean
3427
  */
@@ -3439,6 +3451,7 @@ function wGetSpamRef($referrer,$hostname="") {
3439
  if(isset($rurl['host'])){
3440
  $referrer_host=$rurl['host'];
3441
  $thissite=parse_url(get_option('home'));
 
3442
  //exclude current site as referrer
3443
  if(isset($thissite['host']) && $referrer_host == $thissite['host']){
3444
  $referrer_host="";
@@ -3452,6 +3465,8 @@ function wGetSpamRef($referrer,$hostname="") {
3452
  elseif(preg_match('#(\.|/)youtu.be/[0-9a-z]+#i',$ref)>0) $badhost=true;
3453
  //some facebook links in referrer are faked
3454
  elseif(preg_match('#(\.|/)facebook\.com\/ASeaOfSins$#',$ref)>0) $badhost=true;
 
 
3455
  }
3456
  } else { //faked referrer string
3457
  $badhost=true;
@@ -3465,26 +3480,27 @@ function wGetSpamRef($referrer,$hostname="") {
3465
  } //end elseif
3466
  //#Assume any referrer name similar to "viagra/zanax/.." is spam and mark as such...
3467
  if (!$badhost && !empty($referrer_host)) {
3468
- $lines = array( "allegra", "ambien", "ativan", "blackjack",
3469
- "bukakke", "casino","cialis","ciallis", "celebrex",
3470
- "cumdripping", "cumeating", "cumfilled",
3471
- "cumpussy", "cumsucking", "cumswapping",
3472
- "diazepam", "diflucan", "drippingcum", "eatingcum",
3473
- "enhancement", "finasteride", "fioricet",
3474
- "gabapentin", "gangbang", "highprofitclub",
3475
- "hydrocodone", "krankenversicherung", "lamisil",
3476
- "latinonakedgirl", "levitra", "libido", "lipitor",
3477
- "lortab", "melatonin", "meridia", "NetCaptor",
3478
- "orgy-", "phentemine", "phentermine", "propecia",
3479
- "proscar", "pussycum", "sildenafil", "snowballing",
3480
- "suckingcum", "swappingcum", "swingers",
3481
- "tadalafil", "tigerspice", "tramadol", "ultram-",
3482
- "valium", "valtrex", "viagra", "viagara","vicodin",
3483
- "xanax", "xenical", "xxx-",
3484
- "zoloft", "zovirax", "zanax"
3485
- );
3486
  foreach ($lines as $badreferrer) {
3487
- if (strstr($referrer_host, $badreferrer)!== FALSE){
 
 
 
3488
  $badhost=true;
3489
  break 1;
3490
  }
@@ -3502,7 +3518,7 @@ function wGetSpamRef($referrer,$hostname="") {
3502
  } //end wGetSpamRef
3503
 
3504
  /**
3505
- * Compare a hostname (and referrer hostname) arguments against a list of known spammers.
3506
  * @param string(2)
3507
  * @return boolean
3508
  * @since v1.9
@@ -3516,7 +3532,10 @@ function wassup_badhost_lookup($referrer_host,$hostname="") {
3516
  $lines = array( '209\.29\.25\.180',
3517
  '78\.185\.148\.185',
3518
  '93\.90\.243\.63',
 
 
3519
  'amsterjob\.com',
 
3520
  'burger\-imperia\.com',
3521
  'buttons\-for\-website\.com',
3522
  'canadapharm\.atwebpages\.com',
@@ -3554,6 +3573,7 @@ function wassup_badhost_lookup($referrer_host,$hostname="") {
3554
  'gameskillinggames\.net',
3555
  'gardenactivities\.webnode\.com',
3556
  'globalringtones\.net',
 
3557
  'gossipchips\.com',
3558
  'gskstudio\.com',
3559
  'hearcam\.org',
@@ -3610,6 +3630,7 @@ function wassup_badhost_lookup($referrer_host,$hostname="") {
3610
  'rufights\.com',
3611
  'scripted\.com',
3612
  'seoindiawizard\.com',
 
3613
  'singlesvacationspackages\.com',
3614
  'sitetalk\-revolution\.com',
3615
  'smartforexsignal\.com',
@@ -3621,6 +3642,7 @@ function wassup_badhost_lookup($referrer_host,$hostname="") {
3621
  'thebestweddingparty\.com',
3622
  'thik\-chik\.com',
3623
  'thisweekendsmovies\.com',
 
3624
  'uggbootsnewest\.net',
3625
  'uggsmencheap\.com',
3626
  'uggsnewest\.com',
@@ -3631,6 +3653,7 @@ function wassup_badhost_lookup($referrer_host,$hostname="") {
3631
  '[a-z\-\.]+vigra\-buy\.info',
3632
  'vitamin\-d\-deficiency\-symptoms\.com',
3633
  'vpn\-privacy\.org',
 
3634
  'watchstock\.com',
3635
  'web\-promotion\-services\.net',
3636
  'wh\-tech\.com',
@@ -3712,161 +3735,29 @@ function wassup_urlshortener_lookup($urlhost){
3712
  * @return string
3713
  */
3714
  function wassup_get_clientAddr($ipAddress=""){
3715
- $proxy="";
3716
- $hostname="";
3717
- $IP="";
3718
- //Get the visitor IP from Http_header
3719
- if(empty($ipAddress)){
3720
- $ipAddress=(isset($_SERVER['REMOTE_ADDR'])?$_SERVER['REMOTE_ADDR']:"");
3721
- }
3722
- $IPlist=$ipAddress;
3723
- $proxylist=$ipAddress;
3724
- $serverAddr=(isset($_SERVER['SERVER_ADDR'])?$_SERVER['SERVER_ADDR']:"");
3725
- //for computers behind proxy servers:
3726
- //if(!empty($_SERVER['HTTP_X_FORWARDED_HOST'])) $serverAddr=$_SERVER['HTTP_X_FORWARDED_HOST'];
3727
- //elseif(!empty($_SERVER['HTTP_X_FORWARDED_SERVER'])) $serverAddr=$_SERVER['HTTP_X_FORWARDED_SERVER'];
3728
- //
3729
- //check that the client IP is not equal to the host server IP
3730
- if(isset($_SERVER['HTTP_CLIENT_IP']) && $serverAddr!=$_SERVER['HTTP_CLIENT_IP'] && $ipAddress!=$_SERVER['HTTP_CLIENT_IP']){
3731
- if(strpos($proxylist,$_SERVER["HTTP_CLIENT_IP"])===false){
3732
- $IPlist=$_SERVER['HTTP_CLIENT_IP'].",".$proxylist;
3733
- $proxylist=$IPlist;
3734
- }
3735
- $ipAddress=$_SERVER['HTTP_CLIENT_IP'];
3736
- }
3737
- if(isset($_SERVER['HTTP_X_REAL_IP']) && $serverAddr!=$_SERVER['HTTP_X_REAL_IP'] && $ipAddress!=$_SERVER['HTTP_X_REAL_IP']){
3738
- if(strpos($proxylist,$_SERVER["HTTP_X_REAL_IP"])===false){
3739
- $IPlist=$_SERVER['HTTP_X_REAL_IP'].",".$proxylist;
3740
- $proxylist=$IPlist;
3741
- }
3742
- $ipAddress=$_SERVER['HTTP_X_REAL_IP'];
3743
- }
3744
- //check for IP addresses from Cloudflare CDN-hosted sites
3745
- if(isset($_SERVER['HTTP_CF_CONNECTING_IP']) && $serverAddr!=$_SERVER['HTTP_CF_CONNECTING_IP'] && $ipAddress!=$_SERVER['HTTP_CF_CONNECTING_IP']){
3746
- if(strpos($proxylist,$_SERVER["HTTP_CF_CONNECTING_IP"])===false){
3747
- $IPlist=$_SERVER['HTTP_CF_CONNECTING_IP'].",".$proxylist;
3748
- $proxylist=$IPlist;
3749
- }
3750
- $ipAddress=$_SERVER['HTTP_CF_CONNECTING_IP'];
3751
- }
3752
- //check for proxy addresses
3753
- if(!empty($_SERVER["HTTP_X_FORWARDED_FOR"]) && $serverAddr!=$_SERVER['HTTP_X_FORWARDED_FOR'] && $ipAddress!=$_SERVER['HTTP_X_FORWARDED_FOR']){
3754
- if(strpos($proxylist,$_SERVER['HTTP_X_FORWARDED_FOR'])===false){
3755
- $IPlist=$_SERVER['HTTP_X_FORWARDED_FOR'].",".$proxylist;
3756
- $proxylist=$IPlist;
3757
- }
3758
- $ipAddress=$_SERVER['HTTP_X_FORWARDED_FOR'];
3759
- }
3760
- if(!empty($_SERVER["HTTP_X_FORWARDED"]) && $serverAddr!=$_SERVER["HTTP_X_FORWARDED"] && $ipAddress!=$_SERVER['HTTP_X_FORWARDED']){
3761
- if(strpos($proxylist,$_SERVER['HTTP_X_FORWARDED'])===false){
3762
- $IPlist=$_SERVER['HTTP_X_FORWARDED'].",".$proxylist;
3763
- $proxylist=$IPlist;
3764
- }
3765
- $ipAddress=$_SERVER['HTTP_X_FORWARDED'];
3766
- }
3767
- //try get valid IP
3768
- $IP = wValidIP($ipAddress);
3769
- if(empty($IP) && $ipAddress!=$proxylist){
3770
- $proxylist=preg_replace('/(^|[^0-9\.])'.preg_quote($ipAddress).'($|[^0-9\.])/','',$IPlist);
3771
- $IP=wValidIP($proxylist);
3772
- }
3773
- if(!empty($IP)){
3774
- $p=strpos($IPlist,$IP)+strlen($IP)+1;
3775
- if($p < strlen($IPlist)) $proxylist=substr($IPlist,$p);
3776
- else $proxylist="";
3777
- }
3778
- //check client hostname for known proxy gateways
3779
- if(!empty($IP)){
3780
- $hostname=wassup_get_hostname($IP);
3781
- if(preg_match('/(cloudflare\.|cache|gateway|proxy|unknown$|localhost$|\.local(?:domain)?$)/',$hostname)>0){
3782
- $ip1=$IP;
3783
- if(!empty($proxylist)) $IP=wValidIP($proxylist);
3784
- if(!empty($IP)){
3785
- $p=strpos($IPlist,$IP)+strlen($IP)+1;
3786
- if($p < strlen($IPlist)) $proxylist=substr($IPlist,$p);
3787
- else $proxylist="";
3788
- }else{
3789
- $IP=$ip1;
3790
- }
3791
- }
3792
- if(!empty($proxylist)) $proxy=wValidIP($proxylist);
3793
- if(!empty($proxy)) $ipAddress=$proxy.','.$IP;
3794
- else $ipAddress=$IP;
3795
- }
3796
- return $ipAddress;
3797
  } //end wassup_get_clientAddr
3798
 
3799
  // lookup the hostname from an ip address via cache or via gethostbyaddr command @since v1.9
3800
  function wassup_get_hostname($IP=""){
3801
- if(empty($IP)) $IP=wassup_clientIP($_SERVER['REMOTE_ADDR']);
3802
- //first check for cached hostname
3803
- $hostname=wassupDb::get_wassupmeta($IP,'hostname');
3804
- if(empty($hostname)){
3805
- if($IP=="127.0.0.1" || $IP=='::1' || $IP=='0:0:0:0:0:0:0:1'){
3806
- $hostname="localhost";
3807
- }elseif($IP=="0.0.0.0" || $IP=='::' || $IP=='0:0:0:0:0:0:0:0'){
3808
- $hostname="unknown";
3809
- }else{
3810
- $hostname=@gethostbyaddr($IP);
3811
- if(!empty($hostname) && $hostname!=$IP && $hostname!="localhost" && $hostname!="unknown"){
3812
- $meta_key='hostname';
3813
- $meta_value=$hostname;
3814
- $expire=time()+48*3600; //cache for 2 days
3815
- $cache_id=wassupDb::update_wassupmeta($IP,$meta_key,$meta_value,$expire);
3816
- }
3817
- }
3818
- }
3819
- return $hostname;
3820
  } //end wassup_get_hostname
3821
 
3822
  // Return a single ip (the client IP) from a comma-separated IP address with no ip validation. @since v1.9
3823
  function wassup_clientIP($ipAddress){
3824
- $IP=false;
3825
- if(!empty($ipAddress)){
3826
- $ip_proxy=strpos($ipAddress,",");
3827
- //if proxy, get 2nd ip...
3828
- if($ip_proxy!==false){
3829
- $IP=substr($ipAddress,(int)$ip_proxy+1);
3830
- }else{
3831
- $IP=$ipAddress;
3832
- }
3833
- }
3834
- return $IP;
3835
  }
3836
 
3837
  //return 1st valid IP address in a comma-separated list of IP addresses -Helene D. 2009-03-01
3838
  function wValidIP($multiIP) {
3839
- //in case of multiple forwarding
3840
- $ips=explode(",",$multiIP);
3841
- $goodIP=false;
3842
- //look through forwarded list for a good IP
3843
- foreach ($ips as $ipa) {
3844
- $IP=trim(strtolower($ipa));
3845
- //v1.9.3 bugfix: exclude badly formatted ip's
3846
- if(!empty($IP)){
3847
- //exclude dummy IPv4 addresses
3848
- if(preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/',$IP)>0){
3849
- if($IP!="0.0.0.0" && $IP!="127.0.0.1" && substr($IP,0,8)!="192.168." && substr($IP,0,3)!="10." && substr($IP,0,4)!="172." && substr($IP,0,7)!='192.18.' && substr($IP,0,4)!='255.' && substr($IP,-4)!='.255'){
3850
- $goodIP=$IP;
3851
- }elseif(substr($IP,0,4)=="172." && preg_match('/172\.(1[6-9]|2[0-9]|3[0-1])\./',$IP)===false){
3852
- $goodIP=$IP;
3853
- }
3854
- //exclude dummy IPv6 addresses
3855
- }elseif(preg_match('/^(?:((?:[0-9a-f]{1,4}\:){1,}(?:\:?[0-9a-f]{1,4}){1,})|(\:\:(?:[0-9a-f]{1,4})?))$/i',$IP)>0){
3856
- $ipv6=str_replace("0000","0",$IP);
3857
- if($ipv6!='::' && $ipv6!='0:0:0:0:0:0:0:0' && $ipv6!='::1' && $ipv6!='0:0:0:0:0:0:0:1' && substr($ipv6,0,2)!='fd' && substr($ipv6,0,5)!='ff01:' && substr($ipv6,0,5)!='ff02:' && substr($ipv6,0,5)!='2001:'){
3858
- $goodIP=$IP;
3859
- }
3860
- }
3861
- if(!empty($goodIP)) break;
3862
- }
3863
- }
3864
- return $goodIP;
3865
  } //end function wValidIP
3866
 
3867
  /**
3868
  * Add Wassup meta tag and javascripts to html document head
3869
- * -add screen resolution javascript for non-IE browsers
3870
  */
3871
  function wassup_head() {
3872
  global $wassup_options, $wscreen_res;
@@ -3887,19 +3778,13 @@ function wassup_head() {
3887
  echo "\n";?>
3888
  <script type="text/javascript">
3889
  //<![CDATA[
3890
- var screen_res=screen.width+" x "+screen.height;
 
3891
  if(screen_res==" x ") screen_res=window.screen.width+" x "+window.screen.height;
3892
  if(screen_res==" x ") screen_res=screen.availWidth+" x "+screen.availHeight;
3893
- if(screen_res!=" x "){<?php
3894
- if(defined('COOKIE_DOMAIN')){
3895
- $cookiedomain=COOKIE_DOMAIN;
3896
- if(defined('COOKIEPATH'))$cookiepath=COOKIEPATH;
3897
- else $cookiepath="/";
3898
- }else{
3899
- $curl=parse_url(get_option('home'));
3900
- $cookiedomain=preg_replace('/^www\./','',$curl['host']);
3901
- $cookiepath=$curl['path'];
3902
- }?>document.cookie = "wassup_screen_res<?php echo $sessionhash;?>=" + encodeURIComponent(screen_res)+ "; path=<?php echo $cookiepath.'; domain='.$cookiedomain;?>";}
3903
  //]]>
3904
  </script><?php
3905
  }
@@ -3907,24 +3792,19 @@ function wassup_head() {
3907
 
3908
  /**
3909
  * Output Wassup tag and javascripts in html document footer.
3910
- * -add screen resolution javascript for IE users
3911
  * -put a timestamp in page footer as page caching test
3912
  * -output any stored debug data
3913
  */
3914
  function wassup_foot() {
3915
  global $wassup_options, $wscreen_res, $wdebug_mode;
3916
- //add separate 'wassup_screen_res' cookie in footer for IE and Edge users because Microsoft browsers do not report screen height or width until after document body starts rendering. @since v1.8.2
3917
  $sessionhash=$wassup_options->whash;
3918
  if(empty($wscreen_res) && !isset($_COOKIE['wassup_screen_res'.$sessionhash])){
3919
  $ua=(!empty($_SERVER['HTTP_USER_AGENT'])?$_SERVER['HTTP_USER_AGENT']:"");
3920
  if(strpos($ua,'MSIE')>0 || strpos($ua,'rv:11')>0 || strpos($ua,'Edge/')>0 || stristr($_SERVER['REQUEST_URI'],'login.php')!==false){
3921
  echo "\n";?>
3922
- <script language=javascript>
3923
- //<![CDATA[
3924
- var screen_res = screen.width + " x " + screen.height;
3925
- if (screen_res!=" x "){document.cookie = "wassup_screen_res<?php echo $sessionhash;?>=" + encodeURIComponent(screen_res)+ "; path=/; domain=" + document.domain;}
3926
- //]]>
3927
- </script>
3928
  <?php
3929
  } //end if MSIE
3930
  } //end if 'wscreen_res'
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.4
7
  Author: Michele Marcucci, Helene Duncker
8
  Author URI: http://www.michelem.org/
9
  Text Domain: wassup
49
  */
50
  function wassup_init($init_settings=false){
51
  global $wp_version,$wassup_options,$wdebug_mode;
52
+
53
  //define wassup globals & constants
54
  if(!defined('WASSUPVERSION')){
55
+ define('WASSUPVERSION','1.9.4');
56
  define('WASSUPDIR',dirname(preg_replace('/\\\\/','/',__FILE__)));
57
  }
58
  //turn on debugging (global)...Use cautiously! Will display errors from all plugins, not just WassUp
59
  $wdebug_mode=false;
60
  if(defined('WP_DEBUG') && WP_DEBUG==true) $wdebug_mode=true;
61
  if($wdebug_mode){
62
+ $active_plugins=maybe_serialize(get_option('active_plugins'));
63
  //turn off debug mode if this is ajax action request @since v1.9.2
64
  if((!empty($_REQUEST['action']) && isset($_REQUEST['wajax'])) || (defined('DOING_AJAX') && DOING_AJAX)){
65
  $wdebug_mode=false;
66
  @wassup_disable_errors();
67
+ }elseif(isset($_REQUEST['wc-ajax']) && preg_match('#/woocommerce\.php#',$active_plugins)>0){ //woocommerce ajax
68
+ $wdebug_mode=false;
69
+ @wassup_disable_errors();
70
  }else{
71
+ wassup_enable_errors();
72
  if(headers_sent()){
73
  //an error was likely displayed to screen
74
  echo "\n".'<!-- wassup_init start -->';
75
  }
 
76
  }
77
  }
78
  //load language translation
83
  if(@is_readable($moFile)){
84
  load_textdomain('wassup',$moFile);
85
  }elseif(strlen($current_locale)<6){
86
+ //try load translation file with language code x2 as locale @since v1.9.3
87
  $lang_only=substr($current_locale,0,2).'_'.strtoupper(substr($current_locale,0,2));
88
  if($lang_only != $current_locale && preg_match('/^[a-z]{2}_[A-Z]{2}$/',$lang_only)>0){
89
  $moFile=WASSUPDIR."/language/".$lang_only."mo";
98
  $is_compatible=true;
99
  if(version_compare($wp_version,'4.5','<') || version_compare($php_vers,'5.2','<')){
100
  include_once(WASSUPDIR.'/lib/compatibility.php');
101
+ $is_compatible=wassup_check_compatibility();
102
  }
103
  if($is_compatible){
104
  if(!class_exists('wassupOptions')) require_once(WASSUPDIR.'/lib/wassup.class.php');
294
  }
295
  $wassup_options->wassup_active=$active_status;
296
  $wassup_options->saveSettings();
297
+
298
  //schedule regular cleanup of temp recs @since v1.9
299
  if(!empty($active_status)) wassup_cron_startup();
300
  }else{
418
  delete_usermeta($current_user->ID,$wpdb->prefix.'_wassup_settings');
419
  }
420
  } //end foreach
421
+ //lastly, delete network settings & users' settings
422
  if($network_wide){
423
  restore_current_blog();
424
  delete_site_option('wassup_network_settings');
467
  * Perform plugin tasks for before http headers are sent.
468
  * -block obvious xss and sql injection attempts on Wassup itself
469
  * -initialize new network subsite settings (via 'wassup_init'), if any
470
+ * -setup maintenance tasks for wp-ajax/wp_cron/wp_login hook actions
471
  * -start wassup tracking
472
  */
473
  function wassup_preload(){
475
  //block any obvious sql injection attempts involving WassUp
476
  $request_uri=$_SERVER['REQUEST_URI'];
477
  if(!$request_uri) $request_uri=$_SERVER['SCRIPT_NAME']; // IIS
 
478
  if(stristr($request_uri,'wassup')!==false && strstr($request_uri,'err=wassup403')===false){
479
  $error_msg="";
480
+ //don't test logged-in user requests
481
  if(!is_user_logged_in()){
482
  if(preg_match('/(<|&lt;?|&#0*60;?|%3C)scr(ipt|[^0-9a-z\-_])/i',$request_uri)>0){
483
  $error_msg=__('Bad request!','wassup');
529
  if(function_exists('wassup_compat_preload')){
530
  wassup_compat_preload();
531
  }
532
+ //Start maintenance tasks & visitor tracking
533
  if(!empty($wassup_options) && $wassup_options->is_recording_active()){
534
  //add actions for wp-cron scheduled tasks - @since v1.9
535
  if(!has_action('wassup_scheduled_dbtasks')) add_action('wassup_scheduled_dbtasks',array('wassupDb','scheduled_dbtask'),10,1);
541
  if(!empty($wassup_options->delete_auto) && $wassup_options->delete_auto !="never"){
542
  if(!has_action('wassup_scheduled_purge')) add_action('wassup_scheduled_purge','wassup_auto_cleanup');
543
  }
544
+
545
+ //track visitors
546
  wassupPrepend();
547
  }
548
  if($wdebug_mode && headers_sent()){
638
  }elseif($wassuppage == "wassup-options"){
639
  //use Wordpress' jquery-ui.js only when current
640
  if(version_compare($wp_version,'4.5','>=') || !function_exists('wassup_compat_add_scripts')){
 
 
641
  wp_enqueue_script('jquery-ui-dialog');
642
+ wp_enqueue_script('jquery-ui-tabs');
643
  }
644
  //never use Wordpress' jquery-ui.css
645
  wp_dequeue_style('jquery-ui-tabs.css');
646
  wp_dequeue_style('jquery-ui-theme.css');
647
+ wp_dequeue_style('jquery-ui-dialog.css');
648
+ wp_dequeue_style('jquery-ui-core.css');
649
  wp_dequeue_style('jquery-ui.css');
650
  }
651
  //use Wassup's custom copy of thickbox.js always
675
  global $wpdb, $current_user, $wassup_options, $wdebug_mode;
676
 
677
  //#1st verify that export request is valid
678
+ if(!isset($_REQUEST['export'])) return;
679
  $exportdata=false;
680
  $badrequest=false;
681
  $err_msg="";
698
  if(empty($current_user->ID)){
699
  wp_die($err_msg);
700
  }else{
701
+ wassup_log_message($err_msg);
 
702
  wp_safe_redirect(wassupURI::get_admin_url('admin.php?page=wassup-options&tab=3'));
703
  }
704
  exit;
706
  $err_msg="";
707
  $wassup_table=$wassup_options->wassup_table;
708
  $wherecondition="";
709
+ //omit spam records from export @since v1.9.1
710
+ if(empty($wassup_options->export_spam)){
711
+ $wherecondition =" AND `spam`='0'";
712
+ }
713
  //for multisite compatibility
 
714
  if($wassup_options->network_activated_plugin()){
715
+ if(!is_network_admin() && !empty($GLOBALS['current_blog']->blog_id)) $wherecondition .= sprintf(" AND `subsite_id`=%d",(int)$GLOBALS['current_blog']->blog_id);
716
  }
717
+ //sorted by record id field
718
+ $wherecondition .= ' ORDER BY `id`';
719
+ $start_id=0;
720
  if(isset($_REQUEST['startid']) && is_numeric($_REQUEST['startid'])){
721
+ $start_id=(int)$_REQUEST['startid'];
 
 
 
 
 
 
 
 
 
 
722
  }
723
  //# check for records before exporting...
 
724
  $numrecords=0;
725
  $exportdata=false;
726
+ $numrecords=$wpdb->get_var(sprintf("SELECT COUNT(`wassup_id`) FROM `%s` WHERE `id` > %d %s",esc_attr($wassup_table),$start_id,$wherecondition));
727
  if(!is_numeric($numrecords)) $numrecords=0;
728
  if($numrecords > 0){
729
+ //too big for export, abort @TODO
730
+ if($numrecords > 9999999){
731
+ $err_msg=__("Too much data for Wassup export! Use a separate MySQL Db tool instead.","wassup");
732
+ }else{
733
  //Could take a long time, so increase script execution time-limit to 11 min
734
+ $stimeout=ini_get('max_execution_time');
735
+ if(is_numeric($stimeout) && $stimeout>0 && $stimeout < 660){
736
+ $disabled_funcs=ini_get('disable_functions');
737
+ if((empty($disabled_funcs) || strpos($disabled_funcs,'set_time_limit')===false) && !ini_get('safe_mode')){
738
+ $stimeout=11*60;
739
+ @set_time_limit($stimeout);
740
+ }
741
+ }
742
+ //do the export
743
+ if($_REQUEST['export']=="csv"){
744
+ wassupDb::export_records($wassup_table,$start_id,"$wherecondition","csv");
745
+ }else{
746
+ wassupDb::export_records($wassup_table,$start_id,"$wherecondition","sql");
747
  }
748
  }
 
 
749
  }else{
750
  //failed export message
751
+ $err_msg=__("ERROR: Nothing to Export.","wassup");
 
752
  } //end if numrecords > 0
753
+ //if get here, something went wrong with export
754
+ if(!empty($err_msg)){
755
+ wassup_log_message($err_msg);
756
+ }
757
+ //reload screen to show error message
758
+ $reload_uri=remove_query_arg(array('export','whash','type','_wpnonce'));
759
+ wp_safe_redirect($reload_uri);
760
+ exit;
761
+ } //end export_wassup
762
 
763
+ /** Save summary message from export or other action in either wassup_meta or user_metadata @since v1.9.4 */
764
+ function wassup_log_message($msg,$msgtype="",$msgkey="0"){
765
+ global $current_user;
766
+ //msgtype,msgkey parameters for wassup_meta msg
767
+ if(!empty($msgtype)){
768
+ $expire=time()+86401; //24-hour expire
769
+ if(empty($msgkey) && !empty($_REQUEST['mid'])){
770
+ $msgkey=$_REQUEST['mid'];
771
+ }
772
+ $saved=wassupDb::update_wassupmeta($msgkey,$msgtype,$msg,$expire);
773
  }else{
774
+ if(!is_object($current_user) || empty($current_user->ID)){
775
+ $user=wp_get_current_user();
776
+ }
777
+ $wassup_user_settings=get_user_option('_wassup_settings',$current_user->ID);
778
+ $wassup_user_settings['ualert_message']=$msg;
779
+ update_user_option($current_user->ID,'_wassup_settings',$wassup_user_settings);
780
  }
781
+ }
 
782
  /** Turns off all error notices except fatal errors. */
783
  function wassup_disable_errors(){
784
  ini_set('error_reporting',E_ERROR);
818
  if(empty($wassup_options) || !$wassup_options->is_recording_active()){ //do nothing
819
  return;
820
  }
821
+ //New in v1.9.4: don't track ajax requests from some plugins
822
+ $active_plugins=maybe_serialize(get_option('active_plugins'));
823
+ //don't track Woocommerce ajax requests
824
+ if(isset($_REQUEST['wc-ajax']) && preg_match('#/woocommerce\.php#',$active_plugins)>0){
825
+ return;
826
+ }
827
  $wassup_table=$wassup_options->wassup_table;
828
  $wassup_tmp_table=$wassup_table."_tmp";
829
  $wscreen_res="";
830
  //session tracking with cookie
831
+ $session_timeout=false;
832
  $wassup_timer=0;
833
  $wassup_id="";
834
  $subsite_id=(!empty($GLOBALS['current_blog']->blog_id)?$GLOBALS['current_blog']->blog_id:0);
849
  //username in wassup cookie @since v1.8.3
850
  if(!empty($cookie_data[5])) $cookieUser=$cookie_data[5];
851
  if($wassup_timer <= 0 || $wassup_timer > 86400){
852
+ $session_timeout=true;
853
  }
854
  //don't reuse wassup_id when subsite changed
855
  if(is_multisite()){
916
  //Exclude for logged-in user in admin area (unless session_timeout is set)
917
  if(!is_admin() || empty($logged_user) || $session_timeout || $req_code !=200 || empty($wassup_id)){
918
  //use 'send_headers' hook for feed, media, and files except when request is wp-admin which doesn't run this hook
919
+ if(is_feed() || preg_match('#[=/\?&](feed|atom)#',$urlRequested)>0){
920
  if(is_feed() && !headers_sent()){
921
  add_action('send_headers','wassupAppend');
922
  }else{
923
  wassupAppend($req_code);
924
  }
925
+ }elseif(preg_match('/(\.(3gp|7z|f4[pv]|mp[34])(?:[\?#]|$))/i',$urlRequested)>0){
926
  //this is audio, video, or archive file request
927
  if(!is_admin() && !headers_sent()){
928
  add_action('send_headers','wassupAppend');
929
  }else{
930
  wassupAppend($req_code);
931
  }
932
+ }elseif(preg_match('/([^\?#&]+\.([a-z]{1,4}))(?:[\?#]|$)/i',$urlRequested)>0 && basename($urlRequested)!="robots.txt"){
933
  //this is multimedia or specific file request
934
  if(!is_admin() && !headers_sent()){
935
  add_action('send_headers','wassupAppend');
992
  //identify media requests
993
  $is_media=false;
994
  $fileRequested="";
995
+ 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))|(?:[0-9a-z.\-\/_]+(?:zoom(?:in|out)\.cur)))(?:[\?\#&]|$)#i',$_SERVER['REQUEST_URI'],$pcs)>0){
996
  $is_media=true;
997
  if(ini_get('allow_url_fopen')) $fileRequested=$blogurl.$pcs[1];
998
  }
1147
  if(!empty($cookie_data[5])) $cookieUser = $cookie_data[5];
1148
  }
1149
  }
 
1150
  //Get visitor ip/hostname from http_header
1151
  if(!empty($cookieIP)){
1152
  $ipAddress = $_SERVER['REMOTE_ADDR'];
1262
  if($req_code==200 && !empty($fileRequested) && !file_exists($fileRequested)){
1263
  $req_code=404;
1264
  }
1265
+ }elseif(preg_match('#(^/[0-9a-z\-/\._]+\.([a-z]{1,4}))(?:[\?&\#]|$)#i',$urlRequested,$pcs)>0 && basename($urlRequested)!="robots.txt"){
1266
  //identify file requests
1267
  if(ini_get('allow_url_fopen')) $fileRequested=$blogurl.$pcs[1];
1268
  }
1305
  //#4 Exclude users on exclusion list
1306
  if (empty($wassup_options->wassup_exclude_user) || empty($logged_user) || preg_match('/(?:^|\s*,)\s*('.preg_quote($logged_user).')\s*(?:,|$)/',$wassup_options->wassup_exclude_user)==0){
1307
  //'preg_match' replaces 'explode' for faster matching of users, url requests, and ip addresses @since v1.9
1308
+ //@TODO: exclude page requests by post_id
1309
  //#5 Exclude urls on exclusion list
1310
  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){
1311
  //url matching may be affected by html-encoding, url-encoding, query parameters, and labels on the url - so do those exclusions separately
1407
  if($recent_hit[0]->agent == $userAgent || empty($recent_hit[0]->agent)){
1408
  if($recent_hit[0]->urlrequested == $urlRequested || $recent_hit[0]->urlrequested == '[404] '.$urlRequested){
1409
  $dup_urlrequest=1;
1410
+ }elseif($is_media && $req_code == 200 && preg_match('/\.(gif|ico|jpe?g|png|tiff)$/i',$fileRequested) >0){
1411
  //exclude images/photos only after confirmation of other valid page hit by visitor
1412
  $dup_urlrequest=1;
1413
  }
1468
  }
1469
  }
1470
  //#14 Exclude 404 hits unless 1st visit or malware attempt
1471
+ 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))){ //v1.9.3.1 bugfix: parenthesis correction
1472
+ //omit 'admin-ajax.php' and 'wp-login.php' from malware checks @since v1.9.3
1473
  if($hackercheck && $spam==0 && $urlRequested !='/wp-login.php' && $urlRequested !='/wp-admin/admin-ajax.php'){
1474
  $pcs=array();
1475
  //identify malware
1558
  }
1559
  }
1560
  //regular visitor attempts to access "upload" page is likely malware
1561
+ }elseif(preg_match('#[\?&][0-9a-z\-_]*(page\=upload)(?:[^0-9a-z\-_]|$)#i',$urlRequested)>0){
1562
  $spam=3;
1563
  }elseif($req_code==404 && wIsAttack($urlRequested)){
1564
  $spam=3;
 
1565
  }
1566
  } //end if empty logged_user
1567
  //retroactively update recent visitor records as spam/malware
1593
  }
1594
  }
1595
  //# Some spiders, such as Yahoo and MSN, don't always give a unique useragent, so test against known hostnames/IP to identify these spiders
1596
+ $spider_hosts='/^((65\.55|207\.46)\.\d{3}.\d{1,3}|.*\.(crawl|yse)\.yahoo\.net|ycar\d+\.mobile\.[a-z0-9]{3}\.yahoo\.com|msnbot.*\.search\.msn\.com|crawl[0-9\-]+\.googlebot\.com|baiduspider[0-9\-]+\.crawl\.baidu\.com|\.domaintools\.com|(crawl(?:er)?|spider|robot)\-?\d*\..*)$/';
1597
  //#Identify spiders from known spider domains
1598
  if(empty($agent) || preg_match($spider_hosts,$hostname)>0 || stristr($agent,'unknown')!==false){
1599
  list($spider,$spidertype,$feed) = wGetSpider($userAgent,$hostname,$browser);
1625
  //no userAgent == spider
1626
  $spider=$unknown_spider;
1627
  }else{
1628
+ 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()){
1629
  list($spider,$spidertype,$feed) = wGetSpider($userAgent,$hostname,$browser);
1630
  if($wdebug_mode){
1631
  if(is_admin() || headers_sent()){
1698
  } //end if empty($spider)
1699
  //identify spoofers of Google/Yahoo
1700
  if(!empty($spider)){
1701
+ if(!empty($hostname) && preg_match('/^(googlebot|yahoo\!\sslurp)/i',$spider)>0 && preg_match('/\.(googlebot|yahoo)\./i',$hostname)==0){
1702
  $spider= __("Spoofer bot","wassup");
 
1703
  }
1704
  //for late spider identification, update previous records
1705
  if($wpageviews >1 && empty($recent_hit[0]->spider)){
1717
  //## Check for referrer spam...
1718
  if($wassup_options->wassup_spamcheck == 1 && $spam == 0 && !$goodbot){
1719
  $spamComment = New wassup_checkComment;
1720
+ //skip referrer check if from own blog
1721
+ if($wassup_options->wassup_refspam == 1 && !empty($referrer) && !$is_admin_login && stristr($referrer,$wpurl)!=$referrer && stristr($referrer,$blogurl)!=$referrer && $referrer!=$blogurl.$urlRequested){
1722
+ $refdomain=wassupURI::get_urldomain($referrer);
1723
+ $sitedomain=wassupURI::get_urldomain();
1724
+ //New in v1.9.4: skip referrer check if from own domain
1725
+ if($refdomain != $sitedomain || strpos($referrer,'=')!==false){
1726
+ //New in v1.9.4: skip referrer check if on whitelist
1727
+ if(empty($wassup_options->refspam_whitelist) || preg_match('#(?:^|\s*,)\s*('.preg_quote($refdomain).')\s*(?:,|$)#',$wassup_options->refspam_whitelist)==0){
1728
+ //check if referrer is a previous comment spammer
1729
+ if($spamComment->isRefSpam($referrer)>0){
1730
+ $spam=2;
1731
+ }else{
1732
+ //check for known referer spammer
1733
+ $isspam=wGetSpamRef($referrer,$hostname);
1734
+ if ($isspam) $spam = 2;
1735
  }
1736
+ } //end if refspam_whitelist
1737
+ } //end if refdomain
1738
+ } //end if wassup_refspam
1739
  //## Check for comment spammer...
1740
  // No spam check on spiders unless there is a comment or forum page request...
1741
  if ($spam == 0 && (empty($spider) || stristr($urlRequested,"comment")!== FALSE || stristr($urlRequested,"forum")!== FALSE || !empty($comment_user))) {
1742
  //check for previous spammer detected by anti-spam plugin
1743
+ $spammerIP = $spamComment->isSpammer($IP);
1744
  if($spammerIP > 0) $spam=1;
1745
  //set as spam if both URL and referrer are "comment" and browser is obsolete or Opera
1746
  if ($spam== 0 && $wassup_options->wassup_spam==1 && stristr($urlRequested,"comment")!== FALSE && stristr($referrer,"#comment")!==FALSE && (stristr($browser,"opera")!==FALSE || preg_match('/^(AOL|Netscape|IE)\s[1-6]$/',$browser)>0)) {
1784
  //get language/locale
1785
  if(empty($language) && !empty($recent_hit[0]->language)) $language=$recent_hit[0]->language;
1786
  if($wdebug_mode){
1787
+ if(headers_sent()) echo "\n language=$language";
1788
+ else $debug_output .= "\n language=$language";
 
 
 
 
 
 
 
 
1789
  }
1790
  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){
1791
  //get language/locale info from hostname or referrer data
1792
  $language=wGetLocale($language,$hostname,$referrer);
1793
  }
1794
  if($wdebug_mode){
1795
+ if(headers_sent()) echo "\n...language=$language (after geoip/wgetlocale)";
1796
+ else $debug_output .= " ...language=$language (after geoip/wgetlocale)";
 
 
 
 
 
 
 
 
1797
  }
1798
  // get search engine and search keywords from referrer
1799
  $searchengine="";
1873
  $searchcountry=$match[3];
1874
  }
1875
  if(!empty($searchcountry) && $searchcountry!="us"){
1876
+ //v1.9.3.1 bugfix: avoid duplicate country code in searchengine name
1877
+ if(stristr($searchengine," $searchcountry")===false) $searchengine .=" ".strtoupper($searchcountry);
1878
  if($language == "us" || empty($language) || $language=="en"){
1879
  //make tld consistent with language
1880
  if($searchcountry=="uk") $searchcountry="gb";
1952
  }
1953
  }
1954
  if($wdebug_mode){
1955
+ if(headers_sent()){
 
 
 
 
 
1956
  if(!empty($wassup_recid)){
1957
  echo "\nWassUp record data:";
1958
  print_r($wassup_rec);
1972
  }
1973
  } //end if prefetch
1974
  }elseif($wdebug_mode){
1975
+ if(headers_sent()) echo "\n #18 Excluded by: wp-content/plugins (after 404)";
1976
  else $debug_output .="\n #18 Excluded by: wp-content/plugins (after 404)";
1977
  } //end if !wp-content/plugins
1978
  }elseif($wdebug_mode){
1979
+ if(headers_sent()) echo "\n #17 Excluded by: wassup_spam";
1980
  else $debug_output .="\n #17 Excluded by: wassup_spam";
1981
  } //end if $spam == 0
1982
  }elseif($wdebug_mode){
1983
+ if(headers_sent()) echo "\n #16 Excluded by: wassup_spider";
1984
  else $debug_output .="\n #16 Excluded by: wassup_spider";
1985
  } //end if wassup_spider
1986
  }elseif($wdebug_mode){
1987
+ if(headers_sent()) echo "\n #15 Excluded by: wassup_hack";
1988
  else $debug_output .="\n #15 Excluded by: wassup_hack";
1989
  } //end if wassup_hack
1990
  }elseif($wdebug_mode){
1991
+ if(headers_sent()) echo "\n #14 Excluded by: is_404";
1992
  else $debug_output .="\n #14 Excluded by: is_404";
1993
  } //end if !is_404
1994
  }elseif($wdebug_mode){
1995
+ if(headers_sent()) echo "\n #13 Excluded by: !wp-admin (ajax)";
1996
  else $debug_output .="\n #13 Excluded by: !wp_admin (ajax)";
1997
  } //end if !wp_admin (ajax) && recent_hit
1998
  }elseif($wdebug_mode){
1999
+ if(headers_sent()) echo "\n #12 Excluded by: dup_urlrequest";
2000
  else $debug_output .="\n #12 Excluded by: dup_urlrequest";
2001
  } //end if dup_urlrequest == 0
2002
  }elseif($wdebug_mode){
2003
+ if(headers_sent()) echo "\n #11 Excluded by: wassup_attack";
2004
  else $debug_output .="\n #11 Excluded by: wassup_attack";
2005
  } //end if wassup_attack
2006
  }elseif($wdebug_mode){
2007
+ if(headers_sent()) echo "\n #10 Excluded by: wassup_loggedin";
2008
  else $debug_output .="\n #10 Excluded by: wassup_loggedin";
2009
  } //end if wassup_loggedin
2010
  }elseif($wdebug_mode){
2011
+ if(headers_sent()) echo "\n #9 Excluded by: wp-content/themes";
2012
  else $debug_output .="\n #9 Excluded by: wp-content/themes";
2013
  } //end if !themes
2014
  }elseif($wdebug_mode){
2015
+ if(headers_sent()) echo "\n #8 Excluded by: wp-content/plugins (or hostname wildcard)";
2016
  else $debug_output .="\n #8 Excluded by: wp-content/plugins (or hostname wildcard)";
2017
  } //end if !plugins
2018
  }elseif($wdebug_mode){
2019
+ if(headers_sent()) echo "\n #7 Excluded by: exclude_host (or IP wilcard)";
2020
  else $debug_output .="\n #7 Excluded by: exclude_host (or IP wildcard)";
2021
  } //end if wassup_exclude_host
2022
  }elseif($wdebug_mode){
2023
+ if(headers_sent()) echo "\n #6 Excluded by: wassup_exclude";
2024
  else $debug_output .="\n #6 Excluded by: wassup_exclude";
2025
  } //end if wassup_exclude
2026
  }elseif($wdebug_mode){
2027
+ if(headers_sent()) echo "\n #5 Excluded by: exclude_url";
2028
  else $debug_output .="\n #5 Excluded by: exclude_url";
2029
  } //end if wassup_exclude_url
2030
  }elseif($wdebug_mode){
2031
+ if(headers_sent()) echo "\n #4 Excluded by: exclude_user";
2032
  else $debug_output .="\n #4 Excluded by: exclude_user";
2033
  } //end if wassup_exclude_user
2034
  }elseif($wdebug_mode){
2035
+ if(headers_sent()) echo "\n #3 Excluded by: is_admin";
2036
  else $debug_output .="\n #3 Excluded by: is_admin";
2037
  } //end if !is_admin
2038
  } //end if wp-cron.php?doing_wp_cron===FALSE //#2
2039
  }elseif($wdebug_mode){
2040
+ if(headers_sent()) echo "\n #1 Excluded by: is_admin_login";
2041
  else $debug_output .="\n #1 Excluded by: is_admin_login";
2042
  } //end if !is_admin_login
2043
 
2053
  }
2054
  if(is_numeric($result)) $in_temp=(int)$result;
2055
  if($wdebug_mode){
2056
+ if(headers_sent()) echo "\nin_temp=".$result;
2057
  else $debug_output .="\nin_temp=".$result;
2058
  }
2059
  //add new temp record
2167
  wp_schedule_single_event(time()+40,'wassup_scheduled_dbtasks',$args);
2168
  }
2169
  if($wdebug_mode){
2170
+ if(headers_sent()){
2171
  echo "\nWassup scheduled tasks:";
2172
  print_r($wassup_dbtask);
2173
  }
2174
  }
2175
  }
2176
  if($wdebug_mode){ //close comment tag to hide debug data from visitors
2177
+ if(headers_sent()){
2178
  echo "\n--> \n";
2179
  }else{
2180
  $debug_output .= "<br />\n--> \n";
2181
+ //add debug output to wp_footer output - @TODO
2182
  $expire=time()+180;
2183
  $wassup_key=wassup_clientIP($_SERVER['REMOTE_ADDR']);
2184
  wassupDb::update_wassupmeta($wassup_key,'_debug_output',$expire,$debug_output);
2359
  return false;
2360
  }
2361
  //Check against Google, Yahoo, MSN, Ask and others
2362
+ if(preg_match('#^https?://([^/]+).*[&\?](prev|q|p|s|search|searchfor|as_q|as_epq|query|keywords|term|encquery)=([^&]+)#i',$SeReferer,$pcs) > 0){
2363
  $SeDomain = trim(strtolower($pcs[1]));
2364
  if ($pcs[2] == "encquery") {
2365
  $SeQuery = " *".__("encrypted search","wassup")."* ";
2368
  }
2369
 
2370
  //Check for search engines that show query as a url with 'search' and keywords in path (ex: Dogpile.com)
2371
+ }elseif(preg_match('#^https?://([^/]+).*/(results|search)/web/([^/]+)/(\d+)?#i',$SeReferer,$pcs)>0){
2372
  $SeDomain = trim(strtolower($pcs[1]));
2373
  $SeQuery = $pcs[3];
2374
  if (!empty($pcs[4])) {
2375
  $SePos=(int)$pcs[4];
2376
  }
2377
  //Check for search engines that show query as a url with 'search' in domain and keywords in path (ex: twitnitsearch.appspot.com)
2378
+ }elseif(preg_match('#^https?://([a-z0-9_\-\.]*(search)(?:[a-z0-9_\-\.]*\.(?:[a-z]{2,4})))/([^/]+)(?:[a-z_\-=/]+)?/(\d+)?#i',$SeReferer."/",$pcs)>0){
2379
  $SeDomain = trim(strtolower($pcs[1]));
2380
  $SeQuery = $pcs[3];
2381
  if (!empty($pcs[4])) {
2395
  }
2396
  }
2397
  if (!isset($SePos)) {
2398
+ if(preg_match('#[&\?](start|startpage|b|cd|first|stq|pi|page)[=/](\d+)#i',$SeReferer,$pcs)) {
2399
  $SePos = $pcs[2];
2400
  } else {
2401
  $SePos = 1;
2803
  //search engine or key is not in list, so check for search phrase instead
2804
  if (empty($search_phrase) && !empty($referrer)) {
2805
  //Check for general search phrases
2806
+ if(preg_match('#^https?://([^/]+).*[&?](q|search|searchfor|as_q|as_epq|query|keywords?|term|text|encquery)=([^&]+)#i',$referrer,$pcs) > 0){
2807
  if (empty($searchengine)) $searchengine=trim(strtolower($pcs[1]));
2808
  if ($pcs[2] =="encquery"){
2809
  $search_phrase=" *".__("encrypted search","wassup")."* ";
2811
  $search_phrase = $pcs[3];
2812
  }
2813
  //Check separately for queries that use nonstandard search variable to avoid retrieving values like "p=parameter" when "q=query" exists
2814
+ }elseif(preg_match('#^https?://([^/]+).*(?:results|search|query).*[&?](aq|as|p|su|s|kw|k|qo|qp|qs|string)=([^&]+)#i',$referrer,$pcs) > 0){
2815
  if (empty($searchengine)) $searchengine = trim(strtolower($pcs[1]));
2816
  $search_phrase = $pcs[3];
2817
  }
2818
  } //end if search_phrase
2819
  //do a separate check for page number, if not found above
2820
  if (!empty($search_phrase)) {
2821
+ if(empty($searchpage) && preg_match('#[&\?](start|startpage|b|cd|first|stq|p|pi|page)[=/](\d+)#i',$referrer,$pcs)>0){
2822
  $searchpage = $pcs[2];
2823
  }
2824
  }
2918
  $pcs=array();
2919
  //identify obvious script injection bots
2920
  if(!empty($ua)){
2921
+ //New in v1.9.3.1: check for more variations of <script> and <a> tags embedded in user agent string
2922
  if(stristr($ua,'location.href')!==FALSE){
2923
  $crawlertype="H";
2924
  $crawler="Script Injection bot";
2925
+ }elseif(preg_match('/(<|&lt;?|&#0*60;?|%3C)a(\s|%20|&#32;|\+)href/i',$ua)>0){
2926
  $crawlertype="H";
2927
  $crawler="Script Injection bot";
2928
+ }elseif(preg_match('/(<|&lt;?|&#0*60;?|%3C)scr(ipt|[^0-9a-z\-_])/i',$ua)>0){
2929
  $crawlertype="H";
2930
  $crawler="Script Injection bot";
2931
  }elseif(preg_match('/select.*(\s|%20|\+|%#32;)from(\s|%20|\+|%#32;)wp_/i',$ua)>0){
2962
  $crawler="Baiduspider";
2963
  $crawlertype="R";
2964
 
2965
+ }elseif(substr($hostname,-16)==".domaintools.com"){
2966
+ $crawler="Whois.domaintools.com";
2967
+ $crawlertype="R";
2968
  }
2969
  } //end if $hostname
2970
  $pcs=array();
2971
  $pcs2=array();
2972
  if(empty($crawler)){
2973
  // check for crawlers that identify themselves clearly in their user agent string with words like bot, spider, and crawler
2974
+ if ((!empty($ua) && preg_match('#(\w+[ \-_]?(bot|crawl|google|reader|seeker|spider|feed|indexer|parser))[0-9/ -:_.;\)]#',$ua,$pcs) >0) || preg_match('#(crawl|feed|google|indexer|parser|reader|robot|seeker|spider)#',$hostname,$pcs2) >0){
2975
  if(!empty($pcs[1])) $crawler=$pcs[1];
2976
  elseif(!empty($pcs2[1])) $crawler="unknown_spider";
2977
  $crawlertype="R";
3001
  }
3002
  }
3003
  //get crawler info. from a known list of bots and feedreaders that don't list their names first in UA string.
3004
+ //Note: spaces removed from UA string for this bot comparison
3005
  $crawler=trim($crawler);
3006
  if(empty($crawler) || $crawler=="unknown_spider"){
3007
  $uagent=str_replace(" ","",$ua);
3313
  if(empty($crawler)){
3314
  $pcs=array();
3315
  //Assume first word in useragent is crawler name
3316
+ if(preg_match('/^(\w+)[\/ \-\:_\.;]/',$ua,$pcs) > 0){
3317
  if(strlen($pcs[1])>1 && $pcs[1]!="Mozilla"){
3318
  $crawler=$pcs[1];
3319
  }
3322
  //if (empty($crawler) && !empty($browser)) $crawler = $browser;
3323
  }
3324
  //#do a feed check and get feed subcribers, if available
3325
+ if(preg_match('/([0-9]{1,10})\s?subscriber/i',$ua,$subscriber) > 0){
3326
  // It's a feedreader with some subscribers
3327
  $feed=$subscriber[1];
3328
  if(empty($crawler) && empty($browser)){
3362
  list($language)=explode(";",$langarray[0]);
3363
  }
3364
  //use 2-digit top-level domains (TLD) for country code, if any
3365
+ if (strlen($hostname)>2 && preg_match('/\.[a-z]{2}$/i', $hostname)>0){
3366
  $country=strtolower(substr($hostname,-2));
3367
  //ignore domains commonly used for media
3368
  if($country == "tv" || $country == "fm") $country="";
3417
  }
3418
  //Replace language with locale for widely spoken languages
3419
  if(!empty($country)){
3420
+ if(empty($language) || $language=="us" || preg_match('/^([a-z]{2})$/',$language)==0){
3421
  $language=$country;
3422
  }elseif($language=="es"){
3423
  //for Central/South American locales
3424
  $language=$country;
3425
  }
3426
  }
3427
+ if(!empty($language) && preg_match('/^[a-z]{2}$/',$language)>0){
3428
  $clocale=$language;
3429
  }
3430
  return $clocale;
3431
  } //end function wGetLocale
3432
 
3433
  /**
3434
+ * Check referrer string and referrer host (or hostname) for spam
3435
+ * -checks referrer string for known spammer content (faked referrer).
3436
+ * -checks referer host against know list of spammers
 
3437
  * @param string $referrer, string $hostname
3438
  * @return boolean
3439
  */
3451
  if(isset($rurl['host'])){
3452
  $referrer_host=$rurl['host'];
3453
  $thissite=parse_url(get_option('home'));
3454
+ $thisdomain=wassupURI::get_urldomain();
3455
  //exclude current site as referrer
3456
  if(isset($thissite['host']) && $referrer_host == $thissite['host']){
3457
  $referrer_host="";
3465
  elseif(preg_match('#(\.|/)youtu.be/[0-9a-z]+#i',$ref)>0) $badhost=true;
3466
  //some facebook links in referrer are faked
3467
  elseif(preg_match('#(\.|/)facebook\.com\/ASeaOfSins$#',$ref)>0) $badhost=true;
3468
+ //domain lookup in referrer is faked
3469
+ elseif(preg_match('#/[0-9a-z_\-]+(?:\.php|/)(\?[a-z]+\=(?:http://)?(?:[0-9a-z_\-\.]+)?)'.preg_quote($thisdomain).'(?:[^0-9a-z_\-.]|$)#i',$ref)>0) $badhost=true;
3470
  }
3471
  } else { //faked referrer string
3472
  $badhost=true;
3480
  } //end elseif
3481
  //#Assume any referrer name similar to "viagra/zanax/.." is spam and mark as such...
3482
  if (!$badhost && !empty($referrer_host)) {
3483
+ $lines = array("ambien","ativan","blackjack","bukakke",
3484
+ "casino","cialis","ciallis", "celebrex","cumdripping",
3485
+ "cumeating","cumfilled","cumpussy","cumsucking",
3486
+ "cumswapping","diazepam","diflucan","drippingcum",
3487
+ "eatingcum","enhancement","finasteride","fioricet",
3488
+ "gabapentin","gangbang","highprofitclub","hydrocodone",
3489
+ "krankenversicherung","lamisil","latinonakedgirl",
3490
+ "levitra", "libido", "lipitor","lortab","melatonin",
3491
+ "meridia","NetCaptor","orgy-","phentemine",
3492
+ "phentermine","propecia","proscar","pussycum",
3493
+ "sildenafil","snowballing","suckingcum","swappingcum",
3494
+ "swingers","tadalafil","tigerspice","tramadol",
3495
+ "ultram-","valium","valtrex","viagra","viagara",
3496
+ "vicodin","xanax","xenical","xxx-","zoloft","zovirax",
3497
+ "zanax"
3498
+ );
 
 
3499
  foreach ($lines as $badreferrer) {
3500
+ if (strstr($referrer_host,$badreferrer)!== FALSE){
3501
+ $badhost=true;
3502
+ break 1;
3503
+ }elseif(preg_match('#([^a-z]|^)(free|orgy|penis|porn)([^a-z])#',$referrer)>0){
3504
  $badhost=true;
3505
  break 1;
3506
  }
3518
  } //end wGetSpamRef
3519
 
3520
  /**
3521
+ * Compare a hostname (and referrer host) arguments against a list of known spammers.
3522
  * @param string(2)
3523
  * @return boolean
3524
  * @since v1.9
3532
  $lines = array( '209\.29\.25\.180',
3533
  '78\.185\.148\.185',
3534
  '93\.90\.243\.63',
3535
+ '1\-free\-share\-buttons\.com',
3536
+ 'amazon\-seo\-service\.com',
3537
  'amsterjob\.com',
3538
+ 'anonymizeme\.pro',
3539
  'burger\-imperia\.com',
3540
  'buttons\-for\-website\.com',
3541
  'canadapharm\.atwebpages\.com',
3573
  'gameskillinggames\.net',
3574
  'gardenactivities\.webnode\.com',
3575
  'globalringtones\.net',
3576
+ 'gofirstrow\.eu',
3577
  'gossipchips\.com',
3578
  'gskstudio\.com',
3579
  'hearcam\.org',
3630
  'rufights\.com',
3631
  'scripted\.com',
3632
  'seoindiawizard\.com',
3633
+ 'share\-buttons\-for\-free\.com',
3634
  'singlesvacationspackages\.com',
3635
  'sitetalk\-revolution\.com',
3636
  'smartforexsignal\.com',
3642
  'thebestweddingparty\.com',
3643
  'thik\-chik\.com',
3644
  'thisweekendsmovies\.com',
3645
+ 'top10\-way\.com',
3646
  'uggbootsnewest\.net',
3647
  'uggsmencheap\.com',
3648
  'uggsnewest\.com',
3653
  '[a-z\-\.]+vigra\-buy\.info',
3654
  'vitamin\-d\-deficiency\-symptoms\.com',
3655
  'vpn\-privacy\.org',
3656
+ 'w3data\.co',
3657
  'watchstock\.com',
3658
  'web\-promotion\-services\.net',
3659
  'wh\-tech\.com',
3735
  * @return string
3736
  */
3737
  function wassup_get_clientAddr($ipAddress=""){
3738
+ return wassupIP::get_clientAddr($ipAddress);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3739
  } //end wassup_get_clientAddr
3740
 
3741
  // lookup the hostname from an ip address via cache or via gethostbyaddr command @since v1.9
3742
  function wassup_get_hostname($IP=""){
3743
+ return wassupIP::get_hostname($IP);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3744
  } //end wassup_get_hostname
3745
 
3746
  // Return a single ip (the client IP) from a comma-separated IP address with no ip validation. @since v1.9
3747
  function wassup_clientIP($ipAddress){
3748
+ if(!empty($ipAddress)) return wassupIP::clientIP($ipAddress);
3749
+ return false;
 
 
 
 
 
 
 
 
 
3750
  }
3751
 
3752
  //return 1st valid IP address in a comma-separated list of IP addresses -Helene D. 2009-03-01
3753
  function wValidIP($multiIP) {
3754
+ if(!empty($multiIP)) return wassupIP::validIP($multiIP);
3755
+ return false;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3756
  } //end function wValidIP
3757
 
3758
  /**
3759
  * Add Wassup meta tag and javascripts to html document head
3760
+ * -add javascript function to retrieve screen resolution
3761
  */
3762
  function wassup_head() {
3763
  global $wassup_options, $wscreen_res;
3778
  echo "\n";?>
3779
  <script type="text/javascript">
3780
  //<![CDATA[
3781
+ function wassup_get_screenres(){
3782
+ var screen_res = screen.width + " x " + screen.height;
3783
  if(screen_res==" x ") screen_res=window.screen.width+" x "+window.screen.height;
3784
  if(screen_res==" x ") screen_res=screen.availWidth+" x "+screen.availHeight;
3785
+ if (screen_res!=" x "){document.cookie = "wassup_screen_res<?php echo $sessionhash;?>=" + encodeURIComponent(screen_res)+ "; path=/; domain=" + document.domain;}
3786
+ }
3787
+ wassup_get_screenres();
 
 
 
 
 
 
 
3788
  //]]>
3789
  </script><?php
3790
  }
3792
 
3793
  /**
3794
  * Output Wassup tag and javascripts in html document footer.
3795
+ * -call screen resolution javascript function for IE users
3796
  * -put a timestamp in page footer as page caching test
3797
  * -output any stored debug data
3798
  */
3799
  function wassup_foot() {
3800
  global $wassup_options, $wscreen_res, $wdebug_mode;
3801
+ //'screen_res' javascript function called in footer because Microsoft browsers (IE/Edge) do not report screen height or width until after document body starts rendering. @since v1.8.2
3802
  $sessionhash=$wassup_options->whash;
3803
  if(empty($wscreen_res) && !isset($_COOKIE['wassup_screen_res'.$sessionhash])){
3804
  $ua=(!empty($_SERVER['HTTP_USER_AGENT'])?$_SERVER['HTTP_USER_AGENT']:"");
3805
  if(strpos($ua,'MSIE')>0 || strpos($ua,'rv:11')>0 || strpos($ua,'Edge/')>0 || stristr($_SERVER['REQUEST_URI'],'login.php')!==false){
3806
  echo "\n";?>
3807
+ <script type="text/javascript">wassup_get_screenres();</script>
 
 
 
 
 
3808
  <?php
3809
  } //end if MSIE
3810
  } //end if 'wscreen_res'
widgets/widget_functions.php CHANGED
@@ -257,9 +257,9 @@ function wassup_widget_get_online_counts($instance=array()){
257
  $i++;
258
  $flag='/img/flags/'.$loc->top_item.'.png';
259
  if(is_readable(WASSUPDIR.$flag)){
260
- $html .=' <nobr><img src="'.WASSUPURL.$flag.'" class="icon" alt="'.$loc->top_item.'"/>'.$loc->top_count.'</nobr>';
261
  }else{
262
- $html .=strtoupper($loc->top_item).'-'.$loc->top_count;
263
  }
264
  if($i < $fc) $html .='&nbsp;&middot;&nbsp;';
265
  }
@@ -280,9 +280,9 @@ function wassup_widget_get_topstat($item,$limit,$chars,$from_date,$show_counts=0
280
  global $wpdb,$wassup_options,$wdebug_mode;
281
  $html="";
282
  if($limit >0){
283
- //exclude spiders from widget data (spam already excluded in wGetStats)
284
  $top_results=array();
285
- if(!function_exists('wGetStats')) include_once(WASSUPDIR ."/lib/main.php");
286
  $wpurl=strtolower(rtrim(wassupURI::get_wphome()));
287
  $blogurl=strtolower(rtrim(wassupURI::get_sitehome()));
288
  $top_condition=" `timestamp`>='".$from_date."' AND `spider`=''";
@@ -311,7 +311,7 @@ function wassup_widget_get_topstat($item,$limit,$chars,$from_date,$show_counts=0
311
  }elseif($item == 'locale'){
312
  $scol="language";
313
  }
314
- $top_sql=wGetStats($scol,$limit,$top_condition,"sql");
315
  if(!empty($top_sql)) $top_results=$wpdb->get_results($top_sql);
316
  $ndigits=1;
317
  if(!empty($top_results) && count($top_results)>0){
@@ -320,16 +320,17 @@ function wassup_widget_get_topstat($item,$limit,$chars,$from_date,$show_counts=0
320
  $liclass="";
321
  if(!empty($show_counts)) $liclass=' class="stat-count"';
322
  if($wdebug_mode){
323
- echo "\n\t".'<!-- '.count($top_results).' results from query '.$top_sql.' -->';
 
324
  }
325
  foreach($top_results as $wtop){
326
  $top_count='';
327
  if(!empty($show_counts)){
328
  $top_count=wPadNum($wtop->top_count,$ndigits);
329
  }
330
- $html .='
331
- <li'.$liclass.'>';
332
  if($scol == "language"){
 
 
333
  $flag='/img/flags/'.esc_attr($wtop->top_item).'.png';
334
  if(is_readable(WASSUPDIR.$flag)){
335
  $flagsrc=WASSUPURL.$flag;
@@ -337,33 +338,45 @@ function wassup_widget_get_topstat($item,$limit,$chars,$from_date,$show_counts=0
337
  }else{
338
  $html .='<nobr>'.$top_count.'<span class="top-item">'.wassupURI::disarm_attack($wtop->top_item).'</span></nobr>';
339
  }
 
340
  }elseif($scol == "url_wpid" || $scol == "search"){
 
 
341
  if(!empty($wtop->top_link)){
342
  $html .=$top_count.'<span class="top-item"><a href="'.wassupURI::cleanURL($wtop->top_link).'" title="'.wassupURI::disarm_attack($wtop->top_item).'">'.wassupURI::disarm_attack($wtop->top_item).'</a></span>';
343
  }else{
344
  $html .=$top_count.'<span class="top-item">'.wassupURI::disarm_attack($wtop->top_item).'</span>';
345
  }
 
346
  }elseif($scol == "urlrequested"){
347
  //don't show possible spam/malware
348
  if(preg_match('/\/wp\-(?:admin|content|includes)\/|\/wp\-(login|cron)\.php|["\'\<\>\{\}\(\)\*\\\\`]|&[lgr]t;|&#0?3[49];|&#0?4[01];|&#0?6[02];|&#0?9[26];|&#8217;|&#8221;|&quot;/i',$wtop->top_link)>0 || wassupURI::is_xss($wtop->top_link)){
349
  continue;
350
  }
 
 
351
  if(!empty($wtop->top_link)){
352
  $urllink=wassupURI::url_link($wtop->top_link,false);
353
  }else{
354
  $urllink=wassupURI::url_link($wtop->top_item,false);
355
  }
356
  $html .=$top_count.'<span class="top-url">'.$urllink.'</span>';
 
357
  }elseif($scol == "referrers"){
358
  //don't show possible spam/malware
359
  if(preg_match('/\/wp\-(?:admin|content|includes)\/|\/wp\-(login|cron)\.php|["\'\<\>\{\}\(\)\*\\\\`]|&[lgr]t;|&#0?3[49];|&#0?4[01];|&#0?6[02];|&#0?9[26];|&#8217;|&#8221;|&quot;/i',$wtop->top_link)>0 || wassupURI::is_xss($wtop->top_link)){
360
  continue;
361
  }
 
 
362
  $trec=(array)$wtop;
363
  $trec['referrer']=$trec['top_link'];
364
  $reflink=wassupURI::referrer_link((object)$trec,false);
365
  $html .=$top_count.'<span class="top-url">'.$reflink.'</span>';
 
366
  }else{
 
 
367
  if($chars >0 && strlen($wtop->top_item)>$chars){
368
  if(!empty($wtop->top_link)){
369
  $html .=$top_count.'<span class="top-item"><a href="'.wassupURI::cleanURL($wtop->top_link).'" title="'.wassupURI::disarm_attack($wtop->top_item).'">'.stringShortener($wtop->top_item,$chars).'</a></span>';
@@ -377,8 +390,8 @@ function wassup_widget_get_topstat($item,$limit,$chars,$from_date,$show_counts=0
377
  $html .=$top_count.'<span class="top-item">'.wassupURI::disarm_attack($wtop->top_item).'</span>';
378
  }
379
  }
 
380
  }
381
- $html .='</li>';
382
  } //end foreach
383
  }elseif($wdebug_mode){
384
  echo "\n".'<!-- No results for '.esc_attr($item).' on query $top_sql='.$top_sql.' found! -->';
@@ -394,14 +407,65 @@ function wassup_widget_get_topstat($item,$limit,$chars,$from_date,$show_counts=0
394
  */
395
  function wassup_widget_stat_gettext($statitem,$heading=""){
396
  if(empty($heading)) $heading=__("Top","wassup");
397
- if($statitem=="articles") $gettext=sprintf(__("%s articles","wassup"),$heading);
398
- elseif($statitem=="searches") $gettext=sprintf(__("%s searches","wassup"),$heading);
399
- elseif($statitem=="referrers") $gettext=sprintf(__("%s referrers","wassup"),$heading);
400
- elseif($statitem=="requests") $gettext=sprintf(__("%s requests","wassup"),$heading);
401
- elseif($statitem=="browsers") $gettext=sprintf(__("%s browsers","wassup"),$heading);
402
- elseif($statitem=="os") $gettext=sprintf(__("%s OS","wassup"),$heading);
403
- elseif($statitem=="locale") $gettext=sprintf(__("%s locale","wassup"),$heading);
404
- else $gettext=$statitem;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
405
  return $gettext;
406
  }
407
  ?>
257
  $i++;
258
  $flag='/img/flags/'.$loc->top_item.'.png';
259
  if(is_readable(WASSUPDIR.$flag)){
260
+ $html .=' <nobr><img src="'.WASSUPURL.$flag.'" class="icon" alt="'.$loc->top_item.'"/><span class="flag-count">'.$loc->top_count.'</span></nobr>';
261
  }else{
262
+ $html .='<span class="flag-count">'.strtoupper($loc->top_item).'-'.$loc->top_count.'</span>';
263
  }
264
  if($i < $fc) $html .='&nbsp;&middot;&nbsp;';
265
  }
280
  global $wpdb,$wassup_options,$wdebug_mode;
281
  $html="";
282
  if($limit >0){
283
+ //exclude spiders from widget data (spam already excluded in get_wassupstat)
284
  $top_results=array();
285
+ if(!function_exists('get_wassupstat')) include_once(WASSUPDIR ."/lib/main.php");
286
  $wpurl=strtolower(rtrim(wassupURI::get_wphome()));
287
  $blogurl=strtolower(rtrim(wassupURI::get_sitehome()));
288
  $top_condition=" `timestamp`>='".$from_date."' AND `spider`=''";
311
  }elseif($item == 'locale'){
312
  $scol="language";
313
  }
314
+ $top_sql=get_wassupstat($scol,$limit,$top_condition,"sql");
315
  if(!empty($top_sql)) $top_results=$wpdb->get_results($top_sql);
316
  $ndigits=1;
317
  if(!empty($top_results) && count($top_results)>0){
320
  $liclass="";
321
  if(!empty($show_counts)) $liclass=' class="stat-count"';
322
  if($wdebug_mode){
323
+ echo "\n\t".'<!-- '.count($top_results).' results from query '.$top_sql;
324
+ echo "\n\t".' '.serialize($top_results).' -->';
325
  }
326
  foreach($top_results as $wtop){
327
  $top_count='';
328
  if(!empty($show_counts)){
329
  $top_count=wPadNum($wtop->top_count,$ndigits);
330
  }
 
 
331
  if($scol == "language"){
332
+ $html .='
333
+ <li'.$liclass.'>';
334
  $flag='/img/flags/'.esc_attr($wtop->top_item).'.png';
335
  if(is_readable(WASSUPDIR.$flag)){
336
  $flagsrc=WASSUPURL.$flag;
338
  }else{
339
  $html .='<nobr>'.$top_count.'<span class="top-item">'.wassupURI::disarm_attack($wtop->top_item).'</span></nobr>';
340
  }
341
+ $html .='</li>';
342
  }elseif($scol == "url_wpid" || $scol == "search"){
343
+ $html .='
344
+ <li'.$liclass.'>';
345
  if(!empty($wtop->top_link)){
346
  $html .=$top_count.'<span class="top-item"><a href="'.wassupURI::cleanURL($wtop->top_link).'" title="'.wassupURI::disarm_attack($wtop->top_item).'">'.wassupURI::disarm_attack($wtop->top_item).'</a></span>';
347
  }else{
348
  $html .=$top_count.'<span class="top-item">'.wassupURI::disarm_attack($wtop->top_item).'</span>';
349
  }
350
+ $html .='</li>';
351
  }elseif($scol == "urlrequested"){
352
  //don't show possible spam/malware
353
  if(preg_match('/\/wp\-(?:admin|content|includes)\/|\/wp\-(login|cron)\.php|["\'\<\>\{\}\(\)\*\\\\`]|&[lgr]t;|&#0?3[49];|&#0?4[01];|&#0?6[02];|&#0?9[26];|&#8217;|&#8221;|&quot;/i',$wtop->top_link)>0 || wassupURI::is_xss($wtop->top_link)){
354
  continue;
355
  }
356
+ $html .='
357
+ <li'.$liclass.'>';
358
  if(!empty($wtop->top_link)){
359
  $urllink=wassupURI::url_link($wtop->top_link,false);
360
  }else{
361
  $urllink=wassupURI::url_link($wtop->top_item,false);
362
  }
363
  $html .=$top_count.'<span class="top-url">'.$urllink.'</span>';
364
+ $html .='</li>';
365
  }elseif($scol == "referrers"){
366
  //don't show possible spam/malware
367
  if(preg_match('/\/wp\-(?:admin|content|includes)\/|\/wp\-(login|cron)\.php|["\'\<\>\{\}\(\)\*\\\\`]|&[lgr]t;|&#0?3[49];|&#0?4[01];|&#0?6[02];|&#0?9[26];|&#8217;|&#8221;|&quot;/i',$wtop->top_link)>0 || wassupURI::is_xss($wtop->top_link)){
368
  continue;
369
  }
370
+ $html .='
371
+ <li'.$liclass.'>';
372
  $trec=(array)$wtop;
373
  $trec['referrer']=$trec['top_link'];
374
  $reflink=wassupURI::referrer_link((object)$trec,false);
375
  $html .=$top_count.'<span class="top-url">'.$reflink.'</span>';
376
+ $html .='</li>';
377
  }else{
378
+ $html .='
379
+ <li'.$liclass.'>';
380
  if($chars >0 && strlen($wtop->top_item)>$chars){
381
  if(!empty($wtop->top_link)){
382
  $html .=$top_count.'<span class="top-item"><a href="'.wassupURI::cleanURL($wtop->top_link).'" title="'.wassupURI::disarm_attack($wtop->top_item).'">'.stringShortener($wtop->top_item,$chars).'</a></span>';
390
  $html .=$top_count.'<span class="top-item">'.wassupURI::disarm_attack($wtop->top_item).'</span>';
391
  }
392
  }
393
+ $html .='</li>';
394
  }
 
395
  } //end foreach
396
  }elseif($wdebug_mode){
397
  echo "\n".'<!-- No results for '.esc_attr($item).' on query $top_sql='.$top_sql.' found! -->';
407
  */
408
  function wassup_widget_stat_gettext($statitem,$heading=""){
409
  if(empty($heading)) $heading=__("Top","wassup");
410
+ if($statitem=="articles"){
411
+ if($heading == "Top"){
412
+ $gettext=__("Top Articles","wassup");
413
+ }elseif($heading == "Latest"){
414
+ $gettext=__("Latest articles","wassup");
415
+ }else{
416
+ $gettext=sprintf(__("%s articles","wassup"),$heading);
417
+ }
418
+ }elseif($statitem=="searches"){
419
+ if($heading == "Top"){
420
+ $gettext=__("Top Searches","wassup");
421
+ }elseif($heading == "Latest"){
422
+ $gettext=__("Latest searches","wassup");
423
+ }else{
424
+ $gettext=sprintf(__("%s searches","wassup"),$heading);
425
+ }
426
+ }elseif($statitem=="referrers"){
427
+ if($heading == "Top"){
428
+ $gettext=__("Top Referrers","wassup");
429
+ }elseif($heading == "Latest"){
430
+ $gettext=__("Latest referrers","wassup");
431
+ }else{
432
+ $gettext=sprintf(__("%s referrers","wassup"),$heading);
433
+ }
434
+ }elseif($statitem=="requests"){
435
+ if($heading == "Top"){
436
+ $gettext=__("Top Requests","wassup");
437
+ }elseif($heading == "Latest"){
438
+ $gettext=__("Latest URL requests","wassup");
439
+ }else{
440
+ $gettext=sprintf(__("%s requests","wassup"),$heading);
441
+ }
442
+ }elseif($statitem=="browsers"){
443
+ if($heading == "Top"){
444
+ $gettext=__("Top Browsers","wassup");
445
+ }elseif($heading == "Latest"){
446
+ $gettext=__("Latest browsers","wassup");
447
+ }else{
448
+ $gettext=sprintf(__("%s browsers","wassup"),$heading);
449
+ }
450
+ }elseif($statitem=="os"){
451
+ if($heading == "Top"){
452
+ $gettext=__("Top OS","wassup");
453
+ }elseif($heading == "Latest"){
454
+ $gettext=__("Latest OS","wassup");
455
+ }else{
456
+ $gettext=sprintf(__("%s OS","wassup"),$heading);
457
+ }
458
+ }elseif($statitem=="locale"){
459
+ if($heading == "Top"){
460
+ $gettext=__("Top Locales","wassup");
461
+ }elseif($heading == "Latest"){
462
+ $gettext=__("Latest locales","wassup");
463
+ }else{
464
+ $gettext=sprintf(__("%s locale","wassup"),$heading);
465
+ }
466
+ }else{
467
+ $gettext=$statitem;
468
+ }
469
  return $gettext;
470
  }
471
  ?>
widgets/widgets.php CHANGED
@@ -37,7 +37,6 @@ if(!class_exists('Wassup_Widget')){
37
  * - sets common default options for all child widgets
38
  * - adds wassup-widget.css to page header
39
  * - generate a unique 'wassup_widget_id' for widget caching
40
- * - backward compatibility code for widget display in WP 2.2 - 2.8
41
  *
42
  * Wassup_Widget API:
43
  * - Extensions of Wassup_Widget must use the prefix 'wassup_' in the widget class name
@@ -524,14 +523,14 @@ class wassup_topstatsWidget extends Wassup_Widget{
524
  echo "\n -->";
525
  }
526
  //get widget head and foot content
527
- $ulclass="";
528
  $widget_head="";
529
  $widget_foot='';
530
  if(!empty($instance['title'])){
531
  $widget_head=$widget_opt['before_title'].esc_attr($instance['title']).$widget_opt['after_title'];
532
  }
533
  if(!empty($instance['ulclass'])){
534
- $ulclass=' class="'.$instance['ulclass'].'"';
535
  }
536
  //get widget main content
537
  $widget_html="";
@@ -573,7 +572,7 @@ class wassup_topstatsWidget extends Wassup_Widget{
573
  if(!empty($html)){
574
  $title="";
575
  if(empty($widget_head)){
576
- if($instance['stat_timeframe']>0 && $instance['stat_timeframe']<1) $item_heading = __("Trending","wassup");
577
  else $item_heading = __("Top","wassup");
578
  $title=$widget_opt['before_title'].wassup_widget_stat_gettext($item,$item_heading).$widget_opt['after_title'];
579
  }else{
37
  * - sets common default options for all child widgets
38
  * - adds wassup-widget.css to page header
39
  * - generate a unique 'wassup_widget_id' for widget caching
 
40
  *
41
  * Wassup_Widget API:
42
  * - Extensions of Wassup_Widget must use the prefix 'wassup_' in the widget class name
523
  echo "\n -->";
524
  }
525
  //get widget head and foot content
526
+ $ulclass=' class="topstats"';
527
  $widget_head="";
528
  $widget_foot='';
529
  if(!empty($instance['title'])){
530
  $widget_head=$widget_opt['before_title'].esc_attr($instance['title']).$widget_opt['after_title'];
531
  }
532
  if(!empty($instance['ulclass'])){
533
+ $ulclass=' class="topstats '.$instance['ulclass'].'"';
534
  }
535
  //get widget main content
536
  $widget_html="";
572
  if(!empty($html)){
573
  $title="";
574
  if(empty($widget_head)){
575
+ if($instance['stat_timeframe']>0 && $instance['stat_timeframe']<1) $item_heading = __("Latest","wassup");
576
  else $item_heading = __("Top","wassup");
577
  $title=$widget_opt['before_title'].wassup_widget_stat_gettext($item,$item_heading).$widget_opt['after_title'];
578
  }else{