Antispam Bee - Version 2.4.3

Version Description

  • Check for basic requirements
  • Remove the sidebar plugin icon
  • Set the Google API calls to SSL
  • Compatibility with WordPress 3.4
  • Add retina plugin icon on options
  • Depending on WordPress settings: anonymous comments allowed
Download this release

Release Info

Developer sergej.mueller
Plugin Icon 128x128 Antispam Bee
Version 2.4.3
Comparing to
See all releases

Code changes from version 2.2 to 2.4.3

antispam_bee.original.php DELETED
@@ -1,1997 +0,0 @@
1
- <?php
2
- /*
3
- Plugin Name: Antispam Bee
4
- Text Domain: antispam_bee
5
- Domain Path: /lang
6
- Description: Easy and extremely productive spam-fighting plugin with many sophisticated solutions. Includes protection again trackback spam.
7
- Author: Sergej M&uuml;ller
8
- Author URI: http://www.wpSEO.org
9
- Plugin URI: http://antispambee.com
10
- Version: 2.2
11
- */
12
-
13
-
14
- /* Sicherheitsabfrage */
15
- if ( !class_exists('WP') ) {
16
- header('Status: 403 Forbidden');
17
- header('HTTP/1.1 403 Forbidden');
18
- exit();
19
- }
20
-
21
-
22
- /**
23
- * Antispam_Bee
24
- *
25
- * @since 0.1
26
- */
27
-
28
- class Antispam_Bee {
29
-
30
-
31
- /* Save me! */
32
- var $md5_sign;
33
- var $base_name;
34
- var $spam_reason;
35
-
36
-
37
- /**
38
- * Konstruktor der Klasse
39
- *
40
- * @since 0.1
41
- * @change 1.9
42
- */
43
-
44
- function Antispam_Bee() {
45
- /* AJAX & Co. */
46
- if ( (defined('DOING_AJAX') && DOING_AJAX) or (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) ) {
47
- return;
48
- }
49
-
50
- /* Initialisierung */
51
- $this->base_name = plugin_basename(__FILE__);
52
- $this->md5_sign = 'comment-' .substr(md5(get_bloginfo('url')), 0, 8);
53
-
54
- /* Cronjob */
55
- if ( defined('DOING_CRON') ) {
56
- add_action(
57
- 'antispam_bee_daily_cronjob',
58
- array(
59
- $this,
60
- 'exe_daily_cronjob'
61
- )
62
- );
63
-
64
- /* Admin */
65
- } elseif ( is_admin() ) {
66
- /* Menü */
67
- add_action(
68
- 'admin_menu',
69
- array(
70
- $this,
71
- 'init_admin_menu'
72
- )
73
- );
74
-
75
- /* GUI */
76
- if ( $this->is_current_page('home') ) {
77
- add_action(
78
- 'init',
79
- array(
80
- $this,
81
- 'load_plugin_lang'
82
- )
83
- );
84
- add_action(
85
- 'admin_init',
86
- array(
87
- $this,
88
- 'add_plugin_sources'
89
- )
90
- );
91
-
92
- /* Dashboard */
93
- } else if ( $this->is_current_page('index') ) {
94
- add_action(
95
- 'init',
96
- array(
97
- $this,
98
- 'load_plugin_lang'
99
- )
100
- );
101
-
102
- if ( $this->get_option('dashboard_count') ) {
103
- if ($this->is_min_wp('3.0')) {
104
- add_action(
105
- 'right_now_discussion_table_end',
106
- array(
107
- $this,
108
- 'add_discussion_table_end'
109
- )
110
- );
111
- } else {
112
- add_action(
113
- 'right_now_table_end',
114
- array(
115
- $this,
116
- 'add_table_end'
117
- )
118
- );
119
- }
120
- }
121
-
122
- if ( $this->get_option('dashboard_chart') ) {
123
- add_action(
124
- 'wp_dashboard_setup',
125
- array(
126
- $this,
127
- 'init_dashboard_chart'
128
- )
129
- );
130
- }
131
-
132
- /* Plugins */
133
- } else if ( $this->is_current_page('plugins') ) {
134
- add_action(
135
- 'init',
136
- array(
137
- $this,
138
- 'load_plugin_lang'
139
- )
140
- );
141
- add_action(
142
- 'activate_' .$this->base_name,
143
- array(
144
- $this,
145
- 'init_plugin_options'
146
- )
147
- );
148
- add_action(
149
- 'deactivate_' .$this->base_name,
150
- array(
151
- $this,
152
- 'clear_scheduled_hook'
153
- )
154
- );
155
- add_action(
156
- 'admin_notices',
157
- array(
158
- $this,
159
- 'show_version_notice'
160
- )
161
- );
162
-
163
-
164
- add_filter(
165
- 'plugin_row_meta',
166
- array(
167
- $this,
168
- 'init_row_meta'
169
- ),
170
- 10,
171
- 2
172
- );
173
- }
174
-
175
- /* Frontend */
176
- } else {
177
- add_action(
178
- 'template_redirect',
179
- array(
180
- $this,
181
- 'replace_comment_field'
182
- )
183
- );
184
- add_action(
185
- 'init',
186
- array(
187
- $this,
188
- 'precheck_comment_request'
189
- )
190
- );
191
- add_action(
192
- 'preprocess_comment',
193
- array(
194
- $this,
195
- 'verify_comment_request'
196
- ),
197
- 1
198
- );
199
- add_action(
200
- 'antispam_bee_count',
201
- array(
202
- $this,
203
- 'the_spam_count'
204
- )
205
- );
206
-
207
- add_filter(
208
- 'comment_notification_text',
209
- array(
210
- $this,
211
- 'replace_whois_link'
212
- )
213
- );
214
- add_filter(
215
- 'comment_moderation_text',
216
- array(
217
- $this,
218
- 'replace_whois_link'
219
- )
220
- );
221
- }
222
- }
223
-
224
-
225
- /**
226
- * Einbindung der Plugin-Sprache
227
- *
228
- * @since 0.1
229
- * @change 0.1
230
- */
231
-
232
- function load_plugin_lang() {
233
- load_plugin_textdomain(
234
- 'antispam_bee',
235
- false,
236
- 'antispam-bee/lang'
237
- );
238
- }
239
-
240
-
241
- /**
242
- * Links in der Plugins-Verwaltung
243
- *
244
- * @since 0.1
245
- * @change 2.1
246
- *
247
- * @param array $links Array mit Links
248
- * @param string $file Name des Plugins
249
- * @return array $links Array mit erweitertem Link
250
- */
251
-
252
- function init_row_meta($links, $file) {
253
- if ( $this->base_name == $file ) {
254
- return array_merge(
255
- $links,
256
- array(
257
- sprintf(
258
- '<a href="https://flattr.com/thing/54115/Antispam-Bee-Das-WordPress-Plugin-fur-den-Schutz-gegen-Spam" target="_blank">%s</a>',
259
- esc_html__('Flattr')
260
- ),
261
- sprintf(
262
- '<a href="options-general.php?page=%s">%s</a>',
263
- $this->base_name,
264
- esc_html__('Settings')
265
- )
266
- )
267
- );
268
- }
269
-
270
- return $links;
271
- }
272
-
273
-
274
- /**
275
- * Aktion bei Aktivierung des Plugins
276
- *
277
- * @since 0.1
278
- * @change 2.0
279
- */
280
-
281
- function init_plugin_options() {
282
- /* Option anlegen */
283
- add_option(
284
- 'antispam_bee',
285
- array(),
286
- '',
287
- 'no'
288
- );
289
-
290
- /* Cron aktivieren */
291
- if ($this->get_option('cronjob_enable')) {
292
- $this->init_scheduled_hook();
293
- }
294
- }
295
-
296
-
297
- /**
298
- * Rückgabe eines Optionsfeldes
299
- *
300
- * @since 0.1
301
- * @change 0.1
302
- *
303
- * @param string $field Name des Feldes
304
- * @return mixed Wert des Feldes
305
- */
306
-
307
- function get_option($field) {
308
- if ( !$options = wp_cache_get('antispam_bee') ) {
309
- $options = get_option('antispam_bee');
310
-
311
- wp_cache_set(
312
- 'antispam_bee',
313
- $options
314
- );
315
- }
316
-
317
- return @$options[$field];
318
- }
319
-
320
-
321
- /**
322
- * Aktualisiert ein Optionsfeld
323
- *
324
- * @since 0.1
325
- * @change 1.6
326
- *
327
- * @param string $field Name des Feldes
328
- * @param mixed Wert des Feldes
329
- */
330
-
331
- function update_option($field, $value) {
332
- $this->update_options(
333
- array(
334
- $field => $value
335
- )
336
- );
337
- }
338
-
339
-
340
- /**
341
- * Aktualisiert mehrere Optionsfelder
342
- *
343
- * @since 0.1
344
- * @change 1.6
345
- *
346
- * @param array $data Array mit Feldern
347
- */
348
-
349
- function update_options($data) {
350
- /* Option zuweisen */
351
- $options = array_merge(
352
- (array)get_option('antispam_bee'),
353
- $data
354
- );
355
-
356
- /* DB updaten */
357
- update_option(
358
- 'antispam_bee',
359
- $options
360
- );
361
-
362
- /* Cache updaten */
363
- wp_cache_set(
364
- 'antispam_bee',
365
- $options
366
- );
367
- }
368
-
369
-
370
- /**
371
- * Initialisierung des Cronjobs
372
- *
373
- * @since 0.1
374
- * @change 1.6
375
- */
376
-
377
- function init_scheduled_hook() {
378
- if ( !wp_next_scheduled('antispam_bee_daily_cronjob') ) {
379
- wp_schedule_event(
380
- time(),
381
- 'daily',
382
- 'antispam_bee_daily_cronjob'
383
- );
384
- }
385
- }
386
-
387
-
388
- /**
389
- * Beendigung des Cronjobs
390
- *
391
- * @since 0.1
392
- * @change 1.6
393
- */
394
-
395
- function clear_scheduled_hook() {
396
- if ( wp_next_scheduled('antispam_bee_daily_cronjob') ) {
397
- wp_clear_scheduled_hook('antispam_bee_daily_cronjob');
398
- }
399
- }
400
-
401
-
402
- /**
403
- * Ausführung des Cronjobs
404
- *
405
- * @since 0.1
406
- * @change 1.6
407
- */
408
-
409
- function exe_daily_cronjob() {
410
- /* Kein Cronjob? */
411
- if ( !$this->get_option('cronjob_enable') ) {
412
- return;
413
- }
414
-
415
- /* Timestamp updaten */
416
- $this->update_option(
417
- 'cronjob_timestamp',
418
- time()
419
- );
420
-
421
- /* Spam löschen */
422
- $this->delete_spam_comments();
423
- }
424
-
425
-
426
- /**
427
- * Löschung alter Spamkommentare
428
- *
429
- * @since 0.1
430
- * @change 2.0
431
- */
432
-
433
- function delete_spam_comments() {
434
- /* Anzahl der Tage */
435
- $days = (int)$this->get_option('cronjob_interval');
436
-
437
- /* Kein Wert? */
438
- if ( empty($days) ) {
439
- return false;
440
- }
441
-
442
- /* Global */
443
- global $wpdb;
444
-
445
- /* Kommentare löschen */
446
- $wpdb->query(
447
- $wpdb->prepare(
448
- "DELETE FROM `$wpdb->comments` WHERE `comment_approved` = 'spam' AND SUBDATE(NOW(), %d) > comment_date_gmt",
449
- $days
450
- )
451
- );
452
-
453
- /* DB optimieren */
454
- $wpdb->query("OPTIMIZE TABLE `$wpdb->comments`");
455
- }
456
-
457
-
458
- /**
459
- * Initialisierung der GUI
460
- *
461
- * @since 0.1
462
- * @change 0.1
463
- */
464
-
465
- function init_admin_menu() {
466
- /* Menü anlegen */
467
- $page = add_options_page(
468
- 'Antispam Bee',
469
- '<img src="' .plugins_url('antispam-bee/img/icon.png'). '" id="ab_icon" alt="Antispam Bee" />Antispam Bee',
470
- 'manage_options',
471
- __FILE__,
472
- array(
473
- $this,
474
- 'show_admin_menu'
475
- )
476
- );
477
-
478
- /* JS einbinden */
479
- add_action(
480
- 'admin_print_scripts-' . $page,
481
- array(
482
- $this,
483
- 'add_enqueue_script'
484
- )
485
- );
486
-
487
- /* CSS einbinden */
488
- add_action(
489
- 'admin_print_styles-' . $page,
490
- array(
491
- $this,
492
- 'add_enqueue_style'
493
- )
494
- );
495
- }
496
-
497
-
498
- /**
499
- * Registrierung von Plugin-spezifische Dateien
500
- *
501
- * @since 1.6
502
- * @change 1.6
503
- */
504
-
505
- function add_plugin_sources() {
506
- /* Infos auslesen */
507
- $data = get_plugin_data(__FILE__);
508
-
509
- /* JS einbinden */
510
- wp_register_script(
511
- 'ab_script',
512
- plugins_url('antispam-bee/js/script.js'),
513
- array('jquery'),
514
- $data['Version']
515
- );
516
-
517
- /* CSS einbinden */
518
- wp_register_style(
519
- 'ab_style',
520
- plugins_url('antispam-bee/css/style.css'),
521
- array(),
522
- $data['Version']
523
- );
524
- }
525
-
526
-
527
- /**
528
- * Initialisierung von JavaScript
529
- *
530
- * @since 1.6
531
- * @change 1.6
532
- */
533
-
534
- function add_enqueue_script() {
535
- wp_enqueue_script('ab_script');
536
- }
537
-
538
-
539
- /**
540
- * Initialisierung von Stylesheets
541
- *
542
- * @since 1.6
543
- * @change 1.6
544
- */
545
-
546
- function add_enqueue_style() {
547
- wp_enqueue_style('ab_style');
548
- }
549
-
550
-
551
- /**
552
- * Prüfung der WordPress-Version
553
- *
554
- * @since 0.1
555
- * @change 0.1
556
- *
557
- * @param integer $version Gesuchte WP-Version
558
- * @return boolean TRUE, wenn mindestens gesuchte
559
- */
560
-
561
- function is_min_wp($version) {
562
- return version_compare(
563
- $GLOBALS['wp_version'],
564
- $version. 'alpha',
565
- '>='
566
- );
567
- }
568
-
569
-
570
- /**
571
- * Prüfung der PHP-Version
572
- *
573
- * @since 1.9
574
- * @change 1.9
575
- *
576
- * @param integer $version Gesuchte PHP-Version
577
- * @return boolean TRUE, wenn mindestens gesuchte
578
- */
579
-
580
- function is_min_php($version) {
581
- return version_compare(
582
- phpversion(),
583
- $version,
584
- '>='
585
- );
586
- }
587
-
588
-
589
- /**
590
- * Prüfung auf das wpTouch Plugin
591
- *
592
- * @since 0.1
593
- * @change 2.0
594
- *
595
- * @return boolean TRUE, wenn Plugin aktiv und aufgerufen
596
- */
597
-
598
- function is_mobile() {
599
- return strpos(TEMPLATEPATH, 'wptouch');
600
- }
601
-
602
-
603
- /**
604
- * Prüfung der Admin-Seite
605
- *
606
- * @since 0.1
607
- * @change 2.0
608
- *
609
- * @param integer $page Gesuchte Seite
610
- * @return boolean TRUE, wenn die aktuelle auch die gesuchte Seite ist
611
- */
612
-
613
- function is_current_page($page) {
614
- switch($page) {
615
- case 'index':
616
- return ( empty($GLOBALS['pagenow']) or ( !empty($GLOBALS['pagenow']) && $GLOBALS['pagenow'] == 'index.php' ) );
617
-
618
- case 'home':
619
- return ( !empty($_REQUEST['page']) && $_REQUEST['page'] == $this->base_name );
620
-
621
- case 'plugins':
622
- return ( !empty($GLOBALS['pagenow']) && $GLOBALS['pagenow'] == 'plugins.php' );
623
-
624
- default:
625
- return false;
626
- }
627
- }
628
-
629
-
630
- /**
631
- * Anzeige des Spam-Counters auf dem Dashboard (bis WP 3.0)
632
- *
633
- * @since 0.1
634
- * @change 1.6
635
- */
636
-
637
- function add_table_end() {
638
- echo sprintf(
639
- '<tr>
640
- <td class="first b b-tags"></td>
641
- <td class="t tags"></td>
642
- <td class="b b-spam" style="font-size:18px">%s</td>
643
- <td class="last t">%s</td>
644
- </tr>',
645
- esc_html($this->get_spam_count()),
646
- esc_html__('Blocked', 'antispam_bee')
647
- );
648
- }
649
-
650
-
651
- /**
652
- * Anzeige des Spam-Counters auf dem Dashboard (ab WP 3.0)
653
- *
654
- * @since 0.1
655
- * @change 1.6
656
- */
657
-
658
- function add_discussion_table_end() {
659
- echo sprintf(
660
- '<tr>
661
- <td class="b b-spam" style="font-size:18px">%s</td>
662
- <td class="last t">%s</td>
663
- </tr>',
664
- esc_html($this->get_spam_count()),
665
- esc_html__('Blocked', 'antispam_bee')
666
- );
667
- }
668
-
669
-
670
- /**
671
- * Initialisierung des Dashboard-Chart
672
- *
673
- * @since 1.9
674
- * @change 2.0
675
- */
676
-
677
- function init_dashboard_chart() {
678
- /* Keine Rechte? */
679
- if ( !current_user_can('administrator') or !$this->is_min_php('5.0.2') ) {
680
- return false;
681
- }
682
-
683
- /* Widget hinzufügen */
684
- wp_add_dashboard_widget(
685
- 'ab_spam_chart',
686
- 'Antispam Bee',
687
- array(
688
- $this,
689
- 'show_spam_chart'
690
- )
691
- );
692
-
693
- /* JS laden */
694
- add_action(
695
- 'wp_print_scripts',
696
- array(
697
- $this,
698
- 'add_dashboard_js'
699
- )
700
- );
701
-
702
- /* CSS laden */
703
- add_action(
704
- 'admin_head',
705
- array(
706
- $this,
707
- 'add_dashboard_css'
708
- )
709
- );
710
- }
711
-
712
-
713
- /**
714
- * Ausgabe von Dashboard-CSS
715
- *
716
- * @since 1.9
717
- * @change 2.2
718
- */
719
-
720
- function add_dashboard_css() {
721
- /* Infos auslesen */
722
- $data = get_plugin_data(__FILE__);
723
-
724
- /* CSS registrieren */
725
- wp_register_style(
726
- 'antispambee',
727
- plugins_url('antispam-bee/css/dashboard.css'),
728
- array(),
729
- $data['Version']
730
- );
731
-
732
- /* CSS ausgeben */
733
- wp_print_styles('antispambee');
734
- }
735
-
736
-
737
- /**
738
- * Ausgabe von Dashboard-JS
739
- *
740
- * @since 1.9
741
- * @change 2.2
742
- */
743
-
744
- function add_dashboard_js() {
745
- /* Init */
746
- $items = (array)$this->get_option('daily_stats');
747
-
748
- /* Leer? */
749
- if ( empty($items) or count($items) == 1 ) {
750
- return;
751
- }
752
-
753
- /* Sortieren */
754
- krsort($items, SORT_NUMERIC);
755
-
756
- /* Init */
757
- $output = array(
758
- 'created' => array(),
759
- 'count' => array()
760
- );
761
-
762
- /* Init */
763
- $i = 0;
764
-
765
- /* Zeilen loopen */
766
- foreach($items as $timestamp => $count) {
767
- array_push(
768
- $output['created'],
769
- ( $timestamp == strtotime('today', current_time('timestamp')) ? __('Today', 'antispam_bee') : date('d.m', $timestamp) )
770
- );
771
- array_push(
772
- $output['count'],
773
- (int)$count
774
- );
775
- }
776
-
777
- /* Zusammenfassen */
778
- $stats = array(
779
- 'created' => implode(',', $output['created']),
780
- 'count' => implode(',', $output['count'])
781
- );
782
-
783
- /* Infos auslesen */
784
- $data = get_plugin_data(__FILE__);
785
-
786
- /* JS einbinden */
787
- wp_register_script(
788
- 'ab_chart',
789
- plugins_url('antispam-bee/js/dashboard.js'),
790
- array('jquery'),
791
- $data['Version']
792
- );
793
- wp_register_script(
794
- 'google_jsapi',
795
- 'http://www.google.com/jsapi',
796
- false
797
- );
798
-
799
- /* Einbinden */
800
- wp_enqueue_script('google_jsapi');
801
- wp_enqueue_script('ab_chart');
802
-
803
- /* Übergeben */
804
- wp_localize_script(
805
- 'ab_chart',
806
- 'antispambee',
807
- $stats
808
- );
809
- }
810
-
811
-
812
- /**
813
- * Ausgabe des Dashboard-Chart
814
- *
815
- * @since 1.9
816
- * @change 2.0
817
- */
818
-
819
- function show_spam_chart() {
820
- echo '<div id="ab_chart"></div>';
821
- }
822
-
823
-
824
- /**
825
- * Anzeige des Version-Hinweises
826
- *
827
- * @since 0.1
828
- * @change 2.0
829
- */
830
-
831
- function show_version_notice() {
832
- /* Keine Ausgabe? */
833
- if ( $this->is_min_wp('2.8') ) {
834
- return;
835
- }
836
-
837
- /* Warnung */
838
- echo sprintf(
839
- '<div class="error"><p><strong>Antispam Bee</strong> %s</p></div>',
840
- esc_html__('requires at least WordPress 2.8', 'antispam_bee')
841
- );
842
- }
843
-
844
-
845
- /**
846
- * Kürzung der IP-Adressen
847
- *
848
- * @since 0.1
849
- * @change 0.1
850
- *
851
- * @param string $ip Ungekürzte IP
852
- * @return string $ip Gekürzte IP
853
- */
854
-
855
- function cut_ip_addr($ip) {
856
- if ( !empty($ip) ) {
857
- return str_replace(
858
- strrchr($ip, '.'),
859
- '',
860
- $ip
861
- );
862
- }
863
- }
864
-
865
-
866
- /**
867
- * Ersetzung der Kommentar-Textarea
868
- *
869
- * @since 0.1
870
- * @change 2.0
871
- */
872
-
873
- function replace_comment_field() {
874
- /* Nur Frontend */
875
- if ( is_feed() or is_trackback() or is_robots() or $this->is_mobile() ) {
876
- return;
877
- }
878
-
879
- /* Nur Beiträge */
880
- if ( !is_singular() && !$this->get_option('always_allowed') ) {
881
- return;
882
- }
883
-
884
- /* Replace! */
885
- ob_start(
886
- create_function(
887
- '$input',
888
- 'return preg_replace("#<textarea(.*?)name=([\"\'])comment([\"\'])(.+?)</textarea>#s", "<textarea$1name=$2' .$this->md5_sign. '$3$4</textarea><textarea name=\"comment\" style=\"display:none\" rows=\"1\" cols=\"1\"></textarea>", $input, 1);'
889
- )
890
- );
891
- }
892
-
893
-
894
- /**
895
- * Prüfung bestehenden Spam
896
- *
897
- * @since 2.0
898
- * @change 2.0
899
- *
900
- * @param string $ip IP-Adresse
901
- * @return boolean TRUE bei vorhandenem Spam
902
- */
903
-
904
- function is_ip_spam($ip) {
905
- /* Leer? */
906
- if ( empty($ip) ) {
907
- return true;
908
- }
909
-
910
- /* Global */
911
- global $wpdb;
912
-
913
- /* Suchen */
914
- $found = $wpdb->get_var(
915
- $wpdb->prepare(
916
- "SELECT `comment_ID` FROM `$wpdb->comments` WHERE `comment_approved` = 'spam' AND `comment_author_IP` = %s LIMIT 1",
917
- (string)$ip
918
- )
919
- );
920
-
921
- /* Gefunden? */
922
- if ( $found ) {
923
- return true;
924
- }
925
-
926
- return false;
927
- }
928
-
929
-
930
- /**
931
- * Prüfung auf bereits kommentierte E-Mail-Adresse
932
- *
933
- * @since 2.0
934
- * @change 2.0
935
- *
936
- * @param string $email E-Mail-Adresse
937
- * @return boolean TRUE bei gefundenem Eintrag
938
- */
939
-
940
- function is_already_commented($email) {
941
- /* Leer? */
942
- if ( empty($email) ) {
943
- return false;
944
- }
945
-
946
- /* Global */
947
- global $wpdb;
948
-
949
- /* Suchen */
950
- $found = $wpdb->get_var(
951
- $wpdb->prepare(
952
- "SELECT `comment_ID` FROM `$wpdb->comments` WHERE `comment_approved` = '1' AND `comment_author_email` = %s LIMIT 1",
953
- (string)$email
954
- )
955
- );
956
-
957
- /* Gefunden? */
958
- if ( $found ) {
959
- return true;
960
- }
961
-
962
- return false;
963
- }
964
-
965
-
966
- /**
967
- * Prüfung auf erlaubten Ländercode
968
- *
969
- * @since 0.1
970
- * @change 2.0
971
- *
972
- * @param string $ip IP-Adresse
973
- * @return boolean TRUE bei gesperrtem Land
974
- */
975
-
976
- function is_blacklist_country($ip) {
977
- /* API Key */
978
- $key = $this->get_option('ipinfodb_key');
979
-
980
- /* Keine Daten? */
981
- if ( empty($ip) or empty($key) ) {
982
- return false;
983
- }
984
-
985
- /* White & Black */
986
- $white = preg_split(
987
- '/ /',
988
- $this->get_option('country_white'),
989
- -1,
990
- PREG_SPLIT_NO_EMPTY
991
- );
992
- $black = preg_split(
993
- '/ /',
994
- $this->get_option('country_black'),
995
- -1,
996
- PREG_SPLIT_NO_EMPTY
997
- );
998
-
999
- /* Keine Listen? */
1000
- if ( empty($white) && empty($black) ) {
1001
- return false;
1002
- }
1003
-
1004
- /* IP abfragen */
1005
- $response = wp_remote_get(
1006
- sprintf(
1007
- 'http://api.ipinfodb.com/v2/ip_query_country.php?key=%s&ip=%s',
1008
- $key,
1009
- $ip
1010
- )
1011
- );
1012
-
1013
- /* Fehler? */
1014
- if ( is_wp_error($response) ) {
1015
- return false;
1016
- }
1017
-
1018
- /* XML lesen */
1019
- preg_match(
1020
- '#Code>([A-Z]{2})</Country#i',
1021
- wp_remote_retrieve_body($response),
1022
- $matches
1023
- );
1024
-
1025
- /* Kein Code? */
1026
- if ( empty($matches[1]) ) {
1027
- return false;
1028
- }
1029
-
1030
- /* Blacklist */
1031
- if ( !empty($black) ) {
1032
- return ( in_array($matches[1], $black) ? true : false );
1033
- }
1034
-
1035
- /* Whitelist */
1036
- return ( in_array($matches[1], $white) ? false : true );
1037
- }
1038
-
1039
-
1040
- /**
1041
- * Prüfung auf Honey Pot Spam
1042
- *
1043
- * @since 1.7
1044
- * @change 2.0
1045
- *
1046
- * @param string $ip IP-Adresse
1047
- * @return boolean TRUE bei gemeldeter IP
1048
- */
1049
-
1050
- function is_honey_spam($ip) {
1051
- /* API Key */
1052
- $key = $this->get_option('honey_key');
1053
-
1054
- /* Keine Daten? */
1055
- if ( empty($ip) or empty($key) ) {
1056
- return false;
1057
- }
1058
-
1059
- /* Host */
1060
- $host = sprintf(
1061
- '%s.%s.dnsbl.httpbl.org',
1062
- $key,
1063
- implode(
1064
- '.',
1065
- array_reverse(
1066
- explode(
1067
- '.',
1068
- $ip
1069
- )
1070
- )
1071
- )
1072
- );
1073
-
1074
- /* Response */
1075
- $bits = explode(
1076
- '.',
1077
- gethostbyname($host)
1078
- );
1079
-
1080
- return ( $bits[0] == 127 && $bits[3] & 4 );
1081
- }
1082
-
1083
-
1084
- /**
1085
- * Prüfung auf Blacklisted-Sprache
1086
- *
1087
- * @since 2.0
1088
- * @change 2.1
1089
- *
1090
- * @param str $content Content
1091
- * @return bool TRUE bei Spam
1092
- */
1093
-
1094
- function is_lang_spam($content)
1095
- {
1096
- /* Init */
1097
- $lang = $this->get_option('translate_lang');
1098
-
1099
- /* Formatieren */
1100
- $content = rawurlencode(
1101
- mb_substr(
1102
- strip_tags(stripslashes($content)),
1103
- 0,
1104
- 200
1105
- )
1106
- );
1107
-
1108
- /* Keine Daten? */
1109
- if ( empty($lang) or empty($content) ) {
1110
- return false;
1111
- }
1112
-
1113
- /* IP abfragen */
1114
- $response = wp_remote_get(
1115
- sprintf(
1116
- 'http://translate.google.de/translate_a/t?client=x&text=%s',
1117
- $content
1118
- )
1119
- );
1120
-
1121
- /* Fehler? */
1122
- if ( is_wp_error($response) ) {
1123
- return false;
1124
- }
1125
-
1126
- /* Parsen */
1127
- preg_match(
1128
- '/"src":"(\\D{2})"/',
1129
- wp_remote_retrieve_body($response),
1130
- $matches
1131
- );
1132
-
1133
- /* Fehler? */
1134
- if ( empty($matches[1]) ) {
1135
- return false;
1136
- }
1137
-
1138
- return ( $matches[1] != $lang );
1139
- }
1140
-
1141
-
1142
- /**
1143
- * Prüfung auf gefälschte IP
1144
- *
1145
- * @since 2.0
1146
- * @change 2.0
1147
- *
1148
- * @param string $ip IP-Adresse
1149
- * @return boolean TRUE bei gefälschter IP
1150
- */
1151
-
1152
- function is_fake_ip($ip)
1153
- {
1154
- /* Leer? */
1155
- if ( empty($ip) ) {
1156
- return true;
1157
- }
1158
-
1159
- /* Suchen */
1160
- $found = strpos(
1161
- $ip,
1162
- $this->cut_ip_addr(
1163
- gethostbyname(
1164
- gethostbyaddr($ip)
1165
- )
1166
- )
1167
- );
1168
-
1169
- return $found === false;
1170
- }
1171
-
1172
-
1173
- /**
1174
- * Kontrolle der POST-Werte
1175
- *
1176
- * @since 0.1
1177
- * @change 0.1
1178
- */
1179
-
1180
- function precheck_comment_request() {
1181
- /* Nur Frontend */
1182
- if ( is_feed() or is_trackback() or $this->is_mobile() ) {
1183
- return;
1184
- }
1185
-
1186
- /* Allgemeine Werte */
1187
- $request_url = @$_SERVER['REQUEST_URI'];
1188
- $hidden_field = @$_POST['comment'];
1189
- $plugin_field = @$_POST[$this->md5_sign];
1190
-
1191
- /* Falsch verbunden */
1192
- if ( empty($_POST) or empty($request_url) or strpos($request_url, 'wp-comments-post.php') === false ) {
1193
- return;
1194
- }
1195
-
1196
- /* Felder prüfen */
1197
- if (empty($hidden_field) && !empty($plugin_field)) {
1198
- $_POST['comment'] = $plugin_field;
1199
- unset($_POST[$this->md5_sign]);
1200
- } else {
1201
- $_POST['bee_spam'] = 1;
1202
- }
1203
- }
1204
-
1205
-
1206
- /**
1207
- * Prüfung und Markierung des Kommentars als Spam
1208
- *
1209
- * @since 0.1
1210
- * @change 2.1
1211
- *
1212
- * @param array $comment Unbehandelter Kommentar
1213
- * @return array $comment Behandelter Kommentar
1214
- */
1215
-
1216
- function verify_comment_request($comment) {
1217
- /* Server-Werte */
1218
- $request_url = @$_SERVER['REQUEST_URI'];
1219
- $request_ip = @$_SERVER['REMOTE_ADDR'];
1220
-
1221
- /* Werte leer? */
1222
- if ( empty($request_url) or empty($request_ip) ) {
1223
- return $this->flag_comment_request(
1224
- $comment,
1225
- 'Empty Data'
1226
- );
1227
- }
1228
-
1229
- /* Kommentar-Werte */
1230
- $comment_type = @$comment['comment_type'];
1231
- $comment_url = @$comment['comment_author_url'];
1232
- $comment_body = @$comment['comment_content'];
1233
- $comment_email = @$comment['comment_author_email'];
1234
-
1235
- /* Ping-Werte */
1236
- $ping_types = array('pingback', 'trackback', 'pings');
1237
- $ping_allowed = !$this->get_option('ignore_pings');
1238
-
1239
- /* Pingback Host */
1240
- if ( !empty($comment_url) ) {
1241
- $comment_parse = @parse_url($comment_url);
1242
- $comment_host = @$comment_parse['host'];
1243
- }
1244
-
1245
- /* Kommentar */
1246
- if ( strpos($request_url, 'wp-comments-post.php') !== false && !empty($_POST) ) {
1247
-
1248
- /* Bereits kommentiert? */
1249
- if ( $this->get_option('already_commented') && $this->is_already_commented($comment_email) ) {
1250
- return $comment;
1251
- }
1252
-
1253
- /* Bot erkannt */
1254
- if ( !empty($_POST['bee_spam']) ) {
1255
- return $this->flag_comment_request(
1256
- $comment,
1257
- 'CSS Hack'
1258
- );
1259
- }
1260
-
1261
- /* Erweiterter Schutz */
1262
- if ( $this->get_option('advanced_check') && $this->is_fake_ip($request_ip) ) {
1263
- return $this->flag_comment_request(
1264
- $comment,
1265
- 'Server IP'
1266
- );
1267
- }
1268
-
1269
- /* IPs im Spam */
1270
- if ( $this->get_option('spam_ip') && $this->is_ip_spam($request_ip) ) {
1271
- return $this->flag_comment_request(
1272
- $comment,
1273
- 'Spam IP'
1274
- );
1275
- }
1276
-
1277
- /* Translate API */
1278
- if ( $this->get_option('translate_api') && $this->is_lang_spam($comment_body) ) {
1279
- return $this->flag_comment_request(
1280
- $comment,
1281
- 'Comment Language'
1282
- );
1283
- }
1284
-
1285
- /* Country Code */
1286
- if ( $this->get_option('country_code') && $this->is_blacklist_country($request_ip) ) {
1287
- return $this->flag_comment_request(
1288
- $comment,
1289
- 'Country Check'
1290
- );
1291
- }
1292
-
1293
- /* Honey Pot */
1294
- if ( $this->get_option('honey_pot') && $this->is_honey_spam($request_ip) ) {
1295
- return $this->flag_comment_request(
1296
- $comment,
1297
- 'Honey Pot'
1298
- );
1299
- }
1300
-
1301
- /* Trackback */
1302
- } else if ( !empty($comment_type) && in_array($comment_type, $ping_types) && $ping_allowed ) {
1303
- /* Leere Werte ? */
1304
- if ( empty($comment_url) or empty($comment_body) ) {
1305
- return $this->flag_comment_request(
1306
- $comment,
1307
- 'Empty Data',
1308
- true
1309
- );
1310
- }
1311
-
1312
- /* IP != Server */
1313
- if ( !empty($comment_host) && gethostbyname($comment_host) != $request_ip ) {
1314
- return $this->flag_comment_request(
1315
- $comment,
1316
- 'Server IP',
1317
- true
1318
- );
1319
- }
1320
-
1321
- /* IPs im Spam */
1322
- if ( $this->get_option('spam_ip') && $this->is_ip_spam($request_ip) === true ) {
1323
- return $this->flag_comment_request(
1324
- $comment,
1325
- 'Spam IP',
1326
- true
1327
- );
1328
- }
1329
-
1330
- /* Country Code prüfen */
1331
- if ( $this->get_option('country_code') && $this->is_blacklist_country($request_ip) ) {
1332
- return $this->flag_comment_request(
1333
- $comment,
1334
- 'Country Check',
1335
- true
1336
- );
1337
- }
1338
-
1339
- /* Honey Pot */
1340
- if ( $this->get_option('honey_pot') && $this->is_honey_spam($request_ip) ) {
1341
- return $this->flag_comment_request(
1342
- $comment,
1343
- 'Honey Pot',
1344
- true
1345
- );
1346
- }
1347
- }
1348
-
1349
- return $comment;
1350
- }
1351
-
1352
-
1353
- /**
1354
- * Ausführung des Markier-Vorgangs
1355
- *
1356
- * @since 0.1
1357
- * @change 1.7
1358
- *
1359
- * @param array $comment Unbehandelter Kommentar
1360
- * @param string $reason Verdachtsgrund
1361
- * @param boolean $is_ping Ping (ja oder nein) [optional]
1362
- * @return array $comment Behandelter Kommentar
1363
- */
1364
-
1365
- function flag_comment_request($comment, $reason, $is_ping = false) {
1366
- /* Spam-Einstellungen */
1367
- $spam_remove = !$this->get_option('flag_spam');
1368
- $spam_notice = !$this->get_option('no_notice');
1369
-
1370
- /* Filter-Einstellungen */
1371
- $ignore_filter = $this->get_option('ignore_filter');
1372
- $ignore_type = $this->get_option('ignore_type');
1373
-
1374
- /* Spam hochzählen */
1375
- $this->update_spam_count();
1376
- $this->update_daily_stats();
1377
-
1378
- /* Spam löschen */
1379
- if ( $spam_remove ) {
1380
- die('Spam deleted.');
1381
- }
1382
-
1383
- /* Typen behandeln */
1384
- if ( $ignore_filter && (($ignore_type == 1 && $is_ping) or ($ignore_type == 2 && !$is_ping)) ) {
1385
- die('Spam deleted.');
1386
- }
1387
-
1388
- /* Spam-Grund */
1389
- $this->spam_reason = $reason;
1390
-
1391
- /* Spam markieren */
1392
- add_filter(
1393
- 'pre_comment_approved',
1394
- create_function(
1395
- '',
1396
- 'return "spam";'
1397
- )
1398
- );
1399
-
1400
- /* E-Mail senden */
1401
- add_filter(
1402
- 'comment_post',
1403
- array(
1404
- $this,
1405
- 'send_email_notify'
1406
- )
1407
- );
1408
-
1409
- /* Notiz setzen */
1410
- if ( $spam_notice ) {
1411
- $comment['comment_content'] = sprintf(
1412
- '[MARKED AS SPAM BY ANTISPAM BEE | %s]%s%s',
1413
- $reason,
1414
- "\n",
1415
- $comment['comment_content']
1416
- );
1417
- }
1418
-
1419
- return $comment;
1420
- }
1421
-
1422
-
1423
- /**
1424
- * Ersetzung des Whois Links
1425
- *
1426
- * @since 1.7
1427
- * @change 1.7
1428
- *
1429
- * @param string $body Body mit Whois
1430
- * @return string $body Body mit IPinfoDB
1431
- */
1432
-
1433
- function replace_whois_link($body) {
1434
- if ( $this->get_option('country_code') ) {
1435
- return preg_replace(
1436
- '/^Whois .+?=(.+?)/m',
1437
- 'IP Locator: http://ipinfodb.com/ip_locator.php?ip=$1',
1438
- $body
1439
- );
1440
- }
1441
-
1442
- return $body;
1443
- }
1444
-
1445
-
1446
- /**
1447
- * Versand einer Benachrichtigung via E-Mail
1448
- *
1449
- * @since 0.1
1450
- * @change 2.0
1451
- */
1452
-
1453
- function send_email_notify($id) {
1454
- /* Keine Benachrichtigung? */
1455
- if ( !$this->get_option('email_notify') ) {
1456
- return $id;
1457
- }
1458
-
1459
- /* Werte initialisieren */
1460
- $comment = @$GLOBALS['commentdata'];
1461
- $ip = @$_SERVER['REMOTE_ADDR'];
1462
-
1463
- /* Keine Werte? */
1464
- if ( empty($comment) or empty($ip) ) {
1465
- return $id;
1466
- }
1467
-
1468
- /* Beitrag ermitteln */
1469
- if ( !$post = get_post($comment['comment_post_ID']) ) {
1470
- return $id;
1471
- }
1472
-
1473
- /* Sprache laden */
1474
- $this->load_plugin_lang();
1475
-
1476
- /* Betreff */
1477
- $subject = sprintf(
1478
- '[%s] %s',
1479
- get_bloginfo('name'),
1480
- __('Comment marked as spam', 'antispam_bee')
1481
- );
1482
-
1483
- /* Content */
1484
- if ( !$content = strip_tags(stripslashes($comment['comment_content'])) ) {
1485
- $content = sprintf(
1486
- '-- %s --',
1487
- __('Content removed by Antispam Bee', 'antispam_bee')
1488
- );
1489
- }
1490
-
1491
- /* Body */
1492
- $body = sprintf(
1493
- "%s \"%s\"\r\n\r\n",
1494
- __('New spam comment on your post', 'antispam_bee'),
1495
- strip_tags($post->post_title)
1496
- ).sprintf(
1497
- "%s: %s\r\n",
1498
- __('Author'),
1499
- $comment['comment_author'],
1500
- $ip
1501
- ).sprintf(
1502
- "URL: %s\r\n",
1503
- esc_url($comment['comment_author_url'])
1504
- ).sprintf(
1505
- "IP Locator: http://ipinfodb.com/ip_locator.php?ip=%s\r\n",
1506
- $ip
1507
- ).sprintf(
1508
- "%s: %s\r\n\r\n",
1509
- __('Spam Reason', 'antispam_bee'),
1510
- __($this->spam_reason, 'antispam_bee')
1511
- ).sprintf(
1512
- "%s\r\n\r\n\r\n",
1513
- $content
1514
- ).(
1515
- EMPTY_TRASH_DAYS ? (
1516
- sprintf(
1517
- "%s: %s\r\n",
1518
- __('Trash it', 'antispam_bee'),
1519
- admin_url('comment.php?action=trash&c=' .$id)
1520
- )
1521
- ) : (
1522
- sprintf(
1523
- "%s: %s\r\n",
1524
- __('Delete it', 'antispam_bee'),
1525
- admin_url('comment.php?action=delete&c=' .$id)
1526
- )
1527
- )
1528
- ).sprintf(
1529
- "%s: %s\r\n",
1530
- __('Approve it', 'antispam_bee'),
1531
- admin_url('comment.php?action=approve&c=' .$id)
1532
- ).sprintf(
1533
- "%s: %s\r\n\r\n",
1534
- __('Spam list', 'antispam_bee'),
1535
- admin_url('edit-comments.php?comment_status=spam')
1536
- ).sprintf(
1537
- "%s\r\n%s\r\n",
1538
- __('Notify message by Antispam Bee', 'antispam_bee'),
1539
- __('http://antispambee.com', 'antispam_bee')
1540
- );
1541
-
1542
- /* Send */
1543
- wp_mail(
1544
- get_bloginfo('admin_email'),
1545
- $subject,
1546
- $body
1547
- );
1548
-
1549
- return $id;
1550
- }
1551
-
1552
-
1553
- /**
1554
- * Rückgabe der Anzahl von Spam-Kommentaren
1555
- *
1556
- * @since 0.1
1557
- * @change 1.7
1558
- *
1559
- * @param intval Anzahl der Spam-Kommentare
1560
- */
1561
-
1562
- function get_spam_count() {
1563
- /* Init */
1564
- $count = $this->get_option('spam_count');
1565
-
1566
- /* Fire */
1567
- return ( get_locale() == 'de_DE' ? number_format($count, 0, '', '.') : number_format_i18n($count) );
1568
- }
1569
-
1570
-
1571
- /**
1572
- * Ausgabe der Anzahl von Spam-Kommentaren
1573
- *
1574
- * @since 0.1
1575
- * @change 0.1
1576
- */
1577
-
1578
- function the_spam_count() {
1579
- echo esc_html($this->get_spam_count());
1580
- }
1581
-
1582
-
1583
- /**
1584
- * Aktualisierung der Anzahl von Spam-Kommentaren
1585
- *
1586
- * @since 0.1
1587
- * @change 0.1
1588
- */
1589
-
1590
- function update_spam_count() {
1591
- $this->update_option(
1592
- 'spam_count',
1593
- intval($this->get_option('spam_count') + 1)
1594
- );
1595
- }
1596
-
1597
-
1598
- /**
1599
- * Aktualisierung der Statistik
1600
- *
1601
- * @since 1.9
1602
- * @change 1.9
1603
- */
1604
-
1605
- function update_daily_stats() {
1606
- /* Init */
1607
- $stats = (array)$this->get_option('daily_stats');
1608
- $today = (int)strtotime('today');
1609
-
1610
- /* Hochzählen */
1611
- if ( array_key_exists($today, $stats) ) {
1612
- $stats[$today] ++;
1613
- } else {
1614
- $stats[$today] = 1;
1615
- }
1616
-
1617
- /* Sortieren */
1618
- krsort($stats, SORT_NUMERIC);
1619
-
1620
- /* Speichern */
1621
- $this->update_option(
1622
- 'daily_stats',
1623
- array_slice($stats, 0, 31, true)
1624
- );
1625
- }
1626
-
1627
-
1628
- /**
1629
- * Anzeige des Hilfe-Links
1630
- *
1631
- * @since 0.1
1632
- * @change 1.6
1633
- *
1634
- * @param string $anchor Anker in der Hilfe
1635
- */
1636
-
1637
- function show_help_link($anchor) {
1638
- /* Nicht Deutsch? */
1639
- if ( get_locale() != 'de_DE' ) {
1640
- return '';
1641
- }
1642
-
1643
- /* Ausgeben */
1644
- echo sprintf(
1645
- '[<a href="http://playground.ebiene.de/1137/antispam-bee-wordpress-plugin/#%s" target="_blank">?</a>]',
1646
- $anchor
1647
- );
1648
- }
1649
-
1650
-
1651
- /**
1652
- * Anzeige der GUI
1653
- *
1654
- * @since 0.1
1655
- * @change 2.1
1656
- */
1657
-
1658
- function show_admin_menu() {
1659
- if ( !empty($_POST) ) {
1660
- /* Referer prüfen */
1661
- check_admin_referer('antispam_bee');
1662
-
1663
- /* Optionen ermitteln */
1664
- $options = array(
1665
- 'flag_spam' => (int)(!empty($_POST['antispam_bee_flag_spam'])),
1666
- 'ignore_pings' => (int)(!empty($_POST['antispam_bee_ignore_pings'])),
1667
- 'ignore_filter' => (int)(!empty($_POST['antispam_bee_ignore_filter'])),
1668
- 'ignore_type' => (int)(@$_POST['antispam_bee_ignore_type']),
1669
- 'no_notice' => (int)(!empty($_POST['antispam_bee_no_notice'])),
1670
- 'email_notify' => (int)(!empty($_POST['antispam_bee_email_notify'])),
1671
- 'cronjob_enable' => (int)(!empty($_POST['antispam_bee_cronjob_enable'])),
1672
- 'cronjob_interval' => (int)(@$_POST['antispam_bee_cronjob_interval']),
1673
- 'dashboard_count' => (int)(!empty($_POST['antispam_bee_dashboard_count'])),
1674
- 'dashboard_chart' => (int)(!empty($_POST['antispam_bee_dashboard_chart'])),
1675
- 'advanced_check' => (int)(!empty($_POST['antispam_bee_advanced_check'])),
1676
- 'spam_ip' => (int)(!empty($_POST['antispam_bee_spam_ip'])),
1677
- 'already_commented' => (int)(!empty($_POST['antispam_bee_already_commented'])),
1678
- 'always_allowed' => (int)(!empty($_POST['antispam_bee_always_allowed'])),
1679
-
1680
- 'honey_pot' => (int)(!empty($_POST['antispam_bee_honey_pot'])),
1681
- 'honey_key' => (string)(@$_POST['antispam_bee_honey_key']),
1682
-
1683
- 'country_code' => (int)(!empty($_POST['antispam_bee_country_code'])),
1684
- 'country_black' => (string)(@$_POST['antispam_bee_country_black']),
1685
- 'country_white' => (string)(@$_POST['antispam_bee_country_white']),
1686
- 'ipinfodb_key' => (string)(@$_POST['antispam_bee_ipinfodb_key']),
1687
-
1688
- 'translate_api' => (int)(!empty($_POST['antispam_bee_translate_api'])),
1689
- 'translate_lang' => (string)(@$_POST['antispam_bee_translate_lang'])
1690
- );
1691
-
1692
- /* Kein Tag eingetragen? */
1693
- if ( empty($options['cronjob_interval']) ) {
1694
- $options['cronjob_enable'] = 0;
1695
- }
1696
-
1697
-
1698
- /* Honey Key reinigen */
1699
- if ( !empty($options['honey_key']) ) {
1700
- $options['honey_key'] = preg_replace(
1701
- '/[^a-z]/',
1702
- '',
1703
- strtolower(
1704
- strip_tags($options['honey_key'])
1705
- )
1706
- );
1707
- }
1708
-
1709
- /* Kein Honey Key? */
1710
- if ( empty($options['honey_key']) ) {
1711
- $options['honey_pot'] = 0;
1712
- }
1713
-
1714
-
1715
- /* Translate API */
1716
- if ( !empty($options['translate_lang']) ) {
1717
- $options['translate_lang'] = preg_replace(
1718
- '/[^den]/',
1719
- '',
1720
- strip_tags($options['translate_lang'])
1721
- );
1722
- }
1723
- if ( empty($options['translate_lang']) ) {
1724
- $options['translate_api'] = 0;
1725
- }
1726
-
1727
-
1728
- /* Blacklist reinigen */
1729
- if ( !empty($options['country_black']) ) {
1730
- $options['country_black'] = preg_replace(
1731
- '/[^A-Z ]/',
1732
- '',
1733
- strtoupper(
1734
- strip_tags($options['country_black'])
1735
- )
1736
- );
1737
- }
1738
-
1739
- /* Whitelist reinigen */
1740
- if ( !empty($options['country_white']) ) {
1741
- $options['country_white'] = preg_replace(
1742
- '/[^A-Z ]/',
1743
- '',
1744
- strtoupper(
1745
- strip_tags($options['country_white'])
1746
- )
1747
- );
1748
- }
1749
-
1750
- /* Kein IPInfoDB Key? */
1751
- if ( empty($options['ipinfodb_key']) ) {
1752
- $options['country_code'] = 0;
1753
- }
1754
-
1755
- /* Leere Listen? */
1756
- if ( empty($options['country_black']) && empty($options['country_white']) ) {
1757
- $options['country_code'] = 0;
1758
- }
1759
-
1760
- /* Cron stoppen? */
1761
- if ( $options['cronjob_enable'] && !$this->get_option('cronjob_enable') ) {
1762
- $this->init_scheduled_hook();
1763
- } else if ( !$options['cronjob_enable'] && $this->get_option('cronjob_enable') ) {
1764
- $this->clear_scheduled_hook();
1765
- }
1766
-
1767
- /* Optionen speichern */
1768
- $this->update_options($options); ?>
1769
-
1770
- <div id="message" class="updated fade">
1771
- <p>
1772
- <strong>
1773
- <?php esc_html_e('Settings saved.') ?>
1774
- </strong>
1775
- </p>
1776
- </div>
1777
- <?php } ?>
1778
-
1779
- <div class="wrap">
1780
- <div class="icon32"></div>
1781
-
1782
- <h2>
1783
- Antispam Bee
1784
- </h2>
1785
-
1786
- <form method="post" action="">
1787
- <?php wp_nonce_field('antispam_bee') ?>
1788
-
1789
- <div id="poststuff">
1790
- <div class="postbox">
1791
- <h3>
1792
- <?php esc_html_e('Settings') ?>
1793
- </h3>
1794
-
1795
- <div class="inside">
1796
- <ul>
1797
- <li>
1798
- <div>
1799
- <input type="checkbox" name="antispam_bee_flag_spam" id="antispam_bee_flag_spam" value="1" <?php checked($this->get_option('flag_spam'), 1) ?> />
1800
- <label for="antispam_bee_flag_spam">
1801
- <?php esc_html_e('Mark as Spam, do not delete', 'antispam_bee') ?> <?php $this->show_help_link('flag_spam') ?>
1802
- </label>
1803
- </div>
1804
-
1805
- <div class="shift <?php echo ($this->get_option('flag_spam') ? '' : 'inact') ?>">
1806
- <ul>
1807
- <li>
1808
- <input type="checkbox" name="antispam_bee_ignore_filter" id="antispam_bee_ignore_filter" value="1" <?php checked($this->get_option('ignore_filter'), 1) ?> />
1809
- <?php esc_html_e('Limit on', 'antispam_bee') ?> <select name="antispam_bee_ignore_type"><?php foreach(array(1 => 'Comments', 2 => 'Pings') as $key => $value) {
1810
- echo '<option value="' .esc_attr($key). '" ';
1811
- selected($this->get_option('ignore_type'), $key);
1812
- echo '>' .esc_html__($value). '</option>';
1813
- } ?>
1814
- </select> <?php $this->show_help_link('ignore_filter') ?>
1815
- </li>
1816
- <li>
1817
- <input type="checkbox" name="antispam_bee_cronjob_enable" id="antispam_bee_cronjob_enable" value="1" <?php checked($this->get_option('cronjob_enable'), 1) ?> />
1818
- <?php echo sprintf(esc_html__('Spam will be automatically deleted after %s days', 'antispam_bee'), '<input type="text" name="antispam_bee_cronjob_interval" value="' .esc_attr($this->get_option('cronjob_interval')). '" class="small-text" />') ?>&nbsp;<?php $this->show_help_link('cronjob_enable') ?>
1819
- <?php if ( $this->get_option('cronjob_enable') && $this->get_option('cronjob_timestamp') ) {
1820
- echo sprintf(
1821
- '<br />(%s @ %s)',
1822
- esc_html__('Last check', 'antispam_bee'),
1823
- date_i18n('d.m.Y H:i:s', ($this->get_option('cronjob_timestamp') + get_option('gmt_offset') * 60))
1824
- );
1825
- } ?>
1826
- </li>
1827
- <li>
1828
- <input type="checkbox" name="antispam_bee_no_notice" id="antispam_bee_no_notice" value="1" <?php checked($this->get_option('no_notice'), 1) ?> />
1829
- <label for="antispam_bee_no_notice">
1830
- <?php esc_html_e('Hide the &quot;MARKED AS SPAM&quot; note', 'antispam_bee') ?> <?php $this->show_help_link('no_notice') ?>
1831
- </label>
1832
- </li>
1833
- <li>
1834
- <input type="checkbox" name="antispam_bee_email_notify" id="antispam_bee_email_notify" value="1" <?php checked($this->get_option('email_notify'), 1) ?> />
1835
- <label for="antispam_bee_email_notify">
1836
- <?php esc_html_e('Send an admin email when new spam item incoming', 'antispam_bee') ?> <?php $this->show_help_link('email_notify') ?>
1837
- </label>
1838
- </li>
1839
- </ul>
1840
- </div>
1841
- </li>
1842
- </ul>
1843
-
1844
- <ul>
1845
- <li>
1846
- <div>
1847
- <input type="checkbox" name="antispam_bee_country_code" id="antispam_bee_country_code" value="1" <?php checked($this->get_option('country_code'), 1) ?> />
1848
- <label for="antispam_bee_country_code">
1849
- <?php esc_html_e('Block comments and pings from specific countries', 'antispam_bee') ?> <?php $this->show_help_link('country_code') ?>
1850
- </label>
1851
- </div>
1852
-
1853
- <div class="shift <?php echo ($this->get_option('country_code') ? '' : 'inact') ?>">
1854
- <ul>
1855
- <li>
1856
- <label for="antispam_bee_ipinfodb_key">
1857
- IPInfoDB API Key (<a href="http://www.ipinfodb.com/register.php" target="_blank"><?php esc_html_e('get free', 'antispam_bee') ?></a>)
1858
- </label>
1859
- <input type="text" name="antispam_bee_ipinfodb_key" id="antispam_bee_ipinfodb_key" value="<?php echo esc_attr($this->get_option('ipinfodb_key')); ?>" class="maxi-text code" />
1860
- </li>
1861
- </ul>
1862
-
1863
- <ul>
1864
- <li>
1865
- <label for="antispam_bee_country_black">
1866
- <?php esc_html_e('Blacklist', 'antispam_bee') ?> (<a href="http://www.iso.org/iso/english_country_names_and_code_elements" target="_blank"><?php esc_html_e('iso codes', 'antispam_bee') ?></a>)
1867
- </label>
1868
- <input type="text" name="antispam_bee_country_black" id="antispam_bee_country_black" value="<?php echo esc_attr($this->get_option('country_black')); ?>" class="regular-text code" />
1869
- </li>
1870
- <li>
1871
- &nbsp;
1872
- <br />
1873
- <?php esc_html_e('or', 'antispam_bee') ?>
1874
- </li>
1875
- <li>
1876
- <label for="antispam_bee_country_white">
1877
- <?php esc_html_e('Whitelist', 'antispam_bee') ?> (<a href="http://www.iso.org/iso/english_country_names_and_code_elements" target="_blank"><?php esc_html_e('iso codes', 'antispam_bee') ?></a>)
1878
- </label>
1879
- <input type="text" name="antispam_bee_country_white" id="antispam_bee_country_white" value="<?php echo esc_attr($this->get_option('country_white')); ?>" class="regular-text code" />
1880
- </li>
1881
- </ul>
1882
- </div>
1883
- </li>
1884
- </ul>
1885
-
1886
- <ul>
1887
- <li>
1888
- <div>
1889
- <input type="checkbox" name="antispam_bee_honey_pot" id="antispam_bee_honey_pot" value="1" <?php checked($this->get_option('honey_pot'), 1) ?> />
1890
- <label for="antispam_bee_honey_pot">
1891
- <?php esc_html_e('Search comment spammers in the Project Honey Pot', 'antispam_bee') ?> <?php $this->show_help_link('honey_pot') ?>
1892
- </label>
1893
- </div>
1894
-
1895
- <ul class="shift <?php echo ($this->get_option('honey_pot') ? '' : 'inact') ?>">
1896
- <li>
1897
- <label for="antispam_bee_honey_key">
1898
- Honey Pot API Key (<a href="http://www.projecthoneypot.org/httpbl_configure.php" target="_blank"><?php esc_html_e('get free', 'antispam_bee') ?></a>)
1899
- </label>
1900
- <input type="text" name="antispam_bee_honey_key" id="antispam_bee_honey_key" value="<?php echo esc_attr($this->get_option('honey_key')); ?>" class="maxi-text code" />
1901
- </li>
1902
- </ul>
1903
- </li>
1904
- </ul>
1905
-
1906
- <ul>
1907
- <li>
1908
- <div>
1909
- <input type="checkbox" name="antispam_bee_translate_api" id="antispam_bee_translate_api" value="1" <?php checked($this->get_option('translate_api'), 1) ?> />
1910
- <label for="antispam_bee_translate_api">
1911
- <?php esc_html_e('Allow comments only in certain language', 'antispam_bee') ?> <?php $this->show_help_link('translate_api') ?>
1912
- </label>
1913
- </div>
1914
-
1915
- <div class="shift <?php echo ($this->get_option('translate_api') ? '' : 'inact') ?>">
1916
- <ul>
1917
- <li>
1918
- <label for="antispam_bee_translate_lang">
1919
- <?php esc_html_e('Language', 'antispam_bee') ?>
1920
- </label>
1921
- <select name="antispam_bee_translate_lang">
1922
- <?php foreach(array('de' => 'German', 'en' => 'English') as $k => $v) { ?>
1923
- <option <?php selected($this->get_option('translate_lang'), $k); ?> value="<?php echo esc_attr($k) ?>"><?php esc_html_e($v, 'antispam_bee') ?></option>
1924
- <?php } ?>
1925
- </select>
1926
- </li>
1927
- <li>
1928
- </ul>
1929
- </div>
1930
- </li>
1931
- </ul>
1932
-
1933
- <ul>
1934
- <li>
1935
- <input type="checkbox" name="antispam_bee_advanced_check" id="antispam_bee_advanced_check" value="1" <?php checked($this->get_option('advanced_check'), 1) ?> />
1936
- <label for="antispam_bee_advanced_check">
1937
- <?php esc_html_e('Enable stricter inspection for incomming comments', 'antispam_bee') ?> <?php $this->show_help_link('advanced_check') ?>
1938
- </label>
1939
- </li>
1940
- <li>
1941
- <input type="checkbox" name="antispam_bee_spam_ip" id="antispam_bee_spam_ip" value="1" <?php checked($this->get_option('spam_ip'), 1) ?> />
1942
- <label for="antispam_bee_spam_ip">
1943
- <?php esc_html_e('Consider comments which are already marked as spam', 'antispam_bee') ?> <?php $this->show_help_link('spam_ip') ?>
1944
- </label>
1945
- </li>
1946
- <li>
1947
- <input type="checkbox" name="antispam_bee_already_commented" id="antispam_bee_already_commented" value="1" <?php checked($this->get_option('already_commented'), 1) ?> />
1948
- <label for="antispam_bee_already_commented">
1949
- <?php esc_html_e('Do not check if the comment author has already approved', 'antispam_bee') ?> <?php $this->show_help_link('already_commented') ?>
1950
- </label>
1951
- </li>
1952
- </ul>
1953
-
1954
- <ul>
1955
- <li>
1956
- <input type="checkbox" name="antispam_bee_dashboard_count" id="antispam_bee_dashboard_count" value="1" <?php checked($this->get_option('dashboard_count'), 1) ?> />
1957
- <label for="antispam_bee_dashboard_count">
1958
- <?php esc_html_e('Display blocked comments count on the dashboard', 'antispam_bee') ?> <?php $this->show_help_link('dashboard_count') ?>
1959
- </label>
1960
- </li>
1961
- <?php if ( $this->is_min_php('5.0.2') ) { ?>
1962
- <li>
1963
- <input type="checkbox" name="antispam_bee_dashboard_chart" id="antispam_bee_dashboard_chart" value="1" <?php checked($this->get_option('dashboard_chart'), 1) ?> />
1964
- <label for="antispam_bee_dashboard_chart">
1965
- <?php esc_html_e('Display statistics on the dashboard', 'antispam_bee') ?> <?php $this->show_help_link('dashboard_chart') ?>
1966
- </label>
1967
- </li>
1968
- <?php } ?>
1969
- <li>
1970
- <input type="checkbox" name="antispam_bee_ignore_pings" id="antispam_bee_ignore_pings" value="1" <?php checked($this->get_option('ignore_pings'), 1) ?> />
1971
- <label for="antispam_bee_ignore_pings">
1972
- <?php esc_html_e('Do not check trackbacks / pingbacks', 'antispam_bee') ?> <?php $this->show_help_link('ignore_pings') ?>
1973
- </label>
1974
- </li>
1975
- <li>
1976
- <input type="checkbox" name="antispam_bee_always_allowed" id="antispam_bee_always_allowed" value="1" <?php checked($this->get_option('always_allowed'), 1) ?> />
1977
- <label for="antispam_bee_always_allowed">
1978
- <?php esc_html_e('Comments are also used outside of posts and pages', 'antispam_bee') ?> <?php $this->show_help_link('always_allowed') ?>
1979
- </label>
1980
- </li>
1981
- </ul>
1982
-
1983
- <p>
1984
- <input type="submit" name="antispam_bee_submit" class="button-primary" value="<?php esc_html_e('Save Changes') ?>" />
1985
- </p>
1986
- </div>
1987
- </div>
1988
-
1989
- </div>
1990
- </form>
1991
- </div>
1992
- <?php }
1993
- }
1994
-
1995
-
1996
- /* Fire! */
1997
- new Antispam_Bee();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
antispam_bee.php CHANGED
@@ -5,1212 +5,2016 @@ Text Domain: antispam_bee
5
  Domain Path: /lang
