iubenda Cookie Solution for GDPR - Version 1.14.0-beta

Version Description

  • New: Multilingual support
  • Fix: Multiple classes no longer being added to script tags
  • Fix: Buffering action hooks adjustments
  • General rewrite using WordPress coding standards
  • Turned into OOP
Download this release

Release Info

Developer Facens
Plugin Icon 128x128 iubenda Cookie Solution for GDPR
Version 1.14.0-beta
Comparing to
See all releases

Code changes from version 1.11.2-beta2 to 1.14.0-beta

Files changed (2) hide show
  1. iubenda_cookie_solution.php +504 -804
  2. readme.txt +16 -13
iubenda_cookie_solution.php CHANGED
@@ -1,876 +1,576 @@
1
  <?php
2
-
3
- /*
4
- * Plugin Name: Iubenda Cookie Solution
5
- * Plugin URI: https://www.iubenda.com
6
- * Description: Iubenda Cookie Solution permette di gestire tutti gli aspetti della cookie law su WP.
7
- * Author: iubenda
8
- * Version: 1.11.2-beta2
9
- * Text Domain: iubenda-cookie-wp-plugin
10
- * Author URI: https://www.iubenda.com
11
- */
12
-
13
- define("IUB_DEBUG", 0);
14
- define("IUB_REGEX_PATTERN", "/<!--IUB_COOKIE_POLICY_START-->(.*)<!--IUB_COOKIE_POLICY_END-->/sU");
15
-
16
- /*
17
- * External resources
18
- */
19
-
20
- define("IUB_HTML_DOM", "/iubenda-cookie-class/simple_html_dom.php");
21
- define("IUB_CLASS_FASTER", "/iubenda-cookie-class/iubenda.class.faster.php");
22
- define("IUB_CLASS_DEFAULT", "/iubenda-cookie-class/iubenda.class.php");
 
 
 
 
 
 
 
 
 
 
 
23
 
24
- /**/
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
25
 
26
- function iubenda_autofix_auto()
27
- {
28
- if(isset($_POST["iubenda_autofix"])) {
29
-
30
- update_option("skip_parsing", false);
31
-
 
 
32
  }
 
 
 
 
 
 
 
 
 
33
  }
34
 
35
- add_action('wp_ajax_iubenda-autofix-post', 'iubenda_autofix_auto');
36
- add_action('wp_ajax_nopriv_iubenda-autofix-post', 'iubenda_autofix_auto');
37
-
38
- /**/
39
-
40
- if(defined("XMLRPC_REQUEST") && XMLRPC_REQUEST || defined("DOING_AJAX") && DOING_AJAX || isset($_SERVER["HTTP_X_REQUESTED_WITH"]) || isset($_GET["iub_no_parse"])) {
41
-
42
- return;
43
-
44
  }
45
 
46
- /**/
47
-
48
- function __iubenda_initialize_output()
49
- {
50
- ob_start("__iubenda_final_output");
 
 
 
 
51
  }
52
 
53
- add_action("registered_taxonomy", "__iubenda_initialize_output", 0);
54
-
55
- /****/
56
-
57
- function iubenda_detect_conflicts()
58
- {
59
- if(!function_exists("get_plugins")) {
60
-
61
- return false;
62
-
63
- }
64
-
65
- /*
66
- Blacklist
67
- */
68
-
69
- $blacklist = array
70
- (
71
- "WP Super Cache"
72
- );
73
-
74
- $plugins = get_plugins();
75
-
76
- foreach($plugins as $plugin)
77
- {
78
- foreach($blacklist as $black)
79
- {
80
- if($plugin["Name"] === $black) {
81
-
82
- return true;
83
-
84
- }
85
- }
86
- }
87
- }
88
-
89
- function iubenda_conflicts_notice()
90
- {
91
- echo '
92
- <div class="notice notice-error is-dismissible">
93
- <p id="iubenda-fix-text"><a href="#iubenda-fix" id="iubenda-fix">fix it</a> - iubenda</p>
94
- </div>
95
- <script type="text/javascript">
96
- document.getElementById("iubenda-fix").onclick = function(e)
97
- {
98
- e.preventDefault();
99
-
100
- jQuery.ajax({
101
- type: "POST",
102
- url: "http://" + document.location.hostname + ":8888/wp-admin/admin-ajax.php",
103
- data: {
104
-
105
- action: "iubenda-autofix-post",
106
- iubenda_autofix: "true"
107
-
108
- },
109
- dataType: "json"
110
- }).done(function(json){}).fail(function(){});
111
- }
112
- </script>
113
- ';
114
  }
115
 
116
- /***/
117
-
118
- function iubenda_load_admin_panel()
119
- {
120
- /*
121
- * Checks
122
- */
123
-
124
- if(function_exists("icl_object_id")) {
125
-
126
- define("IUBENDA_WPML", true);
127
-
128
- }
129
-
130
- if(!function_exists("file_get_html"))
131
- {
132
- require(dirname(__FILE__).IUB_HTML_DOM);
133
- }
134
-
135
- require(dirname(__FILE__).IUB_CLASS_FASTER);
136
- require(dirname(__FILE__).IUB_CLASS_DEFAULT);
137
-
138
- /*
139
- * Admin
140
- */
141
-
142
- if(is_admin()) {
143
-
144
- add_action("admin_menu", "iub_admin");
145
-
146
- }
147
  }
148
 
149
- add_action("plugins_loaded", "iubenda_load_admin_panel");
 
 
 
 
 
 
 
 
150
 
151
- /****/
 
 
152
 
153
- function __iubenda_content_type()
154
- {
155
- if(get_option("iubenda_ctype"))
156
- {
157
- $iub_headers = headers_list();
158
- $destroy = true;
159
-
160
- /**/
161
-
162
- foreach($iub_headers as $h)
163
- {
164
- if(strpos($h, "Content-Type: text/html") !== false || strpos($h, "Content-type: text/html") !== false)
165
- {
166
- $destroy = false;
167
- }
168
- }
169
-
170
- /**/
171
-
172
- if($destroy) {
173
-
174
- define("IUBENDA_NO_HTML", true);
175
-
176
- }
177
- }
178
  }
179
-
180
- /***/
181
-
182
- function __iubenda_buffer_head()
183
- {
184
- /*
185
- * iubenda user logged in
186
- */
187
-
188
- if(!get_option("default_skip_parsing")) {
189
- update_option("default_skip_parsing", true);
190
- update_option("skip_parsing", true);
191
- }
192
- if(!get_option("default_iubendactype")) {
193
- update_option("default_iubendactype", true);
194
- update_option("iubenda_ctype", true);
195
- }
196
- if(!get_option("default_iubendaparse")) {
197
- update_option("default_iubendaparse", true);
198
- update_option("iubenda_parse", true);
199
- }
200
- if(!get_option("default_parser_engine")) {
201
- update_option("default_parser_engine", true);
202
- update_option("parser_engine", "default");
203
  }
204
-
205
-
206
- /**/
207
-
208
- __iubenda_content_type();
209
-
 
 
 
 
 
 
 
 
 
 
 
210
  /*
211
- Check if user is logged in, then disable the banner.
212
-
213
- if(function_exists("is_user_logged_in"))
214
- {
215
- if(is_user_logged_in())
216
- {
217
- return;
218
- }
219
- }
220
-
221
  */
222
- if($_POST || defined("IUBENDA_NO_HTML"))
223
- {
224
  return;
225
  }
226
-
227
- /*
228
- * __iubenda_buffer_head
229
- */
230
-
231
  $iubenda_code = "";
232
-
233
- /**/
234
-
235
- if(get_option("iub_code"))
236
- {
237
- $wpml_old = html_entity_decode(stripslashes(get_option("iub_code")));
238
-
239
- $iubenda_languages = array("it", "de", "en", "es", "pt-br", "ru", "fr");
240
-
241
- foreach($iubenda_languages as $iubenda_language)
242
- {
243
- if(strpos($wpml_old, 'lang: "'.$iubenda_language) !== false) {
244
- $language_tag = $iubenda_language;
245
-
246
- break;
247
- }
248
- }
249
-
250
- update_option("iubenda-code-$language_tag", $wpml_old);
251
- update_option("iubenda-code-default", $wpml_old);
252
- update_option("iub_code", false);
253
- }
254
-
255
- if(defined("IUBENDA_WPML") && get_option("iubenda-code-".ICL_LANGUAGE_CODE))
256
- {
257
- $iubenda_code .= get_option("iubenda-code-".ICL_LANGUAGE_CODE);
258
  }
259
- else {
260
-
261
- $iubenda_code .= get_option("iubenda-code-default");
262
-
 
263
  }
264
-
265
  $iubenda_code .= "\n
266
- <script>
267
- var iCallback = function(){};
268
-
269
- if('callback' in _iub.csConfiguration)
270
- {
271
- if('onConsentGiven' in _iub.csConfiguration.callback) iCallback = _iub.csConfiguration.callback.onConsentGiven;
272
-
273
- _iub.csConfiguration.callback.onConsentGiven = function()
274
- {
275
- iCallback();
276
-
277
- /*
278
- * Separator
279
- */
280
-
281
- jQuery('noscript._no_script_iub').each(function (a, b) { var el = jQuery(b); el.after(el.html()); });
282
- };
283
- };
284
- </script>";
285
-
286
- /**/
287
 
288
- echo($iubenda_code);
 
 
 
 
 
 
 
 
 
 
289
  }
