WassUp Real Time Analytics - Version 1.8.2

Version Description

Download this release

Release Info

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

Code changes from version 1.8.1 to 1.8.2

badhosts-intl.txt CHANGED
@@ -310,9 +310,4 @@ wholegrew\.cn
310
  withpoem\.cn
311
  wonderdrug\.ws
312
  x67fr22v\.ph
313
- xcelentbio\.us
314
- xcelwonder\.us
315
  xer\.com\.au
316
- yapped2284pills\.us
317
- ycxzvbsdds\.us
318
- zarf1antipodean\.us
310
  withpoem\.cn
311
  wonderdrug\.ws
312
  x67fr22v\.ph
 
 
313
  xer\.com\.au
 
 
 
badhosts.txt CHANGED
@@ -192,6 +192,7 @@ betterfuturetoday\.com
192
  betterhealth\.biz
193
  betterservice\.info
194
  beud\.com
 
195
  bhex\.com
196
  bibles\.com
197
  big2bigger\.com
@@ -382,7 +383,7 @@ corporatequote\.com
382
  coresat\.com
383
  cr3am\.com
384
  cr3at3\.com
385
- cream\-?pies\.*
386
  creamy\-facials\.com
387
  crescentarian\.net
388
  credit\-4me\.com
@@ -410,7 +411,7 @@ datashaping\.com
410
  date\-?jump\.com
411
  datesaturday\.com
412
  dating\-s\.net
413
- dating\-?christian\.*
414
  dating\.blogs\.com
415
  datinggoldengirls.com
416
  datingoffers\.com
@@ -447,7 +448,7 @@ discountherbals\.com
447
  discountloan\.info
448
  discountrx4u\.info
449
  discoverdownloads\.com
450
- discrete\-?encounters\.*
451
  dishtvforpc\.com
452
  dkdns\.com
453
  dna\.info
@@ -572,8 +573,8 @@ finance\-4all\.com
572
  financeadvise\.com
573
  financialfirms\.net
574
  findawoman\.net
575
- finder\-?adult\.*
576
- finder\-?friend\.*
577
  findfunhere\.com
578
  findtheoneonthissite\.com
579
  findwebhostingnow\.com
@@ -597,14 +598,14 @@ fortherest\.info
597
  fossilized\.net
598
  foxmediasolutions\.com
599
  freakycheats\.com
600
- free\-?sms\.*
601
  freeautobot\.com
602
  freekin\.info
603
  freeride\.com
604
  freetest\.info
605
  freshperiod\.com
606
- friend\-?adult\.*
607
- friend\-?finder\.*
608
  fsck\.com
609
  ftgoal\.com
610
  ftke\.com
@@ -617,8 +618,8 @@ gala\.net
617
  gallanted\.com
618
  garyshawkey\.com
619
  gasep\.com
620
- gay\-?chat\.*
621
- gay\-?teen\.*
622
  gb\.com
623
  gdries\.com
624
  genaholincorporated\.com
@@ -651,7 +652,7 @@ glassjaws\.com
651
  globaleducationeurope\.net
652
  globaltrustsavings\.com
653
  gmgmedical\.com
654
- gmi\-autoimports*\.com
655
  go\.com
656
  go\-medz\.com
657
  go\-refi\.com
@@ -732,7 +733,7 @@ herbon\.info
732
  herhelp\.com
733
  herpills\.com
734
  hgee1\.info
735
- hgh\-*
736
  hidor\.com
737
  himailer\.com
738
  himsearch\.com
@@ -848,7 +849,7 @@ jamielynntressy\.com
848
  jeffersondarcy\.com
849
  jenniferyoungtart\.com
850
  jettisonit\.com
851
- jewish-?singles\.*
852
  jhex\.com
853
  ji2\.net
854
  jinhai\.info
@@ -1647,202 +1648,53 @@ wuniv\.com
1647
  wv8\.net
1648
  wwmeds\.com
1649
  x\-forms\.net
1650
- xadulthosting\.com
1651
  xanaz\.net
1652
  xanex\.org
1653
  xans\.net
1654
  xantz\.com
1655
- xbvbaar\.net
1656
  xcce\.com
1657
  xciconsulting\.com
1658
- xedffrr\.com
1659
  xftp\.net
1660
- xgremlin\.com
1661
- xhjwien\.info
1662
  xiagra\.net
1663
- ximportmeds\.net
1664
- xinternetstore\.com
1665
- xlkifge\.com
1666
- xmaad\.com
1667
- xmasdeal\.info
1668
- xmasdownloadnetwork\.com
1669
- xmaslowrate\.com
1670
- xmasrefinance\.com
1671
  xmassavings\.com
1672
- xmastimerates\.com
1673
  xmr3\.com
1674
- xnsidh4h\.info
1675
  xnue\.biz
1676
- xofferz\.com
1677
- xognei\.com
1678
- xopy\.com
1679
  xoware\.com
1680
  xpays\.com
1681
- xpoem\.info
1682
- xpojga\.com
1683
- xpsoftsell\.biz
1684
  xsalez\.org
1685
- xseason\.biz
1686
  xstore\.biz
1687
  xtrameg\.com
1688
- xtreemteeming\.com
1689
- xtremebikebabes\.com
1690
  xtst\.com
1691
- xumcejc\.com
1692
- xvxxdatwers\.info
1693
- xx\-powo\.com
1694
- xxdksq\.com
1695
- xxdksq\.net
1696
  xxxdate\.com
1697
- xxxlargepenis\.net
1698
- xxxmeds\.info
1699
- xxxteenzoo\.com
1700
- xxxxstore\.com
1701
- y\-2\-m\.com
1702
- y\-mrg\.net
1703
- y\-mrt\.com
1704
- y3ss1r\.com
1705
  y73\.net
1706
  yaadig\.com
1707
- yahoohut\.com
1708
- yahoosostore\.com
1709
  yahoososupersite\.com
1710
  yahoosotime\.com
1711
- yawps440pinn\.com
1712
  yayshop\.com
1713
  yellfore\.com
1714
- yellowcasefile\.com
1715
  yellowrate\.com
1716
  yelpp\.biz
1717
  yelucie\.com
1718
- yes03284\.com
1719
- yes2shipz\.com
1720
- yesmort\.net
1721
  yf4\.net
1722
- yfoedbx\.com
1723
- ymha1773drygs\.com
1724
- ynmort\.net
1725
- ynotmyrxworld\.com
1726
- ynotsavem0re\.com
1727
  yo6\.net
1728
- yomaoem\.net
1729
- yomoi\.com
1730
- yorhere2savez\.com
1731
- yosofts\.info
1732
- youarehealthy\.info
1733
- youaretaking\.com
1734
- youfoundidealsolution\.com
1735
- youheynow\.info
1736
- youkostylaya\.com
1737
- youlikeviagra\.info
1738
- youngfreespirits\.com
1739
- youngtallitemss\.com
1740
  your\-financial\.com
1741
- your\-home\-loan\.net
1742
- your\-mort\-gages\.com
1743
- your\-mort\.com
1744
- your\-re\-finance\.com
1745
- your\-refi\.com
1746
- your\-value\-loan\.com
1747
- yourbestmeds\.info
1748
- yourbestrxplace\.com
1749
  yourbignight\.com
1750
- yourbollnas\.info
1751
  yourcasinobiz\.com
1752
- yourchanceathome\.net
1753
  yourcheap\-rx\.com
1754
- yourdoctor\.biz
1755
- youreasyloans\.net
1756
- youreasymeds\.com
1757
- youreasymeds\.net
1758
- yourfitnessonline\.com
1759
- yourhealthmatters\-now\.com
1760
  yourhostingaccount\.com
1761
- yourloanz\.com
1762
  yourmeds\.info
1763
- yourmembersdirectory\.com
1764
  yourmort\.com
1765
  yourname\.com
1766
  yourowndoctor\.info
1767
- yourowngaming\.net
1768
- yourownmeds\.info
1769
- yourpills4me\.com
1770
- yourpillsusa\.com
1771
- yourpils24\.info
1772
  yourpsychic\.net
1773
- yourrate\.net
1774
- yourscinedesign\.com
1775
- yourstuffabsolute\.com
1776
- yourstuffcentral\.com
1777
- yourstuffforme\.com
1778
- yourstuffforus\.com
1779
- yourstuffsupply\.com
1780
- yoursunlightzone\.info
1781
- yourtabl\.info
1782
  yourtablet\.info
1783
- yourthings2004\.com
1784
- yourthings4us\.com
1785
- yourthingslive\.com
1786
- yourthingsplace\.com
1787
- yourthingssoltuion\.com
1788
- youthemans\.com
1789
- youweretiredi\.com
1790
- youyouhey\.info
1791
- ypaym0re1z1\.com
1792
  ypx132\.com
1793
- ypypgroupy\.com
1794
- yrme33\.com
1795
- yrt009il\.com
1796
- yuiiooiutr\.com
1797
- yuiuku\.info
1798
- yunkgbcd\.com
1799
- yunoz\.biz
1800
- yuomnad\.com
1801
- yupnamethisnow\.com
1802
- yurgag\.com
1803
- yuritemple\.net
1804
- yuyumant\.com
1805
  yx\-colorweaving\.com
1806
- zablen\.com
1807
- zainetsell\.com
1808
- zaliam\.com
1809
- zap\-internet\.com
1810
  zapbook\.info
1811
- zaphomeloans\.com
1812
- zarinahsports\.com
1813
- zazxex\.info
1814
- zazxox\.info
1815
- zazxpx\.info
1816
- zazxtx\.info
1817
- zbestantid0te\.com
1818
- zbgadjdf\.info
1819
- zebalx\.com
1820
- zersurf\.com
1821
- zfeedbx\.com
1822
- ziagra\.net
1823
- zick\.biz
1824
- zigzagging\.net
1825
- zinkuq\.com
1826
- ziuyt\.info
1827
- zloanz\.info
1828
- zndrz\.com
1829
- zockkfosa\.com
1830
- zoeyhasafever\.com
1831
  zolotko\.info
1832
- zoobrandsour\.com
1833
- zoodnights\.com
1834
  zoomgirls\.net
1835
- zoomwatches\.info
1836
  zoophilelinks\.net
1837
- zooumbrela\.info
1838
- zoozits\.com
1839
  zowk\.com
1840
- zpromeds\.biz
1841
- zpromeds\.info
1842
- zrwkd\.com
1843
  ztcash\.com
1844
- zuodalu\.com
1845
- zuperone\.info
1846
- zuvvka\.com
1847
  zwallet\.com
1848
- zxcvbdf\.com
192
  betterhealth\.biz
193
  betterservice\.info
194
  beud\.com
195
+ red\.bezeqint\.net
196
  bhex\.com
197
  bibles\.com
198
  big2bigger\.com
383
  coresat\.com
384
  cr3am\.com
385
  cr3at3\.com
386
+ cream\-?pies.*
387
  creamy\-facials\.com
388
  crescentarian\.net
389
  credit\-4me\.com
411
  date\-?jump\.com
412
  datesaturday\.com
413
  dating\-s\.net
414
+ dating\-?christian.*
415
  dating\.blogs\.com
416
  datinggoldengirls.com
417
  datingoffers\.com
448
  discountloan\.info
449
  discountrx4u\.info
450
  discoverdownloads\.com
451
+ discrete\-?encounters.*
452
  dishtvforpc\.com
453
  dkdns\.com
454
  dna\.info
573
  financeadvise\.com
574
  financialfirms\.net
575
  findawoman\.net
576
+ finder\-?adult.*
577
+ finder\-?friend.*
578
  findfunhere\.com
579
  findtheoneonthissite\.com
580
  findwebhostingnow\.com
598
  fossilized\.net
599
  foxmediasolutions\.com
600
  freakycheats\.com
601
+ free\-?sms.*
602
  freeautobot\.com
603
  freekin\.info
604
  freeride\.com
605
  freetest\.info
606
  freshperiod\.com
607
+ friend\-?adult.*
608
+ friend\-?finder.*
609
  fsck\.com
610
  ftgoal\.com
611
  ftke\.com
618
  gallanted\.com
619
  garyshawkey\.com
620
  gasep\.com
621
+ gay\-?chat.*
622
+ gay\-?teen.*
623
  gb\.com
624
  gdries\.com
625
  genaholincorporated\.com
652
  globaleducationeurope\.net
653
  globaltrustsavings\.com
654
  gmgmedical\.com
655
+ gmi\-autoimports.*\.com
656
  go\.com
657
  go\-medz\.com
658
  go\-refi\.com
733
  herhelp\.com
734
  herpills\.com
735
  hgee1\.info
736
+ hgh\-.*
737
  hidor\.com
738
  himailer\.com
739
  himsearch\.com
849
  jeffersondarcy\.com
850
  jenniferyoungtart\.com
851
  jettisonit\.com
852
+ jewish-?singles.*
853
  jhex\.com
854
  ji2\.net
855
  jinhai\.info
1648
  wv8\.net
1649
  wwmeds\.com
1650
  x\-forms\.net
 
1651
  xanaz\.net
1652
  xanex\.org
1653
  xans\.net
1654
  xantz\.com
 
1655
  xcce\.com
1656
  xciconsulting\.com
 
1657
  xftp\.net
 
 
1658
  xiagra\.net
 
 
 
 
 
 
 
 
1659
  xmassavings\.com
 
1660
  xmr3\.com
 
1661
  xnue\.biz
1662
+ xognei.com
 
 
1663
  xoware\.com
1664
  xpays\.com
 
 
 
1665
  xsalez\.org
 
1666
  xstore\.biz
1667
  xtrameg\.com
 
 
1668
  xtst\.com
 
 
 
 
 
1669
  xxxdate\.com
 
 
 
 
 
 
 
 
1670
  y73\.net
1671
  yaadig\.com
 
 
1672
  yahoososupersite\.com
1673
  yahoosotime\.com
 
1674
  yayshop\.com
1675
  yellfore\.com
 
1676
  yellowrate\.com
1677
  yelpp\.biz
1678
  yelucie\.com
 
 
 
1679
  yf4\.net
 
 
 
 
 
1680
  yo6\.net
 
 
 
 
 
 
 
 
 
 
 
 
1681
  your\-financial\.com
 
 
 
 
 
 
 
 
1682
  yourbignight\.com
 
1683
  yourcasinobiz\.com
 
1684
  yourcheap\-rx\.com
 
 
 
 
 
 
1685
  yourhostingaccount\.com
 
1686
  yourmeds\.info
 
1687
  yourmort\.com
1688
  yourname\.com
1689
  yourowndoctor\.info
 
 
 
 
 
1690
  yourpsychic\.net
 
 
 
 
 
 
 
 
 
1691
  yourtablet\.info
 
 
 
 
 
 
 
 
 
1692
  ypx132\.com
 
 
 
 
 
 
 
 
 
 
 
 
1693
  yx\-colorweaving\.com
 
 
 
 
1694
  zapbook\.info
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1695
  zolotko\.info
 
 
1696
  zoomgirls\.net
 
1697
  zoophilelinks\.net
 
 
1698
  zowk\.com
 
 
 
1699
  ztcash\.com
 
 
 
1700
  zwallet\.com
 
css/wassup.css CHANGED
@@ -37,10 +37,6 @@
37
  #wassup-wrap a:hover { color: #d11; }
38
  .wassup-icon {}
39
  .wassup-content { min-height:225px; }
40
- #wpbody-content {
41
- padding-top: 3px;
42
- margin-bottom: -5px;
43
- }
44
  /*
45
  * for wassup admin top menu styles in Wordpress 2.7+ */
46
  .wassup-menu-link {
@@ -62,8 +58,8 @@
62
  border-bottom: 0px none;
63
  background: url("images/link2.png") no-repeat 0 0;
64
  }
 
65
  #contextual-help-link {
66
- border: 1px solid #d6d6d6;
67
  -moz-border-radius-topleft: 3px;
68
  -moz-border-radius-topright: 3px;
69
  -webkit-border-top-left-radius: 3px;
@@ -71,8 +67,12 @@
71
  border-top-left-radius: 3px;
72
  border-top-right-radius: 3px;
73
  border-bottom: 0px none;
 
74
  background: url("images/link2.png") no-repeat 0 0 !important;
75
  }
 
 
 
76
  #wassup-menu {
77
  display: inline;
78
  position: relative;
@@ -128,18 +128,17 @@
128
  padding-left: 15px;
129
  }
130
  div.main-tabs {
131
- /* width: 97%; */
132
  margin: 10px auto 3px auto;
133
  padding: 2px 1px 1px;
134
- border: 1px solid #efebef;
135
- border-radius: 3px;
136
- -webkit-border-radius: 3px;
137
- -moz-border-radius: 3px;
138
- background-color: #dedade;
139
  color: #445;
140
- box-shadow: 0 0 5px rgba(44,44,104, 0.9);
141
- -moz-box-shadow: 0 0 5px rgba(44,44,104, 0.9);
142
- -webkit-box-shadow: 0 0 5px rgba(44,44,104, 0.9);
 
 
 
 
 
143
  }