6
  Description: Easy and extremely productive spam-fighting plugin with many sophisticated solutions. Includes protection again trackback spam.
7
  Author: Sergej M&uuml;ller
8
- Author URI: http://www.wpSEO.org
9
  Plugin URI: http://antispambee.com
10
- Version: 2.2
11
  */
12
 
13
 
14
- if ( !function_exists ('is_admin') ) {
15
- header('Status: 403 Forbidden');
16
- header('HTTP/1.1 403 Forbidden');
17
- exit();
18
  }
 
 
 
 
 
 
 
 
 
19
  class Antispam_Bee {
20
- var $md5_sign;
21
- var $base_name;
22
- var $spam_reason;
23
- function Antispam_Bee() {
24
- if ( (defined('DOING_AJAX') && DOING_AJAX) or (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) ) {
25
- return;
26
- }
27
- $this->base_name = plugin_basename(__FILE__);
28
- $this->md5_sign = 'comment-' .substr(md5(get_bloginfo('url')), 0, 8);
29
- if ( defined('DOING_CRON') ) {
30
- add_action(
31
- 'antispam_bee_daily_cronjob',
32
- array(
33
- $this,
34
- 'exe_daily_cronjob'
35
- )
36
- );
37
- } elseif ( is_admin() ) {
38
- add_action(
39
- 'admin_menu',
40
- array(
41
- $this,
42
- 'init_admin_menu'
43
- )
44
- );
45
- if ( $this->is_current_page('home') ) {
46
- add_action(
47
- 'init',
48
- array(
49
- $this,
50
- 'load_plugin_lang'
51
- )
52
- );
53
- add_action(
54
- 'admin_init',
55
- array(
56
- $this,
57
- 'add_plugin_sources'
58
- )
59
- );
60
- } else if ( $this->is_current_page('index') ) {
61
- add_action(
62
- 'init',
63
- array(
64
- $this,
65
- 'load_plugin_lang'
66
- )
67
- );
68
- if ( $this->get_option('dashboard_count') ) {
69
- if ($this->is_min_wp('3.0')) {
70
- add_action(
71
- 'right_now_discussion_table_end',
72
- array(
73
- $this,
74
- 'add_discussion_table_end'
75
- )
76
- );
77
- } else {
78
- add_action(
79
- 'right_now_table_end',
80
- array(
81
- $this,
82
- 'add_table_end'
83
- )
84
- );
85
- }
86
- }
87
- if ( $this->get_option('dashboard_chart') ) {
88
- add_action(
89
- 'wp_dashboard_setup',
90
- array(
91
- $this,
92
- 'init_dashboard_chart'
93
- )
94
- );
95
- }
96
- } else if ( $this->is_current_page('plugins') ) {
97
- add_action(
98
- 'init',
99
- array(
100
- $this,
101
- 'load_plugin_lang'
102
- )
103
- );
104
- add_action(
105
- 'activate_' .$this->base_name,
106
- array(
107
- $this,
108
- 'init_plugin_options'
109
- )
110
- );
111
- add_action(
112
- 'deactivate_' .$this->base_name,
113
- array(
114
- $this,
115
- 'clear_scheduled_hook'
116
- )
117
- );
118
- add_action(
119
- 'admin_notices',
120
- array(
121
- $this,
122
- 'show_version_notice'
123
- )
124
- );
125
- add_filter(
126
- 'plugin_row_meta',
127
- array(
128
- $this,
129
- 'init_row_meta'
130
- ),
131
- 10,
132
- 2
133
- );
134
- }
135
- } else {
136
- add_action(
137
- 'template_redirect',
138
- array(
139
- $this,
140
- 'replace_comment_field'
141
- )
142
- );
143
- add_action(
144
- 'init',
145
- array(
146
- $this,
147
- 'precheck_comment_request'
148
- )
149
- );
150
- add_action(
151
- 'preprocess_comment',
152
- array(
153
- $this,
154
- 'verify_comment_request'
155
- ),
156
- 1
157
- );
158
- add_action(
159
- 'antispam_bee_count',
160
- array(
161
- $this,
162
- 'the_spam_count'
163
- )
164
- );
165
- add_filter(
166
- 'comment_notification_text',
167
- array(
168
- $this,
169
- 'replace_whois_link'
170
- )
171
- );
172
- add_filter(
173
- 'comment_moderation_text',
174
- array(
175
- $this,
176
- 'replace_whois_link'
177
- )
178
- );
179
- }
180
- }
181
- function load_plugin_lang() {
182
- load_plugin_textdomain(
183
- 'antispam_bee',
184
- false,
185
- 'antispam-bee/lang'
186
- );
187
- }
188
- function init_row_meta($links, $file) {
189
- if ( $this->base_name == $file ) {
190
- return array_merge(
191
- $links,
192
- array(
193
- sprintf(
194
- '<a href="https://flattr.com/thing/54115/Antispam-Bee-Das-WordPress-Plugin-fur-den-Schutz-gegen-Spam" target="_blank">%s</a>',
195
- esc_html__('Flattr')
196
- ),
197
- sprintf(
198
- '<a href="options-general.php?page=%s">%s</a>',
199
- $this->base_name,
200
- esc_html__('Settings')
201
- )
202
- )
203
- );
204
- }
205
- return $links;
206
- }
207
- function init_plugin_options() {
208
- add_option(
209
- 'antispam_bee',
210
- array(),
211
- '',
212
- 'no'
213
- );
214
- if ($this->get_option('cronjob_enable')) {
215
- $this->init_scheduled_hook();
216
- }
217
- }
218
- function get_option($field) {
219
- if ( !$options = wp_cache_get('antispam_bee') ) {
220
- $options = get_option('antispam_bee');
221
- wp_cache_set(
222
- 'antispam_bee',
223
- $options
224
- );
225
- }
226
- return @$options[$field];
227
- }
228
- function update_option($field, $value) {
229
- $this->update_options(
230
- array(
231
- $field => $value
232
- )
233
- );
234
- }
235
- function update_options($data) {
236
- $options = array_merge(
237
- (array)get_option('antispam_bee'),
238
- $data
239
- );
240
- update_option(
241
- 'antispam_bee',
242
- $options
243
- );
244
- wp_cache_set(
245
- 'antispam_bee',
246
- $options
247
- );
248
- }
249
- function init_scheduled_hook() {
250
- if ( !wp_next_scheduled('antispam_bee_daily_cronjob') ) {
251
- wp_schedule_event(
252
- time(),
253
- 'daily',
254
- 'antispam_bee_daily_cronjob'
255
- );
256
- }
257
- }
258
- function clear_scheduled_hook() {
259
- if ( wp_next_scheduled('antispam_bee_daily_cronjob') ) {
260
- wp_clear_scheduled_hook('antispam_bee_daily_cronjob');
261
- }
262
- }
263
- function exe_daily_cronjob() {
264
- if ( !$this->get_option('cronjob_enable') ) {
265
- return;
266
- }
267
- $this->update_option(
268
- 'cronjob_timestamp',
269
- time()
270
- );
271
- $this->delete_spam_comments();
272
- }
273
- function delete_spam_comments() {
274
- $days = (int)$this->get_option('cronjob_interval');
275
- if ( empty($days) ) {
276
- return false;
277
- }
278
- global $wpdb;
279
- $wpdb->query(
280
- $wpdb->prepare(
281
- "DELETE FROM `$wpdb->comments` WHERE `comment_approved` = 'spam' AND SUBDATE(NOW(), %d) > comment_date_gmt",
282
- $days
283
- )
284
- );
285
- $wpdb->query("OPTIMIZE TABLE `$wpdb->comments`");
286
- }
287
- function init_admin_menu() {
288
- $page = add_options_page(
289
- 'Antispam Bee',
290
- '<img src="' .plugins_url('antispam-bee/img/icon.png'). '" id="ab_icon" alt="Antispam Bee" />Antispam Bee',
291
- 'manage_options',
292
- __FILE__,
293
- array(
294
- $this,
295
- 'show_admin_menu'
296
- )
297
- );
298
- add_action(
299
- 'admin_print_scripts-' . $page,
300
- array(
301
- $this,
302
- 'add_enqueue_script'
303
- )
304
- );
305
- add_action(
306
- 'admin_print_styles-' . $page,
307
- array(
308
- $this,
309
- 'add_enqueue_style'
310
- )
311
- );
312
- }
313
- function add_plugin_sources() {
314
- $data = get_plugin_data(__FILE__);
315
- wp_register_script(
316
- 'ab_script',
317
- plugins_url('antispam-bee/js/script.js'),
318
- array('jquery'),
319
- $data['Version']
320
- );
321
- wp_register_style(
322
- 'ab_style',
323
- plugins_url('antispam-bee/css/style.css'),
324
- array(),
325
- $data['Version']
326
- );
327
- }
328
- function add_enqueue_script() {
329
- wp_enqueue_script('ab_script');
330
- }
331
- function add_enqueue_style() {
332
- wp_enqueue_style('ab_style');
333
- }
334
- function is_min_wp($version) {
335
- return version_compare(
336
- $GLOBALS['wp_version'],
337
- $version. 'alpha',
338
- '>='
339
- );
340
- }
341
- function is_min_php($version) {
342
- return version_compare(
343
- phpversion(),
344
- $version,
345
- '>='
346
- );
347
- }
348
- function is_mobile() {
349
- return strpos(TEMPLATEPATH, 'wptouch');
350
- }
351
- function is_current_page($page) {
352
- switch($page) {
353
- case 'index':
354
- return ( empty($GLOBALS['pagenow']) or ( !empty($GLOBALS['pagenow']) && $GLOBALS['pagenow'] == 'index.php' ) );
355
- case 'home':
356
- return ( !empty($_REQUEST['page']) && $_REQUEST['page'] == $this->base_name );
357
- case 'plugins':
358
- return ( !empty($GLOBALS['pagenow']) && $GLOBALS['pagenow'] == 'plugins.php' );
359
- default:
360
- return false;
361
- }
362
- }
363
- function add_table_end() {
364
- echo sprintf(
365
- '<tr>
366
- <td class="first b b-tags"></td>
367
- <td class="t tags"></td>
368
- <td class="b b-spam" style="font-size:18px">%s</td>
369
- <td class="last t">%s</td>
370
- </tr>',
371
- esc_html($this->get_spam_count()),
372
- esc_html__('Blocked', 'antispam_bee')
373
- );
374
- }
375
- function add_discussion_table_end() {
376
- echo sprintf(
377
- '<tr>
378
- <td class="b b-spam" style="font-size:18px">%s</td>
379
- <td class="last t">%s</td>
380
- </tr>',
381
- esc_html($this->get_spam_count()),
382
- esc_html__('Blocked', 'antispam_bee')
383
- );
384
- }
385
- function init_dashboard_chart() {
386
- if ( !current_user_can('administrator') or !$this->is_min_php('5.0.2') ) {
387
- return false;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
388
  }
389
- wp_add_dashboard_widget(
390
- 'ab_spam_chart',
391
- 'Antispam Bee',
392
- array(
393
- $this,
394
- 'show_spam_chart'
395
- )
396
- );
397
- add_action(
398
- 'wp_print_scripts',
399
- array(
400
- $this,
401
- 'add_dashboard_js'
402
- )
403
- );
404
  add_action(
405
- 'admin_head',
406
- array(
407
- $this,
408
- 'add_dashboard_css'
409
- )
410
- );
411
- }
412
- function add_dashboard_css() {
413
- $data = get_plugin_data(__FILE__);
414
- wp_register_style(
415
- 'antispambee',
416
- plugins_url('antispam-bee/css/dashboard.css'),
417
- array(),
418
- $data['Version']
419
- );
420
- wp_print_styles('antispambee');
421
- }
422
- function add_dashboard_js() {
423
- $items = (array)$this->get_option('daily_stats');
424
- if ( empty($items) or count($items) == 1 ) {
425
- return;
426
- }
427
- krsort($items, SORT_NUMERIC);
428
- $output = array(
429
- 'created' => array(),
430
- 'count' => array()
431
  );
432
- $i = 0;
433
- foreach($items as $timestamp => $count) {
434
- array_push(
435
- $output['created'],
436
- ( $timestamp == strtotime('today', current_time('timestamp')) ? __('Today', 'antispam_bee') : date('d.m', $timestamp) )
437
- );
438
- array_push(
439
- $output['count'],
440
- (int)$count
441
- );
442
- }
443
- $stats = array(
444
- 'created' => implode(',', $output['created']),
445
- 'count' => implode(',', $output['count'])
446
- );
447
- $data = get_plugin_data(__FILE__);
448
- wp_register_script(
449
- 'ab_chart',
450
- plugins_url('antispam-bee/js/dashboard.js'),
451
- array('jquery'),
452
- $data['Version']
453
- );
454
- wp_register_script(
455
- 'google_jsapi',
456
- 'http://www.google.com/jsapi',
457
- false
458
- );
459
- wp_enqueue_script('google_jsapi');
460
- wp_enqueue_script('ab_chart');
461
- wp_localize_script(
462
- 'ab_chart',
463
- 'antispambee',
464
- $stats
465
- );
466
- }
467
- function show_spam_chart() {
468
- echo '<div id="ab_chart"></div>';
469
- }
470
- function show_version_notice() {
471
- if ( $this->is_min_wp('2.8') ) {
472
- return;
473
- }
474
- echo sprintf(
475
- '<div class="error"><p><strong>Antispam Bee</strong> %s</p></div>',
476
- esc_html__('requires at least WordPress 2.8', 'antispam_bee')
477
- );
478
- }
479
- function cut_ip_addr($ip) {
480
- if ( !empty($ip) ) {
481
- return str_replace(
482
- strrchr($ip, '.'),
483
- '',
484
- $ip
485
- );
486
- }
487
- }
488
- function replace_comment_field() {
489
- if ( is_feed() or is_trackback() or is_robots() or $this->is_mobile() ) {
490
- return;
491
- }
492
- if ( !is_singular() && !$this->get_option('always_allowed') ) {
493
- return;
494
- }
495
- ob_start(
496
- create_function(
497
- '$input',
498
- 'return preg_replace("#<textarea(.*?)name=([\"\'])comment([\"\'])(.+?)</textarea>#s", "<textarea$1name=$2' .$this->md5_sign. '$3$4</textarea><textarea name=\"comment\" style=\"display:none\" rows=\"1\" cols=\"1\"></textarea>", $input, 1);'
499
- )
500
- );
501
- }
502
- function is_ip_spam($ip) {
503
- if ( empty($ip) ) {
504
- return true;
505
- }
506
- global $wpdb;
507
- $found = $wpdb->get_var(
508
- $wpdb->prepare(
509
- "SELECT `comment_ID` FROM `$wpdb->comments` WHERE `comment_approved` = 'spam' AND `comment_author_IP` = %s LIMIT 1",
510
- (string)$ip
511
- )
512
- );
513
- if ( $found ) {
514
- return true;
515
- }
516
- return false;
517
- }
518
- function is_already_commented($email) {
519
- if ( empty($email) ) {
520
- return false;
521
- }
522
- global $wpdb;
523
- $found = $wpdb->get_var(
524
- $wpdb->prepare(
525
- "SELECT `comment_ID` FROM `$wpdb->comments` WHERE `comment_approved` = '1' AND `comment_author_email` = %s LIMIT 1",
526
- (string)$email
527
- )
528
- );
529
- if ( $found ) {
530
- return true;
531
- }
532
- return false;
533
- }
534
- function is_blacklist_country($ip) {
535
- $key = $this->get_option('ipinfodb_key');
536
- if ( empty($ip) or empty($key) ) {
537
- return false;
538
- }
539
- $white = preg_split(
540
- '/ /',
541
- $this->get_option('country_white'),
542
- -1,
543
- PREG_SPLIT_NO_EMPTY
544
- );
545
- $black = preg_split(
546
- '/ /',
547
- $this->get_option('country_black'),
548
- -1,
549
- PREG_SPLIT_NO_EMPTY
550
- );
551
- if ( empty($white) && empty($black) ) {
552
- return false;
553
- }
554
- $response = wp_remote_get(
555
- sprintf(
556
- 'http://api.ipinfodb.com/v2/ip_query_country.php?key=%s&ip=%s',
557
- $key,
558
- $ip
559
- )
560
- );
561
- if ( is_wp_error($response) ) {
562
- return false;
563
- }
564
- preg_match(
565
- '#Code>([A-Z]{2})</Country#i',
566
- wp_remote_retrieve_body($response),
567
- $matches
568
- );
569
- if ( empty($matches[1]) ) {
570
- return false;
571
- }
572
- if ( !empty($black) ) {
573
- return ( in_array($matches[1], $black) ? true : false );
574
- }
575
- return ( in_array($matches[1], $white) ? false : true );
576
- }
577
- function is_honey_spam($ip) {
578
- $key = $this->get_option('honey_key');
579
- if ( empty($ip) or empty($key) ) {
580
- return false;
581
- }
582
- $host = sprintf(
583
- '%s.%s.dnsbl.httpbl.org',
584
- $key,
585
- implode(
586
- '.',
587
- array_reverse(
588
- explode(
589
- '.',
590
- $ip
591
- )
592
- )
593
- )
594
- );
595
- $bits = explode(
596
- '.',
597
- gethostbyname($host)
598
- );
599
- return ( $bits[0] == 127 && $bits[3] & 4 );
600
- }
601
- function is_lang_spam($content)
602
- {
603
- $lang = $this->get_option('translate_lang');
604
- $content = rawurlencode(
605
- mb_substr(
606
- strip_tags(stripslashes($content)),
607
- 0,
608
- 200
609
- )
610
- );
611
- if ( empty($lang) or empty($content) ) {
612
- return false;
613
- }
614
- $response = wp_remote_get(
615
- sprintf(
616
- 'http://translate.google.de/translate_a/t?client=x&text=%s',
617
- $content
618
- )
619
- );
620
- if ( is_wp_error($response) ) {
621
- return false;
622
- }
623
- preg_match(
624
- '/"src":"(\\D{2})"/',
625
- wp_remote_retrieve_body($response),
626
- $matches
627
- );
628
- if ( empty($matches[1]) ) {
629
- return false;
630
- }
631
- return ( $matches[1] != $lang );
632
- }
633
- function is_fake_ip($ip)
634
- {
635
- if ( empty($ip) ) {
636
- return true;
637
- }
638
- $found = strpos(
639
- $ip,
640
- $this->cut_ip_addr(
641
- gethostbyname(
642
- gethostbyaddr($ip)
643
- )
644
- )
645
- );
646
- return $found === false;
647
- }
648
- function precheck_comment_request() {
649
- if ( is_feed() or is_trackback() or $this->is_mobile() ) {
650
- return;
651
- }
652
- $request_url = @$_SERVER['REQUEST_URI'];
653
- $hidden_field = @$_POST['comment'];
654
- $plugin_field = @$_POST[$this->md5_sign];
655
- if ( empty($_POST) or empty($request_url) or strpos($request_url, 'wp-comments-post.php') === false ) {
656
- return;
657
- }
658
- if (empty($hidden_field) && !empty($plugin_field)) {
659
- $_POST['comment'] = $plugin_field;
660
- unset($_POST[$this->md5_sign]);
661
- } else {
662
- $_POST['bee_spam'] = 1;
663
- }
664
- }
665
- function verify_comment_request($comment) {
666
- $request_url = @$_SERVER['REQUEST_URI'];
667
- $request_ip = @$_SERVER['REMOTE_ADDR'];
668
- if ( empty($request_url) or empty($request_ip) ) {
669
- return $this->flag_comment_request(
670
- $comment,
671
- 'Empty Data'
672
- );
673
- }
674
- $comment_type = @$comment['comment_type'];
675
- $comment_url = @$comment['comment_author_url'];
676
- $comment_body = @$comment['comment_content'];
677
- $comment_email = @$comment['comment_author_email'];
678
- $ping_types = array('pingback', 'trackback', 'pings');
679
- $ping_allowed = !$this->get_option('ignore_pings');
680
- if ( !empty($comment_url) ) {
681
- $comment_parse = @parse_url($comment_url);
682
- $comment_host = @$comment_parse['host'];
683
- }
684
- if ( strpos($request_url, 'wp-comments-post.php') !== false && !empty($_POST) ) {
685
- if ( $this->get_option('already_commented') && $this->is_already_commented($comment_email) ) {
686
- return $comment;
687
- }
688
- if ( !empty($_POST['bee_spam']) ) {
689
- return $this->flag_comment_request(
690
- $comment,
691
- 'CSS Hack'
692
- );
693
- }
694
- if ( $this->get_option('advanced_check') && $this->is_fake_ip($request_ip) ) {
695
- return $this->flag_comment_request(
696
- $comment,
697
- 'Server IP'
698
- );
699
- }
700
- if ( $this->get_option('spam_ip') && $this->is_ip_spam($request_ip) ) {
701
- return $this->flag_comment_request(
702
- $comment,
703
- 'Spam IP'
704
- );
705
- }
706
- if ( $this->get_option('translate_api') && $this->is_lang_spam($comment_body) ) {
707
- return $this->flag_comment_request(
708
- $comment,
709
- 'Comment Language'
710
- );
711
- }
712
- if ( $this->get_option('country_code') && $this->is_blacklist_country($request_ip) ) {
713
- return $this->flag_comment_request(
714
- $comment,
715
- 'Country Check'
716
- );
717
- }
718
- if ( $this->get_option('honey_pot') && $this->is_honey_spam($request_ip) ) {
719
- return $this->flag_comment_request(
720
- $comment,
721
- 'Honey Pot'
722
- );
723
- }
724
- } else if ( !empty($comment_type) && in_array($comment_type, $ping_types) && $ping_allowed ) {
725
- if ( empty($comment_url) or empty($comment_body) ) {
726
- return $this->flag_comment_request(
727
- $comment,
728
- 'Empty Data',
729
- true
730
- );
731
- }
732
- if ( !empty($comment_host) && gethostbyname($comment_host) != $request_ip ) {
733
- return $this->flag_comment_request(
734
- $comment,
735
- 'Server IP',
736
- true
737
- );
738
- }
739
- if ( $this->get_option('spam_ip') && $this->is_ip_spam($request_ip) === true ) {
740
- return $this->flag_comment_request(
741
- $comment,
742
- 'Spam IP',
743
- true
744
- );
745
- }
746
- if ( $this->get_option('country_code') && $this->is_blacklist_country($request_ip) ) {
747
- return $this->flag_comment_request(
748
- $comment,
749
- 'Country Check',
750
- true
751
- );
752
- }
753
- if ( $this->get_option('honey_pot') && $this->is_honey_spam($request_ip) ) {
754
- return $this->flag_comment_request(
755
- $comment,
756
- 'Honey Pot',
757
- true
758
- );
759
- }
760
- }
761
- return $comment;
762
- }
763
- function flag_comment_request($comment, $reason, $is_ping = false) {
764
- $spam_remove = !$this->get_option('flag_spam');
765
- $spam_notice = !$this->get_option('no_notice');
766
- $ignore_filter = $this->get_option('ignore_filter');
767
- $ignore_type = $this->get_option('ignore_type');
768
- $this->update_spam_count();
769
- $this->update_daily_stats();
770
- if ( $spam_remove ) {
771
- die('Spam deleted.');
772
- }
773
- if ( $ignore_filter && (($ignore_type == 1 && $is_ping) or ($ignore_type == 2 && !$is_ping)) ) {
774
- die('Spam deleted.');
775
- }
776
- $this->spam_reason = $reason;
777
- add_filter(
778
- 'pre_comment_approved',
779
- create_function(
780
- '',
781
- 'return "spam";'
782
- )
783
- );
784
- add_filter(
785
- 'comment_post',
786
- array(
787
- $this,
788
- 'send_email_notify'
789
- )
790
- );
791
- if ( $spam_notice ) {
792
- $comment['comment_content'] = sprintf(
793
- '[MARKED AS SPAM BY ANTISPAM BEE | %s]%s%s',
794
- $reason,
795
- "\n",
796
- $comment['comment_content']
797
- );
798
- }
799
- return $comment;
800
- }
801
- function replace_whois_link($body) {
802
- if ( $this->get_option('country_code') ) {
803
- return preg_replace(
804
- '/^Whois .+?=(.+?)/m',
805
- 'IP Locator: http://ipinfodb.com/ip_locator.php?ip=$1',
806
- $body
807
- );
808
- }
809
- return $body;
810
- }
811
- function send_email_notify($id) {
812
- if ( !$this->get_option('email_notify') ) {
813
- return $id;
814
- }
815
- $comment = @$GLOBALS['commentdata'];
816
- $ip = @$_SERVER['REMOTE_ADDR'];
817
- if ( empty($comment) or empty($ip) ) {
818
- return $id;
819
- }
820
- if ( !$post = get_post($comment['comment_post_ID']) ) {
821
- return $id;
822
- }
823
- $this->load_plugin_lang();
824
- $subject = sprintf(
825
- '[%s] %s',
826
- get_bloginfo('name'),
827
- __('Comment marked as spam', 'antispam_bee')
828
- );
829
- if ( !$content = strip_tags(stripslashes($comment['comment_content'])) ) {
830
- $content = sprintf(
831
- '-- %s --',
832
- __('Content removed by Antispam Bee', 'antispam_bee')
833
- );
834
- }
835
- $body = sprintf(
836
- "%s \"%s\"\r\n\r\n",
837
- __('New spam comment on your post', 'antispam_bee'),
838
- strip_tags($post->post_title)
839
- ).sprintf(
840
- "%s: %s\r\n",
841
- __('Author'),
842
- $comment['comment_author'],
843
- $ip
844
- ).sprintf(
845
- "URL: %s\r\n",
846
- esc_url($comment['comment_author_url'])
847
- ).sprintf(
848
- "IP Locator: http://ipinfodb.com/ip_locator.php?ip=%s\r\n",
849
- $ip
850
- ).sprintf(
851
- "%s: %s\r\n\r\n",
852
- __('Spam Reason', 'antispam_bee'),
853
- __($this->spam_reason, 'antispam_bee')
854
- ).sprintf(
855
- "%s\r\n\r\n\r\n",
856
- $content
857
- ).(
858
- EMPTY_TRASH_DAYS ? (
859
- sprintf(
860
- "%s: %s\r\n",
861
- __('Trash it', 'antispam_bee'),
862
- admin_url('comment.php?action=trash&c=' .$id)
863
- )
864
- ) : (
865
- sprintf(
866
- "%s: %s\r\n",
867
- __('Delete it', 'antispam_bee'),
868
- admin_url('comment.php?action=delete&c=' .$id)
869
- )
870
- )
871
- ).sprintf(
872
- "%s: %s\r\n",
873
- __('Approve it', 'antispam_bee'),
874
- admin_url('comment.php?action=approve&c=' .$id)
875
- ).sprintf(
876
- "%s: %s\r\n\r\n",
877
- __('Spam list', 'antispam_bee'),
878
- admin_url('edit-comments.php?comment_status=spam')
879
- ).sprintf(
880
- "%s\r\n%s\r\n",
881
- __('Notify message by Antispam Bee', 'antispam_bee'),
882
- __('http://antispambee.com', 'antispam_bee')
883
- );
884
- wp_mail(
885
- get_bloginfo('admin_email'),
886
- $subject,
887
- $body
888
- );
889
- return $id;
890
- }
891
- function get_spam_count() {
892
- $count = $this->get_option('spam_count');
893
- return ( get_locale() == 'de_DE' ? number_format($count, 0, '', '.') : number_format_i18n($count) );
894
- }
895
- function the_spam_count() {
896
- echo esc_html($this->get_spam_count());
897
- }
898
- function update_spam_count() {
899
- $this->update_option(
900
- 'spam_count',
901
- intval($this->get_option('spam_count') + 1)
902
- );
903
- }
904
- function update_daily_stats() {
905
- $stats = (array)$this->get_option('daily_stats');
906
- $today = (int)strtotime('today');
907
- if ( array_key_exists($today, $stats) ) {
908
- $stats[$today] ++;
909
- } else {
910
- $stats[$today] = 1;
911
- }
912
- krsort($stats, SORT_NUMERIC);
913
- $this->update_option(
914
- 'daily_stats',
915
- array_slice($stats, 0, 31, true)
916
- );
917
- }
918
- function show_help_link($anchor) {
919
- if ( get_locale() != 'de_DE' ) {
920
- return '';
921
- }
922
- echo sprintf(
923
- '[<a href="http://playground.ebiene.de/1137/antispam-bee-wordpress-plugin/#%s" target="_blank">?</a>]',
924
- $anchor
925
- );
926
- }
927
- function show_admin_menu() {
928
- if ( !empty($_POST) ) {
929
- check_admin_referer('antispam_bee');
930
- $options = array(
931
- 'flag_spam'=> (int)(!empty($_POST['antispam_bee_flag_spam'])),
932
- 'ignore_pings'=> (int)(!empty($_POST['antispam_bee_ignore_pings'])),
933
- 'ignore_filter'=> (int)(!empty($_POST['antispam_bee_ignore_filter'])),
934
- 'ignore_type'=> (int)(@$_POST['antispam_bee_ignore_type']),
935
- 'no_notice'=> (int)(!empty($_POST['antispam_bee_no_notice'])),
936
- 'email_notify'=> (int)(!empty($_POST['antispam_bee_email_notify'])),
937
- 'cronjob_enable'=> (int)(!empty($_POST['antispam_bee_cronjob_enable'])),
938
- 'cronjob_interval'=> (int)(@$_POST['antispam_bee_cronjob_interval']),
939
- 'dashboard_count'=> (int)(!empty($_POST['antispam_bee_dashboard_count'])),
940
- 'dashboard_chart'=> (int)(!empty($_POST['antispam_bee_dashboard_chart'])),
941
- 'advanced_check'=> (int)(!empty($_POST['antispam_bee_advanced_check'])),
942
- 'spam_ip'=> (int)(!empty($_POST['antispam_bee_spam_ip'])),
943
- 'already_commented'=> (int)(!empty($_POST['antispam_bee_already_commented'])),
944
- 'always_allowed'=> (int)(!empty($_POST['antispam_bee_always_allowed'])),
945
- 'honey_pot'=> (int)(!empty($_POST['antispam_bee_honey_pot'])),
946
- 'honey_key'=> (string)(@$_POST['antispam_bee_honey_key']),
947
- 'country_code'=> (int)(!empty($_POST['antispam_bee_country_code'])),
948
- 'country_black'=> (string)(@$_POST['antispam_bee_country_black']),
949
- 'country_white'=> (string)(@$_POST['antispam_bee_country_white']),
950
- 'ipinfodb_key'=> (string)(@$_POST['antispam_bee_ipinfodb_key']),
951
- 'translate_api'=> (int)(!empty($_POST['antispam_bee_translate_api'])),
952
- 'translate_lang'=> (string)(@$_POST['antispam_bee_translate_lang'])
953
- );
954
- if ( empty($options['cronjob_interval']) ) {
955
- $options['cronjob_enable'] = 0;
956
- }
957
- if ( !empty($options['honey_key']) ) {
958
- $options['honey_key'] = preg_replace(
959
- '/[^a-z]/',
960
- '',
961
- strtolower(
962
- strip_tags($options['honey_key'])
963
- )
964
- );
965
- }
966
- if ( empty($options['honey_key']) ) {
967
- $options['honey_pot'] = 0;
968
- }
969
- if ( !empty($options['translate_lang']) ) {
970
- $options['translate_lang'] = preg_replace(
971
- '/[^den]/',
972
- '',
973
- strip_tags($options['translate_lang'])
974
- );
975
- }
976
- if ( empty($options['translate_lang']) ) {
977
- $options['translate_api'] = 0;
978
- }
979
- if ( !empty($options['country_black']) ) {
980
- $options['country_black'] = preg_replace(
981
- '/[^A-Z ]/',
982
- '',
983
- strtoupper(
984
- strip_tags($options['country_black'])
985
- )
986
- );
987
- }
988
- if ( !empty($options['country_white']) ) {
989
- $options['country_white'] = preg_replace(
990
- '/[^A-Z ]/',
991
- '',
992
- strtoupper(
993
- strip_tags($options['country_white'])
994
- )
995
  );
996
- }
997
- if ( empty($options['ipinfodb_key']) ) {
998
- $options['country_code'] = 0;
999
- }
1000
- if ( empty($options['country_black']) && empty($options['country_white']) ) {
1001
- $options['country_code'] = 0;
1002
- }
1003
- if ( $options['cronjob_enable'] && !$this->get_option('cronjob_enable') ) {
1004
- $this->init_scheduled_hook();
1005
- } else if ( !$options['cronjob_enable'] && $this->get_option('cronjob_enable') ) {
1006
- $this->clear_scheduled_hook();
1007
- }
1008
- $this->update_options($options); ?>
1009
- <div id="message" class="updated fade">
1010
- <p>
1011
- <strong>
1012
- <?php esc_html_e('Settings saved.') ?>
1013
- </strong>
1014
- </p>
1015
- </div>
1016
- <?php } ?>
1017
- <div class="wrap">
1018
- <div class="icon32"></div>
1019
- <h2>
1020
- Antispam Bee
1021
- </h2>
1022
- <form method="post" action="">
1023
- <?php wp_nonce_field('antispam_bee') ?>
1024
- <div id="poststuff">
1025
- <div class="postbox">
1026
- <h3>
1027
- <?php esc_html_e('Settings') ?>
1028
- </h3>
1029
- <div class="inside">
1030
- <ul>
1031
- <li>
1032
- <div>
1033
- <input type="checkbox" name="antispam_bee_flag_spam" id="antispam_bee_flag_spam" value="1" <?php checked($this->get_option('flag_spam'), 1) ?> />
1034
- <label for="antispam_bee_flag_spam">
1035
- <?php esc_html_e('Mark as Spam, do not delete', 'antispam_bee') ?> <?php $this->show_help_link('flag_spam') ?>
1036
- </label>
1037
- </div>
1038
- <div class="shift <?php echo ($this->get_option('flag_spam') ? '' : 'inact') ?>">
1039
- <ul>
1040
- <li>
1041
- <input type="checkbox" name="antispam_bee_ignore_filter" id="antispam_bee_ignore_filter" value="1" <?php checked($this->get_option('ignore_filter'), 1) ?> />
1042
- <?php esc_html_e('Limit on', 'antispam_bee') ?> <select name="antispam_bee_ignore_type"><?php foreach(array(1 => 'Comments', 2 => 'Pings') as $key => $value) {
1043
- echo '<option value="' .esc_attr($key). '" ';
1044
- selected($this->get_option('ignore_type'), $key);
1045
- echo '>' .esc_html__($value). '</option>';
1046
- } ?>
1047
- </select> <?php $this->show_help_link('ignore_filter') ?>
1048
- </li>
1049
- <li>
1050
- <input type="checkbox" name="antispam_bee_cronjob_enable" id="antispam_bee_cronjob_enable" value="1" <?php checked($this->get_option('cronjob_enable'), 1) ?> />
1051
- <?php echo sprintf(esc_html__('Spam will be automatically deleted after %s days', 'antispam_bee'), '<input type="text" name="antispam_bee_cronjob_interval" value="' .esc_attr($this->get_option('cronjob_interval')). '" class="small-text" />') ?>&nbsp;<?php $this->show_help_link('cronjob_enable') ?>
1052
- <?php if ( $this->get_option('cronjob_enable') && $this->get_option('cronjob_timestamp') ) {
1053
- echo sprintf(
1054
- '<br />(%s @ %s)',
1055
- esc_html__('Last check', 'antispam_bee'),
1056
- date_i18n('d.m.Y H:i:s', ($this->get_option('cronjob_timestamp') + get_option('gmt_offset') * 60))
1057
  );
1058
- } ?>
1059
- </li>
1060
- <li>
1061
- <input type="checkbox" name="antispam_bee_no_notice" id="antispam_bee_no_notice" value="1" <?php checked($this->get_option('no_notice'), 1) ?> />
1062
- <label for="antispam_bee_no_notice">
1063
- <?php esc_html_e('Hide the &quot;MARKED AS SPAM&quot; note', 'antispam_bee') ?> <?php $this->show_help_link('no_notice') ?>
1064
- </label>
1065
- </li>
1066
- <li>
1067
- <input type="checkbox" name="antispam_bee_email_notify" id="antispam_bee_email_notify" value="1" <?php checked($this->get_option('email_notify'), 1) ?> />
1068
- <label for="antispam_bee_email_notify">
1069
- <?php esc_html_e('Send an admin email when new spam item incoming', 'antispam_bee') ?> <?php $this->show_help_link('email_notify') ?>
1070
- </label>
1071
- </li>
1072
- </ul>
1073
- </div>
1074
- </li>
1075
- </ul>
1076
- <ul>
1077
- <li>
1078
- <div>
1079
- <input type="checkbox" name="antispam_bee_country_code" id="antispam_bee_country_code" value="1" <?php checked($this->get_option('country_code'), 1) ?> />
1080
- <label for="antispam_bee_country_code">
1081
- <?php esc_html_e('Block comments and pings from specific countries', 'antispam_bee') ?> <?php $this->show_help_link('country_code') ?>
1082
- </label>
1083
- </div>
1084
- <div class="shift <?php echo ($this->get_option('country_code') ? '' : 'inact') ?>">
1085
- <ul>
1086
- <li>
1087
- <label for="antispam_bee_ipinfodb_key">
1088
- IPInfoDB API Key (<a href="http://www.ipinfodb.com/register.php" target="_blank"><?php esc_html_e('get free', 'antispam_bee') ?></a>)
1089
- </label>
1090
- <input type="text" name="antispam_bee_ipinfodb_key" id="antispam_bee_ipinfodb_key" value="<?php echo esc_attr($this->get_option('ipinfodb_key')); ?>" class="maxi-text code" />
1091
- </li>
1092
- </ul>
1093
- <ul>
1094
- <li>
1095
- <label for="antispam_bee_country_black">
1096
- <?php esc_html_e('Blacklist', 'antispam_bee') ?> (<a href="http://www.iso.org/iso/english_country_names_and_code_elements" target="_blank"><?php esc_html_e('iso codes', 'antispam_bee') ?></a>)
1097
- </label>
1098
- <input type="text" name="antispam_bee_country_black" id="antispam_bee_country_black" value="<?php echo esc_attr($this->get_option('country_black')); ?>" class="regular-text code" />
1099
- </li>
1100
- <li>
1101
- &nbsp;
1102
- <br />
1103
- <?php esc_html_e('or', 'antispam_bee') ?>
1104
- </li>
1105
- <li>
1106
- <label for="antispam_bee_country_white">
1107
- <?php esc_html_e('Whitelist', 'antispam_bee') ?> (<a href="http://www.iso.org/iso/english_country_names_and_code_elements" target="_blank"><?php esc_html_e('iso codes', 'antispam_bee') ?></a>)
1108
- </label>
1109
- <input type="text" name="antispam_bee_country_white" id="antispam_bee_country_white" value="<?php echo esc_attr($this->get_option('country_white')); ?>" class="regular-text code" />
1110
- </li>
1111
- </ul>
1112
- </div>
1113
- </li>
1114
- </ul>
1115
- <ul>
1116
- <li>
1117
- <div>
1118
- <input type="checkbox" name="antispam_bee_honey_pot" id="antispam_bee_honey_pot" value="1" <?php checked($this->get_option('honey_pot'), 1) ?> />
1119
- <label for="antispam_bee_honey_pot">
1120
- <?php esc_html_e('Search comment spammers in the Project Honey Pot', 'antispam_bee') ?> <?php $this->show_help_link('honey_pot') ?>
1121
- </label>
1122
- </div>
1123
- <ul class="shift <?php echo ($this->get_option('honey_pot') ? '' : 'inact') ?>">
1124
- <li>
1125
- <label for="antispam_bee_honey_key">
1126
- Honey Pot API Key (<a href="http://www.projecthoneypot.org/httpbl_configure.php" target="_blank"><?php esc_html_e('get free', 'antispam_bee') ?></a>)
1127
- </label>
1128
- <input type="text" name="antispam_bee_honey_key" id="antispam_bee_honey_key" value="<?php echo esc_attr($this->get_option('honey_key')); ?>" class="maxi-text code" />
1129
- </li>
1130
- </ul>
1131
- </li>
1132
- </ul>
1133
- <ul>
1134
- <li>
1135
- <div>
1136
- <input type="checkbox" name="antispam_bee_translate_api" id="antispam_bee_translate_api" value="1" <?php checked($this->get_option('translate_api'), 1) ?> />
1137
- <label for="antispam_bee_translate_api">
1138
- <?php esc_html_e('Allow comments only in certain language', 'antispam_bee') ?> <?php $this->show_help_link('translate_api') ?>
1139
- </label>
1140
- </div>
1141
- <div class="shift <?php echo ($this->get_option('translate_api') ? '' : 'inact') ?>">
1142
- <ul>
1143
- <li>
1144
- <label for="antispam_bee_translate_lang">
1145
- <?php esc_html_e('Language', 'antispam_bee') ?>
1146
- </label>
1147
- <select name="antispam_bee_translate_lang">
1148
- <?php foreach(array('de' => 'German', 'en' => 'English') as $k => $v) { ?>
1149
- <option <?php selected($this->get_option('translate_lang'), $k); ?> value="<?php echo esc_attr($k) ?>"><?php esc_html_e($v, 'antispam_bee') ?></option>
1150
- <?php } ?>
1151
- </select>
1152
- </li>
1153
- <li>
1154
- </ul>
1155
- </div>
1156
- </li>
1157
- </ul>
1158
- <ul>
1159
- <li>
1160
- <input type="checkbox" name="antispam_bee_advanced_check" id="antispam_bee_advanced_check" value="1" <?php checked($this->get_option('advanced_check'), 1) ?> />
1161
- <label for="antispam_bee_advanced_check">
1162
- <?php esc_html_e('Enable stricter inspection for incomming comments', 'antispam_bee') ?> <?php $this->show_help_link('advanced_check') ?>
1163
- </label>
1164
- </li>
1165
- <li>
1166
- <input type="checkbox" name="antispam_bee_spam_ip" id="antispam_bee_spam_ip" value="1" <?php checked($this->get_option('spam_ip'), 1) ?> />
1167
- <label for="antispam_bee_spam_ip">
1168
- <?php esc_html_e('Consider comments which are already marked as spam', 'antispam_bee') ?> <?php $this->show_help_link('spam_ip') ?>
1169
- </label>
1170
- </li>
1171
- <li>
1172
- <input type="checkbox" name="antispam_bee_already_commented" id="antispam_bee_already_commented" value="1" <?php checked($this->get_option('already_commented'), 1) ?> />
1173
- <label for="antispam_bee_already_commented">
1174
- <?php esc_html_e('Do not check if the comment author has already approved', 'antispam_bee') ?> <?php $this->show_help_link('already_commented') ?>
1175
- </label>
1176
- </li>
1177
- </ul>
1178
- <ul>
1179
- <li>
1180
- <input type="checkbox" name="antispam_bee_dashboard_count" id="antispam_bee_dashboard_count" value="1" <?php checked($this->get_option('dashboard_count'), 1) ?> />
1181
- <label for="antispam_bee_dashboard_count">
1182
- <?php esc_html_e('Display blocked comments count on the dashboard', 'antispam_bee') ?> <?php $this->show_help_link('dashboard_count') ?>
1183
- </label>
1184
- </li>
1185
- <?php if ( $this->is_min_php('5.0.2') ) { ?>
1186
- <li>
1187
- <input type="checkbox" name="antispam_bee_dashboard_chart" id="antispam_bee_dashboard_chart" value="1" <?php checked($this->get_option('dashboard_chart'), 1) ?> />
1188
- <label for="antispam_bee_dashboard_chart">
1189
- <?php esc_html_e('Display statistics on the dashboard', 'antispam_bee') ?> <?php $this->show_help_link('dashboard_chart') ?>
1190
- </label>
1191
- </li>
1192
- <?php } ?>
1193
- <li>
1194
- <input type="checkbox" name="antispam_bee_ignore_pings" id="antispam_bee_ignore_pings" value="1" <?php checked($this->get_option('ignore_pings'), 1) ?> />
1195
- <label for="antispam_bee_ignore_pings">
1196
- <?php esc_html_e('Do not check trackbacks / pingbacks', 'antispam_bee') ?> <?php $this->show_help_link('ignore_pings') ?>
1197
- </label>
1198
- </li>
1199
- <li>
1200
- <input type="checkbox" name="antispam_bee_always_allowed" id="antispam_bee_always_allowed" value="1" <?php checked($this->get_option('always_allowed'), 1) ?> />
1201
- <label for="antispam_bee_always_allowed">
1202
- <?php esc_html_e('Comments are also used outside of posts and pages', 'antispam_bee') ?> <?php $this->show_help_link('always_allowed') ?>
1203
- </label>
1204
- </li>
1205
- </ul>
1206
- <p>
1207
- <input type="submit" name="antispam_bee_submit" class="button-primary" value="<?php esc_html_e('Save Changes') ?>" />
1208
- </p>
1209
- </div>
1210
- </div>
1211
- </div>
1212
- </form>
1213
- </div>
1214
- <?php }
1215
- }
1216
- new Antispam_Bee();
5
  Domain Path: /lang