290
-
291
- add_action("wp_head", "__iubenda_buffer_head", 99);
292
-
293
- /****/
294
-
295
- function __iubenda_final_output($output)
296
- {
297
- if(strpos($output, "<html") === false) {
298
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
299
  return $output;
300
-
301
  }
302
- elseif(strpos($output, "<html") > 200 ) {
303
-
 
304
  return $output;
305
-
306
- }
307
 
308
- if(!get_option("iubenda_parse") || Page::consent_given() && get_option("skip_parsing") || Page::bot_detected() || $_POST || defined("IUBENDA_NO_HTML") || get_option("iubenda_output_filter") && ob_get_level() > 1) {
309
-
310
  return $output;
311
-
312
  }
 
313
 
314
- /**/
315
-
316
- if(function_exists("is_user_logged_in")) { if(is_user_logged_in()) { return $output; } }
317
- if(function_exists("is_feed") && get_option("iubenda_output_feed")) { if(is_feed()) { return $output; } }
318
-
319
- /**/
320
-
321
- $startime = microtime(true);
322
-
323
- /**/
324
 
325
- if(get_option("parser_engine") == "new")
326
- {
327
- $faster = new iubendaFaster;
328
-
329
- /**/
330
-
331
- $output = $faster -> isParse(mb_convert_encoding($output, "HTML-ENTITIES", "UTF-8"));
332
-
333
- /**/
334
-
335
- $signature = "Parsed with iubenda experimental class in ";
336
  }
337
- else
338
- {
339
- $page = new iubendaPage($output);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
340
  $page->parse();
341
-
342
- /**/
343
-
344
  $output = $page->get_converted_page();
345
-
346
- /**/
347
-
348
- $signature = "Parsed with iubenda default class in ";
349
  }
350
-
351
- /**/
352
-
353
- $output .= "<!-- ".$signature.round(microtime(true) - $startime, 4)."s -->";
354
-
355
- /**/
356
-
357
- return $output;
358
  }
359
 
360
- add_filter("final_output", "__iubenda_final_output");
361
-
362
- /**/
363
-
364
- function iub_func($atts, $content = "") {
365
- return '<!--IUB_COOKIE_POLICY_START-->'.do_shortcode($content).'<!--IUB_COOKIE_POLICY_END-->';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
366
  }
367
 
368
- add_shortcode('iub-cookie-policy', 'iub_func');
369
-
370
- /****/
371
-
372
- function iub_admin()
373
- {
374
- if(iubenda_detect_conflicts() && get_option("skip_parsing")) {
375
-
376
- add_action("admin_notices", "iubenda_conflicts_notice");
377
-
378
  }
379
 
380
- add_menu_page("Iubenda - Settings", "Iubenda", "administrator", __FILE__, "__iub_admin_load");
381
- }
382
-
383
- /****/
384
-
385
- function __iub_admin_load(){
386
-
387
- if(get_option("iub_code")) {
388
- $wpml_old = html_entity_decode(stripslashes(get_option("iub_code")));
389
-
390
- $iubenda_languages = array("it", "de", "en", "es", "pt-br", "ru", "fr");
391
-
392
- foreach($iubenda_languages as $iubenda_language)
393
- {
394
- if(strpos($wpml_old, 'lang: "'.$iubenda_language) !== false)
395
- {
396
- $language_tag = $iubenda_language;
397
-
398
- break;
399
- }
400
- }
401
-
402
- update_option("iubenda-code-$language_tag", $wpml_old);
403
- update_option("iubenda-code-default", $wpml_old);
404
- update_option("iub_code", false);
405
  }
406
 
407
- if (!current_user_can( 'manage_options' ) && ( ! defined( 'DOING_AJAX' ) || ! DOING_AJAX ) ) {
408
- wp_die( __( 'You are not allowed to access this part of the site' ) );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
409
  }
410
-
411
- $iubenda_language = array("it", "de", "en", "es", "pt-br", "ru", "fr", "default");
412
-
413
- if($_POST)
414
- {
415
- if(!empty($_POST['skip_parsing'])) {
416
- update_option("skip_parsing", "skip");
417
- }
418
- else {
419
- update_option("skip_parsing", false);
420
- }
421
- if(!empty($_POST['iubenda_ctype'])) {
422
- update_option("iubenda_ctype", true);
423
- }
424
- else {
425
- update_option("iubenda_ctype", false);
426
- }
427
- if(!empty($_POST['iubenda_parse'])) {
428
- update_option("iubenda_parse", true);
429
- }
430
- else {
431
- update_option("iubenda_parse", false);
432
- }
433
- if(!empty($_POST['iubenda_output_filter'])) {
434
- update_option("iubenda_output_filter", true);
435
- }
436
- else {
437
- update_option("iubenda_output_filter", false);
438
- }
439
- if(!empty($_POST['iubenda_output_feed'])) {
440
- update_option("iubenda_output_feed", true);
441
- }
442
- else {
443
- update_option("iubenda_output_feed", false);
444
- }
445
-
446
- if($_POST["parser_engine"] == "default") update_option("parser_engine", "default");
447
- if($_POST["parser_engine"] == "new") update_option("parser_engine", "new");
448
- }
449
-
450
- /*
451
- Enabled by default.
452
- */
453
-
454
- if(!get_option("default_skip_parsing")) {
455
- update_option("default_skip_parsing", true);
456
- update_option("skip_parsing", "skip");
457
  }
458
- if(!get_option("default_parser_engine")) {
459
- update_option("default_parser_engine", true);
460
- update_option("parser_engine", "default");
461
  }
462
- if(!get_option("default_iubendactype")) {
463
- update_option("default_iubendactype", true);
464
- update_option("iubenda_ctype", true);
465
  }
466
- if(!get_option("default_iubendaparse")) {
467
- update_option("default_iubendaparse", true);
468
- update_option("iubenda_parse", true);
469
  }
470
- if(!get_option("default_iubenda_output_feed")) {
471
- update_option("default_iubenda_output_feed", true);
472
- update_option("iubenda_output_feed", true);
473
- }
474
-
475
- /**/
476
-
477
- if($_POST)
478
- {
479
- foreach($iubenda_language as $iub_check)
480
- {
481
- if(!empty($_POST["iubenda-code-$iub_check"])) {
482
- update_option("iubenda-code-$iub_check", stripslashes($_POST["iubenda-code-$iub_check"]));
483
- }
484
- }
485
- }
486
-
487
- /**/
488
-
489
  $checked = "";
490
  $checked_ctype = "";
491
  $checked_parse = "";
492
  $checked_output_feed = "";
493
  $checked_output_filter = "";
494
-
495
- if(get_option("iubenda_parse")) $checked_parse = 'checked="true"';
496
- if(get_option("skip_parsing")) $checked = 'checked="true"';
497
- if(get_option("iubenda_ctype")) $checked_ctype = 'checked="true"';
498
- if(get_option("iubenda_output_feed")) $checked_output_feed = 'checked="true"';
499
- if(get_option("iubenda_output_filter")) $checked_output_filter = 'checked="true"';
500
-
 
 
 
 
 
501
  $parser_engine_default = "";
502
  $parser_engine_new = "";
503
-
504
- if(get_option("parser_engine") == "default") $parser_engine_default = 'checked="true"';
505
- if(get_option("parser_engine") == "new") $parser_engine_new = 'checked="true"';
506
-
507
- /**/
508
-
509
- echo '
510
- <style>
511
- #iubenda-view
512
- {
513
- display: table;
514
-
515
- width: 90%;
516
- margin: 50px auto;
517
-
518
- border-radius: 2px;
519
- background-color: #FFFFFF;
520
- box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.1)
521
- }
522
- #iubenda-tabs
523
- {
524
- display: table;
525
- width: 80%;
526
- margin: 50px auto;
527
- }
528
-
529
- .iubenda-tab
530
- {
531
- cursor: pointer;
532
-
533
- display: inline-table;
534
- padding: 10px 15px;
535
- padding-top: 0;
536
- margin-right: 10px;
537
-
538
- background-color: #FFFFFF;
539
- border-top: 2px solid #454545;
540
- box-shadow: 0 -2px 3px 0 rgba(5, 5, 5, 0.2);
541
-
542
- color: #454545
543
- }
544
- .iubenda-tab:before, .iubenda-tab::before
545
- {
546
- content: "";
547
-
548
- display: table;
549
- margin: auto;
550
- margin-bottom: 8px;
551
-
552
- border-style: solid;
553
- border-width: 5px 5px 0;
554
- border-color: transparent transparent;
555
- }
556
-
557
- #iubenda-code-it, #iubenda-code-de, #iubenda-code-ru, #iubenda-code-es, #iubenda-code-pt-br, #iubenda-code-en, #iubenda-code-fr {
558
- display: none;
559
-
560
- width: 100%;
561
-
562
- background-color: #FFFFFF;
563
- box-shadow: 0 0 3px 0 rgba(5, 5, 5, 0.2);
564
- }
565
-
566
- #iubenda-information
567
- {
568
- width: 100%;
569
- padding-top: 25px;
570
- padding-bottom: 25px;
571
-
572
-
573
- text-indent: 20px;
574
-
575
- background-color: #FFFFFF;
576
- box-shadow: 0 0 3px 0 rgba(5, 5, 5, 0.2);
577
- }
578
-
579
- .iubenda-textarea
580
- {
581
- display: block;
582
- width: 95%; height: 300px;
583
- margin: 20px auto;
584
-
585
- overflow-y: scroll;
586
-
587
- outline: none;
588
- resize: vertical
589
- }
590
-
591
- .iubenda-textarea-single {
592
- width: 100%;
593
- box-shadow: 0 0 3px 0 rgba(5, 5, 5, 0.2);
594
- }
595
-
596
- [data-active-tab]
597
- {
598
- border-color: #1FAD81;
599
-
600
- color: #1FAD81
601
- }
602
- [data-active-tab]:before, [data-active-tab]::before
603
- {
604
- border-color: #1FAD81 transparent
605
- }
606
-
607
- #iubenda-logo {
608
- display: table;
609
- }
610
-
611
- .iubenda-link {
612
- display: table;
613
- margin: 55px auto;
614
- }
615
-
616
- #iubenda-save
617
- {
618
- transition: background-color 300ms, box-shadow 300ms;
619
- cursor: pointer;
620
-
621
- display: table;
622
- margin: 20px 0;
623
- padding: 5px 10px;
624
-
625
- background-color: #1FAD81;
626
- border: none;
627
- border-radius: 1px;
628
- box-shadow: 0 0 3px 0 rgba(5, 5, 5, 0.2);
629
-
630
- color: #FFFFFF
631
- }
632
- #iubenda-save:hover
633
- {
634
- background-color: #199C71;
635
- box-shadow: 0 0 4px 0 rgba(5, 5, 5, 0.5);
636
- }
637
-
638
- #iubenda-saved
639
- {
640
- display: table;
641
- margin: 10px 0;
642
- width: 100%; height: 30px;
643
-
644
- background-color: #199C71;
645
- border-radius: 1px;
646
- box-shadow: 0 0 3px 0 rgba(5, 5, 5, 0.2);
647
- }
648
- #iubenda-saved p
649
- {
650
- display: table;
651
- margin: 10px;
652
-
653
- color: #FFFFFF
654
- }
655
-
656
- .iubenda-text
657
- {
658
- display: table;
659
- width: 80%;
660
- margin: 5px auto;
661
-
662
- color: #434149
663
- }
664
- .iubenda-title
665
- {
666
- display: table;
667
- margin-top: 10px;
668
-
669
- font-weight: bold;
670
- }
671
- .iubenda-url
672
- {
673
- display: inline-table;
674
- margin-bottom: 10px;
675
- }
676
-
677
- #parser_engine label input
678
- {
679
- margin-right: 5px
680
- }
681
-
682
- #parser_engine, #par_skip_parsing, #par_iubenda_output_filter {
683
- margin-left: 30px;
684
- }
685
-
686
- .wp-admin .iubenda-checkbox-options p label input[type=checkbox], .iubenda-checkbox-options label span {
687
- display: inline-block;
688
- vertical-align: top;
689
- margin-top: 0;
690
- line-height: 1.2;
691
- }
692
-
693
- </style>
694
- <script>
695
- function iubendaGetLanguage(str) {
696
- var languages = ["it", "de", "en", "es", "pt-br", "ru", "fr"];
697
-
698
- for(var i = 0; i < languages.length; i++) {
699
- var tab = document.getElementById("iubenda-code-" + languages[i]);
700
-
701
- var active_tab = document.querySelector(".iubenda-code-" + languages[i]);
702
-
703
- if(active_tab) active_tab.removeAttribute("data-active-tab");
704
-
705
- if(tab) tab.style.display = "none";
706
- }
707
-
708
- var tab = document.getElementById("iubenda-code-" + str);
709
- var active_tab = document.querySelector(".iubenda-code-" + str);
710
-
711
- if(tab) tab.style.display = "table";
712
- if(active_tab) active_tab.setAttribute("data-active-tab", "");
713
-
714
- document.getElementById("iubenda-information").style.display = "none";
715
- }
716
-
717
- window.addEventListener
718
- (
719
- "DOMContentLoaded", function()
720
- {
721
- var firstTab = document.querySelector("[data-iubenda-button]");
722
-
723
- if(firstTab) jQuery(firstTab).trigger("click");
724
-
725
- var engine = document.getElementById("parser_type");
726
-
727
- engine.onchange = function()
728
- {
729
- if(this.checked)
730
- {
731
- document.getElementById("iubenda_parse_child").style.display = "block";
732
- }
733
- else
734
- {
735
- document.getElementById("iubenda_parse_child").style.display = "none";
736
- }
737
- }
738
-
739
- jQuery(engine).trigger("change");
740
- }
741
- );
742
-
743
- setTimeout
744
- (
745
- function() {
746
- var x = document.getElementById("iubenda-saved");
747
-
748
- if(x) x.style.display = "none";
749
- }, 3000
750
- );
751
- </script>
752
  <div id="iubenda-view">