144
  .main-tabs a, .main-tabs a:link {
145
  color: #00b;
@@ -212,17 +211,12 @@ div.main-tabs {
212
  a.toggle-allcrono { width: 140px !important; }
213
  a.toggle-allcrono:hover, a.toggle-all:hover { background-color: #676767 !important; } */
214
  .sum-rec, .sum {
215
- /* margin: 0 0 5px 0; */
216
  margin: 0 0 2px;
217
- padding: 1px 0 0 !important; /* 1px 1px 0 !important; */
 
218
  background-color: #f4f6f6;
219
  border: 1px solid #c7c7cc; /* 89a; */
220
  border-bottom: 3px solid #347;
221
- /* border-right: 1px solid #dedade; #789; */
222
- /* border-left: 1px solid #dedade; #789; */
223
- /* box-shadow: 0 0 2px rgba(80, 100, 100, 0.3);
224
- -moz-box-shadow:0 0 2px rgba(80, 100, 100, 0.3);
225
- -webkit-box-shadow:0 0 2px rgba(80, 100, 100, 0.3); */
226
  }
227
  .sum-nav, .sum-nav-mark, .sum-spy {
228
  position: relative;
@@ -231,6 +225,7 @@ div.main-tabs {
231
  min-height: 50px;
232
  margin: 0 !important;
233
  padding: 22px 0 0;
 
234
  border-top: 1px solid #fffcff;
235
  border-bottom: 1px solid #ddd;
236
  background: url("images/list-bg.png") repeat-x;
@@ -286,24 +281,30 @@ div.sum-spy {
286
  clear:right;
287
  margin: 0 0 0 165px;
288
  padding: 0;
289
- font-size: 14px;
290
  line-height: 1.3em;
291
  }
292
  .sum-det-spy span {
293
  margin: 0;
294
  padding: 0;
295
  }
296
- .det1 { line-height: 1.5em; display: block; }
297
- .det2 { font-size: 11px; color:#464646; display: block; }
298
- .det3 { padding-left: 20px; font-size: 11px; color: #464646; }
 
 
 
 
 
 
 
299
  .det1 a { font-weight: bold; border-bottom: 1px solid !important; }
300
  .det2 a, .det2 a:link, .sum-det span.det2 a {
301
- color: #00284a !important;
302
  }
303
  .det2 a:hover, .sum-det span.det2 a:hover {
304
- color: #d54e21 !important;
305
  }
306
- .det2 strong { color: #00284a; font-weight: normal; }
307
  .agent strong { font-weight: bold; }
308
  .sum-box {
309
  float: left;
@@ -364,7 +365,7 @@ div.sum-spy {
364
  line-height: 1.1em;
365
  }
366
  #toptenchart a { color: #464646; }
367
- #toptenchart a:hover { color: #d54e21; }
368
  ul.charts {
369
  list-style-type: none;
370
  margin: 0;
@@ -393,43 +394,43 @@ li.chartsT {
393
  margin: 0 auto !important;
394
  clear:both;
395
  border-bottom: 0 none;
 
 
396
  }
397
- .detail-data a, .detail-data a:link { color: #559 !important; }
398
  .detail-data a:hover { color: #c64 !important; }
399
  .detail-data ul {
400
  list-style-type: none;
401
  width: 100%;
402
  margin: 0;
403
  padding: 3px 0 4px 0;
 
404
  border-top: 1px solid #ddd;
405
  border-bottom: 1px solid #bbb;
406
  }
407
  ul.searcheng {
408
- background-color: #adf;
409
- border-color: #66cbcb;
410
  }
411
  .searchimage {
412
- background-color: #aeaaea !important;
413
- border-color: #a99 !important;
414
  }
415
  li.searcheng {
416
  list-style-type: none;
417
  width: 100%;
418
  padding: 0 4px 0 4px;
419
  display: inline;
420
- font-size: 11px;
421
- color: #667;
422
  border-right: 1px dotted #8e8e8e;
423
  }
424
  ul.useragent {
425
  padding: 4px 0 2px 0;
426
- background-color: #595595;
427
  border-bottom: 1px #ccc solid;
428
  }
429
  li.useragent {
430
  list-style-type: none;
431
  color: #f5f5f5;
432
- font-size: 11px;
433
  width: 100%;
434
  padding: 0 6px 0 0;
435
  text-align: center;
@@ -444,7 +445,6 @@ li.spam {
444
  width: 100%;
445
  padding: 0 6px 0 0;
446
  color: #eff;
447
- font-size: 11px;
448
  }
449
  ul.spider {
450
  background-color: #cc9980;
@@ -454,14 +454,16 @@ ul.spider li {
454
  list-style-type: none;
455
  display: inline;
456
  width: 100%;
457
- font-size: 11px;
458
  }
459
  li.spider { padding: 0 6px 0 0; color: #f5f5f5; }
460
  li.spider a, li.spider a:link { color: #f5f5f5 !important; }
461
  li.spider a:hover { color: #fda !important; }
 
 
 
 
462
  li.feed {
463
  padding: 0 4px 0 4px;
464
- color: #667;
465
  border-right: 1px dotted #8e8e8e;
466
  }
467
  ul.agent { border-color: #ddd; }
@@ -469,8 +471,6 @@ li.agent {
469
  list-style-type: none;
470
  display: inline; width: 100%;
471
  padding: 0 4px 0 4px;
472
- color: #667;
473
- font-size: 11px;
474
  border-right: 1px dotted #8e8e8e;
475
  }
476
  ul.users {
@@ -490,8 +490,6 @@ li.users {
490
  display: inline;
491
  width: 100%;
492
  padding: 0 4px 0 4px;
493
- color: #667;
494
- font-size: 11px;
495
  border-right: 1px dotted #8e8e8e;
496
  }
497
  ul.url {
@@ -508,8 +506,6 @@ li.url {
508
  width: 100%;
509
  margin: 0;
510
  padding: 0;
511
- color: #667;
512
- font-size: 11px;
513
  line-height: 2em;
514
  background-image: url("images/list-bg2.png");
515
  border-bottom: 1px #ddd solid;
@@ -519,8 +515,6 @@ li.urlodd {
519
  width: 100%;
520
  margin: 0;
521
  padding: 4px 0 6px 0;
522
- color: #667;
523
- font-size: 11px;
524
  background-image: url("images/list-bg3.png");
525
  border-bottom: 1px #ddd solid;
526
  }
@@ -558,13 +552,10 @@ li.urlodd {
558
  margin: 5px auto !important;
559
  padding: 1px 1px 2px !important;
560
  background-color: #dedade;
561
- box-shadow: 0 0 5px rgba(44,44,104, 0.9);
562
- -moz-box-shadow: 0 0 5px rgba(44,44,104, 0.9);
563
- -webkit-box-shadow: 0 0 5px rgba(44,44,104, 0.9);
564
- border: 1px solid #efebef;
565
- border-radius: 3px;
566
- -webkit-border-radius: 3px;
567
- -moz-border-radius: 3px;
568
  }
569
  #spyContainer { clear: both; padding: 5px 5px 0 0; }
570
  #settings {
37
  #wassup-wrap a:hover { color: #d11; }
38
  .wassup-icon {}
39
  .wassup-content { min-height:225px; }
 
 
 
 
40
  /*
41
  * for wassup admin top menu styles in Wordpress 2.7+ */
42
  .wassup-menu-link {
58
  border-bottom: 0px none;
59
  background: url("images/link2.png") no-repeat 0 0;
60
  }
61
+ /* Wordpress css adjustments */
62
  #contextual-help-link {
 
63
  -moz-border-radius-topleft: 3px;
64
  -moz-border-radius-topright: 3px;
65
  -webkit-border-top-left-radius: 3px;
67
  border-top-left-radius: 3px;
68
  border-top-right-radius: 3px;
69
  border-bottom: 0px none;
70
+ border: 1px solid #d6d6d6;
71
  background: url("images/link2.png") no-repeat 0 0 !important;
72
  }
73
+ #wpbody-content { margin-bottom: -5px; padding-top: 3px; }
74
+ #ozh_menu_wrap { margin-top: -3px !important; } /* for ozh drop-down menu */
75
+
76
  #wassup-menu {
77
  display: inline;
78
  position: relative;
128
  padding-left: 15px;
129
  }
130
  div.main-tabs {
 
131
  margin: 10px auto 3px auto;
132
  padding: 2px 1px 1px;
 
 
 
 
 
133
  color: #445;
134
+ background-color: #dedade;
135
+ box-shadow: 0 0 5px rgba(24, 24, 64, 0.9); /* 0 0 2px rgba(108,108,168, 0.8); */
136
+ -moz-box-shadow: 0 0 5px rgba(24, 24, 64, 0.9);
137
+ -webkit-box-shadow: 0 0 5px rgba(24, 24, 64, 0.9);
138
+ border: 1px solid #c9d9e9; /* #a5a5bb; #efebef; */
139
+ /* border-radius: 3px;
140
+ -webkit-border-radius: 3px;
141
+ -moz-border-radius: 3px; */
142
  }
143
  .main-tabs a, .main-tabs a:link {
144
  color: #00b;
211
  a.toggle-allcrono { width: 140px !important; }
212
  a.toggle-allcrono:hover, a.toggle-all:hover { background-color: #676767 !important; } */
213
  .sum-rec, .sum {
 
214
  margin: 0 0 2px;
215
+ padding: 1px 0 0 !important;
216
+ font-size: 11px;
217
  background-color: #f4f6f6;
218
  border: 1px solid #c7c7cc; /* 89a; */
219
  border-bottom: 3px solid #347;
 
 
 
 
 
220
  }
221
  .sum-nav, .sum-nav-mark, .sum-spy {
222
  position: relative;
225
  min-height: 50px;
226
  margin: 0 !important;
227
  padding: 22px 0 0;
228
+ font-size: 11px;
229
  border-top: 1px solid #fffcff;
230
  border-bottom: 1px solid #ddd;
231
  background: url("images/list-bg.png") repeat-x;
281
  clear:right;
282
  margin: 0 0 0 165px;
283
  padding: 0;
 
284
  line-height: 1.3em;
285
  }
286
  .sum-det-spy span {
287
  margin: 0;
288
  padding: 0;
289
  }
290
+ .det1 {
291
+ line-height: 1.5em;
292
+ display: block;
293
+ font-size: 14px;
294
+ }
295
+ .det2 {
296
+ line-height: 1.5em;
297
+ display: block;
298
+ }
299
+ .det3 { padding-left: 20px; }
300
  .det1 a { font-weight: bold; border-bottom: 1px solid !important; }
301
  .det2 a, .det2 a:link, .sum-det span.det2 a {
302
+ color: #349 !important; /*#00008c #00284a */
303
  }
304
  .det2 a:hover, .sum-det span.det2 a:hover {
305
+ color: #d54d22 !important;
306
  }
307
+ .det2 strong { color: #001616; font-weight: normal; }
308
  .agent strong { font-weight: bold; }
309
  .sum-box {
310
  float: left;
365
  line-height: 1.1em;
366
  }
367
  #toptenchart a { color: #464646; }
368
+ #toptenchart a:hover { color: #d54d22; }
369
  ul.charts {
370
  list-style-type: none;
371
  margin: 0;
394
  margin: 0 auto !important;
395
  clear:both;
396
  border-bottom: 0 none;
397
+ color: #445;
398
+ font-size: 11px;
399
  }
400
+ .detail-data a, .detail-data a:link { color: #349 !important; }
401
  .detail-data a:hover { color: #c64 !important; }
402
  .detail-data ul {
403
  list-style-type: none;
404
  width: 100%;
405
  margin: 0;
406
  padding: 3px 0 4px 0;
407
+ font-size: 11px;
408
  border-top: 1px solid #ddd;
409
  border-bottom: 1px solid #bbb;
410
  }
411
  ul.searcheng {
412
+ background-color: #abdbff; /* #adf; */
413
+ border-color: #9cd;
414
  }
415
  .searchimage {
416
+ background-color: #abbbff !important;
417
+ border-color: #9b9bff !important;
418
  }
419
  li.searcheng {
420
  list-style-type: none;
421
  width: 100%;
422
  padding: 0 4px 0 4px;
423
  display: inline;
 
 
424
  border-right: 1px dotted #8e8e8e;
425
  }
426
  ul.useragent {
427
  padding: 4px 0 2px 0;
428
+ background-color: #67a;
429
  border-bottom: 1px #ccc solid;
430
  }
431
  li.useragent {
432
  list-style-type: none;
433
  color: #f5f5f5;
 
434
  width: 100%;
435
  padding: 0 6px 0 0;
436
  text-align: center;
445
  width: 100%;
446
  padding: 0 6px 0 0;
447
  color: #eff;
 
448
  }
449
  ul.spider {
450
  background-color: #cc9980;
454
  list-style-type: none;
455
  display: inline;
456
  width: 100%;
 
457
  }
458
  li.spider { padding: 0 6px 0 0; color: #f5f5f5; }
459
  li.spider a, li.spider a:link { color: #f5f5f5 !important; }
460
  li.spider a:hover { color: #fda !important; }
461
+ ul.feed {
462
+ background-color: #edc !important;
463
+ border-color: #dcb !important;
464
+ }
465
  li.feed {
466
  padding: 0 4px 0 4px;
 
467
  border-right: 1px dotted #8e8e8e;
468
  }
469
  ul.agent { border-color: #ddd; }
471
  list-style-type: none;
472
  display: inline; width: 100%;
473
  padding: 0 4px 0 4px;
 
 
474
  border-right: 1px dotted #8e8e8e;
475
  }
476
  ul.users {
490
  display: inline;
491
  width: 100%;
492
  padding: 0 4px 0 4px;
 
 
493
  border-right: 1px dotted #8e8e8e;
494
  }
495
  ul.url {
506
  width: 100%;
507
  margin: 0;
508
  padding: 0;
 
 
509
  line-height: 2em;
510
  background-image: url("images/list-bg2.png");
511
  border-bottom: 1px #ddd solid;
515
  width: 100%;
516
  margin: 0;
517
  padding: 4px 0 6px 0;
 
 
518
  background-image: url("images/list-bg3.png");
519
  border-bottom: 1px #ddd solid;
520
  }
552
  margin: 5px auto !important;
553
  padding: 1px 1px 2px !important;
554
  background-color: #dedade;
555
+ box-shadow: 0 0 5px rgba(24, 24, 64, 0.9); /* 0 0 5px rgba(44,44,104, 0.9); */
556
+ -moz-box-shadow: 0 0 5px rgba(24, 24, 64, 0.9);
557
+ -webkit-box-shadow: 0 0 5px rgba(24, 24, 64, 0.9);
558
+ border: 1px solid #c9d9e9; /* #efebef; */
 
 
 
559
  }
560
  #spyContainer { clear: both; padding: 5px 5px 0 0; }
561
  #settings {
img/chart_add.png CHANGED
Binary file
img/chart_delete.png CHANGED
Binary file
img/cross.png CHANGED
Binary file
img/cross2.png CHANGED
Binary file
img/database_table.png CHANGED
Binary file
img/database_table2.png CHANGED
Binary file
img/error_add.png CHANGED
Binary file
img/error_delete.png CHANGED
Binary file
language/index.php ADDED
@@ -0,0 +1,4 @@
 
 
 
 
1
+ <?php
2
+ header('Status: 403 Forbidden');
3
+ header('HTTP/1.1 403 Forbidden');
4
+ ?>
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: tracker, tracking, statistics, analyze, web, realtime, stats, ajax, visitors, visits, online users, details, seo, admin, spy, visitors, widgets, widget, sidebar, monitor, stalker, detector, webmaster, tool, geolocation, chart, google!charts, spammers, exploits, injection, security, useragent, browser, spider, detection, pageviews
5
  Requires at least: 2.2
6
- Tested up to: 3.0.2
7
- Stable tag: 1.8.1
8
 
9
  Analyze your visitors traffic with real-time statistics, a lot of chronological information, charts, a sidebar widget.
10
 
@@ -67,21 +67,21 @@ For people with database space problem, WassUp has a few options to manage the d
67
  * Domains to exclude from referrers
68
  * Email alert for table growth
69
 
70
- DISCLAIMER: Use at your own risk. No warranty expressed or implied is provided.
71
 
72
  == Frequently Asked Questions ==
73
 
74
  = How do I add WassUp's chart to my admin dashboard? =
75
- Go to Wassup >> Wassup-Options submenu, select [General Setup] tab and check "Display small chart in dashboard", then click [Save Settings] button.
76
 
77
  = My Wordpress theme is not widget ready. Is it possible to add WassUp Widget to my site? =
78
  Yes. Simply insert the template tag, "wassup_sidebar()", into your theme's "sidebar.php" file.
79
 
80
  = How do I exclude a visitor from being recorded? =
81
- Go to Wassup >> Wassup-Options, select [Statistics Recording] tab and enter the IP address or username to be excluded in the appropriate text area.
82
 
83
  = How do I stop (temporarily) WassUp from recording new visits on my site? =
84
- Go to Wassup >> Wassup-Options, select [Statistics Recording] tab and uncheck "Enable/disable recording", then click [Save Settings] button.
85
 
86
  = Can Wassup record visits on a web site that is not Wordpress? =
87
  No. Wassup is a Wordpress-only plugin and requires at least Wordpress 2.2 to work.
@@ -110,18 +110,17 @@ You can find more screenshots at [http://www.wpwp.org](http://www.wpwp.org)
110
  == Installation ==
111
 
112
  = Installation: =
113
-
114
  1. Download the plugin, WassUp (Real-Time Visitors Tracking), to your local computer
115
  1. Unpack this plugin's zip or gz file with your preferred unzip/untar program or use the command line: `tar xzvf wassup.tar.gz` (linux)
116
  1. Upload the entire "wassup" directory to your `wp-content/plugins` directory on your host server
117
  1. Navigate to your site's Wordpress admin >> Plugins page
118
  1. Activate WassUp plugin
119
 
120
- OR you can install it using Wordpress automatic install by going to Plugins >> Add New >> and type "WassUp" plugin name
121
-
122
- = Upgrading: =
123
 
124
- 1. Check your current visitors count. If your site is busy, don't upgrade!
 
125
  1. Deactivate WassUp plugin in Wordpress admin >> Plugins page
126
  1. Delete "wassup" directory from `wp-content/plugins/` on your host server
127
  1. Download and unzip the new "WassUp" file to your local computer
@@ -129,33 +128,44 @@ OR you can install it using Wordpress automatic install by going to Plugins >> A
129
  1. Navigate to your site's Wordpress admin >> Plugins page
130
  1. Activate WassUp plugin
131
 
132
- OR you can upgrade it using Wordpress automatic upgrade in Wordpress admin >> Plugins page.
 
133
 
134
- IMPORTANT: Never upgrade WassUp when your site is busy. Interrupting WassUp in the midst of recording visitor data could cause a permanent lock or corruption of WassUp table that prevents any further recording. If your site is always busy, I recommend that you temporarily "disable recording" in WassUp >> Wassup-Options, [Statistics Recording] Tab, beforehand, or put your site into "maintenance mode" prior to WassUp upgrade.
 
135
 
136
  = Usage: =
137
-
138
- 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)
139
 
140
  IMPORTANT: WassUp is incompatible with page-based caching plugins such as "WP Super-Cache".
141
 
142
  == Changelog ==
143
 
 
 
 
 
 
 
 
 
 
 
 
 
 
144
  = 1.8.1 =
145
- = Urgent bugfix and code improvements upgrade =
146
- * fixed `set_time_limit` warning triggered when PHP is in safe_mode.
147
- * fixed `preg.match` compilation warning in 'wGetSpamRef' function.
148
- * disabled display of PHP warnings and other non-fatal errors within WassUp tracker function.
149
- * added important new upgrade information to `readme.txt` Installation instructions.
150
- * added a time period to "top ten" report heading.
151
- * minor style changes in wassup css.
152
 
153
  = 1.8 =
154
  = Important compatibility, feature and performance improvement upgrade =
155
  * new table, "wassup_meta", for data caching and extended tracking.
156
  * new web service, [freegeoip.net](http://freegeoip.net), for IP Geolocation. Thanks to [@AlexandreFiori](http://twitter.com/alexandrefiori) for giving us access to his API.
157
- * updated admin interface and menus.
158
- * updated browser, OS, and search engine detection.
159
  * improved security and performance.
160
  * improved compatibility with Wordpress 3.0-3.0.1 and security plugins.
161
  NOTE: Before installing "Wordpress Firewall", existing Wassup users must wait 2 full days after completing the upgrade to 1.8 for the old 'wassup_screen_res' cookie to expire in returning visitor's browsers.
@@ -178,8 +188,8 @@ IMPORTANT: WassUp is incompatible with page-based caching plugins such as "WP Su
178
  ...
179
  == Upgrade Notice ==
180
 
181
- = 1.8.1 =
182
- * Urgent bug fix upgrade plus code improvements. This upgrade is required for WassUp 1.8 users. Read plugin `Installation` instructions for important new upgrade information.
183
 
184
  == Infos ==
185
 
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: tracker, tracking, statistics, analyze, web, realtime, stats, ajax, visitors, visits, online users, details, seo, admin, spy, visitors, widgets, widget, sidebar, monitor, stalker, detector, webmaster, tool, geolocation, chart, google!charts, spammers, exploits, injection, security, useragent, browser, spider, detection, pageviews
5
  Requires at least: 2.2
6
+ Tested up to: 3.2.1
7
+ Stable tag: 1.8.2
8
 
9
  Analyze your visitors traffic with real-time statistics, a lot of chronological information, charts, a sidebar widget.
10
 
67
  * Domains to exclude from referrers
68
  * Email alert for table growth
69
 
70
+ IMPORTANT: WassUp is incompatible with page-based caching plugins such as "WP Super-Cache".
71
 
72
  == Frequently Asked Questions ==
73
 
74
  = How do I add WassUp's chart to my admin dashboard? =
75
+ Go to Wassup >> Options submenu, select [General Setup] tab and check "Display small chart in dashboard", then click [Save Settings] button.
76
 
77
  = My Wordpress theme is not widget ready. Is it possible to add WassUp Widget to my site? =
78
  Yes. Simply insert the template tag, "wassup_sidebar()", into your theme's "sidebar.php" file.
79
 
80
  = How do I exclude a visitor from being recorded? =
81
+ Go to Wassup >> Options, select [Statistics Recording] tab and enter the IP address or username to be excluded in the appropriate text area.
82
 
83
  = How do I stop (temporarily) WassUp from recording new visits on my site? =
84
+ Go to Wassup >> Options, select [Statistics Recording] tab and uncheck "Enable/disable recording", then click [Save Settings] button.
85
 
86
  = Can Wassup record visits on a web site that is not Wordpress? =
87
  No. Wassup is a Wordpress-only plugin and requires at least Wordpress 2.2 to work.
110
  == Installation ==
111
 
112
  = Installation: =
 
113
  1. Download the plugin, WassUp (Real-Time Visitors Tracking), to your local computer
114
  1. Unpack this plugin's zip or gz file with your preferred unzip/untar program or use the command line: `tar xzvf wassup.tar.gz` (linux)
115
  1. Upload the entire "wassup" directory to your `wp-content/plugins` directory on your host server
116
  1. Navigate to your site's Wordpress admin >> Plugins page
117
  1. Activate WassUp plugin
118
 
119
+ OR
120
+ You can install the plugin using Wordpress automatic install by navigating to Plugins >> Add New >> and type "WassUp" plugin name
 
121
 
122
+ = Upgrading (with caution**): =
123
+ 1. Check your current visitors count. If your site is busy, stop! Do the upgrade later when your site is less busy.
124
  1. Deactivate WassUp plugin in Wordpress admin >> Plugins page
125
  1. Delete "wassup" directory from `wp-content/plugins/` on your host server
126
  1. Download and unzip the new "WassUp" file to your local computer
128
  1. Navigate to your site's Wordpress admin >> Plugins page
129
  1. Activate WassUp plugin
130
 
131
+ OR
132
+ You can upgrade the plugin using Wordpress automatic upgrade in Wordpress Admin >> Plugins page.
133
 
134
+ IMPORTANT: **Upgrade with caution.
135
+ To safely upgrade WassUp when your site is busy, you should temporarily stop WassUp recording of new visitors manually (uncheck `Enable/disable recording` in WassUp >> Wassup-Options >> [Statistics Recording] Tab), then do the automatic upgrade, and afterwards, re-enable WassUp recording manually.
136
 
137
  = Usage: =
138
+ * 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)
 
139
 
140
  IMPORTANT: WassUp is incompatible with page-based caching plugins such as "WP Super-Cache".
141
 
142
  == Changelog ==
143
 
144
+ = 1.8.2 =
145
+ = Urgent bugfix, compatibility and feature improvement upgrade =
146
+ * fixed regex bug that caused a `preg.match` compilation warning error to display in some configurations.
147
+ * fixed a typo in `wassup_install` function and updated code to suppress warning errors when 1st table install attempt fails.
148
+ * added a javascript cookie to footer function for better screen resolution tracking in IE.
149
+ * added 'Google Web Preview' snapshot bot to list of known spiders.
150
+ * added code to detect faked referrer strings.
151
+ * added new referrer spammers and removed obsolete domains from spammer lists.
152
+ * added validity check to refresh timer to limit user input range to between 0 and 180 minutes (3 hours). An input value of 0 disables the timer.
153
+ * improved search engine/search phrase detection.
154
+ * improved namespace compatibility with other plugins.
155
+ * miscellaneous minor code and style changes.
156
+
157
  = 1.8.1 =
158
+ = Urgent bugfix and code improvement upgrade =
159
+ * fixed bug that caused `set_time_limit` and other warning errors to display to visitors.
160
+ * improved upgrade instructions in `readme.txt`.
161
+ * miscellaneous minor code changes.
 
 
 
162
 
163
  = 1.8 =
164
  = Important compatibility, feature and performance improvement upgrade =
165
  * new table, "wassup_meta", for data caching and extended tracking.
166
  * new web service, [freegeoip.net](http://freegeoip.net), for IP Geolocation. Thanks to [@AlexandreFiori](http://twitter.com/alexandrefiori) for giving us access to his API.
167
+ * new admin interface style.
168
+ * improved browser, OS, and search engine detection.
169
  * improved security and performance.
170
  * improved compatibility with Wordpress 3.0-3.0.1 and security plugins.
171
  NOTE: Before installing "Wordpress Firewall", existing Wassup users must wait 2 full days after completing the upgrade to 1.8 for the old 'wassup_screen_res' cookie to expire in returning visitor's browsers.
188
  ...
189
  == Upgrade Notice ==
190
 
191
+ = 1.8.2 =
192
+ * Urgent bug fix and feature improvement upgrade. Required for WassUp 1.8+ users. Read plugin install instructions for important upgrade information.
193
 
194
  == Infos ==
195
 
wassup.php CHANGED
@@ -2,8 +2,8 @@
2
  /*
3
  Plugin Name: WassUp
4
  Plugin URI: http://www.wpwp.org
5
- Description: Wordpress plugin to analyze your visitors traffic with real-time stats, charts, and a lot of chronological information. It has a sidebar widget that shows current online visitors and other statistics. For Wordpress 2.2 or higher. Caution: don't upgrade when your site is busy!
6
- Version: 1.8.1
7
  Author: Michele Marcucci, Helene Duncker
8
  Author URI: http://www.michelem.org/
9
  Disclaimer: Use at your own risk. No warranty expressed or implied is provided.
@@ -23,7 +23,7 @@ if (!defined('ABSPATH')) {
23
  }
24
  //wassup globals & constants
25
  global $wp_version, $current_user, $user_level, $wassup_options;
26
- $wassupversion="1.8.1";
27
  $wassup_cookie_value="";
28
  $debug_mode=false; //turn on debugging (global)...Use cautiously! Will display errors from all plugins, not just WassUp
29
  define('WASSUPDIR', dirname(__FILE__)); //new constant in v1.8
@@ -32,9 +32,6 @@ require_once(WASSUPDIR.'/lib/wassup.class.php');
32
  require_once(WASSUPDIR.'/lib/main.php');
33
  include_once(WASSUPDIR.'/lib/uadetector.class.php');
34
 
35
- //$wpurl = get_bloginfo('wpurl'); //no longer global (name conflict)
36
- //$blogurl = get_bloginfo('home'); //no longer global (name conflict)
37
-
38
  //WassUp works only in WP2.2 or higher
39
  if (version_compare($wp_version, '2.2', '<')) {
40
  if (function_exists('deactivate_plugins')) {
@@ -68,8 +65,7 @@ function wassup_install() {
68
 
69
  //#Add/update wassup settings in Wordpress options table
70
  $wassup_options = new wassupOptions; //#settings initialized here
71
- $table_name = (!empty($wassup_options->wassup_table))? $wassup_options->wassup_table : $wpdb->prefix . "wassup";
72
- $table_meta_name = $table_name."_meta";
73
 
74
  //# wassup should not be active during install
75
  $wassup_options->wassup_active = 0;
@@ -96,9 +92,9 @@ function wassup_install() {
96
  }
97
  }
98
  if (empty($wassup_options->wassup_table)) {
99
- $wassup_options->wassup_table = $table_name;
100
  }
101
- //New in v1.8: wassup_cache for caching of charts and geoip data
102
  //...wassup_cache automatically disabled for pre-1.8 wassup users
103
  if (!empty($wassup_options->wassup_version) && version_compare($wassup_options->wassup_version,'1.8','<')) {
104
  $wassup_options->wassup_cache = 0; //disabled
@@ -113,23 +109,27 @@ function wassup_install() {
113
  echo "file: ".WASSUPDIR.'/lib/upgrade.php does not exist!';
114
  exit (1);
115
  }
116
- $success = wassup_tableInstaller();
117
  //double-check that main table was installed
118
- if ($wpdb->get_var("SHOW TABLES LIKE '$table_name'") == $table_name){
119
- //New in v1.8: Reset 'dbengine' MySQL setting with each upgrade...because host server settings can change
 
120
  if (!empty($wassup_options->wassup_version)) { //upgrade only
121
  $wassup_options->wassup_dbengine = $wassup_options->getMySQLsetting('engine');
122
  }
123
- //New in v1.8: turn off wassup_cache if meta table does not exist
124
- if ($wassup_options->wassup_cache == 1 && $wpdb->get_var("SHOW TABLES LIKE '$table_meta_name'") != $table_meta_name){
125
- $wassup_options->wassup_cache = 0;
 
 
 
126
  }
127
 
128
- //TODO: Show warning when 'wp_footer()' does not exist in active theme template
129
- //New in v1.8: show warning when 'WP_CACHE' constant is set
130
  if (wassup_compatCheck("WP_CACHE") == true) {
131
- $wassup_options->wassup_alert_message = '<strong style="color:#c00;padding:5px;">'.__("WassUp cannot generate accurate statistics with page caching enabled. If your caching plugin stores your site as html pages, you must deactivate that plugin and remove \"WP_CACHE\" from \"wp_config.php\" to use WassUp effectively.","wassup").'</strong>';
132
  }
 
133
 
134
  //#Since v1.7: put current version# in options after update
135
  $wassup_options->wassup_version = $wassupversion;
@@ -142,7 +142,7 @@ function wassup_install() {
142
 
143
  } else {
144
  //main table not created - exit with error
145
- remove_option('wassup_settings');
146
  if (function_exists('deactivate_plugins')) {
147
  deactivate_plugins(__FILE__);
148
  }
@@ -179,14 +179,14 @@ function wassup_uninstall() {
179
  remove_action('wp_dashboard_setup', 'wassup_add_dashboard_widgets');
180
  }
181
  //purge wassup tables- WARNING: this is a permanent erase!!
182
- $table_name = (empty($wassup_settings['wassup_table'])?$wpdb->prefix.'wassup': $wassup_settings['wassup_table']);
183
- $table_tmp_name = $table_name."_tmp";
184
- $table_meta_name = $table_name."_meta";
185
- //$wpdb->query("DROP TABLE IF EXISTS $table_name"); //incorrectly causes an activation error in Wordpress
186
  //$wpdb->query("DROP TABLE IF EXISTS $table_tmp_name"); //incorrectly causes an activation error in Wordpress
187
  mysql_query("DROP TABLE IF EXISTS $table_meta_name");
188
  mysql_query("DROP TABLE IF EXISTS $table_tmp_name");
189
- mysql_query("DROP TABLE IF EXISTS $table_name");
190
 
191
  delete_option('wassup_settings');
192
  }
@@ -194,7 +194,6 @@ function wassup_uninstall() {
194
 
195
  /**
196
  * Output javascript in page head for wassup tracking
197
- * New in 1.8: renamed from 'wassup_meta_info' to 'wassup_head'
198
  * @param string (optional);
199
  * @return none;
200
  */
@@ -325,7 +324,7 @@ function wassup_init() {
325
  } // end function wassup_init
326
 
327
  //### Wassup Admin functions
328
- //New in v1.8: For improved WassUp performance, restrict admin hooks and
329
  // admin functions to admin pages only
330
  if (is_admin()) {
331
 
@@ -363,19 +362,35 @@ function add_wassup_css() {
363
  echo "\n".'<script type="text/javascript">var tb_pathToImage = "'.WASSUPURL.'/js/thickbox/loadingAnimation.gif";</script>';
364
  echo "\n".'<link rel="stylesheet" href="'.WASSUPURL.'/js/thickbox/thickbox.css'.'" type="text/css" />';
365
 
366
- if ($_GET['page'] != "wassup-options" AND $_GET['page'] != "wassup-spia") { ?>
 
367
  <script type='text/javascript'>
368
  //<![CDATA[
369
- var selftimerID = 0;
370
  function selfRefresh(){
371
  location.href='?<?php print $_SERVER['QUERY_STRING']; ?>';
372
  }
373
- selftimerID = setTimeout('selfRefresh()', <?php print ($wassup_options->wassup_refresh * 60000)+2000; ?>);
374
  //]]>
375
  </script>
 
 
 
 
 
 
 
 
 
 
 
376
 
 
 
 
377
  <script type='text/javascript'>
378
  //<![CDATA[
 
379
  var _countDowncontainer="0";
380
  var _currentSeconds=0;
381
  var paused = " *<?php _e('paused','wassup'); ?>* ";
@@ -406,17 +421,19 @@ function add_wassup_css() {
406
  function AddZero(num) {
407
  return ((num >= "0")&&(num < 10))?"0"+num:num+"";
408
  }
 
409
  //]]>
410
  </script>
411
  <script type="text/javascript">
412
  //<![CDATA[
413
  window.onload=WindowLoad;
414
  function WindowLoad(event) {
415
- ActivateCountDown("CountDownPanel", <?php print ($wassup_options->wassup_refresh * 60); ?>);
416
  }
417
  //]]>
418
  </script>
419
-
 
420
  <script type="text/javascript">
421
  //<![CDATA[
422
  jQuery(document).ready(function($){
@@ -509,7 +526,9 @@ jQuery(document).ready(function($){
509
  $("a.toggle-allcrono").html("<a href='#' class='toggle-allcrono boxed'><?php _e("Collapse Chronology", "wassup") ?></a>");
510
  return false;
511
  });
512
-
 
 
513
  $("#CountDownPanel").click(function(){ //Pause|Resume countdown
514
  var timeleft = _currentSeconds*1000;
515
  if (tickerID != 0) {
@@ -524,6 +543,8 @@ jQuery(document).ready(function($){
524
  $(this).css('color','#555');
525
  }
526
  });
 
 
527
  }); //end jQuery(document).ready
528
  //]]>
529
  </script>
@@ -627,11 +648,11 @@ function wassup_add_pages() {
627
  add_submenu_page(WASSUPFOLDER, __('Visitor Details', 'wassup'), __('Visitor Details', 'wassup'), $userlevel, WASSUPFOLDER); //<-- WASSUPFOLDER needed here for directory names that include a version number...
628
  add_submenu_page(WASSUPFOLDER, __('Spy Visitors', 'wassup'), __('SPY Visitors', 'wassup'), $userlevel, 'wassup-spia', 'WassUp');
629
  add_submenu_page(WASSUPFOLDER, __('Current Visitors Online', 'wassup'), __('Current Visitors Online', 'wassup'), $userlevel, 'wassup-online', 'WassUp');
630
- //New in 1.8: only admins can change WassUp options, so userlevel is always 8
631
  add_submenu_page(WASSUPFOLDER, __('Options', 'wassup'), __('Options', 'wassup'), 8, 'wassup-options', 'WassUp');
632
 
633
- //New in v1.8: Wassup Stats submenu on WP2.7+ dashboard menu
634
- //New in v1.8: "settings" added to action links on "plugins" page
635
  if (version_compare($wp_version, '2.5', '>=')) {
636
  if (version_compare($wp_version, '2.7', '>=')) {
637
  add_submenu_page('index.php', __('WassUp Stats'), __('WassUp Stats'), $userlevel, 'wassup-stats', 'WassUp');
@@ -681,8 +702,8 @@ function WassUp() {
681
  //for generating page link urls....
682
  $wpurl = get_bloginfo('wpurl');
683
  $blogurl = get_bloginfo('home');
684
- $table_name = (!empty($wassup_options->wassup_table)? $wassup_options->wassup_table: $wpdb->prefix . "wassup");
685
- $table_tmp_name = $table_name."_tmp";
686
 
687
  //"action_param" are preassigned "GET" parameters used for "action.php" external/ajax calls like "top ten"
688
  $action_param='&whash='.$wassup_options->whash;
@@ -716,9 +737,9 @@ function WassUp() {
716
  } elseif ($_POST['delete_filter_manual'] =="spam"){
717
  $delete_condition .= " AND spam>0";
718
  }
719
- $wpdb->query("DELETE FROM $table_name WHERE $delete_condition");
720
  $affected_recs = $wpdb->rows_affected + 0;
721
- //$wpdb->query("OPTIMIZE TABLE $table_name"); //table already optimized daily
722
  }
723
  if ($affected_recs > 0) {
724
  $admin_message = $affected_recs." ".__("records deleted successfully","wassup")."." ;
@@ -742,7 +763,7 @@ function WassUp() {
742
  } elseif ($_POST['delete_filter'] =="spam"){
743
  $delete_condition .= " AND spam>0";
744
  }
745
- $wpdb->query("DELETE FROM $table_name WHERE $delete_condition");
746
  $affected_recs = $wpdb->rows_affected + 0;
747
  if ($affected_recs > 0) {
748
  $admin_message = $affected_recs." ".__("records deleted successfully","wassup")."." ;
@@ -755,7 +776,7 @@ function WassUp() {
755
  } //end if numeric
756
  } //end if delete_auto
757
  if (!empty($_POST['wassup_empty'])) {
758
- $wpdb->query("DELETE FROM $table_name");
759
  if ($affected_recs > 0) {
760
  $affected_recs = $wpdb->rows_affected + 0;
761
  $admin_message = $affected_recs." ".__("records deleted successfully","wassup")."." ;
@@ -764,7 +785,7 @@ function WassUp() {
764
  }
765
  //TODO: "Optimize" operation locks table so it must finish in background to prevent browser close/timeout from interrupting the release of the lock, making it permanent.
766
  //if ($affected_recs > 1000) {
767
- // $wpdb->query("OPTIMIZE TABLE $table_name");
768
  //}
769
  $wassup_options->saveSettings();
770
  }
@@ -801,8 +822,12 @@ function WassUp() {
801
  $wassup_options->delete_filter = $_POST['delete_filter'];
802
  }
803
  $wassup_options->wassup_screen_res = $_POST['wassup_screen_res'];
804
- $wassup_options->wassup_refresh = $_POST['wassup_refresh'];
805
- $wassup_options->wassup_userlevel = $_POST['wassup_userlevel'];
 
 
 
 
806
  $wassup_options->wassup_dashboard_chart = $_POST['wassup_dashboard_chart'];
807
  $wassup_options->wassup_geoip_map = $_POST['wassup_geoip_map'];
808
  if (!empty($_POST['wassup_googlemaps_key'])) { //don't clear geoip key
@@ -917,7 +942,7 @@ function WassUp() {
917
  echo "\n"; ?>
918
  <ul id="wassup-menu">
919
  <li class="wassup-menu-link <?php echo $class_opt; ?>"><?php
920
- //New in v1.8: only administrators can view "wassup-options"
921
  if ($user_level >= 8) {
922
  echo '<a href="'.admin_url("admin.php?page=wassup-options").'">'.__('Options','wassup').'</a>';
923
  } else {
@@ -1117,7 +1142,7 @@ function WassUp() {
1117
  //display last few hits here. rest will be added by spia.js
1118
  $to_date = current_time('timestamp');
1119
  $from_date = ($to_date - 12*(60*60)); //display last 10 visits in 12 hours...
1120
- wassup_spiaView($from_date,0,$spytype,$table_name); ?>
1121
  <p style="height:2px;clear:both;"></p>
1122
  </div><!-- /spyContainer -->
1123
  <br />
@@ -1236,13 +1261,13 @@ function WassUp() {
1236
  // DELETE EVERY RECORD MARKED BY IP
1237
  //# Delete limited to selected date range only. -Helene D. 3/4/08.
1238
  if (!empty($_GET['deleteMARKED']) && $wassup_options->wmark == "1" && !empty($_GET['dip'])) {
1239
- $del_count = $wpdb->get_var("SELECT COUNT(ip) as deleted FROM $table_name WHERE ip='".attribute_escape($_GET['dip'])."' AND `timestamp` BETWEEN $from_date AND $to_date");
1240
  if (method_exists($wpdb,'prepare')) {
1241
- $wpdb->query($wpdb->prepare("DELETE FROM $table_name WHERE ip='%s' AND `timestamp` BETWEEN %s AND %s", $_GET['dip'], $from_date, $to_date));
1242
  } else {
1243
- $wpdb->query("DELETE FROM $table_name WHERE ip='".attribute_escape($_GET['dip'])."' AND `timestamp` BETWEEN $from_date AND $to_date");
1244
  }
1245
- $rec_count = $wpdb->get_var("SELECT COUNT(ip) as deleted FROM $table_name WHERE ip='".attribute_escape($_GET['dip'])."' AND `timestamp` BETWEEN $from_date AND $to_date"); //double-check deletions
1246
  $rec_deleted = ($del_count - $rec_count)." ".__('records deleted','wassup');
1247
  $wassup_options->showMessage($rec_deleted);
1248
  //echo '<p><strong>'.$rec_deleted.' '.__('records deleted','wassup').'</strong></p>';
@@ -1255,7 +1280,7 @@ function WassUp() {
1255
  echo "<!--heartbeat-->\n";
1256
 
1257
  // Instantiate class to count items
1258
- $Tot = New MainItems($table_name,$from_date,$to_date,$whereis,$limit);
1259
  $Tot->whereis = $whereis;
1260
  $Tot->Limit = $limit;
1261
  $Tot->WpUrl = $wpurl;
@@ -1384,7 +1409,8 @@ function WassUp() {
1384
  <td align="left" width="28">
1385
  <a href="#" onclick='selfRefresh()'><img src="<?php echo WASSUPURL; ?>/img/reload.png" id="refresh" alt="refresh screen" title="Refresh screen" /></a></td>
1386
  <td class="legend" align="left"><?php
1387
- echo __('Auto refresh in','wassup').'&nbsp;<span id="CountDownPanel"></span>&nbsp;'.__('seconds','wassup').'<br/>';
 
1388
  // Marked items - Refresh
1389
  if ($wassup_options->wmark == 1) {
1390
  echo '&nbsp; <a href="?'.attribute_escape($URLQuery.'&search='.$wassup_options->wip).'" title="'.__('Filter by marked IP','wassup').'"> '.__('Show marked items','wassup').' (<strong>'.$markedtot.'</strong> '.__("total").')</a> ';
@@ -1419,16 +1445,16 @@ function WassUp() {
1419
  <div class="search-ip" <?php if (empty($search)) echo 'style="display: none;"'; ?>>
1420
  <form action="" method="get">
1421
  <input type="hidden" name="page" value="<?php echo WASSUPFOLDER; ?>" /><?php
1422
- $filterargs=str_replace('&type='.$type,'',$stickyFilters);
1423
- if (!empty($filterargs)) {
1424
- $filters=explode('&',$filterargs);
1425
- foreach ($filters AS $filter) {
1426
- $filterval=explode('=',$filter);
1427
- if (!empty($filterval[0])) { ?>
1428
- <input type="hidden" name="<?php echo $filterval[0].'" value="'.$filterval[1]; ?>" /><?php
1429
  }
1430
  }
1431
- } ?>
1432
  <input type="text" size="25" name="search" value="<?php if ($search != "") print attribute_escape($search); ?>" /><input type="submit" name="submit-search" value="search" />
1433
  </form>
1434
  </div> <!-- /search-ip -->
@@ -1466,7 +1492,7 @@ function WassUp() {
1466
  }
1467
  if ($rk->hostname != "") $hostname = $rk->hostname;
1468
  else $hostname = "unknown";
1469
- //$numurl = $wpdb->get_var("SELECT COUNT(DISTINCT id) as numurl FROM $table_name WHERE wassup_id='".$rk->wassup_id."'");
1470
  $numurl = (int) $rk->page_hits;
1471
  echo "\n";
1472
  ?>
@@ -1628,7 +1654,7 @@ function WassUp() {
1628
  // Referer is a Spider or Bot
1629
  if ($rk->spider != "") {
1630
  if ($rk->feed != "") { ?>
1631
- <ul class="spider" style="background:#eeddcc;">
1632
  <li class="feed"><span class="indent-li-agent"><?php _e('FEEDREADER','wassup'); ?>: <strong><a href="#" class="toggleagent" id="<?php echo $rk->id; ?>"><?php print $rk->spider; ?></a></strong></span></li>
1633
  <?php if (is_numeric($rk->feed)) { ?>
1634
  <li class="feed"><span class="indent-li-agent"><?php _e('SUBSCRIBER(S)','wassup'); ?>: <strong><?php print (int)$rk->feed; ?></strong></span></li>
@@ -1684,9 +1710,9 @@ function WassUp() {
1684
  <ul class="url"><?php
1685
  if ($numurl > 1) {
1686
  //Important Note: list of urls visited is affected by browsers like Safari 4 which hits a page from both the user window and from it's "top sites" page, creating multiple duplicate records with distinct id's...
1687
- //$qryCD = $wpdb->get_results("SELECT `timestamp`, urlrequested FROM $table_name WHERE wassup_id='".$rk->wassup_id."' ORDER BY `timestamp`"); //duplicates possible
1688
- $qryCD = $wpdb->get_results("SELECT DISTINCT `timestamp`, urlrequested, agent FROM $table_name WHERE wassup_id='".$rk->wassup_id."' ORDER BY `timestamp`"); //no duplication, unless agent is differnt
1689
- //$qryCD = $wpdb->get_results("SELECT `id`, `timestamp`, urlrequested FROM $table_name WHERE wassup_id='".$rk->wassup_id."' ORDER BY `id`"); //id is sequential, so sort order == visit order...UPDATE: may not be in visit order because 'insert delayed' could make `id` out of sync with `timestamp`
1690
  $i=1;
1691
  $char_len = round($max_char_len*.92,0);
1692
  foreach ($qryCD as $cd) {
@@ -1769,152 +1795,9 @@ function WassUp() {
1769
  <?php
1770
  } //end function Wassup
1771
 
1772
- //New in v1.8: moved createTable/upgradeTable functions to 'upgrade.php' module where they are loaded only when needed to keep WassUp fast
1773
- //function wCreateTable($table_name="",$withcharset=true) {
1774
- // global $wpdb, $wassupversion, $current_user;
1775
- //
1776
- // $wassup_table = (!empty($wassup_options->wassup_table))? $wassup_options->wassup_table: $wpdb->prefix . "wassup";
1777
- //
1778
- // if (empty($table_name)) {
1779
- // $table_name = $wassup_table;
1780
- // }
1781
- // $table_tmp_name = $wassup_table."_tmp";
1782
- //
1783
- // //...Set default character set and collation (on new table)
1784
- // $charset_collate = '';
1785
- // //#don't do charset/collation when < MySQL 4.1 or when DB_CHARSET is undefined
1786
- // //Note: it is possible that table default charset !== WP database charset on preexisting MySQL database and tables (from WP2.3 or less) because old charsets persist after upgrades
1787
- // if ($withcharset && version_compare(mysql_get_server_info(),'4.1.0','>') && defined('DB_CHARSET') && !empty($wpdb->charset)) {
1788
- // $charset_collate = 'DEFAULT CHARACTER SET '.$wpdb->charset;
1789
- // //add collate only when charset is specified
1790
- // if (!empty($wpdb->collate)) {
1791
- // $charset_collate .= ' COLLATE '.$wpdb->collate;
1792
- // }
1793
- // }
1794
- //
1795
- // //wassup table structure
1796
- // $sql_createtable = "CREATE TABLE `$table_name` (
1797
- // `id` mediumint(11) NOT NULL auto_increment,
1798
- // `wassup_id` varchar(60) NOT NULL,
1799
- // `timestamp` varchar(20) NOT NULL,
1800
- // `ip` varchar(50) default NULL,
1801
- // `hostname` varchar(150) default NULL,
1802
- // `urlrequested` text,
1803
- // `agent` varchar(255) default NULL,
1804
- // `referrer` text,
1805
- // `search` varchar(255) default NULL,
1806
- // `searchpage` int(11) unsigned default '0',
1807
- // `os` varchar(15) default NULL,
1808
- // `browser` varchar(50) default NULL,
1809
- // `language` varchar(5) default NULL,
1810
- // `screen_res` varchar(15) default NULL,
1811
- // `searchengine` varchar(25) default NULL,
1812
- // `spider` varchar(50) default NULL,
1813
- // `feed` varchar(50) default NULL,
1814
- // `username` varchar(50) default NULL,
1815
- // `comment_author` varchar(50) default NULL,
1816
- // `spam` varchar(5) default '0',
1817
- // `url_wpid` varchar(50) default NULL,
1818
- // UNIQUE KEY `id` (`id`),
1819
- // KEY `idx_wassup` (`wassup_id`(32),`timestamp`),
1820
- // INDEX (`os`),
1821
- // INDEX (`browser`),
1822
- // INDEX `timestamp` (`timestamp`)) {$charset_collate};";
1823
- // //...Include a first record if new table (not temp table)
1824
- // $sql_firstrecord = '';
1825
- // if ($table_name != $table_tmp_name && $wpdb->get_var("SHOW TABLES LIKE '$table_name'") != $table_name) {
1826
- // if (!class_exists('UADetector'))
1827
- // include_once (dirname(__FILE__) . '/lib/uadetector.class.php');
1828
- // $ua = new UADetector;
1829
- // if (empty($current_user->user_login)) get_currentuserinfo();
1830
- // $logged_user = (!empty($current_user->user_login)? $current_user->user_login: "");
1831
- // $sql_firstrecord = sprintf("INSERT INTO $table_name (`wassup_id`, `timestamp`, `ip`, `hostname`, `urlrequested`, `agent`, `referrer`, `search`, `searchpage`, `os`, `browser`, `language`, `screen_res`, `searchengine`, `spider`, `feed`, `username`, `comment_author`, `spam`) VALUES ('%032s','%s','%s','%s','%s','%s','%s','','','%s','%s','','','','','','%s','','0')",
1832
- // 1, time()+(get_option(gmt_offset)*3600),
1833
- // '127.0.0.1', 'localhost',
1834
- // '[404] '.__('Welcome to WassUP','wassup'),
1835
- // $ua->agent . ' WassUp/'.$wassupversion.' (http://www.wpwp.org)',
1836
- // 'http://www.wpwp.org', $ua->os,
1837
- // trim($ua->name .' '. $ua->majorVersion($ua->version)),
1838
- // $logged_user);
1839
- // }
1840
- //
1841
- // if (!function_exists('dbDelta')) {
1842
- // if (file_exists(ABSPATH . 'wp-admin/includes/upgrade.php')) {
1843
- // require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
1844
- // } else { //deprecated since 2.5
1845
- // require_once( ABSPATH.'wp-admin/upgrade-functions.php');
1846
- // }
1847
- // }
1848
- // //...create/upgrade wassup table
1849
- // if (!empty($sql_firstrecord)) {
1850
- // $result = dbDelta(array($sql_createtable,$sql_firstrecord));
1851
- // } else {
1852
- // $result = dbDelta($sql_createtable);
1853
- // }
1854
- //
1855
- // //...return 'true' if table created successfully, false otherwise
1856
- // $retvalue=true;
1857
- // if ($wpdb->get_var("SHOW TABLES LIKE '$table_name'") != $table_name) {
1858
- //
1859
- // $retvalue=false;
1860
- // } else {
1861
- // if ($table_name != $table_tmp_name && version_compare(mysql_get_server_info(),'4.1.0','>')) {
1862
- // //'CREATE TABLE LIKE' syntax not supported in MySQL 4.1 or less
1863
- // $upgrade = dbDelta("CREATE TABLE $table_tmp_name LIKE {$table_name}");
1864
- // }
1865
- // }
1866
- // return $retvalue;
1867
- //} //end function wCreateTable
1868
-
1869
- //function wUpdateTable() { -- moved to "lib/upgrade.php"
1870
- // global $wpdb, $wassup_options, $wassupversion;
1871
- //
1872
- // $table_name = (!empty($wassup_options->wassup_table))? $wassup_options->wassup_table: $wpdb->prefix . "wassup";
1873
- // $table_tmp_name = $table_name."_tmp";
1874
- // // Drop and re-create all indices except 'id'
1875
- // //# get list of all wassup indices
1876
- // $qryresult = mysql_query("SHOW INDEX FROM {$table_name}");
1877
- // if ($qryresult) {
1878
- // $row_count = mysql_num_rows($qryresult);
1879
- // } else {
1880
- // $row_count = 0;
1881
- // }
1882
- // //# get the names of all indices
1883
- // $idx_names = array();
1884
- // $prev_key = ""; //names listed multiples times per columns in key
1885
- // if ($row_count > 1) {
1886
- // while ($row = mysql_fetch_array($qryresult,MYSQL_ASSOC)) {
1887
- // if ($row["Column_name"] != "id" && $row["Key_name"] != $prev_key) {
1888
- // $idx_names[] = $row["Key_name"];
1889
- // }
1890
- // $prev_key = $row["Key_name"];
1891
- // } //end while
1892
- // } //end if row_count
1893
- // mysql_free_result($qryresult);
1894
- // //# drop all the indices in $idx_names and drop temp table...
1895
- // //drop indices
1896
- // foreach ($idx_names AS $idx_drop) {
1897
- // mysql_query("DROP INDEX $idx_drop ON {$table_name}");
1898
- // }
1899
- //
1900
- // //...could take a long time, so run in background if window times out
1901
- // ignore_user_abort(1);
1902
- // mysql_query("DROP TABLE IF EXISTS $table_tmp_name");
1903
- //
1904
- // //call 'wCreateTable' to update table structure and rebuild indices using wordpress' 'dbdelta' function...
1905
- // if (wCreateTable($table_name,false)) {
1906
- // if ($wpdb->get_var("SHOW TABLES LIKE '$table_tmp_name'") != $table_tmp_name) {
1907
- // wCreateTable($table_tmp_name);
1908
- // }
1909
- // return true;
1910
- // } elseif ($wpdb->get_var("SHOW TABLES LIKE '$table_name'") == $table_name) {
1911
- // //table upgrade warning error
1912
- // return true;
1913
- // } else {
1914
- // //table upgrade fatal error
1915
- // return false;
1916
- // }
1917
- //} //end function wUpdateTable
1918
  } //end if is_admin
1919
 
1920
  //### Wassup Tracking functions
@@ -2148,6 +2031,7 @@ function wassupAppend() {
2148
  }
2149
  } else {
2150
  //do only fatal error reporting
 
2151
  $errlvl = @error_reporting();
2152
  if (!empty($errlvl)) {
2153
  @error_reporting(E_ERROR);
@@ -2156,9 +2040,9 @@ function wassupAppend() {
2156
 
2157
  $wpurl = get_bloginfo('wpurl');
2158
  $blogurl = get_option('home');
2159
- $table_name = (!empty($wassup_options->wassup_table)?$wassup_options->wassup_table:$wpdb->prefix."wassup");
2160
- $table_tmp_name = $table_name . "_tmp";
2161
- $table_cache = $table_name."_meta";
2162
  $wassup_rec = "";
2163
  $wassup_dbtask=array(); //for scheduled db operations
2164
 
@@ -2361,12 +2245,12 @@ function wassupAppend() {
2361
  // and get previous settings to prevent redundant checks on same
2362
  // visitor. Dup==same wassup_id, same URL, and timestamp <180 secs
2363
  $dup_urlrequest=0;
2364
- $pageviews=0;
2365
  $spamresult=0;
2366
  $wpdb->query("SET wait_timeout = 7"); //don't wait for slow responses
2367
  $recent = $wpdb->get_results("SELECT wassup_id, urlrequested, spam, screen_res, `timestamp`, browser, spider, os, feed, `language`, `agent`, `referrer` FROM ".$table_tmp_name." WHERE wassup_id='".$wassup_id."' AND `timestamp` >".($timestamp-180)." ORDER BY `timestamp` DESC");
2368
  if (!empty($recent)) {
2369
- $pageviews=count($recent);
2370
  //check 1st record only
2371
  //record is dup if same url (with 'wscr' removed) and same user-agent
2372
  if ($recent[0]->urlrequested == $urlRequested || $recent[0]->urlrequested == remove_query_arg('wscr',$urlRequested) || $recent[0]->urlrequested == "[404] $urlRequested") {
@@ -2384,7 +2268,7 @@ function wassupAppend() {
2384
  //check for screen resolution and update, if not previously recorded
2385
  //...queue the update because of "delayed insert"
2386
  if (empty($recent[0]->screen_res) && !empty($screen_res)) {
2387
- $wassup_dbtask[] = "UPDATE $table_name SET `screen_res`='$screen_res' WHERE `wassup_id`='$wassup_id' AND `screen_res`='' ";
2388
  }
2389
 
2390
  //get previously recorded settings for this visitor to
@@ -2411,26 +2295,26 @@ function wassupAppend() {
2411
  }
2412
  // Detect disguised spiders and harvesters by checking for
2413
  // excessive pageviews (threshold: 8+ views in < 16 secs)
2414
- if ($pageviews >7 && empty($spider)) {
2415
  $visitstart = $recent[7]->timestamp;
2416
  if (($timestamp - $recent[7]->timestamp) < 16) {
2417
  $is_spider=true;
2418
  $pagetest[]="$urlRequested";
2419
  //a spider is unlikely to hit same page 2+ times
2420
- foreach ($recent AS $pageview) {
2421
- if (stristr($pageview['urlrequested'],"robots.txt")!==false) {
2422
  $is_spider = true;
2423
  break;
2424
- } elseif (in_array($pageview['urlrequested'],$pagetest)) {
2425
  $is_spider = false;
2426
  break;
2427
  } else {
2428
- $pagetest[] = $pageview['urlrequested'];
2429
  }
2430
  }
2431
  if ($is_spider) {
2432
  $spider = __("Unknown Spider","wassup");
2433
- $wassup_dbtask[] = "UPDATE $table_name SET `spider`='$spider' WHERE `wassup_id`='$wassup_id' AND `spider`=''";
2434
  }
2435
  }
2436
  }
@@ -2469,7 +2353,7 @@ function wassupAppend() {
2469
  }
2470
  //retroactively update record for hack attempt
2471
  if ($spam == "3" && $spamresult == "0" && !empty($recent)) {
2472
- $wassup_dbtask[] = "UPDATE $table_name SET `spam`='3' WHERE `wassup_id`='$wassup_id' AND `spam`='0' ";
2473
  }
2474
 
2475
  //# Exclude duplicates and avoid redundant checks on multi-page visits
@@ -2591,8 +2475,13 @@ function wassupAppend() {
2591
  if ($spamComment->isRefSpam($referrer)>0) {
2592
  $spam = 2;
2593
  //check referer against a list of known spammers
2594
- } elseif (wGetSpamRef($referrer,$hostname) == true) {
2595
- $spam = 2;
 
 
 
 
 
2596
  }
2597
  }
2598
  }
@@ -2610,7 +2499,7 @@ function wassupAppend() {
2610
  if ($spammerIP > 0) { //is previous comment spam
2611
  $spam = 1;
2612
  }
2613
- //New in 1.8: spam if both URL and referrer are "comment" and browser is obsolete or Opera
2614
  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)) {
2615
  $spam=1;
2616
  }
@@ -2647,7 +2536,7 @@ function wassupAppend() {
2647
  //retroactively update visitor's hits as spam, in case late detection
2648
  if (!empty($recent) && !empty($spam) && $spamresult==0) {
2649
  //queue the update...
2650
- $wassup_dbtask[]="UPDATE $table_name SET `spam`='".$spam."' WHERE `wassup_id`='".$wassup_id."' AND `spam`='0' ";
2651
  }
2652
 
2653
  } //end if spam == 0
@@ -2743,7 +2632,7 @@ function wassupAppend() {
2743
  'url_wpid'=>$post_ID);
2744
 
2745
  // Insert the record into the db
2746
- insert_into_wp($table_name, $wassup_rec);
2747
  // Insert the record into the wassup_tmp table too
2748
  insert_into_wp($table_tmp_name, $wassup_rec);
2749
  // Delete records older then 3 minutes
@@ -2774,7 +2663,7 @@ function wassupAppend() {
2774
  if ($wassup_options->wassup_remind_flag == 1) {
2775
  // check database size ~every 5 minutes to keep wassup fast...
2776
  if ( (time())%299 == 0 ) {
2777
- $table_status = $wpdb->get_results("SHOW TABLE STATUS LIKE '$table_name'");
2778
  foreach ($table_status as $fstatus) {
2779
  $data_lenght = $fstatus->Data_length;
2780
  }
@@ -2812,8 +2701,8 @@ function wassupAppend() {
2812
  }
2813
  }
2814
  //#check before doing delete as it locks the table...
2815
- if ((int)$wpdb->get_var("SELECT COUNT(id) FROM $table_name WHERE $delete_condition") > 0) {
2816
- $wassup_dbtask[] = "DELETE FROM $table_name WHERE $delete_condition";
2817
  }
2818
  }
2819
  }
@@ -2827,7 +2716,7 @@ function wassupAppend() {
2827
  if ($timestamp > ($wassup_options->wassup_optimize+24*3600) && count($wassup_dbtask)==0) {
2828
  $wassup_options->wassup_optimize = current_time('timestamp');
2829
  $wassup_options->saveSettings();
2830
- $wassup_dbtask[] = "OPTIMIZE TABLE $table_name ";
2831
  }
2832
  }
2833
 
@@ -3061,6 +2950,8 @@ function wGetSE($referrer = null){
3061
  $lines = array(
3062
  "Google Images|images.google.|prev|start|hl||", //obsolete
3063
  "Google Images|/imgres?imgurl=|prev|start|hl||",
 
 
3064
  "Google|www.google.|q|cd|hl||",
3065
  "Google|www.google.|as_q|start|hl||", //advanced query
3066
  "Yahoo Images|images.search.yahoo.com|p||||",
@@ -3214,12 +3105,12 @@ function wGetSE($referrer = null){
3214
  $searchengine = $nome;
3215
  } //end if preg_match
3216
  } //end foreach
3217
- //search engine or key is not in list, so check for general search phrase instead
3218
  if (empty($search_phrase) && !empty($referrer)) {
3219
  //unset($nome,$domain,$key,$page,$lang);
3220
 
3221
  //Check for general search phrases
3222
- if (preg_match("#^https?://([^/]+).*[&?](q|s|search|searchfor|as_q|as_epq|query|keywords?|term|encquery)=([^&]+)#i",$referrer,$pcs) > 0) {
3223
  if (empty($searchengine)) {
3224
  $searchengine = trim(strtolower($pcs[1]));
3225
  }
@@ -3230,8 +3121,8 @@ function wGetSE($referrer = null){
3230
  }
3231
 
3232
  //Check separately for queries that use nonstandard search variable
3233
- // names to avoid retrieving values like "p=parameter" when "q=query" exists
3234
- } elseif(preg_match("#^https?://([^/]+).*(?:results|search|query).*[&?](aq|as|p|su|kw|k|qo|qp|qs|string)=([^&]+)#i",$referrer,$pcs) > 0) {
3235
  if (empty($searchengine)) {
3236
  $searchengine = trim(strtolower($pcs[1]));
3237
  }
@@ -3241,7 +3132,7 @@ function wGetSE($referrer = null){
3241
 
3242
  //do a separate check for page number, if not found above
3243
  if (!empty($search_phrase)) {
3244
- if (empty($searchpage) && preg_match("#[&\?](start|startpage|b|cd|first|stq|pi|page)[=/](\d+)#i",$referrer,$pcs)>0) {
3245
  $searchpage = $pcs[2];
3246
  }
3247
  }
@@ -3420,7 +3311,7 @@ function wGetSpider($agent="",$hostname="", $browser=""){
3420
  //Note: spaces are removed from UA string for the bot comparison
3421
  $crawler = trim($crawler);
3422
  if (empty($crawler)) {
3423
- $agent=str_replace(" ","",$ua);
3424
  $key = null;
3425
  // array format: "Spider Name|UserAgent keywords (no spaces)| Spider type (R=robot, B=Browser/downloader, F=feedreader, H=hacker, L=Link checker, M=siteMap generator, S=Spammer/email harvester, V=CSS/Html validator)
3426
  $lines = array("Googlebot|Googlebot/|R|",
@@ -3485,6 +3376,7 @@ function wGetSpider($agent="",$hostname="", $browser=""){
3485
  "Google Images|Googlebot-Image|R|",
3486
  "Google AdSense|Mediapartners-Google|R|",
3487
  "Google Desktop|GoogleDesktop|F|",
 
3488
  "GreatNews|GreatNews|F|",
3489
  "Gregarius|Gregarius/|F|",
3490
  "Gromit|Gromit/||",
@@ -3703,7 +3595,7 @@ function wGetSpider($agent="",$hostname="", $browser=""){
3703
  foreach($lines as $line_num => $spider) {
3704
  list($nome,$key,$crawlertype)=explode("|",$spider);
3705
  if ($key != "") {
3706
- if(strstr($agent,$key)===FALSE) {
3707
  continue;
3708
  } else {
3709
  $crawler = trim($nome);
@@ -3761,7 +3653,7 @@ function wGetSpider($agent="",$hostname="", $browser=""){
3761
 
3762
  //#get the visitor locale/language
3763
  function wGetLocale($language="",$hostname="",$referrer="") {
3764
- global $wpdb, $wassup_options;
3765
  $clocale="";
3766
  $country="";
3767
  $language = trim(strtolower($language));
@@ -3845,28 +3737,47 @@ function wGetLocale($language="",$hostname="",$referrer="") {
3845
 
3846
  /**
3847
  * Check referrer host (or visitor hostname) against a list of known
3848
- * referrer spammers and return "true" if match found.
3849
  * @param string (2)
3850
  * @return boolean
3851
  */
3852
  function wGetSpamRef($referrer,$hostname="") {
 
3853
  $referrer=attribute_escape(strip_tags(str_replace(" ","",html_entity_decode($referrer))));
 
 
3854
  $referrer_host = "";
3855
  $referrer_path = "";
 
3856
  if (empty($referrer) && !empty($hostname)) {
3857
  $referrer_host = $hostname;
3858
  $hostname="";
3859
- } else {
3860
- $url = parse_url(strtolower($referrer));
3861
- $referrer_host = $url['host'];
3862
- $referrer_path = $url['path'];
3863
- }
3864
- if (empty($referrer_host)) return false;
3865
-
3866
- $badhost=false;
3867
- $badhostfile= WASSUPDIR.'/badhosts.txt';
3868
- $key = null;
3869
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3870
  //compare against a list of recent referer spammers
3871
  $lines = array( '123666123\.com',
3872
  '209\.29\.25\.180',
@@ -3883,33 +3794,44 @@ function wGetSpamRef($referrer,$hostname="") {
3883
  'blueberryvitamin\.com',
3884
  'bumphero\.com',
3885
  'canadapharm\.atwebpages\.com',
 
 
3886
  'celebritydietdoctor\.com',
3887
  'celebrity\-?diets\.(com|org|net|info|biz)',
 
3888
  'clients\.your\-server\.de',
3889
  'couplesresortsonline\.com',
3890
- '*dietplan\.com',
3891
  'dreamworksdentalcenter\.com',
 
3892
  '\.ewebesales\.net',
3893
  'exactinsurance\.info',
3894
  'find1friend\.com',
3895
  'freefarmvillesecrets\.info',
3896
  'frenchforbeginnerssite\.com',
3897
  'gameskillinggames\.net',
 
3898
  'gskstudio\.com',
3899
  'h\-13\d\-\d{3}\.cssgroup\.lv',
3900
  'hearcam\.org',
3901
  'highheelsale\.com',
3902
  'homebasedaffiliatemarketingbusiness\.com',
 
3903
  'howgrowtall\.(com|info)',
3904
  'insurancebinder\.info',
3905
  'internetserviceteam\.com',
3906
  'intl\-alliance\.com',
3907
  'it\.n\-able\.com',
3908
  'justanimal\.com',
 
3909
  'lactoseintolerancesymptoms\.net',
 
 
3910
  'lockyourpicz\.com',
3911
  'luia\.ru',
 
3912
  'myhealthcare\.com',
 
3913
  'odcadide\.iinaa\.net',
3914
  'oma\-chat\-live\.de',
3915
  'onlinemarketpromo\.com',
@@ -3921,11 +3843,13 @@ function wGetSpamRef($referrer,$hostname="") {
3921
  'pinkyxxx\.org',
3922
  'play\-mp3\.com',
3923
  'poker\-review\.tk',
 
3924
  '21[89]\-124\-182\-64\.cust\.propagation\.net',
3925
  'prosperent\-adsense\-alternative\.blogspot\.com',
3926
  'ragedownloads\.info',
3927
  'red\-black\.ru',
3928
- '*sales\.net',
 
3929
  'seoindiawizard\.com',
3930
  'sexcam\-girls\.at',
3931
  'singlesvacationspackages\.com',
@@ -3937,6 +3861,8 @@ function wGetSpamRef($referrer,$hostname="") {
3937
  'thik\-chik\.com',
3938
  'thisweekendsmovies\.com',
3939
  'unassigned\.psychz\.net',
 
 
3940
  'vitamin\-d\-deficiency\-symptoms\.com',
3941
  'vpn\-privacy\.org',
3942
  'watchstock\.com',
@@ -3951,11 +3877,11 @@ function wGetSpamRef($referrer,$hostname="") {
3951
  );
3952
  foreach($lines as $spammer) {
3953
  if (!empty($spammer)) {
3954
- if(preg_match("/^{$spammer}\$/",$referrer_host)>0) {
3955
  // found it!
3956
  $badhost=true;
3957
  break 1;
3958
- } elseif(!empty($hostname) && preg_match("/(^|\.){$spammer}\$/i",$hostname)>0) {
3959
  $badhost=true;
3960
  break 1;
3961
  }
@@ -3965,7 +3891,7 @@ function wGetSpamRef($referrer,$hostname="") {
3965
  //# is spam and mark as such...
3966
  if (!$badhost) {
3967
  $lines = array( "allegra", "ambien", "ativan", "blackjack",
3968
- "bukakke", "casino","cialis", "celebrex",
3969
  "cumdripping", "cumeating", "cumfilled",
3970
  "cumpussy", "cumsucking", "cumswapping",
3971
  "diazepam", "diflucan", "drippingcum", "eatingcum",
@@ -3978,8 +3904,8 @@ function wGetSpamRef($referrer,$hostname="") {
3978
  "proscar", "pussycum", "sildenafil", "snowballing",
3979
  "suckingcum", "swappingcum", "swingers",
3980
  "tadalafil", "tigerspice", "tramadol", "ultram-",
3981
- "valium", "valtrex", "viagra", "vicodin",
3982
- "xanax", "xenical", "xxx-", "yandex",
3983
  "zoloft", "zovirax", "zanax"
3984
  );
3985
  foreach ($lines as $badreferrer) {
@@ -3999,11 +3925,11 @@ function wGetSpamRef($referrer,$hostname="") {
3999
  $lines = file($badhostfile,FILE_IGNORE_NEW_LINES);
4000
  foreach($lines as $spammer) {
4001
  if (!empty($spammer)) {
4002
- if (preg_match("/(^|\.){$spammer}\$/",$referrer_host)>0) {
4003
  // found it!
4004
  $badhost=true;
4005
  break 1;
4006
- } elseif(!empty($hostname) && preg_match("/(^|\.){$spammer}\$/i",$hostname)>0) {
4007
  $badhost=true;
4008
  break 1;
4009
  }
@@ -4037,20 +3963,20 @@ function export_wassup() {
4037
  global $wpdb, $wassup_options;
4038
 
4039
  if (empty($wassup_options->wassup_table)) {
4040
- $table_name = $wpdb->prefix . "wassup";
4041
  } else {
4042
- $table_name = $wassup_options->wassup_table;
4043
  }
4044
  $filename = 'wassup.' . gmdate('Y-m-d') . '.sql';
4045
 
4046
  //# check for records before exporting...
4047
- $numrecords = $wpdb->get_var("SELECT COUNT(wassup_id) FROM $table_name");
4048
  if ( $numrecords > 0 ) {
4049
  if ($numrecords > 10000) {
4050
  //...could take a long time, so run in background in case browser times out
4051
  ignore_user_abort(1);
4052
  }
4053
- $exportdata=backup_table("$table_name");
4054
 
4055
  if ($exportdata) {
4056
  //TODO: use compressed file transfer when zlib available...
@@ -4060,7 +3986,7 @@ function export_wassup() {
4060
  header('Content-Type: text/plain charset=' . get_option('blog_charset'), true);
4061
 
4062
  // Function is below
4063
- //backup_table($table_name);
4064
  echo $exportdata;
4065
 
4066
  die(); //sends output and flushes buffer
@@ -4206,10 +4132,21 @@ function microtime_float() { //replicates microtime(true) from PHP5
4206
  }
4207
  }
4208
 
4209
- // hook function to put a timestamp in page footer to check if page is cached - moved
4210
  function wassup_foot() {
4211
  global $wassup_options, $wassupversion, $debug_mode;
4212
  if ($wassup_options->wassup_active == "1") {
 
 
 
 
 
 
 
 
 
 
 
4213
  //Output a comment with a current timestamp to verify that page is not cached (i.e. visit is being recorded).
4214
  echo "<!--\n<p class=\"small\"> WassUp $wassupversion ".__("timestamp","wassup").": ".date('Y-m-d h:i:sA T')." (".gmdate('h:iA',time()+(get_option('gmt_offset')*3600)).")<br />\n";
4215
  echo __("If above timestamp is not current time, this page is cached","wassup").".</p> -->\n";
@@ -4217,7 +4154,7 @@ function wassup_foot() {
4217
  }
4218
 
4219
  /**
4220
- * New in v1.8: Perform db operations on wassup tables
4221
  * -Helene D. 2010-04-27
4222
  * @param array
4223
  * @return none
@@ -4248,7 +4185,7 @@ function wassup_scheduled_dbtask($dbtask) {
4248
 
4249
  // Security functions
4250
  /**
4251
- * New in v1.8: Check for obvious signs of script injection and hack attempts -Helene D. 2010-02-01
4252
  * @param none
4253
  * @return boolean
4254
  * @author Helene D.
@@ -4284,8 +4221,8 @@ function wassup_widget($wargs) {
4284
  $wassup_settings = get_option('wassup_settings');
4285
  $wpurl = get_bloginfo('wpurl');
4286
  $blogurl = get_bloginfo('home');
4287
- $table_name = $wassup_settings['wassup_table'];
4288
- $table_tmp_name = $table_name . "_tmp";
4289
  if ($wassup_settings['wassup_widget_title'] != "") $title = $wassup_settings['wassup_widget_title']; else $title = "Visitors Online";
4290
  if ($wassup_settings['wassup_widget_ulclass'] != "") $ulclass = $wassup_settings['wassup_widget_ulclass']; else $ulclass = "links";
4291
  if ($wassup_settings['wassup_widget_chars'] != "") $chars = $wassup_settings['wassup_widget_chars']; else $chars = "18";
@@ -4536,8 +4473,8 @@ function wassup_sidebar($before_widget='', $after_widget='', $before_title='', $
4536
  $wpurl = get_bloginfo('wpurl');
4537
  $blogurl = get_bloginfo('home');
4538
  $wassup_settings = get_option('wassup_settings');
4539
- $table_name = $wassup_settings['wassup_table'];
4540
- $table_tmp_name = $table_name . "_tmp";
4541
  if ($wtitle != "") $title = $wtitle; else $title = "Visitors Online";
4542
  if ($wulclass != "") $ulclass = $wulclass; else $ulclass = "links";
4543
  if ($wchars != "") $chars = $wchars; else $chars = "18";
@@ -4545,9 +4482,6 @@ function wassup_sidebar($before_widget='', $after_widget='', $before_title='', $
4545
  if ($wreflimit != "") $reflimit = $wreflimit; else $reflimit = "5";
4546
  if ($wtopbrlimit != "") $topbrlimit = $wtopbrlimit; else $topbrlimit = "5";
4547
  if ($wtoposlimit != "") $toposlimit = $wtoposlimit; else $toposlimit = "5";
4548
- //$table_name = $wpdb->prefix . "wassup";
4549
- //$table_tmp_name = $wpdb->prefix . "wassup_tmp";
4550
- //$wassup_settings = get_option('wassup_settings');
4551
  $to_date = current_time('timestamp');
4552
  $from_date = strtotime('-3 minutes', $to_date);
4553
 
@@ -4645,11 +4579,11 @@ function wassup_sidebar($before_widget='', $after_widget='', $before_title='', $
4645
  // function to print out a chart's preview in the dashboard for WP < 2.7 //moved
4646
  function wassupDashChart() {
4647
  global $wpdb, $wassup_options;
4648
- $table_name = $wassup_options->wassup_table;
4649
  if ($wassup_options->wassup_dashboard_chart == 1) {
4650
  $chart_type = ($wassup_options->wassup_chart_type >0)? $wassup_options->wassup_chart_type: "2";
4651
  $to_date = current_time("timestamp");
4652
- $Chart = New MainItems($table_name,"",$to_date);
4653
  $chart_url = $Chart->TheChart(1, "400", "125", "", $chart_type, "bg,s,efebef|c,lg,90,edffff,0,efebef,0.8", "dashboard"); ?>
4654
  <h3>WassUp <?php _e('Stats','wassup'); ?> <cite><a href="admin.php?page=<?php echo WASSUPFOLDER; ?>"><?php _e('More','wassup'); ?> &raquo;</a></cite></h3>
4655
  <div id="placeholder" align="left">
@@ -4662,12 +4596,12 @@ function wassupDashChart() {
4662
  function wassup_dashboard_widget_function() {
4663
  global $wpdb, $wassup_options, $user_level;
4664
 
4665
- $table_name = $wassup_options->wassup_table;
4666
- $table_tmp_name = $table_name."_tmp";
4667
  $to_date = current_time("timestamp");
4668
  $chart_type = ($wassup_options->wassup_chart_type >0)? $wassup_options->wassup_chart_type: "2";
4669
  $res = ((int)$wassup_options->wassup_screen_res-160)/2;
4670
- $Chart = New MainItems($table_name,"",$to_date);
4671
  $chart_url = $Chart->TheChart(1, $res, "180", "", $chart_type, "bg,s,efebef|c,lg,90,edffff,0,eae9e9,0.8", "dashboard");
4672
  $max_char_len= 40;
4673
  $wpurl = get_bloginfo('wpurl');
2
  /*
3
  Plugin Name: WassUp
4
  Plugin URI: http://www.wpwp.org
5
+ Description: Analyze your visitors traffic with real-time stats, charts, and a lot of chronological information. Includes a sidebar widget of current online visitors and other statistics and an admin dashboard widget with chart. For Wordpress 2.2 or higher. Caution: don't upgrade when your site is busy!
6
+ Version: 1.8.2
7
  Author: Michele Marcucci, Helene Duncker
8
  Author URI: http://www.michelem.org/
9
  Disclaimer: Use at your own risk. No warranty expressed or implied is provided.
23
  }
24
  //wassup globals & constants
25
  global $wp_version, $current_user, $user_level, $wassup_options;
26
+ $wassupversion="1.8.2";
27
  $wassup_cookie_value="";
28
  $debug_mode=false; //turn on debugging (global)...Use cautiously! Will display errors from all plugins, not just WassUp
29
  define('WASSUPDIR', dirname(__FILE__)); //new constant in v1.8
32
  require_once(WASSUPDIR.'/lib/main.php');
33
  include_once(WASSUPDIR.'/lib/uadetector.class.php');
34
 
 
 
 
35
  //WassUp works only in WP2.2 or higher
36
  if (version_compare($wp_version, '2.2', '<')) {
37
  if (function_exists('deactivate_plugins')) {
65
 
66
  //#Add/update wassup settings in Wordpress options table
67
  $wassup_options = new wassupOptions; //#settings initialized here
68
+ $wassup_table = (!empty($wassup_options->wassup_table))? $wassup_options->wassup_table : $wpdb->prefix . "wassup";
 
69
 
70
  //# wassup should not be active during install
71
  $wassup_options->wassup_active = 0;
92
  }
93
  }
94
  if (empty($wassup_options->wassup_table)) {
95
+ $wassup_options->wassup_table = $wassup_table;
96
  }
97
+ //wassup_cache for caching of charts and geoip data
98
  //...wassup_cache automatically disabled for pre-1.8 wassup users
99
  if (!empty($wassup_options->wassup_version) && version_compare($wassup_options->wassup_version,'1.8','<')) {
100
  $wassup_options->wassup_cache = 0; //disabled
109
  echo "file: ".WASSUPDIR.'/lib/upgrade.php does not exist!';
110
  exit (1);
111
  }
112
+ $success = @wassup_tableInstaller();
113
  //double-check that main table was installed
114
+ $wassup_table = (!empty($wassup_options->wassup_table))? $wassup_options->wassup_table : $wpdb->prefix . "wassup";
115
+ if ($wpdb->get_var("SHOW TABLES LIKE '$wassup_table'") == $wassup_table){
116
+ //Reset 'dbengine' MySQL setting with each upgrade...because host server settings can change
117
  if (!empty($wassup_options->wassup_version)) { //upgrade only
118
  $wassup_options->wassup_dbengine = $wassup_options->getMySQLsetting('engine');
119
  }
120
+ //turn off wassup_cache if meta table does not exist
121
+ $wassup_meta_table = $wassup_table . "_meta";
122
+ if ($wassup_options->wassup_cache == 1) {
123
+ if ($wpdb->get_var("SHOW TABLES LIKE '$wassup_meta_table'") != $wassup_meta_table) {
124
+ $wassup_options->wassup_cache = 0;
125
+ }
126
  }
127
 
128
+ //show warning when 'WP_CACHE' constant is set
 
129
  if (wassup_compatCheck("WP_CACHE") == true) {
130
+ $wassup_options->wassup_alert_message = '<strong style="color:#c00;padding:5px;">'.__("Page caching affect WassUp's ability to generate accurate statistics. If your cache plugin does whole page caching, WassUp won't run properly. Please deactivate that plugin and remove \"WP_CACHE\" from \"wp_config.php\".","wassup").'</strong>';
131
  }
132
+ //TODO: Show warning when 'wp_footer()' does not exist in active theme template (non-cache setups only)
133
 
134
  //#Since v1.7: put current version# in options after update
135
  $wassup_options->wassup_version = $wassupversion;
142
 
143
  } else {
144
  //main table not created - exit with error
145
+ delete_option('wassup_settings');
146
  if (function_exists('deactivate_plugins')) {
147
  deactivate_plugins(__FILE__);
148
  }
179
  remove_action('wp_dashboard_setup', 'wassup_add_dashboard_widgets');
180
  }
181
  //purge wassup tables- WARNING: this is a permanent erase!!
182
+ $wassup_table = (empty($wassup_settings['wassup_table'])?$wpdb->prefix.'wassup': $wassup_settings['wassup_table']);
183
+ $table_tmp_name = $wassup_table."_tmp";
184
+ $table_meta_name = $wassup_table."_meta";
185
+ //$wpdb->query("DROP TABLE IF EXISTS $wassup_table"); //incorrectly causes an activation error in Wordpress
186
  //$wpdb->query("DROP TABLE IF EXISTS $table_tmp_name"); //incorrectly causes an activation error in Wordpress
187
  mysql_query("DROP TABLE IF EXISTS $table_meta_name");
188
  mysql_query("DROP TABLE IF EXISTS $table_tmp_name");
189
+ mysql_query("DROP TABLE IF EXISTS $wassup_table");
190
 
191
  delete_option('wassup_settings');
192
  }
194
 
195
  /**
196
  * Output javascript in page head for wassup tracking
 
197
  * @param string (optional);
198
  * @return none;
199
  */
324
  } // end function wassup_init
325
 
326
  //### Wassup Admin functions
327
+ //For improved WassUp performance, restrict admin hooks and
328
  // admin functions to admin pages only
329
  if (is_admin()) {
330
 
362
  echo "\n".'<script type="text/javascript">var tb_pathToImage = "'.WASSUPURL.'/js/thickbox/loadingAnimation.gif";</script>';
363
  echo "\n".'<link rel="stylesheet" href="'.WASSUPURL.'/js/thickbox/thickbox.css'.'" type="text/css" />';
364
 
365
+ if ($_GET['page'] != "wassup-options" AND $_GET['page'] != "wassup-spia") {
366
+ ?>
367
  <script type='text/javascript'>
368
  //<![CDATA[
369
+ // var selftimerID = 0;
370
  function selfRefresh(){
371
  location.href='?<?php print $_SERVER['QUERY_STRING']; ?>';
372
  }
373
+ // selftimerID = setTimeout('selfRefresh()', <?php print ($wassup_options->wassup_refresh * 60000)+2000; ?>);
374
  //]]>
375
  </script>
376
+ <?php //New in 1.8.2: restrict refresh to range 0-180 minutes (3 hrs)
377
+ $wrefresh = 0;
378
+ if (!is_numeric($wassup_options->wassup_refresh) || $wassup_options->wassup_refresh < 0 || $wassup_options->wassup_refresh > 180) {
379
+ $wrefresh = 3; //3 minutes default;
380
+ } else {
381
+ $wrefresh = (int) $wassup_options->wassup_refresh;
382
+ }
383
+ //always refresh wassup-online page every 1-3 mins
384
+ if ($_GET['page'] == "wassup-online" && ($wrefresh > 3 || $wrefresh < 1)) {
385
+ $wrefresh = 3;
386
+ }
387
 
388
+ //don't add refresh timer javascript if refresh==0
389
+ if ($wrefresh > 0) {
390
+ echo "\n"; ?>
391
  <script type='text/javascript'>
392
  //<![CDATA[
393
+ var selftimerID = 0;
394
  var _countDowncontainer="0";
395
  var _currentSeconds=0;
396
  var paused = " *<?php _e('paused','wassup'); ?>* ";
421
  function AddZero(num) {
422
  return ((num >= "0")&&(num < 10))?"0"+num:num+"";
423
  }
424
+ selftimerID = setTimeout('selfRefresh()', <?php print ($wrefresh * 60000)+2000; ?>);
425
  //]]>
426
  </script>
427
  <script type="text/javascript">
428
  //<![CDATA[
429
  window.onload=WindowLoad;
430
  function WindowLoad(event) {
431
+ ActivateCountDown("CountDownPanel", <?php print ($wrefresh * 60); ?>);
432
  }
433
  //]]>
434
  </script>
435
+ <?php } //end if $wrefresh > 0
436
+ ?>
437
  <script type="text/javascript">
438
  //<![CDATA[
439
  jQuery(document).ready(function($){
526
  $("a.toggle-allcrono").html("<a href='#' class='toggle-allcrono boxed'><?php _e("Collapse Chronology", "wassup") ?></a>");
527
  return false;
528
  });
529
+ <?php
530
+ //don't add refresh timer click function if refresh==0
531
+ if ($wrefresh > 0) { ?>
532
  $("#CountDownPanel").click(function(){ //Pause|Resume countdown
533
  var timeleft = _currentSeconds*1000;
534
  if (tickerID != 0) {
543
  $(this).css('color','#555');
544
  }
545
  });
546
+ <?php } //end if $wrefresh > 0 (2nd)
547
+ ?>
548
  }); //end jQuery(document).ready
549
  //]]>
550
  </script>
648
  add_submenu_page(WASSUPFOLDER, __('Visitor Details', 'wassup'), __('Visitor Details', 'wassup'), $userlevel, WASSUPFOLDER); //<-- WASSUPFOLDER needed here for directory names that include a version number...
649
  add_submenu_page(WASSUPFOLDER, __('Spy Visitors', 'wassup'), __('SPY Visitors', 'wassup'), $userlevel, 'wassup-spia', 'WassUp');
650
  add_submenu_page(WASSUPFOLDER, __('Current Visitors Online', 'wassup'), __('Current Visitors Online', 'wassup'), $userlevel, 'wassup-online', 'WassUp');
651
+ //only admins can change WassUp options, so userlevel is always 8
652
  add_submenu_page(WASSUPFOLDER, __('Options', 'wassup'), __('Options', 'wassup'), 8, 'wassup-options', 'WassUp');
653
 
654
+ //add Wassup Stats submenu on WP2.7+ dashboard menu
655
+ //add "settings" to action links on "plugins" page
656
  if (version_compare($wp_version, '2.5', '>=')) {
657
  if (version_compare($wp_version, '2.7', '>=')) {
658
  add_submenu_page('index.php', __('WassUp Stats'), __('WassUp Stats'), $userlevel, 'wassup-stats', 'WassUp');
702
  //for generating page link urls....
703
  $wpurl = get_bloginfo('wpurl');
704
  $blogurl = get_bloginfo('home');
705
+ $wassup_table = (!empty($wassup_options->wassup_table)? $wassup_options->wassup_table: $wpdb->prefix . "wassup");
706
+ $table_tmp_name = $wassup_table."_tmp";
707
 
708
  //"action_param" are preassigned "GET" parameters used for "action.php" external/ajax calls like "top ten"
709
  $action_param='&whash='.$wassup_options->whash;
737
  } elseif ($_POST['delete_filter_manual'] =="spam"){
738
  $delete_condition .= " AND spam>0";
739
  }
740
+ $wpdb->query("DELETE FROM $wassup_table WHERE $delete_condition");
741
  $affected_recs = $wpdb->rows_affected + 0;
742
+ //$wpdb->query("OPTIMIZE TABLE $wassup_table"); //table already optimized daily
743
  }
744
  if ($affected_recs > 0) {
745
  $admin_message = $affected_recs." ".__("records deleted successfully","wassup")."." ;
763
  } elseif ($_POST['delete_filter'] =="spam"){
764
  $delete_condition .= " AND spam>0";
765
  }
766
+ $wpdb->query("DELETE FROM $wassup_table WHERE $delete_condition");
767
  $affected_recs = $wpdb->rows_affected + 0;
768
  if ($affected_recs > 0) {
769
  $admin_message = $affected_recs." ".__("records deleted successfully","wassup")."." ;
776
  } //end if numeric
777
  } //end if delete_auto
778
  if (!empty($_POST['wassup_empty'])) {
779
+ $wpdb->query("DELETE FROM $wassup_table");
780
  if ($affected_recs > 0) {
781
  $affected_recs = $wpdb->rows_affected + 0;
782
  $admin_message = $affected_recs." ".__("records deleted successfully","wassup")."." ;
785
  }
786
  //TODO: "Optimize" operation locks table so it must finish in background to prevent browser close/timeout from interrupting the release of the lock, making it permanent.
787
  //if ($affected_recs > 1000) {
788
+ // $wpdb->query("OPTIMIZE TABLE $wassup_table");
789
  //}
790
  $wassup_options->saveSettings();
791
  }
822
  $wassup_options->delete_filter = $_POST['delete_filter'];
823
  }
824
  $wassup_options->wassup_screen_res = $_POST['wassup_screen_res'];
825
+ //validate wassup_refresh option input
826
+ if (is_numeric($_POST['wassup_refresh']) && $_POST['wassup_refresh']>=0 && $_POST['wassup_refresh']<=180) {
827
+ $wassup_options->wassup_refresh = (int)$_POST['wassup_refresh'];
828
+ }
829
+
830
+ $wassup_options->wassup_userlevel = (int)$_POST['wassup_userlevel'];
831
  $wassup_options->wassup_dashboard_chart = $_POST['wassup_dashboard_chart'];
832
  $wassup_options->wassup_geoip_map = $_POST['wassup_geoip_map'];
833
  if (!empty($_POST['wassup_googlemaps_key'])) { //don't clear geoip key
942
  echo "\n"; ?>
943
  <ul id="wassup-menu">
944
  <li class="wassup-menu-link <?php echo $class_opt; ?>"><?php
945
+ //only administrators can view "wassup-options"
946
  if ($user_level >= 8) {
947
  echo '<a href="'.admin_url("admin.php?page=wassup-options").'">'.__('Options','wassup').'</a>';
948
  } else {
1142
  //display last few hits here. rest will be added by spia.js
1143
  $to_date = current_time('timestamp');
1144
  $from_date = ($to_date - 12*(60*60)); //display last 10 visits in 12 hours...
1145
+ wassup_spiaView($from_date,0,$spytype,$wassup_table); ?>
1146
  <p style="height:2px;clear:both;"></p>
1147
  </div><!-- /spyContainer -->
1148
  <br />
1261
  // DELETE EVERY RECORD MARKED BY IP
1262
  //# Delete limited to selected date range only. -Helene D. 3/4/08.
1263
  if (!empty($_GET['deleteMARKED']) && $wassup_options->wmark == "1" && !empty($_GET['dip'])) {
1264
+ $del_count = $wpdb->get_var("SELECT COUNT(ip) as deleted FROM $wassup_table WHERE ip='".attribute_escape($_GET['dip'])."' AND `timestamp` BETWEEN $from_date AND $to_date");
1265
  if (method_exists($wpdb,'prepare')) {
1266
+ $wpdb->query($wpdb->prepare("DELETE FROM $wassup_table WHERE ip='%s' AND `timestamp` BETWEEN %s AND %s", $_GET['dip'], $from_date, $to_date));
1267
  } else {
1268
+ $wpdb->query("DELETE FROM $wassup_table WHERE ip='".attribute_escape($_GET['dip'])."' AND `timestamp` BETWEEN $from_date AND $to_date");
1269
  }
1270
+ $rec_count = $wpdb->get_var("SELECT COUNT(ip) as deleted FROM $wassup_table WHERE ip='".attribute_escape($_GET['dip'])."' AND `timestamp` BETWEEN $from_date AND $to_date"); //double-check deletions
1271
  $rec_deleted = ($del_count - $rec_count)." ".__('records deleted','wassup');
1272
  $wassup_options->showMessage($rec_deleted);
1273
  //echo '<p><strong>'.$rec_deleted.' '.__('records deleted','wassup').'</strong></p>';
1280
  echo "<!--heartbeat-->\n";
1281
 
1282
  // Instantiate class to count items
1283
+ $Tot = New MainItems($wassup_table,$from_date,$to_date,$whereis,$limit);
1284
  $Tot->whereis = $whereis;
1285
  $Tot->Limit = $limit;
1286
  $Tot->WpUrl = $wpurl;
1409
  <td align="left" width="28">
1410
  <a href="#" onclick='selfRefresh()'><img src="<?php echo WASSUPURL; ?>/img/reload.png" id="refresh" alt="refresh screen" title="Refresh screen" /></a></td>
1411
  <td class="legend" align="left"><?php
1412
+ echo __('Auto refresh in','wassup').'&nbsp;<span id="CountDownPanel">00</span>&nbsp;'.__('seconds','wassup');
1413
+ echo '<br/>';
1414
  // Marked items - Refresh
1415
  if ($wassup_options->wmark == 1) {
1416
  echo '&nbsp; <a href="?'.attribute_escape($URLQuery.'&search='.$wassup_options->wip).'" title="'.__('Filter by marked IP','wassup').'"> '.__('Show marked items','wassup').' (<strong>'.$markedtot.'</strong> '.__("total").')</a> ';
1445
  <div class="search-ip" <?php if (empty($search)) echo 'style="display: none;"'; ?>>
1446
  <form action="" method="get">
1447
  <input type="hidden" name="page" value="<?php echo WASSUPFOLDER; ?>" /><?php
1448
+ if (!empty($stickyFilters)) {
1449
+ $wfilterargs=wGetQueryPairs($stickyFilters);
1450
+ if (!empty($wfilterargs)) {
1451
+ foreach ($w_filterargs AS $wfilter) {
1452
+ $wfilterval=explode('=',$wfilter);
1453
+ if (!empty($wfilterval[0]) && $wfilterval[0]!= 'type') { ?>
1454
+ <input type="hidden" name="<?php echo $wfilterval[0].'" value="'.$wfilterval[1]; ?>" /><?php
1455
  }
1456
  }
1457
+ } } ?>
1458
  <input type="text" size="25" name="search" value="<?php if ($search != "") print attribute_escape($search); ?>" /><input type="submit" name="submit-search" value="search" />
1459
  </form>
1460
  </div> <!-- /search-ip -->
1492
  }
1493
  if ($rk->hostname != "") $hostname = $rk->hostname;
1494
  else $hostname = "unknown";
1495
+ //$numurl = $wpdb->get_var("SELECT COUNT(DISTINCT id) as numurl FROM $wassup_table WHERE wassup_id='".$rk->wassup_id."'");
1496
  $numurl = (int) $rk->page_hits;
1497
  echo "\n";
1498
  ?>
1654
  // Referer is a Spider or Bot
1655
  if ($rk->spider != "") {
1656
  if ($rk->feed != "") { ?>
1657
+ <ul class="spider feed">
1658
  <li class="feed"><span class="indent-li-agent"><?php _e('FEEDREADER','wassup'); ?>: <strong><a href="#" class="toggleagent" id="<?php echo $rk->id; ?>"><?php print $rk->spider; ?></a></strong></span></li>
1659
  <?php if (is_numeric($rk->feed)) { ?>
1660
  <li class="feed"><span class="indent-li-agent"><?php _e('SUBSCRIBER(S)','wassup'); ?>: <strong><?php print (int)$rk->feed; ?></strong></span></li>
1710
  <ul class="url"><?php
1711
  if ($numurl > 1) {
1712
  //Important Note: list of urls visited is affected by browsers like Safari 4 which hits a page from both the user window and from it's "top sites" page, creating multiple duplicate records with distinct id's...
1713
+ //$qryCD = $wpdb->get_results("SELECT `timestamp`, urlrequested FROM $wassup_table WHERE wassup_id='".$rk->wassup_id."' ORDER BY `timestamp`"); //duplicates possible
1714
+ $qryCD = $wpdb->get_results("SELECT DISTINCT `timestamp`, urlrequested, agent FROM $wassup_table WHERE wassup_id='".$rk->wassup_id."' ORDER BY `timestamp`"); //no duplication, unless agent is differnt
1715
+ //$qryCD = $wpdb->get_results("SELECT `id`, `timestamp`, urlrequested FROM $wassup_table WHERE wassup_id='".$rk->wassup_id."' ORDER BY `id`"); //id is sequential, so sort order == visit order...UPDATE: may not be in visit order because 'insert delayed' could make `id` out of sync with `timestamp`
1716
  $i=1;
1717
  $char_len = round($max_char_len*.92,0);
1718
  foreach ($qryCD as $cd) {
1795
  <?php
1796
  } //end function Wassup
1797
 
1798
+ //Since v.1.8: createTable/upgradeTable functions were moved to
1799
+ // 'upgrade.php' module where they are loaded only when needed to keep
1800
+ // WassUp fast
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1801
  } //end if is_admin
1802
 
1803
  //### Wassup Tracking functions
2031
  }
2032
  } else {
2033
  //do only fatal error reporting
2034
+ // note: this won't work if PHP in safe mode
2035
  $errlvl = @error_reporting();
2036
  if (!empty($errlvl)) {
2037
  @error_reporting(E_ERROR);
2040
 
2041
  $wpurl = get_bloginfo('wpurl');
2042
  $blogurl = get_option('home');
2043
+ $wassup_table = (!empty($wassup_options->wassup_table)?$wassup_options->wassup_table:$wpdb->prefix."wassup");
2044
+ $table_tmp_name = $wassup_table . "_tmp";
2045
+ $table_cache = $wassup_table."_meta";
2046
  $wassup_rec = "";
2047
  $wassup_dbtask=array(); //for scheduled db operations
2048
 
2245
  // and get previous settings to prevent redundant checks on same
2246
  // visitor. Dup==same wassup_id, same URL, and timestamp <180 secs
2247
  $dup_urlrequest=0;
2248
+ $w_pageviews=0;
2249
  $spamresult=0;
2250
  $wpdb->query("SET wait_timeout = 7"); //don't wait for slow responses
2251
  $recent = $wpdb->get_results("SELECT wassup_id, urlrequested, spam, screen_res, `timestamp`, browser, spider, os, feed, `language`, `agent`, `referrer` FROM ".$table_tmp_name." WHERE wassup_id='".$wassup_id."' AND `timestamp` >".($timestamp-180)." ORDER BY `timestamp` DESC");
2252
  if (!empty($recent)) {
2253
+ $w_pageviews=count($recent);
2254
  //check 1st record only
2255
  //record is dup if same url (with 'wscr' removed) and same user-agent
2256
  if ($recent[0]->urlrequested == $urlRequested || $recent[0]->urlrequested == remove_query_arg('wscr',$urlRequested) || $recent[0]->urlrequested == "[404] $urlRequested") {
2268
  //check for screen resolution and update, if not previously recorded
2269
  //...queue the update because of "delayed insert"
2270
  if (empty($recent[0]->screen_res) && !empty($screen_res)) {
2271
+ $wassup_dbtask[] = "UPDATE $wassup_table SET `screen_res`='$screen_res' WHERE `wassup_id`='$wassup_id' AND `screen_res`='' ";
2272
  }
2273
 
2274
  //get previously recorded settings for this visitor to
2295
  }
2296
  // Detect disguised spiders and harvesters by checking for
2297
  // excessive pageviews (threshold: 8+ views in < 16 secs)
2298
+ if ($w_pageviews >7 && empty($spider)) {
2299
  $visitstart = $recent[7]->timestamp;
2300
  if (($timestamp - $recent[7]->timestamp) < 16) {
2301
  $is_spider=true;
2302
  $pagetest[]="$urlRequested";
2303
  //a spider is unlikely to hit same page 2+ times
2304
+ foreach ($recent AS $w_pgview) {
2305
+ if (stristr($w_pgview->urlrequested,"robots.txt")!==false) {
2306
  $is_spider = true;
2307
  break;
2308
+ } elseif (in_array($w_pgview->urlrequested,$pagetest)) {
2309
  $is_spider = false;
2310
  break;
2311
  } else {
2312
+ $pagetest[] = $w_pgview->urlrequested;
2313
  }
2314
  }
2315
  if ($is_spider) {
2316
  $spider = __("Unknown Spider","wassup");
2317
+ $wassup_dbtask[] = "UPDATE $wassup_table SET `spider`='$spider' WHERE `wassup_id`='$wassup_id' AND `spider`=''";
2318
  }
2319
  }
2320
  }
2353
  }
2354
  //retroactively update record for hack attempt
2355
  if ($spam == "3" && $spamresult == "0" && !empty($recent)) {
2356
+ $wassup_dbtask[] = "UPDATE $wassup_table SET `spam`='3' WHERE `wassup_id`='$wassup_id' AND `spam`='0' ";
2357
  }
2358
 
2359
  //# Exclude duplicates and avoid redundant checks on multi-page visits
2475
  if ($spamComment->isRefSpam($referrer)>0) {
2476
  $spam = 2;
2477
  //check referer against a list of known spammers
2478
+ } else {
2479
+ if ($debug_mode) {
2480
+ $isspam = wGetSpamRef($referrer,$hostname);
2481
+ } else {
2482
+ $isspam = @wGetSpamRef($referrer,$hostname);
2483
+ }
2484
+ if ($isspam) $spam = 2;
2485
  }
2486
  }
2487
  }
2499
  if ($spammerIP > 0) { //is previous comment spam
2500
  $spam = 1;
2501
  }
2502
+ //set as spam if both URL and referrer are "comment" and browser is obsolete or Opera
2503
  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)) {
2504
  $spam=1;
2505
  }
2536
  //retroactively update visitor's hits as spam, in case late detection
2537
  if (!empty($recent) && !empty($spam) && $spamresult==0) {
2538
  //queue the update...
2539
+ $wassup_dbtask[]="UPDATE $wassup_table SET `spam`='".$spam."' WHERE `wassup_id`='".$wassup_id."' AND `spam`='0' ";
2540
  }
2541
 
2542
  } //end if spam == 0
2632
  'url_wpid'=>$post_ID);
2633
 
2634
  // Insert the record into the db
2635
+ insert_into_wp($wassup_table, $wassup_rec);
2636
  // Insert the record into the wassup_tmp table too
2637
  insert_into_wp($table_tmp_name, $wassup_rec);
2638
  // Delete records older then 3 minutes
2663
  if ($wassup_options->wassup_remind_flag == 1) {
2664
  // check database size ~every 5 minutes to keep wassup fast...
2665
  if ( (time())%299 == 0 ) {
2666
+ $table_status = $wpdb->get_results("SHOW TABLE STATUS LIKE '$wassup_table'");
2667
  foreach ($table_status as $fstatus) {
2668
  $data_lenght = $fstatus->Data_length;
2669
  }
2701
  }
2702
  }
2703
  //#check before doing delete as it locks the table...
2704
+ if ((int)$wpdb->get_var("SELECT COUNT(id) FROM $wassup_table WHERE $delete_condition") > 0) {
2705
+ $wassup_dbtask[] = "DELETE FROM $wassup_table WHERE $delete_condition";
2706
  }
2707
  }
2708
  }
2716
  if ($timestamp > ($wassup_options->wassup_optimize+24*3600) && count($wassup_dbtask)==0) {
2717
  $wassup_options->wassup_optimize = current_time('timestamp');
2718
  $wassup_options->saveSettings();
2719
+ $wassup_dbtask[] = "OPTIMIZE TABLE $wassup_table ";
2720
  }
2721
  }
2722
 
2950
  $lines = array(
2951
  "Google Images|images.google.|prev|start|hl||", //obsolete
2952
  "Google Images|/imgres?imgurl=|prev|start|hl||",
2953
+ "Google Images|.google.com/images?|q|cd|hl||",
2954
+ "Google Mobile|google.com/m/|q|cd|hl||",
2955
  "Google|www.google.|q|cd|hl||",
2956
  "Google|www.google.|as_q|start|hl||", //advanced query
2957
  "Yahoo Images|images.search.yahoo.com|p||||",
3105
  $searchengine = $nome;
3106
  } //end if preg_match
3107
  } //end foreach
3108
+ //search engine or key is not in list, so check for search phrase instead
3109
  if (empty($search_phrase) && !empty($referrer)) {
3110
  //unset($nome,$domain,$key,$page,$lang);
3111
 
3112
  //Check for general search phrases
3113
+ if (preg_match("#^https?://([^/]+).*[&?](q|search|searchfor|as_q|as_epq|query|keywords?|term|text|encquery)=([^&]+)#i",$referrer,$pcs) > 0) {
3114
  if (empty($searchengine)) {
3115
  $searchengine = trim(strtolower($pcs[1]));
3116
  }
3121
  }
3122
 
3123
  //Check separately for queries that use nonstandard search variable
3124
+ // to avoid retrieving values like "p=parameter" when "q=query" exists
3125
+ } elseif(preg_match("#^https?://([^/]+).*(?:results|search|query).*[&?](aq|as|p|su|s|kw|k|qo|qp|qs|string)=([^&]+)#i",$referrer,$pcs) > 0) {
3126
  if (empty($searchengine)) {
3127
  $searchengine = trim(strtolower($pcs[1]));
3128
  }
3132
 
3133
  //do a separate check for page number, if not found above
3134
  if (!empty($search_phrase)) {
3135
+ if (empty($searchpage) && preg_match("#[&\?](start|startpage|b|cd|first|stq|p|pi|page)[=/](\d+)#i",$referrer,$pcs)>0) {
3136
  $searchpage = $pcs[2];
3137
  }
3138
  }
3311
  //Note: spaces are removed from UA string for the bot comparison
3312
  $crawler = trim($crawler);
3313
  if (empty($crawler)) {
3314
+ $uagent=str_replace(" ","",$ua);
3315
  $key = null;
3316
  // array format: "Spider Name|UserAgent keywords (no spaces)| Spider type (R=robot, B=Browser/downloader, F=feedreader, H=hacker, L=Link checker, M=siteMap generator, S=Spammer/email harvester, V=CSS/Html validator)
3317
  $lines = array("Googlebot|Googlebot/|R|",
3376
  "Google Images|Googlebot-Image|R|",
3377
  "Google AdSense|Mediapartners-Google|R|",
3378
  "Google Desktop|GoogleDesktop|F|",
3379
+ "Google Web Preview|GoogleWebPreview|R|",
3380
  "GreatNews|GreatNews|F|",
3381
  "Gregarius|Gregarius/|F|",
3382
  "Gromit|Gromit/||",
3595
  foreach($lines as $line_num => $spider) {
3596
  list($nome,$key,$crawlertype)=explode("|",$spider);
3597
  if ($key != "") {
3598
+ if(strstr($uagent,$key)===FALSE) {
3599
  continue;
3600
  } else {
3601
  $crawler = trim($nome);
3653
 
3654
  //#get the visitor locale/language
3655
  function wGetLocale($language="",$hostname="",$referrer="") {
3656
+ global $wpdb, $wassup_options, $debug_mode;
3657
  $clocale="";
3658
  $country="";
3659
  $language = trim(strtolower($language));
3737
 
3738
  /**
3739
  * Check referrer host (or visitor hostname) against a list of known
3740
+ * referrer spammers and return "true" if match or if faked
3741
  * @param string (2)
3742
  * @return boolean
3743
  */
3744
  function wGetSpamRef($referrer,$hostname="") {
3745
+ global $debug_mode;
3746
  $referrer=attribute_escape(strip_tags(str_replace(" ","",html_entity_decode($referrer))));
3747
+ $badhost=false;
3748
+ //$key = null;
3749
  $referrer_host = "";
3750
  $referrer_path = "";
3751
+
3752
  if (empty($referrer) && !empty($hostname)) {
3753
  $referrer_host = $hostname;
3754
  $hostname="";
3755
+ } elseif (!empty($referrer)) {
3756
+ $rurl = parse_url(strtolower($referrer));
3757
+ if (isset($rurl['host'])) {
3758
+ $referrer_host = $rurl['host'];
3759
+ //$referrer_path = $rurl['path'];
3760
+ $thissite = parse_url(get_option('home'));
3761
+ if (isset($thissite['host']) && $referrer_host == $thissite['host']) {
3762
+ $referrer_host = "";
3763
+ }
3764
+ } else { //faked referrer string
3765
+ $badhost=true;
3766
+ }
3767
+ //#a shortened URL is likely FAKED referrer string!
3768
+ if (!$badhost && !empty($referrer_host)) {
3769
+ $url_shorteners = array('bit.ly', 'cli.gs',
3770
+ 'goo.gl', 'is.gd',
3771
+ 'shorturl.com', 'snurl.com',
3772
+ 'tinyurl.com','tr.im');
3773
+ if(in_array($referrer_host,$url_shorteners)) {
3774
+ $badhost=true;
3775
+ }
3776
+ }
3777
+ } //end elseif
3778
+ if (empty($referrer_host) || $badhost) return $badhost;
3779
+
3780
+ if ($debug_mode) echo "\$referrer_host = $referrer_host.\n";
3781
  //compare against a list of recent referer spammers
3782
  $lines = array( '123666123\.com',
3783
  '209\.29\.25\.180',
3794
  'blueberryvitamin\.com',
3795
  'bumphero\.com',
3796
  'canadapharm\.atwebpages\.com',
3797
+ 'candy\.com',
3798
+ 'carartexpert\.com',
3799
  'celebritydietdoctor\.com',
3800
  'celebrity\-?diets\.(com|org|net|info|biz)',
3801
+ 'chocolate\.com',
3802
  'clients\.your\-server\.de',
3803
  'couplesresortsonline\.com',
3804
+ '.*dietplan\.com',
3805
  'dreamworksdentalcenter\.com',
3806
+ 'duunot\.eu',
3807
  '\.ewebesales\.net',
3808
  'exactinsurance\.info',
3809
  'find1friend\.com',
3810
  'freefarmvillesecrets\.info',
3811
  'frenchforbeginnerssite\.com',
3812
  'gameskillinggames\.net',
3813
+ 'globalringtones\.net',
3814
  'gskstudio\.com',
3815
  'h\-13\d\-\d{3}\.cssgroup\.lv',
3816
  'hearcam\.org',
3817
  'highheelsale\.com',
3818
  'homebasedaffiliatemarketingbusiness\.com',
3819
+ 'hosting37\d{2}\.com/',
3820
  'howgrowtall\.(com|info)',
3821
  'insurancebinder\.info',
3822
  'internetserviceteam\.com',
3823
  'intl\-alliance\.com',
3824
  'it\.n\-able\.com',
3825
  'justanimal\.com',
3826
+ 'koreanracinggirls\.com',
3827
  'lactoseintolerancesymptoms\.net',
3828
+ 'liquiddiet[a-z\-]*\.com',
3829
+ 'locksmith[a-z\-]+\.org',
3830
  'lockyourpicz\.com',
3831
  'luia\.ru',
3832
+ 'mydirtyhobbycom\.de',
3833
  'myhealthcare\.com',
3834
+ 'nextcars\.net',
3835
  'odcadide\.iinaa\.net',
3836
  'oma\-chat\-live\.de',
3837
  'onlinemarketpromo\.com',
3843
  'pinkyxxx\.org',
3844
  'play\-mp3\.com',
3845
  'poker\-review\.tk',
3846
+ 'pornobesto\.ru',
3847
  '21[89]\-124\-182\-64\.cust\.propagation\.net',
3848
  'prosperent\-adsense\-alternative\.blogspot\.com',
3849
  'ragedownloads\.info',
3850
  'red\-black\.ru',
3851
+ '[a-z\-]*ringtone\.net',
3852
+ 'rufights\.com',
3853
  'seoindiawizard\.com',
3854
  'sexcam\-girls\.at',
3855
  'singlesvacationspackages\.com',
3861
  'thik\-chik\.com',
3862
  'thisweekendsmovies\.com',
3863
  'unassigned\.psychz\.net',
3864
+ 'ultrabait\.biz',
3865
+ '[a-z\-\.]+vigra\-buy\.info',
3866
  'vitamin\-d\-deficiency\-symptoms\.com',
3867
  'vpn\-privacy\.org',
3868
  'watchstock\.com',
3877
  );
3878
  foreach($lines as $spammer) {
3879
  if (!empty($spammer)) {
3880
+ if(preg_match("#^{$spammer}\$#",$referrer_host)>0) {
3881
  // found it!
3882
  $badhost=true;
3883
  break 1;
3884
+ } elseif(!empty($hostname) && preg_match('#(^|\.){$spammer}\$#i',$hostname)>0) {
3885
  $badhost=true;
3886
  break 1;
3887
  }
3891
  //# is spam and mark as such...
3892
  if (!$badhost) {
3893
  $lines = array( "allegra", "ambien", "ativan", "blackjack",
3894
+ "bukakke", "casino","cialis","ciallis", "celebrex",
3895
  "cumdripping", "cumeating", "cumfilled",
3896
  "cumpussy", "cumsucking", "cumswapping",
3897
  "diazepam", "diflucan", "drippingcum", "eatingcum",
3904
  "proscar", "pussycum", "sildenafil", "snowballing",
3905
  "suckingcum", "swappingcum", "swingers",
3906
  "tadalafil", "tigerspice", "tramadol", "ultram-",
3907
+ "valium", "valtrex", "viagra", "viagara","vicodin",
3908
+ "xanax", "xenical", "xxx-",
3909
  "zoloft", "zovirax", "zanax"
3910
  );
3911
  foreach ($lines as $badreferrer) {
3925
  $lines = file($badhostfile,FILE_IGNORE_NEW_LINES);
3926
  foreach($lines as $spammer) {
3927
  if (!empty($spammer)) {
3928
+ if (preg_match("#(^|\.){$spammer}\$#",$referrer_host)>0) {
3929
  // found it!
3930
  $badhost=true;
3931
  break 1;
3932
+ } elseif(!empty($hostname) && preg_match("#(^|\.){$spammer}\$#i",$hostname)>0) {
3933
  $badhost=true;
3934
  break 1;
3935
  }
3963
  global $wpdb, $wassup_options;
3964
 
3965
  if (empty($wassup_options->wassup_table)) {
3966
+ $wassup_table = $wpdb->prefix . "wassup";
3967
  } else {
3968
+ $wassup_table = $wassup_options->wassup_table;
3969
  }
3970
  $filename = 'wassup.' . gmdate('Y-m-d') . '.sql';
3971
 
3972
  //# check for records before exporting...
3973
+ $numrecords = $wpdb->get_var("SELECT COUNT(wassup_id) FROM $wassup_table");
3974
  if ( $numrecords > 0 ) {
3975
  if ($numrecords > 10000) {
3976
  //...could take a long time, so run in background in case browser times out
3977
  ignore_user_abort(1);
3978
  }
3979
+ $exportdata=backup_table("$wassup_table");
3980
 
3981
  if ($exportdata) {
3982
  //TODO: use compressed file transfer when zlib available...
3986
  header('Content-Type: text/plain charset=' . get_option('blog_charset'), true);
3987
 
3988
  // Function is below
3989
+ //backup_table($wassup_table);
3990
  echo $exportdata;
3991
 
3992
  die(); //sends output and flushes buffer
4132
  }
4133
  }
4134
 
4135
+ // hook function to put a timestamp in page footer for page caching test
4136
  function wassup_foot() {
4137
  global $wassup_options, $wassupversion, $debug_mode;
4138
  if ($wassup_options->wassup_active == "1") {
4139
+ //New in 1.8.2: separate screen resolution cookie for IE
4140
+ if (!isset($_COOKIE['wassup_screen_res'])) {
4141
+ echo "\n"; ?>
4142
+ <!--[if IE]>
4143
+ <script language=javascript>
4144
+ var sheight = screen.height;
4145
+ var swidth = screen.width;
4146
+ document.cookie = "wassup_screen_res=" + swidth + " x " + sheight + "; path=/; domain=" + document.domain;
4147
+ </script>
4148
+ <![endif]--><?php
4149
+ }
4150
  //Output a comment with a current timestamp to verify that page is not cached (i.e. visit is being recorded).
4151
  echo "<!--\n<p class=\"small\"> WassUp $wassupversion ".__("timestamp","wassup").": ".date('Y-m-d h:i:sA T')." (".gmdate('h:iA',time()+(get_option('gmt_offset')*3600)).")<br />\n";
4152
  echo __("If above timestamp is not current time, this page is cached","wassup").".</p> -->\n";
4154
  }
4155
 
4156
  /**
4157
+ * Perform db operations on wassup tables
4158
  * -Helene D. 2010-04-27
4159
  * @param array
4160
  * @return none
4185
 
4186
  // Security functions
4187
  /**
4188
+ * Check for obvious signs of script injection and hack attempts -Helene D. 2010-02-01
4189
  * @param none
4190
  * @return boolean
4191
  * @author Helene D.
4221
  $wassup_settings = get_option('wassup_settings');
4222
  $wpurl = get_bloginfo('wpurl');
4223
  $blogurl = get_bloginfo('home');
4224
+ $wassup_table = $wassup_settings['wassup_table'];
4225
+ $table_tmp_name = $wassup_table . "_tmp";
4226
  if ($wassup_settings['wassup_widget_title'] != "") $title = $wassup_settings['wassup_widget_title']; else $title = "Visitors Online";
4227
  if ($wassup_settings['wassup_widget_ulclass'] != "") $ulclass = $wassup_settings['wassup_widget_ulclass']; else $ulclass = "links";
4228
  if ($wassup_settings['wassup_widget_chars'] != "") $chars = $wassup_settings['wassup_widget_chars']; else $chars = "18";
4473
  $wpurl = get_bloginfo('wpurl');
4474
  $blogurl = get_bloginfo('home');
4475
  $wassup_settings = get_option('wassup_settings');
4476
+ $wassup_table = $wassup_settings['wassup_table'];
4477
+ $table_tmp_name = $wassup_table . "_tmp";
4478
  if ($wtitle != "") $title = $wtitle; else $title = "Visitors Online";
4479
  if ($wulclass != "") $ulclass = $wulclass; else $ulclass = "links";
4480
  if ($wchars != "") $chars = $wchars; else $chars = "18";
4482
  if ($wreflimit != "") $reflimit = $wreflimit; else $reflimit = "5";
4483
  if ($wtopbrlimit != "") $topbrlimit = $wtopbrlimit; else $topbrlimit = "5";
4484
  if ($wtoposlimit != "") $toposlimit = $wtoposlimit; else $toposlimit = "5";
 
 
 
4485
  $to_date = current_time('timestamp');
4486
  $from_date = strtotime('-3 minutes', $to_date);
4487
 
4579
  // function to print out a chart's preview in the dashboard for WP < 2.7 //moved
4580
  function wassupDashChart() {
4581
  global $wpdb, $wassup_options;
4582
+ $wassup_table = $wassup_options->wassup_table;
4583
  if ($wassup_options->wassup_dashboard_chart == 1) {
4584
  $chart_type = ($wassup_options->wassup_chart_type >0)? $wassup_options->wassup_chart_type: "2";
4585
  $to_date = current_time("timestamp");
4586
+ $Chart = New MainItems($wassup_table,"",$to_date);
4587
  $chart_url = $Chart->TheChart(1, "400", "125", "", $chart_type, "bg,s,efebef|c,lg,90,edffff,0,efebef,0.8", "dashboard"); ?>
4588
  <h3>WassUp <?php _e('Stats','wassup'); ?> <cite><a href="admin.php?page=<?php echo WASSUPFOLDER; ?>"><?php _e('More','wassup'); ?> &raquo;</a></cite></h3>
4589
  <div id="placeholder" align="left">
4596
  function wassup_dashboard_widget_function() {
4597
  global $wpdb, $wassup_options, $user_level;
4598
 
4599
+ $wassup_table = $wassup_options->wassup_table;
4600
+ $table_tmp_name = $wassup_table."_tmp";
4601
  $to_date = current_time("timestamp");
4602
  $chart_type = ($wassup_options->wassup_chart_type >0)? $wassup_options->wassup_chart_type: "2";
4603
  $res = ((int)$wassup_options->wassup_screen_res-160)/2;
4604
+ $Chart = New MainItems($wassup_table,"",$to_date);
4605
  $chart_url = $Chart->TheChart(1, $res, "180", "", $chart_type, "bg,s,efebef|c,lg,90,edffff,0,eae9e9,0.8", "dashboard");
4606
  $max_char_len= 40;
4607
  $wpurl = get_bloginfo('wpurl');