6
  Description: Easy and extremely productive spam-fighting plugin with many sophisticated solutions. Includes protection again trackback spam.
7
  Author: Sergej M&uuml;ller
8
+ Author URI: http://wpseo.de
9
  Plugin URI: http://antispambee.com
10
+ Version: 2.4.3
11
  */
12
 
13
 
14
+ /* Sicherheitsabfrage */
15
+ if ( !class_exists('WP') ) {
16
+ die();
 
17
  }
18
+
19
+
20
+ /**
21
+ * Antispam_Bee
22
+ *
23
+ * @since 0.1
24
+ * @change 2.4
25
+ */
26
+
27
  class Antispam_Bee {
28
+
29
+
30
+ /* Init */
31
+ public static $short;
32
+ public static $default;
33
+ private static $base;
34
+ private static $secret;
35
+ private static $reason;
36
+
37
+
38
+ /**
39
+ * "Konstruktor" der Klasse
40
+ *
41
+ * @since 0.1
42
+ * @change 2.4.3
43
+ */
44
+
45
+ public static function init()
46
+ {
47
+ /* AJAX & Co. */
48
+ if ( (defined('DOING_AJAX') && DOING_AJAX) or (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) ) {
49
+ return;
50
+ }
51
+
52
+ /* Initialisierung */
53
+ self::_init_internal_vars();
54
+
55
+ /* Cronjob */
56
+ if ( defined('DOING_CRON') ) {
57
+ add_action(
58
+ 'antispam_bee_daily_cronjob',
59
+ array(
60
+ __CLASS__,
61
+ 'start_daily_cronjob'
62
+ )
63
+ );
64
+
65
+ /* Admin */
66
+ } elseif ( is_admin() ) {
67
+ /* Menü */
68
+ add_action(
69
+ 'admin_menu',
70
+ array(
71
+ __CLASS__,
72
+ 'add_sidebar_menu'
73
+ )
74
+ );
75
+
76
+ /* Dashboard */
77
+ if ( self::_current_page('dashboard') ) {
78
+ add_action(
79
+ 'init',
80
+ array(
81
+ __CLASS__,
82
+ 'load_plugin_lang'
83
+ )
84
+ );
85
+ add_action(
86
+ 'right_now_discussion_table_end',
87
+ array(
88
+ __CLASS__,
89
+ 'add_dashboard_count'
90
+ )
91
+ );
92
+ add_action(
93
+ 'wp_dashboard_setup',
94
+ array(
95
+ __CLASS__,
96
+ 'add_dashboard_chart'
97
+ )
98
+ );
99
+
100
+ /* Plugins */
101
+ } else if ( self::_current_page('plugins') ) {
102
+ add_action(
103
+ 'init',
104
+ array(
105
+ __CLASS__,
106
+ 'load_plugin_lang'
107
+ )
108
+ );
109
+ add_action(
110
+ 'admin_notices',
111
+ array(
112
+ __CLASS__,
113
+ 'init_admin_notice'
114
+ )
115
+ );
116
+ add_filter(
117
+ 'plugin_row_meta',
118
+ array(
119
+ __CLASS__,
120
+ 'init_row_meta'
121
+ ),
122
+ 10,
123
+ 2
124
+ );
125
+ add_filter(
126
+ 'plugin_action_links_' .self::$base,
127
+ array(
128
+ __CLASS__,
129
+ 'init_action_links'
130
+ )
131
+ );
132
+
133
+ /* Optionen */
134
+ } else if ( self::_current_page('options') ) {
135
+ add_action(
136
+ 'admin_init',
137
+ array(
138
+ __CLASS__,
139
+ 'load_plugin_lang'
140
+ )
141
+ );
142
+ add_action(
143
+ 'admin_init',
144
+ array(
145
+ __CLASS__,
146
+ 'init_plugin_sources'
147
+ )
148
+ );
149
+
150
+ } else if ( self::_current_page('admin-post') ) {
151
+ require_once( dirname(__FILE__). '/inc/gui.class.php' );
152
+
153
+ add_action(
154
+ 'admin_post_ab_save_changes',
155
+ array(
156
+ 'Antispam_Bee_GUI',
157
+ 'save_changes'
158
+ )
159
+ );
160
+ }
161
+
162
+ /* Frontend */
163
+ } else {
164
+ add_action(
165
+ 'template_redirect',
166
+ array(
167
+ __CLASS__,
168
+ 'prepare_comment_field'
169
+ )
170
+ );
171
+ add_action(
172
+ 'init',
173
+ array(
174
+ __CLASS__,
175
+ 'precheck_incoming_request'
176
+ )
177
+ );
178
+ add_action(
179
+ 'preprocess_comment',
180
+ array(
181
+ __CLASS__,
182
+ 'handle_incoming_request'
183
+ ),
184
+ 1
185
+ );
186
+ add_action(
187
+ 'antispam_bee_count',
188
+ array(
189
+ __CLASS__,
190
+ 'the_spam_count'
191
+ )
192
+ );
193
+ }
194
+ }
195
+
196
+
197
+
198
+
199
+ ############################
200
+ ######## INSTALL #########
201
+ ############################
202
+
203
+
204
+ /**
205
+ * Aktion bei der Aktivierung des Plugins
206
+ *
207
+ * @since 0.1
208
+ * @change 2.4
209
+ */
210
+
211
+ public static function activate()
212
+ {
213
+ /* Option anlegen */
214
+ add_option(
215
+ self::$short,
216
+ array(),
217
+ '',
218
+ 'no'
219
+ );
220
+
221
+ /* Cron aktivieren */
222
+ if ( self::get_option('cronjob_enable') ) {
223
+ self::init_scheduled_hook();
224
+ }
225
+ }
226
+
227
+
228
+ /**
229
+ * Aktion bei der Deaktivierung des Plugins
230
+ *
231
+ * @since 0.1
232
+ * @change 2.4
233
+ */
234
+
235
+ public static function deactivate()
236
+ {
237
+ self::clear_scheduled_hook();
238
+ }
239
+
240
+
241
+ /**
242
+ * Aktion beim Löschen des Plugins
243
+ *
244
+ * @since 2.4
245
+ * @change 2.4
246
+ */
247
+
248
+ public static function uninstall()
249
+ {
250
+ /* Global */
251
+ global $wpdb;
252
+
253
+ /* Remove settings */
254
+ delete_option('antispam_bee');
255
+
256
+ /* Clean DB */
257
+ $wpdb->query("OPTIMIZE TABLE `" .$wpdb->options. "`");
258
+ }
259
+
260
+
261
+
262
+
263
+ ############################
264
+ ######### INTERN #########
265
+ ############################
266
+
267
+
268
+ /**
269
+ * Initialisierung der internen Variablen
270
+ *
271
+ * @since 2.4
272
+ * @change 2.4
273
+ */
274
+
275
+ private static function _init_internal_vars()
276
+ {
277
+ self::$base = plugin_basename(__FILE__);
278
+ self::$short = 'antispam_bee';
279
+ self::$secret = substr(md5(get_bloginfo('url')), 0, 5). '-comment';
280
+
281
+ self::$default = array(
282
+ 'options' => array(
283
+ /* Allgemein */
284
+ 'advanced_check' => 1,
285
+ 'spam_ip' => 1,
286
+ 'already_commented' => 1,
287
+ 'ignore_pings' => 0,
288
+ 'always_allowed' => 0,
289
+
290
+ 'dashboard_chart' => 1,
291
+ 'dashboard_count' => 0,
292
+
293
+ /* Filter */
294
+ 'country_code' => 0,
295
+ 'country_black' => '',
296
+ 'country_white' => '',
297
+
298
+ 'translate_api' => 0,
299
+ 'translate_lang' => '',
300
+
301
+ 'honey_pot' => 0,
302
+ 'honey_key' => '',
303
+
304
+ /* Erweitert */
305
+ 'flag_spam' => 1,
306
+ 'email_notify' => 1,
307
+ 'no_notice' => 1,
308
+ 'cronjob_enable' => 0,
309
+ 'cronjob_interval' => 0,
310
+
311
+ 'ignore_filter' => 0,
312
+ 'ignore_type' => 0,
313
+ 'ignore_reasons' => array(),
314
+
315
+ /* Tab */
316
+ 'tab_index' => 0
317
+ ),
318
+ 'reasons' => array(
319
+ 'css' => 'CSS Hack',
320
+ 'empty' => 'Empty Data',
321
+ 'server' => 'Server IP',
322
+ 'spamip' => 'Spam IP',
323
+ 'country' => 'Country Check',
324
+ 'honey' => 'Honey Pot',
325
+ 'lang' => 'Comment Language'
326
+ )
327
+ );
328
+ }
329
+
330
+
331
+ /**
332
+ * Prüfung und Rückgabe eines Array-Keys
333
+ *
334
+ * @since 2.4.2
335
+ * @change 2.4.2
336
+ *
337
+ * @param array $array Array mit Werten
338
+ * @param string $key Name des Keys
339
+ * @return mixed Wert des angeforderten Keys
340
+ */
341
+
342
+ public static function get_key($array, $key)
343
+ {
344
+ if ( empty($array) or empty($key) or empty($array[$key]) ) {
345
+ return null;
346
+ }
347
+
348
+ return $array[$key];
349
+ }
350
+
351
+
352
+ /**
353
+ * Lokalisierung der Admin-Seiten
354
+ *
355
+ * @since 0.1
356
+ * @change 2.4
357
+ *
358
+ * @param string $page Kennzeichnung der Seite
359
+ * @return boolean TRUE Bei Erfolg
360
+ */
361
+
362
+ private static function _current_page($page)
363
+ {
364
+ switch ($page) {
365
+ case 'dashboard':
366
+ return ( empty($GLOBALS['pagenow']) or ( !empty($GLOBALS['pagenow']) && $GLOBALS['pagenow'] == 'index.php' ) );
367
+
368
+ case 'options':
369
+ return ( !empty($_REQUEST['page']) && $_REQUEST['page'] == self::$short );
370
+
371
+ case 'plugins':
372
+ return ( !empty($GLOBALS['pagenow']) && $GLOBALS['pagenow'] == 'plugins.php' );
373
+
374
+ case 'admin-post':
375
+ return ( !empty($GLOBALS['pagenow']) && $GLOBALS['pagenow'] == 'admin-post.php' );
376
+
377
+ default:
378
+ return false;
379
+ }
380
+ }
381
+
382
+
383
+ /**
384
+ * Einbindung der Sprachdatei
385
+ *
386
+ * @since 0.1
387
+ * @change 2.4
388
+ */
389
+
390
+ public static function load_plugin_lang()
391
+ {
392
+ load_plugin_textdomain(
393
+ self::$short,
394
+ false,
395
+ 'antispam-bee/lang'
396
+ );
397
+ }
398
+
399
+
400
+ /**
401
+ * Hinzufügen des Links zu den Einstellungen
402
+ *
403
+ * @since 1.1
404
+ * @change 1.1
405
+ */
406
+
407
+ public static function init_action_links($data)
408
+ {
409
+ /* Rechte? */
410
+ if ( !current_user_can('manage_options') ) {
411
+ return $data;
412
+ }
413
+
414
+ return array_merge(
415
+ $data,
416
+ array(
417
+ sprintf(
418
+ '<a href="%s">%s</a>',
419
+ add_query_arg(
420
+ array(
421
+ 'page' => self::$short
422
+ ),
423
+ admin_url('options-general.php')
424
+ ),
425
+ __('Settings')
426
+ )
427
+ )
428
+ );
429
+ }
430
+
431
+
432
+ /**
433
+ * Meta-Links des Plugins
434
+ *
435
+ * @since 0.1
436
+ * @change 2.4.3
437
+ *
438
+ * @param array $data Bereits vorhandene Links
439
+ * @param string $page Aktuelle Seite
440
+ * @return array $data Modifizierte Links
441
+ */
442
+
443
+ public static function init_row_meta($data, $page)
444
+ {
445
+ /* Rechte */
446
+ if ( $page != self::$base ) {
447
+ return $data;
448
+ }
449
+
450
+ return array_merge(
451
+ $data,
452
+ array(
453
+ '<a href="http://flattr.com/profile/sergej.mueller" target="_blank">Flattr</a>',
454
+ '<a href="https://plus.google.com/110569673423509816572" target="_blank">Google+</a>'
455
+ )
456
+ );
457
+ }
458
+
459
+
460
+ /**
461
+ * Anzeige der Admin-Notiz
462
+ *
463
+ * @since 2.4.3
464
+ * @change 2.4.3
465
+ */
466
+
467
+ public static function init_admin_notice() {
468
+ /* Alles klar? */
469
+ if ( self::_is_version($GLOBALS['wp_version'], '3.3') && self::_is_version(phpversion(), '5.1.2') ) {
470
+ return;
471
+ }
472
+
473
+ /* Warnung */
474
+ echo sprintf(
475
+ '<div class="error"><p>%s</p></div>',
476
+ esc_html__('Antispam Bee requires WordPress 3.3 and PHP 5.1.2', self::$short)
477
+ );
478
+ }
479
+
480
+
481
+ /**
482
+ * Vergleich der Versionen
483
+ *
484
+ * @since 2.4.3
485
+ * @change 2.4.3
486
+ *
487
+ * @param integer $current Aktuelle Version
488
+ * @param integer $required Mindestversion
489
+ * @return boolean TRUE, wenn Voraussetzungen erfüllt
490
+ */
491
+
492
+ private static function _is_version($current, $required) {
493
+ return version_compare(
494
+ $current,
495
+ $required. 'alpha',
496
+ '>='
497
+ );
498
+ }
499
+
500
+
501
+
502
+
503
+ ############################
504
+ ####### RESSOURCEN #######
505
+ ############################
506
+
507
+
508
+ /**
509
+ * Registrierung von Ressourcen (CSS & JS)
510
+ *
511
+ * @since 1.6
512
+ * @change 2.4
513
+ */
514
+
515
+ public static function init_plugin_sources()
516
+ {
517
+ /* Infos auslesen */
518
+ $plugin = get_plugin_data(__FILE__);
519
+
520
+ /* JS einbinden */
521
+ wp_register_script(
522
+ 'ab_script',
523
+ plugins_url('js/script.js', __FILE__),
524
+ array('jquery', 'jquery-ui-core', 'jquery-ui-tabs'),
525
+ $plugin['Version']
526
+ );
527
+
528
+ /* CSS einbinden */
529
+ wp_register_style(
530
+ 'ab_style',
531
+ plugins_url('css/style.css', __FILE__),
532
+ array(),
533
+ $plugin['Version']
534
+ );
535
+ }
536
+
537
+
538
+ /**
539
+ * Initialisierung der Optionsseite
540
+ *
541
+ * @since 0.1
542
+ * @change 2.4.3
543
+ */
544
+
545
+ public static function add_sidebar_menu()
546
+ {
547
+ /* Menü anlegen */
548
+ $page = add_options_page(
549
+ 'Antispam Bee',
550
+ 'Antispam Bee',
551
+ 'manage_options',
552
+ self::$short,
553
+ array(
554
+ 'Antispam_Bee_GUI',
555
+ 'options_page'
556
+ )
557
+ );
558
+
559
+ /* JS einbinden */
560
+ add_action(
561
+ 'admin_print_scripts-' . $page,
562
+ array(
563
+ __CLASS__,
564
+ 'add_options_script'
565
+ )
566
+ );
567
+
568
+ /* CSS einbinden */
569
+ add_action(
570
+ 'admin_print_styles-' . $page,
571
+ array(
572
+ __CLASS__,
573
+ 'add_options_style'
574
+ )
575
+ );
576
+
577
+ /* PHP laden */
578
+ add_action(
579
+ 'load-' .$page,
580
+ array(
581
+ __CLASS__,
582
+ 'init_options_page'
583
+ )
584
+ );
585
+ }
586
+
587
+
588
+ /**
589
+ * Initialisierung von JavaScript
590
+ *
591
+ * @since 1.6
592
+ * @change 2.4
593
+ */
594
+
595
+ public static function add_options_script()
596
+ {
597
+ wp_enqueue_script('ab_script');
598
+ }
599
+
600
+
601
+ /**
602
+ * Initialisierung von Stylesheets
603
+ *
604
+ * @since 1.6
605
+ * @change 2.4
606
+ */
607
+
608
+ public static function add_options_style()
609
+ {
610
+ wp_enqueue_style('ab_style');
611
+ }
612
+
613
+
614
+ /**
615
+ * Einbindung der GUI
616
+ *
617
+ * @since 2.4
618
+ * @change 2.4
619
+ */
620
+
621
+ public static function init_options_page()
622
+ {
623
+ require_once( dirname(__FILE__). '/inc/gui.class.php' );
624
+ }
625
+
626
+
627
+
628
+
629
+ ############################
630
+ ####### DASHBOARD ########
631
+ ############################
632
+
633
+
634
+ /**
635
+ * Anzeige des Spam-Counters auf dem Dashboard
636
+ *
637
+ * @since 0.1
638
+ * @change 2.4
639
+ */
640
+
641
+ public static function add_dashboard_count()
642
+ {
643
+ /* Aktiv? */
644
+ if ( !self::get_option('dashboard_count') ) {
645
+ return;
646
+ }
647
+
648
+ /* Ausgabe */
649
+ echo sprintf(
650
+ '<tr>
651
+ <td class="b b-spam" style="font-size:18px">%s</td>
652
+ <td class="last t">%s</td>
653
+ </tr>',
654
+ esc_html( self::_get_spam_count() ),
655
+ esc_html__('Blocked', self::$short)
656
+ );
657
+ }
658
+
659
+
660
+ /**
661
+ * Initialisierung des Dashboard-Chart
662
+ *
663
+ * @since 1.9
664
+ * @change 2.4
665
+ */
666
+
667
+ public static function add_dashboard_chart()
668
+ {
669
+ /* Filter */
670
+ if ( !current_user_can('level_2') or !self::get_option('dashboard_chart') ) {
671
+ return;
672
+ }
673
+
674
+ /* Widget hinzufügen */
675
+ wp_add_dashboard_widget(
676
+ 'ab_widget',
677
+ 'Antispam Bee',
678
+ array(
679
+ __CLASS__,
680
+ 'show_spam_chart'
681
+ )
682
+ );
683
+
684
+ /* JS laden */
685
+ add_action(
686
+ 'wp_print_scripts',
687
+ array(
688
+ __CLASS__,
689
+ 'add_dashboard_script'
690
+ )
691
+ );
692
+
693
+ /* CSS laden */
694
+ add_action(
695
+ 'admin_head',
696
+ array(
697
+ __CLASS__,
698
+ 'add_dashboard_style'
699
+ )
700
+ );
701
+ }
702
+
703
+
704
+ /**
705
+ * Ausgabe der Dashboard-CSS
706
+ *
707
+ * @since 1.9
708
+ * @change 2.4
709
+ */
710
+
711
+ public static function add_dashboard_style()
712
+ {
713
+ /* Plugin-Info */
714
+ $plugin = get_plugin_data(__FILE__);
715
+
716
+ /* CSS registrieren */
717
+ wp_register_style(
718
+ 'ab_chart',
719
+ plugins_url('css/dashboard.css', __FILE__),
720
+ array(),
721
+ $plugin['Version']
722
+ );
723
+
724
+ /* CSS ausgeben */
725
+ wp_print_styles('ab_chart');
726
+ }
727
+
728
+
729
+ /**
730
+ * Ausgabe der Dashboard-JS
731
+ *
732
+ * @since 1.9
733
+ * @change 2.4
734
+ */
735
+
736
+ public static function add_dashboard_script()
737
+ {
738
+ /* Init */
739
+ $items = (array)self::get_option('daily_stats');
740
+
741
+ /* Leer? */
742
+ if ( empty($items) ) {
743
+ return;
744
+ }
745
+
746
+ /* Sortieren */
747
+ krsort($items, SORT_NUMERIC);
748
+
749
+ /* Init */
750
+ $output = array(
751
+ 'created' => array(),
752
+ 'count' => array()
753
+ );
754
+
755
+ /* Init */
756
+ $i = 0;
757
+
758
+ /* Zeilen loopen */
759
+ foreach($items as $timestamp => $count) {
760
+ array_push(
761
+ $output['created'],
762
+ ( $timestamp == strtotime('today', current_time('timestamp')) ? __('Today', self::$short) : date('d.m', $timestamp) )
763
+ );
764
+ array_push(
765
+ $output['count'],
766
+ (int)$count
767
+ );
768
+ }
769
+
770
+ /* Zusammenfassen */
771
+ $stats = array(
772
+ 'created' => implode(',', $output['created']),
773
+ 'count' => implode(',', $output['count'])
774
+ );
775
+
776
+ /* Plugin-Info */
777
+ $plugin = get_plugin_data(__FILE__);
778
+
779
+ /* JS einbinden */
780
+ wp_register_script(
781
+ 'ab_chart',
782
+ plugins_url('js/dashboard.js', __FILE__),
783
+ array('jquery'),
784
+ $plugin['Version']
785
+ );
786
+ wp_register_script(
787
+ 'google_jsapi',
788
+ 'https://www.google.com/jsapi',
789
+ false
790
+ );
791
+
792
+ /* Einbinden */
793
+ wp_enqueue_script('google_jsapi');
794
+ wp_enqueue_script('ab_chart');
795
+
796
+ /* Übergeben */
797
+ wp_localize_script(
798
+ 'ab_chart',
799
+ 'antispambee',
800
+ $stats
801
+ );
802
+ }
803
+
804
+
805
+ /**
806
+ * Ausgabe des Dashboard-Chart
807
+ *
808
+ * @since 1.9
809
+ * @change 2.4
810
+ */
811
+
812
+ public static function show_spam_chart()
813
+ {
814
+ /* Init */
815
+ $items = (array)self::get_option('daily_stats');
816
+
817
+ /* Ausgabe */
818
+ echo sprintf(
819
+ '<div id="ab_chart">%s</div>',
820
+ ( empty($items) ? esc_html__('No data available.', self::$short) : '' )
821
+ );
822
+ }
823
+
824
+
825
+
826
+
827
+ ############################
828
+ ######## OPTIONS #########
829
+ ############################
830
+
831
+
832
+ /**
833
+ * Rückgabe der Optionen
834
+ *
835
+ * @since 2.4
836
+ * @change 2.4
837
+ *
838
+ * @return array $options Array mit Optionen
839
+ */
840
+
841
+ public static function get_options()
842
+ {
843
+ if ( !$options = wp_cache_get(self::$short) ) {
844
+ $options = wp_parse_args(
845
+ get_option(self::$short),
846
+ self::$default['options']
847
+ );
848
+
849
+ wp_cache_set(
850
+ self::$short,
851
+ $options
852
+ );
853
+ }
854
+
855
+ return $options;
856
+ }
857
+
858
+
859
+ /**
860
+ * Rückgabe eines Optionsfeldes
861
+ *
862
+ * @since 0.1
863
+ * @change 2.4.2
864
+ *
865
+ * @param string $field Name des Feldes
866
+ * @return mixed Wert des Feldes
867
+ */
868
+
869
+ public static function get_option($field)
870
+ {
871
+ $options = self::get_options();
872
+
873
+ return self::get_key($options, $field);
874
+ }
875
+
876
+
877
+ /**
878
+ * Aktualisiert ein Optionsfeld
879
+ *
880
+ * @since 0.1
881
+ * @change 2.4
882
+ *
883
+ * @param string $field Name des Feldes
884
+ * @param mixed Wert des Feldes
885
+ */
886
+
887
+ private static function _update_option($field, $value)
888
+ {
889
+ self::update_options(
890
+ array(
891
+ $field => $value
892
+ )
893
+ );
894
+ }
895
+
896
+
897
+ /**
898
+ * Aktualisiert mehrere Optionsfelder
899
+ *
900
+ * @since 0.1
901
+ * @change 2.4
902
+ *
903
+ * @param array $data Array mit Feldern
904
+ */
905
+
906
+ public static function update_options($data)
907
+ {
908
+ /* Option zuweisen */
909
+ $options = array_merge(
910
+ (array)get_option(self::$short),
911
+ $data
912
+ );
913
+
914
+ /* DB updaten */
915
+ update_option(
916
+ self::$short,
917
+ $options
918
+ );
919
+
920
+ /* Cache updaten */
921
+ wp_cache_set(
922
+ self::$short,
923
+ $options
924
+ );
925
+ }
926
+
927
+
928
+
929
+
930
+ ############################
931
+ ######## CRONJOBS ########
932
+ ############################
933
+
934
+
935
+ /**
936
+ * Ausführung des täglichen Cronjobs
937
+ *
938
+ * @since 0.1
939
+ * @change 2.4
940
+ */
941
+
942
+ public static function start_daily_cronjob()
943
+ {
944
+ /* Kein Cronjob? */
945
+ if ( !self::get_option('cronjob_enable') ) {
946
+ return;
947
+ }
948
+
949
+ /* Timestamp updaten */
950
+ self::_update_option(
951
+ 'cronjob_timestamp',
952
+ time()
953
+ );
954
+
955
+ /* Spam löschen */
956
+ self::_delete_old_spam();
957
+ }
958
+
959
+
960
+ /**
961
+ * Löschung alter Spamkommentare
962
+ *
963
+ * @since 0.1
964
+ * @change 2.4
965
+ */
966
+
967
+ private static function _delete_old_spam()
968
+ {
969
+ /* Anzahl der Tage */
970
+ $days = (int)self::get_option('cronjob_interval');
971
+
972
+ /* Kein Wert? */
973
+ if ( empty($days) ) {
974
+ return false;
975
+ }
976
+
977
+ /* Global */
978
+ global $wpdb;
979
+
980
+ /* Kommentare löschen */
981
+ $wpdb->query(
982
+ $wpdb->prepare(
983
+ "DELETE FROM `$wpdb->comments` WHERE `comment_approved` = 'spam' AND SUBDATE(NOW(), %d) > comment_date_gmt",
984
+ $days
985
+ )
986
+ );
987
+
988
+ /* DB optimieren */
989
+ $wpdb->query("OPTIMIZE TABLE `$wpdb->comments`");
990
+ }
991
+
992
+
993
+ /**
994
+ * Initialisierung des Cronjobs
995
+ *
996
+ * @since 0.1
997
+ * @change 2.4
998
+ */
999
+
1000
+ public static function init_scheduled_hook()
1001
+ {
1002
+ if ( !wp_next_scheduled('antispam_bee_daily_cronjob') ) {
1003
+ wp_schedule_event(
1004
+ time(),
1005
+ 'daily',
1006
+ 'antispam_bee_daily_cronjob'
1007
+ );
1008
+ }
1009
+ }
1010
+
1011
+
1012
+ /**
1013
+ * Löschung des Cronjobs
1014
+ *
1015
+ * @since 0.1
1016
+ * @change 2.4
1017
+ */
1018
+
1019
+ public static function clear_scheduled_hook()
1020
+ {
1021
+ if ( wp_next_scheduled('antispam_bee_daily_cronjob') ) {
1022
+ wp_clear_scheduled_hook('antispam_bee_daily_cronjob');
1023
+ }
1024
+ }
1025
+
1026
+
1027
+
1028
+
1029
+ ############################
1030
+ ###### SPAMPRÜFUNG #######
1031
+ ############################
1032
+
1033
+
1034
+ /**
1035
+ * Überprüfung der POST-Werte
1036
+ *
1037
+ * @since 0.1
1038
+ * @change 2.4.2
1039
+ */
1040
+
1041
+ public static function precheck_incoming_request()
1042
+ {
1043
+ /* Nur Frontend */
1044
+ if ( is_feed() or is_trackback() or self::_is_mobile() ) {
1045
+ return;
1046
+ }
1047
+
1048
+ /* Allgemeine Werte */
1049
+ $request_url = self::get_key($_SERVER, 'REQUEST_URI');
1050
+ $hidden_field = self::get_key($_POST, 'comment');
1051
+ $plugin_field = self::get_key($_POST, self::$secret);
1052
+
1053
+ /* Falsch verbunden */
1054
+ if ( empty($_POST) or empty($request_url) or strpos($request_url, 'wp-comments-post.php') === false ) {
1055
+ return;
1056
+ }
1057
+
1058
+ /* Felder prüfen */
1059
+ if ( empty($hidden_field) && !empty($plugin_field) ) {
1060
+ $_POST['comment'] = $plugin_field;
1061
+ unset($_POST[self::$secret]);
1062
+ } else {
1063
+ $_POST['bee_spam'] = 1;
1064
+ }
1065
+ }
1066
+
1067
+
1068
+ /**
1069
+ * Prüfung der eingehenden Anfragen auf Spam
1070
+ *
1071
+ * @since 0.1
1072
+ * @change 2.4.2
1073
+ *
1074
+ * @param array $comment Unbehandelter Kommentar
1075
+ * @return array $comment Behandelter Kommentar
1076
+ */
1077
+
1078
+ public static function handle_incoming_request($comment)
1079
+ {
1080
+ /* Server-Werte */
1081
+ $url = self::get_key($_SERVER, 'REQUEST_URI');
1082
+
1083
+ /* Leere Werte? */
1084
+ if ( empty($url) ) {
1085
+ return self::_handle_spam_request(
1086
+ $comment,
1087
+ 'empty'
1088
+ );
1089
+ }
1090
+
1091
+ /* Ping-Optionen */
1092
+ $ping = array(
1093
+ 'types' => array('pingback', 'trackback', 'pings'),
1094
+ 'allowed' => !self::get_option('ignore_pings')
1095
+ );
1096
+
1097
+ /* Kommentar */
1098
+ if ( strpos($url, 'wp-comments-post.php') !== false && !empty($_POST) ) {
1099
+ /* Filter ausführen */
1100
+ $status = self::_verify_comment_request($comment);
1101
+
1102
+ /* Spam lokalisiert */
1103
+ if ( !empty($status['reason']) ) {
1104
+ return self::_handle_spam_request(
1105
+ $comment,
1106
+ $status['reason']
1107
+ );
1108
+ }
1109
+
1110
+ /* Trackback */
1111
+ } else if ( in_array(self::get_key($comment, 'comment_type'), $ping['types']) && $ping['allowed'] ) {
1112
+ /* Filter ausführen */
1113
+ $status = self::_verify_trackback_request($comment);
1114
+
1115
+ /* Spam lokalisiert */
1116
+ if ( !empty($status['reason']) ) {
1117
+ return self::_handle_spam_request(
1118
+ $comment,
1119
+ $status['reason'],
1120
+ true
1121
+ );
1122
+ }
1123
+ }
1124
+
1125
+ return $comment;
1126
+ }
1127
+
1128
+
1129
+ /**
1130
+ * Bereitet die Ersetzung des KOmmentarfeldes vor
1131
+ *
1132
+ * @since 0.1
1133
+ * @change 2.4
1134
+ */
1135
+
1136
+ public static function prepare_comment_field()
1137
+ {
1138
+ /* Nur Frontend */
1139
+ if ( is_feed() or is_trackback() or is_robots() or self::_is_mobile() ) {
1140
+ return;
1141
+ }
1142
+
1143
+ /* Nur Beiträge */
1144
+ if ( !is_singular() && !self::get_option('always_allowed') ) {
1145
+ return;
1146
+ }
1147
+
1148
+ /* Fire! */
1149
+ ob_start(
1150
+ array(
1151
+ 'Antispam_Bee',
1152
+ 'replace_comment_field'
1153
+ )
1154
+ );
1155
+ }
1156
+
1157
+
1158
+ /**
1159
+ * ersetzt das Kommentarfeld
1160
+ *
1161
+ * @since 2.4
1162
+ * @change 2.4.1
1163
+ *
1164
+ * @param string $data HTML-Code der Webseite
1165
+ * @return string Behandelter HTML-Code
1166
+ */
1167
+
1168
+ public static function replace_comment_field($data)
1169
+ {
1170
+ /* Leer? */
1171
+ if ( empty($data) ) {
1172
+ return;
1173
+ }
1174
+
1175
+ /* Convert */
1176
+ return preg_replace(
1177
+ '#<textarea(.+?)name=["\']comment["\'](.+?)</textarea>#s',
1178
+ '<textarea$1name="' .self::$secret. '"$2</textarea><textarea name="comment" style="display:none" rows="1" cols="1"></textarea>',
1179
+ (string) $data,
1180
+ 1
1181
+ );
1182
+ }
1183
+
1184
+
1185
+ /**
1186
+ * Kürzung der IP-Adressen
1187
+ *
1188
+ * @since 0.1
1189
+ * @change 2.4
1190
+ *
1191
+ * @param string $ip Ungekürzte IP
1192
+ * @return string $ip Gekürzte IP
1193
+ */
1194
+
1195
+ private static function _cut_ip($ip)
1196
+ {
1197
+ return str_replace(
1198
+ strrchr(
1199
+ $ip,
1200
+ ( self::_is_ipv4($ip) ? '.' : ':' )
1201
+ ),
1202
+ '',
1203
+ $ip
1204
+ );
1205
+ }
1206
+
1207
+
1208
+ /**
1209
+ * Prüfung auf Mobile
1210
+ *
1211
+ * @since 0.1
1212
+ * @change 2.4
1213
+ *
1214
+ * @return boolean TRUE, wenn "wptouch" aktiv ist
1215
+ */
1216
+
1217
+ private static function _is_mobile()
1218
+ {
1219
+ return strpos(TEMPLATEPATH, 'wptouch');
1220
+ }
1221
+
1222
+
1223
+ /**
1224
+ * Prüfung auf eine IPv4-Adresse
1225
+ *
1226
+ * @since 2.4
1227
+ * @change 2.4
1228
+ *
1229
+ * @param string $ip Zu prüfende IP
1230
+ * @return integer Anzahl der Treffer
1231
+ */
1232
+
1233
+ private static function _is_ipv4($ip)
1234
+ {
1235
+ return preg_match('/^\d{1,3}(\.\d{1,3}){3,3}$/', $ip);
1236
+ }
1237
+
1238
+
1239
+ /**
1240
+ * Prüfung einer IP auf ihre Existenz im Spam
1241
+ *
1242
+ * @since 2.0
1243
+ * @change 2.4
1244
+ *
1245
+ * @param string $ip IP-Adresse
1246
+ * @return boolean TRUE bei verdächtiger IP
1247
+ */
1248
+
1249
+ private static function _is_spam_ip($ip)
1250
+ {
1251
+ /* Keine IP? */
1252
+ if ( empty($ip) ) {
1253
+ return true;
1254
+ }
1255
+
1256
+ /* Global */
1257
+ global $wpdb;
1258
+
1259
+ /* Suchen */
1260
+ $found = $wpdb->get_var(
1261
+ $wpdb->prepare(
1262
+ "SELECT `comment_ID` FROM `$wpdb->comments` WHERE `comment_approved` = 'spam' AND `comment_author_IP` = %s LIMIT 1",
1263
+ (string)$ip
1264
+ )
1265
+ );
1266
+
1267
+ /* Gefunden? */
1268
+ if ( $found ) {
1269
+ return true;
1270
+ }
1271
+
1272
+ return false;
1273
+ }
1274
+
1275
+
1276
+ /**
1277
+ * Prüfung auf erlaubten Ländercodes
1278
+ *
1279
+ * @since 0.1
1280
+ * @change 2.4.2
1281
+ *
1282
+ * @param string $ip IP-Adresse
1283
+ * @return boolean TRUE bei unerwünschten Ländercodes
1284
+ */
1285
+
1286
+ private static function _is_spam_country($ip)
1287
+ {
1288
+ /* Keine IP? */
1289
+ if ( empty($ip) ) {
1290
+ return true;
1291
+ }
1292
+
1293
+ /* Optionen */
1294
+ $options = self::get_options();
1295
+
1296
+ /* White & Black */
1297
+ $white = preg_split(
1298
+ '/ /',
1299
+ $options['country_white'],
1300
+ -1,
1301
+ PREG_SPLIT_NO_EMPTY
1302
+ );
1303
+ $black = preg_split(
1304
+ '/ /',
1305
+ $options['country_black'],
1306
+ -1,
1307
+ PREG_SPLIT_NO_EMPTY
1308
+ );
1309
+
1310
+ /* Leere Listen? */
1311
+ if ( empty($white) && empty($black) ) {
1312
+ return false;
1313
+ }
1314
+
1315
+ /* IP abfragen */
1316
+ $response = wp_remote_get(
1317
+ esc_url_raw(
1318
+ sprintf(
1319
+ 'http://api.hostip.info/country.php?ip=%s',
1320
+ $ip
1321
+ ),
1322
+ 'http'
1323
+ )
1324
+ );
1325
+
1326
+ /* Fehler? */
1327
+ if ( is_wp_error($response) ) {
1328
+ return false;
1329
+ }
1330
+
1331
+ /* Land auslesen */
1332
+ $country = wp_remote_retrieve_body($response);
1333
+
1334
+ /* Kein Land? */
1335
+ if ( empty($country) ) {
1336
+ return false;
1337
+ }
1338
+
1339
+ /* Blacklist */
1340
+ if ( !empty($black) ) {
1341
+ return ( in_array($country, $black) ? true : false );
1342
+ }
1343
+
1344
+ /* Whitelist */
1345
+ return ( in_array($country, $white) ? false : true );
1346
+ }
1347
+
1348
+
1349
+ /**
1350
+ * Prüfung auf Honey Pot Spam
1351
+ *
1352
+ * @since 1.7
1353
+ * @change 2.4
1354
+ *
1355
+ * @param string $ip IP-Adresse
1356
+ * @return boolean TRUE bei gemeldeter IP
1357
+ */
1358
+
1359
+ private static function _is_honey_spam($ip)
1360
+ {
1361
+ /* Keine IP? */
1362
+ if ( empty($ip) ) {
1363
+ return true;
1364
+ }
1365
+
1366
+ /* Optionen */
1367
+ $options = self::get_options();
1368
+
1369
+ /* Kein Key? */
1370
+ if ( empty($options['honey_key']) ) {
1371
+ return false;
1372
+ }
1373
+
1374
+ /* Host */
1375
+ $host = sprintf(
1376
+ '%s.%s.dnsbl.httpbl.org',
1377
+ $options['honey_key'],
1378
+ implode(
1379
+ '.',
1380
+ array_reverse(
1381
+ explode(
1382
+ '.',
1383
+ $ip
1384
+ )
1385
+ )
1386
+ )
1387
+ );
1388
+
1389
+ /* Response */
1390
+ $bits = explode(
1391
+ '.',
1392
+ gethostbyname($host)
1393
+ );
1394
+
1395
+ return ( $bits[0] == 127 && $bits[3] & 4 );
1396
+ }
1397
+
1398
+
1399
+ /**
1400
+ * Prüfung der Trackbacks
1401
+ *
1402
+ * @since 2.4
1403
+ * @change 2.4.2
1404
+ *
1405
+ * @param array $comment Daten des Trackbacks
1406
+ * @return array Array mit dem Verdachtsgrund [optional]
1407
+ */
1408
+
1409
+ private static function _verify_trackback_request($comment)
1410
+ {
1411
+ /* IP */
1412
+ $ip = self::get_key($_SERVER, 'REMOTE_ADDR');
1413
+
1414
+ /* Kommentarwerte */
1415
+ $url = self::get_key($comment, 'comment_author_url');
1416
+ $body = self::get_key($comment, 'comment_content');
1417
+
1418
+ /* Leere Werte ? */
1419
+ if ( empty($ip) or empty($url) or empty($body) ) {
1420
+ return array(
1421
+ 'reason' => 'empty'
1422
+ );
1423
+ }
1424
+
1425
+ /* Optionen */
1426
+ $options = self::get_options();
1427
+
1428
+ /* IP != Server */
1429
+ if ( $options['advanced_check'] && self::_is_fake_ip($ip, parse_url($url, PHP_URL_HOST)) ) {
1430
+ return array(
1431
+ 'reason' => 'server'
1432
+ );
1433
+ }
1434
+
1435
+ /* IP im Spam */
1436
+ if ( $options['spam_ip'] && self::_is_spam_ip($ip) ) {
1437
+ return array(
1438
+ 'reason' => 'spamip'
1439
+ );
1440
+ }
1441
+
1442
+ /* Honey Pot */
1443
+ if ( $options['honey_pot'] && self::_is_honey_spam($ip) ) {
1444
+ return array(
1445
+ 'reason' => 'honey'
1446
+ );
1447
+ }
1448
+
1449
+ /* Country Code prüfen */
1450
+ if ( $options['country_code'] && self::_is_spam_country($ip) ) {
1451
+ return array(
1452
+ 'reason' => 'country'
1453
+ );
1454
+ }
1455
+ }
1456
+
1457
+
1458
+ /**
1459
+ * Prüfung auf eine bereits freigegebene E-Mail-Adresse
1460
+ *
1461
+ * @since 2.0
1462
+ * @change 2.4
1463
+ *
1464
+ * @param string $email E-Mail-Adresse
1465
+ * @return boolean TRUE bei einem gefundenen Eintrag
1466
+ */
1467
+
1468
+ private static function _is_approved_email($email)
1469
+ {
1470
+ /* Leer? */
1471
+ if ( empty($email) ) {
1472
+ return false;
1473
+ }
1474
+
1475
+ /* Global */
1476
+ global $wpdb;
1477
+
1478
+ /* Suchen */
1479
+ $found = $wpdb->get_var(
1480
+ $wpdb->prepare(
1481
+ "SELECT `comment_ID` FROM `$wpdb->comments` WHERE `comment_approved` = '1' AND `comment_author_email` = %s LIMIT 1",
1482
+ (string)$email
1483
+ )
1484
+ );
1485
+
1486
+ /* Gefunden? */
1487
+ if ( $found ) {
1488
+ return true;
1489
+ }
1490
+
1491
+ return false;
1492
+ }
1493
+
1494
+
1495
+ /**
1496
+ * Prüfung auf eine gefälschte IP
1497
+ *
1498
+ * @since 2.0
1499
+ * @change 2.4
1500
+ *
1501
+ * @param string $ip IP-Adresse
1502
+ * @param string $host Host [optional]
1503
+ * @return boolean TRUE bei gefälschter IP
1504
+ */
1505
+
1506
+ private static function _is_fake_ip($ip, $host = false)
1507
+ {
1508
+ /* Leer? */
1509
+ if ( empty($ip) ) {
1510
+ return true;
1511
+ }
1512
+
1513
+ /* Remote Host */
1514
+ $hostbyip = gethostbyaddr($ip);
1515
+
1516
+ /* IPv6 */
1517
+ if ( !self::_is_ipv4($ip) ) {
1518
+ return $ip != $hostbyip;
1519
+ }
1520
+
1521
+ /* IPv4 / Kommentar */
1522
+ if ( empty($host) ) {
1523
+ $found = strpos(
1524
+ $ip,
1525
+ self::_cut_ip(
1526
+ gethostbyname($hostbyip)
1527
+ )
1528
+ );
1529
+
1530
+ /* IPv4 / Trackback */
1531
+ } else {
1532
+ /* IP-Vergleich */
1533
+ if ( $hostbyip == $ip ) {
1534
+ return true;
1535
+ }
1536
+
1537
+ /* Treffer suchen */
1538
+ $found = strpos(
1539
+ $ip,
1540
+ self::_cut_ip(
1541
+ gethostbyname($host)
1542
+ )
1543
+ );
1544
+ }
1545
+
1546
+ return $found === false;
1547
+ }
1548
+
1549
+
1550
+ /**
1551
+ * Prüfung auf unerwünschte Sprachen
1552
+ *
1553
+ * @since 2.0
1554
+ * @change 2.4.2
1555
+ *
1556
+ * @param string $content Inhalt des Kommentars
1557
+ * @return boolean TRUE bei Spam
1558
+ */
1559
+
1560
+ private static function _is_lang_spam($content)
1561
+ {
1562
+ /* Init */
1563
+ $lang = self::get_option('translate_lang');
1564
+
1565
+ /* Formatieren */
1566
+ $content = wp_strip_all_tags($content);
1567
+
1568
+ /* Keine Daten? */
1569
+ if ( empty($lang) or empty($content) ) {
1570
+ return false;
1571
+ }
1572
+
1573
+ /* Formatieren */
1574
+ $content = rawurlencode(
1575
+ ( function_exists('mb_substr') ? mb_substr($content, 0, 200) : substr($content, 0, 200) )
1576
+ );
1577
+
1578
+ /* IP abfragen */
1579
+ $response = wp_remote_get(
1580
+ esc_url_raw(
1581
+ sprintf(
1582
+ 'http://translate.google.com/translate_a/t?client=x&text=%s',
1583
+ $content
1584
+ ),
1585
+ 'http'
1586
+ )
1587
+ );
1588
+
1589
+ /* Fehler? */
1590
+ if ( is_wp_error($response) ) {
1591
+ return false;
1592
+ }
1593
+
1594
+ /* Parsen */
1595
+ preg_match(
1596
+ '/"src":"(\\D{2})"/',
1597
+ wp_remote_retrieve_body($response),
1598
+ $matches
1599
+ );
1600
+
1601
+ /* Fehler? */
1602
+ if ( empty($matches[1]) ) {
1603
+ return false;
1604
+ }
1605
+
1606
+ return ( strtolower($matches[1]) != $lang );
1607
+ }
1608
+
1609
+
1610
+ /**
1611
+ * Prüfung den Kommentar
1612
+ *
1613
+ * @since 2.4
1614
+ * @change 2.4.3
1615
+ *
1616
+ * @param array $comment Daten des Kommentars
1617
+ * @return array Array mit dem Verdachtsgrund [optional]
1618
+ */
1619
+
1620
+ private static function _verify_comment_request($comment)
1621
+ {
1622
+ /* IP */
1623
+ $ip = self::get_key($_SERVER, 'REMOTE_ADDR');
1624
+
1625
+ /* Kommentarwerte */
1626
+ $body = self::get_key($comment, 'comment_content');
1627
+ $email = self::get_key($comment, 'comment_author_email');
1628
+
1629
+ /* Leere Werte ? */
1630
+ if ( empty($ip) or empty($body) ) {
1631
+ return array(
1632
+ 'reason' => 'empty'
1633
+ );
1634
+ }
1635
+
1636
+ /* Leere Werte ? */
1637
+ if ( get_option('require_name_email') && empty($email) ) {
1638
+ return array(
1639
+ 'reason' => 'empty'
1640
+ );
1641
+ }
1642
+
1643
+ /* Optionen */
1644
+ $options = self::get_options();
1645
+
1646
+ /* Bereits kommentiert? */
1647
+ if ( $options['already_commented'] && !empty($email) && self::_is_approved_email($email) ) {
1648
+ return;
1649
+ }
1650
+
1651
+ /* Bot erkannt */
1652
+ if ( !empty($_POST['bee_spam']) ) {
1653
+ return array(
1654
+ 'reason' => 'css'
1655
+ );
1656
+ }
1657
+
1658
+ /* Erweiterter Schutz */
1659
+ if ( $options['advanced_check'] && self::_is_fake_ip($ip) ) {
1660
+ return array(
1661
+ 'reason' => 'server'
1662
+ );
1663
+ }
1664
+
1665
+ /* IP im Spam */
1666
+ if ( $options['spam_ip'] && self::_is_spam_ip($ip) ) {
1667
+ return array(
1668
+ 'reason' => 'spamip'
1669
+ );
1670
+ }
1671
+
1672
+ /* Honey Pot */
1673
+ if ( $options['honey_pot'] && self::_is_honey_spam($ip) ) {
1674
+ return array(
1675
+ 'reason' => 'honey'
1676
+ );
1677
+ }
1678
+
1679
+ /* Country Code prüfen */
1680
+ if ( $options['country_code'] && self::_is_spam_country($ip) ) {
1681
+ return array(
1682
+ 'reason' => 'country'
1683
+ );
1684
+ }
1685
+
1686
+ /* Translate API */
1687
+ if ( $options['translate_api'] && self::_is_lang_spam($body) ) {
1688
+ return array(
1689
+ 'reason' => 'lang'
1690
+ );
1691
+ }
1692
+ }
1693
+
1694
+
1695
+ /**
1696
+ * Ausführung des Lösch-/Markier-Vorgangs
1697
+ *
1698
+ * @since 0.1
1699
+ * @change 2.4
1700
+ *
1701
+ * @param array $comment Unbehandelte Kommentardaten
1702
+ * @param string $reason Verdachtsgrund
1703
+ * @param boolean $is_ping Ping (ja oder nein) [optional]
1704
+ * @return array $comment Behandelte Kommentardaten
1705
+ */
1706
+
1707
+ private static function _handle_spam_request($comment, $reason, $is_ping = false)
1708
+ {
1709
+ /* Optionen */
1710
+ $options = self::get_options();
1711
+
1712
+ /* Einstellungen */
1713
+ $spam_remove = !$options['flag_spam'];
1714
+ $spam_notice = !$options['no_notice'];
1715
+
1716
+ /* Filter-Einstellungen */
1717
+ $ignore_filter = $options['ignore_filter'];
1718
+ $ignore_type = $options['ignore_type'];
1719
+ $ignore_reason = in_array($reason, $options['ignore_reasons']);
1720
+
1721
+ /* Spam hochzählen */
1722
+ self::_update_spam_count();
1723
+ self::_update_daily_stats();
1724
+
1725
+ /* Spam löschen */
1726
+ if ( $spam_remove ) {
1727
+ die('Spam deleted.');
1728
+ }
1729
+
1730
+ /* Typen behandeln */
1731
+ if ( $ignore_filter && (( $ignore_type == 1 && $is_ping ) or ( $ignore_type == 2 && !$is_ping )) ) {
1732
+ die('Spam deleted.');
1733
+ }
1734
+
1735
+ /* Spamgrund */
1736
+ if ( $ignore_reason ) {
1737
+ die('Spam deleted.');
1738
+ }
1739
+
1740
+ /* Spam-Grund */
1741
+ self::$reason = $reason;
1742
+
1743
+ /* Spam markieren */
1744
+ add_filter(
1745
+ 'pre_comment_approved',
1746
+ create_function(
1747
+ '',
1748
+ 'return "spam";'
1749
+ )
1750
+ );
1751
+
1752
+ /* E-Mail senden */
1753
+ add_filter(
1754
+ 'trackback_post',
1755
+ array(
1756
+ __CLASS__,
1757
+ 'send_mail_notification'
1758
+ )
1759
+ );
1760
+ add_filter(
1761
+ 'comment_post',
1762
+ array(
1763
+ __CLASS__,
1764
+ 'send_mail_notification'
1765
+ )
1766
+ );
1767
+
1768
+
1769
+ /* Notiz setzen */
1770
+ if ( $spam_notice ) {
1771
+ $comment['comment_content'] = sprintf(
1772
+ '[MARKED AS SPAM BY ANTISPAM BEE | %s]%s%s',
1773
+ self::$default['reasons'][self::$reason],
1774
+ "\n",
1775
+ $comment['comment_content']
1776
+ );
1777
+ }
1778
+
1779
+ return $comment;
1780
+ }
1781
+
1782
+
1783
+ /**
1784
+ * Versand einer Benachrichtigung via E-Mail
1785
+ *
1786
+ * @since 0.1
1787
+ * @change 2.4.3
1788
+ *
1789
+ * @param intval $id ID des Kommentars
1790
+ * @return intval $id ID des Kommentars
1791
+ */
1792
+
1793
+ public static function send_mail_notification($id)
1794
+ {
1795
+ /* Optionen */
1796
+ $options = self::get_options();
1797
+
1798
+ /* Keine Benachrichtigung? */
1799
+ if ( !$options['email_notify'] ) {
1800
+ return $id;
1801
+ }
1802
+
1803
+ /* Kommentar */
1804
+ $comment = get_comment($id, ARRAY_A);
1805
+
1806
+ /* Keine Werte? */
1807
+ if ( empty($comment) ) {
1808
+ return $id;
1809
+ }
1810
+
1811
+ /* Parent-Post */
1812
+ if ( !$post = get_post($comment['comment_post_ID']) ) {
1813
+ return $id;
1814
+ }
1815
+
1816
+ /* Sprache laden */
1817
+ self::load_plugin_lang();
1818
+
1819
+ /* Betreff */
1820
+ $subject = sprintf(
1821
+ '[%s] %s',
1822
+ get_bloginfo('name'),
1823
+ __('Comment marked as spam', self::$short)
1824
+ );
1825
+
1826
+ /* Content */
1827
+ if ( !$content = strip_tags(stripslashes($comment['comment_content'])) ) {
1828
+ $content = sprintf(
1829
+ '-- %s --',
1830
+ __('Content removed by Antispam Bee', self::$short)
1831
+ );
1832
+ }
1833
+
1834
+ /* Body */
1835
+ $body = sprintf(
1836
+ "%s \"%s\"\r\n\r\n",
1837
+ __('New spam comment on your post', self::$short),
1838
+ strip_tags($post->post_title)
1839
+ ).sprintf(
1840
+ "%s: %s\r\n",
1841
+ __('Author'),
1842
+ ( empty($comment['comment_author']) ? '' : strip_tags($comment['comment_author']) )
1843
+ ).sprintf(
1844
+ "URL: %s\r\n",
1845
+ esc_url($comment['comment_author_url']) /* empty check exists */
1846
+ ).sprintf(
1847
+ "%s: %s\r\n",
1848
+ __('Type', self::$short),
1849
+ __( ( empty($comment['comment_type']) ? 'Comment' : 'Trackback' ), self::$short )
1850
+ ).sprintf(
1851
+ "Whois: http://whois.arin.net/rest/ip/%s\r\n",
1852
+ $comment['comment_author_IP']
1853
+ ).sprintf(
1854
+ "%s: %s\r\n\r\n",
1855
+ __('Spam Reason', self::$short),
1856
+ __(self::$default['reasons'][self::$reason], self::$short)
1857
+ ).sprintf(
1858
+ "%s\r\n\r\n\r\n",
1859
+ $content
1860
+ ).(
1861
+ EMPTY_TRASH_DAYS ? (
1862
+ sprintf(
1863
+ "%s: %s\r\n",
1864
+ __('Trash it', self::$short),
1865
+ admin_url('comment.php?action=trash&c=' .$id)
1866
+ )
1867
+ ) : (
1868
+ sprintf(
1869
+ "%s: %s\r\n",
1870
+ __('Delete it', self::$short),
1871
+ admin_url('comment.php?action=delete&c=' .$id)
1872
+ )
1873
+ )
1874
+ ).sprintf(
1875
+ "%s: %s\r\n",
1876
+ __('Approve it', self::$short),
1877
+ admin_url('comment.php?action=approve&c=' .$id)
1878
+ ).sprintf(
1879
+ "%s: %s\r\n\r\n",
1880
+ __('Spam list', self::$short),
1881
+ admin_url('edit-comments.php?comment_status=spam')
1882
+ ).sprintf(
1883
+ "%s\r\n%s\r\n",
1884
+ __('Notify message by Antispam Bee', self::$short),
1885
+ __('http://antispambee.com', self::$short)
1886
+ );
1887
+
1888
+ /* Send */
1889
+ wp_mail(
1890
+ get_bloginfo('admin_email'),
1891
+ $subject,
1892
+ $body
1893
+ );
1894
+
1895
+ return $id;
1896
+ }
1897
+
1898
+
1899
+
1900
+
1901
+ ############################
1902
+ ####### STATISTIK ########
1903
+ ############################
1904
+
1905
+
1906
+ /**
1907
+ * Rückgabe der Anzahl von Spam-Kommentaren
1908
+ *
1909
+ * @since 0.1
1910
+ * @change 2.4
1911
+ *
1912
+ * @param intval $count Anzahl der Spam-Kommentare
1913
+ */
1914
+
1915
+ private static function _get_spam_count()
1916
+ {
1917
+ /* Init */
1918
+ $count = self::get_option('spam_count');
1919
+
1920
+ /* Fire */
1921
+ return ( get_locale() == 'de_DE' ? number_format($count, 0, '', '.') : number_format_i18n($count) );
1922
+ }
1923
+
1924
+
1925
+ /**
1926
+ * Ausgabe der Anzahl von Spam-Kommentaren
1927
+ *
1928
+ * @since 0.1
1929
+ * @change 2.4
1930
+ */
1931
+
1932
+ public static function the_spam_count()
1933
+ {
1934
+ echo esc_html( self::_get_spam_count() );
1935
+ }
1936
+
1937
+
1938
+ /**
1939
+ * Aktualisierung der Anzahl von Spam-Kommentaren
1940
+ *
1941
+ * @since 0.1
1942
+ * @change 2.4
1943
+ */
1944
+
1945
+ private static function _update_spam_count()
1946
+ {
1947
+ self::_update_option(
1948
+ 'spam_count',
1949
+ intval( self::get_option('spam_count') + 1 )
1950
+ );
1951
+ }
1952
+
1953
+
1954
+ /**
1955
+ * Aktualisierung der Statistik
1956
+ *
1957
+ * @since 1.9
1958
+ * @change 2.4
1959
+ */
1960
+
1961
+ private static function _update_daily_stats()
1962
+ {
1963
+ /* Init */
1964
+ $stats = (array)self::get_option('daily_stats');
1965
+ $today = (int)strtotime('today');
1966
+
1967
+ /* Hochzählen */
1968
+ if ( array_key_exists($today, $stats) ) {
1969
+ $stats[$today] ++;
1970
+ } else {
1971
+ $stats[$today] = 1;
1972
+ }
1973
+
1974
+ /* Sortieren */
1975
+ krsort($stats, SORT_NUMERIC);
1976
+
1977
+ /* Speichern */
1978
+ self::_update_option(
1979
+ 'daily_stats',
1980
+ array_slice($stats, 0, 31, true)
1981
+ );
1982
+ }
1983
  }