753
- <a class="iubenda-link" href="http://iubenda.com"><img id="iubenda-logo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAG4AAAAdCAMAAAB8M6mmAAAAhFBMVEUAAAA0O0Ibr380O0Ibr380O0Ibr380O0Ibr380O0Ibr380O0I0O0Ibr380O0Ibr380O0Ibr380O0Ibr380O0Ibr380O0Ibr380O0Ibr380O0Ibr380O0Ibr380O0Ibr3/////G69+35tdTw5/U8Ofx+vdiyKd+0rep4c/i9e8otIeN17/AB1g0AAAAHnRSTlMAEBAgIDAwQEBQUGBwcICAkJCgoLCwwMDQ0ODg8PCQCZ0FAAACrklEQVR4Xr2V63LbIBCFF1OZKBCiKAohlK7kXHt5//cruyDjjFTX42l9fnhh1+yHGB0EAJu7kXS/gUto8zRmPV2Edz/OergA7ctYtV0DCKPPBCgrF7kb4rzs3incrCzpEd05LKEDolqkb4nzNr1RuF1UB8TzcE1E/CPu+7Rbxwnozn06Eddw25H0wr9XsJQh3Flyazh4HGd9hRWpf4zbfptx15fAwR53dRHcWHFSkQDKoOJ05w5M1NjBdXpvFU0WW9TlHidN73rbVtz7844PU7mIiADQOkyaccIjqQOW6DHQ/3yTxiYg2pQhqVIfMPYDYiwZHdF3gdpk3K/XadoVH6hCgbbivMcsyzSPhntiFBAcbcOj6xI/QKl7UYynciOTj9YWJ/z8scfBjIOKQ68ADC2n8+oKNc37FHuqp7xMsQGuRzHvV1U/tMVQVwm0O4oLIg+4v0CkKXNiChZxEMVmbQrN/tBjweVdygXu7g84B3N/D6AxWhYdY8ZZgDroM6QaQUfGiwXu8Tiu5UyP0e3VLHERccUIqseCuzkVJzjjMEDVAtfgCk4HdLrgbk/FQcHhMZxa4hqPLg0WuKcTce1fcPITTvMbtoIbj+MaHvWIAxQFuXqYuuLYMKH08xQeTsVpbqRrPx1h9VVxFcd+6w77PX7G+dmtC5zDILK90XAl2nUjoD7A2fJUzRK3AYCBLzc5JCwqIarNTdmHxaRg7YBR5Gl3iJOx8EyKVkjFuxO8qhky7nV6m79ALXdDLyhGxXdf0EJYjO1s9yLFN2TZjgiIngaaSt4FjPla55AWc5o+dx/P0zQ9fzCOT5EfMBU19+nygl5CkeVEaCo6gOfI76AKuewwWgnQ0NRJcNwVxirGgdSGOlkFs5SxLZFrwppaXUoZ6qD1PFWSQ8p9wl3D/9ZvoAF23RgFj1kAAAAASUVORK5CYII="/></a>
754
-
755
- <p class="iubenda-text">
756
- Questo plugin &#xE8; il modo pi&#xF9; semplice e completo per adeguare il tuo sito Wordpress alla cookie law. Alla prima visita dell&#x27;utente il plugin si occuper&#xE0; di raccoglierne il consenso, di bloccare i pi&#xF9; popolari fra gli script che installano cookie e di riattivarli non appena il consenso viene fornito. Le impostazioni di base includono la raccolta del consenso tramite il semplice scroll (il metodo pi&#xF9; efficace) e la riattivazione senza il refresh della pagina.
757
- <span class="iubenda-title">Vuoi capire di più sulla cookie law?</span>
758
- Consulta <a href="https://www.iubenda.com/it/soluzione-cookie-law" class="iubenda-url" target="_blank">la nostra guida completa alla cookie law</a>.
759
- <span class="iubenda-title">Quali sono le funzionalità complete del plugin?</span>
760
- Visita <a href="https://www.iubenda.com/it/help/posts/810" class="iubenda-url" target="_blank">la nostra pagina dedicata al plugin</a>.
761
- <span class="iubenda-title">Inserisci qui sotto il codice di iubenda per la cookie law.</span>
762
- Per far funzionare il plugin, è necessario inserire nel form sottostante il codice di iubenda che attiva il banner cookie law e la cookie policy.Questo codice può essere generato su www.iubenda.com, seguendo <a href="https://www.iubenda.com/it/help/posts/680" class="iubenda-url" target="_blank">questa guida
763
- </a>.
764
- </p>
765
-
766
- <form id="iubenda-tabs" method="post" action="'.str_replace('%7E', '~', $_SERVER['REQUEST_URI']).'">';
767
-
768
- if($_POST) echo '<div id="iubenda-saved"><p>Impostazioni salvate con successo</p></div>';
769
-
770
- if(defined("IUBENDA_WPML")) {
771
-
772
- $languages = icl_get_languages('skip_missing=N&orderby=KEY&order=DIR&link_empty_to=str');
773
-
774
- foreach($languages as $language => $value) {
775
 
776
- echo
777
- '
778
- <div class="iubenda-tab iubenda-code-'.$language.'" onclick="iubendaGetLanguage('.chr(39).$language.chr(39).')" data-iubenda-button>'
779
- .$value["translated_name"].'
780
- </div>
781
- ';
782
- }
783
-
784
- foreach($languages as $language => $value) {
785
- echo
786
- '
787
- <div id="iubenda-code-'.$language.'">
788
- <textarea class="iubenda-textarea" name="iubenda-code-'.$language.'">'.stripslashes(get_option("iubenda-code-".$language)).'</textarea>
789
- </div>
790
- ';
791
- }
792
-
793
- echo
794
- '
795
- <div id="iubenda-information">Seleziona una lingua a cui associare il tuo codice</div>
796
- ';
797
-
798
- }
799
- else
800
- {
801
- echo '<textarea class="iubenda-textarea iubenda-textarea-single" name="iubenda-code-default">'.stripslashes(get_option("iubenda-code-default")).'</textarea>';
802
- }
803
-
804
- echo '
805
- <div class="iubenda-checkbox-options">
806
-
807
- <p>
808
- <label>
809
- <input id="parser_type" type="checkbox" name="iubenda_parse" value="enabled" '.$checked_parse.'>
810
- <span>
811
- Effettua il blocco automatico degli script rilevati dal plugin<br />
812
- (consulta <a target="_blank" class="iubenda-url" href="https://www.iubenda.com/it/help/posts/810">la nostra documentazione</a> per la lista di script rilevati)
813
- </span>
814
- </label>
815
- </p>
816
-
817
- <div id="iubenda_parse_child">
818
- <p id="parser_engine">
819
- Parsing engine:<br>
820
- <label><input type="radio" name="parser_engine" value="default" '.$parser_engine_default.'>Default</label>
821
- <label><input type="radio" name="parser_engine" value="new" '.$parser_engine_new.'>Sperimentale (Performance migliorata)</label>
 
 
 
 
 
 
 
 
 
 
 
 
 
