AntiVirus - Version 1.3.5

Version Description

  • Deutsch: Optimierungen fr WordPress 3.8
  • English: Optimizations for WordPress 3.8
Download this release

Release Info

Developer sergej.mueller
Plugin Icon 128x128 AntiVirus
Version 1.3.5
Comparing to
See all releases

Code changes from version 1.3.2 to 1.3.5

antivirus.php CHANGED
@@ -5,17 +5,15 @@ Text Domain: antivirus
5
  Domain Path: /lang
6
  Description: Security solution as a smart, effectively plugin to protect your blog against exploits and spam injections.
7
  Author: Sergej Müller
8
- Author URI: http://wpseo.de
9
  Plugin URI: http://wpantivirus.com
10
- Version: 1.3.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
 
@@ -32,20 +30,33 @@ class AntiVirus {
32
  private static $base;
33
 
34
 
 
 
 
 
 
 
 
 
 
 
 
 
 
35
  /**
36
  * Konstruktor der Klasse
37
  *
38
  * @since 0.1
39
- * @change 1.2
40
  */
41
 
42
- public static function init()
43
  {
44
  /* AUTOSAVE */
45
- if ( (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) or (defined('XMLRPC_REQUEST') && XMLRPC_REQUEST) ) {
46
  return;
47
  }
48
-
49
  /* Plugin-Base */
50
  self::$base = plugin_basename(__FILE__);
51
 
@@ -55,7 +66,7 @@ class AntiVirus {
55
  'antivirus_daily_cronjob',
56
  array(
57
  __CLASS__,
58
- 'exe_daily_cronjob'
59
  )
60
  );
61
 
@@ -89,64 +100,35 @@ class AntiVirus {
89
  )
90
  );
91
  add_action(
92
- 'admin_bar_menu',
93
  array(
94
  __CLASS__,
95
- 'add_adminbar_menu'
96
- ),
97
- 91
98
  );
99
  add_action(
100
- 'admin_notices',
101
  array(
102
  __CLASS__,
103
- 'show_dashboard_notice'
104
  )
105
  );
106
- add_action(
107
- 'admin_print_styles',
108
  array(
109
  __CLASS__,
110
- 'add_enqueue_style'
 
 
 
 
 
 
 
 
 
111
  )
112
  );
113
-
114
- /* GUI */
115
- if ( self::is_current_page('home') ) {
116
- add_action(
117
- 'admin_print_scripts',
118
- array(
119
- __CLASS__,
120
- 'add_enqueue_script'
121
- )
122
- );
123
-
124
- /* Plugins */
125
- } else if ( self::is_current_page('plugins') ) {
126
- add_action(
127
- 'deactivate_' .self::$base,
128
- array(
129
- __CLASS__,
130
- 'clear_scheduled_hook'
131
- )
132
- );
133
- add_filter(
134
- 'plugin_row_meta',
135
- array(
136
- __CLASS__,
137
- 'init_row_meta'
138
- ),
139
- 10,
140
- 2
141
- );
142
- add_filter(
143
- 'plugin_action_links_' .self::$base,
144
- array(
145
- __CLASS__,
146
- 'init_action_links'
147
- )
148
- );
149
- }
150
  }
151
  }
152
  }
@@ -167,19 +149,22 @@ class AntiVirus {
167
  'antivirus/lang'
168
  );
169
  }
170
-
171
-
172
  /**
173
  * Hinzufügen der Action-Links (Einstellungen links)
174
  *
175
  * @since 1.1
176
- * @change 1.1
 
 
 
177
  */
178
 
179
  public static function init_action_links($data)