1984
+
1985
+
1986
+ /* Fire */
 
 
 
 
 
 
 
 
 
 
 
 
1987
  add_action(
1988
+ 'plugins_loaded',
1989
+ array(
1990
+ 'Antispam_Bee',
1991
+ 'init'
1992
+ )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1993
  );
1994
+
1995
+ /* Activation */
1996
+ register_activation_hook(
1997
+ __FILE__,
1998
+ array(
1999
+ 'Antispam_Bee',
2000
+ 'activate'
2001
+ )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2002
  );
2003
+
2004
+ /* Deactivation */
2005
+ register_deactivation_hook(
2006
+ __FILE__,
2007
+ array(
2008
+ 'Antispam_Bee',
2009
+ 'deactivate'
2010
+ )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2011
  );
2012
+
2013
+ /* Uninstall */
2014
+ register_uninstall_hook(
2015
+ __FILE__,
2016
+ array(
2017
+ 'Antispam_Bee',
2018
+ 'uninstall'
2019
+ )
2020
+ );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
css/dashboard.css CHANGED
@@ -1 +1 @@
1
- #ab_chart{height:120px;}
1
+ #ab_chart{color:#aaa;height:120px;}
css/{dashboard.original.css → dashboard.dev.css} RENAMED
@@ -1,3 +1,4 @@
1
  #ab_chart {
 