822
  </p>
823
- <p id="par_skip_parsing">
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
824
  <label>
825
- <input type="checkbox" name="skip_parsing" value="skip" '.$checked.'>
826
  <span>
827
- Lascia intatti gli script della pagina se l\'utente ha già dato il consenso<br />
828
- (migliora le prestazioni, altamente consigliato, da disattivare solo qualora il tuo sito utilizzi un sistema di cache)
829
  </span>
830
  </label>
831
  </p>
832
- <p id="par_iubenda_output_filter">
833
  <label>
834
- <input type="checkbox" name="iubenda_output_filter" value="enabled" '.$checked_output_filter.'>
835
  <span>
836
- Applica ottimizzazioni speciali in caso di errori con l\'output<br />
837
- (attiva questa opzione solo qualora avessi problemi di performance o notassi che il blocco dei codici viene applicato più volte)
838
  </span>
839
  </label>
840
- </p>
841
-
842
- <hr />
843
- </div> <!-- /iubenda_parse_child -->
844
-
845
- <p>
846
- <label>
847
- <input type="checkbox" name="iubenda_ctype" value="enabled" '.$checked_ctype.'>
848
- <span>
849
- Restringi l\'esecuzione del plugin alle sole richieste che presentano "Content-type: text/html" (consigliato)
850
- </span>
851
- </label>
852
- </p>
853
- <p>
854
- <label>
855
- <input type="checkbox" name="iubenda_output_feed" value="enabled" '.$checked_output_feed.'>
856
- <span>
857
- Non eseguire il plugin all\'interno dei Feed RSS (consigliato)
858
- </span>
859
- </label>
860
- </p>
861
- <p>
862
- <input type="submit" value="Salva" id="iubenda-save">
863
- </p>
864
- </div> <!-- /iubenda-checkbox-options -->
865
- </form>
866
- <p class="iubenda-text">
867
- <span class="iubenda-title">Hai bisogno di supporto su questo plugin?</span>
868
- Visita il nostro <a href="//support.iubenda.com/forums/314835-general/suggestions/9670701-discussion-regarding-the-iubenda-cookie-law-soluti" class="iubenda-url" target="_blank">forum di supporto</a>.
869
- </p>
870
- <p class="iubenda-text">
871
- <span class="iubenda-title">Vuoi provare una versione Beta di questo plugin, con le funzionalità più recenti?</span>
872
- Visita <a href="https://www.iubenda.com/it/help/posts/810" class="iubenda-url" target="_blank">la nostra documentazione</a> e segui le istruzioni per installare una versione Beta.
873
- </p>
874
- </div>';
875
- }
876
- ?>
1
  <?php