180
  {
181
  /* Rechte? */
182
- if ( !current_user_can('manage_options') ) {
183
  return $data;
184
  }
185
 
@@ -202,35 +187,29 @@ class AntiVirus {
202
 
203
 
204
  /**
205
- * Links in der Plugins-Verwaltung
206
  *
207
  * @since 0.1
208
- * @change 1.1
209
  *
210
- * @param array $links Array mit Links
211
- * @param string $file Name des Plugins
212
- * @return array $links Array mit erweitertem Link
213
  */
214
-
215
  public static function init_row_meta($data, $page)
216
  {
217
- if ( $page == self::$base ) {
218
- $data = array_merge(
219
- $data,
220
- array(
221
- sprintf(
222
- '<a href="https://flattr.com/thing/58179/Sicherheit-in-WordPress-Das-erste-AntiVirus-Plugin-fur-WordPress" target="_blank">%s</a>',
223
- esc_html__('Flattr plugin', 'antivirus')
224
- ),
225
- sprintf(
226
- '<a href="https://plus.google.com/110569673423509816572" target="_blank">%s</a>',
227
- esc_html__('Follow on Google+', 'antivirus')
228
- )
229
- )
230
- );
231
  }
232
 
233
- return $data;
 
 
 
 
 
 
234
  }
235
 
236
 
@@ -238,7 +217,7 @@ class AntiVirus {
238
  * Aktion bei Aktivierung des Plugins
239
  *
240
  * @since 0.1
241
- * @change 0.8
242
  */
243
 
244
  public static function install()
@@ -252,29 +231,35 @@ class AntiVirus {
252
  );
253
 
254
  /* Cron aktivieren */
255
- if ( self::get_option('cronjob_enable') ) {
256
- self::init_scheduled_hook();
257
  }
258
  }
259
-
260
-
 
 
 
 
 
 
 
 
 
 
 
 
 
261
  /**
262
  * Uninstallation des Plugins pro MU-Blog
263
  *
264
  * @since 1.1
265
- * @change 1.1
266
  */
267
 
268
  public static function uninstall()
269
  {
270
- /* Global */
271
- global $wpdb;
272
-
273
- /* Remove settings */
274
  delete_option('antivirus');
275
-
276
- /* Clean DB */
277
- $wpdb->query("OPTIMIZE TABLE `" .$wpdb->options. "`");
278
  }
279
 
280
 
@@ -282,23 +267,26 @@ class AntiVirus {
282
  * Rückgabe eines Optionsfeldes
283
  *
284
  * @since 0.1
285
- * @change 0.8
286
  *
287
- * @param string $field Name des Feldes
288
- * @return mixed Wert des Feldes
289
  */
290
 
291
- private static function get_option($field)
292
  {
293
- if ( !$options = wp_cache_get('antivirus') ) {
294
- $options = get_option('antivirus');
295
- wp_cache_set(
296
- 'antivirus',
297
- $options
298
- );
299
- }
 
 
 
300
 
301
- return @$options[$field];
302
  }
303
 
304
 
@@ -306,15 +294,15 @@ class AntiVirus {
306
  * Aktualisiert ein Optionsfeld
307
  *
308
  * @since 0.1
309
- * @change 0.8
310
  *
311
  * @param string $field Name des Feldes
312
  * @param mixed Wert des Feldes
313
  */
314
 
315
- private static function update_option($field, $value)
316
  {
317
- self::update_options(
318
  array(
319
  $field => $value
320
  )
@@ -326,29 +314,19 @@ class AntiVirus {
326
  * Aktualisiert mehrere Optionsfelder
327
  *
328
  * @since 0.1
329
- * @change 0.8
330
  *
331
  * @param array $data Array mit Feldern
332
  */
333
 
334
- private static function update_options($data)
335
  {
336
- /* Option zuweisen */
337
- $options = array_merge(
338
- (array)get_option('antivirus'),
339
- $data
340
- );
341
-
342
- /* DB updaten */
343
  update_option(
344
  'antivirus',
345
- $options
346
- );
347
-
348
- /* Cache updaten */
349
- wp_cache_set(
350
- 'antivirus',
351
- $options
352
  );
353
  }
354
 
@@ -356,13 +334,13 @@ class AntiVirus {
356
  /**
357
  * Initialisierung des Cronjobs
358
  *
359
- * @since 0.1
360
- * @change 0.8
361
  */
362
 
363
- private static function init_scheduled_hook()
364
  {
365
- if ( !wp_next_scheduled('antivirus_daily_cronjob') ) {
366
  wp_schedule_event(
367
  time(),
368
  'daily',
@@ -391,54 +369,142 @@ class AntiVirus {
391
  * Ausführung des Cronjobs
392
  *
393
  * @since 0.1
394
- * @change 1.0
395
  */
396
 
397
- public static function exe_daily_cronjob()
398
  {
399
  /* Kein Cronjob? */
400
- if ( !self::get_option('cronjob_enable') ) {
401
  return;
402
  }
403
 
404
- /* Timestamp updaten */
405
- self::update_option(
406
- 'cronjob_timestamp',
407
- time()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
408
  );
409
 
410
- /* Files prüfen */
411
- if ( self::check_theme_files() or self::check_permalink_structure() ) {
412
- /* Sprache laden */
413
- self::load_plugin_lang();
414
-
415
- /* E-Mail-Adresse */
416
- $email = sanitize_email(self::get_option('notify_email'));
417
- $email = ( (!empty($email) && is_email($email)) ? $email : get_bloginfo('admin_email') );
418
-
419
- /* Send it! */
420
- wp_mail(
421
- $email,
422
- sprintf(
423
- '[%s] %s',
424
- get_bloginfo('name'),
425
- esc_html__('Virus suspected', 'antivirus')
426
- ),
427
- sprintf(
428
- "%s\r\n%s\r\n\r\n\r\n%s\r\n%s\r\n",
429
- esc_html__('The daily antivirus scan of your blog suggests alarm.', 'antivirus'),
430
- get_bloginfo('url'),
431
- esc_html__('Notify message by AntiVirus for WordPress', 'antivirus'),
432
- esc_html__('http://wpantivirus.com', 'antivirus')
433
- )
434
- );
435
 
436
- /* Alert speichern */
437
- self::update_option(
438
- 'cronjob_alert',
439
- 1
440
- );
441
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
442
  }
443
 
444
 
@@ -446,13 +512,13 @@ class AntiVirus {
446
  * Initialisierung der GUI
447
  *
448
  * @since 0.1
449
- * @change 1.3.1
450
  */
451
 
452
  public static function add_sidebar_menu()
453
  {
454
  /* Menü anlegen */
455
- add_options_page(
456
  'AntiVirus',
457
  'AntiVirus',
458
  'manage_options',
@@ -462,6 +528,21 @@ class AntiVirus {
462
  'show_admin_menu'
463
  )
464
  );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
465
  }
466
 
467
 
@@ -469,7 +550,7 @@ class AntiVirus {
469
  * Initialisierung von JavaScript
470
  *
471
  * @since 0.8
472
- * @change 1.1
473
  */
474
 
475
  public static function add_enqueue_script()
@@ -480,22 +561,21 @@ class AntiVirus {
480
  /* JS einbinden */
481
  wp_register_script(
482
  'av_script',
483
- plugins_url('js/script.js', __FILE__),
484
  array('jquery'),
485
  $data['Version']
486
  );
487
-
488
  /* Script einbinden */
489
  wp_enqueue_script('av_script');
490
-
491
  /* Script lokalisieren */
492
  wp_localize_script(
493
  'av_script',
494
  'av_settings',
495
  array(
496
  'nonce' => wp_create_nonce('av_ajax_nonce'),
497
- 'ajax' => admin_url('admin-ajax.php'),
498
- 'theme' => urlencode(self::get_theme_name()),
499
  'msg_1' => esc_html__('There is no virus', 'antivirus'),
500
  'msg_2' => esc_html__('View line', 'antivirus'),
501
  'msg_3' => esc_html__('Scan finished', 'antivirus')
@@ -508,18 +588,18 @@ class AntiVirus {
508
  * Initialisierung von Stylesheets
509
  *
510
  * @since 0.8
511
- * @change 1.1
512
  */
513
 
514
  public static function add_enqueue_style()
515
  {
516
  /* Infos auslesen */
517
  $data = get_plugin_data(__FILE__);
518
-
519
  /* CSS registrieren */
520
  wp_register_style(
521
  'av_css',
522
- plugins_url('css/style.css', __FILE__),
523
  array(),
524
  $data['Version']
525
  );
@@ -533,12 +613,12 @@ class AntiVirus {
533
  * Rückgabe des aktuellen Theme
534
  *
535
  * @since 0.1
536
- * @change 1.3.1
537
  *
538
  * @return array $themes Array mit Theme-Eigenschaften
539
  */
540
 
541
- private static function get_current_theme()
542
  {
543
  /* Ab WP 3.4 */
544
  if ( function_exists('wp_get_theme') ) {
@@ -549,10 +629,10 @@ class AntiVirus {
549
  $files = $theme->get_files('php', 1);
550
 
551
  /* Leer? */
552
- if ( empty($name) or empty($files) ) {
553
  return false;
554
  }
555
-
556
  /* Rückgabe */
557
  return array(
558
  'Name' => $name,
@@ -569,9 +649,9 @@ class AntiVirus {
569
  }
570
  }
571
  }
572
-
573
  }
574
-
575
  return false;
576
  }
577
 
@@ -580,15 +660,15 @@ class AntiVirus {
580
  * Rückgabe von Dateien des aktuellen Theme
581
  *
582
  * @since 0.1
583
- * @change 0.8
584
  *
585
  * @return array $files Array mit Dateien
586
  */
587
 
588
- private static function get_theme_files()
589
  {
590
  /* Theme vorhanden? */
591
- if ( !$theme = self::get_current_theme() ) {
592
  return false;
593
  }
594
 
@@ -614,18 +694,18 @@ class AntiVirus {
614
  * Rückgabe des Namen des aktuellen Theme
615
  *
616
  * @since 0.1
617
- * @change 1.3.1
618
  *
619
  * @return string $theme Name des aktuellen Theme
620
  */
621
 
622
- private static function get_theme_name()
623
  {
624
- if ( $theme = self::get_current_theme() ) {
625
- if ( !empty($theme['Slug']) ) {
626
  return $theme['Slug'];
627
  }
628
- if ( !empty($theme['Name']) ) {
629
  return $theme['Name'];
630
  }
631
  }
@@ -638,16 +718,16 @@ class AntiVirus {
638
  * Rückgabe der WhiteList
639
  *
640
  * @since 0.1
641
- * @change 0.8
642
  *
643
  * @return array return Array mit MD5-Werten
644
  */
645
 
646
- private static function get_white_list()
647
  {
648
  return explode(
649
  ':',
650
- self::get_option('white_list')
651
  );
652
  }
653
 
@@ -656,7 +736,7 @@ class AntiVirus {
656
  * Ausführung von AJAX
657
  *
658
  * @since 0.1
659
- * @change 0.8
660
  */
661
 
662
  public static function get_ajax_response()
@@ -676,18 +756,18 @@ class AntiVirus {
676
  /* Ausgabe starten */
677
  switch ($_POST['_action_request']) {
678
  case 'get_theme_files':
679
- self::update_option(
680
  'cronjob_alert',
681
  0
682
  );
683
 
684
- $values = self::get_theme_files();
685
  break;
686
 
687
  case 'check_theme_file':
688
- if ( !empty($_POST['_theme_file']) && $lines = self::check_theme_file($_POST['_theme_file']) ) {
689
- foreach ($lines as $num => $line) {
690
- foreach ($line as $string) {
691
  $values[] = $num;
692
  $values[] = htmlentities($string, ENT_QUOTES);
693
  $values[] = md5($num . $string);
@@ -697,14 +777,14 @@ class AntiVirus {
697
  break;
698
 
699
  case 'update_white_list':
700
- if ( !empty($_POST['_file_md5']) ) {
701
- self::update_option(
702
  'white_list',
703
  implode(
704
  ':',
705
  array_unique(
706
  array_merge(
707
- self::get_white_list(),
708
  array($_POST['_file_md5'])
709
  )
710
  )
@@ -720,7 +800,7 @@ class AntiVirus {
720
  }
721
 
722
  /* Ausgabe starten */
723
- if ($values) {
724
  $output = sprintf(
725
  "['%s']",
726
  implode("', '", $values)
@@ -746,12 +826,13 @@ class AntiVirus {
746
  * Rückgabe des Dateiinhaltes
747
  *
748
  * @since 0.1
749
- * @change 0.8
750
  *
751
- * @return array $file Array mit Dateizeilen
 
752
  */
753
 
754
- private static function get_file_content($file)
755
  {
756
  return file(WP_CONTENT_DIR . $file);
757
  }
@@ -761,7 +842,7 @@ class AntiVirus {
761
  * Kürzung eines Strings
762
  *
763
  * @since 0.1
764
- * @change 0.1
765
  *
766
  * @param string $line Eigenetliche Zeile als String
767
  * @param string $tag Gesuchtes Tag
@@ -769,10 +850,10 @@ class AntiVirus {
769
  * @return string $output Gekürzter String
770
  */
771
 
772
- public static function get_dotted_line($line, $tag, $max = 100)
773
  {
774
  /* Keine Werte? */
775
- if ( !$line or !$tag ) {
776
  return false;
777
  }
778
 
@@ -782,7 +863,7 @@ class AntiVirus {
782
  }
783
 
784
  /* Differenz ermitteln */
785
- $left = round(($max - strlen($tag)) / 2);
786
 
787
  /* Wert konvertieren */
788
  $tag = preg_quote($tag);
@@ -807,14 +888,14 @@ class AntiVirus {
807
  * Definition des Regexp
808
  *
809
  * @since 0.1
810
- * @change 1.2
811
  *
812
  * @return string return Regulärer Ausdruck
813
  */
814
 
815
- private static function get_preg_match()
816
  {
817
- return '/(assert|file_get_contents|curl_exec|popen|proc_open|unserialize|eval|base64_encode|base64_decode|create_function|exec|shell_exec|system|passthru|ob_get_contents|file|curl_init|readfile|fopen|fsockopen|pfsockopen|fclose|fread|file_put_contents|iframe)\s*?\(/';
818
  }
819
 
820
 
@@ -822,20 +903,20 @@ class AntiVirus {
822
  * Prüfung einer Zeile
823
  *
824
  * @since 0.1
825
- * @change 1.1
826
  *
827
  * @param string $line Zeile zur Prüfung
828
  * @param integer $num Nummer zur Prüfung
829
  * @return string $line Zeile mit Resultaten
830
  */
831
 
832
- private static function check_file_line($line = '', $num)
833
  {
834
  /* Wert trimmen */
835
  $line = trim((string)$line);
836
 
837
  /* Leere Werte? */
838
- if ( !$line or !isset($num) ) {
839
  return false;
840
  }
841
 
@@ -845,7 +926,7 @@ class AntiVirus {
845
 
846
  /* Befehle suchen */
847
  preg_match_all(
848
- self::get_preg_match(),
849
  $line,
850
  $matches
851
  );
@@ -857,7 +938,7 @@ class AntiVirus {
857
 
858
  /* Base64 suchen */
859
  preg_match_all(
860
- '/[\'\"\$\\ \/]*?([a-zA-Z0-9]{' .strlen(base64_encode('sergej + swetlana = love.')). ',})/',
861
  $line,
862
  $matches
863
  );
@@ -869,7 +950,7 @@ class AntiVirus {
869
 
870
  /* Frames suchen */
871
  preg_match_all(
872
- '/<\s*?(frame)/',
873
  $line,
874
  $matches
875
  );
@@ -887,7 +968,7 @@ class AntiVirus {
887
  );
888
 
889
  /* Option prüfen */
890
- if ( $matches && $matches[1] && self::check_file_line(get_option($matches[1]), $num) ) {
891
  array_push($results, 'get_option');
892
  }
893
 
@@ -897,18 +978,18 @@ class AntiVirus {
897
  $results = array_unique($results);
898
 
899
  /* White-Liste */
900
- $md5 = self::get_white_list();
901
 
902
  /* Resultate loopen */
903
- foreach ($results as $tag) {
904
  $string = str_replace(
905
  $tag,
906
  '@span@' .$tag. '@/span@',
907
- self::get_dotted_line($line, $tag)
908
  );
909
 
910
  /* In der Whitelist? */
911
- if (!in_array(md5($num . $string), $md5)) {
912
  $output[] = $string;
913
  }
914
  }
@@ -924,15 +1005,15 @@ class AntiVirus {
924
  * Prüfung der Dateien des aktuellen Theme
925
  *
926
  * @since 0.1
927
- * @change 0.8
928
  *
929
- * @return array $results Array mit Ergebnissen
930
  */
931
 
932
- private static function check_theme_files()
933
  {
934
  /* Files vorhanden? */
935
- if ( !$files = self::get_theme_files() ) {
936
  return false;
937
  }
938
 
@@ -940,14 +1021,14 @@ class AntiVirus {
940
  $results = array();
941
 
942
  /* Files loopen */
943
- foreach($files as $file) {
944
- if ($result = self::check_theme_file($file)) {
945
  $results[$file] = $result;
946
  }
947
  }
948
 
949
  /* Werte vorhanden? */
950
- if ( !empty($results) ) {
951
  return $results;
952
  }
953
 
@@ -959,21 +1040,21 @@ class AntiVirus {
959
  * Prüfung einer Datei
960
  *
961
  * @since 0.1
962
- * @change 0.8
963
  *
964
  * @param string $file Datei zur Prüfung
965
- * @return array $results Array mit Ergebnissen
966
  */
967
 
968
- private static function check_theme_file($file)
969
  {
970
  /* Kein File? */
971
- if ( !$file ) {
972
  return false;
973
  }
974
 
975
  /* Inhalt auslesen */
976
- if ( !$content = self::get_file_content($file) ) {
977
  return false;
978
  }
979
 
@@ -981,14 +1062,14 @@ class AntiVirus {
981
  $results = array();
982
 
983
  /* Zeilen loopen */
984
- foreach($content as $num => $line) {
985
- if ($result = self::check_file_line($line, $num)) {
986
  $results[$num] = $result;
987
  }
988
  }
989
 
990
  /* Werte vorhanden? */
991
- if ( !empty($results) ) {
992
  return $results;
993
  }
994
 
@@ -1000,17 +1081,17 @@ class AntiVirus {
1000
  * Prüfung des Permalinks
1001
  *
1002
  * @since 0.1
1003
- * @change 0.8
1004
  *
1005
- * @return mixed $matches FALSE, wenn kein Fund
1006
  */
1007
 
1008
- private static function check_permalink_structure()
1009
  {
1010
  if ( $structure = get_option('permalink_structure') ) {
1011
  /* Befehle suchen */
1012
  preg_match_all(
1013
- self::get_preg_match(),
1014
  $structure,
1015
  $matches
1016
  );
@@ -1025,53 +1106,22 @@ class AntiVirus {
1025
  }
1026
 
1027
 
1028
- /**
1029
- * Prüfung der Admin-Seite
1030
- *
1031
- * @since 0.1
1032
- * @change 0.8
1033
- *
1034
- * @param integer $page Gesuchte Seite
1035
- * @return boolean TRUE, wenn die aktuelle auch die gesuchte Seite ist
1036
- */
1037
-
1038
- private static function is_current_page($page)
1039
- {
1040
- switch($page) {
1041
- case 'home':
1042
- return ( !empty($_REQUEST['page']) && $_REQUEST['page'] == 'antivirus' );
1043
-
1044
- case 'index':
1045
- case 'plugins':
1046
- return (!empty($GLOBALS['pagenow']) && $GLOBALS['pagenow'] == sprintf('%s.php', $page));
1047
-
1048
- default:
1049
- return false;
1050
- }
1051
- }
1052
-
1053
-
1054
  /**
1055
  * Anzeige des Dashboard-Hinweises
1056
  *
1057
  * @since 0.1
1058
- * @change 1.2
1059
  */
1060
 
1061
  public static function show_dashboard_notice() {
1062
  /* Kein Alert? */
1063
- if ( !self::get_option('cronjob_alert') ) {
1064
- return;
1065
- }
1066
-
1067
- /* Bereits in der Adminbar */
1068
- if ( function_exists('is_admin_bar_showing') && is_admin_bar_showing() ) {
1069
  return;
1070
  }
1071
 
1072
  /* Warnung */
1073
  echo sprintf(
1074
- '<div class="updated fade"><p><strong>%1$s:</strong> %2$s <a href="%3$s">%4$s &rarr;</a></p></div>',
1075
  esc_html__('Virus suspected', 'antivirus'),
1076
  esc_html__('The daily antivirus scan of your blog suggests alarm.', 'antivirus'),
1077
  add_query_arg(
@@ -1080,41 +1130,7 @@ class AntiVirus {
1080
  ),
1081
  admin_url('options-general.php')
1082
  ),
1083
- esc_html__('Manual scan', 'antivirus')
1084
- );
1085
- }
1086
-
1087
-
1088
- /**
1089
- * Anzeige des Menüs in der Adminbar
1090
- *
1091
- * @since 1.2
1092
- * @change 1.2
1093
- */
1094
-
1095
- public static function add_adminbar_menu( $wp_admin_bar ) {
1096
- /* Kein Alert? */
1097
- if ( !self::get_option('cronjob_alert') ) {
1098
- return;
1099
- }
1100
-
1101
- /* Keine Adminbar? */
1102
- if ( !function_exists('is_admin_bar_showing') or !is_admin_bar_showing() ) {
1103
- return;
1104
- }
1105
-
1106
- /* Hinzufügen */
1107
- $wp_admin_bar->add_menu(
1108
- array(
1109
- 'id' => 'antivirus',
1110
- 'title' => '<span class="ab-icon"></span><span class="ab-label">' .esc_html__('Virus suspected', 'antivirus'). '</span>',
1111
- 'href' => add_query_arg(
1112
- array(
1113
- 'page' => 'antivirus'
1114
- ),
1115
- admin_url('options-general.php')
1116
- )
1117
- )
1118
  );
1119
  }
1120
 
@@ -1123,35 +1139,37 @@ class AntiVirus {
1123
  * Anzeige der GUI
1124
  *
1125
  * @since 0.1
1126
- * @change 1.2
1127
  */
1128
 
1129
  public static function show_admin_menu() {
1130
  /* Updates speichern */
1131
- if ( !empty($_POST) ) {
1132
  /* Referer prüfen */
1133
  check_admin_referer('antivirus');
1134
 
1135
  /* Werte zuweisen */
1136
  $options = array(
1137
  'cronjob_enable' => (int)(!empty($_POST['av_cronjob_enable'])),
1138
- 'notify_email' => sanitize_email(@$_POST['av_notify_email'])
 
1139
  );
1140
 
1141
  /* Kein Cronjob? */
1142
- if (empty($options['cronjob_enable'])) {
1143
  $options['notify_email'] = '';
 
1144
  }
1145
 
1146
  /* Cron stoppen? */
1147
- if ($options['cronjob_enable'] && !self::get_option('cronjob_enable')) {
1148
- self::init_scheduled_hook();
1149
- } else if (!$options['cronjob_enable'] && self::get_option('cronjob_enable')) {
1150
  self::clear_scheduled_hook();
1151
  }
1152
 
1153
  /* Optionen speichern */
1154
- self::update_options($options); ?>
1155
 
1156
  <div id="message" class="updated fade">
1157
  <p>
@@ -1163,90 +1181,92 @@ class AntiVirus {
1163
  <?php } ?>
1164
 
1165
  <div class="wrap" id="av_main">
1166
- <div class="icon32"></div>
1167
-
1168
  <h2>
1169
  AntiVirus
1170
  </h2>
1171
 
1172
- <form method="post" action="">
1173
- <?php wp_nonce_field('antivirus') ?>
1174
-
1175
- <div id="poststuff">
1176
- <div class="postbox">
1177
- <h3>
1178
- <?php esc_html_e('Completed scan', 'antivirus') ?>
1179
- </h3>
1180
-
1181
- <div class="inside" id="av_completed">
1182
- <div class="output">
1183
- <div class="<?php echo (self::check_permalink_structure() ? 'danger' : 'done') ?>"><?php esc_html_e('Permalink back door check', 'antivirus') ?> <a href="<?php esc_html_e('http://mashable.com/2009/09/05/wordpress-attack/', 'antivirus') ?>" target="_blank">Info</a></div>
1184
- </div>
1185
-
1186
- <ul class="agenda">
1187
- <li>
1188
- <p></p>
1189
- <span>
1190
- <?php esc_html_e('All clear', 'antivirus') ?>
1191
- </span>
1192
- </li>
1193
- <li class="danger">
1194
- <p></p>
1195
- <span>
1196
- <?php esc_html_e('Danger', 'antivirus') ?>
1197
- </span>
1198
- </li>
1199
- </ul>
1200
- </div>
1201
- </div>
1202
-
1203
- <div class="postbox">
1204
- <h3>
1205
- <?php esc_html_e('Manual scan', 'antivirus') ?>
1206
- </h3>
1207
-
1208
- <div class="inside" id="av_manual">
1209
  <p>
1210
- <a href="#" class="button rbutton"><?php esc_html_e('Scan the theme templates now', 'antivirus') ?></a>
 
 
1211
  <span class="alert"></span>
1212
  </p>
1213
  <div class="output"></div>
1214
  </div>
1215
- </div>
1216
-
1217
- <div class="postbox">
1218
- <h3>
1219
- <?php _e('Settings') ?>
1220
- </h3>
1221
-
1222
- <div class="inside">
1223
- <table class="form-table">
1224
- <tr>
1225
- <td>
1226
- <label for="av_cronjob_enable">
1227
- <input type="checkbox" name="av_cronjob_enable" id="av_cronjob_enable" value="1" <?php checked(self::get_option('cronjob_enable'), 1) ?> />
1228
- <?php esc_html_e('Enable the daily antivirus scan', 'antivirus') ?>
1229
- <?php if (self::get_option('cronjob_enable') && self::get_option('cronjob_timestamp')) {
1230
- echo sprintf(
1231
- '&nbsp;(%s @ %s)',
1232
- esc_html__('Last check', 'antivirus'),
1233
- date_i18n('d.m.Y H:i:s', (self::get_option('cronjob_timestamp') + get_option('gmt_offset') * 3600))
1234
- );
1235
- } ?>
1236
- </label>
1237
- <span class="shift">
1238
- <?php esc_html_e('Alternate email address', 'antivirus') ?>:&nbsp;<input type="text" name="av_notify_email" value="<?php esc_attr_e(self::get_option('notify_email')) ?>" class="regular-text" />
1239
- </span>
1240
- </td>
1241
- </tr>
1242
- </table>
1243
 
1244
- <p>
1245
- <input type="submit" name="av_submit" class="button-primary" value="<?php _e('Save Changes') ?>" />
1246
- </p>
1247
- </div>
1248
- </div>
1249
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1250
  </form>
1251
  </div>
1252
  <?php }
@@ -1258,13 +1278,13 @@ add_action(
1258
  'plugins_loaded',
1259
  array(
1260
  'AntiVirus',
1261
- 'init'
1262
  ),
1263
  99
1264
  );
1265
 
1266
 
1267
- /* Install */
1268
  register_activation_hook(
1269
  __FILE__,
1270
  array(
@@ -1272,9 +1292,13 @@ register_activation_hook(
1272
  'install'
1273
  )
1274
  );
1275
-
1276
-
1277
- /* Uninstall */
 
 
 
 
1278
  register_uninstall_hook(
1279
  __FILE__,
1280
  array(
5
  Domain Path: /lang
6
  Description: Security solution as a smart, effectively plugin to protect your blog against exploits and spam injections.
7
  Author: Sergej M&uuml;ller
8
+ Author URI: http://wpcoder.de
9
  Plugin URI: http://wpantivirus.com
10
+ Version: 1.3.5
11
  */
12
 
13
 
14
  /* Sicherheitsabfrage */
15
+ if ( ! class_exists('WP') ) {
16
+ die();
 
 
17
  }
18
 
19
 
30
  private static $base;
31
 
32
 
33
+ /**
34
+ * Pseudo-Konstruktor der Klasse
35
+ *
36
+ * @since 1.3.4
37
+ * @change 1.3.4
38
+ */
39
+
40
+ public static function instance()
41
+ {
42
+ new self();
43
+ }
44
+
45
+
46
  /**
47
  * Konstruktor der Klasse
48
  *
49
  * @since 0.1
50
+ * @change 1.3.5
51
  */
52
 
53
+ public function __construct()
54
  {
55
  /* AUTOSAVE */
56
+ if ( ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) OR ( defined('XMLRPC_REQUEST') && XMLRPC_REQUEST ) ) {
57
  return;
58
  }
59
+
60
  /* Plugin-Base */
61
  self::$base = plugin_basename(__FILE__);
62
 
66
  'antivirus_daily_cronjob',
67
  array(
68
  __CLASS__,
69
+ 'do_daily_cronjob'
70
  )
71
  );
72
 
100
  )
101
  );
102
  add_action(
103
+ 'admin_notices',
104
  array(
105
  __CLASS__,
106
+ 'show_dashboard_notice'
107
+ )
 
108
  );
109
  add_action(
110
+ 'deactivate_' .self::$base,
111
  array(
112
  __CLASS__,
113
+ 'clear_scheduled_hook'
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
  }
134
  }
149
  'antivirus/lang'
150
  );
151
  }
152
+
153
+
154
  /**
155
  * Hinzufügen der Action-Links (Einstellungen links)
156
  *
157
  * @since 1.1
158
+ * @change 1.3.4
159
+ *
160
+ * @param array $data Array mit Links
161
+ * @return array $data Array mit erweitertem Link
162
  */
163
 
164
  public static function init_action_links($data)
165
  {
166
  /* Rechte? */
167
+ if ( ! current_user_can('manage_options') ) {
168
  return $data;
169
  }
170
 
187
 
188
 
189
  /**
190
+ * Links in der Plugin-Verwaltung
191
  *
192
  * @since 0.1
193
+ * @change 1.3.4
194
  *
195
+ * @param array $data Array mit Links
196
+ * @param string $page Aktuelle Seite
197
+ * @return array $data Array mit erweitertem Link
198
  */
199
+
200
  public static function init_row_meta($data, $page)
201
  {
202
+ if ( $page != self::$base ) {
203
+ return $data;
 
 
 
 
 
 
 
 
 
 
 
 
204
  }
205
 
206
+ return array_merge(
207
+ $data,
208
+ array(
209
+ '<a href="https://flattr.com/t/1322865" target="_blank">Flattr</a>',
210
+ '<a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&amp;hosted_button_id=5RDDW9FEHGLG6" target="_blank">PayPal</a>'
211
+ )
212
+ );
213
  }
214
 
215
 
217
  * Aktion bei Aktivierung des Plugins
218
  *
219
  * @since 0.1
220
+ * @change 1.3.4
221
  */
222
 
223
  public static function install()
231
  );
232
 
233
  /* Cron aktivieren */
234
+ if ( self::_get_option('cronjob_enable') ) {
235
+ self::_add_scheduled_hook();
236
  }
237
  }
238
+
239
+
240
+ /**
241
+ * Aktionen bei der Deaktivierung des Plugins
242
+ *
243
+ * @since 1.3.4
244
+ * @change 1.3.4
245
+ */
246
+
247
+ public static function deactivation()
248
+ {
249
+ self::clear_scheduled_hook();
250
+ }
251
+
252
+
253
  /**
254
  * Uninstallation des Plugins pro MU-Blog
255
  *
256
  * @since 1.1
257
+ * @change 1.3.5
258
  */
259
 
260
  public static function uninstall()
261
  {
 
 
 
 
262
  delete_option('antivirus');
 
 
 
263
  }
264
 
265
 
267
  * Rückgabe eines Optionsfeldes
268
  *
269
  * @since 0.1
270
+ * @change 1.3.4
271
  *
272
+ * @param string $field Name einer Option
273
+ * @return mixed Wert einer Option
274
  */
275
 
276
+ private static function _get_option($field)
277
  {
278
+ $options = wp_parse_args(
279
+ get_option('antivirus'),
280
+ array(
281
+ 'cronjob_enable' => 0,
282
+ 'cronjob_alert' => 0,
283
+ 'safe_browsing' => 0,
284
+ 'notify_email' => '',
285
+ 'white_list' => ''
286
+ )
287
+ );
288
 
289
+ return ( empty($options[$field]) ? '' : $options[$field] );
290
  }
291
 
292
 
294
  * Aktualisiert ein Optionsfeld
295
  *
296
  * @since 0.1
297
+ * @change 1.3.4
298
  *
299
  * @param string $field Name des Feldes
300
  * @param mixed Wert des Feldes
301
  */
302
 
303
+ private static function _update_option($field, $value)
304
  {
305
+ self::_update_options(
306
  array(
307
  $field => $value
308
  )
314
  * Aktualisiert mehrere Optionsfelder
315
  *
316
  * @since 0.1
317
+ * @change 1.3.4
318
  *
319
  * @param array $data Array mit Feldern
320
  */
321
 
322
+ private static function _update_options($data)
323
  {
 
 
 
 
 
 
 
324
  update_option(
325
  'antivirus',
326
+ array_merge(
327
+ (array)get_option('antivirus'),
328
+ $data
329
+ )
 
 
 
330
  );
331
  }
332
 
334
  /**
335
  * Initialisierung des Cronjobs
336
  *
337
+ * @since 1.3.4
338
+ * @change 1.3.4
339
  */
340
 
341
+ private static function _add_scheduled_hook()
342
  {
343
+ if ( ! wp_next_scheduled('antivirus_daily_cronjob') ) {
344
  wp_schedule_event(
345
  time(),
346
  'daily',
369
  * Ausführung des Cronjobs
370
  *
371
  * @since 0.1
372
+ * @change 1.3.4
373
  */
374
 
375
+ public static function do_daily_cronjob()
376
  {
377
  /* Kein Cronjob? */
378
+ if ( ! self::_get_option('cronjob_enable') ) {
379
  return;
380
  }
381
 
382
+ /* Load translation */
383
+ self::load_plugin_lang();
384
+
385
+ /* Safe Browsing API */
386
+ self::_check_safe_browsing();
387
+
388
+ /* Theme & Permalinks */
389
+ self::_check_blog_internals();
390
+ }
391
+
392
+
393
+ /**
394
+ * Führt die Safe Browsing Prüfung aus
395
+ *
396
+ * @since 1.3.4
397
+ * @change 1.3.4
398
+ */
399
+
400
+ private static function _check_safe_browsing()
401
+ {
402
+ /* Not enabled? */
403
+ if ( ! self::_get_option('safe_browsing') ) {
404
+ return;
405
+ }
406
+
407
+ /* Start request */
408
+ $response = wp_remote_get(
409
+ sprintf(
410
+ 'https://sb-ssl.google.com/safebrowsing/api/lookup?client=wpantivirus&apikey=%s&appver=0.1&pver=3.0&url=%s',
411
+ 'ABQIAAAAsu9cf81zMEioUOLBi7TrhhTJnIkNNG4BG3awC5RGoTZgJ-xX-A', /* API Key reserved for AntiVirus */
412
+ urlencode( get_bloginfo('url') )
413
+ ),
414
+ array(
415
+ 'sslverify' => false
416
+ )
417
  );
418
 
419
+ /* API Error? */
420
+ if ( is_wp_error($response) ) {
421
+ return;
422
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
423
 
424
+ /* All clear */
425
+ if ( wp_remote_retrieve_response_code($response) == 204 ) {
426
+ return;
 
 
427
  }
428
+
429
+ /* Send notification */
430
+ self::_send_warning_notification(
431
+ esc_html__('Safe Browsing Alert', 'antivirus'),
432
+ sprintf(
433
+ "%s\r\nhttp://www.google.com/safebrowsing/diagnostic?site=%s&hl=%s",
434
+ esc_html__('Please check the Google Safe Browsing diagnostic page:', 'antivirus'),
435
+ urlencode( get_bloginfo('url') ),
436
+ substr(get_locale(), 0, 2)
437
+ )
438
+ );
439
+ }
440
+
441
+
442
+ /**
443
+ * Führt die Blog-interne Prüfung aus
444
+ *
445
+ * @since 1.3.4
446
+ * @change 1.3.4
447
+ */
448
+
449
+ private static function _check_blog_internals()
450
+ {
451
+ /* Execute checks */
452
+ if ( ! self::_check_theme_files() && ! self::_check_permalink_structure() ) {
453
+ return;
454
+ }
455
+
456
+ /* Send notification */
457
+ self::_send_warning_notification(
458
+ esc_html__('Virus suspected', 'antivirus'),
459
+ sprintf(
460
+ "%s\r\n%s",
461
+ esc_html__('The daily antivirus scan of your blog suggests alarm.', 'antivirus'),
462
+ get_bloginfo('url')
463
+ )
464
+ );
465
+
466
+ /* Store alert */
467
+ self::_update_option(
468
+ 'cronjob_alert',
469
+ 1
470
+ );
471
+ }
472
+
473
+
474
+ /**
475
+ * Führt die Safe Browsing Prüfung aus
476
+ *
477
+ * @since 1.3.4
478
+ * @change 1.3.4
479
+ *
480
+ * @param string $subject Betreff der E-Mail
481
+ * @param string $body Inhalt der E-Mail
482
+ */
483
+
484
+ private static function _send_warning_notification($subject, $body)
485
+ {
486
+ /* Receiver email address */
487
+ if ( $email = self::_get_option('notify_email') ) {
488
+ $email = sanitize_email($email);
489
+ } else {
490
+ $email = get_bloginfo('admin_email');
491
+ }
492
+
493
+ /* Send it! */
494
+ wp_mail(
495
+ $email,
496
+ sprintf(
497
+ '[%s] %s',
498
+ get_bloginfo('name'),
499
+ $subject
500
+ ),
501
+ sprintf(
502
+ "%s\r\n\r\n\r\n%s\r\n%s\r\n",
503
+ $body,
504
+ esc_html__('Notify message by AntiVirus for WordPress', 'antivirus'),
505
+ esc_html__('http://wpantivirus.com', 'antivirus')
506
+ )
507
+ );
508
  }
509
 
510
 
512
  * Initialisierung der GUI
513
  *
514
  * @since 0.1
515
+ * @change 1.3.5
516
  */
517
 
518
  public static function add_sidebar_menu()
519
  {
520
  /* Menü anlegen */
521
+ $page = add_options_page(
522
  'AntiVirus',
523
  'AntiVirus',
524
  'manage_options',
528
  'show_admin_menu'
529
  )
530
  );
531
+
532
+ add_action(
533
+ 'admin_print_styles-' . $page,
534
+ array(
535
+ __CLASS__,
536
+ 'add_enqueue_style'
537
+ )
538
+ );
539
+ add_action(
540
+ 'admin_print_scripts-' . $page,
541
+ array(
542
+ __CLASS__,
543
+ 'add_enqueue_script'
544
+ )
545
+ );
546
  }
547
 
548
 
550
  * Initialisierung von JavaScript
551
  *
552
  * @since 0.8
553
+ * @change 1.3.5
554
  */
555
 
556
  public static function add_enqueue_script()
561
  /* JS einbinden */
562
  wp_register_script(
563
  'av_script',
564
+ plugins_url('js/script.min.js', __FILE__),
565
  array('jquery'),
566
  $data['Version']
567
  );
568
+
569
  /* Script einbinden */
570
  wp_enqueue_script('av_script');
571
+
572
  /* Script lokalisieren */
573
  wp_localize_script(
574
  'av_script',
575
  'av_settings',
576
  array(
577
  'nonce' => wp_create_nonce('av_ajax_nonce'),
578
+ 'theme' => urlencode(self::_get_theme_name()),
 
579
  'msg_1' => esc_html__('There is no virus', 'antivirus'),
580
  'msg_2' => esc_html__('View line', 'antivirus'),
581
  'msg_3' => esc_html__('Scan finished', 'antivirus')
588
  * Initialisierung von Stylesheets
589
  *
590
  * @since 0.8
591
+ * @change 1.3.4
592
  */
593
 
594
  public static function add_enqueue_style()
595
  {
596
  /* Infos auslesen */
597
  $data = get_plugin_data(__FILE__);
598
+
599
  /* CSS registrieren */
600
  wp_register_style(
601
  'av_css',
602
+ plugins_url('css/style.min.css', __FILE__),
603
  array(),
604
  $data['Version']
605
  );
613
  * Rückgabe des aktuellen Theme
614
  *
615
  * @since 0.1
616
+ * @change 1.3.4
617
  *
618
  * @return array $themes Array mit Theme-Eigenschaften
619
  */
620
 
621
+ private static function _get_current_theme()
622
  {
623
  /* Ab WP 3.4 */
624
  if ( function_exists('wp_get_theme') ) {
629
  $files = $theme->get_files('php', 1);
630
 
631
  /* Leer? */
632
+ if ( empty($name) OR empty($files) ) {
633
  return false;
634
  }
635
+
636
  /* Rückgabe */
637
  return array(
638
  'Name' => $name,
649
  }
650
  }
651
  }
652
+
653
  }
654
+
655
  return false;
656
  }
657
 
660
  * Rückgabe von Dateien des aktuellen Theme
661
  *
662
  * @since 0.1
663
+ * @change 1.3.4
664
  *
665
  * @return array $files Array mit Dateien
666
  */
667
 
668
+ private static function _get_theme_files()
669
  {
670
  /* Theme vorhanden? */
671
+ if ( ! $theme = self::_get_current_theme() ) {
672
  return false;
673
  }
674
 
694
  * Rückgabe des Namen des aktuellen Theme
695
  *
696
  * @since 0.1
697
+ * @change 1.3.4
698
  *
699
  * @return string $theme Name des aktuellen Theme
700
  */
701
 
702
+ private static function _get_theme_name()
703
  {
704
+ if ( $theme = self::_get_current_theme() ) {
705
+ if ( ! empty($theme['Slug']) ) {
706
  return $theme['Slug'];
707
  }
708
+ if ( ! empty($theme['Name']) ) {
709
  return $theme['Name'];
710
  }
711
  }
718
  * Rückgabe der WhiteList
719
  *
720
  * @since 0.1
721
+ * @change 1.3.4
722
  *
723
  * @return array return Array mit MD5-Werten
724
  */
725
 
726
+ private static function _get_white_list()
727
  {
728
  return explode(
729
  ':',
730
+ self::_get_option('white_list')
731
  );
732
  }
733
 
736
  * Ausführung von AJAX
737
  *
738
  * @since 0.1
739
+ * @change 1.3.4
740
  */
741
 
742
  public static function get_ajax_response()
756
  /* Ausgabe starten */
757
  switch ($_POST['_action_request']) {
758
  case 'get_theme_files':
759
+ self::_update_option(
760
  'cronjob_alert',
761
  0
762
  );
763
 
764
+ $values = self::_get_theme_files();
765
  break;
766
 
767
  case 'check_theme_file':
768
+ if ( ! empty($_POST['_theme_file']) && $lines = self::_check_theme_file($_POST['_theme_file']) ) {
769
+ foreach( $lines as $num => $line ) {
770
+ foreach( $line as $string ) {
771
  $values[] = $num;
772
  $values[] = htmlentities($string, ENT_QUOTES);
773
  $values[] = md5($num . $string);
777
  break;
778
 
779
  case 'update_white_list':
780
+ if ( ! empty($_POST['_file_md5']) ) {
781
+ self::_update_option(
782
  'white_list',
783
  implode(
784
  ':',
785
  array_unique(
786
  array_merge(
787
+ self::_get_white_list(),
788
  array($_POST['_file_md5'])
789
  )
790
  )
800
  }
801
 
802
  /* Ausgabe starten */
803
+ if ( $values ) {
804
  $output = sprintf(
805
  "['%s']",
806
  implode("', '", $values)
826
  * Rückgabe des Dateiinhaltes
827
  *
828
  * @since 0.1
829
+ * @change 1.3.4
830
  *
831
+ * @param string $file Dateipfad
832
+ * @return array Array mit Dateizeilen
833
  */
834
 
835
+ private static function _get_file_content($file)
836
  {
837
  return file(WP_CONTENT_DIR . $file);
838
  }
842
  * Kürzung eines Strings
843
  *
844
  * @since 0.1
845
+ * @change 1.3.4
846
  *
847
  * @param string $line Eigenetliche Zeile als String
848
  * @param string $tag Gesuchtes Tag
850
  * @return string $output Gekürzter String
851
  */
852
 
853
+ private static function _get_dotted_line($line, $tag, $max = 100)
854
  {
855
  /* Keine Werte? */
856
+ if ( ! $line OR ! $tag ) {
857
  return false;
858
  }
859
 
863
  }
864
 
865
  /* Differenz ermitteln */
866
+ $left = round( ($max - strlen($tag)) / 2 );
867
 
868
  /* Wert konvertieren */
869
  $tag = preg_quote($tag);
888
  * Definition des Regexp
889
  *
890
  * @since 0.1
891
+ * @change 1.3.4
892
  *
893
  * @return string return Regulärer Ausdruck
894
  */
895
 
896
+ private static function _php_match_pattern()
897
  {
898
+ return '/(assert|file_get_contents|curl_exec|popen|proc_open|unserialize|eval|base64_encode|base64_decode|create_function|exec|shell_exec|system|passthru|ob_get_contents|file|curl_init|readfile|fopen|fsockopen|pfsockopen|fclose|fread|file_put_contents)\s*?\(/';
899
  }
900
 
901
 
903
  * Prüfung einer Zeile
904
  *
905
  * @since 0.1
906
+ * @change 1.3.4
907
  *
908
  * @param string $line Zeile zur Prüfung
909
  * @param integer $num Nummer zur Prüfung
910
  * @return string $line Zeile mit Resultaten
911
  */
912
 
913
+ private static function _check_file_line($line = '', $num)
914
  {
915
  /* Wert trimmen */
916
  $line = trim((string)$line);
917
 
918
  /* Leere Werte? */
919
+ if ( ! $line OR ! isset($num) ) {
920
  return false;
921
  }
922
 
926
 
927
  /* Befehle suchen */
928
  preg_match_all(
929
+ self::_php_match_pattern(),
930
  $line,
931
  $matches
932
  );
938
 
939
  /* Base64 suchen */
940
  preg_match_all(
941
+ '/[\'\"\$\\ \/]*?([a-zA-Z0-9]{' .strlen(base64_encode('sergej + swetlana = love.')). ',})/', /* get length of my life ;) */
942
  $line,
943
  $matches
944
  );
950
 
951
  /* Frames suchen */
952
  preg_match_all(
953
+ '/<\s*?(i?frame)/',
954
  $line,
955
  $matches
956
  );
968
  );
969
 
970
  /* Option prüfen */
971
+ if ( $matches && $matches[1] && self::_check_file_line(get_option($matches[1]), $num) ) {
972
  array_push($results, 'get_option');
973
  }
974
 
978
  $results = array_unique($results);
979
 
980
  /* White-Liste */
981
+ $md5 = self::_get_white_list();
982
 
983
  /* Resultate loopen */
984
+ foreach( $results as $tag ) {
985
  $string = str_replace(
986
  $tag,
987
  '@span@' .$tag. '@/span@',
988
+ self::_get_dotted_line($line, $tag)
989
  );
990
 
991
  /* In der Whitelist? */
992
+ if ( ! in_array(md5($num . $string), $md5) ) {
993
  $output[] = $string;
994
  }
995
  }
1005
  * Prüfung der Dateien des aktuellen Theme
1006
  *
1007
  * @since 0.1
1008
+ * @change 1.3.4
1009
  *
1010
+ * @return mixed $results Array mit Ergebnissen | FALSE im Fehlerfall
1011
  */
1012
 
1013
+ private static function _check_theme_files()
1014
  {
1015
  /* Files vorhanden? */
1016
+ if ( ! $files = self::_get_theme_files() ) {
1017
  return false;
1018
  }
1019
 
1021
  $results = array();
1022
 
1023
  /* Files loopen */
1024
+ foreach( $files as $file ) {
1025
+ if ( $result = self::_check_theme_file($file) ) {
1026
  $results[$file] = $result;
1027
  }
1028
  }
1029
 
1030
  /* Werte vorhanden? */
1031
+ if ( ! empty($results) ) {
1032
  return $results;
1033
  }
1034
 
1040
  * Prüfung einer Datei
1041
  *
1042
  * @since 0.1
1043
+ * @change 1.3.4
1044
  *
1045
  * @param string $file Datei zur Prüfung
1046
+ * @return mixed $results Array mit Ergebnissen | FALSE im Fehlerfall
1047
  */
1048
 
1049
+ private static function _check_theme_file($file)
1050
  {
1051
  /* Kein File? */
1052
+ if ( ! $file ) {
1053
  return false;
1054
  }
1055
 
1056
  /* Inhalt auslesen */
1057
+ if ( ! $content = self::_get_file_content($file) ) {
1058
  return false;
1059
  }
1060
 
1062
  $results = array();
1063
 
1064
  /* Zeilen loopen */
1065
+ foreach( $content as $num => $line ) {
1066
+ if ( $result = self::_check_file_line($line, $num) ) {
1067
  $results[$num] = $result;
1068
  }
1069
  }
1070
 
1071
  /* Werte vorhanden? */
1072
+ if ( ! empty($results) ) {
1073
  return $results;
1074
  }
1075
 
1081
  * Prüfung des Permalinks
1082
  *
1083
  * @since 0.1
1084
+ * @change 1.3.4
1085
  *
1086
+ * @return mixed $matches FALSE im Fehlerfall
1087
  */
1088
 
1089
+ private static function _check_permalink_structure()
1090
  {
1091
  if ( $structure = get_option('permalink_structure') ) {
1092
  /* Befehle suchen */
1093
  preg_match_all(
1094
+ self::_php_match_pattern(),
1095
  $structure,
1096
  $matches
1097
  );
1106
  }
1107
 
1108
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1109
  /**
1110
  * Anzeige des Dashboard-Hinweises
1111
  *
1112
  * @since 0.1
1113
+ * @change 1.3.5
1114
  */
1115
 
1116
  public static function show_dashboard_notice() {
1117
  /* Kein Alert? */
1118
+ if ( ! self::_get_option('cronjob_alert') ) {
 
 
 
 
 
1119
  return;
1120
  }
1121
 
1122
  /* Warnung */
1123
  echo sprintf(
1124
+ '<div class="error"><p><strong>%1$s:</strong> %2$s <a href="%3$s">%4$s &rarr;</a></p></div>',
1125
  esc_html__('Virus suspected', 'antivirus'),
1126
  esc_html__('The daily antivirus scan of your blog suggests alarm.', 'antivirus'),
1127
  add_query_arg(
1130
  ),
1131
  admin_url('options-general.php')
1132
  ),
1133
+ esc_html__('Manual malware scan', 'antivirus')
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1134
  );
1135
  }
1136
 
1139
  * Anzeige der GUI
1140
  *
1141
  * @since 0.1
1142
+ * @change 1.3.5
1143
  */
1144
 
1145
  public static function show_admin_menu() {
1146
  /* Updates speichern */
1147
+ if ( ! empty($_POST) ) {
1148
  /* Referer prüfen */
1149
  check_admin_referer('antivirus');
1150
 
1151
  /* Werte zuweisen */
1152
  $options = array(
1153
  'cronjob_enable' => (int)(!empty($_POST['av_cronjob_enable'])),
1154
+ 'notify_email' => is_email(@$_POST['av_notify_email']),
1155
+ 'safe_browsing' => (int)(!empty($_POST['av_safe_browsing']))
1156
  );
1157
 
1158
  /* Kein Cronjob? */
1159
+ if ( empty($options['cronjob_enable']) ) {
1160
  $options['notify_email'] = '';
1161
+ $options['safe_browsing'] = 0;
1162
  }
1163
 
1164
  /* Cron stoppen? */
1165
+ if ( $options['cronjob_enable'] && ! self::_get_option('cronjob_enable') ) {
1166
+ self::_add_scheduled_hook();
1167
+ } else if ( ! $options['cronjob_enable'] && self::_get_option('cronjob_enable') ) {
1168
  self::clear_scheduled_hook();
1169
  }
1170
 
1171
  /* Optionen speichern */
1172
+ self::_update_options($options); ?>
1173
 
1174
  <div id="message" class="updated fade">
1175
  <p>
1181
  <?php } ?>
1182
 
1183
  <div class="wrap" id="av_main">
 
 
1184
  <h2>
1185
  AntiVirus
1186
  </h2>
1187
 
1188
+ <table class="form-table">
1189
+ <tr valign="top">
1190
+ <th scope="row">
1191
+ <?php esc_html_e('Manual malware scan', 'antivirus') ?>
1192
+ </th>
1193
+ <td>
1194
+ <div class="inside" id="av_manual_scan">
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1195
  <p>
1196
+ <a href="#" class="button button-primary">
1197
+ <?php esc_html_e('Scan the theme templates now', 'antivirus') ?>
1198
+ </a>
1199
  <span class="alert"></span>
1200
  </p>
1201
  <div class="output"></div>
1202
  </div>
1203
+ </td>
1204
+ </tr>
1205
+ </table>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1206
 
1207
+
1208
+ <form method="post" action="">
1209
+ <?php wp_nonce_field('antivirus') ?>
1210
+
1211
+ <table class="form-table">
1212
+ <tr valign="top">
1213
+ <th scope="row">
1214
+ <?php esc_html_e('Daily malware scan', 'antivirus') ?>
1215
+ </th>
1216
+ <td>
1217
+ <fieldset>
1218
+ <label for="av_cronjob_enable">
1219
+ <input type="checkbox" name="av_cronjob_enable" id="av_cronjob_enable" value="1" <?php checked(self::_get_option('cronjob_enable'), 1) ?> />
1220
+ <?php esc_html_e('Check the theme templates for malware', 'antivirus') ?>
1221
+ </label>
1222
+
1223
+ <p class="description">
1224
+ <?php if ( $timestamp = wp_next_scheduled('antivirus_daily_cronjob') ) {
1225
+ echo sprintf(
1226
+ '%s: %s',
1227
+ esc_html__('Next Run', 'antivirus'),
1228
+ date_i18n('d.m.Y H:i:s', $timestamp + get_option('gmt_offset') * 3600)
1229
+ );
1230
+ } ?>
1231
+ </p>
1232
+
1233
+
1234
+ <br />
1235
+
1236
+
1237
+ <label for="av_safe_browsing">
1238
+ <input type="checkbox" name="av_safe_browsing" id="av_safe_browsing" value="1" <?php checked(self::_get_option('safe_browsing'), 1) ?> />
1239
+ <?php esc_html_e('Malware detection by Google Safe Browsing', 'antivirus') ?>
1240
+ </label>
1241
+
1242
+ <p class="description">
1243
+ <?php esc_html_e('Diagnosis and notification in suspicion case', 'antivirus') ?>
1244
+ </p>
1245
+
1246
+
1247
+ <br />
1248
+
1249
+
1250
+ <label for="av_notify_email">
1251
+ <input type="text" name="av_notify_email" id="av_notify_email" value="<?php esc_attr_e(self::_get_option('notify_email')) ?>" class="regular-text" placeholder="<?php esc_attr_e('Email address for notifications', 'antivirus') ?>" />
1252
+ </label>
1253
+
1254
+ <p class="description">
1255
+ <?php esc_html_e('If the field is empty, the blog admin will be notified', 'antivirus') ?>
1256
+ </p>
1257
+ </fieldset>
1258
+ </td>
1259
+ </tr>
1260
+
1261
+ <tr valign="top">
1262
+ <th scope="row">
1263
+ <input type="submit" class="button button-primary" value="<?php _e('Save Changes') ?>" />
1264
+ </th>
1265
+ <td>
1266
+ <?php if ( get_locale() == 'de_DE' ) { ?><a href="http://playground.ebiene.de/antivirus-wordpress-plugin/" target="_blank">Handbuch</a> &bull; <?php } ?><a href="https://flattr.com/t/1322865" target="_blank">Flattr</a> &bull; <a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&amp;hosted_button_id=5RDDW9FEHGLG6" target="_blank">PayPal</a>
1267
+ </td>
1268
+ </tr>
1269
+ </table>
1270
  </form>
1271
  </div>
1272
  <?php }
1278
  'plugins_loaded',
1279
  array(
1280
  'AntiVirus',
1281
+ 'instance'
1282
  ),
1283
  99
1284
  );
1285
 
1286
 
1287
+ /* Hooks */
1288
  register_activation_hook(
1289
  __FILE__,
1290
  array(
1292
  'install'
1293
  )
1294
  );
1295
+ register_deactivation_hook(
1296
+ __FILE__,
1297
+ array(
1298
+ 'AntiVirus',
1299
+ 'deactivation'
1300
+ )
1301
+ );
1302
  register_uninstall_hook(
1303
  __FILE__,
1304
  array(
css/style.css CHANGED
@@ -1 +1,94 @@
1
- #wp-admin-bar-antivirus .ab-label{color:#e66f00;margin-left:4px;}#wp-admin-bar-antivirus .ab-icon{float:left;width:16px;height:16px;position:relative;margin-top:5px;background:url(../img/warning@2x.png);background-size:100%;}#av_main .icon32{width:32px;height:32px;background:url('../img/icon@2x.png');background-size:100%;}#av_main .postbox h3{cursor:default;}#av_main #poststuff>.postbox:first-child{margin-top:10px;}#av_main table.form-table{clear:none;width:auto;margin:0;}#av_main table.form-table #antivirus_cronjob_enable{margin:-3px 0 0;}#av_main table.form-table span.shift{display:block;margin:2px 0 0 18px;*margin-left:26px;}#av_completed{height:1%;overflow:hidden;}#av_completed .output{float:left;}#av_completed .output div{margin-top:8px;}#av_completed .output div a{margin:0 0 -1px 5px;padding:1px 4px 2px;font-size:10px;background:#FFF;text-decoration:none;border-radius:2px;-o-border-radius:2px;-ms-border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;}#av_completed .agenda{float:right;border:1px solid #dfdfdf;margin:4px 6px 0;padding:2px 5px 2px 6px;border-radius:5px;-o-border-radius:5px;-ms-border-radius:5px;-moz-border-radius:5px;-webkit-border-radius:5px;}#av_completed .agenda li{clear:both;height:1%;margin:0 !important;overflow:hidden;}#av_completed .agenda li p{float:left;width:10px;height:10px;margin:3px 3px 0 0 !important;background:green;border-radius:2px;-o-border-radius:2px;-ms-border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;}#av_completed .agenda li.danger p{background:red;}#av_completed .agenda li span{float:left;font-size:10px;}#av_manual{height:1%;overflow:hidden;}#av_manual a.button{float:left;}#av_manual .alert{float:left;color:green;margin:1px 10px 0;border:1px solid green;display:none;padding:2px 5px;border-radius:5px;-o-border-radius:5px;-ms-border-radius:5px;-moz-border-radius:5px;-webkit-border-radius:5px;}#av_main .inside .output{clear:both;height:1%;padding:0 0 6px;overflow:hidden;}#av_main .inside .output div{float:left;color:#FFF;margin:12px 6px 0;padding:8px 12px 10px;font-size:11px !important;background:orange;line-height:1.2em;border-radius:8px;-o-border-radius:8px;-ms-border-radius:8px;-moz-border-radius:8px;-webkit-border-radius:8px;transition:background-color 0.5s linear;-o-transition:background-color 0.5s linear;-ms-transition:background-color 0.5s linear;-moz-transition:background-color 0.5s linear;-webkit-transition:background-color 0.5s linear;}#av_main .inside .output div.done{background:green;}#av_main .inside .output div.danger{width:97%;background:red;}#av_main .inside .output div p{padding:10px;overflow:hidden;background:#f9f9f9;white-space:nowrap;border-radius:8px;-o-border-radius:8px;-ms-border-radius:8px;-moz-border-radius:8px;-webkit-border-radius:8px;}#av_main .inside .output div p a{float:left;color:#646464;margin:0 6px 12px 0;display:block;border:1px solid #bbb;padding:2px 5px;background:#f2f2f2;text-decoration:none;border-radius:5px;-o-border-radius:5px;-ms-border-radius:5px;-moz-border-radius:5px;-webkit-border-radius:5px;}#av_main .inside .output div p a:hover{color:#000;border:1px solid #646464;}#av_main .inside .output div p code{clear:both;float:left;color:#000;padding:2px 5px;border-radius:2px;-o-border-radius:2px;-o-border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;}#av_main .inside .output div p code span{padding:2px;background:yellow;}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* @group Manual Scan */
2
+
3
+ #av_manual_scan {
4
+ height: 1%;
5
+ overflow: hidden;
6
+ }
7
+ #av_manual_scan a.button {
8
+ float: left;
9
+ }
10
+ #av_manual_scan .alert {
11
+ float: left;
12
+ color: green;
13
+ margin: 0 10px;
14
+ border: 1px solid green;
15
+ display: none;
16
+ height: 26px;
17
+ line-height: 26px;
18
+ padding: 0 10px;
19
+ background: #fff;
20
+ border-radius: 3px;
21
+ }
22
+
23
+ #av_main .inside .output {
24
+ clear: both;
25
+ height: 1%;
26
+ margin: 0 0 0 -6px;
27
+ padding: 0 0 6px;
28
+ overflow: hidden;
29
+ }
30
+ #av_main .inside .output div {
31
+ float: left;
32
+ color: #FFF;
33
+ margin: 12px 6px 0;
34
+ padding: 8px 12px 10px;
35
+ background: orange;
36
+ border-radius: 3px;
37
+
38
+ transition: background-color 0.5s linear;
39
+ -o-transition: background-color 0.5s linear;
40
+ -ms-transition: background-color 0.5s linear;
41
+ -moz-transition: background-color 0.5s linear;
42
+ -webkit-transition: background-color 0.5s linear;
43
+ }
44
+ #av_main .inside .output div.done {
45
+ background: green;
46
+ }
47
+ #av_main .inside .output div.danger {
48
+ width: 97%;
49
+ background: red;
50
+ }
51
+ #av_main .inside .output div p {
52
+ padding: 10px;
53
+ overflow: hidden;
54
+ background: #F9F9F9;
55
+ white-space: nowrap;
56
+ border-radius: 3px;
57
+ }
58
+ #av_main .inside .output div p a {
59
+ float: left;
60
+ color: #646464;
61
+ margin: 0 6px 12px 0;
62
+ display: block;
63
+ border: 1px solid #bbbbbb;
64
+ padding: 2px 5px;
65
+ background: #f2f2f2;
66
+ text-decoration: none;
67
+ border-radius: 3px;
68
+ }
69
+ #av_main .inside .output div p a:hover {
70
+ color: #000;
71
+ border: 1px solid #646464;
72
+ }
73
+ #av_main .inside .output div p code {
74
+ clear: both;
75
+ float: left;
76
+ color: #000;
77
+ padding: 2px 5px;
78
+ border-radius: 3px;
79
+ }
80
+ #av_main .inside .output div p code span {
81
+ padding: 2px;
82
+ background: yellow;
83
+ }
84
+
85
+ /* @end group */
86
+
87
+
88
+ /* @group WordPress 3.8 Fix */
89
+
90
+ #av_notify_email {
91
+ line-height: 1.5;
92
+ }
93
+
94
+ /* @end group */
css/style.dev.css DELETED
@@ -1,231 +0,0 @@
1
- /* @group Adminbar */
2
-
3
- #wp-admin-bar-antivirus .ab-label {
4
- color: #E66F00;
5
- margin-left: 4px;
6
- }
7
- #wp-admin-bar-antivirus .ab-icon {
8
- float: left;
9
- width: 16px;
10
- height: 16px;
11
- position: relative;
12
- margin-top: 5px;
13
- background: url(../img/warning@2x.png);
14
- background-size: 100%;
15
- }
16
-
17
- /* @end group */
18
-
19
-
20
- /* @group GUI */
21
-
22
- #av_main .icon32 {
23
- width: 32px;
24
- height: 32px;
25
- background: url('../img/icon@2x.png');
26
- background-size: 100%;
27
- }
28
- #av_main .postbox h3 {
29
- cursor: default;
30
- }
31
- #av_main #poststuff > .postbox:first-child {
32
- margin-top: 10px;
33
- }
34
-
35
- /* @end group */
36
-
37
-
38
- /* @group Tabelle */
39
-
40
- #av_main table.form-table {
41
- clear: none;
42
- width: auto;
43
- margin: 0;
44
- }
45
- #av_main table.form-table #antivirus_cronjob_enable {
46
- margin: -3px 0 0;
47
- }
48
- #av_main table.form-table span.shift {
49
- display: block;
50
- margin: 2px 0 0 18px;
51
- *margin-left: 26px;
52
- }
53
-
54
- /* @end group */
55
-
56
-
57
- /* @group Complete Scan */
58
-
59
- #av_completed {
60
- height: 1%;
61
- overflow: hidden;
62
- }
63
- #av_completed .output {
64
- float: left;
65
- }
66
- #av_completed .output div {
67
- margin-top: 8px;
68
- }
69
- #av_completed .output div a {
70
- margin: 0 0 -1px 5px;
71
- padding: 1px 4px 2px;
72
- font-size: 10px;
73
- background: #FFF;
74
- text-decoration: none;
75
-
76
- border-radius: 2px;
77
- -o-border-radius: 2px;
78
- -ms-border-radius: 2px;
79
- -moz-border-radius: 2px;
80
- -webkit-border-radius: 2px;
81
- }
82
- #av_completed .agenda {
83
- float: right;
84
- border: 1px solid #DFDFDF;
85
- margin: 4px 6px 0;
86
- padding: 2px 5px 2px 6px;
87
-
88
- border-radius: 5px;
89
- -o-border-radius: 5px;
90
- -ms-border-radius: 5px;
91
- -moz-border-radius: 5px;
92
- -webkit-border-radius: 5px;
93
- }
94
- #av_completed .agenda li {
95
- clear: both;
96
- height: 1%;
97
- margin: 0 !important;
98
- overflow: hidden;
99
- }
100
- #av_completed .agenda li p {
101
- float: left;
102
- width: 10px;
103
- height: 10px;
104
- margin: 3px 3px 0 0 !important;
105
- background: green;
106
-
107
- border-radius: 2px;
108
- -o-border-radius: 2px;
109
- -ms-border-radius: 2px;
110
- -moz-border-radius: 2px;
111
- -webkit-border-radius: 2px;
112
- }
113
- #av_completed .agenda li.danger p {
114
- background: red;
115
- }
116
- #av_completed .agenda li span {
117
- float: left;
118
- font-size: 10px;
119
- }
120
-
121
- /* @end group */
122
-
123
-
124
- /* @group Manual Scan */
125
-
126
- #av_manual {
127
- height: 1%;
128
- overflow: hidden;
129
- }
130
- #av_manual a.button {
131
- float: left;
132
- }
133
- #av_manual .alert {
134
- float: left;
135
- color: green;
136
- margin: 1px 10px 0;
137
- border: 1px solid green;
138
- display: none;
139
- padding: 2px 5px;
140
-
141
- border-radius: 5px;
142
- -o-border-radius: 5px;
143
- -ms-border-radius: 5px;
144
- -moz-border-radius: 5px;
145
- -webkit-border-radius: 5px;
146
- }
147
-
148
- #av_main .inside .output {
149
- clear: both;
150
- height: 1%;
151
- padding: 0 0 6px;
152
- overflow: hidden;
153
- }
154
- #av_main .inside .output div {
155
- float: left;
156
- color: #FFF;
157
- margin: 12px 6px 0;
158
- padding: 8px 12px 10px;
159
- font-size: 11px !important;
160
- background: orange;
161
- line-height: 1.2em;
162
-
163
- border-radius: 8px;
164
- -o-border-radius: 8px;
165
- -ms-border-radius: 8px;
166
- -moz-border-radius: 8px;
167
- -webkit-border-radius: 8px;
168
-
169
- transition: background-color 0.5s linear;
170
- -o-transition: background-color 0.5s linear;
171
- -ms-transition: background-color 0.5s linear;
172
- -moz-transition: background-color 0.5s linear;
173
- -webkit-transition: background-color 0.5s linear;
174
- }
175
- #av_main .inside .output div.done {
176
- background: green;
177
- }
178
- #av_main .inside .output div.danger {
179
- width: 97%;
180
- background: red;
181
- }
182
- #av_main .inside .output div p {
183
- padding: 10px;
184
- overflow: hidden;
185
- background: #F9F9F9;
186
- white-space: nowrap;
187
-
188
- border-radius: 8px;
189
- -o-border-radius: 8px;
190
- -ms-border-radius: 8px;
191
- -moz-border-radius: 8px;
192
- -webkit-border-radius: 8px;
193
- }
194
- #av_main .inside .output div p a {
195
- float: left;
196
- color: #646464;
197
- margin: 0 6px 12px 0;
198
- display: block;
199
- border: 1px solid #bbbbbb;
200
- padding: 2px 5px;
201
- background: #f2f2f2;
202
- text-decoration: none;
203
-
204
- border-radius: 5px;
205
- -o-border-radius: 5px;
206
- -ms-border-radius: 5px;
207
- -moz-border-radius: 5px;
208
- -webkit-border-radius: 5px;
209
- }
210
- #av_main .inside .output div p a:hover {
211
- color: #000;
212
- border: 1px solid #646464;
213
- }
214
- #av_main .inside .output div p code {
215
- clear: both;
216
- float: left;
217
- color: #000;
218
- padding: 2px 5px;
219
-
220
- border-radius: 2px;
221
- -o-border-radius: 2px;
222
- -o-border-radius: 2px;
223
- -moz-border-radius: 2px;
224
- -webkit-border-radius: 2px;
225
- }
226
- #av_main .inside .output div p code span {
227
- padding: 2px;
228
- background: yellow;
229
- }
230
-
231
- /* @end group */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
css/style.min.css ADDED
@@ -0,0 +1 @@
 
1
+ #av_manual_scan{height:1%;overflow:hidden;}#av_manual_scan a.button{float:left;}#av_manual_scan .alert{float:left;color:green;margin:0 10px;border:1px solid green;display:none;height:26px;line-height:26px;padding:0 10px;background:#fff;border-radius:3px;}#av_main .inside .output{clear:both;height:1%;margin:0 0 0 -6px;padding:0 0 6px;overflow:hidden;}#av_main .inside .output div{float:left;color:#FFF;margin:12px 6px 0;padding:8px 12px 10px;background:orange;border-radius:3px;transition:background-color 0.5s linear;-o-transition:background-color 0.5s linear;-ms-transition:background-color 0.5s linear;-moz-transition:background-color 0.5s linear;-webkit-transition:background-color 0.5s linear;}#av_main .inside .output div.done{background:green;}#av_main .inside .output div.danger{width:97%;background:red;}#av_main .inside .output div p{padding:10px;overflow:hidden;background:#f9f9f9;white-space:nowrap;border-radius:3px;}#av_main .inside .output div p a{float:left;color:#646464;margin:0 6px 12px 0;display:block;border:1px solid #bbb;padding:2px 5px;background:#f2f2f2;text-decoration:none;border-radius:3px;}#av_main .inside .output div p a:hover{color:#000;border:1px solid #646464;}#av_main .inside .output div p code{clear:both;float:left;color:#000;padding:2px 5px;border-radius:3px;}#av_main .inside .output div p code span{padding:2px;background:yellow;}#av_notify_email{line-height:1.5;}
img/icon@2x.png DELETED
Binary file
img/warning@2x.png DELETED
Binary file
js/script.js CHANGED
@@ -1,4 +1,189 @@
1
- jQuery(document).ready(function(b){function g(a){var d=parseInt(a||0);b.post(av_ajax,{action:"get_ajax_response",_ajax_nonce:av_nonce,_theme_file:av_files[d],_action_request:"check_theme_file"},function(c){var a=b("#av_template_"+d);if(c){c=eval("("+c+")");if(!c.nonce||c.nonce!=av_nonce)return;a.addClass("danger");for(var e=c.data,f=e.length,c=0;c<f;c+=3){parseInt(e[c]);var h=e[c+2],i=e[c+1].replace(/@span@/g,"<span>").replace(/@\/span@/g,"</span>");a.text();a.append('<p><a href="#" id="'+h+'">'+
2
- av_msg_1+"</a> <code>"+i+"</code></p>");b("#"+h).click(function(){b.post(av_ajax,{action:"get_ajax_response",_ajax_nonce:av_nonce,_file_md5:b(this).attr("id"),_action_request:"update_white_list"},function(a){if(a){a=eval("("+a+")");if(a.nonce&&a.nonce==av_nonce){a=b("#"+a.data[0]).parent();a.parent().children().length<=1&&a.parent().hide("slow").remove();a.hide("slow").remove()}}});return false})}}else a.addClass("done");av_files_loaded++;av_files_loaded>=av_files_total?b("#av_manual .alert").text(av_msg_3).fadeIn().fadeOut().fadeIn().fadeOut().fadeIn().animate({opacity:1},
3
- 500).fadeOut("slow",function(){b(this).empty()}):g(d+1)})}function f(){var a=b("#av_cronjob_enable"),d=a.parents(".form-table").find("input:text");"function"===typeof b.fn.prop?d.prop("disabled",!a.prop("checked")):d.attr("disabled",!a.attr("checked"))}av_nonce=av_settings.nonce;av_ajax=av_settings.ajax;av_theme=av_settings.theme;av_msg_1=av_settings.msg_1;av_msg_2=av_settings.msg_2;av_msg_3=av_settings.msg_3;b("#av_manual a.button").click(function(){b.post(av_ajax,{action:"get_ajax_response",_ajax_nonce:av_nonce,
4
- _action_request:"get_theme_files"},function(a){if(a&&(a=eval("("+a+")"),a.nonce&&a.nonce==av_nonce)){var d="";av_files=a.data;av_files_total=av_files.length;av_files_loaded=0;jQuery.each(av_files,function(a,b){d+='<div id="av_template_'+a+'">'+b+"</div>"});b("#av_manual .alert").empty();b("#av_manual .output").empty().append(d);g()}});return!1});b("#av_cronjob_enable").click(f);f()});
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ jQuery(document).ready(
2
+ function($) {
3
+ /* Init */
4
+ av_nonce = av_settings.nonce;
5
+ av_theme = av_settings.theme;
6
+ av_msg_1 = av_settings.msg_1;
7
+ av_msg_2 = av_settings.msg_2;
8
+ av_msg_3 = av_settings.msg_3;
9
+
10
+ /* Einzelne Datei prüfen */
11
+ function check_theme_file(current) {
12
+ /* ID umwandeln */
13
+ var id = parseInt(current || 0);
14
+
15
+ /* File ermitteln */
16
+ var file = av_files[id];
17
+
18
+ /* Request starten */
19
+ $.post(
20
+ ajaxurl,
21
+ {
22
+ 'action': 'get_ajax_response',
23
+ '_ajax_nonce': av_nonce,
24
+ '_theme_file': file,
25
+ '_action_request': 'check_theme_file'
26
+ },
27
+ function(input) {
28
+ /* Wert initialisieren */
29
+ var item = $('#av_template_' + id);
30
+
31
+ /* Daten vorhanden? */
32
+ if ( input ) {
33
+ /* Input konvertieren */
34
+ input = eval('(' + input + ')');
35
+
36
+ /* Sicherheitscheck */
37
+ if ( !input.nonce || input.nonce != av_nonce ) {
38
+ return;
39
+ }
40
+
41
+ /* Farblich anpassen */
42
+ item.addClass('danger');
43
+
44
+ /* Init */
45
+ var i,
46
+ lines = input.data,
47
+ len = lines.length;
48
+
49
+ /* Zeilen loopen */
50
+ for (i = 0; i < len; i = i + 3) {
51
+ var num = parseInt(lines[i]) + 1,
52
+ md5 = lines[i + 2],
53
+ line = lines[i + 1].replace(/@span@/g, '<span>').replace(/@\/span@/g, '</span>'),
54
+ file = item.text();
55
+
56
+ item.append('<p><a href="#" id="' + md5 + '">' + av_msg_1 + '</a> <code>' + line + '</code></p>');
57
+
58
+ $('#' + md5).click(
59
+ function() {
60
+ $.post(
61
+ ajaxurl,
62
+ {
63
+ 'action': 'get_ajax_response',
64
+ '_ajax_nonce': av_nonce,
65
+ '_file_md5': $(this).attr('id'),
66
+ '_action_request': 'update_white_list'
67
+ },
68
+ function(input) {
69
+ /* Keine Daten? */
70
+ if (!input) {
71
+ return;
72
+ }
73
+
74
+ /* Input konvertieren */
75
+ input = eval('(' + input + ')');
76
+
77
+ /* Sicherheitscheck */
78
+ if (!input.nonce || input.nonce != av_nonce) {
79
+ return;
80
+ }
81
+
82
+ var parent = $('#' + input.data[0]).parent();
83
+
84
+ if (parent.parent().children().length <= 1) {
85
+ parent.parent().hide('slow').remove();
86
+ }
87
+ parent.hide('slow').remove();
88
+ }
89
+ );
90
+
91
+ return false;
92
+ }
93
+ );
94
+ }
95
+ } else {
96
+ item.addClass('done');
97
+ }
98
+
99
+ /* Counter erhöhen */
100
+ av_files_loaded ++;
101
+
102
+ /* Hinweis ausgeben */
103
+ if ( av_files_loaded >= av_files_total ) {
104
+ $('#av_manual_scan .alert').text(av_msg_3).fadeIn().fadeOut().fadeIn().fadeOut().fadeIn().animate({opacity: 1.0}, 500).fadeOut(
105
+ 'slow',
106
+ function() {
107
+ $(this).empty();
108
+ }
109
+ );
110
+ } else {
111
+ check_theme_file(id + 1);
112
+ }
113
+ }
114
+ );
115
+ }
116
+
117
+ /* Tempates Check */
118
+ $('#av_manual_scan a.button').click(
119
+ function() {
120
+ /* Request */
121
+ $.post(
122
+ ajaxurl,
123
+ {
124
+ action: 'get_ajax_response',
125
+ _ajax_nonce: av_nonce,
126
+ _action_request: 'get_theme_files'
127
+ },
128
+ function(input) {
129
+ /* Keine Daten? */
130
+ if ( !input ) {
131
+ return;
132
+ }
133
+
134
+ /* Input konvertieren */
135
+ input = eval('(' + input + ')');
136
+
137
+ /* Sicherheitscheck */
138
+ if ( !input.nonce || input.nonce != av_nonce ) {
139
+ return;
140
+ }
141
+
142
+ /* Wert initialisieren */
143
+ var output = '';
144
+
145
+ /* Globale Werte */
146
+ av_files = input.data;
147
+ av_files_total = av_files.length;
148
+ av_files_loaded = 0;
149
+
150
+ /* Files visualisieren */
151
+ jQuery.each(
152
+ av_files,
153
+ function(i, val) {
154
+ output += '<div id="av_template_' + i + '">' + val + '</div>';
155
+ }
156
+ );
157
+
158
+ /* Werte zuweisen */
159
+ $('#av_manual_scan .alert').empty();
160
+ $('#av_manual_scan .output').empty().append(output);
161
+
162
+ /* Files loopen */
163
+ check_theme_file();
164
+ }
165
+ );
166
+
167
+ return false;
168
+ }
169
+ );
170
+
171
+ /* Checkboxen markieren */
172
+ function manage_options() {
173
+ var $$ = $('#av_cronjob_enable'),
174
+ input = $$.parents('fieldset').find(':text, :checkbox').not($$);
175
+
176
+ if ( typeof $.fn.prop === 'function' ) {
177
+ input.prop('disabled', !$$.prop('checked'));
178
+ } else {
179
+ input.attr('disabled', !$$.attr('checked'));
180
+ }
181
+ }
182
+
183
+ /* Checkbox überwachen */
184
+ $('#av_cronjob_enable').click(manage_options);
185
+
186
+ /* Fire! */
187
+ manage_options();
188
+ }
189
+ );
js/script.min.js ADDED
@@ -0,0 +1,4 @@
 
 
 
 
1
+ jQuery(document).ready(function(b){function g(a){var d=parseInt(a||0);b.post(ajaxurl,{action:"get_ajax_response",_ajax_nonce:av_nonce,_theme_file:av_files[d],_action_request:"check_theme_file"},function(c){var a=b("#av_template_"+d);if(c){c=eval("("+c+")");if(!c.nonce||c.nonce!=av_nonce)return;a.addClass("danger");var e=c.data,f=e.length;for(c=0;c<f;c+=3){parseInt(e[c]);var h=e[c+2],k=e[c+1].replace(/@span@/g,"<span>").replace(/@\/span@/g,"</span>");a.text();a.append('<p><a href="#" id="'+h+'">'+
2
+ av_msg_1+"</a> <code>"+k+"</code></p>");b("#"+h).click(function(){b.post(ajaxurl,{action:"get_ajax_response",_ajax_nonce:av_nonce,_file_md5:b(this).attr("id"),_action_request:"update_white_list"},function(a){a&&(a=eval("("+a+")"),a.nonce&&a.nonce==av_nonce&&(a=b("#"+a.data[0]).parent(),1>=a.parent().children().length&&a.parent().hide("slow").remove(),a.hide("slow").remove()))});return!1})}}else a.addClass("done");av_files_loaded++;av_files_loaded>=av_files_total?b("#av_manual_scan .alert").text(av_msg_3).fadeIn().fadeOut().fadeIn().fadeOut().fadeIn().animate({opacity:1},
3
+ 500).fadeOut("slow",function(){b(this).empty()}):g(d+1)})}function f(){var a=b("#av_cronjob_enable"),d=a.parents("fieldset").find(":text, :checkbox").not(a);"function"===typeof b.fn.prop?d.prop("disabled",!a.prop("checked")):d.attr("disabled",!a.attr("checked"))}av_nonce=av_settings.nonce;av_theme=av_settings.theme;av_msg_1=av_settings.msg_1;av_msg_2=av_settings.msg_2;av_msg_3=av_settings.msg_3;b("#av_manual_scan a.button").click(function(){b.post(ajaxurl,{action:"get_ajax_response",_ajax_nonce:av_nonce,
4
+ _action_request:"get_theme_files"},function(a){if(a&&(a=eval("("+a+")"),a.nonce&&a.nonce==av_nonce)){var d="";av_files=a.data;av_files_total=av_files.length;av_files_loaded=0;jQuery.each(av_files,function(a,b){d+='<div id="av_template_'+a+'">'+b+"</div>"});b("#av_manual_scan .alert").empty();b("#av_manual_scan .output").empty().append(d);g()}});return!1});b("#av_cronjob_enable").click(f);f()});
js/script.orginal.js DELETED
@@ -1,192 +0,0 @@
1
- jQuery(document).ready(
2
- function($) {
3
- /* Init */
4
- av_nonce = av_settings.nonce;
5
- av_ajax = av_settings.ajax;
6
- av_theme = av_settings.theme;
7
- av_msg_1 = av_settings.msg_1;
8
- av_msg_2 = av_settings.msg_2;
9
- av_msg_3 = av_settings.msg_3;
10
-
11
- /* Einzelne Datei prüfen */
12
- function check_theme_file(current) {
13
- /* ID umwandeln */
14
- var id = parseInt(current || 0);
15
-
16
- /* File ermitteln */
17
- var file = av_files[id];
18
-
19
- /* Request starten */
20
- $.post(
21
- av_ajax,
22
- {
23
- 'action': 'get_ajax_response',
24
- '_ajax_nonce': av_nonce,
25
- '_theme_file': file,
26
- '_action_request': 'check_theme_file'
27
- },
28
- function(input) {
29
- /* Wert initialisieren */
30
- var item = $('#av_template_' + id);
31
-
32
- /* Daten vorhanden? */
33
- if ( input ) {
34
- /* Input konvertieren */
35
- input = eval('(' + input + ')');
36
-
37
- /* Sicherheitscheck */
38
- if ( !input.nonce || input.nonce != av_nonce ) {
39
- return;
40
- }
41
-
42
- /* Farblich anpassen */
43
- item.addClass('danger');
44
-
45
- /* Init */
46
- var i,
47
- lines = input.data,
48
- len = lines.length;
49
-
50
- /* Zeilen loopen */
51
- for (i = 0; i < len; i = i + 3) {
52
- var num = parseInt(lines[i]) + 1,
53
- md5 = lines[i + 2],
54
- line = lines[i + 1].replace(/@span@/g, '<span>').replace(/@\/span@/g, '</span>'),
55
- file = item.text();
56
-
57
- item.append('<p><a href="#" id="' + md5 + '">' + av_msg_1 + '</a> <code>' + line + '</code></p>');
58
-
59
- $('#' + md5).click(
60
- function() {
61
- $.post(
62
- av_ajax,
63
- {
64
- 'action': 'get_ajax_response',
65
- '_ajax_nonce': av_nonce,
66
- '_file_md5': $(this).attr('id'),
67
- '_action_request': 'update_white_list'
68
- },
69
- function(input) {
70
- /* Keine Daten? */
71
- if (!input) {
72
- return;
73
- }
74
-
75
- /* Input konvertieren */
76
- input = eval('(' + input + ')');
77
-
78
- /* Sicherheitscheck */
79
- if (!input.nonce || input.nonce != av_nonce) {
80
- return;
81
- }
82
-
83
- var parent = $('#' + input.data[0]).parent();
84
-
85
- if (parent.parent().children().length <= 1) {
86
- parent.parent().hide('slow').remove();
87
- }
88
- parent.hide('slow').remove();
89
- }
90
- );
91
-
92
- return false;
93
- }
94
- );
95
- }
96
- } else {
97
- item.addClass('done');
98
- }
99
-
100
- /* Counter erhöhen */
101
- av_files_loaded ++;
102
-
103
- /* Hinweis ausgeben */
104
- if ( av_files_loaded >= av_files_total ) {
105
- $('#av_manual .alert').text(av_msg_3).fadeIn().fadeOut().fadeIn().fadeOut().fadeIn().animate({opacity: 1.0}, 500).fadeOut(
106
- 'slow',
107
- function() {
108
- $(this).empty();
109
- }
110
- );
111
- } else {
112
- check_theme_file(id + 1);
113
- }
114
- }
115
- );
116
- }
117
-
118
- /* Tempates Check */
119
- $('#av_manual a.button').click(
120
- function() {
121
- /* Request */
122
- $.post(
123
- av_ajax,
124
- {
125
- action: 'get_ajax_response',
126
- _ajax_nonce: av_nonce,
127
- _action_request: 'get_theme_files'
128
- },
129
- function(input) {
130
- /* Keine Daten? */
131
- if ( !input ) {
132
- return;
133
- }
134
-
135
- /* Input konvertieren */
136
- input = eval('(' + input + ')');
137
-
138
- /* Sicherheitscheck */
139
- if ( !input.nonce || input.nonce != av_nonce ) {
140
- return;
141
- }
142
-
143
- /* Wert initialisieren */
144
- var output = '';
145
-
146
- /* Globale Werte */
147
- av_files = input.data;
148
- av_files_total = av_files.length;
149
- av_files_loaded = 0;
150
-
151
- /* Files visualisieren */
152
- jQuery.each(
153
- av_files,
154
- function(i, val) {
155
- output += '<div id="av_template_' + i + '">' + val + '</div>';
156
- }
157
- );
158
-
159
- /* Werte zuweisen */
160
- $('#av_manual .alert').empty();
161
- $('#av_manual .output').empty().append(output);
162
-
163
- /* Files loopen */
164
- check_theme_file();
165
- }
166
- );
167
-
168
- return false;
169
- }
170
- );
171
-
172
- /* Checkboxen markieren */
173
- function manage_options() {
174
- var $$ = $('#av_cronjob_enable'),
175
- input = $$.parents('.form-table').find('input:text');
176
-
177
- if ( typeof $.fn.prop === 'function' ) {
178
- input.prop('disabled', !$$.prop('checked'));
179
- } else {
180
- input.attr('disabled', !$$.attr('checked'));
181
- }
182
-
183
-
184
- }
185
-
186
- /* Checkbox überwachen */
187
- $('#av_cronjob_enable').click(manage_options);
188
-
189
- /* Fire! */
190
- manage_options();
191
- }
192
- );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lang/antivirus-ca.mo DELETED
Binary file
lang/antivirus-ca.po DELETED
@@ -1,56 +0,0 @@
1
- msgid ""
2
- msgstr ""
3
- "Project-Id-Version: AntiVirus\n"
4
- "POT-Creation-Date: \n"
5
- "PO-Revision-Date: \n"
6
- "Last-Translator: Sergej Müller\n"
7
- "Language-Team: Robert Buj Gelonch\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 "Virus suspected"
19
- msgstr "Sospita d'un virus"
20
-
21
- msgid "The daily antivirus scan of your blog suggests alarm."
22
- msgstr "L'escaneig diari de virus del vostre blog suggereix alarmes."
23
-
24
- msgid "AntiVirus for WordPress"
25
- msgstr "AntiVirus per a WordPress"
26
-
27
- msgid "requires at least WordPress 2.5"
28
- msgstr "necessita com a mínim WordPress 2.5"
29
-
30
- msgid "Last"
31
- msgstr "Últim"
32
-
33
- msgid "View line"
34
- msgstr "Visualitzar la línia"
35
-
36
- msgid "There is no virus"
37
- msgstr "No hi han virus"
38
-
39
- msgid "Scan finished"
40
- msgstr "Escaneig finalitzat"
41
-
42
- msgid "Enable the daily antivirus scan and send the administrator an e-mail if suspicion on a virus"
43
- msgstr "Habilitar l'escaneig diari de virus i enviar un correu electrònic a l'administrador si es sospita d'un virus"
44
-
45
- msgid "Alternate e-mail address"
46
- msgstr "Adreça de correu electrònica alternativa"
47
-
48
- msgid "Manual scan"
49
- msgstr "Escaneig manual"
50
-
51
- msgid "Scan the templates now"
52
- msgstr "Escanejar ara les plantilles"
53
-
54
- msgid "About"
55
- msgstr "Quant a"
56
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lang/antivirus-de_DE.mo CHANGED
Binary file
lang/antivirus-de_DE.po CHANGED
@@ -21,12 +21,6 @@ msgstr "Virusverdacht"
21
  msgid "AntiVirus for WordPress"
22
  msgstr "AntiVirus für WordPress"
23
 
24
- msgid "requires at least WordPress 2.8"
25
- msgstr "benötigt WordPress 2.8"
26
-
27
- msgid "Last check"
28
- msgstr "Zuletzt"
29
-
30
  msgid "View line"
31
  msgstr "Zeige Zeile"
32
 
@@ -36,22 +30,28 @@ msgstr "Als 'Kein Virus' markieren"
36
  msgid "Scan finished"
37
  msgstr "Prüfung abgeschlossen"
38
 
39
- msgid "Enable the daily antivirus scan"
40
- msgstr "Tägliche AntiVirus-Prüfung durchführen"
 
 
 
41
 
42
- msgid "Alternate email address"
43
- msgstr "Alternative E-Mail-Adresse"
44
 
45
- msgid "Completed scan"
46
- msgstr "Durchgeführte Prüfung"
47
 
48
- msgid "Permalink back door check"
49
- msgstr "Check auf das Sicherheitsrisiko im Permalink"
50
 
51
- msgid "http://mashable.com/2009/09/05/wordpress-attack/"
52
- msgstr "http://blog.wordpress-deutschland.org/2009/09/05/aeltere-wordpress-versionen-ziel-von-angriffen.html"
53
 
54
- msgid "Manual scan"
 
 
 
55
  msgstr "Manuelle Prüfung"
56
 
57
  msgid "Scan the theme templates now"
@@ -60,18 +60,6 @@ msgstr "Theme-Templates jetzt prüfen"
60
  msgid "The daily antivirus scan of your blog suggests alarm."
61
  msgstr "Die tägliche AntiVirus-Prüfung des Blogs schlägt Alarm."
62
 
63
- msgid "All clear"
64
- msgstr "Verdachtlos"
65
-
66
- msgid "Danger"
67
- msgstr "Gefahr"
68
-
69
- msgid "Flattr plugin"
70
- msgstr "Plugin flattern"
71
-
72
- msgid "Follow on Google+"
73
- msgstr "Auf Google+ folgen"
74
-
75
  msgid "Security solution as a smart, effectively plugin to protect your blog against exploits and spam injections."
76
  msgstr "Kostenfreie Sicherheitslösung als Plugin zur Früherkennung und Warnung vor bösartigen Injektionen in Theme-Templates."
77
 
@@ -81,3 +69,9 @@ msgstr "Benachrichtigung von AntiVirus für WordPress"
81
  msgid "http://wpantivirus.com"
82
  msgstr "http://wpantivirus.de"
83
 
 
 
 
 
 
 
21
  msgid "AntiVirus for WordPress"
22
  msgstr "AntiVirus für WordPress"
23
 
 
 
 
 
 
 
24
  msgid "View line"
25
  msgstr "Zeige Zeile"
26
 
30
  msgid "Scan finished"
31
  msgstr "Prüfung abgeschlossen"
32
 
33
+ msgid "Daily malware scan"
34
+ msgstr "Tägliche Prüfung"
35
+
36
+ msgid "Check the theme templates for malware"
37
+ msgstr "Überprüfung der Theme-Templates auf Malware"
38
 
39
+ msgid "Next Run"
40
+ msgstr "Nächste Ausführung"
41
 
42
+ msgid "Malware detection by Google Safe Browsing"
43
+ msgstr "Malware-Erkennung durch Google Safe Browsing"
44
 
45
+ msgid "Diagnosis and notification in suspicion case"
46
+ msgstr "Diagnose und Benachrichtigung im Verdachtsfall"
47
 
48
+ msgid "Email address for notifications"
49
+ msgstr "E-Mail-Adresse für Benachrichtigungen"
50
 
51
+ msgid "If the field is empty, the blog admin will be notified"
52
+ msgstr "Bleibt das Eingabefeld leer, wird der Admin benachrichtigt"
53
+
54
+ msgid "Manual malware scan"
55
  msgstr "Manuelle Prüfung"
56
 
57
  msgid "Scan the theme templates now"
60
  msgid "The daily antivirus scan of your blog suggests alarm."
61
  msgstr "Die tägliche AntiVirus-Prüfung des Blogs schlägt Alarm."
62
 
 
 
 
 
 
 
 
 
 
 
 
 
63
  msgid "Security solution as a smart, effectively plugin to protect your blog against exploits and spam injections."
64
  msgstr "Kostenfreie Sicherheitslösung als Plugin zur Früherkennung und Warnung vor bösartigen Injektionen in Theme-Templates."
65
 
69
  msgid "http://wpantivirus.com"
70
  msgstr "http://wpantivirus.de"
71
 
72
+ msgid "Safe Browsing Alert"
73
+ msgstr "Safe Browsing Alarm"
74
+
75
+ msgid "Please check the Google Safe Browsing diagnostic page:"
76
+ msgstr "Für weitere Details die Google Safe Browsing Diagnoseseite aufsuchen:"
77
+
lang/antivirus-es_ES.mo ADDED
Binary file
lang/antivirus-es_ES.po ADDED
@@ -0,0 +1,162 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: AntiVirus v1.3.5\n"
4
+ "Report-Msgid-Bugs-To: \n"
5
+ "POT-Creation-Date: \n"
6
+ "PO-Revision-Date: 2014-03-08 22:21:17+0000\n"
7
+ "Last-Translator: Pablo Laguna <laguna.sanchez@gmail.com>\n"
8
+ "Language-Team: \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-Generator: CSL v1.x\n"
14
+ "X-Poedit-Language: Spanish\n"
15
+ "X-Poedit-Country: SPAIN\n"
16
+ "X-Poedit-SourceCharset: utf-8\n"
17
+ "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;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2;\n"
18
+ "X-Poedit-Basepath: ../\n"
19
+ "X-Poedit-Bookmarks: \n"
20
+ "X-Poedit-SearchPath-0: .\n"
21
+ "X-Textdomain-Support: yes"
22
+
23
+ #. translators: plugin header field 'Name'
24
+ #: antivirus.php:0
25
+ #@ antivirus
26
+ msgid "AntiVirus"
27
+ msgstr "AntiVirus"
28
+
29
+ #. translators: plugin header field 'PluginURI'
30
+ #: antivirus.php:0
31
+ #: antivirus.php:505
32
+ #@ antivirus
33
+ msgid "http://wpantivirus.com"
34
+ msgstr "http://wpantivirus.com"
35
+
36
+ #. translators: plugin header field 'Description'
37
+ #: antivirus.php:0
38
+ #@ antivirus
39
+ msgid "Security solution as a smart, effectively plugin to protect your blog against exploits and spam injections."
40
+ msgstr "Solución de seguridad en un sencillo y efectivo plugin para proteger tu blog de agujeros e infecciones."
41
+
42
+ #. translators: plugin header field 'Author'
43
+ #: antivirus.php:0
44
+ #@ antivirus
45
+ msgid "Sergej M&uuml;ller"
46
+ msgstr "Sergej M&uuml;ller"
47
+
48
+ #. translators: plugin header field 'AuthorURI'
49
+ #: antivirus.php:0
50
+ #@ antivirus
51
+ msgid "http://wpcoder.de"
52
+ msgstr "http://wpcoder.de"
53
+
54
+ #. translators: plugin header field 'Version'
55
+ #: antivirus.php:0
56
+ #@ antivirus
57
+ msgid "1.3.5"
58
+ msgstr "1.3.5"
59
+
60
+ #: antivirus.php:182
61
+ #@ default
62
+ msgid "Settings"
63
+ msgstr "Opciones"
64
+
65
+ #: antivirus.php:431
66
+ #@ antivirus
67
+ msgid "Safe Browsing Alert"
68
+ msgstr "Alerta de Safe Browsing"
69
+
70
+ #: antivirus.php:434
71
+ #@ antivirus
72
+ msgid "Please check the Google Safe Browsing diagnostic page:"
73
+ msgstr "Por favor, revisa la página de diagnóstico de Google Safe Browsing:"
74
+
75
+ #: antivirus.php:458
76
+ #: antivirus.php:1125
77
+ #@ antivirus
78
+ msgid "Virus suspected"
79
+ msgstr "Sospecha de virus"
80
+
81
+ #: antivirus.php:461
82
+ #: antivirus.php:1126
83
+ #@ antivirus
84
+ msgid "The daily antivirus scan of your blog suggests alarm."
85
+ msgstr "El análisis antivirus diario de tu blog ha dado una alarma."
86
+
87
+ #: antivirus.php:504
88
+ #@ antivirus
89
+ msgid "Notify message by AntiVirus for WordPress"
90
+ msgstr "Mensaje de notificación de AntiVirus para WordPress"
91
+
92
+ #: antivirus.php:579
93
+ #@ antivirus
94
+ msgid "There is no virus"
95
+ msgstr "No hay virus"
96
+
97
+ #: antivirus.php:580
98
+ #@ antivirus
99
+ msgid "View line"
100
+ msgstr "Ver línea"
101
+
102
+ #: antivirus.php:581
103
+ #@ antivirus
104
+ msgid "Scan finished"
105
+ msgstr "Escaneo finalizado"
106
+
107
+ #: antivirus.php:1133
108
+ #: antivirus.php:1191
109
+ #@ antivirus
110
+ msgid "Manual malware scan"
111
+ msgstr "Escaneo manual de software malicioso"
112
+
113
+ #: antivirus.php:1177
114
+ #@ default
115
+ msgid "Settings saved."
116
+ msgstr "Opciones guardadas."
117
+
118
+ #: antivirus.php:1197
119
+ #@ antivirus
120
+ msgid "Scan the theme templates now"
121
+ msgstr "Escanear los ficheros del tema ahora"
122
+
123
+ #: antivirus.php:1214
124
+ #@ antivirus
125
+ msgid "Daily malware scan"
126
+ msgstr "Escaneo diario de software malicioso"
127
+
128
+ #: antivirus.php:1220
129
+ #@ antivirus
130
+ msgid "Check the theme templates for malware"
131
+ msgstr "Revisar los ficheros del tema en busca de software malicioso"
132
+
133
+ #: antivirus.php:1227
134
+ #@ antivirus
135
+ msgid "Next Run"
136
+ msgstr "Próxima ejecución"
137
+
138
+ #: antivirus.php:1239
139
+ #@ antivirus
140
+ msgid "Malware detection by Google Safe Browsing"
141
+ msgstr "Detección de software malicioso por Google Safe Browsing"
142
+
143
+ #: antivirus.php:1243
144
+ #@ antivirus
145
+ msgid "Diagnosis and notification in suspicion case"
146
+ msgstr "Diagnóstico y notificación en caso de sospecha"
147
+
148
+ #: antivirus.php:1251
149
+ #@ antivirus
150
+ msgid "Email address for notifications"
151
+ msgstr "Dirección electrónica para notificaciones"
152
+
153
+ #: antivirus.php:1255
154
+ #@ antivirus
155
+ msgid "If the field is empty, the blog admin will be notified"
156
+ msgstr "Si el campo está vacío, se enviarán las notificaciones al administrador del sitio"
157
+
158
+ #: antivirus.php:1263
159
+ #@ default
160
+ msgid "Save Changes"
161
+ msgstr "Guardar cambios"
162
+
lang/antivirus-fa_IR.mo DELETED
Binary file
lang/antivirus-fa_IR.po DELETED
@@ -1,90 +0,0 @@
1
- msgid ""
2
- msgstr ""
3
- "Project-Id-Version: AntiVirus\n"
4
- "Report-Msgid-Bugs-To: \n"
5
- "POT-Creation-Date: 2009-12-02 00:46+0330\n"
6
- "PO-Revision-Date: \n"
7
- "Last-Translator: Sergej Müller\n"
8
- "Language-Team: Persian wordpress <mostafa.s1990@gmail.com>\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: Persian\n"
13
- "X-Poedit-Country: IRAN, ISLAMIC REPUBLIC OF\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
- msgid "Settings"
20
- msgstr "تنظیمات"
21
-
22
- msgid "Virus suspected"
23
- msgstr "مظنون به یک ویروس"
24
-
25
- msgid "The daily antivirus scan of your blog suggests alarm."
26
- msgstr "روزانه آنتی ویروس بررسی میکند در وبلاگ شما و اشاره میکند اخطار"
27
-
28
- msgid "AntiVirus for WordPress"
29
- msgstr "آنتی ویروس برای وردپرس"
30
-
31
- msgid "requires at least WordPress 2.6"
32
- msgstr "به نسخه 2.6 وردپرس نياز دارد"
33
-
34
- msgid "Manual scan"
35
- msgstr "بررسی دستی"
36
-
37
- msgid "Plugin"
38
- msgstr "افزونه"
39
-
40
- msgid "Version"
41
- msgstr "نسخه"
42
-
43
- msgid "Author"
44
- msgstr "نویسنده"
45
-
46
- msgid "There is no virus"
47
- msgstr "بدون ویروس یافت شد"
48
-
49
- msgid "View line"
50
- msgstr "مشاهده خط"
51
-
52
- msgid "Scan finished"
53
- msgstr "پایان بررسی"
54
-
55
- msgid "Settings saved."
56
- msgstr "تنظیمات ذخیره شد."
57
-
58
- msgid "All clear"
59
- msgstr "پاك كردن همه"
60
-
61
- msgid "Danger"
62
- msgstr "خطر"
63
-
64
- msgid "Enable the daily antivirus scan and send the administrator an e-mail if suspicion on a virus"
65
- msgstr "فعال بودن آنتی ویروس, روزانه بررسی میکند و در صورت داشتن ویروس در قالب پیغامی به ایمیل شما ارسال میکند. "
66
-
67
- msgid "Last"
68
- msgstr "آخرین"
69
-
70
- msgid "Alternate e-mail address"
71
- msgstr "پست الکترونیک برای اطلاع"
72
-
73
- msgid "Save Changes"
74
- msgstr "ذخیره تغییرات"
75
-
76
- msgid "Completed scan"
77
- msgstr "اسكن كامل شد"
78
-
79
- msgid "Permalink back door check"
80
- msgstr "چك كردن"
81
-
82
- msgid "http://mashable.com/2009/09/05/wordpress-attack/"
83
- msgstr "http://mashable.com/2009/09/05/wordpress-attack/"
84
-
85
- msgid "Scan the theme templates now"
86
- msgstr "بررسي در قالب"
87
-
88
- msgid "About"
89
- msgstr "درباره"
90
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lang/antivirus-it_IT.mo DELETED
Binary file
lang/antivirus-it_IT.po DELETED
@@ -1,56 +0,0 @@
1
- msgid ""
2
- msgstr ""
3
- "Project-Id-Version: AntiVirus\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: 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 "Virus suspected"
19
- msgstr "Sospetto di un virus"
20
-
21
- msgid "The daily antivirus scan of your blog suggests alarm."
22
- msgstr "La scansione giornaliera di antivirus del tuo blog ti avvisa ti un possibile virus"
23
-
24
- msgid "AntiVirus for WordPress"
25
- msgstr "AntiVirus per WordPress"
26
-
27
- msgid "requires at least WordPress 2.5"
28
- msgstr "requires at least WordPress 2.5"
29
-
30
- msgid "Last"
31
- msgstr "Ultimo"
32
-
33
- msgid "View line"
34
- msgstr "Vedi Linea"
35
-
36
- msgid "There is no virus"
37
- msgstr "Non ci sono virus"
38
-
39
- msgid "Scan finished"
40
- msgstr "Scansione finita"
41
-
42
- msgid "Enable the daily antivirus scan and send the administrator an e-mail if suspicion on a virus"
43
- msgstr "Abilita la scansione giornaliera e inviami una e-mail se ci sono sospetti di virus"
44
-
45
- msgid "Alternate e-mail address"
46
- msgstr "Altri E-Mail"
47
-
48
- msgid "Manual scan"
49
- msgstr "Scansione manuale"
50
-
51
- msgid "Scan the templates now"
52
- msgstr "Scansiona i template ora"
53
-
54
- msgid "About"
55
- msgstr "Informazioni"
56
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lang/antivirus-lt_LT.mo DELETED
Binary file
lang/antivirus-lt_LT.po DELETED
@@ -1,115 +0,0 @@
1
- msgid ""
2
- msgstr ""
3
- "Project-Id-Version: AntiVirus v0.4\n"
4
- "Report-Msgid-Bugs-To: k.vycius@gmail.com\n"
5
- "POT-Creation-Date: 2009-07-12\n"
6
- "PO-Revision-Date: 2011-12-05 20:42+0100\n"
7
- "Last-Translator: Sergej Müller\n"
8
- "Language-Team: Karolis Vyčius <k.vycius@gmail.com>\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: Lithuanian\n"
14
- "X-Poedit-Country: LITHUANIA\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
- #: antivirus.php:134
22
- #: antivirus.php:150
23
- #: antivirus.php:722
24
- msgid "Settings"
25
- msgstr "Nustatymai"
26
-
27
- #@ antivirus
28
- #: antivirus.php:206
29
- #: antivirus.php:466
30
- msgid "Virus suspected"
31
- msgstr "Įtarimas dėl viruso"
32
-
33
- #@ antivirus
34
- #: antivirus.php:209
35
- #: antivirus.php:467
36
- msgid "The daily antivirus scan of your blog suggests alarm."
37
- msgstr "Kasdieninė virusų apsauga jūsų bloge problemos"
38
-
39
- #@ antivirus
40
- #: antivirus.php:452
41
- #: antivirus.php:477
42
- msgid "AntiVirus for WordPress"
43
- msgstr "Wordpress Antivirus"
44
-
45
- #@ antivirus
46
- #: antivirus.php:453
47
- msgid "requires at least WordPress 2.6"
48
- msgstr "reikalinga bent WordPress 2.6"
49
-
50
- #@ antivirus
51
- #: antivirus.php:469
52
- #: antivirus.php:746
53
- msgid "Manual scan"
54
- msgstr "Rankinis skenavimas"
55
-
56
- #: antivirus.php:476
57
- msgid "Plugin"
58
- msgstr "Priedas"
59
-
60
- #: antivirus.php:478
61
- msgid "Version"
62
- msgstr "Versija"
63
-
64
- #: antivirus.php:480
65
- msgid "Author"
66
- msgstr "Autorius"
67
-
68
- #@ antivirus
69
- #: antivirus.php:624
70
- msgid "There is no virus"
71
- msgstr "Jokių virusų nebuvo rasta!"
72
-
73
- #@ antivirus
74
- #: antivirus.php:624
75
- msgid "View line"
76
- msgstr "Žiūrėti"
77
-
78
- #@ antivirus
79
- #: antivirus.php:659
80
- msgid "Scan finished"
81
- msgstr "Skenavimas baigtas"
82
-
83
- #: antivirus.php:705
84
- msgid "Settings saved."
85
- msgstr "Nustatymai išsaugoti"
86
-
87
- #@ antivirus
88
- #: antivirus.php:730
89
- msgid "Enable the daily antivirus scan and send the administrator an e-mail if suspicion on a virus"
90
- msgstr "Įjungti kasdieninį virusų skenavimą ir jeigu virusas bus rastas informuoti administratorių el-paštu apie virusus."
91
-
92
- #@ antivirus
93
- #: antivirus.php:731
94
- msgid "Last"
95
- msgstr "Paskutinis"
96
-
97
- #@ antivirus
98
- #: antivirus.php:734
99
- msgid "Alternate e-mail address"
100
- msgstr "Alternatyvus e-mail adresas"
101
-
102
- #: antivirus.php:740
103
- msgid "Save Changes"
104
- msgstr "Išsaugoti pakeitimus"
105
-
106
- #@ antivirus
107
- #: antivirus.php:750
108
- msgid "Scan the templates now"
109
- msgstr "Skenuoti temą dabar"
110
-
111
- #@ antivirus
112
- #: antivirus.php:756
113
- msgid "About"
114
- msgstr "Apie"
115
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lang/antivirus-pt_BR.mo DELETED
Binary file
lang/antivirus-pt_BR.po DELETED
@@ -1,146 +0,0 @@
1
- msgid ""
2
- msgstr ""
3
- "Project-Id-Version: AntiVirus\n"
4
- "Report-Msgid-Bugs-To: \n"
5
- "POT-Creation-Date: 2010-11-17 17:54-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
- "X-Poedit-SearchPath-0: ..\n"
18
-
19
- #: ../antivirus.php:149
20
- #: ../antivirus.php:165
21
- #: ../antivirus.php:681
22
- msgid "Settings"
23
- msgstr "Configurações"
24
-
25
- #: ../antivirus.php:245
26
- #: ../antivirus.php:590
27
- msgid "Virus suspected"
28
- msgstr "Suspeita de vírus"
29
-
30
- #: ../antivirus.php:249
31
- #: ../antivirus.php:591
32
- msgid "The daily antivirus scan of your blog suggests alarm."
33
- msgstr "Alarme da verificação de AntiVírus diária do seu blog."
34
-
35
- #: ../antivirus.php:251
36
- msgid "Notify message by AntiVirus for WordPress"
37
- msgstr "Notifique mensagem por AntiVirus para WordPress"
38
-
39
- #: ../antivirus.php:252
40
- msgid "http://wpantivirus.com"
41
- msgstr "http://wpantivirus.com"
42
-
43
- #: ../antivirus.php:311
44
- msgid "There is no virus"
45
- msgstr "Não há vírus"
46
-
47
- #: ../antivirus.php:312
48
- msgid "View line"
49
- msgstr "Ver linha"
50
-
51
- #: ../antivirus.php:313
52
- msgid "Scan finished"
53
- msgstr "Verificação terminada"
54
-
55
- #: ../antivirus.php:580
56
- #: ../antivirus.php:600
57
- msgid "AntiVirus for WordPress"
58
- msgstr "AntiVírus para WordPress"
59
-
60
- #: ../antivirus.php:581
61
- msgid "requires at least WordPress 2.7"
62
- msgstr "requer pelo menos WordPress v2.7"
63
-
64
- #: ../antivirus.php:593
65
- #: ../antivirus.php:669
66
- msgid "Manual scan"
67
- msgstr "Verificação Manual"
68
-
69
- #: ../antivirus.php:602
70
- msgid "by"
71
- msgstr "por"
72
-
73
- #: ../antivirus.php:603
74
- msgid "Follow on Twitter"
75
- msgstr "Siga no Twitter"
76
-
77
- #: ../antivirus.php:605
78
- msgid "Learn about wpSEO"
79
- msgstr "Saiba mais sobre wpSEO"
80
-
81
- #: ../antivirus.php:630
82
- msgid "Settings saved."
83
- msgstr "Configurações salvas."
84
-
85
- #: ../antivirus.php:645
86
- msgid "Completed scan"
87
- msgstr "Verificação completa"
88
-
89
- #: ../antivirus.php:649
90
- msgid "Permalink back door check"
91
- msgstr "Checar Link Permanente sobre ataque pela porta dos fundos"
92
-
93
- #: ../antivirus.php:649
94
- msgid "http://mashable.com/2009/09/05/wordpress-attack/"
95
- msgstr "http://mashable.com/2009/09/05/wordpress-attack/"
96
-
97
- #: ../antivirus.php:655
98
- msgid "All clear"
99
- msgstr "Tudo limpo"
100
-
101
- #: ../antivirus.php:661
102
- msgid "Danger"
103
- msgstr "Perigo"
104
-
105
- #: ../antivirus.php:673
106
- msgid "Scan the theme templates now"
107
- msgstr "Verificar os temas agora"
108
-
109
- #: ../antivirus.php:689
110
- msgid "Enable the daily antivirus scan"
111
- msgstr "Ative a verificação diária do antivírus"
112
-
113
- #: ../antivirus.php:693
114
- msgid "Last check"
115
- msgstr "Última verificação"
116
-
117
- #: ../antivirus.php:699
118
- msgid "Alternate email address"
119
- msgstr "Endereço de email alternativo"
120
-
121
- #: ../antivirus.php:705
122
- msgid "Save Changes"
123
- msgstr "Salvar Alterações"
124
-
125
- #: ../antivirus.php:711
126
- msgid "About"
127
- msgstr "Sobre"
128
-
129
- #~ msgid "Plugin"
130
- #~ msgstr "Plugin"
131
-
132
- #~ msgid "Version"
133
- #~ msgstr "Versão"
134
-
135
- #~ msgid "Author"
136
- #~ msgstr "Autor"
137
-
138
- #~ msgid ""
139
- #~ "Enable the daily antivirus scan and send the administrator an e-mail if "
140
- #~ "Virus suspected"
141
- #~ msgstr ""
142
- #~ "Ativar o antivírus diariamente, verificar e enviar ao administrador um "
143
- #~ "email se há suspeita de um vírus."
144
-
145
- #~ msgid "Last"
146
- #~ msgstr "Último"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lang/antivirus-ro_RO.mo DELETED
Binary file
lang/antivirus-ro_RO.po DELETED
@@ -1,87 +0,0 @@
1
- msgid ""
2
- msgstr ""
3
- "Project-Id-Version: \n"
4
- "Report-Msgid-Bugs-To: \n"
5
- "POT-Creation-Date: 2010-08-16 20:18+0200\n"
6
- "PO-Revision-Date: \n"
7
- "Last-Translator: Sergej Müller\n"
8
- "Language-Team: \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-SearchPath-0: C:\\Documents and Settings\\Administrator\\Desktop\\quotes-collection\\languages\n"
15
-
16
- msgid "Settings"
17
- msgstr "Setări"
18
-
19
- msgid "Virus suspected"
20
- msgstr "Suspiciune de virus"
21
-
22
- msgid "The daily antivirus scan of your blog suggests alarm."
23
- msgstr "Scanarea zilnică a șablonului activ al blogului tău te alarmează."
24
-
25
- msgid "There is no virus"
26
- msgstr "Nu este virus"
27
-
28
- msgid "View line"
29
- msgstr "Afișează linia"
30
-
31
- msgid "Scan finished"
32
- msgstr "Scanare finalizată"
33
-
34
- msgid "AntiVirus for WordPress"
35
- msgstr "AntiVirus pentru WordPress"
36
-
37
- msgid "requires at least WordPress 2.7"
38
- msgstr "Necesită WordPress 2.7 sau mai recent"
39
-
40
- msgid "Manual scan"
41
- msgstr "Scanare manuală"
42
-
43
- msgid "by"
44
- msgstr "de"
45
-
46
- msgid "Follow on Twitter"
47
- msgstr "Urmărește pe Twitter"
48
-
49
- msgid "Learn about wpSEO"
50
- msgstr "Află despre wpSEO"
51
-
52
- msgid "Settings saved."
53
- msgstr "Setările au fost salvate"
54
-
55
- msgid "Completed scan"
56
- msgstr "Scanare completă"
57
-
58
- msgid "Permalink back door check"
59
- msgstr "Verificare legătură permanentă pentru back door"
60
-
61
- msgid "http://mashable.com/2009/09/05/wordpress-attack/"
62
- msgstr "http://mashable.com/2009/09/05/wordpress-attack/"
63
-
64
- msgid "All clear"
65
- msgstr "În regulă"
66
-
67
- msgid "Danger"
68
- msgstr "Pericol"
69
-
70
- msgid "Scan the theme templates now"
71
- msgstr "Scanează acum directorul șablonului activ"
72
-
73
- msgid "Enable the daily antivirus scan"
74
- msgstr "Activează scanarea zilnică"
75
-
76
- msgid "Last check"
77
- msgstr "Ultima verificare"
78
-
79
- msgid "Alternate email address"
80
- msgstr "Adresă email alternativă"
81
-
82
- msgid "Save Changes"
83
- msgstr "Salvează schimbările"
84
-
85
- msgid "About"
86
- msgstr "Despre"
87
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lang/antivirus-ru_RU.mo DELETED
Binary file
lang/antivirus-ru_RU.po DELETED
@@ -1,77 +0,0 @@
1
- msgid ""
2
- msgstr ""
3
- "Project-Id-Version: Antivirus\n"
4
- "Report-Msgid-Bugs-To: wp-polyglots@lists.automattic.com\n"
5
- "POT-Creation-Date: 2009-05-27 20:55+0000\n"
6
- "PO-Revision-Date: \n"
7
- "Last-Translator: Sergej Müller\n"
8
- "Language-Team: Elvis <presley_el@mail.ru>\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: Russian\n"
13
- "X-Poedit-Country: RUSSIAN FEDERATION\n"
14
-
15
- msgid "Virus suspected"
16
- msgstr "Подозрение на вирус"
17
-
18
- msgid "AntiVirus for WordPress"
19
- msgstr "AntiVirus для WordPress"
20
-
21
- msgid "requires at least WordPress 2.7"
22
- msgstr "требуется по меньшей мере WordPress 2.7"
23
-
24
- msgid "Last check"
25
- msgstr "Последний"
26
-
27
- msgid "View line"
28
- msgstr "Посмотреть строку в редакторе"
29
-
30
- msgid "There is no virus"
31
- msgstr "Это не вирус"
32
-
33
- msgid "Scan finished"
34
- msgstr "Сканирование завершено"
35
-
36
- msgid "Enable the daily antivirus scan"
37
- msgstr "Включить ежедневное сканирование антивирусом"
38
-
39
- msgid "Alternate email address"
40
- msgstr "Ввести альтернативный email"
41
-
42
- msgid "Completed scan"
43
- msgstr "Завершено сканирование"
44
-
45
- msgid "Permalink back door check"
46
- msgstr "Проверка на Permalink back door"
47
-
48
- msgid "http://mashable.com/2009/09/05/wordpress-attack/"
49
- msgstr "http://blog.wordpress-deutschland.org/2009/09/05/aeltere-wordpress-versionen-ziel-von-angriffen.html"
50
-
51
- msgid "Manual scan"
52
- msgstr "Ручное сканирование"
53
-
54
- msgid "Scan the templates now"
55
- msgstr "Сканировать скины на вирусы"
56
-
57
- msgid "The daily antivirus scan of your blog suggests alarm."
58
- msgstr "Ежедневный осмотр AntiVirus в блоге бьет тревогу."
59
-
60
- msgid "All clear"
61
- msgstr "Все ясно"
62
-
63
- msgid "Danger"
64
- msgstr "Опасность"
65
-
66
- msgid "Learn about wpSEO"
67
- msgstr "Узнайте больше о wpSEO"
68
-
69
- msgid "Follow on Twitter"
70
- msgstr "Следуйте на Twitter"
71
-
72
- msgid "About"
73
- msgstr "О плагине"
74
-
75
- msgid "by"
76
- msgstr "от"
77
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
readme.txt CHANGED
@@ -1,9 +1,9 @@
1
  === AntiVirus ===
2
  Contributors: sergej.mueller
3
- Tags: antivirus, malware, scanner
4
  Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=5RDDW9FEHGLG6
5
- Requires at least: 2.8
6
- Tested up to: 3.4
7
  Stable tag: trunk
8
 
9
 
@@ -17,6 +17,7 @@ Useful plugin that will scan your theme templates for malicious injections. Auto
17
  = Scan & Notify =
18
  *AntiVirus for WordPress* is a easy and safe tool to protect your blog install against exploits, malware and spam injections. Scan your templates now!
19
 
 
20
  = Features =
21
  * Virus alert in the admin bar
22
  * Cleaning up after plugin removal
@@ -26,23 +27,49 @@ Useful plugin that will scan your theme templates for malicious injections. Auto
26
  * WordPress 3.x ready: both visually and technically
27
  * Whitelist solution: Mark suspected cases as "no virus"
28
  * Manual check of template files with alerts on suspected cases
 
 
29
 
30
  = Requirements =
31
  * PHP 5.1
32
- * WordPress 2.8
 
 
 
 
 
 
33
 
34
  = Documentation =
35
  * [Sicherheit: AntiVirus für WordPress](http://playground.ebiene.de/antivirus-wordpress-plugin/ "AntiVirus für WordPress") (DE)
36
 
 
 
 
 
 
37
  = Author =
38
- * [Google+](https://plus.google.com/110569673423509816572 "Google+")
39
- * [Plugins](http://wpcoder.de "Plugins")
40
- * [Portfolio](http://ebiene.de "Portfolio")
 
41
 
42
 
43
 
44
  == Changelog ==
45
 
 
 
 
 
 
 
 
 
 
 
 
 
46
  = 1.3.2 =
47
  * Remove the check for include and require commands (#wpforce)
48
 
@@ -113,6 +140,7 @@ Useful plugin that will scan your theme templates for malicious injections. Auto
113
 
114
 
115
 
 
116
  == Screenshots ==
117
 
118
  1. WordPress AntiVirus settings
1
  === AntiVirus ===
2
  Contributors: sergej.mueller
3
+ Tags: antivirus, malware, scanner, phishing, safe browsing
4
  Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=5RDDW9FEHGLG6
5
+ Requires at least: 3.8
6
+ Tested up to: 3.9
7
  Stable tag: trunk
8
 
9
 
17
  = Scan & Notify =
18
  *AntiVirus for WordPress* is a easy and safe tool to protect your blog install against exploits, malware and spam injections. Scan your templates now!
19
 
20
+
21
  = Features =
22
  * Virus alert in the admin bar
23
  * Cleaning up after plugin removal
27
  * WordPress 3.x ready: both visually and technically
28
  * Whitelist solution: Mark suspected cases as "no virus"
29
  * Manual check of template files with alerts on suspected cases
30
+ * Optional: Google Safe Browsing for malware and phishing monitoring.
31
+
32
 
33
  = Requirements =
34
  * PHP 5.1
35
+ * WordPress 3.8
36
+
37
+
38
+ = Donation =
39
+ * [Flattr](https://flattr.com/t/1322865)
40
+ * [PayPal](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=5RDDW9FEHGLG6)
41
+
42
 
43
  = Documentation =
44
  * [Sicherheit: AntiVirus für WordPress](http://playground.ebiene.de/antivirus-wordpress-plugin/ "AntiVirus für WordPress") (DE)
45
 
46
+
47
+ = Website =
48
+ * [wpantivirus.com](http://wpantivirus.com)
49
+
50
+
51
  = Author =
52
+ * [Twitter](https://twitter.com/wpSEO)
53
+ * [Google+](https://plus.google.com/110569673423509816572)
54
+ * [Plugins](http://wpcoder.de)
55
+
56
 
57
 
58
 
59
  == Changelog ==
60
 
61
+ = 1.3.5 =
62
+ * Deutsch: Optimierungen für WordPress 3.8
63
+ * English: Optimizations for WordPress 3.8
64
+
65
+ = 1.3.4 =
66
+ * Deutsch: Benachrichtigung per E-Mail, sobald [Google Safe Browsing](http://en.wikipedia.org/wiki/Google_Safe_Browsing) Malware im Blog erkennt. [Mehr auf Google+](https://plus.google.com/110569673423509816572/posts/H72FFwvna1i)
67
+ * English: [Google Safe Browsing](http://en.wikipedia.org/wiki/Google_Safe_Browsing) for malware and phishing monitoring.
68
+
69
+ = 1.3.3 =
70
+ * Add inspection for iFrames
71
+ * Retina support for teaser and screenshot
72
+
73
  = 1.3.2 =
74
  * Remove the check for include and require commands (#wpforce)
75
 
140
 
141
 
142
 
143
+
144
  == Screenshots ==
145
 
146
  1. WordPress AntiVirus settings
screenshot-1.png DELETED
Binary file