2
  height: 120px;
3
  }
1
  #ab_chart {
2
+ color: #aaa;
3
  height: 120px;
4
  }
css/style.css CHANGED
@@ -1 +1 @@
1
- div.icon32{background:url(../img/icon32.png) no-repeat;}div.postbox h3{cursor:default;}div.postbox:first-child div.inside{background:url(../img/icon200.png) no-repeat right bottom;}img#ab_icon{width:11px;height:9px;border:0;}.inside ul{margin:12px 6px;}.inside>ul{clear:both;width:460px;border:1px solid rgb(223,223,223);padding:6px 12px 1px;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;box-shadow:inset 0 1px 0 white;-moz-box-shadow:inset 0 1px 0 white;-webkit-box-shadow:inset 0 1px 0 white;}.inside ul li{padding:3px 0 2px;}.inside ul li ul{margin:10px 0 -6px 14px;height:1%;overflow:hidden;}.inside ul li .inact{display:none;}.inside ul li ul li{padding:0 4px 8px;font-size:11px;}.inside ul li ul li:first-child{margin:0 0 1px;}.inside ul li ul li select{width:100px;}.inside ul li .shift li{float:left;}.inside ul li .shift li label{margin:0 3px;}.inside ul li .shift li .code,.inside ul li .shift li .block{display:block;}input.small-text{width:40px;margin:-2px 0;}input.regular-text{width:160px;}input.maxi-text{width:350px;}
1
+ #icon-ab{top:-8px;left:0;width:32px;height:32px;position:absolute;background:url('../img/icon@2x.png');background-size:100%;}#ab_main{position:relative;}#ab_main .table{width:460px;height:1%;margin:20px 0 0 -10px;}#ab_main .hr{width:283px;margin:10px 0 10px 10px;border-top:1px dotted #dfdfdf;}#ab_main .related tr{display:none;}#ab_main .related tr:first-child{display:table-row;}#ab_main .form-table{margin:0;}#ab_main .form-table th{width:250px;padding-top:8px;vertical-align:middle;}#ab_main .form-table label{text-shadow:none;}#ab_main .form-table small{color:#aaa;}#ab_main .form-table .maxi-text,#ab_main .form-table .maxi-select{width:160px;}#ab_main .form-table .mini-select option{padding-right:6px;}#ab_main select[multiple]{height:60px;}#ab_main .submit{width:431px;height:1%;margin:20px 0 0;padding:15px 0 0;overflow:hidden;border-top:1px solid #bebebe;}#ab_main .submit .help{float:left;color:#bebebe;font-size:11px;line-height:23px;}#ab_main .submit .button-primary{float:right;}#ab_main .nav-tab-wrapper{height:35px;margin:13px 0 0;padding:0 0 0 44px;border-bottom:1px solid #ccc;}#ab_main .nav-tab-wrapper li{float:left;margin:0;padding:0;}#ab_main .nav-tab-wrapper h2{padding:0;}#ab_main .nav-tab-wrapper a{color:#AAA;height:24px;}#ab_main .ui-tabs-selected a{color:#464646;border-color:#ccc;border-bottom:1px solid #fff;}.ui-tabs .ui-tabs-hide{display:none;}#message{display:none;}#setting-error-settings_updated{top:0;right:0;margin:0;padding:1px 10px 0;position:absolute;animation:blink 1s cubic-bezier(1,0,0,1) 2;-moz-animation:blink 1s cubic-bezier(1,0,0,1) 2;-webkit-animation:blink 1s cubic-bezier(1,0,0,1) 2;}#setting-error-settings_updated p{padding:0;}@keyframes blink{from{opacity:1;}to{opacity:0;}}@-moz-keyframes blink{from{opacity:1;}to{opacity:0;}}@-webkit-keyframes blink{from{opacity:1;}to{opacity:0;}}
css/style.dev.css ADDED
@@ -0,0 +1,164 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* @group Icon */
2
+
3
+ #icon-ab {
4
+ top: -8px;
5
+ left: 0;
6
+ width: 32px;
7
+ height: 32px;
8
+ position: absolute;
9
+ background: url('../img/icon@2x.png');
10
+ background-size: 100%;
11
+ }
12
+
13
+ /* @end group */
14
+
15
+
16
+ /* @group GUI */
17
+
18
+ #ab_main {
19
+ position: relative;
20
+ }
21
+ #ab_main .table {
22
+ width: 460px;
23
+ height: 1%;
24
+ margin: 20px 0 0 -10px;
25
+ }
26
+
27
+ #ab_main .hr {
28
+ width: 283px;
29
+ margin: 10px 0 10px 10px;
30
+ border-top: 1px dotted #DFDFDF;
31
+ }
32
+
33
+ #ab_main .related tr {
34
+ display: none;
35
+ }
36
+ #ab_main .related tr:first-child {
37
+ display: table-row;
38
+ }
39
+
40
+ #ab_main .form-table {
41
+ margin: 0;
42
+ }
43
+ #ab_main .form-table th {
44
+ width: 250px;
45
+ padding-top: 8px;
46
+ vertical-align: middle;
47
+ }
48
+ #ab_main .form-table label {
49
+ text-shadow: none;
50
+ }
51
+ #ab_main .form-table small {
52
+ color: #aaa;
53
+ }
54
+ #ab_main .form-table .maxi-text,
55
+ #ab_main .form-table .maxi-select {
56
+ width: 160px;
57
+ }
58
+ #ab_main .form-table .mini-select option {
59
+ padding-right: 6px;
60
+ }
61
+
62
+ #ab_main select[multiple] {
63
+ height: 60px;
64
+ }
65
+
66
+ #ab_main .submit {
67
+ width: 431px;
68
+ height: 1%;
69
+ margin: 20px 0 0;
70
+ padding: 15px 0 0;
71
+ overflow: hidden;
72
+ border-top: 1px solid #bebebe;
73
+ }
74
+ #ab_main .submit .help {
75
+ float: left;
76
+ color: #bebebe;
77
+ font-size: 11px;
78
+ line-height: 23px;
79
+ }
80
+ #ab_main .submit .button-primary {
81
+ float: right;
82
+ }
83
+
84
+ /* @end group */
85
+
86
+
87
+ /* @group Tabs */
88
+
89
+ #ab_main .nav-tab-wrapper {
90
+ height: 35px;
91
+ margin: 13px 0 0;
92
+ padding: 0 0 0 44px;
93
+ border-bottom: 1px solid #ccc;
94
+ }
95
+ #ab_main .nav-tab-wrapper li {
96
+ float: left;
97
+ margin: 0;
98
+ padding: 0;
99
+ }
100
+ #ab_main .nav-tab-wrapper h2 {
101
+ padding: 0;
102
+ }
103
+ #ab_main .nav-tab-wrapper a {
104
+ color: #AAA;
105
+ height: 24px;
106
+ }
107
+ #ab_main .ui-tabs-selected a {
108
+ color: #464646;
109
+ border-color: #ccc;
110
+ border-bottom: 1px solid #fff;
111
+ }
112
+ .ui-tabs .ui-tabs-hide {
113
+ display: none;
114
+ }
115
+
116
+ /* @end group */
117
+
118
+
119
+ /* @group Alert */
120
+
121
+ #message {
122
+ display: none;
123
+ }
124
+ #setting-error-settings_updated {
125
+ top: 0;
126
+ right: 0;
127
+ margin: 0;
128
+ padding: 1px 10px 0;
129
+ position: absolute;
130
+
131
+ animation: blink 1s cubic-bezier(1, 0, 0, 1) 2;
132
+ -moz-animation: blink 1s cubic-bezier(1, 0, 0, 1) 2;
133
+ -webkit-animation: blink 1s cubic-bezier(1, 0, 0, 1) 2;
134
+ }
135
+ #setting-error-settings_updated p {
136
+ padding: 0;
137
+ }
138
+
139
+ @keyframes blink {
140
+ from {
141
+ opacity: 1;
142
+ }
143
+ to {
144
+ opacity: 0;
145
+ }
146
+ }
147
+ @-moz-keyframes blink {
148
+ from {
149
+ opacity: 1;
150
+ }
151
+ to {
152
+ opacity: 0;
153
+ }
154
+ }
155
+ @-webkit-keyframes blink {
156
+ from {
157
+ opacity: 1;
158
+ }
159
+ to {
160
+ opacity: 0;
161
+ }
162
+ }
163
+
164
+ /* @end group */
css/style.original.css DELETED
@@ -1,78 +0,0 @@
1
- /* @group GUI */
2
-
3
- div.icon32 {
4
- background: url(../img/icon32.png) no-repeat;
5
- }
6
- div.postbox h3 {
7
- cursor: default;
8
- }
9
- div.postbox:first-child div.inside {
10
- background: url(../img/icon200.png) no-repeat right bottom;
11
- }
12
- img#ab_icon {
13
- width: 11px;
14
- height: 9px;
15
- border: 0;
16
- }
17
-
18
- .inside ul {
19
- margin: 12px 6px;
20
- }
21
- .inside > ul {
22
- clear: both;
23
- width: 460px;
24
- border: 1px solid rgb(223, 223, 223);
25
- padding: 6px 12px 1px;
26
-
27
- border-radius: 3px;
28
- -moz-border-radius: 3px;
29
- -webkit-border-radius: 3px;
30
-
31
- box-shadow: inset 0 1px 0 white;
32
- -moz-box-shadow: inset 0 1px 0 white;
33
- -webkit-box-shadow: inset 0 1px 0 white;
34
- }
35
- .inside ul li {
36
- padding: 3px 0 2px;
37
- }
38
- .inside ul li ul {
39
- margin: 10px 0 -6px 14px;
40
- height: 1%;
41
- overflow: hidden;
42
- }
43
- .inside ul li .inact {
44
- display: none;
45
- }
46
- .inside ul li ul li {
47
- padding: 0 4px 8px;
48
- font-size: 11px;
49
- }
50
- .inside ul li ul li:first-child {
51
- margin: 0 0 1px;
52
- }
53
- .inside ul li ul li select {
54
- width: 100px;
55
- }
56
- .inside ul li .shift li {
57
- float: left;
58
- }
59
- .inside ul li .shift li label {
60
- margin: 0 3px;
61
- }
62
- .inside ul li .shift li .code,
63
- .inside ul li .shift li .block {
64
- display: block;
65
- }
66
-
67
- input.small-text {
68
- width: 40px;
69
- margin: -2px 0;
70
- }
71
- input.regular-text {
72
- width: 160px;
73
- }
74
- input.maxi-text {
75
- width: 350px;
76
- }
77
-
78
- /* @end group */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
img/icon.png DELETED
Binary file
img/icon200.png DELETED
Binary file
img/icon32.png DELETED
Binary file
img/icon@2x.png ADDED
Binary file
inc/gui.class.php ADDED
@@ -0,0 +1,471 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ /* Sicherheitsabfrage */
5
+ if ( !class_exists('Antispam_Bee') ) {
6
+ die();
7
+ }
8
+
9
+
10
+ /**
11
+ * Antispam_Bee_GUI
12
+ *
13
+ * @since 2.4
14
+ */
15
+
16
+ class Antispam_Bee_GUI extends Antispam_Bee {
17
+
18
+
19
+ /**
20
+ * Speicherung der GUI
21
+ *
22
+ * @since 0.1
23
+ * @change 2.4.2
24
+ */
25
+
26
+ public static function save_changes()
27
+ {
28
+ /* Kein POST? */
29
+ if ( empty($_POST) ) {
30
+ wp_die(__('Cheatin&#8217; uh?'));
31
+ }
32
+
33
+ /* Referer prüfen */
34
+ check_admin_referer(self::$short);
35
+
36
+ /* Optionen ermitteln */
37
+ $options = array(
38
+ 'flag_spam' => (int)(!empty($_POST['ab_flag_spam'])),
39
+ 'email_notify' => (int)(!empty($_POST['ab_email_notify'])),
40
+ 'cronjob_enable' => (int)(!empty($_POST['ab_cronjob_enable'])),
41
+ 'cronjob_interval' => (int)self::get_key($_POST, 'ab_cronjob_interval'),
42
+
43
+ 'no_notice' => (int)(!empty($_POST['ab_no_notice'])),
44
+
45
+ 'dashboard_count' => (int)(!empty($_POST['ab_dashboard_count'])),
46
+ 'dashboard_chart' => (int)(!empty($_POST['ab_dashboard_chart'])),
47
+ 'advanced_check' => (int)(!empty($_POST['ab_advanced_check'])),
48
+ 'spam_ip' => (int)(!empty($_POST['ab_spam_ip'])),
49
+ 'already_commented' => (int)(!empty($_POST['ab_already_commented'])),
50
+ 'always_allowed' => (int)(!empty($_POST['ab_always_allowed'])),
51
+
52
+ 'ignore_pings' => (int)(!empty($_POST['ab_ignore_pings'])),
53
+ 'ignore_filter' => (int)(!empty($_POST['ab_ignore_filter'])),
54
+ 'ignore_type' => (int)self::get_key($_POST, 'ab_ignore_type'),
55
+ 'ignore_reasons' => (array)self::get_key($_POST, 'ab_ignore_reasons'),
56
+
57
+ 'honey_pot' => (int)(!empty($_POST['ab_honey_pot'])),
58
+ 'honey_key' => sanitize_text_field(self::get_key($_POST, 'ab_honey_key')),
59
+
60
+ 'country_code' => (int)(!empty($_POST['ab_country_code'])),
61
+ 'country_black' => sanitize_text_field(self::get_key($_POST, 'ab_country_black')),
62
+ 'country_white' => sanitize_text_field(self::get_key($_POST, 'ab_country_white')),
63
+
64
+ 'translate_api' => (int)(!empty($_POST['ab_translate_api'])),
65
+ 'translate_lang' => sanitize_text_field(self::get_key($_POST, 'ab_translate_lang')),
66
+
67
+ 'tab_index' => (int)self::get_key($_POST, 'ab_tab_index')
68
+ );
69
+
70
+ /* Kein Tag eingetragen? */
71
+ if ( empty($options['cronjob_interval']) ) {
72
+ $options['cronjob_enable'] = 0;
73
+ }
74
+
75
+ /* Honey Key reinigen */
76
+ if ( !empty($options['honey_key']) ) {
77
+ $options['honey_key'] = preg_replace(
78
+ '/[^a-z]/',
79
+ '',
80
+ strtolower($options['honey_key'])
81
+ );
82
+ }
83
+ if ( empty($options['honey_key']) ) {
84
+ $options['honey_pot'] = 0;
85
+ }
86
+
87
+ /* Translate API */
88
+ if ( !empty($options['translate_lang']) ) {
89
+ if ( !preg_match('/^(de|en|fr|it|es)$/', $options['translate_lang']) ) {
90
+ $options['translate_lang'] = '';
91
+ }
92
+ }
93
+ if ( empty($options['translate_lang']) ) {
94
+ $options['translate_api'] = 0;
95
+ }
96
+
97
+
98
+ /* Blacklist reinigen */
99
+ if ( !empty($options['country_black']) ) {
100
+ $options['country_black'] = preg_replace(
101
+ '/[^A-Z ]/',
102
+ '',
103
+ strtoupper($options['country_black'])
104
+ );
105
+ }
106
+
107
+ /* Whitelist reinigen */
108
+ if ( !empty($options['country_white']) ) {
109
+ $options['country_white'] = preg_replace(
110
+ '/[^A-Z ]/',
111
+ '',
112
+ strtoupper($options['country_white'])
113
+ );
114
+ }
115
+
116
+ /* Leere Listen? */
117
+ if ( empty($options['country_black']) && empty($options['country_white']) ) {
118
+ $options['country_code'] = 0;
119
+ }
120
+
121
+
122
+ /* Cron stoppen? */
123
+ if ( $options['cronjob_enable'] && !self::get_option('cronjob_enable') ) {
124
+ self::init_scheduled_hook();
125
+ } else if ( !$options['cronjob_enable'] && self::get_option('cronjob_enable') ) {
126
+ self::clear_scheduled_hook();
127
+ }
128
+
129
+ /* Optionen speichern */
130
+ self::update_options($options);
131
+
132
+ /* Redirect */
133
+ wp_safe_redirect(
134
+ add_query_arg(
135
+ array(
136
+ 'updated' => 'true'
137
+ ),
138
+ wp_get_referer()
139
+ )
140
+ );
141
+
142
+ die();
143
+ }
144
+
145
+
146
+ /**
147
+ * Der aktive Tab
148
+ *
149
+ * @since 2.4
150
+ * @change 2.4
151
+ */
152
+
153
+ private static function _tab_index()
154
+ {
155
+ echo ( empty($_GET['updated']) ? 0 : (int)self::get_option('tab_index') );
156
+ }
157
+
158
+
159
+ /**
160
+ * Anzeige der GUI
161
+ *
162
+ * @since 0.1
163
+ * @change 2.4.2
164
+ */
165
+
166
+ function options_page() { ?>
167
+ <div class="wrap" id="ab_main">
168
+ <form action="<?php echo admin_url('admin-post.php') ?>" method="post">
169
+ <?php $options = self::get_options() ?>
170
+
171
+ <?php wp_nonce_field(self::$short) ?>
172
+
173
+ <input type="hidden" name="action" value="ab_save_changes" />
174
+ <input type="hidden" name="ab_tab_index" id="ab_tab_index" value="<?php self::_tab_index() ?>" />
175
+
176
+ <?php screen_icon('ab') ?>
177
+
178
+ <ul class="nav-tab-wrapper">
179
+ <li class="ui-tabs-selected">
180
+ <h2><a href="#ab-tab-general" class="nav-tab"><?php esc_html_e('General', self::$short) ?></a></h2>
181
+ </li>
182
+ <li>
183
+ <h2><a href="#ab-tab-filter" class="nav-tab"><?php esc_html_e('Filter', self::$short) ?></a></h2>
184
+ </li>
185
+ <li>
186
+ <h2><a href="#ab-tab-advanced" class="nav-tab"><?php esc_html_e('Advanced', self::$short) ?></a></h2>
187
+ </li>
188
+ </ul>
189
+
190
+ <!-- Allgemein -->
191
+ <div class="table ui-tabs-hide" id="ab-tab-general">
192
+ <table class="form-table">
193
+ <tr>
194
+ <th>
195
+ <label for="ab_advanced_check">
196
+ <?php esc_html_e('Stricter inspection for comments and pings', self::$short) ?>
197
+ </label>
198
+ </th>
199
+ <td>
200
+ <input type="checkbox" name="ab_advanced_check" id="ab_advanced_check" value="1" <?php checked($options['advanced_check'], 1) ?> />
201
+ </td>
202
+ </tr>
203
+
204
+ <tr>
205
+ <th>
206
+ <label for="ab_spam_ip">
207
+ <?php esc_html_e('Consider comments which are already marked as spam', self::$short) ?>
208
+ </label>
209
+ </th>
210
+ <td>
211
+ <input type="checkbox" name="ab_spam_ip" id="ab_spam_ip" value="1" <?php checked($options['spam_ip'], 1) ?> />
212
+ </td>
213
+ </tr>
214
+
215
+ <tr>
216
+ <th>
217
+ <label for="ab_already_commented">
218
+ <?php esc_html_e('Do not check if the comment author has already approved', self::$short) ?>
219
+ </label>
220
+ </th>
221
+ <td>
222
+ <input type="checkbox" name="ab_already_commented" id="ab_already_commented" value="1" <?php checked($options['already_commented'], 1) ?> />
223
+ </td>
224
+ </tr>
225
+
226
+ <tr>
227
+ <th>
228
+ <label for="ab_ignore_pings">
229
+ <?php esc_html_e('Do not check trackbacks / pingbacks', self::$short) ?>
230
+ </label>
231
+ </th>
232
+ <td>
233
+ <input type="checkbox" name="ab_ignore_pings" id="ab_ignore_pings" value="1" <?php checked($options['ignore_pings'], 1) ?> />
234
+ </td>
235
+ </tr>
236
+
237
+ <tr>
238
+ <th>
239
+ <label for="ab_always_allowed">
240
+ <?php esc_html_e('Comment form used outside of posts', self::$short) ?>
241
+ </label>
242
+ </th>
243
+ <td>
244
+ <input type="checkbox" name="ab_always_allowed" id="ab_always_allowed" value="1" <?php checked($options['always_allowed'], 1) ?> />
245
+ </td>
246
+ </tr>
247
+ </table>
248
+
249
+ <p class="hr"></p>
250
+
251
+ <table class="form-table">
252
+ <tr>
253
+ <th>
254
+ <label for="ab_dashboard_chart">
255
+ <?php esc_html_e('Statistics on the dashboard', self::$short) ?>
256
+ </label>
257
+ </th>
258
+ <td>
259
+ <input type="checkbox" name="ab_dashboard_chart" id="ab_dashboard_chart" value="1" <?php checked($options['dashboard_chart'], 1) ?> />
260
+ </td>
261
+ </tr>
262
+
263
+ <tr>
264
+ <th>
265
+ <label for="ab_dashboard_count">
266
+ <?php esc_html_e('Spam counter on the dashboard', self::$short) ?>
267
+ </label>
268
+ </th>
269
+ <td>
270
+ <input type="checkbox" name="ab_dashboard_count" id="ab_dashboard_count" value="1" <?php checked($options['dashboard_count'], 1) ?> />
271
+ </td>
272
+ </tr>
273
+ </table>
274
+ </div>
275
+
276
+
277
+ <!-- Filter -->
278
+ <div class="table ui-tabs-hide" id="ab-tab-filter">
279
+ <!-- IP info DB -->
280
+ <table class="form-table related">
281
+ <tr>
282
+ <th>
283
+ <label for="ab_country_code">
284
+ <?php esc_html_e('Block comments and pings from specific countries', self::$short) ?>
285
+ </label>
286
+ </th>
287
+ <td>
288
+ <input type="checkbox" name="ab_country_code" id="ab_country_code" value="1" <?php checked($options['country_code'], 1) ?> />
289
+ </td>
290
+ </tr>
291
+
292
+ <tr>
293
+ <th>
294
+ <label for="ab_country_black">
295
+ <?php esc_html_e('Blacklist', self::$short) ?> <?php esc_html_e('as', self::$short) ?> <a href="http://www.iso.org/iso/country_names_and_code_elements" target="_blank"><?php esc_html_e('iso codes', self::$short) ?></a>
296
+ </label>
297
+ </th>
298
+ <td>
299
+ <input type="text" name="ab_country_black" id="ab_country_black" value="<?php echo esc_attr($options['country_black']); ?>" class="maxi-text code" />
300
+ </td>
301
+ </tr>
302
+
303
+ <tr>
304
+ <th>
305
+ <label for="ab_country_white">
306
+ <?php esc_html_e('Whitelist', self::$short) ?> <?php esc_html_e('as', self::$short) ?> <a href="http://www.iso.org/iso/country_names_and_code_elements" target="_blank"><?php esc_html_e('iso codes', self::$short) ?></a>
307
+ </label>
308
+ </th>
309
+ <td>
310
+ <input type="text" name="ab_country_white" id="ab_country_white" value="<?php echo esc_attr($options['country_white']); ?>" class="maxi-text code" />
311
+ </td>
312
+ </tr>
313
+ </table>
314
+
315
+ <p class="hr"></p>
316
+
317
+ <!-- Translate API -->
318
+ <table class="form-table related">
319
+ <tr>
320
+ <th>
321
+ <label for="ab_translate_api">
322
+ <?php esc_html_e('Allow comments only in certain language', self::$short) ?>
323
+ </label>
324
+ </th>
325
+ <td>
326
+ <input type="checkbox" name="ab_translate_api" id="ab_translate_api" value="1" <?php checked($options['translate_api'], 1) ?> />
327
+ </td>
328
+ </tr>
329
+
330
+ <tr>
331
+ <th>
332
+ <label for="ab_translate_lang">
333
+ <?php esc_html_e('Language', self::$short) ?>
334
+ </label>
335
+ </th>
336
+ <td>
337
+ <select name="ab_translate_lang" class="maxi-select">
338
+ <?php foreach(array('de' => 'German', 'en' => 'English', 'fr' => 'French', 'it' => 'Italian', 'es' => 'Spanish') as $k => $v) { ?>
339
+ <option <?php selected($options['translate_lang'], $k); ?> value="<?php echo esc_attr($k) ?>"><?php esc_html_e($v, self::$short) ?></option>
340
+ <?php } ?>
341
+ </select>
342
+ </td>
343
+ </tr>
344
+ </table>
345
+
346
+ <p class="hr"></p>
347
+
348
+ <!-- Honey Pot -->
349
+ <table class="form-table related">
350
+ <tr>
351
+ <th>
352
+ <label for="ab_honey_pot">
353
+ <?php esc_html_e('Search comment spammers in the Project Honey Pot', self::$short) ?>
354
+ </label>
355
+ </th>
356
+ <td>
357
+ <input type="checkbox" name="ab_honey_pot" id="ab_honey_pot" value="1" <?php checked($options['honey_pot'], 1) ?> />
358
+ </td>
359
+ </tr>
360
+
361
+ <tr>
362
+ <th>
363
+ <label for="ab_honey_key">
364
+ Project Honey Pot <a href="http://www.projecthoneypot.org/httpbl_configure.php" target="_blank">API Key</a>
365
+ </label>
366
+ </th>
367
+ <td>
368
+ <input type="text" name="ab_honey_key" id="ab_honey_key" value="<?php echo esc_attr($options['honey_key']); ?>" class="maxi-text code" />
369
+ </td>
370
+ </tr>
371
+ </table>
372
+ </div>
373
+
374
+
375
+ <!-- Erweitert -->
376
+ <div class="table ui-tabs-hide" id="ab-tab-advanced">
377
+ <table class="form-table related">
378
+ <tr>
379
+ <th>
380
+ <label for="ab_flag_spam">
381
+ <?php esc_html_e('Mark as Spam, do not delete', self::$short) ?>
382
+ </label>
383
+ </th>
384
+ <td>
385
+ <input type="checkbox" name="ab_flag_spam" id="ab_flag_spam" value="1" <?php checked($options['flag_spam'], 1) ?> />
386
+ </td>
387
+ </tr>
388
+
389
+ <tr>
390
+ <th>
391
+ <label for="ab_email_notify">
392
+ <?php esc_html_e('Notification by email', self::$short) ?>
393
+ </label>
394
+ </th>
395
+ <td>
396
+ <input type="checkbox" name="ab_email_notify" id="ab_email_notify" value="1" <?php checked($options['email_notify'], 1) ?> />
397
+ </td>
398
+ </tr>
399
+
400
+ <tr>
401
+ <th>
402
+ <?php echo sprintf(esc_html__('Spam will be automatically deleted after %s days', self::$short), '<input type="text" name="ab_cronjob_interval" value="' .esc_attr($options['cronjob_interval']). '" class="small-text" />') ?>
403
+ <?php if ( $options['cronjob_enable'] && $options['cronjob_timestamp'] ) {
404
+ echo sprintf(
405
+ '<br /><small>%s @ %s</small>',
406
+ esc_html__('Last check', self::$short),
407
+ date_i18n('d.m.Y H:i:s', ($options['cronjob_timestamp'] + get_option('gmt_offset') * 3600))
408
+ );
409
+ } ?>
410
+ </th>
411
+ <td>
412
+ <input type="checkbox" name="ab_cronjob_enable" id="ab_cronjob_enable" value="1" <?php checked($options['cronjob_enable'], 1) ?> />
413
+ </td>
414
+ </tr>
415
+
416
+ <tr>
417
+ <th>
418
+ <label for="ab_no_notice">
419
+ <?php esc_html_e('Hide the &quot;MARKED AS SPAM&quot; note', self::$short) ?>
420
+ </label>
421
+ </th>
422
+ <td>
423
+ <input type="checkbox" name="ab_no_notice" id="ab_no_notice" value="1" <?php checked($options['no_notice'], 1) ?> />
424
+ </td>
425
+ </tr>
426
+
427
+ <tr>
428
+ <th>
429
+ <?php esc_html_e('Limit on', self::$short) ?> <select name="ab_ignore_type" class="mini-select"><?php foreach(array(1 => 'Comments', 2 => 'Pings') as $key => $value) {
430
+ echo '<option value="' .esc_attr($key). '" ';
431
+ selected($options['ignore_type'], $key);
432
+ echo '>' .esc_html__($value). '</option>';
433
+ } ?>
434
+ </select>
435
+ </th>
436
+ <td>
437
+ <input type="checkbox" name="ab_ignore_filter" id="ab_ignore_filter" value="1" <?php checked($options['ignore_filter'], 1) ?> />
438
+ </td>
439
+ </tr>
440
+
441
+ <tr>
442
+ <th style="vertical-align: top">
443
+ <label for="ab_ignore_reasons">
444
+ <?php esc_html_e('Delete comments by spam reasons', self::$short) ?>
445
+ <small><?php esc_html_e('Multiple choice or deselection by pressing Ctrl/CMD', self::$short) ?></small>
446
+ </label>
447
+ </th>
448
+ <td>
449
+ <select name="ab_ignore_reasons[]" id="ab_ignore_reasons" size="2" multiple="multiple" class="maxi-select">
450
+ <?php foreach ( self::$default['reasons'] as $k => $v) { ?>
451
+ <option <?php selected(in_array($k, $options['ignore_reasons']), true); ?> value="<?php echo $k ?>"><?php esc_html_e($v, self::$short) ?></option>
452
+ <?php } ?>
453
+ </select>
454
+ </td>
455
+ </tr>
456
+ </table>
457
+ </div>
458
+
459
+
460
+ <p class="submit">
461
+ <?php if ( get_locale() == 'de_DE' ) { ?>
462
+ <a href="http://playground.ebiene.de/antispam-bee-wordpress-plugin/" class="help" target="_blank">
463
+ Dokumentation
464
+ </a>
465
+ <?php } ?>
466
+ <input type="submit" class="button-primary" value="<?php _e('Save Changes') ?>" />
467
+ </p>
468
+ </form>
469
+ </div>
470
+ <?php }
471
+ }
js/{dashboard.original.js → dashboard.dev.js} RENAMED
File without changes
js/script.dev.js ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ jQuery(document).ready(
2
+ function($) {
3
+ /* Mini Plugin */
4
+ $.fn.abManageOptions = function() {
5
+ var $$ = this,
6
+ obj = $$.parents('tr').nextAll('tr');
7
+
8
+ obj.toggle(
9
+ 0,
10
+ function() {
11
+ obj.children().find(':input').attr('disabled', !$$.attr('checked'));
12
+ }
13
+ );
14
+ }
15
+
16
+ /* Tabs steuern */
17
+ function abInitTabs() {
18
+ $('#ab_main').tabs(
19
+ {
20
+ 'select': function(event, ui) {
21
+ $('#ab_tab_index').val(ui.index);
22
+ },
23
+ 'selected': parseInt($('#ab_tab_index').val())
24
+ }
25
+ );
26
+ }
27
+
28
+ /* Event abwickeln */
29
+ $('#ab_main .related tr:first-child :checkbox').click(
30
+ function() {
31
+ $(this).abManageOptions();
32
+ }
33
+ ).filter(':checked').abManageOptions();
34
+
35
+ /* jQuery UI geladen? */
36
+ if ( jQuery.ui === undefined || jQuery.ui.tabs === undefined ) {
37
+ $.getScript(
38
+ 'http://code.jquery.com/ui/1.8.18/jquery-ui.min.js',
39
+ abInitTabs
40
+ );
41
+ } else {
42
+ abInitTabs();
43
+ }
44
+
45
+ /* Alert ausblenden */
46
+ if ( typeof $.fn.delay === 'function' ) {
47
+ $('#setting-error-settings_updated').delay(5000).fadeOut();
48
+ }
49
+ }
50
+ );
js/script.js CHANGED
@@ -1 +1,2 @@
1
- jQuery(document).ready(function(a){function f(b){var c=a(b).parents("li").find(".shift");c.slideToggle("fast",function(){c.children().find(":input").attr("disabled",!a(b).attr("checked"))})}var d,e=["antispam_bee_flag_spam","antispam_bee_country_code","antispam_bee_honey_pot","antispam_bee_translate_api"];for(d in e)a("#"+e[d]).click(function(){f(this)})});
 