2
+ /*
3
+ * Plugin Name: Iubenda Cookie Solution
4
+ * Plugin URI: https://www.iubenda.com
5
+ * Description: Iubenda Cookie Solution permette di gestire tutti gli aspetti della cookie law su WP.
6
+ * Author: iubenda
7
+ * Version: 1.14.0-beta
8
+ * Text Domain: iubenda-cookie-law-solution
9
+ * Author URI: https://www.iubenda.com
10
+ */
11
+
12
+ // exit if accessed directly
13
+ if ( ! defined( 'ABSPATH' ) )
14
+ exit;
15
+
16
+ // define contants
17
+ define( 'IUB_DEBUG', 0 );
18
+ define( 'IUB_REGEX_PATTERN', "/<!--IUB_COOKIE_POLICY_START-->(.*)<!--IUB_COOKIE_POLICY_END-->/sU" );
19
+
20
+ // set plugin instance
21
+ $iubenda_cookie_law_solution = new iubenda_Cookie_Law_Solution();
22
+
23
+ /**
24
+ * iubenda_Cookie_Law_Solution final class.
25
+ *
26
+ * @class iubenda_Cookie_Law_Solution
27
+ * @version 1.14.0
28
+ */
29
+ class iubenda_Cookie_Law_Solution {
30
+
31
+ public $options;
32
+ public $defaults = array(
33
+ );
34
 
35
+ /**
36
+ * Constructor.
37
+ */
38
+ public function __construct() {
39
+ // register_activation_hook( __FILE__, array( $this, 'activation' ) );
40
+ // register_deactivation_hook( __FILE__, array( $this, 'deactivation' ) );
41
+
42
+ // settings
43
+ $this->options = array_merge( $this->defaults, get_option( 'iubenda_cookie_law_solution', $this->defaults ) );
44
+
45
+ // actions
46
+ add_action( 'admin_menu', array( $this, 'admin_menu_options' ) );
47
+ add_action( 'plugins_loaded', array( $this, 'load_textdomain' ) );
48
+ add_action( 'plugins_loaded', array( $this, 'init' ) );
49
+ add_action( 'after_setup_theme', array( $this, 'register_shortcode' ) );
50
+ add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_scripts' ) );
51
+ add_action( 'wp_head', array( $this, 'wp_head' ), 99 );
52
+ add_action( 'after_setup_theme', array( $this, 'output_start' ), 0 );
53
+ add_action( 'shutdown', array( $this, 'output_end' ), 100 );
54
+ }
55
 
56
+ /**
57
+ * Initialize plugin.
58
+ */
59
+ public function init() {
60
+
61
+ // check WPML
62
+ if ( function_exists( 'icl_object_id' ) ) {
63
+ define( 'IUBENDA_WPML', true );
64
  }
65
+
66
+ // load Simple HTML DOM if needed
67
+ if ( ! function_exists( 'file_get_html' ) ) {
68
+ require_once( dirname( __FILE__ ) . '/lib/simple_html_dom.php' );
69
+ }
70
+
71
+ // load plugin class
72
+ require_once( dirname( __FILE__ ) . '/lib/iubenda.class.faster.php' );
73
+ require_once( dirname( __FILE__ ) . '/lib/iubenda.class.php' );
74
  }
75
 
76
+ /**
77
+ * Register shortcode function.
78
+ */
79
+ public function register_shortcode() {
80
+ add_shortcode( 'iub-cookie-policy', array( $this, 'shortcode' ) );
 
 
 
 
81
  }
82
 
83
+ /**
84
+ * Handle shortcode function.
85
+ *
86
+ * @param array $atts
87
+ * @param mixed $content
88
+ * @return mixed
89
+ */
90
+ public function shortcode( $atts, $content = '' ) {
91
+ return '<!--IUB_COOKIE_POLICY_START-->' . do_shortcode( $content ) . '<!--IUB_COOKIE_POLICY_END-->';
92
  }
93
 
94
+ /**
95
+ * Add submenu.
96
+ */
97
+ public function admin_menu_options() {
98
+ add_options_page(
99
+ 'iubenda', 'iubenda', 'manage_options', 'iubenda-cookie-law-solution', array( $this, 'load_admin' ) );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
100
  }
101
 
102
+ /**
103
+ * Load textdomain.
104
+ */
105
+ public function load_textdomain() {
106
+ load_plugin_textdomain( 'iubenda-cookie-law-solution', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
107
  }
108
 
109
+ /**
110
+ * Load admin scripts and styles.
111
+ *
112
+ * @param string $page
113
+ * @return void
114
+ */
115
+ public function admin_enqueue_scripts( $page ) {
116
+ if ( $page !== 'settings_page_iubenda-cookie-law-solution' )
117
+ return;
118
 
119
+ wp_enqueue_script(
120
+ 'iubenda-admin', plugins_url( 'js/admin.js', __FILE__ ), array( 'jquery' )
121
+ );
122
 
123
+ wp_enqueue_style( 'iubenda-admin', plugins_url( 'css/admin.css', __FILE__ ) );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
124
  }
125
+
126
+ /**
127
+ * Add wp_head content.
128
+ *
129
+ * @return mixed
130
+ */
131
+ public function wp_head() {
132
+
133
+ if ( ! get_option( "default_skip_parsing" ) ) {
134
+ update_option( "default_skip_parsing", true );
135
+ update_option( "skip_parsing", true );
 
 
 
 
 
 
 
 
 
 
 
 
 
136
  }
137
+ if ( ! get_option( "default_iubendactype" ) ) {
138
+ update_option( "default_iubendactype", true );
139
+ update_option( "iubenda_ctype", true );
140
+ }
141
+ if ( ! get_option( "default_iubendaparse" ) ) {
142
+ update_option( "default_iubendaparse", true );
143
+ update_option( "iubenda_parse", true );
144
+ }
145
+ if ( ! get_option( "default_parser_engine" ) ) {
146
+ update_option( "default_parser_engine", true );
147
+ update_option( "parser_engine", "default" );
148
+ }
149
+
150
+ // check content type
151
+ $this->check_content_type();
152
+
153
+ // check if user is logged in, then disable the banner.
154
  /*
155
+ if ( is_user_logged_in() ) {
156
+ return;
157
+ }
 
 
 
 
 
 
 
158
  */
159
+
160
+ if ( $_POST || defined( 'IUBENDA_NO_HTML' ) ) {
161
  return;
162
  }
163
+
164
+ // initial head output
 
 
 
165
  $iubenda_code = "";
166
+
167
+ if ( get_option( 'iub_code' ) ) {
168
+ $wpml_old = html_entity_decode( stripslashes( get_option( 'iub_code' ) ) );
169
+
170
+ $iubenda_languages = array( 'it', 'de', 'en', 'es', 'pt-br', 'ru', 'fr' );
171
+
172
+ foreach ( $iubenda_languages as $iubenda_language ) {
173
+ if ( strpos( $wpml_old, 'lang: "' . $iubenda_language ) !== false ) {
174
+ $language_tag = $iubenda_language;
175
+
176
+ break;
177
+ }
178
+ }
179
+
180
+ update_option( "iubenda-code-$language_tag", $wpml_old );
181
+ update_option( 'iubenda-code-default', $wpml_old );
182
+ update_option( 'iub_code', false );
 
 
 
 
 
 
 
 
 
183
  }
184
+
185
+ if ( defined( 'IUBENDA_WPML' ) && get_option( 'iubenda-code-' . ICL_LANGUAGE_CODE ) ) {
186
+ $iubenda_code .= get_option( 'iubenda-code-' . ICL_LANGUAGE_CODE );
187
+ } else {
188
+ $iubenda_code .= get_option( 'iubenda-code-default' );
189
  }
190
+
191
  $iubenda_code .= "\n
192
+ <script>
193
+ var iCallback = function() {};
194
+
195
+ if ( typeof _iub.csConfiguration != 'undefined' ) {
196
+ if ( 'callback' in _iub.csConfiguration ) {
197
+ if ( 'onConsentGiven' in _iub.csConfiguration.callback )
198
+ iCallback = _iub.csConfiguration.callback.onConsentGiven;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
199
 
200
+ _iub.csConfiguration.callback.onConsentGiven = function() {
201
+ iCallback();
202
+
203
+ /* separator */
204
+ jQuery('noscript._no_script_iub').each(function (a, b) { var el = jQuery(b); el.after(el.html()); });
205
+ }
206
+ }
207
+ }
208
+ </script>";
209
+
210
+ echo $iubenda_code;
211
  }
212
+
213
+ /**
214
+ * Initialize html output.
215
+ *
216
+ * @return void
217
+ */
218
+ public function output_start() {
219
+ ob_start( array( $this, 'output_callback' ) );
220
+ }
221
+
222
+ /**
223
+ * Finish html output.
224
+ *
225
+ * @return void
226
+ */
227
+ public function output_end() {
228
+ ob_end_flush();
229
+ }
230
+
231
+ /**
232
+ * Handle final html output.
233
+ *
234
+ * @param mixed $output
235
+ * @return mixed
236
+ */
237
+ public function output_callback( $output ) {
238
+ // break on ajax, xmlrpc or iub_no_parse request
239
+ if ( defined( 'XMLRPC_REQUEST' ) && XMLRPC_REQUEST || defined( 'DOING_AJAX' ) && DOING_AJAX || isset( $_SERVER["HTTP_X_REQUESTED_WITH"] ) || isset( $_GET['iub_no_parse'] ) ) {
240
  return $output;
 
241
  }
242
+
243
+ // break on admin side
244
+ if ( is_admin() )
245
  return $output;
 
 
246
 
247
+ // break for logged in users?
248
+ /* if ( is_user_logged_in() ) {
249
  return $output;
 
250
  }
251
+ */
252
 
253
+ // break on rss feed
254
+ if ( get_option( 'iubenda_output_feed' ) ) {
255
+ if ( is_feed() ) {
256
+ return $output;
257
+ }
258
+ }
 
 
 
 
259
 
260
+ if ( strpos( $output, "<html" ) === false ) {
261
+ return $output;
262
+ } elseif ( strpos( $output, "<html" ) > 200 ) {
263
+ return $output;
 
 
 
 
 
 
 
264
  }
265
+
266
+ // check whether to run parser or not
267
+ if (
268
+ ! get_option( 'iubenda_parse' )
269
+ || ( iubendaPage::consent_given() && get_option( 'skip_parsing' ) )
270
+ || iubendaPage::bot_detected()
271
+ || $_POST
272
+ || defined( 'IUBENDA_NO_HTML' )
273
+ || ( get_option( 'iubenda_output_filter' ) && ob_get_level() > 1 ) ) {
274
+
275
+ return $output;
276
+ }
277
+
278
+ $startime = microtime( true );
279
+
280
+ // experimental class
281
+ if ( get_option( 'parser_engine' ) == 'new' ) {
282
+ $faster = new iubendaFaster;
283
+
284
+ // render output
285
+ $output = $faster->isParse( mb_convert_encoding( $output, 'HTML-ENTITIES', 'UTF-8' ) );
286
+
287
+ // append signature
288
+ $output .= '<!-- Parsed with iubenda experimental class in ' . round( microtime( true ) - $startime, 4 ) . ' sec. -->';
289
+ // default class
290
+ } else {
291
+ $page = new iubendaPage( $output );
292
  $page->parse();
293
+
294
+ // render output
 
295
  $output = $page->get_converted_page();
296
+
297
+ // append signature
298
+ $output .= '<!-- Parsed with iubenda default class in ' . round( microtime( true ) - $startime, 4 ) . ' sec. -->';
 
299
  }
300
+
301
+ return apply_filters( 'iubenda_final_output', $output );
 
 
 
 
 
 
302
  }
303
 
304
+ /**
305
+ * Check content type.
306
+ *
307
+ * @return void
308
+ */
309
+ public function check_content_type() {
310
+ if ( get_option( 'iubenda_ctype' ) ) {
311
+ $iub_headers = headers_list();
312
+ $destroy = true;
313
+
314
+ foreach ( $iub_headers as $h ) {
315
+ if ( strpos( $h, "Content-Type: text/html" ) !== false || strpos( $h, "Content-type: text/html" ) !== false ) {
316
+ $destroy = false;
317
+ }
318
+ }
319
+
320
+ if ( $destroy ) {
321
+ define( 'IUBENDA_NO_HTML', true );
322
+ }
323
+ }
324
  }
325
 
326
+ /**
327
+ * Load admin.
328
+ *
329
+ * @return void
330
+ */
331
+ public function load_admin() {
332
+ if ( ! current_user_can( 'manage_options' ) ) {
333
+ wp_die( __( "You don't have permission to access this page.", 'iubenda-cookie-law-solution' ) );
 
 
334
  }
335
 
336
+ if ( get_option( "iub_code" ) ) {
337
+ $wpml_old = html_entity_decode( stripslashes( get_option( "iub_code" ) ) );
338
+
339
+ $iubenda_languages = array( "it", "de", "en", "es", "pt-br", "ru", "fr" );
340
+
341
+ foreach ( $iubenda_languages as $iubenda_language ) {
342
+ if ( strpos( $wpml_old, 'lang: "' . $iubenda_language ) !== false ) {
343
+ $language_tag = $iubenda_language;
344
+
345
+ break;
346
+ }
347
+ }
348
+
349
+ update_option( "iubenda-code-$language_tag", $wpml_old );
350
+ update_option( "iubenda-code-default", $wpml_old );
351
+ update_option( "iub_code", false );
 
 
 
 
 
 
 
 
 
352
  }
353
 
354
+ $iubenda_language = array( "it", "de", "en", "es", "pt-br", "ru", "fr", "default" );
355
+
356
+ if ( $_POST ) {
357
+ if ( ! empty( $_POST['skip_parsing'] ) ) {
358
+ update_option( "skip_parsing", "skip" );
359
+ } else {
360
+ update_option( "skip_parsing", false );
361
+ }
362
+ if ( ! empty( $_POST['iubenda_ctype'] ) ) {
363
+ update_option( "iubenda_ctype", true );
364
+ } else {
365
+ update_option( "iubenda_ctype", false );
366
+ }
367
+ if ( ! empty( $_POST['iubenda_parse'] ) ) {
368
+ update_option( "iubenda_parse", true );
369
+ } else {
370
+ update_option( "iubenda_parse", false );
371
+ }
372
+ if ( ! empty( $_POST['iubenda_output_filter'] ) ) {
373
+ update_option( "iubenda_output_filter", true );
374
+ } else {
375
+ update_option( "iubenda_output_filter", false );
376
+ }
377
+ if ( ! empty( $_POST['iubenda_output_feed'] ) ) {
378
+ update_option( "iubenda_output_feed", true );
379
+ } else {
380
+ update_option( "iubenda_output_feed", false );
381
+ }
382
+
383
+ if ( $_POST["parser_engine"] == "default" )
384
+ update_option( "parser_engine", "default" );
385
+ if ( $_POST["parser_engine"] == "new" )
386
+ update_option( "parser_engine", "new" );
387
  }
388
+
389
+ /*
390
+ Enabled by default.
391
+ */
392
+
393
+ if ( ! get_option( "default_skip_parsing" ) ) {
394
+ update_option( "default_skip_parsing", true );
395
+ update_option( "skip_parsing", "skip" );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
396
  }
397
+ if ( ! get_option( "default_parser_engine" ) ) {
398
+ update_option( "default_parser_engine", true );
399
+ update_option( "parser_engine", "default" );
400
  }
401
+ if ( ! get_option( "default_iubendactype" ) ) {
402
+ update_option( "default_iubendactype", true );
403
+ update_option( "iubenda_ctype", true );
404
  }
405
+ if ( ! get_option( "default_iubendaparse" ) ) {
406
+ update_option( "default_iubendaparse", true );
407
+ update_option( "iubenda_parse", true );
408
  }
409
+ if ( ! get_option( "default_iubenda_output_feed" ) ) {
410
+ update_option( "default_iubenda_output_feed", true );
411
+ update_option( "iubenda_output_feed", true );
412
+ }
413
+
414
+ /**/
415
+
416
+ if ( $_POST ) {
417
+ foreach ( $iubenda_language as $iub_check ) {
418
+ if ( ! empty( $_POST["iubenda-code-$iub_check"] ) ) {
419
+ update_option( "iubenda-code-$iub_check", stripslashes( $_POST["iubenda-code-$iub_check"] ) );
420
+ }
421
+ }
422
+ }
423
+
424
+ /**/
425
+
 
 
426
  $checked = "";
427
  $checked_ctype = "";
428
  $checked_parse = "";
429
  $checked_output_feed = "";
430
  $checked_output_filter = "";
431
+
432
+ if ( get_option( "iubenda_parse" ) )
433
+ $checked_parse = 'checked="true"';
434
+ if ( get_option( "skip_parsing" ) )
435
+ $checked = 'checked="true"';
436
+ if ( get_option( "iubenda_ctype" ) )
437
+ $checked_ctype = 'checked="true"';
438
+ if ( get_option( "iubenda_output_feed" ) )
439
+ $checked_output_feed = 'checked="true"';
440
+ if ( get_option( "iubenda_output_filter" ) )
441
+ $checked_output_filter = 'checked="true"';
442
+
443
  $parser_engine_default = "";
444
  $parser_engine_new = "";
445
+
446
+ if ( get_option( "parser_engine" ) == "default" )
447
+ $parser_engine_default = 'checked="true"';
448
+ if ( get_option( "parser_engine" ) == "new" )
449
+ $parser_engine_new = 'checked="true"';
450
+
451
+ /**/
452
+
453
+ echo '
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
454
  <div id="iubenda-view">
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
455
 
456
+ <a class="iubenda-link" href="http://iubenda.com"><img id="iubenda-logo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAG4AAAAdCAMAAAB8M6mmAAAAhFBMVEUAAAA0O0Ibr380O0Ibr380O0Ibr380O0Ibr380O0Ibr380O0I0O0Ibr380O0Ibr380O0Ibr380O0Ibr380O0Ibr380O0Ibr380O0Ibr380O0Ibr380O0Ibr380O0Ibr3/////G69+35tdTw5/U8Ofx+vdiyKd+0rep4c/i9e8otIeN17/AB1g0AAAAHnRSTlMAEBAgIDAwQEBQUGBwcICAkJCgoLCwwMDQ0ODg8PCQCZ0FAAACrklEQVR4Xr2V63LbIBCFF1OZKBCiKAohlK7kXHt5//cruyDjjFTX42l9fnhh1+yHGB0EAJu7kXS/gUto8zRmPV2Edz/OergA7ctYtV0DCKPPBCgrF7kb4rzs3incrCzpEd05LKEDolqkb4nzNr1RuF1UB8TzcE1E/CPu+7Rbxwnozn06Eddw25H0wr9XsJQh3Flyazh4HGd9hRWpf4zbfptx15fAwR53dRHcWHFSkQDKoOJ05w5M1NjBdXpvFU0WW9TlHidN73rbVtz7844PU7mIiADQOkyaccIjqQOW6DHQ/3yTxiYg2pQhqVIfMPYDYiwZHdF3gdpk3K/XadoVH6hCgbbivMcsyzSPhntiFBAcbcOj6xI/QKl7UYynciOTj9YWJ/z8scfBjIOKQ68ADC2n8+oKNc37FHuqp7xMsQGuRzHvV1U/tMVQVwm0O4oLIg+4v0CkKXNiChZxEMVmbQrN/tBjweVdygXu7g84B3N/D6AxWhYdY8ZZgDroM6QaQUfGiwXu8Tiu5UyP0e3VLHERccUIqseCuzkVJzjjMEDVAtfgCk4HdLrgbk/FQcHhMZxa4hqPLg0WuKcTce1fcPITTvMbtoIbj+MaHvWIAxQFuXqYuuLYMKH08xQeTsVpbqRrPx1h9VVxFcd+6w77PX7G+dmtC5zDILK90XAl2nUjoD7A2fJUzRK3AYCBLzc5JCwqIarNTdmHxaRg7YBR5Gl3iJOx8EyKVkjFuxO8qhky7nV6m79ALXdDLyhGxXdf0EJYjO1s9yLFN2TZjgiIngaaSt4FjPla55AWc5o+dx/P0zQ9fzCOT5EfMBU19+nygl5CkeVEaCo6gOfI76AKuewwWgnQ0NRJcNwVxirGgdSGOlkFs5SxLZFrwppaXUoZ6qD1PFWSQ8p9wl3D/9ZvoAF23RgFj1kAAAAASUVORK5CYII="/></a>
457
+
458
+ <p class="iubenda-text">
459
+ ' . __( "This plugin is the easiest and most comprehensive way to adapt your WordPress site to the European cookie law. Upon your user's first visit, the plugin will take care of collecting their consent, of blocking the most popular among the scripts that install cookies and subsequently reactivate these scripts as soon as consent is provided. The basic settings include obtaining consent by a simple scroll action (the most effective method) and script reactivation without refreshing the page.", 'iubenda-cookie-law-solution' ) . '
460
+ <span class="iubenda-title">' . __( "Would you like to know more about the cookie law?", 'iubenda-cookie-law-solution' ) . '</span>
461
+ ' . sprintf( __( "Read our <a href=\"%s\" class=\"iubenda-url\" target=\"_blank\">complete guide to the cookie law.</a>", 'iubenda-cookie-law-solution' ), "https://www.iubenda.com/it/soluzione-cookie-law" ) . '
462
+ <span class="iubenda-title">' . __( "What’s the full functionality of the plugin?", 'iubenda-cookie-law-solution' ) . '</span>
463
+ ' . sprintf( __( "Visit our <a href=\"%s\" class=\"iubenda-url\" target=\"_blank\">plugin page.</a>", 'iubenda-cookie-law-solution' ), "https://www.iubenda.com/it/help/posts/810" ) . '
464
+ <span class="iubenda-title">' . __( "Enter the iubenda code for the Cookie Solution below.", 'iubenda-cookie-law-solution' ) . '</span>
465
+ ' . sprintf( __( "In order to run the plugin, you need to enter the iubenda code that activates the cookie law banner and the cookie policy in the form below. This code can be generated on www.iubenda.com, following <a href=\"%s\" class=\"iubenda-url\" target=\"_blank\">this guide.</a>", 'iubenda-cookie-law-solution' ), "https://www.iubenda.com/it/help/posts/680" ) . '
466
+ </p>
467
+
468
+ <form id="iubenda-tabs" method="post" action="' . str_replace( '%7E', '~', $_SERVER['REQUEST_URI'] ) . '">';
469
+
470
+ if ( $_POST )
471
+ echo '<div id="iubenda-saved"><p>' . __( 'Settings applied successfully', 'iubenda-cookie-law-solution' ). '</p></div>';
472
+
473
+ if ( defined( "IUBENDA_WPML" ) ) {
474
+
475
+ $languages = icl_get_languages( 'skip_missing=N&orderby=KEY&order=DIR&link_empty_to=str' );
476
+
477
+ foreach ( $languages as $language => $value ) {
478
+
479
+ echo
480
+ '
481
+ <div class="iubenda-tab iubenda-code-' . $language . '" onclick="iubendaGetLanguage(' . chr( 39 ) . $language . chr( 39 ) . ')" data-iubenda-button>'
482
+ . $value["translated_name"] . '
483
+ </div>
484
+ ';
485
+ }
486
+
487
+ foreach ( $languages as $language => $value ) {
488
+ echo
489
+ '
490
+ <div id="iubenda-code-' . $language . '">
491
+ <textarea class="iubenda-textarea" name="iubenda-code-' . $language . '">' . stripslashes( get_option( "iubenda-code-" . $language ) ) . '</textarea>
492
+ </div>
493
+ ';
494
+ }
495
+
496
+ echo
497
+ '
498
+ <div id="iubenda-information">' . __( 'Select a language to correctly pair it with your script', 'iubenda-cookie-law-solution' ) . '</div>
499
+ ';
500
+ } else {
501
+ echo '<textarea class="iubenda-textarea iubenda-textarea-single" name="iubenda-code-default">' . stripslashes( get_option( "iubenda-code-default" ) ) . '</textarea>';
502
+ }
503
+
504
+ echo '
505
+ <div class="iubenda-checkbox-options">
506
+
507
+ <p>
508
+ <label>
509
+ <input id="parser_type" type="checkbox" name="iubenda_parse" value="enabled" ' . $checked_parse . '>
510
+ <span>
511
+ ' . __( "Automatically blocks scripts detected by the plugin", 'iubenda-cookie-law-solution' ) . '<br />
512
+ (' . sprintf( __( "see <a href=\"%s\" class=\"iubenda-url\" target=\"_blank\">our documentation</a> for the list of detected scripts.", 'iubenda-cookie-law-solution' ), "https://www.iubenda.com/it/help/posts/810" ) . ')
513
+ </span>
514
+ </label>
515
  </p>
516
+
517
+ <div id="iubenda_parse_child">
518
+ <p id="parser_engine">
519
+ ' . __( "Parsing engine", 'iubenda-cookie-law-solution' ) . ':<br>
520
+ <label><input type="radio" name="parser_engine" value="default" ' . $parser_engine_default . '>' . __( "Default", 'iubenda-cookie-law-solution' ) . '</label>
521
+ <label><input type="radio" name="parser_engine" value="new" ' . $parser_engine_new . '>' . __( "Experimental (enhances performance)", 'iubenda-cookie-law-solution' ) . '</label>
522
+ </p>
523
+ <p id="par_skip_parsing">
524
+ <label>
525
+ <input type="checkbox" name="skip_parsing" value="skip" ' . $checked . '>
526
+ <span>
527
+ ' . __( "Leaves scripts untouched on the page if the user has already given consent", 'iubenda-cookie-law-solution' ) . '<br />
528
+ (' . __( "improves performance, highly recommended, to be deactivated only if your site uses a caching system", 'iubenda-cookie-law-solution' ) . ')
529
+ </span>
530
+ </label>
531
+ </p>
532
+ <p id="par_iubenda_output_filter">
533
+ <label>
534
+ <input type="checkbox" name="iubenda_output_filter" value="enabled" ' . $checked_output_filter . '>
535
+ <span>
536
+ ' . __( "Applies special optimizations in cases with faulty output", 'iubenda-cookie-law-solution' ) . '<br />
537
+ (' . __( "only select this option if you had performance problems or if you notice that the blocking of code is run several times", 'iubenda-cookie-law-solution' ) . ')
538
+ </span>
539
+ </label>
540
+ </p>
541
+
542
+ <hr />
543
+ </div> <!-- /iubenda_parse_child -->
544
+
545
+ <p>
546
  <label>
547
+ <input type="checkbox" name="iubenda_ctype" value="enabled" ' . $checked_ctype . '>
548
  <span>
549
+ ' . __( 'Restrict the plugin to run only for requests that have "Content-type: text / html" (recommended)', 'iubenda-cookie-law-solution' ) . '
 
550
  </span>
551
  </label>
552
  </p>
553
+ <p>
554
  <label>
555
+ <input type="checkbox" name="iubenda_output_feed" value="enabled" ' . $checked_output_feed . '>
556
  <span>
557
+ ' . __( 'Do not run the plugin inside the RSS feed (recommended)', 'iubenda-cookie-law-solution' ) . '
 
558
  </span>
559
  </label>
560
+ </p>
561
+ <p>
562
+ <input type="submit" value="' . __( 'Save' ) . '" class="button button-primary">
563
+ </p>
564
+ </div> <!-- /iubenda-checkbox-options -->
565
+ </form>
566
+ <p class="iubenda-text">
567
+ <span class="iubenda-title">' . __( 'Need support for this plugin?', 'iubenda-cookie-law-solution' ) . '</span>
568
+ ' . sprintf( __( "Visit our <a href=\"%s\" class=\"iubenda-url\" target=\"_blank\">support forum.</a>", 'iubenda-cookie-law-solution' ), "https://support.iubenda.com/forums/314835-general/suggestions/9670701-discussion-regarding-the-iubenda-cookie-law-soluti" ) . '
569
+ </p>
570
+ <p class="iubenda-text">
571
+ <span class="iubenda-title">' . __( 'Want to try a beta version of this plugin with the latest features?', 'iubenda-cookie-law-solution' ) . '</span>
572
+ ' . sprintf( __( "Visit our <a href=\"%s\" class=\"iubenda-url\" target=\"_blank\">documentation pages</a> and follow the instructions to install a beta version.", 'iubenda-cookie-law-solution' ), "https://www.iubenda.com/it/help/posts/810" ) . '
573
+ </p>
574
+ </div>';
575
+ }
576
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
readme.txt CHANGED
@@ -2,8 +2,8 @@
2
  Contributors: iubenda
3
  Donate link:
4
  Tags: cookies, cookie law, cookie policy, cookie banner, cookie block, privacy policy, cookie consent, privacy
5
- Requires at least: 3.0.1
6
- Tested up to: 4.5.2
7
  Stable tag: 1.11.1
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
@@ -19,9 +19,9 @@ NOTE: This plugin is a beta and could in certain situations still have bugs. We
19
  * Find a comprehensive _guide and demo_ to the cookie law solution on our help blog https://www.iubenda.com/en/help/posts/1177
20
 
21
  This plugin is an All-in-One approach developed by iubenda that helps with generating the privacy policy text, the cookie banner and the blocking management of cookies.
22
- This plugin works with the iubenda Cookie Law Solution and allows to block the most common widgets and third party cookies to comply with Cookie Laws, particularly with the Italian cookie law implementation in mind.
23
 
24
- * The plugin automatically inserts the iubenda code in the head of every page of the site
25
  * It allows to manually block all the remaining resources, without the need of direct intervention on the code
26
  * It handles the display of cookie banners and cookie policy, saving user preferences about the use of cookies
27
  * It displays a clean page (without banner) to users who have already provided their consent
@@ -41,7 +41,7 @@ This plugin works with the iubenda Cookie Law Solution and allows to block the m
41
  **Some background information**
42
 
43
  If you have European users you will know the problem: you need to obtain consent for the usage of many types of cookies and you need to manage that consent somehow. Now even Google forces cookie consent onto users of Google AdSense, DoubleClick for Publishers, and DoubleClick Ad Exchange (and even Google Analytics in some cases). Time to get started with a cookie banner.
44
- iubenda and the Cookie Law Solution extension for WordPress help remove these complex tasks with a couple of clicks. This extension works with the iubenda Cookie Law Solution, displays a cookie banner in 8 languages and saves consent for returning users.
45
 
46
  **Which languages does iubenda work in currently?**
47
 
@@ -107,8 +107,8 @@ Il plugin Wordpress di iubenda permette di semplificare l’adeguamento del prop
107
 
108
  **NOTE: This plugin is a beta and could in certain situations still have bugs. We encourage you to actively let us know about any issues here:** [Uservoice forum](http://support.iubenda.com/forums/314835-general/suggestions/9670701-discussion-regarding-the-iubenda-cookie-law-soluti)
109
 
110
- - **Installation via WP.org**: search in your WordPress plugin admin panel for "iubenda Cookie Solution", install it;
111
- - Once the plugin is installed and activated, go to the Admin Panel (Settings > iubenda Cookie Solution) where you will be asked to paste the code into tht field that gets generated from your iubenda account dashboard when you activate the cookie law kit for your privacy policy. For more information on how to activate the cookie law kit, see this article: https://www.iubenda.com/it/help/posts/680;
112
  - At this point the plugin will begin to show the banner on which displays your cookie policy (link) to users who visit the site for the first time. No need for other configurations;
113
  - Furthermore, the plugin automatically recognizes and blocks cookies that get installed via the YouTube video player and social widgets - such as the Facebook Like Box - on your site. **Important note** the scripts for Facebook, Twitter, G+, and YouTube iframe only get blocked automatically when generated from the server side (therefore processed by PHP via WordPress). Scripts that are added to the page via Javascript after page load cannot be blocked automatically;
114
  - The other scripts that install cookies for which the automatic block isn't yet available can and should be "wrapped" using these comments:
@@ -124,8 +124,8 @@ Il plugin Wordpress di iubenda permette di semplificare l’adeguamento del prop
124
 
125
  ------ ITALIANO ------
126
 
127
- - **Installazione automatica**: installa da WordPres.org cercando "iubenda Cookie Solution";
128
- - Una volta installato ed attivato il plugin, accedi al pannello Admin (Impostazioni > iubenda Cookie Solution) dove ti verrà chiesto di incollare in un campo il codice che iubenda genera quando attivi il kit cookie law sulla tua privacy policy. Per ulteriori informazioni su come attivare il kit cookie law, consulta questo articolo: https://www.iubenda.com/it/help/posts/680;
129
  - A questo punto il plugin inizierà a mostrare il banner in cui è richiamata la tua cookie policy agli utenti che visitano il sito per la prima volta senza la necessità di altre configurazioni;
130
  - In più, il plugin riconoscerà e bloccherà in automatico i cookie installati da tutti i video player di YouTube e dai widget sociali – come il Facebook Like Box – presenti sul tuo sito. **Nota importante**: il nostro plugin wordpress blocca in modo automatico tutti gli script Facebook, Twitter, G+, iframe youtube che sono generati lato server (quindi restituiti via PHP da wordpress). Script che vengono inseriti nella pagina dopo il loading della pagina tramite Javascript non sono e non possono essere bloccati in modo automatico;
131
  - Gli altri script per i quali non è ancora disponibile il blocco automatico – e che installano cookie che richiedono il blocco prima del consenso – vanno “avvolti” utilizzando questi commenti:
@@ -150,16 +150,19 @@ Yes, right here: https://www.iubenda.com/en/help/posts/1177
150
 
151
  == Changelog ==
152
 
153
- = 1.11.2 =
154
- * Various Bug Fixes and optimizations
155
- * Updates to the parsing engine (better handling of Google AdSense, various fixes and optimizations)
156
-
157
  = 1.11.1 =
158
  * New: Created a new option that disables the plugin on RSS feeds
159
  * New: Improved the control that checks if the request content type is HTML
160
  * Fixed an issue with the banner script
161
  * Fixed a series of conflicts with UTF-8 special characters caused by the experimental parsing engine
162
 
 
 
 
 
 
 
 
163
  = 1.11.0 =
164
  * New: Introduced a MUCH FASTER experimental parsing engine (visit the plugin options and select the experimental parsing engine)
165
  * New: Created a new option that allow users to enable/disable the parsing engine and to select the parsing engine between stable and experimental
2
  Contributors: iubenda
3
  Donate link:
4
  Tags: cookies, cookie law, cookie policy, cookie banner, cookie block, privacy policy, cookie consent, privacy
5
+ Requires at least: 4.0
6
+ Tested up to: 4.6
7
  Stable tag: 1.11.1
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
19
  * Find a comprehensive _guide and demo_ to the cookie law solution on our help blog https://www.iubenda.com/en/help/posts/1177
20
 
21
  This plugin is an All-in-One approach developed by iubenda that helps with generating the privacy policy text, the cookie banner and the blocking management of cookies.
22
+ This plugin works with the Iubenda Cookie Law Solution and allows to block the most common widgets and third party cookies to comply with Cookie Laws, particularly with the Italian cookie law implementation in mind.
23
 
24
+ * The plugin automatically inserts the Iubenda code in the head of every page of the site
25
  * It allows to manually block all the remaining resources, without the need of direct intervention on the code
26
  * It handles the display of cookie banners and cookie policy, saving user preferences about the use of cookies
27
  * It displays a clean page (without banner) to users who have already provided their consent
41
  **Some background information**
42
 
43
  If you have European users you will know the problem: you need to obtain consent for the usage of many types of cookies and you need to manage that consent somehow. Now even Google forces cookie consent onto users of Google AdSense, DoubleClick for Publishers, and DoubleClick Ad Exchange (and even Google Analytics in some cases). Time to get started with a cookie banner.
44
+ Iubenda and the Cookie Law Solution extension for WordPress help remove these complex tasks with a couple of clicks. This extension works with the Iubenda Cookie Law Solution, displays a cookie banner in 8 languages and saves consent for returning users.
45
 
46
  **Which languages does iubenda work in currently?**
47
 
107
 
108
  **NOTE: This plugin is a beta and could in certain situations still have bugs. We encourage you to actively let us know about any issues here:** [Uservoice forum](http://support.iubenda.com/forums/314835-general/suggestions/9670701-discussion-regarding-the-iubenda-cookie-law-soluti)
109
 
110
+ - **Installation via WP.org**: search in your WordPress plugin admin panel for "Iubenda Cookie Solution", install it;
111
+ - Once the plugin is installed and activated, go to the Admin Panel (Settings > Iubenda Cookie Solution) where you will be asked to paste the code into tht field that gets generated from your Iubenda account dashboard when you activate the cookie law kit for your privacy policy. For more information on how to activate the cookie law kit, see this article: https://www.iubenda.com/it/help/posts/680;
112
  - At this point the plugin will begin to show the banner on which displays your cookie policy (link) to users who visit the site for the first time. No need for other configurations;
113
  - Furthermore, the plugin automatically recognizes and blocks cookies that get installed via the YouTube video player and social widgets - such as the Facebook Like Box - on your site. **Important note** the scripts for Facebook, Twitter, G+, and YouTube iframe only get blocked automatically when generated from the server side (therefore processed by PHP via WordPress). Scripts that are added to the page via Javascript after page load cannot be blocked automatically;
114
  - The other scripts that install cookies for which the automatic block isn't yet available can and should be "wrapped" using these comments:
124
 
125
  ------ ITALIANO ------
126
 
127
+ - **Installazione automatica**: installa da WordPres.org cercando "Iubenda Cookie Solution";
128
+ - Una volta installato ed attivato il plugin, accedi al pannello Admin (Impostazioni > Iubenda Cookie Solution) dove ti verrà chiesto di incollare in un campo il codice che iubenda genera quando attivi il kit cookie law sulla tua privacy policy. Per ulteriori informazioni su come attivare il kit cookie law, consulta questo articolo: https://www.iubenda.com/it/help/posts/680;
129
  - A questo punto il plugin inizierà a mostrare il banner in cui è richiamata la tua cookie policy agli utenti che visitano il sito per la prima volta senza la necessità di altre configurazioni;
130
  - In più, il plugin riconoscerà e bloccherà in automatico i cookie installati da tutti i video player di YouTube e dai widget sociali – come il Facebook Like Box – presenti sul tuo sito. **Nota importante**: il nostro plugin wordpress blocca in modo automatico tutti gli script Facebook, Twitter, G+, iframe youtube che sono generati lato server (quindi restituiti via PHP da wordpress). Script che vengono inseriti nella pagina dopo il loading della pagina tramite Javascript non sono e non possono essere bloccati in modo automatico;
131
  - Gli altri script per i quali non è ancora disponibile il blocco automatico – e che installano cookie che richiedono il blocco prima del consenso – vanno “avvolti” utilizzando questi commenti:
150
 
151
  == Changelog ==
152
 
 
 
 
 
153
  = 1.11.1 =
154
  * New: Created a new option that disables the plugin on RSS feeds
155
  * New: Improved the control that checks if the request content type is HTML
156
  * Fixed an issue with the banner script
157
  * Fixed a series of conflicts with UTF-8 special characters caused by the experimental parsing engine
158
 
159
+ = 1.14.0-beta =
160
+ * New: Multilingual support
161
+ * Fix: Multiple classes no longer being added to script tags
162
+ * Fix: Buffering action hooks adjustments
163
+ * General rewrite using WordPress coding standards
164
+ * Turned into OOP
165
+
166
  = 1.11.0 =
167
  * New: Introduced a MUCH FASTER experimental parsing engine (visit the plugin options and select the experimental parsing engine)
168
  * New: Created a new option that allow users to enable/disable the parsing engine and to select the parsing engine between stable and experimental