1
+ jQuery(document).ready(function(a){function c(){a("#ab_main").tabs({select:function(d,b){a("#ab_tab_index").val(b.index)},selected:parseInt(a("#ab_tab_index").val())})}a.fn.abManageOptions=function(){var a=this,b=a.parents("tr").nextAll("tr");b.toggle(0,function(){b.children().find(":input").attr("disabled",!a.attr("checked"))})};a("#ab_main .related tr:first-child :checkbox").click(function(){a(this).abManageOptions()}).filter(":checked").abManageOptions();void 0===jQuery.ui||void 0===jQuery.ui.tabs?
2
+ a.getScript("http://code.jquery.com/ui/1.8.18/jquery-ui.min.js",c):c();"function"===typeof a.fn.delay&&a("#setting-error-settings_updated").delay(5E3).fadeOut()});
js/script.original.js DELETED
@@ -1,32 +0,0 @@
1
- jQuery(document).ready(
2
- function($) {
3
- /* Init */
4
- var ab_num, ab_obj = [
5
- 'antispam_bee_flag_spam',
6
- 'antispam_bee_country_code',
7
- 'antispam_bee_honey_pot',
8
- 'antispam_bee_translate_api'
9
- ];
10
-
11
- /* Checkboxen markieren */
12
- function manage_options(checkbox) {
13
- var obj = $(checkbox).parents('li').find('.shift');
14
-
15
- obj.slideToggle(
16
- 'fast',
17
- function() {
18
- obj.children().find(':input').attr('disabled', !$(checkbox).attr('checked'));
19
- }
20
- );
21
- }
22
-
23
- /* Event zuweisen */
24
- for (ab_num in ab_obj) {
25
- $('#' + ab_obj[ab_num]).click(
26
- function() {
27
- manage_options(this);
28
- }
29
- );
30
- }
31
- }
32
- );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lang/antispam_bee-ca.mo DELETED
Binary file
lang/antispam_bee-ca.po DELETED
@@ -1,41 +0,0 @@
1
- msgid ""
2
- msgstr ""
3
- "Project-Id-Version: Antispam Bee\n"
4
- "POT-Creation-Date: \n"
5
- "PO-Revision-Date: \n"
6
- "Last-Translator: Sergej Müller\n"
7
- "Language-Team: Sergej Müller\n"
8
- "MIME-Version: 1.0\n"
9
- "Content-Type: text/plain; charset=utf-8\n"
10
- "Content-Transfer-Encoding: 8bit\n"
11
- "X-Poedit-Language: Catalan\n"
12
- "X-Poedit-Country: SPAIN\n"
13
- "X-Poedit-SourceCharset: utf-8\n"
14
- "X-Poedit-KeywordsList: __;_e\n"
15
- "X-Poedit-Basepath: .\n"
16
- "X-Poedit-SearchPath-0: .\n"
17
-
18
- msgid "Mark as Spam, do not delete"
19
- msgstr "Marca com Spam, no l'esborris."
20
-
21
- msgid "Limit on"
22
- msgstr "Limit on"
23
-
24
- msgid "Spam will be automatically deleted after %s days"
25
- msgstr "Spam serà automàticament esborrat després de %s dies"
26
-
27
- msgid "Do not check trackbacks / pingbacks"
28
- msgstr "No marquis vincles / pingbacks"
29
-
30
- msgid "Hide the &quot;MARKED AS SPAM&quot; note"
31
- msgstr "Amaga la nota &quot;MARCAT COM SPAM&quot;"
32
-
33
- msgid "Last check"
34
- msgstr "Últim"
35
-
36
- msgid "About"
37
- msgstr "Quant a"
38
-
39
- msgid "requires at least WordPress 2.7"
40
- msgstr "requires at least WordPress 2.7"
41
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lang/antispam_bee-de_DE.mo CHANGED
Binary file
lang/antispam_bee-de_DE.po CHANGED
@@ -15,68 +15,26 @@ msgstr ""
15
  "X-Poedit-Basepath: .\n"
16
  "X-Poedit-SearchPath-0: .\n"
17
 
18
- msgid "Mark as Spam, do not delete"
19
- msgstr "Spam markieren, nicht löschen"
20
-
21
- msgid "Limit on"
22
- msgstr "Beschränken auf"
23
-
24
- msgid "Spam will be automatically deleted after %s days"
25
- msgstr "Spam nach %s Tagen automatisch löschen"
26
-
27
- msgid "Send an admin email when new spam item incoming"
28
- msgstr "Bei Neuzugängen via E-Mail benachrichtigen"
29
-
30
- msgid "Do not check trackbacks / pingbacks"
31
- msgstr "Track- und Pingbacks nicht prüfen"
32
-
33
- msgid "Hide the &quot;MARKED AS SPAM&quot; note"
34
- msgstr "Hinweis &quot;MARKED AS SPAM&quot; unterdrücken"
35
-
36
- msgid "Display blocked comments count on the dashboard"
37
- msgstr "Anzahl der Spamkommentare auf dem Dashboard zeigen"
38
-
39
- msgid "Display statistics on the dashboard"
40
- msgstr "Statistik auf dem Dashboard zeigen"
41
-
42
- msgid "Comments are also used outside of posts and pages"
43
- msgstr "Kommentare finden auch außerhalb von Beiträgen Verwendung"
44
-
45
- msgid "Enable stricter inspection for incomming comments"
46
- msgstr "Schärfere Prüfung für eingehende Kommentare anwenden"
47
-
48
- msgid "Do not check if the comment author has already approved"
49
- msgstr "Autoren mit bereits genehmigten Kommentaren vertrauen"
50
-
51
- msgid "Comment marked as spam"
52
- msgstr "Kommentar als Spam markiert"
53
 
54
  msgid "New spam comment on your post"
55
- msgstr "Neuer Spam-Kommentar zum Artikel"
56
-
57
- msgid "Block comments and pings from specific countries"
58
- msgstr "Kommentare und Pings aus bestimmten Ländern verhindern"
59
-
60
- msgid "Search comment spammers in the Project Honey Pot"
61
- msgstr "Project Honey Pot als Spammer-Quelle heranziehen"
62
-
63
- msgid "Consider comments which are already marked as spam"
64
- msgstr "Bereits als Spam markierte Kommentare berücksichtigen"
65
 
66
- msgid "Allow comments only in certain language"
67
- msgstr "Kommentare nur in bestimmter Sprache zulassen"
68
 
69
- msgid "Language"
70
- msgstr "Sprache"
71
 
72
- msgid "English"
73
- msgstr "Englisch"
74
 
75
- msgid "German"
76
- msgstr "Deutsch"
77
 
78
- msgid "get free"
79
- msgstr "anfordern"
80
 
81
  msgid "Spam Reason"
82
  msgstr "Spamgrund"
@@ -102,11 +60,8 @@ msgstr "Ländercode"
102
  msgid "Honey Pot"
103
  msgstr "Honey Pot"
104
 
105
- msgid "Blacklist"
106
- msgstr "Blacklist"
107
-
108
- msgid "Whitelist"
109
- msgstr "Whitelist"
110
 
111
  msgid "iso codes"
112
  msgstr "ISO Codes"
@@ -129,21 +84,12 @@ msgstr "Benachrichtigung von Antispam Bee"
129
  msgid "Content removed by Antispam Bee"
130
  msgstr "Inhalt entfernt von Antispam Bee"
131
 
132
- msgid "or"
133
- msgstr "oder"
134
-
135
  msgid "Last check"
136
  msgstr "Zuletzt"
137
 
138
- msgid "requires at least WordPress 2.8"
139
- msgstr "benötigt WordPress 2.8"
140
-
141
  msgid "Blocked"
142
  msgstr "Blockiert"
143
 
144
- msgid "http://www.wpseo.org"
145
- msgstr "http://www.wpseo.de"
146
-
147
  msgid "Today"
148
  msgstr "Heute"
149
 
@@ -153,3 +99,90 @@ msgstr "Simples, äußerst effektives Plugin zur Bekämpfung von Spam-Kommentare
153
  msgid "http://antispambee.com"
154
  msgstr "http://antispambee.de"
155
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15
  "X-Poedit-Basepath: .\n"
16
  "X-Poedit-SearchPath-0: .\n"
17
 
18
+ msgid "No data available."
19
+ msgstr "Noch keine Daten vorhanden."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
20
 
21
  msgid "New spam comment on your post"
22
+ msgstr "Neuer Spam zum Artikel"
 
 
 
 
 
 
 
 
 
23
 
24
+ msgid "Advanced"
25
+ msgstr "Erweitert"
26
 
27
+ msgid "Filter"
28
+ msgstr "Filter"
29
 
30
+ msgid "General"
31
+ msgstr "Allgemein"
32
 
33
+ msgid "Comment"
34
+ msgstr "Kommentar"
35
 
36
+ msgid "Type"
37
+ msgstr "Typ"
38
 
39
  msgid "Spam Reason"
40
  msgstr "Spamgrund"
60
  msgid "Honey Pot"
61
  msgstr "Honey Pot"
62
 
63
+ msgid "as"
64
+ msgstr "als"
 
 
 
65
 
66
  msgid "iso codes"
67
  msgstr "ISO Codes"
84
  msgid "Content removed by Antispam Bee"
85
  msgstr "Inhalt entfernt von Antispam Bee"
86
 
 
 
 
87
  msgid "Last check"
88
  msgstr "Zuletzt"
89
 
 
 
 
90
  msgid "Blocked"
91
  msgstr "Blockiert"
92
 
 
 
 
93
  msgid "Today"
94
  msgstr "Heute"
95
 
99
  msgid "http://antispambee.com"
100
  msgstr "http://antispambee.de"
101
 
102
+ # Spam detection
103
+ msgid "Mark as Spam, do not delete"
104
+ msgstr "Spam markieren, nicht löschen"
105
+
106
+ msgid "Limit on"
107
+ msgstr "Beschränken auf"
108
+
109
+ msgid "Spam will be automatically deleted after %s days"
110
+ msgstr "Löschung nach %s Tagen"
111
+
112
+ msgid "Notification by email"
113
+ msgstr "Benachrichtigung via E-Mail"
114
+
115
+ msgid "Delete comments by spam reasons"
116
+ msgstr "Bei gewählten Spamgründen sofort löschen"
117
+
118
+ msgid "Multiple choice or deselection by pressing Ctrl/CMD"
119
+ msgstr "Mehrfachauswahl bzw. Abwahl mit Strg/CMD"
120
+
121
+ msgid "Hide the &quot;MARKED AS SPAM&quot; note"
122
+ msgstr "&quot;MARKED AS SPAM&quot; unterdrücken"
123
+
124
+ msgid "Comment marked as spam"
125
+ msgstr "Spam-Benachrichtigung"
126
+
127
+ # Block countries
128
+ msgid "Block comments and pings from specific countries"
129
+ msgstr "Länder blockieren bzw. erlauben"
130
+
131
+ msgid "Blacklist"
132
+ msgstr "Blacklist"
133
+
134
+ msgid "Whitelist"
135
+ msgstr "Whitelist"
136
+
137
+ # Project Honey Pot
138
+ msgid "Search comment spammers in the Project Honey Pot"
139
+ msgstr "Project Honey Pot als Quelle für Spam"
140
+
141
+ msgid "English"
142
+ msgstr "Englisch"
143
+
144
+ msgid "German"
145
+ msgstr "Deutsch"
146
+
147
+ msgid "French"
148
+ msgstr "Französisch"
149
+
150
+ msgid "Italian"
151
+ msgstr "Italienisch"
152
+
153
+ msgid "Spanish"
154
+ msgstr "Spanisch"
155
+
156
+ # Translate API
157
+ msgid "Allow comments only in certain language"
158
+ msgstr "Inhalte nur in einer Sprache zulassen"
159
+
160
+ msgid "Language"
161
+ msgstr "Sprache"
162
+
163
+ # Extended
164
+ msgid "Stricter inspection for comments and pings"
165
+ msgstr "Zusatzchecks für Kommentare und Pings"
166
+
167
+ msgid "Consider comments which are already marked as spam"
168
+ msgstr "Lernfähigkeit für aktuellen Datenbestand"
169
+
170
+ msgid "Do not check if the comment author has already approved"
171
+ msgstr "Genehmigten Kommentatoren vertrauen"
172
+
173
+ # Misc
174
+ msgid "Spam counter on the dashboard"
175
+ msgstr "Spam-Anzahl auf dem Dashboard"
176
+
177
+ msgid "Statistics on the dashboard"
178
+ msgstr "Verlauf-Statistik auf dem Dashboard"
179
+
180
+ msgid "Do not check trackbacks / pingbacks"
181
+ msgstr "Keine Prüfung der Ping- und Trackbacks"
182
+
183
+ msgid "Comment form used outside of posts"
184
+ msgstr "Kommentarformular auf Archivseiten"
185
+
186
+ msgid "Antispam Bee requires WordPress 3.3 and PHP 5.1.2"
187
+ msgstr "Antispam Bee setzt WordPress 3.3 und PHP 5.1.2 voraus"
188
+
lang/antispam_bee-es_ES.mo DELETED
Binary file
lang/antispam_bee-es_ES.po DELETED
@@ -1,41 +0,0 @@
1
- msgid ""
2
- msgstr ""
3
- "Project-Id-Version: Antispam Bee\n"
4
- "POT-Creation-Date: \n"
5
- "PO-Revision-Date: \n"
6
- "Last-Translator: Sergej Müller\n"
7
- "Language-Team: Sergej Müller\n"
8
- "MIME-Version: 1.0\n"
9
- "Content-Type: text/plain; charset=utf-8\n"
10
- "Content-Transfer-Encoding: 8bit\n"
11
- "X-Poedit-Language: Spanish\n"
12
- "X-Poedit-Country: SPAIN\n"
13
- "X-Poedit-SourceCharset: utf-8\n"
14
- "X-Poedit-KeywordsList: __;_e\n"
15
- "X-Poedit-Basepath: .\n"
16
- "X-Poedit-SearchPath-0: .\n"
17
-
18
- msgid "Mark as Spam, do not delete"
19
- msgstr "Marcar com Spam, no borrar."
20
-
21
- msgid "Limit on"
22
- msgstr "Limit on"
23
-
24
- msgid "Spam will be automatically deleted after %s days"
25
- msgstr "El Spam será automáticamente eliminado después de %s días"
26
-
27
- msgid "Do not check trackbacks / pingbacks"
28
- msgstr "No marcar vínculos / pingbacks"
29
-
30
- msgid "Hide the &quot;MARKED AS SPAM&quot; note"
31
- msgstr "Esconder la nota &quot;MARCADO COMO SPAM&quot;"
32
-
33
- msgid "Last check"
34
- msgstr "Último"
35
-
36
- msgid "About"
37
- msgstr "Acerca de"
38
-
39
- msgid "requires at least WordPress 2.7"
40
- msgstr "requires at least WordPress 2.7"
41
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lang/antispam_bee-fr_FR.mo DELETED
Binary file
lang/antispam_bee-fr_FR.po DELETED
@@ -1,171 +0,0 @@
1
- msgid ""
2
- msgstr ""
3
- "Project-Id-Version: Antispam Bee\n"
4
- "POT-Creation-Date: \n"
5
- "PO-Revision-Date: \n"
6
- "Last-Translator: Canarduck <renaud@canarduck.com>\n"
7
- "Language-Team: Sergej Müller\n"
8
- "MIME-Version: 1.0\n"
9
- "Content-Type: text/plain; charset=utf-8\n"
10
- "Content-Transfer-Encoding: 8bit\n"
11
- "X-Poedit-Language: German\n"
12
- "X-Poedit-Country: GERMANY\n"
13
- "X-Poedit-SourceCharset: utf-8\n"
14
- "X-Poedit-KeywordsList: __;_e\n"
15
- "X-Poedit-Basepath: .\n"
16
- "X-Poedit-SearchPath-0: .\n"
17
-
18
- msgid "Mark as Spam, do not delete"
19
- msgstr "Bloquer les éléments indésirables sans les supprimer"
20
-
21
- msgid "Limit on"
22
- msgstr "Applicable aux"
23
-
24
- msgid "Spam will be automatically deleted after %s days"
25
- msgstr "Purger au bout de %s jours"
26
-
27
- msgid "Send an admin email when new spam item incoming"
28
- msgstr "Avertir l'administrateur par email dès l'arrivée de nouveaux éléments"
29
-
30
- msgid "Do not check trackbacks / pingbacks"
31
- msgstr "Ne vérifier ni les pings ni les rétroliens"
32
-
33
- msgid "Hide the &quot;MARKED AS SPAM&quot; note"
34
- msgstr "Masquer le label &quot;indésirable&quot;"
35
-
36
- msgid "Display blocked comments count on the dashboard"
37
- msgstr "Afficher le nombre d'éléments bloqués sur le tableau de bord"
38
-
39
- msgid "Display statistics on the dashboard"
40
- msgstr "Afficher les statistiques sur le tableau de bord"
41
-
42
- msgid "Comments are also used outside of posts and pages"
43
- msgstr "Les commentaires sont aussi utilisés en dehors des articles et des pages"
44
-
45
- msgid "Enable stricter inspection for incomming comments"
46
- msgstr "Activer le filtrage avancé des commentaires"
47
-
48
- msgid "Do not check if the comment author has already approved"
49
- msgstr "Faire confiance aux utilisateurs ayant déjà des commentaires approuvés."
50
-
51
- msgid "Comment marked as spam"
52
- msgstr "Labellisé indésirable"
53
-
54
- msgid "New spam comment on your post"
55
- msgstr "Nouveau commentaire indésirable sur votre article"
56
-
57
- msgid "Block comments and pings from specific countries"
58
- msgstr "Bloquer les commentaires et les pings en provenance de certains pays"
59
-
60
- msgid "Search comment spammers in the Project Honey Pot"
61
- msgstr "Utiliser la base de données de spammeurs du \"Projet Pot de Miel\""
62
-
63
- msgid "Consider comments which are already marked as spam"
64
- msgstr "Prendre en compte les commentaires déjà marqués indésirables"
65
-
66
- msgid "Allow comments only in certain language"
67
- msgstr "N'autoriser que les commentaires rédigés dans une lanque"
68
-
69
- msgid "Language"
70
- msgstr "Langue"
71
-
72
- msgid "English"
73
- msgstr "Anglais"
74
-
75
- msgid "German"
76
- msgstr "Allemand"
77
-
78
- msgid "get free"
79
- msgstr "En obtenir une gratuitement"
80
-
81
- msgid "Spam Reason"
82
- msgstr "Raison du blocage"
83
-
84
- msgid "Empty Data"
85
- msgstr "Champ vide"
86
-
87
- msgid "CSS Hack"
88
- msgstr "Hack CSS"
89
-
90
- msgid "Server IP"
91
- msgstr "IP du serveur"
92
-
93
- msgid "Spam IP"
94
- msgstr "IP du spammeur"
95
-
96
- msgid "Comment Language"
97
- msgstr "Commentaire rédigé en"
98
-
99
- msgid "Country Check"
100
- msgstr "Vérfication du pays"
101
-
102
- msgid "Honey Pot"
103
- msgstr "Pot de miel"
104
-
105
- msgid "Blacklist"
106
- msgstr "Liste noire"
107
-
108
- msgid "Whitelist"
109
- msgstr "Liste blanche"
110
-
111
- msgid "iso codes"
112
- msgstr "Codes ISO"
113
-
114
- msgid "Approve it"
115
- msgstr "Approuver"
116
-
117
- msgid "Delete it"
118
- msgstr "Supprimer"
119
-
120
- msgid "Trash it"
121
- msgstr "Corbeille"
122
-
123
- msgid "Spam list"
124
- msgstr "Liste des indésirables"
125
-
126
- msgid "Notify message by Antispam Bee"
127
- msgstr "Notification Antispam Bee"
128
-
129
- msgid "Content removed by Antispam Bee"
130
- msgstr "Texte effacé par Antispam Bee"
131
-
132
- msgid "or"
133
- msgstr "ou"
134
-
135
- msgid "Last check"
136
- msgstr "Dernière vérification"
137
-
138
- msgid "About"
139
- msgstr "À propos"
140
-
141
- msgid "requires at least WordPress 2.8"
142
- msgstr "Nécessite une version de WordPress suppérieure à 2.8"
143
-
144
- msgid "Blocked"
145
- msgstr "Bloqué"
146
-
147
- msgid "Learn about wpSEO"
148
- msgstr "Découvrir wpSEO"
149
-
150
- msgid "http://www.wpseo.org"
151
- msgstr "http://www.wpseo.org"
152
-
153
- msgid "Follow on Twitter"
154
- msgstr "Suivre sur Twitter"
155
-
156
- msgid "by"
157
- msgstr "par"
158
-
159
- #, fuzzy
160
- msgid "ago"
161
- msgstr ""
162
-
163
- msgid "Today"
164
- msgstr "Aujourd'hui"
165
-
166
- msgid "Easy and extremely productive spam-fighting plugin with many sophisticated solutions. Includes protection again trackback spam."
167
- msgstr "Une plugin anti-spam simple et excessivement efficace intégrant des méthodes sophistiquées. Protège aussi contre les spams de rétroliens"
168
-
169
- msgid "http://antispambee.com"
170
- msgstr "http://antispambee.com"
171
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lang/antispam_bee-hu-HU.mo DELETED
Binary file
lang/antispam_bee-hu-HU.po DELETED
@@ -1,137 +0,0 @@
1
- msgid ""
2
- msgstr ""
3
- "Project-Id-Version: Antispam Bee\n"
4
- "POT-Creation-Date: \n"
5
- "PO-Revision-Date: \n"
6
- "Last-Translator: Feriman <info@feriman.com>\n"
7
- "Language-Team: Sergej Müller\n"
8
- "MIME-Version: 1.0\n"
9
- "Content-Type: text/plain; charset=utf-8\n"
10
- "Content-Transfer-Encoding: 8bit\n"
11
- "X-Poedit-Language: German\n"
12
- "X-Poedit-Country: GERMANY\n"
13
- "X-Poedit-SourceCharset: utf-8\n"
14
- "X-Poedit-KeywordsList: __;_e\n"
15
- "X-Poedit-Basepath: .\n"
16
- "X-Poedit-SearchPath-0: .\n"
17
-
18
- msgid "Mark as Spam, do not delete"
19
- msgstr "Spamnal jelölés, ne töröld"
20
-
21
- msgid "Limit on"
22
- msgstr "Korlátozás"
23
-
24
- msgid "Spam will be automatically deleted after %s days"
25
- msgstr "Spamnak jelölés automatikusan, majd törlés % nap után."
26
-
27
- msgid "Send an admin email when new spam item incoming"
28
- msgstr "Email küldése az admin címre, ha új spam érkezik"
29
-
30
- msgid "Do not check trackbacks / pingbacks"
31
- msgstr "Ne ellenőrizd a track- és pingbackot"
32
-
33
- msgid "Hide the &quot;MARKED AS SPAM&quot; note"
34
- msgstr "Rejtsd el a &quot;SPAMNAK JELÖLT&quot; szöveget"
35
-
36
- msgid "Display blocked comments count on the dashboard"
37
- msgstr "Jelenítsd meg a blokkolt kommenteket a Vezérlőpulton"
38
-
39
- msgid "Comments are also used outside of posts and pages"
40
- msgstr "Használd a kommenetket a bejegyzéseken és az oldalakon kívül is"
41
-
42
- msgid "Enable stricter inspection for incomming comments"
43
- msgstr "Szigorúbb komment ellenőrzések bekapcsolása"
44
-
45
- msgid "Do not check if the comment author has already approved"
46
- msgstr "Ne ellenőrizd, ami már jóvá van hagyva"
47
-
48
- msgid "Comment marked as spam"
49
- msgstr "Spamnak jelölés"
50
-
51
- msgid "New spam comment on your post"
52
- msgstr "Új spam komment a bejegyzésedben"
53
-
54
- msgid "Block comments and pings from specific countries"
55
- msgstr "Blokkold a hozzászólásokat az alábbi országokból"
56
-
57
- msgid "Search comment spammers in the Project Honey Pot"
58
- msgstr "Keresd a komment spammelőket a Project Honey Pot-ban"
59
-
60
- msgid "get free"
61
- msgstr "ingyenes"
62
-
63
- msgid "Spam Reason"
64
- msgstr "Spam oka"
65
-
66
- msgid "Empty Data"
67
- msgstr "Üres adat"
68
-
69
- msgid "CSS Hack"
70
- msgstr "CSS módosítás"
71
-
72
- msgid "Server IP"
73
- msgstr "Szerver IP"
74
-
75
- msgid "Country Check"
76
- msgstr "Ország ellenőrzése"
77
-
78
- msgid "Honey Pot"
79
- msgstr "Honey Pot"
80
-
81
- msgid "Blacklist"
82
- msgstr "Feketelista"
83
-
84
- msgid "Whitelist"
85
- msgstr "Fehérlista"
86
-
87
- msgid "iso codes"
88
- msgstr "ISO kódok"
89
-
90
- msgid "IP Locator"
91
- msgstr "IP Lokátor"
92
-
93
- msgid "Approve it"
94
- msgstr "Jóváhagy"
95
-
96
- msgid "Delete it"
97
- msgstr "Töröld"
98
-
99
- msgid "Trash it"
100
- msgstr "Kukába"
101
-
102
- msgid "Spam list"
103
- msgstr "Spam lista"
104
-
105
- msgid "Notify message by Antispam Bee"
106
- msgstr "Értesítés a Antispam Bee-nek"
107
-
108
- msgid "http://antispambee.com"
109
- msgstr "http://antispambee.com"
110
-
111
- msgid "or"
112
- msgstr "vagy"
113
-
114
- msgid "Last check"
115
- msgstr "Utolsó ellenőrzés"
116
-
117
- msgid "About"
118
- msgstr "Információ"
119
-
120
- msgid "requires at least WordPress 2.7"
121
- msgstr "Ajánlott WordPress 2.7 vagy újabb"
122
-
123
- msgid "Blocked"
124
- msgstr "Blokkolt"
125
-
126
- msgid "Learn about wpSEO"
127
- msgstr "Tudj meg többet: wpSEO"
128
-
129
- msgid "Follow on Twitter"
130
- msgstr "Kövess Twitteren"
131
-
132
- msgid "by"
133
- msgstr "által"
134
-
135
- msgid "Easy and extremely productive spam-fighting plugin with many sophisticated solutions. Includes protection again trackback spam."
136
- msgstr "Könnyű és rendkívül hatékony spamszűrő plugin sok kifinomult megoldással. Magában foglalja a trackback védelmet is."
137
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lang/antispam_bee-it_IT.mo DELETED
Binary file
lang/antispam_bee-it_IT.po DELETED
@@ -1,41 +0,0 @@
1
- msgid ""
2
- msgstr ""
3
- "Project-Id-Version: Antispam Bee\n"
4
- "POT-Creation-Date: \n"
5
- "PO-Revision-Date: \n"
6
- "Last-Translator: Sergej Müller\n"
7
- "Language-Team: Sergej Müller\n"
8
- "MIME-Version: 1.0\n"
9
- "Content-Type: text/plain; charset=utf-8\n"
10
- "Content-Transfer-Encoding: 8bit\n"
11
- "X-Poedit-Language: Italian\n"
12
- "X-Poedit-Country: ITALY\n"
13
- "X-Poedit-SourceCharset: utf-8\n"
14
- "X-Poedit-KeywordsList: __;_e\n"
15
- "X-Poedit-Basepath: .\n"
16
- "X-Poedit-SearchPath-0: .\n"
17
-
18
- msgid "Mark as Spam, do not delete"
19
- msgstr "Segnala come Spam, non eliminare"
20
-
21
- msgid "Limit on"
22
- msgstr "Limit on"
23
-
24
- msgid "Spam will be automatically deleted after %s days"
25
- msgstr "I messaggi contrassegnati come spam verranno cancellati automaticamente dopo %s giorni"
26
-
27
- msgid "Do not check trackbacks / pingbacks"
28
- msgstr "Non controllare i trackback / pingback"
29
-
30
- msgid "Hide the &quot;MARKED FOR SPAM&quot; note"
31
- msgstr "Nascondi la nota &quot;MARKED FOR SPAM&quot;"
32
-
33
- msgid "Last check"
34
- msgstr "Ultimo"
35
-
36
- msgid "About"
37
- msgstr "Info"
38
-
39
- msgid "requires at least WordPress 2.7"
40
- msgstr "requires at least WordPress 2.7"
41
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lang/antispam_bee-pl_PL.mo DELETED
Binary file
lang/antispam_bee-pl_PL.po DELETED
@@ -1,232 +0,0 @@
1
- msgid ""
2
- msgstr ""
3
- "Project-Id-Version: Antispam Bee v1.7\n"
4
- "Report-Msgid-Bugs-To: \n"
5
- "POT-Creation-Date: \n"
6
- "PO-Revision-Date: 2010-06-09 10:34+0100\n"
7
- "Last-Translator: LeXuS <lexus@intrakardial.de>\n"
8
- "Language-Team: LeXuS <lexus@intrakardial.de>\n"
9
- "MIME-Version: 1.0\n"
10
- "Content-Type: text/plain; charset=UTF-8\n"
11
- "Content-Transfer-Encoding: 8bit\n"
12
- "Plural-Forms: nplurals=2; plural=n != 1;\n"
13
- "X-Poedit-Language: Polish\n"
14
- "X-Poedit-Country: POLAND\n"
15
- "X-Poedit-SourceCharset: utf-8\n"
16
- "X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2\n"
17
- "X-Poedit-Basepath: ../\n"
18
- "X-Textdomain-Support: yes\n"
19
- "X-Poedit-SearchPath-0: .\n"
20
-
21
- #: antispam_bee.php:198
22
- #: antispam_bee.php:214
23
- #: antispam_bee.php:851
24
- msgid "Settings"
25
- msgstr ""
26
-
27
- #@ antispam_bee
28
- #: antispam_bee.php:409
29
- #: antispam_bee.php:419
30
- msgid "Blocked"
31
- msgstr "Zablokowane"
32
-
33
- #@ antispam_bee
34
- #: antispam_bee.php:428
35
- msgid "requires at least WordPress 2.7"
36
- msgstr "wymaga przynajmniej WordPress 2.7"
37
-
38
- #@ antispam_bee
39
- #: antispam_bee.php:436
40
- msgid "by"
41
- msgstr "przez"
42
-
43
- #@ antispam_bee
44
- #: antispam_bee.php:437
45
- msgid "Follow on Twitter"
46
- msgstr "Śledź na Twitterze"
47
-
48
- #@ antispam_bee
49
- #: antispam_bee.php:439
50
- msgid "Learn about wpSEO"
51
- msgstr "Dowiedz się więcej o wpSEO"
52
-
53
- #@ antispam_bee
54
- #: antispam_bee.php:683
55
- msgid "Comment marked as spam"
56
- msgstr "Komentarz zaznaczony jako spam"
57
-
58
- #@ antispam_bee
59
- #: antispam_bee.php:687
60
- msgid "New spam comment on your post"
61
- msgstr "Nowy komentarz spam na twoim poście"
62
-
63
- #: antispam_bee.php:691
64
- msgid "Author"
65
- msgstr ""
66
-
67
- #: antispam_bee.php:695
68
- #, php-format
69
- msgid "%s: %s\\r\n"
70
- msgstr ""
71
-
72
- #: antispam_bee.php:696
73
- msgid "URL"
74
- msgstr ""
75
-
76
- #: antispam_bee.php:700
77
- msgid "IP Locator"
78
- msgstr ""
79
-
80
- #@ antispam_bee
81
- #: antispam_bee.php:704
82
- msgid "Spam Reason"
83
- msgstr "Powód spamu"
84
-
85
- #@ antispam_bee
86
- #: antispam_bee.php:713
87
- msgid "Trash it"
88
- msgstr "Do śmieci"
89
-
90
- #@ antispam_bee
91
- #: antispam_bee.php:719
92
- msgid "Delete it"
93
- msgstr "Usuń"
94
-
95
- #@ antispam_bee
96
- #: antispam_bee.php:725
97
- msgid "Approve it"
98
- msgstr "Zaakceptuj"
99
-
100
- #@ antispam_bee
101
- #: antispam_bee.php:729
102
- msgid "Spam list"
103
- msgstr "Lista Spamu"
104
-
105
- #@ antispam_bee
106
- #: antispam_bee.php:733
107
- msgid "Notify message by Antispam Bee"
108
- msgstr "Zawiadomienie przez Antispam Bee"
109
-
110
- #@ antispam_bee
111
- #: antispam_bee.php:734
112
- msgid "http://antispambee.com"
113
- msgstr "http://antispambee.com"
114
-
115
- #: antispam_bee.php:836
116
- msgid "Settings saved."
117
- msgstr ""
118
-
119
- #@ antispam_bee
120
- #: antispam_bee.php:859
121
- msgid "Mark as Spam, do not delete"
122
- msgstr "Oznacz jako spam, nie usuwaj"
123
-
124
- #@ antispam_bee
125
- #: antispam_bee.php:865
126
- msgid "Limit on"
127
- msgstr "Ogranicz na"
128
-
129
- #: antispam_bee.php:865
130
- msgid "Comments"
131
- msgstr ""
132
-
133
- #: antispam_bee.php:865
134
- msgid "Pings"
135
- msgstr ""
136
-
137
- #@ antispam_bee
138
- #: antispam_bee.php:874
139
- #, php-format
140
- msgid "Spam will be automatically deleted after %s days"
141
- msgstr "Spam będzie automatycznie usuwany po %s dniach"
142
-
143
- #@ antispam_bee
144
- #: antispam_bee.php:878
145
- msgid "Last check"
146
- msgstr "Ostatnia kontrola"
147
-
148
- #@ antispam_bee
149
- #: antispam_bee.php:886
150
- msgid "Hide the &quot;MARKED AS SPAM&quot; note"
151
- msgstr "Ukryj &quot;ZAZNACZONE JAKO SPAM&quot; notatkę"
152
-
153
- #@ antispam_bee
154
- #: antispam_bee.php:892
155
- msgid "Send an admin email when new spam item incoming"
156
- msgstr "Wyślij do mnie e-mail o nowo przybytym spamie"
157
-
158
- #@ antispam_bee
159
- #: antispam_bee.php:901
160
- msgid "Block comments and pings from specific countries"
161
- msgstr "Blokuj komentarze i pingi z poszczególnych krajów"
162
-
163
- #@ antispam_bee
164
- #: antispam_bee.php:907
165
- msgid "Blacklist"
166
- msgstr "Czarna lista"
167
-
168
- #@ antispam_bee
169
- #: antispam_bee.php:907
170
- #: antispam_bee.php:918
171
- msgid "iso codes"
172
- msgstr "kody ISO"
173
-
174
- #@ antispam_bee
175
- #: antispam_bee.php:914
176
- msgid "or"
177
- msgstr "lub"
178
-
179
- #@ antispam_bee
180
- #: antispam_bee.php:918
181
- msgid "Whitelist"
182
- msgstr "Biała lista"
183
-
184
- #@ antispam_bee
185
- #: antispam_bee.php:928
186
- msgid "Search comment spammers in the Project Honey Pot"
187
- msgstr "Szukaj spamerów komentarzy w Project Honey Pot"
188
-
189
- #@ antispam_bee
190
- #: antispam_bee.php:934
191
- msgid "API Key"
192
- msgstr "Klucz API"
193
-
194
- #@ antispam_bee
195
- #: antispam_bee.php:934
196
- msgid "get free"
197
- msgstr "otrzymaj za darmo"
198
-
199
- #@ antispam_bee
200
- #: antispam_bee.php:943
201
- msgid "Do not check trackbacks / pingbacks"
202
- msgstr "Nie sprawdzaj Trackbacków / Pingbacków"
203
-
204
- #@ antispam_bee
205
- #: antispam_bee.php:949
206
- msgid "Display blocked comments count on the dashboard"
207
- msgstr "Wyświetl ilość zablokowanych komentarzy na tablicy informacyjnej"
208
-
209
- #@ antispam_bee
210
- #: antispam_bee.php:955
211
- msgid "Enable stricter inspection for incomming comments"
212
- msgstr "Umożliw bardziej rygorystyczną kontrolę dla przybywających komentarzy"
213
-
214
- #@ antispam_bee
215
- #: antispam_bee.php:961
216
- msgid "Do not check if the comment author has already approved"
217
- msgstr "Nie sprawdzaj, jeśli autor komentarza był już raz zaakceptowany"
218
-
219
- #@ antispam_bee
220
- #: antispam_bee.php:967
221
- msgid "Comments are also used outside of posts and pages"
222
- msgstr "Komentarze są również wykorzystywane poza postami i na innych stronach"
223
-
224
- #: antispam_bee.php:972
225
- msgid "Save Changes"
226
- msgstr ""
227
-
228
- #@ antispam_bee
229
- #: antispam_bee.php:978
230
- msgid "About"
231
- msgstr "O"
232
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lang/antispam_bee-pt_BR.mo DELETED
Binary file
lang/antispam_bee-pt_BR.po DELETED
@@ -1,124 +0,0 @@
1
- msgid ""
2
- msgstr ""
3
- "Project-Id-Version: Antispam Bee v1.5\n"
4
- "Report-Msgid-Bugs-To: \n"
5
- "POT-Creation-Date: 2010-03-12 17:59-0300\n"
6
- "PO-Revision-Date: \n"
7
- "Last-Translator: Sergej Müller\n"
8
- "Language-Team: Fernando Lopes <contato@fernandolopes.com.br>\n"
9
- "MIME-Version: 1.0\n"
10
- "Content-Type: text/plain; charset=UTF-8\n"
11
- "Content-Transfer-Encoding: 8bit\n"
12
- "X-Poedit-Language: Portuguese\n"
13
- "X-Poedit-Country: BRAZIL\n"
14
- "X-Poedit-SourceCharset: utf-8\n"
15
- "X-Poedit-KeywordsList: __;_e\n"
16
- "X-Poedit-Basepath: .\n"
17
-
18
- #: D:\www\wordpress\wp-content\plugins\antispam-bee/antispam_bee.php:172
19
- #: D:\www\wordpress\wp-content\plugins\antispam-bee/antispam_bee.php:188
20
- #: D:\www\wordpress\wp-content\plugins\antispam-bee/antispam_bee.php:622
21
- msgid "Settings"
22
- msgstr "Configurações"
23
-
24
- #: D:\www\wordpress\wp-content\plugins\antispam-bee/antispam_bee.php:350
25
- msgid "Blocked"
26
- msgstr "Bloqueado"
27
-
28
- #: D:\www\wordpress\wp-content\plugins\antispam-bee/antispam_bee.php:356
29
- msgid "requires at least WordPress 2.3"
30
- msgstr "necessita de pelo menos WordPress v2.3 "
31
-
32
- #: D:\www\wordpress\wp-content\plugins\antispam-bee/antispam_bee.php:363
33
- msgid "Plugin"
34
- msgstr "Plugin"
35
-
36
- #: D:\www\wordpress\wp-content\plugins\antispam-bee/antispam_bee.php:365
37
- msgid "Version"
38
- msgstr "Versão"
39
-
40
- #: D:\www\wordpress\wp-content\plugins\antispam-bee/antispam_bee.php:367
41
- msgid "Author"
42
- msgstr "Autor"
43
-
44
- #: D:\www\wordpress\wp-content\plugins\antispam-bee/antispam_bee.php:368
45
- msgid "Follow on Twitter"
46
- msgstr "Seguir no Twitter"
47
-
48
- #: D:\www\wordpress\wp-content\plugins\antispam-bee/antispam_bee.php:370
49
- msgid "Learn about wpSEO"
50
- msgstr "Saiba mais sobre wpSEO"
51
-
52
- #: D:\www\wordpress\wp-content\plugins\antispam-bee/antispam_bee.php:505
53
- msgid "Comment marked as spam"
54
- msgstr "Comentário marcados como spam"
55
-
56
- #: D:\www\wordpress\wp-content\plugins\antispam-bee/antispam_bee.php:510
57
- msgid "Spam list"
58
- msgstr "Lista de spam"
59
-
60
- #: D:\www\wordpress\wp-content\plugins\antispam-bee/antispam_bee.php:605
61
- msgid "Settings saved."
62
- msgstr "Configurações salvas."
63
-
64
- #: D:\www\wordpress\wp-content\plugins\antispam-bee/antispam_bee.php:630
65
- msgid "Mark as Spam, do not delete"
66
- msgstr "Marcar como Spam, mas não excluir"
67
-
68
- #: D:\www\wordpress\wp-content\plugins\antispam-bee/antispam_bee.php:637
69
- msgid "Limit on"
70
- msgstr "Limitar a"
71
-
72
- #: D:\www\wordpress\wp-content\plugins\antispam-bee/antispam_bee.php:637
73
- msgid "Comments"
74
- msgstr "Comentários"
75
-
76
- #: D:\www\wordpress\wp-content\plugins\antispam-bee/antispam_bee.php:637
77
- msgid "Pings"
78
- msgstr "Pings"
79
-
80
- #: D:\www\wordpress\wp-content\plugins\antispam-bee/antispam_bee.php:648
81
- #, php-format
82
- msgid "Spam will be automatically deleted after %s days"
83
- msgstr "Spam será automaticamente excluído após %s dias"
84
-
85
- #: D:\www\wordpress\wp-content\plugins\antispam-bee/antispam_bee.php:649
86
- msgid "Last check"
87
- msgstr "Último"
88
-
89
- #: D:\www\wordpress\wp-content\plugins\antispam-bee/antispam_bee.php:656
90
- msgid "Hide the &quot;MARKED AS SPAM&quot; note"
91
- msgstr "Ocultar a nota &quot;MARCADO COMO SPAM&quot;"
92
-
93
- #: D:\www\wordpress\wp-content\plugins\antispam-bee/antispam_bee.php:664
94
- msgid "Send an admin email when new spam item incoming"
95
- msgstr "Enviar ao administrador um email quando receber novo spam"
96
-
97
- #: D:\www\wordpress\wp-content\plugins\antispam-bee/antispam_bee.php:674
98
- msgid "Do not check trackbacks / pingbacks"
99
- msgstr "Não verificar trackbacks / pingbacks"
100
-
101
- #: D:\www\wordpress\wp-content\plugins\antispam-bee/antispam_bee.php:683
102
- msgid "Display blocked comments count on the dashboard"
103
- msgstr "Exibir contagem de comentários bloqueados no Painel"
104
-
105
- #: D:\www\wordpress\wp-content\plugins\antispam-bee/antispam_bee.php:692
106
- msgid "Enable stricter inspection for incomming comments"
107
- msgstr "Ativar inspeção rigorosa nos comentários recebidos"
108
-
109
- #: D:\www\wordpress\wp-content\plugins\antispam-bee/antispam_bee.php:700
110
- msgid "Do not check if the author has already commented and approved"
111
- msgstr "Não verificar se o autor já comentou e foi aprovado"
112
-
113
- #: D:\www\wordpress\wp-content\plugins\antispam-bee/antispam_bee.php:708
114
- msgid "Comments are also used outside of posts and pages"
115
- msgstr "Comentários também são usados fora dos posts e páginas"
116
-
117
- #: D:\www\wordpress\wp-content\plugins\antispam-bee/antispam_bee.php:714
118
- msgid "Save Changes"
119
- msgstr "Salvar Mudanças"
120
-
121
- #: D:\www\wordpress\wp-content\plugins\antispam-bee/antispam_bee.php:720
122
- msgid "About"
123
- msgstr "Sobre"
124
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lang/antispam_bee-ro_RO.mo DELETED
Binary file
lang/antispam_bee-ro_RO.po DELETED
@@ -1,281 +0,0 @@
1
- msgid ""
2
- msgstr ""
3
- "Project-Id-Version: AntispamBee for WordPress\n"
4
- "Report-Msgid-Bugs-To: \n"
5
- "POT-Creation-Date: 2010-08-16 20:53+0200\n"
6
- "PO-Revision-Date: \n"
7
- "Last-Translator: Sergej Müller\n"
8
- "Language-Team: Cipri Palamariu <cheeprey@cheeprey.ro>\n"
9
- "MIME-Version: 1.0\n"
10
- "Content-Type: text/plain; charset=UTF-8\n"
11
- "Content-Transfer-Encoding: 8bit\n"
12
- "X-Poedit-KeywordsList: __;_e\n"
13
- "X-Poedit-Basepath: .\n"
14
- "X-Poedit-Language: Romanian\n"
15
- "X-Poedit-Country: ROMANIA\n"
16
- "X-Poedit-SourceCharset: utf-8\n"
17
-
18
- #: C:\Documents
19
- #: and
20
- #: Settings\Administrator\Desktop\quotes-collection\languages\antispam-bee/antispam_bee.php:198
21
- #: Settings\Administrator\Desktop\quotes-collection\languages\antispam-bee/antispam_bee.php:214
22
- #: Settings\Administrator\Desktop\quotes-collection\languages\antispam-bee/antispam_bee.php:851
23
- msgid "Settings"
24
- msgstr "Setări"
25
-
26
- #: C:\Documents
27
- #: and
28
- #: Settings\Administrator\Desktop\quotes-collection\languages\antispam-bee/antispam_bee.php:409
29
- #: Settings\Administrator\Desktop\quotes-collection\languages\antispam-bee/antispam_bee.php:419
30
- msgid "Blocked"
31
- msgstr "Blocat"
32
-
33
- #: C:\Documents
34
- #: and
35
- #: Settings\Administrator\Desktop\quotes-collection\languages\antispam-bee/antispam_bee.php:428
36
- msgid "requires at least WordPress 2.7"
37
- msgstr "necesită WordPress 2.7 sau mai recent"
38
-
39
- #: C:\Documents
40
- #: and
41
- #: Settings\Administrator\Desktop\quotes-collection\languages\antispam-bee/antispam_bee.php:436
42
- msgid "by"
43
- msgstr "de"
44
-
45
- #: C:\Documents
46
- #: and
47
- #: Settings\Administrator\Desktop\quotes-collection\languages\antispam-bee/antispam_bee.php:437
48
- msgid "Follow on Twitter"
49
- msgstr "Urmărește pe Twitter"
50
-
51
- #: C:\Documents
52
- #: and
53
- #: Settings\Administrator\Desktop\quotes-collection\languages\antispam-bee/antispam_bee.php:439
54
- msgid "Learn about wpSEO"
55
- msgstr "Află despre wpSEO"
56
-
57
- #: C:\Documents
58
- #: and
59
- #: Settings\Administrator\Desktop\quotes-collection\languages\antispam-bee/antispam_bee.php:683
60
- msgid "Comment marked as spam"
61
- msgstr "Comentariul a fost marcat ca spam"
62
-
63
- #: C:\Documents
64
- #: and
65
- #: Settings\Administrator\Desktop\quotes-collection\languages\antispam-bee/antispam_bee.php:687
66
- msgid "New spam comment on your post"
67
- msgstr "Un nou comentariu spam la articolul tău "
68
-
69
- #: C:\Documents
70
- #: and
71
- #: Settings\Administrator\Desktop\quotes-collection\languages\antispam-bee/antispam_bee.php:691
72
- msgid "Author"
73
- msgstr "Autor"
74
-
75
- #: C:\Documents
76
- #: and
77
- #: Settings\Administrator\Desktop\quotes-collection\languages\antispam-bee/antispam_bee.php:695
78
- #, php-format
79
- msgid "%s: %s\r\n"
80
- msgstr "%s: %s\r\n"
81
-
82
- #: C:\Documents
83
- #: and
84
- #: Settings\Administrator\Desktop\quotes-collection\languages\antispam-bee/antispam_bee.php:696
85
- msgid "URL"
86
- msgstr "URL"
87
-
88
- #: C:\Documents
89
- #: and
90
- #: Settings\Administrator\Desktop\quotes-collection\languages\antispam-bee/antispam_bee.php:700
91
- msgid "IP Locator"
92
- msgstr "IP Locator"
93
-
94
- #: C:\Documents
95
- #: and
96
- #: Settings\Administrator\Desktop\quotes-collection\languages\antispam-bee/antispam_bee.php:704
97
- msgid "Spam Reason"
98
- msgstr "Motiv spam"
99
-
100
- #: C:\Documents
101
- #: and
102
- #: Settings\Administrator\Desktop\quotes-collection\languages\antispam-bee/antispam_bee.php:713
103
- msgid "Trash it"
104
- msgstr "Aruncă-l la gunoi"
105
-
106
- #: C:\Documents
107
- #: and
108
- #: Settings\Administrator\Desktop\quotes-collection\languages\antispam-bee/antispam_bee.php:719
109
- msgid "Delete it"
110
- msgstr "Șterge-l"
111
-
112
- #: C:\Documents
113
- #: and
114
- #: Settings\Administrator\Desktop\quotes-collection\languages\antispam-bee/antispam_bee.php:725
115
- msgid "Approve it"
116
- msgstr "Aprobă-l"
117
-
118
- #: C:\Documents
119
- #: and
120
- #: Settings\Administrator\Desktop\quotes-collection\languages\antispam-bee/antispam_bee.php:729
121
- msgid "Spam list"
122
- msgstr "Listă spam"
123
-
124
- #: C:\Documents
125
- #: and
126
- #: Settings\Administrator\Desktop\quotes-collection\languages\antispam-bee/antispam_bee.php:733
127
- msgid "Notify message by Antispam Bee"
128
- msgstr "Mesaj de notificare de la Antispam Bee"
129
-
130
- #: C:\Documents
131
- #: and
132
- #: Settings\Administrator\Desktop\quotes-collection\languages\antispam-bee/antispam_bee.php:734
133
- msgid "http://antispambee.com"
134
- msgstr "http://antispambee.com"
135
-
136
- #: C:\Documents
137
- #: and
138
- #: Settings\Administrator\Desktop\quotes-collection\languages\antispam-bee/antispam_bee.php:836
139
- msgid "Settings saved."
140
- msgstr "Setările au fost salvate."
141
-
142
- #: C:\Documents
143
- #: and
144
- #: Settings\Administrator\Desktop\quotes-collection\languages\antispam-bee/antispam_bee.php:859
145
- msgid "Mark as Spam, do not delete"
146
- msgstr "Marchează ca spam, dar nu șterge"
147
-
148
- #: C:\Documents
149
- #: and
150
- #: Settings\Administrator\Desktop\quotes-collection\languages\antispam-bee/antispam_bee.php:865
151
- msgid "Limit on"
152
- msgstr "Limitează la"
153
-
154
- #: C:\Documents
155
- #: and
156
- #: Settings\Administrator\Desktop\quotes-collection\languages\antispam-bee/antispam_bee.php:865
157
- msgid "Comments"
158
- msgstr "Comentarii"
159
-
160
- #: C:\Documents
161
- #: and
162
- #: Settings\Administrator\Desktop\quotes-collection\languages\antispam-bee/antispam_bee.php:865
163
- msgid "Pings"
164
- msgstr "Ping-uri"
165
-
166
- #: C:\Documents
167
- #: and
168
- #: Settings\Administrator\Desktop\quotes-collection\languages\antispam-bee/antispam_bee.php:874
169
- #, php-format
170
- msgid "Spam will be automatically deleted after %s days"
171
- msgstr "Spam-urile vor fi șterse automat după %s zile"
172
-
173
- #: C:\Documents
174
- #: and
175
- #: Settings\Administrator\Desktop\quotes-collection\languages\antispam-bee/antispam_bee.php:878
176
- msgid "Last check"
177
- msgstr "Ultima verificare"
178
-
179
- #: C:\Documents
180
- #: and
181
- #: Settings\Administrator\Desktop\quotes-collection\languages\antispam-bee/antispam_bee.php:886
182
- msgid "Hide the &quot;MARKED AS SPAM&quot; note"
183
- msgstr "Ascunde nota &quot;MARCAT CA SPAM&quot;"
184
-
185
- #: C:\Documents
186
- #: and
187
- #: Settings\Administrator\Desktop\quotes-collection\languages\antispam-bee/antispam_bee.php:892
188
- msgid "Send an admin email when new spam item incoming"
189
- msgstr "Trimite-mi un email când sosește un nou element spam"
190
-
191
- #: C:\Documents
192
- #: and
193
- #: Settings\Administrator\Desktop\quotes-collection\languages\antispam-bee/antispam_bee.php:901
194
- msgid "Block comments and pings from specific countries"
195
- msgstr "Blochează comentariile și ping-urile de la anumite țări"
196
-
197
- #: C:\Documents
198
- #: and
199
- #: Settings\Administrator\Desktop\quotes-collection\languages\antispam-bee/antispam_bee.php:907
200
- msgid "Blacklist"
201
- msgstr "Lista neagră"
202
-
203
- #: C:\Documents
204
- #: and
205
- #: Settings\Administrator\Desktop\quotes-collection\languages\antispam-bee/antispam_bee.php:907
206
- #: Settings\Administrator\Desktop\quotes-collection\languages\antispam-bee/antispam_bee.php:918
207
- msgid "iso codes"
208
- msgstr "coduri iso"
209
-
210
- #: C:\Documents
211
- #: and
212
- #: Settings\Administrator\Desktop\quotes-collection\languages\antispam-bee/antispam_bee.php:914
213
- msgid "or"
214
- msgstr "sau"
215
-
216
- #: C:\Documents
217
- #: and
218
- #: Settings\Administrator\Desktop\quotes-collection\languages\antispam-bee/antispam_bee.php:918
219
- msgid "Whitelist"
220
- msgstr "Lista albă"
221
-
222
- #: C:\Documents
223
- #: and
224
- #: Settings\Administrator\Desktop\quotes-collection\languages\antispam-bee/antispam_bee.php:928
225
- msgid "Search comment spammers in the Project Honey Pot"
226
- msgstr "Caută spammerii în Project Honey Pot"
227
-
228
- #: C:\Documents
229
- #: and
230
- #: Settings\Administrator\Desktop\quotes-collection\languages\antispam-bee/antispam_bee.php:934
231
- msgid "API Key"
232
- msgstr "Cheie API"
233
-
234
- #: C:\Documents
235
- #: and
236
- #: Settings\Administrator\Desktop\quotes-collection\languages\antispam-bee/antispam_bee.php:934
237
- msgid "get free"
238
- msgstr "obține gratuit"
239
-
240
- #: C:\Documents
241
- #: and
242
- #: Settings\Administrator\Desktop\quotes-collection\languages\antispam-bee/antispam_bee.php:943
243
- msgid "Do not check trackbacks / pingbacks"
244
- msgstr "Nu verifica trackback-uri / pingback-uri"
245
-
246
- #: C:\Documents
247
- #: and
248
- #: Settings\Administrator\Desktop\quotes-collection\languages\antispam-bee/antispam_bee.php:949
249
- msgid "Display blocked comments count on the dashboard"
250
- msgstr "Afișează numărătoarea comentariilor blocate pe panoul de control"
251
-
252
- #: C:\Documents
253
- #: and
254
- #: Settings\Administrator\Desktop\quotes-collection\languages\antispam-bee/antispam_bee.php:955
255
- msgid "Enable stricter inspection for incomming comments"
256
- msgstr "Activează o inspecție mai strictă a comentariilor"
257
-
258
- #: C:\Documents
259
- #: and
260
- #: Settings\Administrator\Desktop\quotes-collection\languages\antispam-bee/antispam_bee.php:961
261
- msgid "Do not check if the comment author has already approved"
262
- msgstr "Nu verifica dacă autorul comentariului a fost deja aprobat"
263
-
264
- #: C:\Documents
265
- #: and
266
- #: Settings\Administrator\Desktop\quotes-collection\languages\antispam-bee/antispam_bee.php:967
267
- msgid "Comments are also used outside of posts and pages"
268
- msgstr "De asemeni, comentariile sunt folosite în afara articolelor și paginilor"
269
-
270
- #: C:\Documents
271
- #: and
272
- #: Settings\Administrator\Desktop\quotes-collection\languages\antispam-bee/antispam_bee.php:972
273
- msgid "Save Changes"
274
- msgstr "Salvează schimbările"
275
-
276
- #: C:\Documents
277
- #: and
278
- #: Settings\Administrator\Desktop\quotes-collection\languages\antispam-bee/antispam_bee.php:978
279
- msgid "About"
280
- msgstr "Despre"
281
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lang/antispam_bee-ru_RU.mo CHANGED
Binary file
lang/antispam_bee-ru_RU.po CHANGED
@@ -15,6 +15,91 @@ msgstr ""
15
  "X-Poedit-Basepath: .\n"
16
  "X-Poedit-SearchPath-0: .\n"
17
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
18
  msgid "Mark as Spam, do not delete"
19
  msgstr "Отметить как спам, не удалять"
20
 
@@ -24,51 +109,80 @@ msgstr "Ограничить на"
24
  msgid "Spam will be automatically deleted after %s days"
25
  msgstr "Спам машинально удалять через %s дней"
26
 
27
- msgid "Send an admin email when new spam item incoming"
28
  msgstr "Отправить емайл при новом спаме"
29
 
30
- msgid "Do not check trackbacks / pingbacks"
31
- msgstr "Не проверять trackbacks и pingbacks"
 
 
 
32
 
33
  msgid "Hide the &quot;MARKED AS SPAM&quot; note"
34
  msgstr "Скрыть замечание &quot;MARKED AS SPAM&quot;"
35
 
36
- msgid "Display blocked comments count on the dashboard"
37
- msgstr "Заблокированный спам показать на приборной панели"
38
 
39
- msgid "Comments are also used outside of posts and pages"
40
- msgstr "Комментарии также используются вне постов и страниц"
 
41
 
42
- msgid "Enable stricter inspection for incomming comments"
43
- msgstr "Включите строгий контроль на входящие комментарии"
44
 
45
- msgid "Do not check if the author has already commented and approved"
46
- msgstr "Не проверять, если автор уже комментировал и был утвержден"
47
 
48
- msgid "Comment marked as spam"
49
- msgstr "Комментарии помечено как спам"
 
50
 
51
- msgid "Spam list"
52
- msgstr "Спам список"
53
 
54
- msgid "Last check"
55
- msgstr "Последний раз"
56
 
57
- msgid "About"
58
- msgstr "О плагине"
59
 
60
- msgid "requires at least WordPress 2.7"
61
- msgstr "нужен WordPress 2.7"
62
 
63
- msgid "Blocked"
64
- msgstr "Блокированные"
 
 
 
 
 
 
 
65
 
66
- msgid "Learn about wpSEO"
67
- msgstr "Узнать о wpSEO"
 
 
 
 
 
 
 
68
 
69
- msgid "Follow on Twitter"
70
- msgstr "Следить на Twitterе"
 
 
 
 
 
 
 
 
 
 
71
 
72
- msgid "by"
73
- msgstr "от"
74
 
15
  "X-Poedit-Basepath: .\n"
16
  "X-Poedit-SearchPath-0: .\n"
17
 
18
+ msgid "No data available."
19
+ msgstr "Нет данных."
20
+
21
+ msgid "New spam comment on your post"
22
+ msgstr "Новый спам комментарий"
23
+
24
+ msgid "Advanced"
25
+ msgstr "Расширенные"
26
+
27
+ msgid "Filter"
28
+ msgstr "Фильтры"
29
+
30
+ msgid "General"
31
+ msgstr "Общие"
32
+
33
+ msgid "Comment"
34
+ msgstr "Kомментарий"
35
+
36
+ msgid "Type"
37
+ msgstr "Tип"
38
+
39
+ msgid "Spam Reason"
40
+ msgstr "Причина спама"
41
+
42
+ msgid "Empty Data"
43
+ msgstr "Нет данных"
44
+
45
+ msgid "CSS Hack"
46
+ msgstr "CSS Hack"
47
+
48
+ msgid "Server IP"
49
+ msgstr "Server IP"
50
+
51
+ msgid "Spam IP"
52
+ msgstr "Spam IP"
53
+
54
+ msgid "Comment Language"
55
+ msgstr "Язык комментария"
56
+
57
+ msgid "Country Check"
58
+ msgstr "Проверка страны"
59
+
60
+ msgid "Honey Pot"
61
+ msgstr "Honey Pot"
62
+
63
+ msgid "as"
64
+ msgstr "как"
65
+
66
+ msgid "iso codes"
67
+ msgstr "ISO Codes"
68
+
69
+ msgid "Approve it"
70
+ msgstr "Разрешить его"
71
+
72
+ msgid "Delete it"
73
+ msgstr "Удалить его"
74
+
75
+ msgid "Trash it"
76
+ msgstr "В помойку его"
77
+
78
+ msgid "Spam list"
79
+ msgstr "Список спама"
80
+
81
+ msgid "Notify message by Antispam Bee"
82
+ msgstr "Сообщение от Antispam Bee"
83
+
84
+ msgid "Content removed by Antispam Bee"
85
+ msgstr "Содержимое удалено"
86
+
87
+ msgid "Last check"
88
+ msgstr "Последний раз"
89
+
90
+ msgid "Blocked"
91
+ msgstr "Заблокировано"
92
+
93
+ msgid "Today"
94
+ msgstr "Сегодня"
95
+
96
+ msgid "Easy and extremely productive spam-fighting plugin with many sophisticated solutions. Includes protection again trackback spam."
97
+ msgstr "Простой и очень продуктивный антиспам плагин. Включает в себя защиту от trackback спама."
98
+
99
+ msgid "http://antispambee.com"
100
+ msgstr "http://antispambee.de"
101
+
102
+ # Spam detection
103
  msgid "Mark as Spam, do not delete"
104
  msgstr "Отметить как спам, не удалять"
105
 
109
  msgid "Spam will be automatically deleted after %s days"
110
  msgstr "Спам машинально удалять через %s дней"
111
 
112
+ msgid "Notification by email"
113
  msgstr "Отправить емайл при новом спаме"
114
 
115
+ msgid "Delete comments by spam reasons"
116
+ msgstr "Удаление спама в комментариях по причинам"
117
+
118
+ msgid "Multiple choice or deselection by pressing Ctrl/CMD"
119
+ msgstr "Выбор или отменa нажав клавиши Strg/CMD"
120
 
121
  msgid "Hide the &quot;MARKED AS SPAM&quot; note"
122
  msgstr "Скрыть замечание &quot;MARKED AS SPAM&quot;"
123
 
124
+ msgid "Comment marked as spam"
125
+ msgstr "Kомментарий помечен как спам"
126
 
127
+ # Block countries
128
+ msgid "Block comments and pings from specific countries"
129
+ msgstr "Банить или разрешать страны"
130
 
131
+ msgid "Blacklist"
132
+ msgstr "Черный список"
133
 
134
+ msgid "Whitelist"
135
+ msgstr "Белый список"
136
 
137
+ # Project Honey Pot
138
+ msgid "Search comment spammers in the Project Honey Pot"
139
+ msgstr "Поиск спамеров в Project Honey Pot"
140
 
141
+ msgid "English"
142
+ msgstr "Английский"
143
 
144
+ msgid "German"
145
+ msgstr "Немецкий"
146
 
147
+ msgid "French"
148
+ msgstr "Французский"
149
 
150
+ msgid "Italian"
151
+ msgstr "Итальянский"
152
 
153
+ msgid "Spanish"
154
+ msgstr "Испанский"
155
+
156
+ # Translate API
157
+ msgid "Allow comments only in certain language"
158
+ msgstr "Разрешить комментарии только в одном языке"
159
+
160
+ msgid "Language"
161
+ msgstr "Язык"
162
 
163
+ # Extended
164
+ msgid "Stricter inspection for comments and pings"
165
+ msgstr "Строгий контроль на входящие комментарии"
166
+
167
+ msgid "Consider comments which are already marked as spam"
168
+ msgstr "Учитывать сpам из базы данных"
169
+
170
+ msgid "Do not check if the comment author has already approved"
171
+ msgstr "Не проверять, если автор уже комментировал и был утвержден"
172
 
173
+ # Misc
174
+ msgid "Spam counter on the dashboard"
175
+ msgstr "Заблокированный спам показать на панели инструментов"
176
+
177
+ msgid "Statistics on the dashboard"
178
+ msgstr "Статистикa на панели инструментов"
179
+
180
+ msgid "Do not check trackbacks / pingbacks"
181
+ msgstr "Не проверять trackbacks и pingbacks"
182
+
183
+ msgid "Comment form used outside of posts"
184
+ msgstr "Комментарии также используются вне постов и страниц"
185
 
186
+ msgid "Antispam Bee requires WordPress 3.3 and PHP 5.1.2"
187
+ msgstr "Antispam Bee требуется WordPress 3.3 и PHP 5.1.2"
188
 
lang/antispam_bee-tr_TR.mo DELETED
Binary file
lang/antispam_bee-tr_TR.po DELETED
@@ -1,41 +0,0 @@
1
- msgid ""
2
- msgstr ""
3
- "Project-Id-Version: Antispam Bee\n"
4
- "POT-Creation-Date: \n"
5
- "PO-Revision-Date: \n"
6
- "Last-Translator: Sergej Müller\n"
7
- "Language-Team: Sergej Müller\n"
8
- "MIME-Version: 1.0\n"
9
- "Content-Type: text/plain; charset=utf-8\n"
10
- "Content-Transfer-Encoding: 8bit\n"
11
- "X-Poedit-Language: Turkish\n"
12
- "X-Poedit-Country: TURKEY\n"
13
- "X-Poedit-SourceCharset: utf-8\n"
14
- "X-Poedit-KeywordsList: __;_e\n"
15
- "X-Poedit-Basepath: .\n"
16
- "X-Poedit-SearchPath-0: .\n"
17
-
18
- msgid "Mark as Spam, do not delete"
19
- msgstr "Spam olarak işaretle, silme"
20
-
21
- msgid "Limit on"
22
- msgstr "Limit on"
23
-
24
- msgid "Spam will be automatically deleted after %s days"
25
- msgstr "Spami %s gün sonra otomatikmen sil"
26
-
27
- msgid "Do not check trackbacks / pingbacks"
28
- msgstr "Track- ve Pingbackleri kontrol etme"
29
-
30
- msgid "Hide the &quot;MARKED AS SPAM&quot; note"
31
- msgstr "&quot;MARKED AS SPAM&quot; işaretini gösterme"
32
-
33
- msgid "Last"
34
- msgstr "en son"
35
-
36
- msgid "About"
37
- msgstr "bilgi"
38
-
39
- msgid "requires at least WordPress 2.7"
40
- msgstr "requires at least WordPress 2.7"
41
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lang/antispam_bee-zh_CN.mo DELETED
Binary file
lang/antispam_bee-zh_CN.po DELETED
@@ -1,85 +0,0 @@
1
- msgid ""
2
- msgstr ""
3
- "Project-Id-Version: Antispam Bee\n"
4
- "Report-Msgid-Bugs-To: \n"
5
- "POT-Creation-Date: 2009-07-13 13:18+0800\n"
6
- "PO-Revision-Date: \n"
7
- "Last-Translator: Sergej Müller\n"
8
- "Language-Team: Donald\n"
9
- "MIME-Version: 1.0\n"
10
- "Content-Type: text/plain; charset=UTF-8\n"
11
- "Content-Transfer-Encoding: 8bit\n"
12
- "X-Poedit-Language: Simplified Chinese\n"
13
- "X-Poedit-Country: CHINA\n"
14
- "X-Poedit-SourceCharset: utf-8\n"
15
- "X-Poedit-KeywordsList: __;_e\n"
16
- "X-Poedit-Basepath: .\n"
17
- "X-Poedit-SearchPath-0: .\n"
18
-
19
- #: antispam_bee.php:137
20
- #: antispam_bee.php:153
21
- #: antispam_bee.php:352
22
- msgid "Settings"
23
- msgstr "设置"
24
-
25
- #: antispam_bee.php:254
26
- msgid "requires at least WordPress 2.7"
27
- msgstr "需要至少WordPres 2.7 或更新版本"
28
-
29
- #: antispam_bee.php:261
30
- msgid "Plugin"
31
- msgstr "插件"
32
-
33
- #: antispam_bee.php:263
34
- msgid "Version"
35
- msgstr "版本"
36
-
37
- #: antispam_bee.php:265
38
- msgid "Author"
39
- msgstr "作者"
40
-
41
- #: antispam_bee.php:335
42
- msgid "Settings saved."
43
- msgstr "设置已保存。"
44
-
45
- #: antispam_bee.php:360
46
- msgid "Mark as Spam, do not delete"
47
- msgstr "标记垃圾评论,但并不删除"
48
-
49
- #: antispam_bee.php:367
50
- msgid "Limit on"
51
- msgstr "限制用于"
52
-
53
- #: antispam_bee.php:367
54
- msgid "Comments"
55
- msgstr "评论"
56
-
57
- #: antispam_bee.php:367
58
- msgid "Pings"
59
- msgstr "Ping"
60
-
61
- #: antispam_bee.php:378
62
- #, php-format
63
- msgid "Spam will be automatically deleted after %s days"
64
- msgstr "垃圾评论会在 %s 天后自动删除"
65
-
66
- #: antispam_bee.php:379
67
- msgid "Last check"
68
- msgstr "最新一次执行于"
69
-
70
- #: antispam_bee.php:386
71
- msgid "Hide the &quot;MARKED AS SPAM&quot; note"
72
- msgstr "隐藏自动标记到垃圾评论上的 &quot;MARKED AS SPAM&quot; 标识"
73
-
74
- #: antispam_bee.php:396
75
- msgid "Do not check trackbacks / pingbacks"
76
- msgstr "不检查 trackback / pingback"
77
-
78
- #: antispam_bee.php:402
79
- msgid "Save Changes"
80
- msgstr "保存修改"
81
-
82
- #: antispam_bee.php:408
83
- msgid "About"
84
- msgstr "关于"
85
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
readme.txt CHANGED
@@ -1,56 +1,91 @@
1
  === Antispam Bee ===
2
  Contributors: sergej.mueller
3
- Tags: antispam, spam, comments, akismet, trackback, pings, protect
4
- Requires at least: 2.8
5
- Tested up to: 3.3
 
6
  Stable tag: trunk
7
 
8
- Antispam Bee - The easy and effective Antispam Plugin for WordPress.
 
 
 
9
 
10
 
11
  == Description ==
12
- = Easy and effective Antispam Plugin =
13
- Protects your blog from spam by replacing the comment field. It's easy to use and extremely effective. Really!
14
 
 
 
15
 
16
- = At a Glance =
 
 
 
 
 
 
 
 
 
 
 
17
  * Allow comments only in certain language
18
- * Consider comments which are already marked as spam
19
- * Dashboard History Stats
20
- * Block comments and pings from specific countries
21
- * WordPress 3.x ready: Design as well as technical
22
- * Optional strict check for incomming comments
23
  * Email notifications about new spam comments
24
- * Trackback and pingback check
25
- * Spam counter on dashboard
26
  * Quick & Dirty: activate, set settings, done!
27
- * Spam may be marked or deleted immediately
28
- * Automatically cleanup the spam folder
29
- * Saves no data in the database
30
- * Accordingly no outgoing connection
31
- * Very, very fast execution
32
- * No need to adjust any templates
33
- * Clean up after uninstall the plugin
34
- * Anonymous and independent
35
-
36
- = Antispam Bee counter =
37
- `
38
- <?php do_action('antispam_bee_count') ?> spam comments blocked by
39
- <a href="http://antispambee.com">Antispam Bee</a>
40
- `
41
- Please adjust the text accordingly.
42
-
43
- = Related Links =
44
- * [Blog](http://playground.ebiene.de "Playground Blog")
45
- * [Flattr](http://flattr.com/profile/sergej.mueller "Flattr")
46
  * [Google+](https://plus.google.com/110569673423509816572 "Google+")
 
47
  * [Portfolio](http://ebiene.de "Portfolio")
48
- * [Plugin page](http://antispambee.com "AntispamBee.com")
49
- * [Other plugins](http://wpcoder.de "Other plugins")
50
- * [Documentation](http://playground.ebiene.de/1137/antispam-bee-wordpress-plugin/ "Antispam für WordPress")
51
 
52
 
53
  == Changelog ==
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
54
  = 2.2 =
55
  * Interactive Dashboard Stats
56
 
@@ -132,16 +167,7 @@ Please adjust the text accordingly.
132
  * Trackback and Pingback spam protection
133
 
134
 
135
- == Screenshots ==
136
-
137
- 1. Antispam Bee settings
138
 
 
139
 
140
- == Installation ==
141
- 1. Download *Antispam Bee* plugin
142
- 1. Unzip the archive
143
- 1. Upload the folder *antispam_bee* into *../wp-content/plugins/*
144
- 1. Go to tab *Plugins*
145
- 1. Activate *Antispam Bee*
146
- 1. Edit settings
147
- 1. Ready
1
  === Antispam Bee ===
2
  Contributors: sergej.mueller
3
+ Tags: antispam, spam, comments, trackback
4
+ Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=5RDDW9FEHGLG6
5
+ Requires at least: 3.3
6
+ Tested up to: 3.4
7
  Stable tag: trunk
8
 
9
+
10
+
11
+ Anonymous and independent antispam solution. Detect comment and trackback spam. Includes statistics and notifications.
12
+
13
 
14
 
15
  == Description ==
 
 
16
 
17
+ = Kill spam =
18
+ Antispam Bee is simple to use, has many options and filters. Does not store data on remote servers. Really.
19
 
20
+ = Features =
21
+ * Very fast execution
22
+ * Spam counter on dashboard
23
+ * Anonymous and confidential
24
+ * Trackback and pingback check
25
+ * Saves no data on remote servers
26
+ * No need to adjust any templates
27
+ * Cleaning up after plugin removal
28
+ * Support for the Project Honey Pot
29
+ * Accordingly no outgoing connection
30
+ * Interactive statistics on dashboard
31
+ * Automatically cleanup the spam folder
32
  * Allow comments only in certain language
33
+ * Spam may be marked or deleted immediately
 
 
 
 
34
  * Email notifications about new spam comments
 
 
35
  * Quick & Dirty: activate, set settings, done!
36
+ * Optional strict check for incomming comments
37
+ * Block comments and pings from specific countries
38
+ * WordPress 3.x ready: Design as well as technical
39
+ * Consider comments which are already marked as spam
40
+
41
+ = Counter =
42
+ `<?php do_action('antispam_bee_count') ?> spam comments blocked by
43
+ <a href="http://antispambee.com">Antispam Bee</a>`
44
+
45
+ = Requirements =
46
+ * PHP 5.1.2
47
+ * WordPress 3.3
48
+
49
+ = Documentation =
50
+ * [Antispam Bee: Antispam für WordPress](http://playground.ebiene.de/antispam-bee-wordpress-plugin/ "Antispam für WordPress") (DE)
51
+
52
+ = Author =
 
 
53
  * [Google+](https://plus.google.com/110569673423509816572 "Google+")
54
+ * [Plugins](http://wpcoder.de "Plugins")
55
  * [Portfolio](http://ebiene.de "Portfolio")
56
+
 
 
57
 
58
 
59
  == Changelog ==
60
+
61
+ = 2.4.3 =
62
+ * Check for basic requirements
63
+ * Remove the sidebar plugin icon
64
+ * Set the Google API calls to SSL
65
+ * Compatibility with WordPress 3.4
66
+ * Add retina plugin icon on options
67
+ * Depending on WordPress settings: anonymous comments allowed
68
+
69
+ = 2.4.2 =
70
+ * New geo ip location service (without the api key)
71
+ * Code cleanup: Replacement of `@` characters by a function
72
+ * JS-Fallback for missing jQuery UI
73
+
74
+ = 2.4.1 =
75
+ * Add russian translation
76
+ * Fix for the textarea replace
77
+ * Detect and hide admin notices
78
+
79
+ = 2.4 =
80
+ * Support for IPv6
81
+ * Source code revision
82
+ * Delete spam by reason
83
+ * Changing the user interface
84
+ * Requirements: PHP 5.1.2 and WordPress 3.3
85
+
86
+ = 2.3 =
87
+ * Xmas Edition
88
+
89
  = 2.2 =
90
  * Interactive Dashboard Stats
91
 
167
  * Trackback and Pingback spam protection
168
 
169
 
 
 
 
170
 
171
+ == Screenshots ==
172
 
173
+ 1. Antispam Bee settings
 
 
 
 
 
 
 
screenshot-1.png CHANGED
Binary file
uninstall.php DELETED
@@ -1,6 +0,0 @@
1
- <?php
2
- /* Remove settings */
3
- delete_option('antispam_bee');
4
-
5
- /* Clean DB */
6
- $GLOBALS['wpdb']->query("OPTIMIZE TABLE `" .$GLOBALS['wpdb']->options. "`");